คำถามติดแท็ก open-files

การจัดการกับไฟล์ที่เปิดอยู่ในโปรแกรม

3
วิธีแสดงรายการตัวอธิบายไฟล์ที่เปิด (และไฟล์ที่อ้างถึง) ในเซสชัน bash ปัจจุบันของฉัน
ฉันกำลังทำงานในเซสชั่นทุบตีแบบโต้ตอบ ฉันได้สร้าง file descriptors โดยใช้ exec และฉันต้องการแสดงรายการสถานะปัจจุบันของเซสชัน bash ของฉัน มีวิธีแสดงรายการตัวอธิบายไฟล์ที่เปิดอยู่หรือไม่?

2
ความสามารถในการพกพาของลิงค์ไฟล์อธิบาย
ฉันสงสัยอยู่เสมอ แต่ไม่เคยใช้เวลาในการค้นหาดังนั้นฉันจะทำตอนนี้ - การใช้งานแบบพกพาแสดงได้อย่างไรจากที่นี่/proc/$$/fd/$Nหรือ /dev/fd/$Nฉันเข้าใจการรับประกัน POSIX /dev/null, /dev/tty, and /dev/console (แม้ว่าฉันจะพบว่าในวันอื่น ๆ หลังจากอ่านความคิดเห็นในคำตอบนี้ )แต่แล้วคนอื่น ๆ เหล่านี้ล่ะ? เท่าที่ฉันสามารถบอกได้ว่าพวกเขาเป็นเรื่องธรรมดา แต่ในระบบใดที่ฉันไม่สามารถคาดหวังว่าจะพบพวกเขา ทำไมจะไม่ล่ะ? มีแนวโน้มที่จะพบหนึ่งมากกว่าอื่น ๆ ? พวกเขาจะแสดงเหมือนแอตทริบิวต์เสมอหรือไม่ ฉันมักจะใช้อุปกรณ์เหล่านี้อย่างกว้างขวางในทุกรูปแบบและฉันอยากจะรู้ว่าถ้ามีโอกาสฉันจะลองสั้น ๆ ควรเข้าใจคำถามข้างต้นเป็นเพียงสิ่งที่ฉันคิดว่าฉันอยากรู้ แต่เนื่องจากฉันต้องถามตั้งแต่แรกฉันอาจไม่ทราบดีที่สุดในเรื่องนี้และพวกเขาไม่ควรพิจารณาข้อกำหนดที่เข้มงวดสำหรับ คำตอบ. กรุณาช่วยฉันด้วยถ้าทำได้โปรดเถอะ

6
ทางเลือกสำหรับคำสั่ง“ lsof”?
ในหลายกรณี "lsof" ไม่ได้ติดตั้งบนเครื่องที่ฉันต้องทำงาน แต่ "function" ของ lsof จะต้องใช้อย่างมาก (เช่นบน AIX) : \ มีแอปพลิเคชั่น "lsof" ใด ๆ ในโลกที่ไม่ใช่หน้าต่างหรือไม่? อัปเดต: สำหรับตัวอย่าง: ฉันจำเป็นต้องรู้ว่ากระบวนการใดใช้ไดเรกทอรี "/ home / ชื่อผู้ใช้"?

1
ทำไม file-nr และ lsof ถึงมีความแตกต่างกัน? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันกำลังเจอปัญหาทันทีทันใด; แอปพลิเคชันทั้งหมดและเซิร์ฟเวอร์ของฉันทำงานได้ดีและในทันใดฉันเห็นจำนวนไฟล์ที่เปิดค้าง ฉันกำลังตรวจสอบมันด้วยคำสั่งนี้: cat /proc/sys/fs/file-nr เมื่อฉันตรวจสอบสิ่งนี้มันจะแสดง44544 0 128000ดังนั้น 44544 คือจำนวนไฟล์ที่เปิด แต่เมื่อฉันตรวจสอบด้วยคำสั่งนี้ - lsof | wc -l มันแสดง - 28384 แล้วอันไหนที่ถูกต้อง? ขีด จำกัด สูงสุดสำหรับการเปิดไฟล์ของฉันคือ 65535 ulimit -a open files (-n) 65535 ฉันต้องการทราบกระบวนการ 5 อันดับแรกที่ใช้ไฟล์ที่เปิดมากขึ้น ฉันสามารถรับได้จากนี้lsofแต่จำนวนที่แสดงที่นี่แตกต่างจากคำสั่งอื่น ๆ ที่ฉันได้กล่าวไว้ข้างต้น ฉันสามารถรับรายละเอียดของกระบวนการที่นับได้ด้วยคำสั่งนี้cat /proc/sys/fs/file-nrหรือไม่? …

