Ich weiß nicht, wie ich diese Situation debuggen soll:
1) Ich versuche auszuführen:
ls /home/user
2) ls blockiert und druckt nichts. Ich gehe davon aus, dass / home / user / home / user / sshfs_files enthält, ein von sshfs gemountetes Verzeichnis, aber das Netzwerk ist auf meinem Computer ausgefallen (das Netzwerk ist wieder aktiv, aber ich denke, die SSH-Verbindung wurde unterbrochen).
3) Da ich sicher sein wollte, dass das von sshfs gemountete Verzeichnis die Ursache für dieses Auflegen war, versuchte ich den gleichen Befehl unter strace:
strace -o /tmp/log ls /home/user
4) Und das ls hat tatsächlich funktioniert! Jetzt ist die Situation so, dass ls unter Zwang arbeitet, aber von selbst blockiert.
Wie ist das überhaupt möglich? Wie kann man diese Situation erklären? Wie kann ich sehen, wo ls blockieren, wenn es nicht unter Zwang blockiert?
Vielen Dank!
quelle
ls /home/user | cat
? Dies könnte einfachls
erkennen, wie seine Ausgabe behandelt wird ...ls
(bei typischen Setups) farbig ist. Das Färben ist nur dann erwünscht, wenn die Ausgabe nicht umgeleitet wird, da sonst die Escape-Sequenzen die Ausgabe durcheinander bringen würden. Und um die Ausgabe farbenfroh zu gestalten,ls
muss der Typ jedes Eintrags festgelegt werden. An diesem Punkt hängt es mit Ihremsshs_files
Verzeichnis.Antworten:
Wie jw13 hervorhob , ist dies fast ein genaues Duplikat von "Es dauert lange in einem kleinen Verzeichnis " - zumindest was die Erklärung betrifft. Lesen Sie auch dort die Kommentare!
Kurz gesagt, einige gängige Befehlszeilenprogramme wie
ls
können anders funktionieren, wenn ihre Ausgabe nicht direkt an ein Terminal geht. In diesem Fall,ls
der wahrscheinlich auf Alias ausgerichtet ist,ls --color=auto
wird versucht, den Typ jedes Verzeichniseintrags zu Farbzwecken zu ermitteln. An seinem Punkt hängt es und kann keinestat
Operation für Ihr sshfs-gemountetes Verzeichnis ausführen .Hinzufügen zu MadScientists Antwort auf die erwähnte Frage : Wenn Sie neugierig sind, wie
strace
odergdb
beim Debuggenls
des Verhaltens helfen kann , schlage ich vor, dass Sie so etwas ausführenquelle
Nun, das ist ein häufiges Verhalten für Programme, die unter Debugging stehen und nicht wirklich vermeidbar sind. Die Initialisierung von Variablen ändert sich, es stehen weitere Informationen zur Verfügung, der Programmablauf wird geändert.
Entweder erhalten Sie die Quelle von ls und führen sie durch einen anderen Debugger, in der Hoffnung, dass der Fehler angezeigt wird, oder Sie versuchen, eine Antwort zu finden, eine Problemumgehung auf andere Weise.
quelle
ls [^s]*
zum Beispiel das sshfs-Verzeichnis filtern ? Was ergibt sichfind ~ maxdepth -1 -ls
?