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파일러가 쓰기 위해 열린 것을 의미) 또는 파일 유형입니다. %dprintf숫자 만이 (등 텍스트 문자를 제거, 인쇄 할 것을 보장 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.