bash와 같은 쉘에서 사용되지 않은 tty를 찾으십니까?

bash와 같은 쉘에서 사용되지 않은 tty를 찾으십니까?

tty예를 들어 셸에서 사용되지 않은 콘텐츠를 찾는 일반적인 방법이 있습니까 bash?

다음은 작동하는 것 같지만 더 좋은 방법이 있을 것 같습니다.

$ used=$({ find /proc/{0..9}*/fd/0 -printf '%l$\n' | grep tty;} 2> /dev/null)
$ unused=$(find /dev/ -name 'tty*' | grep -ve "$used")

답변1

Linux 가상 터미널을 참조한다고 가정하면 다음을 VT_OPENQRY ioctl()얻을 수 있습니다.첫 번째무료 가상 터미널(예: 사용된 터미널 openvt)이지만 콘솔 장치의 파일 설명자가 이미 필요합니다. 또는 루트로 다음을 수행할 수 있습니다.

comm -23 <(printf '%s\n' /dev/tty[1-9]*) \
         <(lsof -Fn /dev/tty[1-9]* | sed -n 's/^n//p' | sort -u)

이를 직렬 장치와 같은 다른 유형의 tty 장치로 일반화할 수 있습니다.

/dev/ttyxx이는 이러한 장치 경로만 고려하고 정규식 연산자 또는 개행 문자가 있는 파일 이름에 문제가 없기 때문에 더욱 강력할 것입니다. 그러나 tty 장치가 다른 경로가 열려 있는 경우 접근 방식과 마찬가지로 이 방법은 제대로 작동하지 않습니다.

또 다른 접근 방식은 장치 번호 대신 장치 번호에 의존하는 것입니다.모델길.

GNU 사용 stat:

find -L /proc/[1-9]*/fd/. ! -name . -prune -type c -exec  stat -Lc '%t %T' {} + |
  awk '$1 == "4" {seen[$2]}
       END {
         for (i=1; i<=63; i++)
           if (!(sprintf("%x", i) in seen))
             print "/dev/tty" i
       }'

관련 정보