탭 완성이 중단됨

탭 완성이 중단됨

처음으로 터미널을 열거나 한동안 사용하지 않은 후 새 터미널을 열 때 홈 디렉토리에서 모든 종류의 탭 완성(예: lsTab)에 몇 초가 걸립니다. 이전에 마운트된 네트워크 드라이브를 사용할 때 이런 동작을 본 적이 있지만 autofs에서는 어떤 동작도 발생하지 않습니다 ~/. systemd의 자동 마운트를 사용하여 NFS 공유를 마운트했지만 이는 에 있으므로 ~/badabing/모든 ~/자체는 로컬 파일일 뿐입니다.

자동 마운트 문제인 경우 관련 /etc/fstab줄은 다음과 같습니다(예, 해당 서버는 "badabing"이라고 하며 몇 년 전 Sopranos 폭식 중에 이름을 지정했습니다).

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

그런 다음 ~/badabing나는 다음을 가지고 있습니다.

$ 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

이 문제를 더 조사하고 싶습니다. 어떻게든 탭을 완료할 수 있나요 strace? echo무엇이 중단되는지 확인하기 위해 다양한 bash 완료 스크립트에 명령을 추가하는 유일한 방법 입니까 ? 그런 경우가 너무 많아서 피하는 게 좋을 것 같아요.

그렇다면 이 문제의 원인은 무엇입니까? 아니면 적어도 어떻게 추가로 디버깅할 수 있습니까?

답변1

나는 이렇게 할 것이다:

sudo strace -pXXXX -tfo /tmp/strace.log

어디XXXXbash의 프로세스 ID입니다. NFS 마운트 디렉토리 트리 중 하나에서 파일 이름 완성을 빠르게 확인할 때 제대로 작동합니다.

-f

현재 추적되는 프로세스의 fork(2) 시스템 호출의 결과로 생성된 하위 프로세스를 추적합니다.

-t

추적된 각 행 앞에는 시간을 붙입니다.

일부는 다음을 선호할 수 있습니다 -r.

-r

시스템 호출이 입력될 때마다 상대 타임스탬프를 인쇄합니다. 이는 연속적인 시스템 호출 시작 사이의 시간 차이를 기록합니다.

답변2

set -x완료 프레임워크에 의해 실행된 명령을 포함하여 모든 셸 명령의 추적을 얻으려면 실행하세요 .

strace -f -p 1234시스템 호출의 흔적을 보려면 다른 셸에서 실행하세요 . "작업이 허용되지 않음" 오류가 표시되는 경우 ptrace추적 프로세스의 하위 프로세스에 대한 시스템 호출을 제한하는 보안 제한 때문일 수 있습니다 . 이 제한을 비활성화하려면 sysctl kernel.yama.ptrace_scope=0루트로 실행하십시오. 바라보다https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process더 많은 정보를 알고 싶습니다. strace -T -f -o strace.bash bash또는 -T각 시스템 호출에 소요되는 시간을 추가하여 쉘을 시작하고 거기에서 실험할 수 있습니다 .

1이 제한은 귀하의 계정에서 실행되는 악성 애플리케이션의 영향을 제한합니다. 이는 여러 다른 제한 사항(일반적으로 SELinux 또는 AppArmor를 통해 적용됨)과 결합되어 특히 제한된 프로세스를 작은 파일 세트로 제한하는 경우에만 작동합니다. 제한된 ptrace 모드에서도 ptrace의 일반적인 사용 사례(즉, 하위 프로세스를 디버깅하는 디버거)는 여전히 허용됩니다.

답변3

아마도 이것이 도움이 될 것입니다:

PS4='Line ${LINENO}: ' bash -x /usr/share/bash-completion/bash_completion ls

관련 정보