파일 경로를 제공하기 위해 여러 명령을 연결하려고합니다.
이것을 실행해야 합니다:
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)