symlinks เป็นกึ่งสากลบน Linux แต่พวกเขาไม่ได้อยู่ที่ใด (ยกเว้น Cygwin ซึ่ง emulates พวกเขา) ยังมีอยู่บน AIX และ Solaris แต่ไม่มีการเชื่อมโยง portably ที่จะได้รับข้อมูลเกี่ยวกับการเปิดไฟล์ที่ติดตั้ง/proc/PID/fd/NUM
/proc/PID/fd/NUM
lsof
พร้อมกับ /proc/PID/fd
ภายใต้ Linux, การเชื่อมโยงสัญลักษณ์มายากลเล็กน้อยไปยังแฟ้มว่ากระบวนการที่มีรหัสPIDมีเปิดในไฟล์อธิบายNUM ลิงค์นี้เป็นเวทย์มนตร์ในนั้นตัวอย่างเช่นมันสามารถใช้ในการเข้าถึงไฟล์แม้ว่าไฟล์จะถูกลบออก ลิงก์จะติดตามไฟล์ผ่านการเปลี่ยนชื่อเช่นกัน เป็นลิงก์สัญลักษณ์วิเศษที่ชี้ไปที่ตำแหน่งPIDเป็นกระบวนการที่เข้าถึงลิงก์/proc/PID/fd/NUM
/proc/self
/proc/PID
คุณลักษณะนี้มีอยู่ในระบบ Linux เกือบทั้งหมด มันให้บริการโดยไดรเวอร์สำหรับระบบไฟล์ procซึ่งเป็นตัวเลือกทางเทคนิค แต่ใช้สำหรับหลายสิ่งหลายอย่าง (รวมถึงการps
ทำงาน - มันอ่านจาก) ว่ามันแทบจะไม่เคยออกแม้ในระบบฝังตัว/proc/PID
Cygwin
Cygwin จำลองลินุกซ์(สำหรับกระบวนการ Cygwin) และ/proc/PID/fd/NUM
/proc/self
Solaris (ตั้งแต่เวอร์ชัน 2.6), AIX
มีรายการสำหรับไฟล์ descriptor แต่ละตัว แต่ปรากฏเป็นชนิดเดียวกับไฟล์ที่เปิดดังนั้นจึงไม่มีข้อมูลเกี่ยวกับเส้นทางของไฟล์ อย่างไรก็ตามพวกเขาจะรายงานข้อมูลเดียวกับที่จะรายงานไปยังกระบวนการที่เปิดไฟล์ดังนั้นจึงเป็นไปได้ที่จะพิจารณาว่าระบบไฟล์ใดที่ไฟล์นั้นอยู่และหมายเลขไอโหนด ไดเรกทอรีที่ปรากฏเป็นลิงก์สัญลักษณ์อย่างไรก็ตามพวกเขาเป็น symlink มายากลที่สามารถติดตามได้และส่งกลับสตริงที่ว่างเปล่า/proc/PID/fd
stat
fstat
readlink
ภายใต้ AIX procfiles
คำสั่งจะแสดงข้อมูลบางอย่างเกี่ยวกับไฟล์ที่เปิดของกระบวนการ ภายใต้ Solaris pfiles
คำสั่งแสดงข้อมูลบางอย่างเกี่ยวกับไฟล์ที่เปิดของกระบวนการ สิ่งนี้ไม่รวมเส้นทางไปยังไฟล์ (บน Solaris มันทำตั้งแต่ Solaris 10 ดูด้านล่าง)
นอกเหนือไปจากรุ่น Solaris ที่ทันสมัยมีซึ่งมีการเชื่อมโยงสัญลักษณ์คล้ายกับ symlinks ลินุกซ์ใน ข้อมูลคำสั่งเกี่ยวกับการแสดงให้เห็นว่าเป็นกระบวนการที่เปิดไฟล์รวมทั้งเส้นทาง/proc/PID/fd/NUM
/proc/PID/path/NUM
/proc/PID/fd/NUM
pfiles
/proc/PID/fd
เป็นไฟล์ข้อความที่มีหนึ่งเร็กคอร์ด (บรรทัด) ต่อไฟล์ descriptor ที่เปิดโดยกระบวนการ ไม่มีการติดตามชื่อไฟล์
/proc/PID/
เป็นไดเรกทอรี แต่ไม่มีข้อมูลใด ๆ เกี่ยวกับตัวอธิบายไฟล์
คำสั่งที่มี/proc
แต่ไม่มีการเข้าถึงไฟล์ descriptors โดยตรง
(หมายเหตุ: บางครั้งเป็นไปได้ที่จะได้รับข้อมูลเกี่ยวกับไฟล์ที่เปิดของกระบวนการโดยการกระเพื่อมผ่านภาพหน่วยความจำซึ่งสามารถเข้าถึงได้ภายใต้/proc
ฉันไม่นับว่าเป็น "การเข้าถึงโดยตรง")
Unices ที่เป็นไฟล์/proc/PID
ระบบไฟล์ proc นั้นเริ่มต้นในรุ่น UNIX 8th แต่มีโครงสร้างที่แตกต่างกันและผ่าน Plan 9 และกลับไปยัง unices ฉันคิดว่าระบบปฏิบัติการทั้งหมดที่มี a /proc
มีรายการสำหรับแต่ละ PID แต่ในหลาย ๆ ระบบมันเป็นไฟล์ปกติไม่ใช่ไดเรกทอรี ระบบต่อไปนี้มีสิ่งที่ต้องอ่านด้วย:/proc/PID
ioctl
- Solaris สูงถึง2.5
- OSF / 1 เป็นที่รู้จักกันในนามTru64
- IRIX (?)
- SCO (?)
MINIX 3 มีเซิร์ฟเวอร์ procfsซึ่งให้บริการส่วนประกอบเหมือน Linux หลายรายการรวมถึงไดเรกทอรี อย่างไรก็ตามสิ่งนี้ไม่มีเลย/proc/PID/
/proc/PID/fd
FreeBSD มีไดเรกทอรี แต่พวกเขาไม่ได้ให้ข้อมูลเกี่ยวกับตัวอธิบายไฟล์แบบเปิด (อย่างไรก็ตามมีลักษณะคล้ายกับ Linux ให้การเข้าถึงไฟล์ที่เรียกทำงานได้ผ่านลิงก์สัญลักษณ์)/proc/PID/
/proc/PID/file
/proc/PID/exe
procfs FreeBSD จะเลิก
โดยปราศจาก /proc
- HP-UX
- OpenBSD
- NetBSD
- Mac OS X
ข้อมูลตัวให้คำอธิบายไฟล์ผ่านช่องทางอื่น
fuser
รายการคำสั่งกระบวนการที่มีการเปิดไฟล์ที่ระบุหรือไฟล์ที่เปิดอยู่บนที่ระบุจุดติด คำสั่งนี้เป็นมาตรฐาน (มีอยู่ในระบบที่สอดคล้องกับXSIทั้งหมดเช่น POSIX ที่มีส่วนขยายส่วนต่อประสานระบบ X / Open)
คุณไม่สามารถดำเนินการตามชื่อไฟล์จากยูทิลิตี้นี้ได้
Lsof ย่อมาจาก "list open files" มันเป็นเครื่องมือของบุคคลที่สามที่มีอยู่ (แต่มักจะไม่ได้เป็นส่วนหนึ่งของการติดตั้งเริ่มต้น) สำหรับตัวแปร Unix ส่วนใหญ่ การรับข้อมูลเกี่ยวกับไฟล์เปิดขึ้นอยู่กับระบบเป็นอย่างมากเนื่องจากการวิเคราะห์ข้างต้นอาจทำให้คุณสงสัย ผู้ดูแล lsof ได้ทำการทำงานของมันรวมทั้งหมดภายใต้อินเทอร์เฟซเดียว
คุณสามารถอ่านคำถามที่พบบ่อยเพื่อดูว่ามีปัญหาอะไรบ้างที่ต้องทน ใน Unices ส่วนใหญ่การได้รับข้อมูลเกี่ยวกับชื่อของไฟล์ที่เปิดอยู่นั้นต้องมีการแยกวิเคราะห์โครงสร้างข้อมูลเคอร์เนล การอ้างอิงจากคำถามที่พบบ่อย 3.3“ เหตุใดจึงไม่รายงานชื่อพา ธ เต็ม”:
Lsof ไม่สามารถรับส่วนประกอบชื่อพา ธ จากแคชชื่อเคอร์เนลของภาษาต่อไปนี้:
เคอร์เนล Linux เท่านั้นที่บันทึกชื่อพา ธ แบบเต็มในโครงสร้างที่เก็บรักษาไว้เกี่ยวกับไฟล์ที่เปิดอยู่ แต่เมล็ดส่วนใหญ่จะแปลงชื่อพา ธ เป็นอุปกรณ์และหมายเลขโหนดเป็นสองเท่าและใช้สำหรับการอ้างอิงไฟล์ครั้งต่อไปเมื่อเปิดไฟล์แล้ว
หากคุณต้องการวิเคราะห์ข้อมูลจากlsof
เอาต์พุตให้แน่ใจว่าใช้-F
โหมด (หนึ่งฟิลด์ต่อบรรทัด) โดยเฉพาะ-F0
โหมด (ฟิลด์ที่คั่นด้วย null) ที่จะได้รับข้อมูลเกี่ยวกับการอธิบายไฟล์ที่เฉพาะเจาะจงของกระบวนการที่เฉพาะเจาะจงให้ใช้-a
ตัวเลือกด้วยและเช่น-p PID
-d NUM
lsof -a -p 123 -d 0 -F0n
/dev/fd/NUM
สำหรับ file descriptors ของกระบวนการปัจจุบัน
หลายตัวแปร Unix ให้วิธีการสำหรับกระบวนการในการเข้าถึงไฟล์ที่เปิดผ่านชื่อไฟล์: เปิดเทียบเท่ากับการโทร ชื่อเหล่านี้มีประโยชน์เมื่อโปรแกรมต้องการชื่อไฟล์ แต่คุณต้องการส่งไฟล์ที่เปิดอยู่แล้ว (เช่นไพพ์หรือซ็อกเก็ต) ตัวอย่างเช่นเชลล์ที่ใช้การทดแทนกระบวนการใช้หากมี (ใช้ไพพ์ที่มีชื่อชั่วคราวซึ่งไม่พร้อมใช้งาน)/dev/fd/NUM
dup(NUM)
/dev/fd
ในกรณีที่/dev/fd
มีอยู่นอกจากนี้ยังมีมัก (เสมอ?) คำพ้องความหมาย (บางครั้งการเชื่อมโยงสัญลักษณ์บางครั้งเชื่อมโยงอย่างหนักบางครั้งไฟล์มายากลที่มีคุณสมบัติเทียบเท่า) /dev/stdin
= /dev/fd/0
, /dev/stdout
= /dev/fd/1
, =/dev/stderr
/dev/fd/2
- ภายใต้ลินุกซ์คือการเชื่อมโยงสัญลักษณ์
/dev/fd
/proc/self/fd
- ภายใต้ unices ส่วนใหญ่ ( IRIX , OpenBSD , NetBSD , SCO, Solaris , …) รายการใน
/dev/fd
เป็นอุปกรณ์อักขระ พวกเขามักจะปรากฏว่า file descriptor เปิดหรือไม่และรายการอาจไม่พร้อมใช้งานสำหรับ file descriptor ด้านบนจำนวนที่แน่นอน
- ภายใต้ FreeBSD และ OSX ระบบไฟล์fdescfsจัดเตรียม
/dev/fd
ไดเรกทอรีแบบไดนามิกซึ่งตามหลังตัวอธิบายแบบเปิดของกระบวนการเรียก ไม่ได้ติดตั้งแบบคงที่/dev/fd
อยู่/dev/fd
- ภายใต้ OSF / 1 (Tru64)
/dev/fd
ให้บริการผ่านทางfdfs
- ไม่มี
/dev/fd
บน AIX หรือ HP-UX
pfiles
คำสั่งจะแสดงพา ธ ของตัวให้คำอธิบายไฟล์ จะดึงข้อมูลนี้จาก/proc/<pid>/path
ไดเรกทอรีที่คุณอาจพูดถึง ดูdocs.oracle.com/cd/E19253-01/817-0547/esxiq/index.html