Der Befehl `ls` listet nicht den neuesten Verzeichnisinhalt auf

7

Die Linux-Shell druckt keine aktuellen Informationen, wenn es um ls geht. Zum Beispiel verwende ich meine anderen Prozesse (IDEs usw.), um einige Verzeichnisse zu erstellen. Wenn ich jedoch einen ls-Befehl ausführe, werden diese Verzeichnisse nicht angezeigt. Normalerweise dauert es einige Sekunden, manchmal Minuten, bis dieses Verzeichnis in der ls-Ausgabe angezeigt wird.

Was ist los? Kann ich eine Aktualisierung erzwingen? Wenn ich "ls" sage, möchte ich im Idealfall den Status sehen, wenn ich den Befehl eingegeben habe, nicht ein zwischengespeichertes Ergebnis.

Das Dateisystem ist keine NFS-Freigabe. Das einzige andere, was mir einfällt, ist, dass das Verzeichnis von einem Programm erstellt wurde, als es von Eclipse ausgeführt wurde (und die Anzeige an meine lokale Windows-Box weitergeleitet wurde).

Ich weiß nicht, wie sich das auf die Dinge auswirken kann.

Ruhiger Sturm
quelle
Es ist ein langer Weg, aber sind Sie absolut sicher, dass das Verzeichnis zum Zeitpunkt der Ausführung von ls auf der Festplatte erstellt wird? Haben Sie \/bin/lsnicht nur versucht ls, Shell-Builds oder Aliasing-Probleme auszuschließen?
ein CVn
Es ist unwahrscheinlich, auf welchem ​​Dateisystem laufen Sie ls?
Gänseblümchen
Mmmm es ist definitiv nicht konsistent reproduzierbar. Ich werde von nun an / bin / ls verwenden. @ warl0ck Ich verstehe nicht was deine Frage bedeutet? Ich verwende ls auf einer Standard-Bash-Shell.
Ruhiger Sturm

Antworten:

14

lshat nichts mit bashoder irgendeiner Shell zu tun . Es listet den Inhalt eines Verzeichnisses auf, ausgenommen versteckte Dateien (solche, deren Name mit a beginnt .), indem diese Liste vom Kernel angefordert wird

Wenn lssie nicht angezeigt werden, sind sie nicht vorhanden (was das Betriebssystem betrifft) oder Sie listen das falsche Verzeichnis auf.

Dies kann beispielsweise passieren, wenn das aktuelle Verzeichnis unter Ihren Füßen umbenannt wurde. Mögen:

$ pwd
/tmp/1
$ ls
x
$ mv /tmp/1 /tmp/2
$ pwd
/tmp/1 # (/tmp/1 has been renamed but the shell is not aware of it)
$ mkdir /tmp/1
$ touch /tmp/1/y
$ pwd
/tmp/1
$ ls  # (ls is still listing `.` which has not changed, but now is a hardlink to `/tmp/2`, while `/tmp/1` is some new directory)
x
$ pwd -P  # (double check what the current directory is)
/tmp/2
$ cd /tmp/1
$ ls
y
Stéphane Chazelas
quelle
2
Aah, Sie haben Recht, meine Anwendung hat das Verzeichnis verschoben und an seiner Stelle ein leeres Verzeichnis erstellt. Es tut mir leid.
Ruhiger Sturm
Ich habe ein noch schwieriger zu fassendes Szenario - CD in ein Verzeichnis, Init (Gerüst) eines Projekts darin und ls zeigt nichts an - das Verzeichnis wird beim Kopieren durch das Vorlagenprojekt ersetzt. pwd zeigt den richtigen Pfad, aber ls zeigt nichts. cd out-and-in-again und ls wird alles zeigen. Dies ist keine Option für meine Benutzer (ich kopiere den Inhalt der Vorlage anstelle des gesamten Verzeichnisses). :) Danke für die Antwort.
Nikolay Tsenkov