Verwenden Sie Sudo als anderer Benutzer, um die Adresse Ihres Home-Verzeichnisses in einer TXT-Datei zu speichern.

Verwenden Sie Sudo als anderer Benutzer, um die Adresse Ihres Home-Verzeichnisses in einer TXT-Datei zu speichern.

Ich versuche, das Home-Verzeichnis eines Benutzers in einer users.txt-Datei zu speichern, aber ich speichere immer nur mein eigenes. Das Skript fordert den Benutzer auf, seinen Benutzernamen einzugeben, den ich in $username gespeichert habe. Wenn ich ausführe

ls ~ >> users.txt

Es zeigt ls home/student/am1014(das ist mein Benutzername)

Ich gehe davon aus, dass ich sudo zum Speichern verwenden muss, bin mir aber nicht sicher, wie.

Antwort1

In:

sudo -u joe ls ~

~wird von Ihrer Shell erweitert, bevor der Befehl ausgeführt wird (hier sudo), sodass tatsächlich Folgendes ausgeführt wird:

sudo -u joe ls /home/me

So listen Sie den Inhalt des joeHome-Verzeichnisses auf:

ls ~joe

Oder wenn Sie keinen Lesezugriff auf sein Home-Verzeichnis haben:

sudo -u joe ls ~joe

Oder für eine Shell, diealsjoeum das zu erweitern ~:

sudo -u joe sh -c 'ls ~'

Beachten Sie, dass Sie diesen Ansatz außer in csh/ tcsh/ zshnicht verwenden können, ls ~joewenn der Name des Benutzers in einer Variablen steht. Abhängig von der Shell

user=joe
echo ~$user

/home/mejoewürde entweder oder ausgeben ~joe. In würde bash, wenn ein Benutzer (buchstäblich) aufgerufen wurde $user, sein Home-Verzeichnis zurückgegeben.

Hierfür benötigen Sie:

eval "ls ~$user"

(Sie hätten $uservorher sichergestellt, dass es einen gültigen Benutzernamen enthält).

Antwort2

Der folgende Befehl liest /etc/passwdund gibtusername : home-dir

awk -F: '{print $1":" $6}' /etc/passwd

Die Ausgabe sieht ungefähr so ​​aus:

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games

Sie können die Ausgabe folgendermaßen in eine Datei umleiten:

awk -F: '{print $1":" $6}' /etc/passwd > result.txt

verwandte Informationen