Ich habe mich mit meinem Benutzernamen angemeldet ravbholua
:
ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua
Ich erstelle eine Datei mit dem Namen 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
Wie erwartet ist der Eigentümer der obigen Datei ich ( ravbholua
).
Als nächstes erstelle ich a2 mit sudo mit echo
dem Befehl:
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
Der Eigentümer bin ausschließlich ich, d. h ravbholua
.
Jetzt erstelle ich a3 erneut mit sudo, aber mit vim
dem Befehl:
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
Oh! wie kommt es, dass der Besitzer jetzt wechselt? Es bin nicht ich, sondern root. Warum so eine Variation mit echo
und vim
! Es ist eine Überraschung, dass mitÄnderung der Befehlewie kann sich der Besitzer der erstellten Datei ändern.
Antwort1
Das zweite Beispiel läuft echo
unter sudo
, aber dieUmleitunggeschieht unter der ursprünglichen Hülle.
sudo bash -c "echo > a4"
Antwort2
sudo
ist nur ein Befehl.
Also für Ihr erstes Beispiel:
sudo echo>a2
sudo
ist der Befehl. Und solange die Umleitung gegen das Echo stößt, bedeutet das nichts.
Beispiel:
echo cat /etc/passwd > /tmp/foo
Sie erhalten nicht den Inhalt von /etc/passwd in /tmp/foo. Sie erhalten nur cat /etc/passwd
. sudo ist nicht anders. Der Echo-Teil ist nur ein Argument für sudo. sudo verwendet ihn zwar, um Dinge auszuführen, aber die Shell weiß das nicht.
Dies ist einer der Punkte, in denen sich der Sudo-Zugriff stark von der Ausführung als Root unterscheidet.
In Ihrem Beispiel sudo vim a3
wird sudo vim a3
für Sie als Root ausgeführt. Und vim wird als Root ausgeführt, sodass die Datei Root gehört.