ทำstrace
จากtail -f
มันอธิบายทุกอย่าง ส่วนที่น่าสนใจ:
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 fstatfs(3, {...}) = 0
13791 inotify_init() = 4
13791 inotify_add_watch(4, "/path/to/file", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 read(4, 0xd981c0, 26) = -1 EINTR (Interrupted system call)
มันทำอะไร มันตั้งค่าinotify
ตัวจัดการไฟล์และรอจนกว่าจะมีบางอย่างเกิดขึ้นกับไฟล์นี้ หากเคอร์เนลแจ้งtail
ผ่านตัวจัดการ inotify นี้ว่าไฟล์มีการเปลี่ยนแปลง (ปกติถูกผนวกเข้า) แล้วtail
1) ค้นหา 2) อ่านการเปลี่ยนแปลง 3) เขียนพวกเขาออกไปที่หน้าจอ
/proc/3844/fd/1
ในระบบของคุณเป็นลิงก์สัญลักษณ์/dev/pts/14
ซึ่งเป็นอุปกรณ์ตัวอักษร ไม่มีสิ่งเช่นเดียวกับบางอย่างเช่น "แผนที่หน่วยความจำ" ซึ่งสามารถเข้าถึงได้โดยที่ ดังนั้นจึงไม่มีสิ่งใดที่การเปลี่ยนแปลงอาจถูกลงชื่อเข้าใช้ inotify เนื่องจากไม่มีพื้นที่ดิสก์หรือหน่วยความจำที่สามารถเข้าถึงได้โดยที่
อุปกรณ์ตัวละครนี้เป็นเทอร์มินัลเสมือนซึ่งใช้งานได้จริงราวกับว่ามันเป็นซ็อกเก็ตเครือข่าย โปรแกรมที่รันบนเทอร์มินัลเสมือนนี้กำลังเชื่อมต่อกับอุปกรณ์นี้ (เช่นเดียวกับที่คุณเทลเน็ตลงในพอร์ต tcp) และเขียนสิ่งที่พวกเขาต้องการเขียนลงไป มีสิ่งที่ซับซ้อนเช่นกันเช่นการล็อกหน้าจอลำดับการควบคุมเทอร์มินัลและสิ่งเหล่านี้มักจัดการโดยการioctl()
โทร
ฉันคิดว่าคุณต้องการดูเทอร์มินัลเสมือนจริง มันสามารถทำได้บน linux แต่มันไม่ง่ายมันต้องการฟังก์ชั่นที่คล้ายกับเครือข่ายพร็อกซี่และการใช้งานioctl()
สายที่ยุ่งยากเล็กน้อย แต่มีเครื่องมือที่สามารถทำได้
ขณะนี้ฉันจำไม่ได้ว่าแพ็คเกจเดเบียนชนิดใดมีเครื่องมือสำหรับเป้าหมายนี้ แต่ด้วย googling เล็กน้อยคุณสามารถค้นหาได้อย่างง่ายดาย
ส่วนขยาย:เป็น @Jajesh กล่าวถึงที่นี่ (ให้เขา +1 ถ้าคุณให้ฉัน) watch
เครื่องมือที่มีชื่อว่า
ส่วนขยาย # 2: @kelnos พูดถึงเรื่องง่ายcat /dev/pts/14
ก็เพียงพอแล้ว ฉันลองมันและใช่มันใช้งานได้ แต่ไม่ถูกต้อง ผมไม่ได้ทดลองมากกับที่ แต่มันดูเหมือนว่าฉันราวกับว่าการส่งออกจะเข้าสู่สถานีเสมือนที่หายไปอย่างใดอย่างหนึ่งกับcat
คำสั่งหรือไปยังตำแหน่งเดิมและไม่เคยไปทั้งสอง แต่ก็ไม่แน่ใจ