Wie kann ich feststellen, ob ein Ordner tatsächlich ein Symlink ist, und wie kann ich ihn reparieren, wenn er defekt ist?

28

Wie kann ich feststellen, ob ich unter Linux einen Symlink, eine Verknüpfung oder einen Ordner habe? Bitte sehen Sie folgenden Screenshot.

symbolischer link in der linux shell

Wie Sie sehen, lslistet der Befehl Objekte auf, bei denen einige dunkelblau und andere hellblau (cyan) gefärbt sind. Was sind diese Objekte in Cyan? Handelt es sich um tatsächliche symbolische Links?

Wie Sie sehen können, kann ich nicht cdzu dem namens HDD.

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

Ich denke, es muss umleiten /media/hddund ich habe festgestellt, dass der Festplattenordner fehlt.

Gibt es eine Möglichkeit, dies zu beheben?

Update: Hier sind die Ergebnisse des ls -alBefehls.

symbolischer link in der linux shell 2

Wie Sie sehen, heißt es hdd -> /media/hddund es ist rot gefärbt. Bedeutet dies, dass es kaputt ist oder automatisch bereitgestellt wird, dh wenn eine physische Festplatte angeschlossen ist?

Update: Hier ist das Ergebnis des grep media /etc/auto*Befehls.

symbolischer link in der linux shell 3

Was machen diese /etc/auto.master:/media/netund /etc/auto.networkEinträge?

Hier sind die Ergebnisse des ls -Fal /mediaBefehls.

symbolischer link in der linux shell 4

Hilft das? ...

Hier finden Sie Ergebnisse statund fileBefehle sowie Auflistungen von / usr und / bin.

symbolischer link in der linux shell 5

Hilft mir das in irgendeiner Weise? ... Hilft es Ihnen, mir zu helfen? ...

Als eine Seite nicht, was Sie wissen sollten, ist, dass dies eine Linux-basierte STB mit BusyBox ist, es ist ein eingebettetes System. Daher werden möglicherweise nicht alle Befehle unterstützt.

Update: Letzter Screenshot mit Dateien und unterstützten Befehlen in / sbin und / usr / sbin.

symbolischer link in der linux shell 6

Update: Neue Freigabe hinzugefügt ...

Ich habe jetzt diese alte Freigabe entfernt und eine mit dem gleichen Namen wie zuvor neu erstellt und jetzt auch eine zweite Freigabe hinzugefügt. Jetzt habe ich zwei davon.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

Die Aufnahmen befinden sich in / media / net / dream1 / movie.

Außerdem habe ich für die Freigabe dream2 beschlossen, sie nicht als Festplattenersatz im Mount Manager bereitzustellen, da ich vermute, dass nicht mehr als eine Festplatte als Festplatte fungieren kann. Wo würde es aufnehmen? Zu beiden Orten? Mit der doppelten Datenrate? ... Ich denke nicht, dass es möglich ist.

Aus diesem Grund gibt es für die dream2-Freigabe keinen Unterordner mit dem Namen movie. Nur diejenigen, die beim Erstellen als Festplattenersatz angegeben wurden, erhalten den Filmunterordner.

Wenn ich cdvon der Wurzel auf hdd geht es zu /media/net/dream1. Wenn ich cdzu ..(Elternteil) es geht zurück zu root (/).

An der Wurzel ls -algibt hdd -> media/hdd. ls -al hddgibt hdd -> media/hdd. ls -al mediagibt /media/net/dream1.

Auch wenn ich cddazu einen /mediaanderen hddSymlink habe. Ich habe es vorher nicht bemerkt. Ich denke, dies wird automatisch erstellt, wenn eine Freigabe eingehängt wird. Und wenn ich cdzu dieser Festplatte gehe geht es zu /media/net/dream1.

Ein Symlink hdd(/ hdd), der auf einen anderen hddSymlink (/ media / hdd) verweist, der wiederum auf den Freigabeordner (/ media / net / dream1) verweist? ..... Mir wird schwindlig ...

Dies war vor Version 3.2.3 oder mindestens 3.2.0 des Enigma2-Images nicht der Fall.

Bearbeiten: Durch Einstellen der zweiten Freigabe als Festplattenersatz wird diese zur aktiven Freigabe für die Aufnahme. Gleichzeitig ist die Freigabe, die zuvor als Festplattenersatz festgelegt wurde, nicht mehr aktiv, auch wenn sie weiterhin auf "Ja" festgelegt ist (als Festplattenersatz fungieren).

Wenn dream1 zuerst als Ersatz für die Festplatte verwendet wurde ("yes" als Ersatz) und dream2 dann als Ersatz für die Festplatte festgelegt ist, wird es zur neuen Freigabe für die Aufnahme. Ich kann weiterhin in dream1 gespeicherte Videodateien anzeigen, aber nicht mehr aufzeichnen. Wenn ich wieder dream1 für die Aufnahme verwenden möchte, muss ich zunächst dream2 auf "no" setzen (nicht mehr als Festplattenersatz fungieren) und dann dream1 auf "yes" zurücksetzen.

