ฉันกำลังอ่านบทความและฉันเห็นคำสั่งนี้:
lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
ร่างกายบางคนสามารถช่วยให้ฉันเข้าใจมันได้
ฉันกำลังอ่านบทความและฉันเห็นคำสั่งนี้:
lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
ร่างกายบางคนสามารถช่วยให้ฉันเข้าใจมันได้
คำตอบ:
คำสั่งนี้จะพิมพ์ไฟล์จาก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
หมายถึง filer ได้รับการเปิดสำหรับการเขียน) หรือ filetype ขึ้นอยู่กับไฟล์ %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
ตัดทอนที่เกิดขึ้นจริงและยิ่งกว่านั้นมีการแสดงออกปกติสองนิพจน์ที่ไม่มีในคำอธิบายของคุณ