Ich möchte herausfinden, welche Dateilinks es gibt, die auf meinen /tmp
Ordner auf Ubuntu verweisen.
Hintergrund:
Ich hatte ein Problem, dass meine /tmp
Ordnerberechtigungen versehentlich auf 755 geändert wurden. Das System lief als anderer Benutzer als Root nicht mehr ordnungsgemäß.
Vielleicht gibt es /tmp
irgendwo einen Link und den Befehl
chmod 755 . -Rf
Der dort in diesem Ordner aufgerufene Ordner wirkte sich auf den Hauptordner aus /tmp
.
Ich musste es reparieren mit:
chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp
Ich habe nur ein Dateisystem, daher sollte es diesbezüglich kein Problem geben.
Antwort1
Versuche dies:
find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;
Beispielausgabe:
# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied
Antwort2
Soweit ich weiß, gibt es keine einfache Möglichkeit, alle Symlinks aufzulisten, die auf einen Inode verweisen. Daher würde ich empfehlen, den Standard zu verwendenfindenDienstprogramm mit dem-LUnd-gleicheDateiSchalter:
- -gleicheDateivergleicht auf Basis des Inodes Ihrer Zieldatei,
- -Lschließt symbolische Links in die Suche ein, also genau das, wonach Sie suchen.
Hier ist ein Beispiel mit /bin/dash in /bin:
$ find -L /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29 2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29 2012 /bin/dash
An dieser Ausgabe können Sie sowohl anhand der Inode-Nummer (erste Spalte) als auch anhand des Pfeils (letzte Spalte) erkennen, dass /bin/sh ein Symlink zu /bin/dash ist. Wenn es sich um Hardlinks handeln würde, wäre die Inode-Nummer für verschiedene Dateien dieselbe und in der letzten Spalte gäbe es keinen Pfeil.
Wenn ich schließlich nach diesen Links in einem ganzen Dateisystem suchen müsste, würde ich einige Verzeichnisse ausschließen, wie z. B./Entwickler,/procUnd/sysaus der Suche. Dies geschieht mit dem-WegUnd-pruneSchalter (Sie können beliebig viele hinzufügen mit-ÖSchalter Bedeutungoder),2>/dev/nulldient dazu, mögliche Fehler zu maskieren:
$ sudo find -L / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null
Da die Suche in einem gesamten Dateisystem sehr viel Zeit in Anspruch nehmen kann (hauptsächlich abhängig von seiner Größe), werde ich diese Option nur als letzten Ausweg in Betracht ziehen. Es ist wie die Suche nach der Nadel im Heuhaufen: Es ist nicht unmöglich, aber es erfordert viel Mühe ...
Antwort3
Ich habe die Antwort dank dieser Frage gefunden:Linux: Alle symbolischen Links einer gegebenen „Originaldatei“ finden? (umgekehrter „Readlink“)
find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/