Nein, es kann nicht gleichzeitig auf zwei Freigaben aufgezeichnet werden. Einer von ihnen muss gehen. Es ist also entweder Traum1 oder Traum2, nicht beides. Obwohl ich erwähnen sollte, dass es möglich ist, mehr als einen Dienst (Fernsehsender) aufzuzeichnen, wenn beide auf demselben Transponder sind, erhalten Sie andernfalls die Meldung "no free tuner". Dies ist ein STB mit nur einem Tuner.

Samir
quelle
3
Bitte keine Screenshots für Text einfügen. Kopieren Sie stattdessen den Text und fügen Sie ihn ein. Verwenden Sie die Vor- oder Code-Tags oder Backticks, um Einrückungen / Formatierungen beizubehalten. Bearbeiten Sie den Text auf das erforderliche Minimum, um anzuzeigen, was auch immer Sie anzeigen möchten. Übrigens besteht ein Problem bei Screenshots darin, dass winzige Schriftarten bei der Anzeige auf Bildschirmen mit höherer Auflösung (z. B. 1920 x 1200 oder 2566 x 1440) noch winziger werden und der Text skaliert werden kann.
cas
@CraigSanders Sanders Du bist hoch ... auf Auflösung! ;) Seltsamerweise höre ich dich, Mann! Ich habe nicht wirklich über diesen Aspekt nachgedacht. Danke für den Tipp. Ich werde das nächste Mal versuchen, einen Codeblock zu verwenden.
Samir
In ls -alWirklichkeit werden alle Dateien (-a) in einer langen (-l) Liste angezeigt. Ja, das gibt mir mehr Informationen, aber hilft es mir, einen symbolischen Link zu identifizieren? Wenn es einen Pfeil nach rechts gibt, kann ich dann feststellen, ob es sich um einen symbolischen Link handelt? Die andere Kennung ist natürlich der Farbcode, aber einige von Ihnen schlagen vor, dass die Farbe nicht vertrauenswürdig ist.
Samir
Dies ist kein Problem mehr. Ich habe eine Windows CIFS-Freigabe über das Mount Manager-Plugin (Dreambox, Enigma 2, Version 3.2.3) bereitgestellt und mich für die Verwendung als Festplattenersatz entschieden. Danach ls -alzeigte der Befehl hdd -> media/hdd. Und jetzt ist es möglich cdzu hdd und der Link funktioniert. Aber was interessant ist, dass ls -al mediaShows hdd -> /media/net/mydreamund dies ist in der Tat, wo es geht, wenn ich cdauf HDD. Der "mydream" ist der Name der Freigabe. Warum erhalte ich unterschiedliche Ergebnisse?
Samir
Ich vermute, dass es einen Mechanismus gibt (möglicherweise eine udev-Regel), mit dem sichergestellt wird, dass der / hdd-Symlink so aktualisiert wird, dass er auf das jeweilige Gerät oder die Freigabe verweist, das bzw. die bereitgestellt wird, sodass andere Programme und Skripte einfach / hdd verwenden können (nachdem das Verzeichnis getestet wurde) es zeigt auf eine gemountete fs). Was passiert aus Neugier, wenn Sie ein zweites Laufwerk oder eine Freigabe aktivieren? Macht es einen / hde-Symlink? oder ist die dreambox auf ein aufnahmeverzeichnis beschränkt?
cas

Antworten:

29

Sie können file, stat oder ls verwenden.

Datei:

Mit dem Befehl file werden Dateien unabhängig von ihrer Erweiterung nach Typ (Symlink, Verzeichnis, Gerät) oder Inhalt (Text, GZIP, Bild, TAR, ...) klassifiziert:

$ file / dev / stdout
/ dev / stdout: symbolischer Link zu `/ proc / self / fd / 1 '
$ file / proc / self / fd / 1
/ proc / self / fd / 1: symbolische Verknüpfung zu `/ dev / pts / 0 '
$ file / dev / pts / 0
/ dev / pts / 0: Zeichen Spezial (136/0)
$ file / etc / passwd
/ etc / passwd: ASCII-Text

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1 root root 15 Jan 27 07:55 / dev / stdout -> / proc / self / fd / 1

stat:

Der Befehl stat gibt Dateimetadaten wie Berechtigungen, Größe, Anzahl der Blöcke usw. aus.

$ stat / dev / stdout
  Datei: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Größe: 15 Blöcke: 0 IO Block: 4096 symbolische Verknüpfung
Gerät: 5h / 5d Inode: 1212 Links: 1
Zugriff: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Access: 2014-01-27 11: 22: 47.971187828 -0200
Ändern: 2014-01-27 07: 55: 13.996981285 -0200
Änderung: 27.01.2014, 07: 55: 13.996981285 -0200
 Geburt: -
