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

ルートとしてファイルを空にするには、次のtruncateコマンドを使用することもできます。

$ sudo truncate -s0 file.txt

-s0ファイルサイズを0に設定して効果的に空にします。

答え2

sudo -iルートになって起動します(root-shellを使用)。

sudo走るために注文するrootとして実行されますが、>コマンドとして実行されるわけではありませんが、シェル内でリダイレクトとして実行されます。どちらもrootとして実行されません。

逃げたと言ってsudo cat foo > bar...

catルートとして実行すると、開くを含むすべてのタスクにアクセスして実行できます。「金持ち」あなた以外のユーザーが所有しており、すべての読み取り権限がオフになっていても同様です。

しかし、>属しているシェル sudo cat非rootユーザーと一般権限で実行して実行します。ファイルもあります。「バー」また、一般(rootではない)ユーザーとしてシェルを介してアクセスできるため、通常のユーザーは1)ディレクトリへの書き込み権限を持っているか、2)ファイルを所有する必要があります。他のユーザー(ルートを含む)がそのディレクトリまたはファイルを所有している場合、そのディレクトリまたはファイルにアクセスできません。

答え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

cat /dev/null > different-file.txt(ルートプロンプトで)試してみてください。

次のいずれかの方法でルートになりますsudo -isudo /bin/bash

関連情報