2
จะทราบได้อย่างไรว่ากระบวนการใดที่เขียนถึง STDOUT
ฉันมีกระบวนการทำงานสองกรณี หนึ่งในนั้นคือ "frEAkIng oUT!" และข้อผิดพลาดการพิมพ์ไม่หยุดที่ STDOUT ฉันต้องการฆ่ากระบวนการที่เสียหาย แต่ฉันต้องทำให้แน่ใจว่าฉันจะไม่ยุติกระบวนการที่ผิด พวกเขาทั้งคู่เริ่มต้นพร้อมกันและใช้topฉันสามารถเห็นพวกเขาทั้งคู่ใช้หน่วยความจำและ CPU ในปริมาณเท่ากัน ฉันไม่สามารถหาสิ่งใดที่ชี้ให้เห็นว่ากระบวนการใดที่ทำงานไม่ดี สิ่งที่ปลอดภัยที่สุดคือการพิจารณาว่ากระบวนการใด / pid ที่เขียนไปยัง STDOUT มีวิธีใดที่จะทำเช่นนั้น?

3
ตรวจสอบสิ่งที่ถูกส่งไปยัง / dev / null?
เพื่อความสนุกสนาน: มีวิธีในการตรวจสอบ / จับภาพ / ถ่ายโอนข้อมูลสิ่งที่เขียนไป/dev/nullหรือไม่? บน Debian หรือ FreeBSD หากเป็นไปได้โซลูชันเฉพาะของ OS อื่น ๆ ก็ยินดีเช่นกัน

3
เขียนไฟล์ที่มีอยู่ใหม่เพื่อให้มันถูกแทนที่ด้วยเวอร์ชั่นใหม่แบบ atom เพียงครั้งเดียวเท่านั้น
ฉันจำได้ว่าอ่านที่ไหนสักแห่งที่เคยมีใน Unices บางวิธีที่จะเปิดไฟล์ที่มีอยู่สำหรับการเขียนด้วยค่าสถานะที่ขอให้เคอร์เนลใช้เวอร์ชั่นเก่า (สำหรับกระบวนการอื่น ๆ ที่เข้าถึงมันเพื่ออ่าน) จนกระทั่ง "ใหม่ "รุ่นเขียนอย่างสมบูรณ์ (ปิด fd) จากจุดที่ไฟล์ปรากฏเป็นรุ่นใหม่ กล่าวอีกนัยหนึ่งกระบวนการอื่นอาจเห็นเวอร์ชันเก่าหรือกระบวนการใหม่ไม่เคยเขียนไม่สมบูรณ์ ใครบางคนที่มีความรู้สามารถชี้ให้ฉันอ้างอิงได้หรือไม่?

7
การใช้ซ็อกเก็ตเครือข่ายนี้คืออะไร
ฉันพยายามใช้ NTP เพื่ออัปเดตเวลาบนเครื่องของฉัน อย่างไรก็ตามมันทำให้ฉันมีข้อผิดพลาด: host # ntpdate ntp1.example.org 10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting ข้อผิดพลาด "ซ็อกเก็ตใช้งานอยู่" หมายถึงอะไร ฉันจะดูสิ่งที่ใช้ซ็อกเก็ตนี้ได้อย่างไร สิ่งนี้เกิดขึ้นในระบบ CentOS 4.x ของฉัน แต่ฉันเห็นบน FreeBSD 7.x, Ubuntu 10.04 และ Solaris 10

