จะทราบได้อย่างไรว่ากระบวนการใดใช้ไฟล์ใน Linux


92

ฉันพยายามลบไฟล์ใน Linux โดยใช้rm -rf file_nameแต่ได้รับข้อผิดพลาด:

rm: file_name not removed.  Text file busy

ฉันจะทราบได้อย่างไรว่ากระบวนการใดใช้ไฟล์นี้

คำตอบ:


137

คุณสามารถใช้fuserคำสั่งเช่น:

fuser file_name

คุณจะได้รับรายการกระบวนการโดยใช้ไฟล์

คุณสามารถใช้แฟล็กที่แตกต่างกันเพื่อให้ได้ผลลัพธ์ที่ละเอียดยิ่งขึ้น

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในบทความ Wikipedia ของ Fuserหรือในmanหน้าต่างๆ


ฉันลองสิ่งนี้: fuser -i / home / bin / lib แต่ได้รับสิ่งนี้: fuser: ตัวเลือกที่ผิดกฎหมาย - i / home / bin / lib: 27674t
khris

1
@khris อาจเป็นไปได้ว่าfuserการใช้งานทั้งหมดไม่เหมือนกันหรือทำงานในลักษณะเดียวกัน แม้ว่า-iจะกำหนดไว้ใน POSIX การใช้งานเฉพาะที่คุณใช้ไม่จำเป็นต้องมีตัวเลือกเดียวกับที่อธิบายไว้ในบทความ Wikipedia ตัวอย่างเช่นตอนนี้ฉันใช้ AIX และสิ่งที่fuserมีอยู่ในระบบนี้ก็ไม่มี-iตัวเลือกเช่นกัน
jimm-cl

ด้วยเหตุผลบางอย่างไม่fuserว่ามิได้lsofมีการทำงานสำหรับฉันในของผู้เข้าพัก VirtualBox คำตอบนี้ช่วยฉันได้
kael

34

คำตอบของ @ 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เพื่อค้นหาว่ากระบวนการใดใช้ซ็อกเก็ตเฉพาะได้ เครื่องมือที่ยอดเยี่ยมที่มีในคลังแสงของคุณ


PID คือฟิลด์ใด
nmz787

@ nmz787 - lsof | head -1เพื่อดูส่วนหัวทั้งหมด
ghoti

@ nmz787 ฟิลด์ที่สองคือ PID
สำหรับ

lsof | grep -E "PID|<your_process_name>"แสดงทั้งบรรทัดที่ 1 และกระบวนการที่คุณต้องการสอบถาม
Robin Hsu

-1
$ lsof | tree MyFold

ดังแสดงในภาพที่แนบมา:

ป้อนคำอธิบายภาพที่นี่


1
วิธีนี้ทำงานอย่างไร? ไม่treeอ่านอะไรจาก stdin? ถ้าใช่มันทำอะไรกับข้อมูลนั้น?
dyp

man lsof - แสดงคู่มือสำหรับคำสั่ง lsof, lsof - แสดงรายการไฟล์ที่เปิดแสดงรายการข้อมูลไฟล์เอาต์พุตมาตรฐานเกี่ยวกับไฟล์ที่เปิดโดยกระบวนการและผลลัพธ์สามารถเห็นได้ในโครงสร้างแบบทรี คุณควรตรวจสอบสิ่งที่ชัดเจน
Blunt Notion

คำถามของฉันเป็นเรื่องเกี่ยวกับที่ไม่ได้tree lsofเท่าที่ผมเข้าใจtreeไม่ได้อ่านจากอินพุตมาตรฐานดังนั้นการส่งออกของlsofถูกทิ้งlsof | tree ...เมื่อคุณเรียกใช้ หากถูกต้องก็lsof | tree MyFoldจะเหมือนกับtree MyFoldที่แสดงเนื้อหา แต่ไม่ได้เปิดไฟล์ใดโดยกระบวนการบางอย่าง
dyp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.