명령을 연결하여 파일 경로를 제공하려고 합니다.

명령을 연결하여 파일 경로를 제공하려고 합니다.

파일 경로를 제공하기 위해 여러 명령을 연결하려고합니다.

이것을 실행해야 합니다:

ls -l /proc/{PID}/fd/{FILE_NAME}

다음을 실행하여 PID를 얻을 수 있습니다.

lsof | grep 'mysql\(.*\)deleted' | awk { print $2 }'

그리고 다음을 실행하여 파일 이름을 얻을 수 있습니다.

lsof | grep 'mysql\(.*\)deleted' | awk { print $10 } | cut -d'/' -f3

둘 다 나에게 좋은 긴 목록을 제공하지만 이를 사용하여 ls 명령에 대한 파일 경로를 생성하려면 어떻게 해야 합니까?

답변1

Bash에서는 배열을 사용할 수 있습니다.

#!/bin/bash
pids=( $(lsof | grep 'mysql.*deleted' | awk '{ print $2 }') )
files=( $(lsof | grep 'mysql.*deleted' | awk '{ print $10 }' | cut -d/ -f3) )
for ((i=0; i<${#pids[@]}; i++)) ; do
    ls -l /proc/${pids[i]/fd/${files[i]}
done

또 다른 가능성은 두 개의 스트림에서 읽는 것입니다.

while read pid ; do
    read file <&3
    ls -l /proc/$pid/fd$file
done < <(lsof | grep 'mysql.*deleted' | awk '{ print $2 }') \
     3< <(lsof | grep 'mysql.*deleted' | awk '{ print $10 }' | cut -d'/' -f3)

관련 정보