
私のユーザー名を使用してログインします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
上記のファイルの所有者は私()です。
echo
次に、sudoと次のコマンドを使用してa2を作成します。
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
/tmp/fooから/etc/passwdの内容を取得できません。あなたはそれを持つでしょうcat /etc/passwd
。 sudoも例外ではありません。 echo部分はsudoのパラメータにすぎません。 sudoはそれを使って何かをしますが、シェルはそれを知りません。
これはsudoアクセスがrootアクセスと非常に異なる点の1つです。
sudo vim a3
たとえば、vim a3
sudoを使用してrootとして実行します。そしてvimはrootとして実行されるので、ファイルはrootが所有します。