วิธีแสดงรายการตัวอธิบายไฟล์ที่เปิด (และไฟล์ที่อ้างถึง) ในเซสชัน bash ปัจจุบันของฉัน


23

ฉันกำลังทำงานในเซสชั่นทุบตีแบบโต้ตอบ ฉันได้สร้าง file descriptors โดยใช้ exec และฉันต้องการแสดงรายการสถานะปัจจุบันของเซสชัน bash ของฉัน

มีวิธีแสดงรายการตัวอธิบายไฟล์ที่เปิดอยู่หรือไม่?


1
ตรวจสอบลิงค์
Kamaraj

@Kamaraj ขอบคุณ ดังนั้นทุบตีไม่มีในตัวที่จะทำเช่นนั้น? ฉันต้องใช้ฟีเจอร์เฉพาะของ linux หรือไม่
dangonfast

bashไม่ได้เป็นส่วนหนึ่งของเคอร์เนลดังนั้นจึงไม่สามารถรู้ได้ว่ากระบวนการอื่นกำลังทำอะไรอยู่แม้แต่กระบวนการที่เริ่มต้น
Julie Pelletier

@JuliePelletier: แต่กระบวนการลูกไม่เปลี่ยนตัวอธิบายไฟล์ของกระบวนการหลักพวกเขาทำอย่างไร
dangonfast

คำตอบ:


27

ใช่สิ่งนี้จะแสดงตัวอธิบายไฟล์ที่เปิดอยู่ทั้งหมด:

$ ls -la /proc/$$/fd
total 0
dr-x------ 2 sorontar sorontar  0 Dec 28 00:56 .
dr-xr-xr-x 9 sorontar sorontar  0 Dec 28 00:56 ..
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 sorontar sorontar 64 Dec 28 00:56 4 -> /home/sorontar/testfile.txt

แน่นอนตามปกติ: 0 คือ stdin, 1 คือ stdout และ 2 คือ stderr
ที่สี่เป็นไฟล์เปิด (เขียน) ในกรณีนี้


นั่นเป็นเพียงรายการกระบวนการปัจจุบันไม่ได้เป็นลูกหรือผู้ปกครอง
Julie Pelletier

@JuliePelletier ชื่อคำถามพูดว่า 'เซสชันทุบตีปัจจุบันของฉัน' ฉันเข้าใจผิดหรือเปล่า?
sorontar

@JuliePelletier: ทำไมฉันถึงสนใจไฟล์อธิบายที่ใช้โดยลูก ๆ หรือผู้ปกครองของเซสชัน bash ปัจจุบันของฉัน ฉันสนใจเฉพาะไฟล์ descriptors ที่ถูกใช้โดยเซสชัน bash ปัจจุบันของฉัน
dangonfast

@delavnog: ดีแล้ว หากตอบคำถามของคุณคุณควรทำเครื่องหมายว่าเป็นเช่นนั้น
Julie Pelletier

4

สมมติว่าคุณต้องการแสดงไฟล์ descriptor ที่แนบกับเทอร์มินัลใด ๆ คุณสามารถใช้lsof/ fuserหรือสิ่งที่คล้ายกัน:

$ lsof -p $$ 2>/dev/null | awk '$NF ~ /\/pts\//'
bash    32406 foobar    0u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    1u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    2u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    3u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar  255u   CHR 136,31      0t0      34 /dev/pts/31

เครื่องมือเหล่านี้แยกวิเคราะห์โดยทั่วไป/procดังนั้นคุณสามารถเข้าถึงได้/proc/$$/fd/เช่น:

ls /proc/$$/fd/*

2
การเลือก\/pts\/ปฏิเสธไฟล์ที่เปิดเช่นexec 4>testfile.txt
sorontar

@ sorontar ใช่แล้วอย่างที่ฉันบอกว่าอันนี้เป็นเพียงรายการที่แนบมากับเทอร์มินัลใด ๆ
heemayl

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