为 root 用户清空文件不起作用

为 root 用户清空文件不起作用

我使用下面的命令来清空文件

> 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 -isudo /bin/bash

相关内容