ユーザー名を使用してログインしました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
ああ!どうして所有者が変わったの?私ではなくルートです。なぜ と でこんなに変化したのかecho
!vim
と で驚きました。指揮権の変更作成されたファイルの所有者はどのように変更できますか。
答え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 a3
sudo を使用する例では、vim a3
root として実行されます。また、vim は root として実行されるため、ファイルの所有者は root になります。