4
วิธีการสลับไปยังรายการไดเรกทอรีจากมุมมองไฟล์ในกลุ่ม?
ฉันได้เปิดผบvim some/dir. ฉันสามารถนำทางภายในต้นไม้ได้ แต่เมื่อฉันเปิดไฟล์ที่ฉันสงสัยฉันจะปิดมุมมองไฟล์ได้อย่างไรเพื่อกลับไปยังรายชื่อไดเรกทอรีเพื่อนำทางไปยังไฟล์อื่น :wqไม่มีตัวเลือกเนื่องจากจะปิดเซสชันทั้งหมดเป็นกลุ่ม ฉันเดาว่ามีโหมดสำหรับโหมดนั้น แต่ฉันไม่รู้ว่ามันเรียกว่าอะไรและฉันจะเริ่มยังไง จะปิดไฟล์ไปยังมุมมองการนำทางไฟล์ได้อย่างไร?

2
ไฟล์ที่เปิดทำงานอย่างไรในระบบลินุกซ์?
ฉันเพิ่งเปลี่ยนชื่อไฟล์บันทึกเป็น "foo.log.old" และสันนิษฐานว่าแอปพลิเคชันจะเริ่มเขียนไฟล์บันทึกใหม่ที่ "foo.log" ฉันประหลาดใจที่พบว่ามันติดตาม logfile ไปยังชื่อใหม่และเก็บบรรทัดต่อท้ายไว้ที่ "foo.log.old" ใน Windows ฉันไม่คุ้นเคยกับพฤติกรรมแบบนี้ - ฉันไม่รู้ว่าเป็นไปได้หรือไม่ที่จะนำไปใช้ พฤติกรรมนี้นำมาใช้อย่างแน่นอนใน linux อย่างไร ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับมันได้ที่ไหน

3
ดูการเปลี่ยนเส้นทาง STDOUT ของกระบวนการทำงาน
ถ้าฉันเริ่มต้นแอพด้วยคำสั่งนี้: /path/to/my/command >> /var/log/command.log และคำสั่งจะไม่ส่งคืนมีวิธีอื่นจากพรอมต์อื่นหรือไม่เพื่อดูว่าการเปลี่ยนเส้นทาง STDOUT ถูกตั้งค่าเป็นอะไร ฉันกำลังมองหาบางอย่างเช่น cat /proc/PID/redirects หรือ ps -??? | grep PID แต่วิธีการใด ๆ ที่จะทำ

2
จะเกิดอะไรขึ้นเมื่อฉันปิด () file descriptor?
ฉันพยายามดึงภาพทั้งหมดด้วยตัวอธิบายไฟล์ ว่าฉันมี process1 ซึ่งเริ่มมีไฟล์อธิบายเหล่านี้: _process1_ | | | 0 stdin | | 1 stdout | | 2 stderr | |__________| จากนั้นฉันปิดไฟล์ descriptor 1: close(1); แฟ้มบ่ง 1 แปล (คะแนน) ที่ stdout โครงสร้างไฟล์ในเคอร์เนลที่เปิดไฟล์ตาราง ด้วยรหัสด้านบนตัวอธิบายไฟล์ 1 จะถูกลบออกจากตารางกระบวนการซึ่งกลายเป็น: _process1_ | | | 0 stdin | | 2 stderr | |__________| แต่จะเกิดอะไรขึ้นในเคอร์เนล? ที่ไม่stdoutโครงสร้างแฟ้มได้รับ deallocated? เป็นไปได้อย่างไรถ้า …

