adam bobrow <bobrow.a...@gmail.com> writes: > HI,
Hi Adam, > While connecting a remote host using Tramp, I encounter an > indeterminate 20 seconds delay after a successful initial connection. Yes. You seem to have a slow connection to that host (no surpise going to AWS), but Tramp must support this as well. > From my understanding, when inspecting the debug log it seems that > Tramp identifies the remote prompt after about 3 seconds, which I > assume is just the network latency but then it takes another ~20 > seconds to finally connect. Yes. > I'm unsure what's Tramp's actions during these seconds. Your input > would be appreciated. I'm inserting all messages with level 6 from your log (these are the sent commands, and the returned output) plus a comment. --8<---------------cut here---------------start------------->8--- 10:10:42.724900 tramp-call-process (6) # ‘locale -a’ nil *temp* 10:10:42.748631 tramp-call-process (6) # 0 en_NZ nl_NL.UTF-8 ... 10:10:42.748966 tramp-call-process (6) # ‘ssh -G -o ControlMaster=auto 0.0.0.1’ nil nil 10:10:42.760573 tramp-call-process (6) # 0 Pseudo-terminal will not be allocated because stdin is not a terminal. user bob hostname 0.0.0.1 ... 10:10:42.760697 tramp-call-process (6) # ‘ssh -G -o ControlPath=tramp.%C 0.0.0.1’ nil nil 10:10:42.766693 tramp-call-process (6) # 0 Pseudo-terminal will not be allocated because stdin is not a terminal. user bob hostname 0.0.0.1 ... 10:10:42.766811 tramp-call-process (6) # ‘ssh -G -o ControlPersist=no 0.0.0.1’ nil nil 10:10:42.772112 tramp-call-process (6) # 0 Pseudo-terminal will not be allocated because stdin is not a terminal. user bob hostname 0.0.0.1 port 22 ... --8<---------------cut here---------------end--------------->8--- These are some local commands, where Tramp determines existing locale encodings and ssh client properties. They are not performance relevant --8<---------------cut here---------------start------------->8--- 10:10:42.783066 tramp-maybe-open-connection (6) # /bin/sh -i 10:10:42.788943 tramp-wait-for-regexp (6) # #$ 10:10:42.789916 tramp-send-command (6) # exec ssh -o ControlMaster=auto -o ControlPath=tramp.%C -o ControlPersist=no -e none bobrows 10:10:45.360996 tramp-process-actions (6) # Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.19.0-1029-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Aug 8 07:10:44 UTC 2023 System load: 0.0 Processes: 108 Usage of /: 26.2% of 15.32GB Users logged in: 1 Memory usage: 71% IPv4 address for eth0: 172.31.83.132 Swap usage: 0% * Ubuntu Pro delivers the most comprehensive open source security and compliance features. https://ubuntu.com/aws/pro Expanded Security Maintenance for Applications is not enabled. 7 updates can be applied immediately. To see these additional updates run: apt list --upgradable Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status Last login: Tue Aug 8 06:55:11 2023 from 176.230.32.30 $ --8<---------------cut here---------------end--------------->8--- Tramp established the remote shell. 3 seconds, as you have said. --8<---------------cut here---------------start------------->8--- 10:10:45.361199 tramp-send-command (6) # exec env TERM='dumb' INSIDE_EMACS='29.1,tramp:2.6.0.29.1' ENV='' HISTFILE=~/.tramp_history PROMPT_COMMAND='' PS1=///b2d958bbca0546596c9001895132444f\#\$ PS2='' PS3='' /bin/sh -i 10:10:45.507803 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp opens an interactive shell /bin/sh. This is necessary, because Tramp cannot know, whether your login shell is POSIX compliant. It sets also the shell prompt to the random string "///b2d958bbca0546596c9001895132444f#$" in order to detect it reliably. Now it checks some shell properties. --8<---------------cut here---------------start------------->8--- 10:10:45.508291 tramp-send-command (6) # (cd ~/) 2>/dev/null; echo tramp_exit_status $? 10:10:45.652286 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Check, whether the remote shell supports tilde expansion. --8<---------------cut here---------------start------------->8--- 10:10:45.653454 tramp-send-command (6) # set +o vi +o emacs 10:10:45.796193 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Remove some shell options for editing. --8<---------------cut here---------------start------------->8--- 10:10:45.796312 tramp-send-command (6) # stty -inlcr -onlcr -echo kill '^U' erase '^H' 10:10:45.940105 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Some stty options are set. --8<---------------cut here---------------start------------->8--- 10:10:45.940577 tramp-send-command (6) # echo foo 10:10:46.089959 tramp-wait-for-regexp (6) # foo ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp checks, whether the shell echos the input. In that case, Tramp would need to apply further settings. --8<---------------cut here---------------start------------->8--- 10:10:46.091114 tramp-send-command (6) # echo \"`uname -sr`\" 2>/dev/null; echo tramp_exit_status $? 10:10:46.238650 tramp-wait-for-regexp (6) # "Linux 5.19.0-1029-aws" tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp checks the OS identification. This is needed in order to know, whether cached values could still be applied. --8<---------------cut here---------------start------------->8--- 10:10:46.240146 tramp-send-command (6) # locale -a 10:10:46.386628 tramp-wait-for-regexp (6) # C C.utf8 en_US.utf8 POSIX ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Determining remote encoding systems. --8<---------------cut here---------------start------------->8--- 10:10:46.387088 tramp-send-command (6) # (echo foo ; echo bar) 10:10:46.532667 tramp-wait-for-regexp (6) # foo bar ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Check, which end-of-line conversion is applied. Now, Tramp tries to determine the remote PATH, derived from tramp-remote-path. --8<---------------cut here---------------start------------->8--- 10:10:46.533944 tramp-send-command (6) # echo \"`getconf PATH 2>/dev/null`\" 2>/dev/null; echo tramp_exit_status $? 10:10:46.678553 tramp-wait-for-regexp (6) # "/bin:/usr/bin" tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp reads the default PATH on the remote side. The result must be taken instead of the tramp-default-remote-path entry in tramp-remote-path. --8<---------------cut here---------------start------------->8--- 10:10:46.680856 tramp-send-command (6) # test 0 2>/dev/null; echo tramp_exit_status $? 10:10:46.826778 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:46.828039 tramp-send-command (6) # test -d /bin 2>/dev/null; echo tramp_exit_status $? 10:10:46.972647 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:46.974137 tramp-send-command (6) # test -d /usr/bin 2>/dev/null; echo tramp_exit_status $? 10:10:47.122504 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.124766 tramp-send-command (6) # test -d /sbin 2>/dev/null; echo tramp_exit_status $? 10:10:47.268654 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.271035 tramp-send-command (6) # test -d /usr/sbin 2>/dev/null; echo tramp_exit_status $? 10:10:47.415802 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.418543 tramp-send-command (6) # test -d /usr/local/bin 2>/dev/null; echo tramp_exit_status $? 10:10:47.563556 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.565623 tramp-send-command (6) # test -d /usr/local/sbin 2>/dev/null; echo tramp_exit_status $? 10:10:47.710066 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.712109 tramp-send-command (6) # test -d /local/bin 2>/dev/null; echo tramp_exit_status $? 10:10:47.857122 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:47.859479 tramp-send-command (6) # test -d /local/freeware/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.004416 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.006812 tramp-send-command (6) # test -d /local/gnu/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.151278 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.153849 tramp-send-command (6) # test -d /usr/freeware/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.298645 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.300810 tramp-send-command (6) # test -d /usr/pkg/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.445221 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.447192 tramp-send-command (6) # test -d /usr/contrib/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.591086 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.593445 tramp-send-command (6) # test -d /opt/bin 2>/dev/null; echo tramp_exit_status $? 10:10:48.740577 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.742222 tramp-send-command (6) # test -d /opt/sbin 2>/dev/null; echo tramp_exit_status $? 10:10:48.886329 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:48.887902 tramp-send-command (6) # test -d /opt/local/bin 2>/dev/null; echo tramp_exit_status $? 10:10:49.031505 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp checks, whether the lements of tramp-remote-path exists as directory on remote. This is a bit lengthy, and takes ~2.5 secs. In Tramp 2.7 of Emacs 30 this has already been optimized to the following: --8<---------------cut here---------------start------------->8--- 11:43:56.711931 tramp-send-command (6) # test 0 2>/dev/null; echo tramp_exit_status $? 11:43:56.716921 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///de92b9d2e097e5a47f922a53fbf6ce95#$ 11:43:56.717014 tramp-send-command (6) # test -e / 2>/dev/null; echo tramp_exit_status $? 11:43:56.721971 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///de92b9d2e097e5a47f922a53fbf6ce95#$ 11:43:56.722091 tramp-send-command (6) # test -e /\ this\ file\ does\ not\ exist\ 2>/dev/null; echo tramp_exit_status $? 11:43:56.727791 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///de92b9d2e097e5a47f922a53fbf6ce95#$ 11:43:56.727870 tramp-maybe-send-script (5) # Sending script ‘tramp_bundle_read_file_names’... 11:43:56.728274 tramp-send-command (6) # tramp_bundle_read_file_names () { echo "(" while read file; do quoted=`echo "$file" | sed -e "s/\"/\\\\\\\\\"/"` if test -e "$file"; then echo "(\"$quoted\" \"file-exists-p\" t)" else echo "(\"$quoted\" \"file-exists-p\" nil)" fi if test -r "$file"; then echo "(\"$quoted\" \"file-readable-p\" t)" else echo "(\"$quoted\" \"file-readable-p\" nil)" fi if test -d "$file"; then echo "(\"$quoted\" \"file-directory-p\" t)" else echo "(\"$quoted\" \"file-directory-p\" nil)" fi done echo ")" } 2>/dev/null; echo tramp_exit_status $? 11:43:56.735065 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///de92b9d2e097e5a47f922a53fbf6ce95#$ 11:43:56.735135 tramp-maybe-send-script (5) # Sending script ‘tramp_bundle_read_file_names’...done 11:43:56.735326 tramp-send-command (6) # tramp_bundle_read_file_names <<'f4c81f0f29763272577fd1074a61bd23' /bin /usr/bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin /local/bin /local/freeware/bin /local/gnu/bin /usr/freeware/bin /usr/pkg/bin /usr/contrib/bin /opt/bin /opt/sbin /opt/local/bin f4c81f0f29763272577fd1074a61bd23 11:43:56.766415 tramp-wait-for-regexp (6) # ( ("/bin" "file-exists-p" t) ("/bin" "file-readable-p" t) ("/bin" "file-directory-p" t) ... ) ///de92b9d2e097e5a47f922a53fbf6ce95#$ --8<---------------cut here---------------end--------------->8--- These are 5 network roundtrips instead of 16 roundtrips as in your case, and it delivers more information which will be cache for further use. --8<---------------cut here---------------start------------->8--- 10:10:49.033189 tramp-send-command (6) # getconf PIPE_BUF / 2>/dev/null || echo 4096 2>/dev/null; echo tramp_exit_status $? 10:10:49.180557 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:49.181293 tramp-send-command (6) # PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin && export PATH 10:10:49.327015 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:49.327571 tramp-send-command (6) # echo ~root 10:10:49.475422 tramp-wait-for-regexp (6) # /root ///b2d958bbca0546596c9001895132444f#$ 10:10:49.476229 tramp-send-command (6) # mesg n 2>/dev/null; biff n 2>/dev/null 10:10:49.623059 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:49.623419 tramp-send-command (6) # stty tab0 10:10:49.767952 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:49.768517 tramp-send-command (6) # stty iutf8 2>/dev/null 10:10:49.914552 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:49.915674 tramp-send-command (6) # echo \"`tty`\" 2>/dev/null; echo tramp_exit_status $? 10:10:50.063651 tramp-wait-for-regexp (6) # "/dev/pts/1" tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- The remote path will be set, and further information about the remote shell is collected or set. --8<---------------cut here---------------start------------->8--- 10:10:50.064712 tramp-send-command (6) # while read var val; do export $var="$val"; done <<'f94a09c93c0fe54f28bd3cc55aa5148f' LC_ALL en_US.utf8 ENV '' TMOUT 0 LC_CTYPE '' PAGER cat f94a09c93c0fe54f28bd3cc55aa5148f 10:10:50.211449 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:50.211952 tramp-send-command (6) # unset CDPATH HISTORY MAIL MAILCHECK MAILPATH autocorrect correct 10:10:50.355948 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- The remote environment is set, according to the value of tramp-remote-process-environment. Well, until here everything is just initialization of the connection. Five seconds after the inital three seconds of login via ssh. All of this is needed. One idea to optimize is to install a shell-script on the remote, which does the same, and which is sourced. This would reduce the number of network roundtrips. The following Tramp commands do implement the insert-directory call from dired. Looks like you wnat to insert "/". --8<---------------cut here---------------start------------->8--- 10:10:50.356627 tramp-send-command (6) # test 0 2>/dev/null; echo tramp_exit_status $? 10:10:50.518305 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:50.519638 tramp-send-command (6) # test -e / 2>/dev/null; echo tramp_exit_status $? 10:10:50.664123 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:50.665297 tramp-send-command (6) # test -e /\ this\ file\ does\ not\ exist\ 2>/dev/null; echo tramp_exit_status $? 10:10:50.808932 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Test, which shel command implements the test for existence of a file. This would be skipped if you don't call emacs -q, because Tramp caches this information. --8<---------------cut here---------------start------------->8--- 10:10:50.809446 tramp-send-command (6) # test -e / 2>/dev/null; echo tramp_exit_status $? 10:10:50.959084 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Test, whether "e/" exists. This should have been skipped, because we know the result already, which should be cached. --8<---------------cut here---------------start------------->8--- 10:10:50.961902 tramp-send-command (6) # which \perl5 | wc -w 10:10:51.108130 tramp-wait-for-regexp (6) # 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:51.109028 tramp-send-command (6) # while read d; do if test -x $d/perl5 && test -f $d/perl5; then echo tramp_executable $d/perl5; break; fi; done <<'f94a09c93c0fe54f28bd3cc55aa5148f' /bin /usr/bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin f94a09c93c0fe54f28bd3cc55aa5148f 10:10:51.254934 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:51.256494 tramp-send-command (6) # which \perl | wc -w 10:10:51.403335 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:51.404343 tramp-send-command (6) # \perl -e 'print "Hello ";' 2>/dev/null; echo tramp_exit_status $? 10:10:51.552891 tramp-wait-for-regexp (6) # Hello tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:51.553584 tramp-send-command (6) # \perl -e 'use File::Spec;' 2>/dev/null; echo tramp_exit_status $? 10:10:51.709730 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:51.710529 tramp-send-command (6) # \perl -e 'use Cwd "realpath";' 2>/dev/null; echo tramp_exit_status $? 10:10:51.861455 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp checks, whether Perl is installed on the remote machine, and which Perl modules exist. Again, this would be skipped when Emacs isn't called with option -q. --8<---------------cut here---------------start------------->8--- 10:10:51.863801 tramp-send-command (6) # tramp_perl_file_name_all_completions () { \perl -e ' opendir(d, $ARGV[0]) || die("$ARGV[0]: $!\nfail\n"); @files = readdir(d); closedir(d); foreach $f (@files) { if (-d "$ARGV[0]/$f") { print "$f/\n"; } else { print "$f\n"; } } print "ok\n" ' "$1" 2>/dev/null } 2>/dev/null; echo tramp_exit_status $? 10:10:52.013782 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.014783 tramp-send-command (6) # tramp_perl_file_name_all_completions / 10:10:52.169003 tramp-wait-for-regexp (6) # proc/ boot/ ./ ../ sys/ home/ sbin/ media/ lib/ lib64/ tmp/ usr/ srv/ lost+found/ run/ snap/ dev/ libx32/ var/ etc/ mnt/ opt/ bin/ root/ lib32/ ok ///b2d958bbca0546596c9001895132444f#$ 10:10:52.170675 tramp-send-command (6) # test -e /proc/ 2>/dev/null; echo tramp_exit_status $? 10:10:52.316529 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.319705 tramp-send-command (6) # test -e /boot/ 2>/dev/null; echo tramp_exit_status $? 10:10:52.466834 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.470731 tramp-send-command (6) # test -e /sys/ 2>/dev/null; echo tramp_exit_status $? 10:10:52.616431 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.619203 tramp-send-command (6) # test -e /home/ 2>/dev/null; echo tramp_exit_status $? 10:10:52.784502 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.785565 tramp-send-command (6) # test -e /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:10:52.941879 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:52.942875 tramp-send-command (6) # test -e /media/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.086842 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.089062 tramp-send-command (6) # test -e /lib/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.235537 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.238165 tramp-send-command (6) # test -e /lib64/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.382299 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.385644 tramp-send-command (6) # test -e /tmp/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.533287 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.536175 tramp-send-command (6) # test -e /usr/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.680455 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.683901 tramp-send-command (6) # test -e /srv/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.833850 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.836880 tramp-send-command (6) # test -e /lost\+found/ 2>/dev/null; echo tramp_exit_status $? 10:10:53.980820 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:53.983102 tramp-send-command (6) # test -e /run/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.131703 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.133966 tramp-send-command (6) # test -e /snap/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.278660 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.280988 tramp-send-command (6) # test -e /dev/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.429472 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.432234 tramp-send-command (6) # test -e /libx32/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.577279 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.580011 tramp-send-command (6) # test -e /var/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.723628 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.727213 tramp-send-command (6) # test -e /etc/ 2>/dev/null; echo tramp_exit_status $? 10:10:54.871704 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:54.874573 tramp-send-command (6) # test -e /mnt/ 2>/dev/null; echo tramp_exit_status $? 10:10:55.022816 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.025549 tramp-send-command (6) # test -e /opt/ 2>/dev/null; echo tramp_exit_status $? 10:10:55.171516 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.174759 tramp-send-command (6) # test -e /bin/ 2>/dev/null; echo tramp_exit_status $? 10:10:55.320591 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.322823 tramp-send-command (6) # test -e /root/ 2>/dev/null; echo tramp_exit_status $? 10:10:55.468947 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.471495 tramp-send-command (6) # test -e /lib32/ 2>/dev/null; echo tramp_exit_status $? 10:10:55.623197 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.631264 tramp-send-command (6) # test -d /tmp 2>/dev/null; echo tramp_exit_status $? 10:10:55.776077 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:55.778602 tramp-send-command (6) # test -w /tmp 2>/dev/null; echo tramp_exit_status $? 10:10:55.933606 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Now it has detected, which file names exist in directory "/". Afterwards, it call file-exists-p for every single file name. This shouldn't be needed, because we know it already from the very first call. Will fix it. --8<---------------cut here---------------start------------->8--- 10:10:55.984905 tramp-send-command (6) # which \readlink | wc -w 10:10:56.131247 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:56.131926 tramp-send-command (6) # \readlink --canonicalize-missing / 2>/dev/null; echo tramp_exit_status $? 10:10:56.280149 tramp-wait-for-regexp (6) # / tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:56.280874 tramp-send-command (6) # \readlink --canonicalize-missing /tmp/tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:56.428292 tramp-wait-for-regexp (6) # /tmp/tramp.1OxNuK tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:56.430533 tramp-send-command (6) # which \stat | wc -w 10:10:56.579881 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:56.581060 tramp-send-command (6) # env QUOTING_STYLE=locale \stat -c '("%N" %s)' / 2>/dev/null; echo tramp_exit_status $? 10:10:56.727085 tramp-wait-for-regexp (6) # ("‘/’" 4096) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp checks for the commands readlink, stat, id, getfacl, selinuxenabled, ls. This will be skipped when the cache is filled, i.e., Emacs isn't started with -q. --8<---------------cut here---------------start------------->8--- 10:10:56.730284 tramp-send-command (6) # tramp_stat_file_attributes () { (env QUOTING_STYLE=locale \stat -c '((/////%N/////) %h (/////%U///// . %u) (/////%G///// . %g) %X %Y %Z %s /////%A///// t %i -1)' "$1" 2>/dev/null || echo nil) | sed -e 's/"/\\"/g' -e 's/\/\/\/\/\//"/g' } 2>/dev/null; echo tramp_exit_status $? 10:10:56.873939 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:56.875770 tramp-send-command (6) # tramp_stat_file_attributes /tmp/tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:57.024093 tramp-wait-for-regexp (6) # nil tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:57.028450 tramp-send-command (6) # tramp_stat_file_attributes /tmp/.\#tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:57.177696 tramp-wait-for-regexp (6) # nil tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:57.183304 tramp-send-command (6) # while read d; do if test -x $d/id && test -f $d/id; then echo tramp_executable $d/id; break; fi; done <<'f94a09c93c0fe54f28bd3cc55aa5148f' /bin /usr/bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin f94a09c93c0fe54f28bd3cc55aa5148f 10:10:57.329597 tramp-wait-for-regexp (6) # tramp_executable /bin/id ///b2d958bbca0546596c9001895132444f#$ 10:10:57.330412 tramp-send-command (6) # /bin/id -u 2>/dev/null; echo tramp_exit_status $? 10:10:57.475579 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:57.476133 tramp-send-command (6) # /bin/id 10:10:57.621091 tramp-wait-for-regexp (6) # uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),119(netdev),120(lxd) ///b2d958bbca0546596c9001895132444f#$ 10:10:57.624805 tramp-send-command (6) # getfacl / 2>/dev/null; echo tramp_exit_status $? 10:10:57.770571 tramp-wait-for-regexp (6) # tramp_exit_status 127 ///b2d958bbca0546596c9001895132444f#$ 10:10:57.772502 tramp-send-command (6) # selinuxenabled 2>/dev/null; echo tramp_exit_status $? 10:10:57.917808 tramp-wait-for-regexp (6) # tramp_exit_status 127 ///b2d958bbca0546596c9001895132444f#$ 10:10:57.925161 tramp-send-command (6) # \readlink --canonicalize-missing /tmp/.\#tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:58.072059 tramp-wait-for-regexp (6) # /tmp/.#tramp.1OxNuK tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:58.076061 tramp-send-command (6) # \readlink --canonicalize-missing /tmp 2>/dev/null; echo tramp_exit_status $? 10:10:58.219747 tramp-wait-for-regexp (6) # /tmp tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:58.221680 tramp-send-command (6) # tramp_stat_file_attributes /tmp 2>/dev/null; echo tramp_exit_status $? 10:10:58.367661 tramp-wait-for-regexp (6) # (("‘/tmp’") 12 ("root" . 0) ("root" . 0) 1691353271 1691478541 1691478541 4096 "drwxrwxrwt" t 1532 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:58.812922 tramp-send-command (6) # cat </dev/null >/tmp/tramp.1OxNuK 10:10:58.957050 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:58.959124 tramp-send-command (6) # chown 1000:1000 /tmp/tramp.1OxNuK 10:10:59.105067 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:10:59.109225 tramp-send-command (6) # test -d /tmp/.\#tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:59.252813 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:59.254344 tramp-send-command (6) # rm -f /tmp/.\#tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:59.402444 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:59.404801 tramp-send-command (6) # test -e /TMP/TRAMP.1OXNUK 2>/dev/null; echo tramp_exit_status $? 10:10:59.549755 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:59.552222 tramp-send-command (6) # test -d /tmp/tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:59.696979 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:10:59.698775 tramp-send-command (6) # rm -f /tmp/tramp.1OxNuK 2>/dev/null; echo tramp_exit_status $? 10:10:59.843104 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Tramp uses a temporary file in order to determine whether the remote file system is case insensitive. Again, the result is cached, and it won't bechecked when Emacs ist started with -q. --8<---------------cut here---------------start------------->8--- 10:10:59.844624 tramp-send-command (6) # echo ~ 2>/dev/null; echo tramp_exit_status $? 10:10:59.989071 tramp-wait-for-regexp (6) # /home/ubuntu tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:10:59.991753 tramp-send-command (6) # test -d / 2>/dev/null; echo tramp_exit_status $? 10:11:00.144573 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:00.178011 tramp-send-command (6) # \readlink --canonicalize-missing / 2>/dev/null; echo tramp_exit_status $? 10:11:00.321508 tramp-wait-for-regexp (6) # / tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:00.323201 tramp-send-command (6) # tramp_stat_file_attributes / 2>/dev/null; echo tramp_exit_status $? 10:11:00.473671 tramp-wait-for-regexp (6) # (("‘/’") 19 ("root" . 0) ("root" . 0) 1691438920 1691157693 1691157693 4096 "drwxr-xr-x" t 2 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:00.477098 tramp-send-command (6) # while read d; do if test -x $d/ls && test -f $d/ls; then echo tramp_executable $d/ls; break; fi; done <<'f94a09c93c0fe54f28bd3cc55aa5148f' /bin /usr/bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin f94a09c93c0fe54f28bd3cc55aa5148f 10:11:00.622091 tramp-wait-for-regexp (6) # tramp_executable /bin/ls ///b2d958bbca0546596c9001895132444f#$ 10:11:00.623145 tramp-send-command (6) # /bin/ls -lnd / 2>/dev/null; echo tramp_exit_status $? 10:11:00.769499 tramp-wait-for-regexp (6) # drwxr-xr-x 19 0 0 4096 Aug 4 14:01 / tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:00.770847 tramp-send-command (6) # /bin/ls --color=never -al /dev/null 2>/dev/null; echo tramp_exit_status $? 10:11:00.918373 tramp-wait-for-regexp (6) # crw-rw-rw- 1 root root 1, 3 Aug 4 14:01 /dev/null tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:00.919172 tramp-send-command (6) # /bin/ls --color=never --help 2>&1 | grep -iq busybox 2>/dev/null; echo tramp_exit_status $? 10:11:01.064643 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:11:01.116123 tramp-send-command (6) # /bin/ls --color=never --quoting-style=literal --show-control-chars -al /dev/null 2>/dev/null; echo tramp_exit_status $? 10:11:01.260252 tramp-wait-for-regexp (6) # crw-rw-rw- 1 root root 1, 3 Aug 4 14:01 /dev/null tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:01.260973 tramp-send-command (6) # /bin/ls --color=never --help 2>&1 | grep -iq busybox 2>/dev/null; echo tramp_exit_status $? 10:11:01.414277 tramp-wait-for-regexp (6) # tramp_exit_status 1 ///b2d958bbca0546596c9001895132444f#$ 10:11:01.415118 tramp-send-command (6) # /bin/ls --color=never --dired -al /dev/null 2>/dev/null; echo tramp_exit_status $? 10:11:01.562774 tramp-wait-for-regexp (6) # crw-rw-rw- 1 root root 1, 3 Aug 4 14:01 /dev/null //DIRED// 43 52 //DIRED-OPTIONS// --quoting-style=shell-escape tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:01.563583 tramp-send-command (6) # /bin/ls --color=never --dired -al --quoting-style\=literal --show-control-chars /. 2>/dev/null 10:11:01.710489 tramp-wait-for-regexp (6) # total 72 drwxr-xr-x 19 root root 4096 Aug 4 14:01 . drwxr-xr-x 19 root root 4096 Aug 4 14:01 .. lrwxrwxrwx 1 root root 7 May 16 02:08 bin -> usr/bin drwxr-xr-x 4 root root 4096 Aug 3 20:02 boot drwxr-xr-x 15 root root 3220 Aug 4 14:01 dev drwxr-xr-x 106 root root 4096 Aug 5 20:39 etc drwxr-xr-x 3 root root 4096 Aug 3 16:43 home lrwxrwxrwx 1 root root 7 May 16 02:08 lib -> usr/lib lrwxrwxrwx 1 root root 9 May 16 02:08 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 May 16 02:08 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 May 16 02:08 libx32 -> usr/libx32 drwx------ 2 root root 16384 May 16 02:10 lost+found drwxr-xr-x 2 root root 4096 May 16 02:08 media drwxr-xr-x 2 root root 4096 May 16 02:08 mnt drwxr-xr-x 2 root root 4096 May 16 02:08 opt dr-xr-xr-x 170 root root 0 Aug 4 14:01 proc drwx------ 6 root root 4096 Aug 6 20:34 root drwxr-xr-x 30 root root 1000 Aug 8 07:10 run lrwxrwxrwx 1 root root 8 May 16 02:08 sbin -> usr/sbin drwxr-xr-x 8 root root 4096 May 16 02:14 snap drwxr-xr-x 2 root root 4096 May 16 02:08 srv dr-xr-xr-x 13 root root 0 Aug 4 14:01 sys drwxrwxrwt 12 root root 4096 Aug 8 07:10 tmp drwxr-xr-x 14 root root 4096 May 16 02:08 usr drwxr-xr-x 14 root root 4096 Aug 3 20:14 var //DIRED// 57 58 105 107 154 157 215 219 266 269 316 319 366 370 417 420 478 483 543 548 608 614 675 685 732 737 784 787 834 837 884 888 935 939 986 989 1036 1040 1099 1103 1150 1153 1200 1203 1250 1253 1300 1303 1350 1353 //DIRED-OPTIONS// --quoting-style=literal ///b2d958bbca0546596c9001895132444f#$ 10:11:01.715724 tramp-send-command (6) # which \df | wc -w 10:11:01.860922 tramp-wait-for-regexp (6) # ///b2d958bbca0546596c9001895132444f#$ 10:11:01.861781 tramp-send-command (6) # \df --block-size=1 --output=size,used,avail / 2>/dev/null; echo tramp_exit_status $? 10:11:02.019485 tramp-wait-for-regexp (6) # 1B-blocks Used Avail tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.020397 tramp-send-command (6) # \df --block-size=1 --output=size,used,avail / 10:11:02.166279 tramp-wait-for-regexp (6) # 1B-blocks Used Avail ///b2d958bbca0546596c9001895132444f#$ 10:11:02.185833 tramp-send-command (6) # test -d /bin 2>/dev/null; echo tramp_exit_status $? 10:11:02.333808 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.334989 tramp-send-command (6) # \readlink --canonicalize-missing /bin/ 2>/dev/null; echo tramp_exit_status $? 10:11:02.479253 tramp-wait-for-regexp (6) # /usr/bin tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.479979 tramp-send-command (6) # tramp_stat_file_attributes /bin/ 2>/dev/null; echo tramp_exit_status $? 10:11:02.628979 tramp-wait-for-regexp (6) # (("‘/bin/’") 2 ("root" . 0) ("root" . 0) 1691438483 1691438480 1691438480 32768 "drwxr-xr-x" t 1534 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.631371 tramp-send-command (6) # test -e /usr/bin/ 2>/dev/null; echo tramp_exit_status $? 10:11:02.777834 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.780959 tramp-send-command (6) # test -d /usr/bin 2>/dev/null; echo tramp_exit_status $? 10:11:02.926683 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:02.931895 tramp-send-command (6) # test -d /lib 2>/dev/null; echo tramp_exit_status $? 10:11:03.076314 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.078308 tramp-send-command (6) # \readlink --canonicalize-missing /lib/ 2>/dev/null; echo tramp_exit_status $? 10:11:03.222430 tramp-wait-for-regexp (6) # /usr/lib tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.223740 tramp-send-command (6) # tramp_stat_file_attributes /lib/ 2>/dev/null; echo tramp_exit_status $? 10:11:03.369637 tramp-wait-for-regexp (6) # (("‘/lib/’") 91 ("root" . 0) ("root" . 0) 1691395088 1691168912 1691168912 4096 "drwxr-xr-x" t 2890 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.370869 tramp-send-command (6) # test -e /usr/lib/ 2>/dev/null; echo tramp_exit_status $? 10:11:03.516336 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.519313 tramp-send-command (6) # test -d /usr/lib 2>/dev/null; echo tramp_exit_status $? 10:11:03.663707 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.667497 tramp-send-command (6) # test -d /lib32 2>/dev/null; echo tramp_exit_status $? 10:11:03.812067 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.814717 tramp-send-command (6) # \readlink --canonicalize-missing /lib32/ 2>/dev/null; echo tramp_exit_status $? 10:11:03.962056 tramp-wait-for-regexp (6) # /usr/lib32 tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:03.963275 tramp-send-command (6) # tramp_stat_file_attributes /lib32/ 2>/dev/null; echo tramp_exit_status $? 10:11:04.110258 tramp-wait-for-regexp (6) # (("‘/lib32/’") 2 ("root" . 0) ("root" . 0) 1684203159 1684202893 1684203022 4096 "drwxr-xr-x" t 16684 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.112076 tramp-send-command (6) # test -e /usr/lib32/ 2>/dev/null; echo tramp_exit_status $? 10:11:04.258907 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.262347 tramp-send-command (6) # test -d /usr/lib32 2>/dev/null; echo tramp_exit_status $? 10:11:04.407593 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.412180 tramp-send-command (6) # test -d /lib64 2>/dev/null; echo tramp_exit_status $? 10:11:04.556176 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.558422 tramp-send-command (6) # \readlink --canonicalize-missing /lib64/ 2>/dev/null; echo tramp_exit_status $? 10:11:04.703683 tramp-wait-for-regexp (6) # /usr/lib64 tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.705615 tramp-send-command (6) # tramp_stat_file_attributes /lib64/ 2>/dev/null; echo tramp_exit_status $? 10:11:04.854088 tramp-wait-for-regexp (6) # (("‘/lib64/’") 2 ("root" . 0) ("root" . 0) 1684203159 1684202921 1684203022 4096 "drwxr-xr-x" t 16685 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:04.855937 tramp-send-command (6) # test -e /usr/lib64/ 2>/dev/null; echo tramp_exit_status $? 10:11:05.000318 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.003792 tramp-send-command (6) # test -d /usr/lib64 2>/dev/null; echo tramp_exit_status $? 10:11:05.147607 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.151810 tramp-send-command (6) # test -d /libx32 2>/dev/null; echo tramp_exit_status $? 10:11:05.294937 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.295515 tramp-send-command (6) # \readlink --canonicalize-missing /libx32/ 2>/dev/null; echo tramp_exit_status $? 10:11:05.439118 tramp-wait-for-regexp (6) # /usr/libx32 tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.440563 tramp-send-command (6) # tramp_stat_file_attributes /libx32/ 2>/dev/null; echo tramp_exit_status $? 10:11:05.586118 tramp-wait-for-regexp (6) # (("‘/libx32/’") 2 ("root" . 0) ("root" . 0) 1684203159 1684202893 1684203022 4096 "drwxr-xr-x" t 16687 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.588184 tramp-send-command (6) # test -e /usr/libx32/ 2>/dev/null; echo tramp_exit_status $? 10:11:05.735307 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.738509 tramp-send-command (6) # test -d /usr/libx32 2>/dev/null; echo tramp_exit_status $? 10:11:05.883028 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:05.888500 tramp-send-command (6) # test -d /sbin 2>/dev/null; echo tramp_exit_status $? 10:11:06.034148 tramp-wait-for-regexp (6) # tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.037148 tramp-send-command (6) # \readlink --canonicalize-missing /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.181017 tramp-wait-for-regexp (6) # /usr/sbin tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.182945 tramp-send-command (6) # tramp_stat_file_attributes /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.322636 tramp-send-command (6) # \readlink --canonicalize-missing /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.327874 tramp-wait-for-regexp (6) # (("‘/sbin/’") 2 ("root" . 0) ("root" . 0) 1691352324 1691182481 1691182481 20480 "drwxr-xr-x" t 2495 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.328659 tramp-send-command (6) # tramp_stat_file_attributes /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.468228 tramp-send-command (6) # \readlink --canonicalize-missing /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.468924 tramp-wait-for-regexp (6) # /usr/sbin tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.469723 tramp-send-command (6) # tramp_stat_file_attributes /sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.474105 tramp-wait-for-regexp (6) # (("‘/sbin/’") 2 ("root" . 0) ("root" . 0) 1691352324 1691182481 1691182481 20480 "drwxr-xr-x" t 2495 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.475042 tramp-send-command (6) # test -e /usr/sbin/ 2>/dev/null; echo tramp_exit_status $? 10:11:06.613430 tramp-wait-for-regexp (6) # /usr/sbin tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ 10:11:06.618360 tramp-send-command (6) # test -d /usr/sbin 2>/dev/null; echo tramp_exit_status $? 10:11:06.619113 tramp-wait-for-regexp (6) # (("‘/sbin/’") 2 ("root" . 0) ("root" . 0) 1691352324 1691182481 1691182481 20480 "drwxr-xr-x" t 2495 -1) tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$tramp_exit_status 0 ///b2d958bbca0546596c9001895132444f#$ --8<---------------cut here---------------end--------------->8--- Finally, Tramp inserts the directory listing of "/". There are some symlinks in that directory, which are checked whether they are stale. That's it. Proposals for improvements are welcome. Best regards, Michael. > Thank you, > > Adam Bobrow