很多人可能已经看到了允许你在需要root权限的文件上写的命令,即使你忘了用sudo打开vim:
:w !sudo tee %
Run Code Online (Sandbox Code Playgroud)
问题是我不知道这里到底发生了什么.
我已经想到了这个:
w是为了这个
*:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
Run Code Online (Sandbox Code Playgroud)
所以它将所有行作为标准输入传递.
该!sudo tee部件tee使用管理员权限调用.
为了让所有人有意义,%应输出文件名(作为参数tee),但我找不到有关此行为的帮助的参考.
tl; dr有人可以帮我剖析这个命令吗?
我刚刚通过nodejs.org上的软件包安装了node和npm,每当我尝试使用npm搜索或安装某些内容时,它会抛出以下错误,除非我sudo命令.我觉得这是一个权限问题?我已经是管理员了.
npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack …Run Code Online (Sandbox Code Playgroud) 我已经在我们的一个开发RedHat linux盒子上获得了sudo访问权限,而且我似乎发现自己经常需要将输出重定向到我通常没有写入权限的位置.
麻烦的是,这个人为的例子不起作用:
sudo ls -hal /root/ > /root/test.out
Run Code Online (Sandbox Code Playgroud)
我刚收到回复:
-bash: /root/test.out: Permission denied
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它发挥作用?
对于Linux中的sudo权限,这是一个非常简单的问题,至少看起来应该是这样.
有很多的时候,我只是想将一些东西附加到/etc/hosts或类似的文件,但最终没有能够因为两者>并>>不准,甚至有根.
有没有必要让这项工作无需su或sudo su进入root?
当我使用sudo的任何命令时,环境变量不存在.例如,在设置HTTP_PROXY之后,该命令wget可以正常工作sudo.但是,如果我键入sudo wget它说它无法绕过代理设置.
我正在尝试使用makefile编译一些源代码.在makefile中有一堆需要运行的命令sudo.
当我从终端编译源时,一切正常,并且在第一次sudo运行命令等待密码时暂停make .输入密码后,进行简历并完成.
但我希望能够在NetBeans中编译源代码.所以,我开始了一个项目,并展示了netbeans在哪里可以找到源代码,但是当我编译项目时,它会给出错误:
sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
它第一次命中sudo命令.
我在互联网上查找了这个问题,我发现的所有解决方案都指向一件事:禁用此用户的密码.由于这里的用户是root用户.我不想那样做.
还有其他解决方案吗?
这是PATH没有sudo 的变量:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
这是PATHsudo 的变量:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Run Code Online (Sandbox Code Playgroud)
据我所知,sudo应该PATH保持不变.这是怎么回事?我该如何改变?(这是在Ubuntu 8.04上).
更新:据我所知,没有任何脚本PATH以任何方式作为root更改.
来自man sudo:
为了防止命令欺骗,当在用户的PATH中搜索命令时(如果一个或两个都在PATH中),sudo会检查``.''和``''(都表示当前目录).但请注意,实际的PATH环境变量未被修改,并且不会更改地传递给sudo执行的程序.
通常,使用用户root运行docker容器.我想使用不同的用户,使用docker的USER指令没问题.但是这个用户应该能够在容器内使用sudo.缺少此命令.
这是一个简单的Dockerfile用于此目的:
FROM ubuntu:12.04
RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker
USER docker
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)
运行此容器,我使用用户'docker'登录.当我尝试使用sudo时,找不到该命令.所以我尝试使用在我的Dockerfile中安装sudo包
RUN apt-get install sudo
Run Code Online (Sandbox Code Playgroud)
这导致无法找到包sudo
假设我想使用su或在现有的Emacs会话中打开一个文件sudo,而不是直接转到shell并执行sudoedit或sudo emacs.一种方法是
C-x C-f /sudo::/path/to/file
Run Code Online (Sandbox Code Playgroud)
[编辑] @JBB是对的.我希望能够调用su/ sudo保存以及打开.在保存时重新授权是可以的(但不是理想的).我正在寻找的是变化find-file,并save-buffer认为可能是"管道"通过su/ sudo.
我正在尝试在Cygwin中运行bash脚本.
我收到Must run as root, i.e. sudo ./scriptname错误.
chmod 777 scriptname 无济于事.
我已经找到了在Cygwin上模仿sudo的方法,添加一个root用户,因为调用"su"会导致错误su: user root does not exist,任何有用的东西,并且什么也没找到.
有人有什么建议吗?