嘗試連接命令以給出檔案路徑

嘗試連接命令以給出檔案路徑

我正在嘗試連接幾個命令來給出檔案路徑。

我需要運行這個:

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)

相關內容