คุณอาจเคยเจอคำพูดที่ว่า ทุกอย่างคือไฟล์ในลินุกซ์ แม้ว่าสิ่งนี้จะไม่เป็นความจริงทั้งหมด แต่ก็มีชุดของความจริงอยู่
ในระบบที่เหมือน Linux และ Unix ทุกอย่างก็เหมือนไฟล์ นั่นหมายถึงทรัพยากรในระบบ Unix จะได้รับ file descriptor รวมถึงอุปกรณ์จัดเก็บข้อมูล ซ็อกเก็ตเครือข่าย กระบวนการ ฯลฯ
file descriptor คือหมายเลขเฉพาะที่ระบุไฟล์และอุปกรณ์อินพุต/เอาต์พุตอื่นๆ อธิบายทรัพยากรและวิธีที่เคอร์เนลเข้าถึงได้ คิดว่าเป็นประตูสู่ทรัพยากรฮาร์ดแวร์ที่เป็นนามธรรมของเคอร์เนล
ขออภัย แนวคิดของ file descriptor อยู่นอกเหนือขอบเขตของบทช่วยสอนนี้ พิจารณาลิงก์ที่ให้ไว้ด้านล่างเพื่อเริ่มต้นเรียนรู้เพิ่มเติม:
https://en.wikipedia.org/wiki/File_descriptor
นั่นหมายความว่าระบบ Unix และ Unix เช่น Linux ใช้ไฟล์ดังกล่าวอย่างหนัก ในฐานะผู้ใช้ระดับสูงของ Linux การดูไฟล์ที่เปิดอยู่ รวมถึงกระบวนการและผู้ใช้ที่ใช้งานไฟล์เหล่านี้มีประโยชน์อย่างเหลือเชื่อ
บทช่วยสอนนี้จะเน้นที่วิธีการดูไฟล์ที่เปิดอยู่และกระบวนการหรือผู้ใช้ที่รับผิดชอบ
ข้อกำหนดเบื้องต้น
ก่อนที่เราจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- ระบบลินุกซ์
- ผู้ใช้ที่มีสิทธิ์รูทหรือ sudo
หากคุณมีสิ่งเหล่านี้ มาเริ่มกันเลย:
ยูทิลิตี้ LSOF
สร้างโดย Victor A Abell แสดงรายการไฟล์ที่เปิดอยู่ หรือเรียกสั้นๆ ว่า lsof เป็นยูทิลิตี้บรรทัดคำสั่งที่ช่วยให้เราดูไฟล์ที่เปิดอยู่และกระบวนการหรือผู้ใช้ที่เปิดไฟล์เหล่านั้น
ยูทิลิตี lsof มีอยู่ในลีนุกซ์รุ่นหลักๆ; อย่างไรก็ตาม คุณอาจพบว่าไม่มีการติดตั้งและอาจจำเป็นต้องติดตั้งด้วยตนเอง
วิธีการติดตั้ง lsof บน Debian/Ubuntu
ในการติดตั้งบน Debian ให้ใช้คำสั่ง:
sudo apt-get updatesudo apt-get installlsof-และ
วิธีการติดตั้งบน REHL/CentOS
ในการติดตั้งบน REHL และ CentOS ให้ใช้คำสั่ง:
sudodnf updatesudodnfติดตั้งlsof
วิธีการติดตั้งบน Arch
บน Arch ให้เรียกตัวจัดการแพ็คเกจโดยใช้คำสั่ง:
sudopacman-ของเขาsudopacman-NSlsof
วิธีการติดตั้งบน Fedora
บน Fedora ใช้คำสั่ง:
sudo ยำติดตั้งlsofเมื่อคุณติดตั้งและอัปเดตยูทิลิตี้ lsof แล้ว เราสามารถเริ่มใช้งานได้
การใช้งานเบื้องต้น
ในการใช้เครื่องมือ lsof ให้ป้อนคำสั่ง:
sudolsofเมื่อคุณรันคำสั่งข้างต้นแล้ว lsof จะดัมพ์ข้อมูลจำนวนมากดังที่แสดงด้านล่าง:
ผลลัพธ์ข้างต้นแสดงไฟล์ทั้งหมดที่เปิดโดยกระบวนการ ผลลัพธ์มีคอลัมน์ต่างๆ ซึ่งแต่ละคอลัมน์จะแสดงข้อมูลเฉพาะเกี่ยวกับไฟล์
- คอลัมน์คำสั่ง – แสดงชื่อกระบวนการที่ใช้ไฟล์
- PID – แสดงตัวระบุกระบวนการของกระบวนการโดยใช้ไฟล์
- TID – แสดง ID งาน (เธรด) ของกระบวนการ
- TASKCMD – แสดงชื่อของคำสั่งงาน
- USER – เจ้าของกระบวนการ
- FD – แสดงหมายเลขคำอธิบายไฟล์ นี่คือวิธีที่กระบวนการใช้ไฟล์ ตัวเลือกที่มีอยู่ในเอาต์พุตคอลัมน์นี้ประกอบด้วย:
- cwd - ไดเร็กทอรีการทำงานปัจจุบัน
- มีม – ไฟล์ที่แมปหน่วยความจำ
- pd – ไดเรกทอรีหลัก
- jld – ไดเรกทอรีคุก
- ltx – ข้อความห้องสมุดที่ใช้ร่วมกัน
- rtd - ไดเร็กทอรีราก
- txt – รหัสโปรแกรมและข้อมูล
- NS - ไฟล์ติดตามเคอร์เนล
- ผิดพลาด – ข้อผิดพลาดข้อมูลคำอธิบายไฟล์
- mmp - อุปกรณ์ที่แมปหน่วยความจำ
- พิมพ์ – แสดงประเภทของโหนดที่เกี่ยวข้องกับไฟล์ เช่น:
- Unix – สำหรับซ็อกเก็ตโดเมน Unix
- ถึงคุณ – หมายถึงไดเร็กทอรี
- REG – เป็นตัวแทนของไฟล์ปกติ
- CHR – หมายถึงไฟล์อักขระพิเศษ
- ลิงค์ – ไฟล์ลิงก์สัญลักษณ์
- BLK – บล็อกไฟล์พิเศษ
- INET – ซ็อกเก็ตโดเมนอินเทอร์เน็ต
- FIFO – ท่อที่มีชื่อ (ไฟล์เข้าก่อนออกก่อน)
- ท่อ – สำหรับท่อ
และอื่น ๆ อีกมากมาย.
- อุปกรณ์ – แสดงหมายเลขอุปกรณ์คั่นด้วยเครื่องหมายจุลภาคในลำดับของไฟล์อักขระพิเศษ บล็อกพิเศษ ปกติ ไดเร็กทอรี และไฟล์ NFS
- ขนาด/ปิด – แสดงขนาดของไฟล์ pr ออฟเซ็ตเป็นไบต์
- NODE – แสดงหมายเลขโหนดของไฟล์ในเครื่อง ประเภทสำหรับประเภทอินเทอร์เน็ตโปรโตคอล ฯลฯ
- ชื่อ – แสดงชื่อจุดเชื่อมต่อและ fs ที่ไฟล์ตั้งอยู่
บันทึก: โปรดดูคู่มือ lsof สำหรับข้อมูลโดยละเอียดเกี่ยวกับคอลัมน์
วิธีแสดงกระบวนการที่เปิดไฟล์
Lsof ให้ตัวเลือกแก่เราที่ช่วยเรากรองผลลัพธ์เพื่อแสดงเฉพาะกระบวนการที่เปิดไฟล์เฉพาะ
ตัวอย่างเช่น หากต้องการดูไฟล์ที่เปิดไฟล์ /bin/bash ให้ใช้คำสั่งดังนี้:
sudolsof/เป็น/ทุบตีสิ่งนี้จะให้ผลลัพธ์แก่คุณดังที่แสดงด้านล่าง:
คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิดชื่อโหนดksmtuned1025รูท txt REG253,0 1150704 428303 /usr/เป็น/ทุบตี
ทุบตี 2968centos txt REG253,0 1150704 428303 /usr/เป็น/ทุบตี
ทุบตี 3075centos txt REG253,0 1150704 428303 /usr/เป็น/ทุบตี
วิธีแสดงไฟล์ที่เปิดโดยผู้ใช้รายใดรายหนึ่ง
นอกจากนี้เรายังสามารถกรองผลลัพธ์เพื่อแสดงไฟล์ที่เปิดโดยผู้ใช้เฉพาะ เราทำสิ่งนี้โดยใช้แฟล็ก -u ตามด้วยชื่อผู้ใช้เป็น:
sudolsof-ยูร้อยสิ่งนี้จะให้ผลลัพธ์แก่คุณดังที่แสดงด้านล่าง:
วิธีแสดงไฟล์ที่เปิดโดยกระบวนการเฉพาะ
สมมติว่าเราต้องการดูไฟล์ทั้งหมดที่เปิดโดยกระบวนการเฉพาะ? สำหรับสิ่งนี้ เราสามารถใช้ PID ของกระบวนการเพื่อกรองผลลัพธ์ได้
ตัวอย่างเช่น คำสั่งด้านล่างแสดงไฟล์ที่เปิดโดย bash
sudolsof-NS 3075สิ่งนี้จะให้เฉพาะไฟล์ที่เปิดโดย systemd เท่านั้นดังที่แสดง:
วิธีแสดงไฟล์ที่เปิดอยู่ในไดเร็กทอรี
ในการรับไฟล์ที่เปิดอยู่ในไดเร็กทอรีที่ระบุ เราสามารถส่งตัวเลือก +D ตามด้วยพาธไดเร็กทอรี
ตัวอย่างเช่น แสดงรายการไฟล์ที่เปิดอยู่ในไดเร็กทอรี /etc
sudolsof +D/ฯลฯด้านล่างนี้เป็นผลลัพธ์สำหรับสิ่งนี้:
วิธีแสดงการเชื่อมต่อเครือข่าย
เนื่องจากทุกอย่างใน Linux เป็นไฟล์ เราจึงสามารถรับไฟล์เครือข่าย เช่น ไฟล์ TCP หรือการเชื่อมต่อ
เราสามารถใช้คำสั่ง:
sudolsof-ผมTCPสิ่งนี้จะให้การเชื่อมต่อ TCP ในระบบแก่คุณ
คุณยังสามารถกรองตามพอร์ตเฉพาะโดยใช้คำสั่งที่แสดงด้านล่าง:
sudolsof-ผม:22สิ่งนี้จะให้ผลลัพธ์แก่คุณดังที่แสดงด้านล่าง:
วิธีแสดงไฟล์อย่างต่อเนื่อง
Lsof ให้โหมดการวนซ้ำเอาต์พุตทุกสองสามวินาทีแก่เรา ซึ่งช่วยให้คุณสามารถตรวจสอบไฟล์ที่เปิดโดยกระบวนการหรือผู้ใช้อย่างต่อเนื่อง
อย่างไรก็ตาม ตัวเลือกนี้ต้องการให้คุณยุติกระบวนการด้วยตนเอง
ตัวอย่างเช่น คำสั่งด้านล่างจะตรวจสอบไฟล์ที่เปิดบนพอร์ต 22 อย่างต่อเนื่อง:
sudolsof -r-ผม:22
อย่างที่คุณเห็น ในลูปที่สาม lsof จับการเชื่อมต่อที่สร้างไว้กับเซิร์ฟเวอร์บน SSH
บทสรุป
Lsof เป็นยูทิลิตี้ที่มีประโยชน์อย่างเหลือเชื่อ ช่วยให้คุณสามารถตรวจสอบไฟล์สำคัญตลอดจนตรวจสอบผู้ใช้และดำเนินการเปิดไฟล์ สิ่งนี้มีประโยชน์อย่างเหลือเชื่อเมื่อแก้ไขปัญหาหรือค้นหาความพยายามที่เป็นอันตรายต่อระบบ
ดังที่แสดงในบทช่วยสอนนี้ โดยใช้ตัวอย่างและวิธีการต่างๆ คุณสามารถรวมฟังก์ชันการทำงานที่มีให้โดยเครื่องมือ lsof สำหรับการตรวจสอบแบบกำหนดเอง
ขอบคุณสำหรับการอ่านและแบ่งปัน! ฉันหวังว่าคุณจะได้เรียนรู้สิ่งใหม่!