filipenf
quelle
Was bezieht file hddsich auf? Ich verstehe es nicht ...
Samir
Das stat hddgibt mir -sh: stat: not found.
Samir
Ich glaube, Sie haben den Befehl stat nicht (oder er befindet sich nicht in Ihrem $ PATH). Wie auch immer, der Befehl file kann Ihnen eine
Chance
Für Bash auf dem Mac-Terminal folgt der Dateibefehl standardmäßig Symlinks. Wenn Sie sehen möchten, ob es sich um einen Symlink handelt, fügen Sie den Befehl -h hinzu. Was Symlinks nicht folgt.
ClintM
7

bash:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi
Glenn Jackman
quelle
3

Der einfachste Weg, um herauszufinden, um welche Art von Entität es sich bei einer bestimmten Datei handelt, ist die Verwendung des fileBefehls. Die Ausgabe ist klar und vernünftig, ohne dass Sie sich daran erinnern müssen, wie die lsKlassifikatorzeichen lauten, oder dass Sie sich auf farbige Ausgaben verlassen müssen, die von Benutzer zu Benutzer und von Maschine zu Maschine variieren können. Beispielsweise:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Wenn Sie sich auf einem System befinden, ohne dass fileSie sich befinden, können Sie den statBefehl verwenden, der Ihnen sagt, um welche Art von Dateieintrag es sich handelt und wohin er zeigt. Um herauszufinden, ob ein Link defekt ist, müssen Sie stat -LLinks dereferenzieren. Wenn der Link defekt ist, wird ein Fehler ausgegeben.

Was den zweiten Teil Ihrer Frage mediabetrifft , wird das Verzeichnis häufig von Automountern verwaltet. Der /media/hddEintrag wird möglicherweise von Ihrem System für USB-Massenspeichergeräte verwendet oder wartet möglicherweise sogar auf den richtigen Festplattentyp (ATA vs. SCSI vs. Xen-Block-Gerät). Unterbrochene Links schaden nichts, es sei denn, ein Programm versucht, sie zu verwenden, und die Medienlinks dienen wirklich Ihrer Bequemlichkeit. Sie können den /hddLink ohne Bedenken verlassen oder nach Belieben entfernen.

Joruffin
quelle
Sie haben recht, sieht aus wie Datei ist kein Befehl hier, heißt es, -sh: file: not foundwenn ich fileund eingeben.
Samir
Klingt so, als ob Ihr $ PATH etwas eingeschränkt wäre. Versuchen Sie es stattdessen direkt auszuführen:/usr/bin/file
joruffin
Ich sehe aus Ihrem anderen Kommentar, dass Sie auf einer Set-Top-Box sind. Möglicherweise ist nichts anderes als Busybox installiert, und Busybox emuliert den fileBefehl nicht, unterstützt den statBefehl jedoch, wenn er kompiliert wurde. Möglicherweise befindet er sich weiterhin außerhalb von $ PATH oder an einem unbekannten Ort wie / sbin / stat oder / usr / sbin / stat.
Joruffin
Es sieht nicht so aus, als hätte es Unterstützung für entweder fileoder stat. Ich habe die von Ihnen angegebenen Pfade eingecheckt (siehe Abbildung oben). Wie auch immer ... Sie sagen, dass in einem idealen Linux-System der fileBefehl, gefolgt vom Suchpfad der Zieldatei oder des Zielordners, mir verraten würde, um welche Art von Entität es sich handelt?
Samir
2
Die unterstützten Befehle in Busybox können Sie ausführen /usr/bin/busyboxund es werden alle Befehle angezeigt, für die es Unterstützung gibt, auch wenn die Befehle nicht installiert sind. Um einen Busybox-Befehl zu verwenden, können Sie ihn ausführen /usr/bin/busybox <command> <parameters>. Wenn also angegeben wird, dass der Befehl stat unterstützt wird, können Sie ihn ausführen /usr/bin/busybox stat /hdd. Zur einfachen Verwendung können Sie Symlinks für Busybox mit dem Namen des aufzurufenden Befehls erstellen. Wenn es den Befehl stat unterstützt, können Sie die Ausführung vereinfachen ln -s /usr/bin/busybox /usr/bin/stat.
Joruffin
1
  1. Ja, Cyan sind symbolische Links
  2. Um zu sehen, wohin sie zeigen: ls -Fal
  3. Ausgabe ls -Fal /media

Dies ist wahrscheinlich eine Art Automount-Punkt.

grep media /etc/auto* könnte einen Treffer produzieren.

Nils
quelle
Was ist ein Automount-Punkt? Sie meinen, wenn ich ein physisches SATA-Laufwerk einstecke, wird es bis zu diesem Punkt gemountet? Dies ist eine Linux-STB, die keine eingebaute Festplatte hat, aber einen eSATA-Anschluss auf der Rückseite hat. Dies könnte für diesen Zweck vorgesehen sein.
Samir,
@Sammy Yes /mediaist der Standard-Mountpoint für PnP-Geräte.
Nils