ฉันพยายามลบไฟล์ใน 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ที่แสดงเนื้อหา แต่ไม่ได้เปิดไฟล์ใดโดยกระบวนการบางอย่าง