![为 root 用户清空文件不起作用](https://linux22.com/image/55502/%E4%B8%BA%20root%20%E7%94%A8%E6%88%B7%E6%B8%85%E7%A9%BA%E6%96%87%E4%BB%B6%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我使用下面的命令来清空文件
> file.txt
它工作得很好!但有一些文件具有root
用户权限。所以我尝试了
sudo > different-file.txt
我得到了下面的详细信息
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s]
[<command>]
usage: sudo -e [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...
这表明我的命令中存在一些语法错误。
怎么了?
答案1
要以 root 身份清空文件,还可以使用以下truncate
命令:
$ sudo truncate -s0 file.txt
将-s0
文件的大小设置为 0,有效地清空它。
答案2
sudo -i
首先使用成为root(使用root-shell)。
sudo
用于运行命令作为 root,但>
不是命令,而是 shell 内的重定向 - 两者都不是由 root 运行的。
说你跑sudo cat foo > bar
...
cat
以 root 身份运行,可以访问并执行任何操作 - 包括打开“富”即使它由您以外的其他用户拥有并且所有读取权限都已关闭。
但>
属于壳 sudo cat
运行并以您(非root)和您的正常权限运行。还有文件“酒吧”也可以作为您的普通(非 root)用户访问(通过 shell),因此您的普通用户必须 1) 具有对该目录的写权限或 2) 拥有该文件。如果该目录或文件由其他用户(包括 root)拥有,您将无法访问它。
答案3
我创建了一个名为的新文件new
,该文件现在由 root 用户拥有,如下所示。
ls -lat new
-rw-r--r-- 1 root root 42 Sep 9 13:37 new
现在,我以普通用户身份登录,然后尝试使用以下命令删除该文件的内容。
sudo sh -c " > /root/new"
现在,我可以通过再次以 root 身份登录来验证内容是否已被删除。
ls -lat new
-rw-r--r-- 1 root root 0 Sep 9 13:42 new
参考
这答案有以下要说的。
或者,您可以运行 sudo sh -c "echo 'text' >> /file.txt",这也可以,但如果您有复杂的表达式,所有插值/转义可能会造成干扰,这有点麻烦。
但是,由于您只是清空文件,我相信您的情况应该不会有任何并发症。
答案4
sudo > different-file.txt
不带参数启动sudo
,并将标准输出重定向到different-file.txt
. (当没有给出参数时,Sudo 可能不会向标准输出输出任何内容,因此,如果您有权覆盖,您可能会截断该文件(如果存在)。
请尝试cat /dev/null > different-file.txt
(从 root 提示符)。
通过以下任一方式成为 rootsudo -i
或sudo /bin/bash