3
เปิดไฟล์จัดการจะไปที่ไหนเมื่อพวกเขาตาย?
เกิดอะไรขึ้นกับไฟล์ที่ถูกลบในขณะที่มีการจัดการไฟล์เปิดอยู่ ฉันสงสัยมาตั้งแต่เริ่มคิดแล้วว่าฉันสามารถลบไฟล์วิดีโอในขณะที่เล่นในMPlayerและมันจะยังคงเล่นต่อไปจนจบ มันดึงข้อมูลจากที่ไหน มันยังมาจากฮาร์ดไดรฟ์หรือไม่? มันถูกคัดลอกไปยัง RAM เมื่อฉันลบไฟล์หรือไม่ หากยังอยู่ในฮาร์ดไดรฟ์จะเกิดอะไรขึ้นถ้าฉันเติมระบบไฟล์ในขณะที่โปรแกรมกำลังอ่านจากพื้นที่ที่ไม่ได้ถูกจัดสรรเป็นหลัก? หากบัฟเฟอร์ใน RAM เกิดอะไรขึ้นถ้าฉันล้างบัฟเฟอร์ จะเกิดอะไรขึ้นถ้าไฟล์นั้นอยู่ใน NFS share – มันถูกเก็บไว้บนเซิร์ฟเวอร์? (นั่นเป็นความเสี่ยงด้านความปลอดภัยหรือไม่ - DoS ด้วยไฟล์รีโมตแบบเปิดจำนวนมากจัดการใช่หรือไม่) การทำlsof -n |grep '(deleted)'บางครั้งให้ผลลัพธ์ที่น่าสนใจ ถ้าฉันอัปเกรดแพ็คเกจที่แลกเปลี่ยนไฟล์ไลบรารีที่แชร์แล้วการรันโปรแกรมที่ใช้ไลบรารีเหล่านั้นจะยังคงสามารถใช้งานได้ราวกับไม่มีอะไรเปลี่ยนแปลง คำถามโบนัส: มีวิธีที่จะรับข้อมูลกลับมาจากความตายในสถานการณ์นี้หรือไม่?

4
ข้อผิดพลาด `ls` เมื่อลบไดเรกทอรี
ฉันมีกระสุนสองนัดที่เปิดอยู่ สิ่งแรกคือในไดเรกทอรี A. ในวินาทีฉันลบไดเรกทอรี A แล้วสร้างใหม่ เมื่อฉันกลับไปที่เชลล์ตัวแรกและพิมพ์lsเอาต์พุตคือ: ls: cannot open directory .: Stale file handle ทำไม? ฉันคิดว่าเชลล์แรก (อันที่ยังคงเปิดอยู่ในไดเรกทอรีที่ไม่มีอยู่) จะ "หยุด" ในขณะที่รอคำสั่งถัดไปและจะไม่ "รู้" ว่าไดเรกทอรีนั้นถูกลบและสร้างใหม่ เชลล์เก็บการอ้างอิง "ที่ลึกกว่า" ไปยังไดเร็กทอรีการทำงานปัจจุบันนอกเหนือจากสตริง$PWDหรือไม่?

2
อ่าน“ / proc” เพื่อทราบว่ากระบวนการเปิดพอร์ตหรือไม่
ฉันจำเป็นต้องรู้ว่ากระบวนการที่มี PID ที่กำหนดเป็นเปิดพอร์ตโดยไม่ใช้คำสั่งภายนอกหรือไม่ ฉันต้องใช้/procระบบไฟล์ ฉันสามารถอ่าน/proc/$PID/net/tcpไฟล์ได้และรับข้อมูลเกี่ยวกับพอร์ต TCP ที่เปิดโดยกระบวนการ อย่างไรก็ตามในกระบวนการมัลติเธรด/proc/$PID/task/$TIDไดเร็กทอรีจะมีnet/tcpไฟล์ด้วย คำถามของฉันคือ: ฉันจะต้องข้ามnet/tcpไฟล์เธรดทั้งหมดหรือไม่พอร์ตที่เปิดโดยเธรดจะถูกเขียนลงในnet/tcpไฟล์กระบวนการ
13 linux  tcp  proc  open-files 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.