답변:
이 명령은 절단이 필요한 파일을 인쇄합니다 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하므로 삭제되었지만 파일 설명자가 열려있는 모든 파일, 즉 안전하게 잘릴 수있는 파일 설명자를 인쇄합니다.
이 명령은 lsof에서 삭제 된 파일을 자릅니다.
먼저 열린 파일을 나열합니다lsof
그런 다음 네 번째 매개 변수로 {next}REG를 포함하는 행을 재귀 적으로 검색 한 다음 '$4~/txt/{next};/REG.*\(deleted\)$/이 행과 관련된이 프로세스는 삭제됩니다
그런 다음 REG를 포함하고 삭제 된 것으로 표시된 줄없이 모든 결과를 인쇄합니다.{printf ">/proc/%s/fd/%d\n", $2,$4}'
sh실제 절단과 morever이 정규 표현식이 당신의 설명에서와 같이 하나가 아니다