dauert lange in einem kleinen Verzeichnis

dauert lange in einem kleinen Verzeichnis

Unter Ubuntu öffne ich ein Terminal und mache

sudo bash
cd /
ls | head -n 1000

Und vorhersehbar werden etwa 20 Verzeichnisse zurückgegeben.

Wenn ich jedoch ein „ls“ ausführe und es nicht irgendwohin weiterleite, bleibt das „ls“ einfach dort hängen, bis ich es von einem anderen Terminal aus beende. Was könnte passieren?

BEARBEITEN:

> type ls
ls is aliased to `ls --color=auto`

BEARBEITEN:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

Warum führt das Einfärben der Ausgabe von ls dazu, dass dieser Befehl hängen bleibt?

Antwort1

Wenn Sie ls normal ausführen, wird nur die Liste der Dateien angezeigt, ohne dass Sie stat(2) für eine davon ausführen müssen. Mit anderen Worten, es greift nicht auf die DATEIEN selbst zu, sondern nur auf das Verzeichnis, das die Dateien enthält.

Wenn Sie die Option --color hinzufügen oder andere ls-Optionen verwenden, die die Dateien selbst untersuchen müssen, muss ls diese Dateien mit stat(2) ausführen.

Höchstwahrscheinlich wird mindestens eine der Dateien in Ihrem Verzeichnis tatsächlich von einem Remote-System über NFS oder Ähnliches gemountet. Und der Server, von dem aus Sie diese Partition gemountet haben, ist nicht aktiv oder antwortet nicht. Wenn ls also versucht, die Informationen zu diesem Verzeichnis abzurufen, bleibt es im Kernel hängen und wartet auf die Antwort des Servers.

Wie andere bereits erwähnt haben, können Sie mit strace herausfinden, auf welches Verzeichnis ls zuzugreifen versucht, wenn es hängt. Anschließend können Sie die gemountete Partition umounten oder was auch immer.

verwandte Informationen