mencoba menggabungkan perintah untuk memberikan path file


0

Saya mencoba menggabungkan beberapa perintah untuk memberikan path file.

Saya perlu menjalankan ini:

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

Saya bisa mendapatkan PID dengan menjalankan:

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

Dan saya bisa mendapatkan nama file dengan menjalankan:

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

Keduanya memberi saya daftar panjang yang bagus, tetapi bagaimana saya bisa menggunakannya untuk menghasilkan path file untuk perintah ls?


Tolong tunjukkan sampel daftar.
choroba

Saya tidak punya cara sekarang untuk menyalinnya dari server di mana saja, tetapi yang pertama adalah daftar baris yang terpisah dari PID dan yang kedua adalah daftar nama file yang dipisahkan baris
Chris

Bisakah nama file berisi spasi?
choroba

nama file tidak mengandung spasi no.
Chris

Coba jalankan lsof | grep 'deleted' dan Anda akan melihat apa yang saya maksud.
Chris

Jawaban:


3

Dalam bash, Anda dapat menggunakan array:

#!/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

Kemungkinan lain adalah membaca dari dua aliran:

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)

@ Chris: Periksa pembaruan.
choroba
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.