次のコマンドを使用してファイルを消去します。
> 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 -i
。sudo /bin/bash