Alle vorhandenen Links erkennen, die auf /tmp verweisen?

Alle vorhandenen Links erkennen, die auf /tmp verweisen?

Ich möchte herausfinden, welche Dateilinks es gibt, die auf meinen /tmpOrdner auf Ubuntu verweisen.

Hintergrund:
Ich hatte ein Problem, dass meine /tmpOrdnerberechtigungen versehentlich auf 755 geändert wurden. Das System lief als anderer Benutzer als Root nicht mehr ordnungsgemäß.

Vielleicht gibt es /tmpirgendwo 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 mitSchalter 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/

verwandte Informationen