ฉันพยายามลบไฟล์ใน Linux โดยใช้rm -rf file_name
แต่ได้รับข้อผิดพลาด:
rm: file_name not removed. Text file busy
ฉันจะทราบได้อย่างไรว่ากระบวนการใดใช้ไฟล์นี้
ฉันพยายามลบไฟล์ใน Linux โดยใช้rm -rf file_name
แต่ได้รับข้อผิดพลาด:
rm: file_name not removed. Text file busy
ฉันจะทราบได้อย่างไรว่ากระบวนการใดใช้ไฟล์นี้
คำตอบ:
คุณสามารถใช้fuser
คำสั่งเช่น:
fuser file_name
คุณจะได้รับรายการกระบวนการโดยใช้ไฟล์
คุณสามารถใช้แฟล็กที่แตกต่างกันเพื่อให้ได้ผลลัพธ์ที่ละเอียดยิ่งขึ้น
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในบทความ Wikipedia ของ Fuserหรือในman
หน้าต่างๆ
fuser
การใช้งานทั้งหมดไม่เหมือนกันหรือทำงานในลักษณะเดียวกัน แม้ว่า-i
จะกำหนดไว้ใน POSIX การใช้งานเฉพาะที่คุณใช้ไม่จำเป็นต้องมีตัวเลือกเดียวกับที่อธิบายไว้ในบทความ Wikipedia ตัวอย่างเช่นตอนนี้ฉันใช้ AIX และสิ่งที่fuser
มีอยู่ในระบบนี้ก็ไม่มี-i
ตัวเลือกเช่นกัน
คำตอบของ @ jim ถูกต้อง - fuser
คือสิ่งที่คุณต้องการ
นอกจากนี้ (หรืออีกทางเลือกหนึ่ง) คุณสามารถใช้lsof
เพื่อรับข้อมูลเพิ่มเติมรวมถึงชื่อผู้ใช้ในกรณีที่คุณต้องได้รับอนุญาต (โดยไม่ต้องเรียกใช้คำสั่งเพิ่มเติม) เพื่อฆ่ากระบวนการ (แน่นอนว่าหากการฆ่ากระบวนการเป็นสิ่งที่คุณต้องการคุณfuser
สามารถทำได้ด้วย-k
ตัวเลือกนี้คุณสามารถfuser
ใช้สัญญาณอื่น ๆ ร่วมกับ-s
ตัวเลือก - ตรวจสอบรายละเอียดในหน้าคน)
ตัวอย่างเช่นการtail -F /etc/passwd
ทำงานในหน้าต่างเดียว:
ghoti@pc:~$ lsof | grep passwd
tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd
โปรดทราบว่าคุณสามารถใช้lsof
เพื่อค้นหาว่ากระบวนการใดใช้ซ็อกเก็ตเฉพาะได้ เครื่องมือที่ยอดเยี่ยมที่มีในคลังแสงของคุณ
lsof | head -1
เพื่อดูส่วนหัวทั้งหมด
lsof | grep -E "PID|<your_process_name>"
แสดงทั้งบรรทัดที่ 1 และกระบวนการที่คุณต้องการสอบถาม
tree
อ่านอะไรจาก stdin? ถ้าใช่มันทำอะไรกับข้อมูลนั้น?
tree
lsof
เท่าที่ผมเข้าใจtree
ไม่ได้อ่านจากอินพุตมาตรฐานดังนั้นการส่งออกของlsof
ถูกทิ้งlsof | tree ...
เมื่อคุณเรียกใช้ หากถูกต้องก็lsof | tree MyFold
จะเหมือนกับtree MyFold
ที่แสดงเนื้อหา แต่ไม่ได้เปิดไฟล์ใดโดยกระบวนการบางอย่าง