현재 bash 세션에서 열린 파일 설명자 및 참조하는 파일을 나열하는 방법


23

대화 형 bash 세션에서 실행 중입니다. exec를 사용하여 일부 파일 설명자를 만들었으며 bash 세션의 현재 상태를 나열하고 싶습니다.

현재 열려있는 파일 디스크립터를 나열하는 방법이 있습니까?



@Kamaraj 감사합니다. bash는 그렇게 할 기본 기능이 없습니까? 리눅스 전용 기능을 사용해야합니까?
dangonfast

bash커널의 일부가 아니므로 다른 프로세스가 무엇을하고 있는지, 심지어 시작한 프로세스까지도 알 수 없습니다.
Julie Pelletier

@ JuliePelletier : 그러나 자식 프로세스는 부모 프로세스의 파일 설명자를 변경하지 않습니까?
dangonfast

답변:


27

예. 열려있는 모든 파일 설명자가 나열됩니다.

$ ls -la /proc/$$/fd
total 0
dr-x------ 2 sorontar sorontar  0 Dec 28 00:56 .
dr-xr-xr-x 9 sorontar sorontar  0 Dec 28 00:56 ..
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 sorontar sorontar 64 Dec 28 00:56 4 -> /home/sorontar/testfile.txt

물론 평소와 같이 : 0은 stdin, 1은 stdout, 2는 stderr입니다.
이 경우 4 번째는 열려있는 파일 (쓰기)입니다.


여기에는 자식 또는 부모가 아닌 현재 프로세스 만 나열됩니다.
Julie Pelletier

@JuliePelletier 질문 제목에 'my current bash session'이 있습니다. 내가 잘못 이해하고 있습니까?
sorontar

@ JuliePelletier : 왜 내 현재 bash 세션의 자식이나 부모가 사용하는 파일 설명자에 관심이 있습니까? 현재 bash 세션에서 사용되는 파일 설명자에만 관심이 있습니다.
dangonfast

@delavnog : 그럼 좋습니다. 그것이 귀하의 질문에 대한 답변이라면, 그렇게 표시해야합니다.
Julie Pelletier

4

터미널에 연결된 파일 설명자를 나열한다고 가정하면 다음 과 같이 lsof/ 를 사용할 수 있습니다 fuser.

$ lsof -p $$ 2>/dev/null | awk '$NF ~ /\/pts\//'
bash    32406 foobar    0u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    1u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    2u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    3u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar  255u   CHR 136,31      0t0      34 /dev/pts/31

이 도구는 기본적으로 구문 분석 /proc하므로 다음과 같이 액세스 할 수도 있습니다 /proc/$$/fd/.

ls /proc/$$/fd/*

2
\/pts\/거부 된 파일 선택exec 4>testfile.txt
sorontar

@sorontar Yep, 내가 말했듯 이이 터미널은 모든 터미널에 연결된 것을 나열하기위한 것입니다.
heemayl

3
lsof -a -p $$

네트워크 fd 만 해당 :

lsof -i -a -p $$
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.