sudo コマンドを使用してファイルが作成された場合、ファイルの所有者は誰ですか?

sudo コマンドを使用してファイルが作成された場合、ファイルの所有者は誰ですか?

ユーザー名を使用してログインしましたravbholua:

ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua

次のような名前のファイルを作成しますa1:

ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a1

予想どおり、上記のファイルのravbholua所有者は私 ( ) です。

次に、sudo コマンドを使用して a2 を作成しますecho

ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a2

所有者は私だけ、つまり ですravbholua

ここで、再度 sudo を使用して a3 を作成しますが、vimコマンドは次のようになります。

ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct  8 09:57 a3

ああ!どうして所有者が変わったの?私ではなくルートです。なぜ と でこんなに変化したのかechovimと で驚きました。指揮権の変更作成されたファイルの所有者はどのように変更できますか。

答え1

2番目の例echoは で実行されますsudoが、リダイレクション元のシェルの下で発生します。

sudo bash -c "echo > a4"

答え2

sudo単なる命令です。

最初の例は次のようになります。 sudo echo>a2

sudoはコマンドです。リダイレクトがエコーに隣接している限り、それは何の意味もありません。

たとえば、 echo cat /etc/passwd > /tmp/foo /etc/passwd の内容は /tmp/foo には取得されません。 だけが表示されますcat /etc/passwd。sudo も同様です。echo 部分は sudo への引数にすぎません。sudo はこれを使用して何かを実行しますが、シェルはそれを認識しません。

これは、sudo アクセスが root として操作する場合と大きく異なる点の 1 つです。

sudo vim a3sudo を使用する例では、vim a3root として実行されます。また、vim は root として実行されるため、ファイルの所有者は root になります。

関連情報