ฉันกำลังอ่านบทความและฉันเห็นคำสั่งนี้:
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ตัดทอนที่เกิดขึ้นจริงและยิ่งกว่านั้นมีการแสดงออกปกติสองนิพจน์ที่ไม่มีในคำอธิบายของคุณ