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
}'