Wenn ich zum ersten Mal ein Terminal öffne oder ein neues öffne, nachdem ich es eine Weile nicht benutzt habe, wird jede Art von Tab-Vervollständigung in meinem Home-Verzeichnis (zum Beispiel ls
und Tab ) dauert einige Sekunden. Ich habe dieses Verhalten schon einmal bei der Verwendung von autofs
gesehen um Netzlaufwerke zu mounten, aber ich habe keine in ~/
. Ich mounte NFS-Freigaben mit dem Automount von systemd, aber diese befinden sich in ~/badabing/
, also alles in ~/
selbst ist nur eine lokale Datei.
Falls es sich um ein Automount-Problem handelt, finden Sie hier die relevanten /etc/fstab
Zeilen (ja, der Server heißt „badabing“, ich habe ihn vor ein paar Jahren während einer Sopranos-Binge genannt):
badabing:/nfs_shares/music /mnt/badabing/music nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
badabing:/nfs_shares/series /mnt/badabing/series nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
badabing:/nfs_shares/movies /mnt/badabing/movies nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
Dann in ~/badabing
Ich habe:
$ ls -l ~/badabing/
total 0
lrwxrwxrwx 1 terdon terdon 32 Jan 10 2016 movies -> /mnt/badabing/nfs_shares/movies/
lrwxrwxrwx 1 terdon terdon 31 Jan 10 2016 music -> /mnt/badabing/nfs_shares/music/
lrwxrwxrwx 1 terdon terdon 31 Jan 10 2016 series -> /mnt/badabing/nfs_shares/series
Ich würde das gerne genauer untersuchen. Kann ich irgendwie strace
Tab-Vervollständigung? Ist die einzige Möglichkeit, echo
hinzuzufügen Befehle in den verschiedenen Bash-Vervollständigungsskripten, um zu sehen, was hängt? Davon gibt es einige, also würde ich das wirklich lieber vermeiden.
Also, was verursacht das oder zumindest, wie kann ich es weiter debuggen?
Akzeptierte Antwort:
Ich würde dies tun:
sudo strace -pXXXX -tfo /tmp/strace.log
wobei XXXX ist die Prozess-ID von bash. Bei einer schnellen Überprüfung der Dateinamenvervollständigung in einem meiner NFS-gemounteten Verzeichnisbäume funktioniert es ohne Probleme:
-f
Untergeordnete Prozesse verfolgen, wie sie von derzeit verfolgten Prozessen als Ergebnis des Systemaufrufs fork(2) erstellt werden.
-t
Stellen Sie jeder Zeile der Ablaufverfolgung die Tageszeit voran.
Einige Leute bevorzugen vielleicht -r
:
-r
Drucken Sie einen relativen Zeitstempel beim Eintritt in jeden Systemaufruf. Dies zeichnet die Zeitdifferenz zwischen dem Beginn aufeinanderfolgender Systemaufrufe auf.