lsof | gawk '$ 4 ~ / txt / {next}; / REG. * \ (삭제됨 \) $ / {printf“> / proc / % s / fd / % d \ n”, $ 2, $ 4}'명령 평균


9

몇 가지 기사를 읽고 있으며이 명령을 보았습니다.

lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

몸이 이해하는 데 도움이 될 수 있습니까?


흥미로운 질문이므로 +1 및 즐겨 찾기 :-)
— Lorenzo Ancora

답변:


7

이 명령은 절단이 필요한 파일을 인쇄합니다 lsof.

실제로 는 파일을 제거하거나 자르지 않습니다.

lsof 다음과 같이 처리하는 awk로 파이프되는 열린 파일 (파일 설명자) 목록을 반환합니다.

gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

위 식에는 세미콜론으로 구분 된 두 개의 정규식이 있습니다. ;

첫 번째 부분을 고려하자 gawk '$4~/txt/{next};

여기에서 4 번째 필드에 txt다음 텍스트 줄이 읽 히면 스크립트가 처음부터 다시 처리를 시작합니다.

next문 힘은 바로 현재 레코드 처리를 중지하고 다음 레코드로 이동하는 awk가. 이는 현재 레코드에 대해 더 이상 규칙이 실행되지 않고 현재 규칙의 나머지 작업은 실행되지 않음을 의미합니다.

이제 스크립트의 두 번째 부분을 살펴 보겠습니다 /REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

선이 정규 표현식과 일치하는 다음 경우 /REG.*\(deleted\)$합니다 ( $수단 (deleted)라인의 마지막 단어이어야한다)를, 그냥 인쇄 >/proc/%s/fd/%d\n", $2,$4.

lsof 명령 $4에서 파일에 따라 파일 디스크립터 번호 (예 53w: w파일러가 쓰기 위해 열린 것을 의미) 또는 파일 유형입니다. %d의 printf숫자 만이 (등 텍스트 문자를 제거, 인쇄 할 것을 보장 w). $2파일을 사용하는 프로세스의 프로세스 ID를 인쇄하여 비슷한 것을 인쇄 >/proc/3989/fd/53하므로 삭제되었지만 파일 설명자가 열려있는 모든 파일, 즉 안전하게 잘릴 수있는 파일 설명자를 인쇄합니다.


2

이 명령은 lsof에서 삭제 된 파일을 자릅니다.

먼저 열린 파일을 나열합니다lsof

그런 다음 네 번째 매개 변수로 {next}REG를 포함하는 행을 재귀 적으로 검색 한 다음 '$4~/txt/{next};/REG.*\(deleted\)$/이 행과 관련된이 프로세스는 삭제됩니다

그런 다음 REG를 포함하고 삭제 된 것으로 표시된 줄없이 모든 결과를 인쇄합니다.{printf ">/proc/%s/fd/%d\n", $2,$4}'


나는 당신이 명령의 다른 부분을 설명해야한다고 생각합니다.
— don.joey

내 업데이트 확인

1
때 정규식과 실제 contents.You의 필요성을 절단 시작 인쇄 staement과 AWK 문은이 명령을 전달하는 않은 sh실제 절단과 morever이 정규 표현식이 당신의 설명에서와 같이 하나가 아니다
— Stormvirux
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.