ฉันจะอ่านไฟล์ sh ได้อย่างไรในขณะที่มันกำลังทำงานอยู่ แต่ถูกลบไปแล้ว?


20

ในการสัมภาษณ์พวกเขาถามคำถามนี้กับฉัน

มีไฟล์ sh ที่กำลังทำงานอยู่ แต่ถูกลบไปนับตั้งแต่เริ่มการทำงาน

พวกเขาต้องการให้ฉันค้นหากระบวนการและอ่านไฟล์

ฉันจัดการเพื่อค้นหากระบวนการด้วย

ps -ef | grep test.sh

และพยายามอ่านโดยใช้

cat /proc/PID/cmdline test.sh

แต่มันบอกว่า

no such file or directory

ฉันไม่รู้ว่าควรทำอะไรต่อไปดังนั้นฉันต้องข้ามสิ่งนี้ไป

อาจเป็นคำถามง่าย ๆ แต่นั่นเป็นคำถามที่ดีสำหรับฉันและฉันต้องการทราบคำตอบจริงๆ พวกคุณช่วยได้ไหม

คำตอบ:


24
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file

โดยที่ {pid} เป็นรหัสของกระบวนการของคุณและ/tmp/fileจะมีเนื้อหา ใช้สถานที่และชื่ออื่นหากคุณต้องการเก็บรักษาไว้

  • {pid} คือรหัสของกระบวนการ
  • {fd} เป็นตัวอธิบายไฟล์ lsofควรแสดง fd lsofมีแนวโน้มที่จะแสดง "ลบ" ในบรรทัดด้วยดังนั้นคุณก็ทำได้grepเช่นกัน lsof -nP +L1จะแสดงรายการไฟล์ทั้งหมดที่มีลิงค์น้อยกว่า 1 ไฟล์ที่ถูกลบจะมี 0 เพิ่ม a | grep {pid}เพื่อค้นหาเฉพาะ PID ของคุณ
  • จากของหวาน: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'เพื่อรับ fd
  • จากความคิดเห็น: คุณสามารถใช้less, catหรือcpมากเกินไป ฉันโตขึ้นtail:)

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