ทำไมเทอร์มินัลสามารถถอนการติดตั้งตัวเอง?


25

ภาพหน้าจอ

วิธีการที่ไม่apt-get remove xtermผ่าน? และหลังจากถอนการติดตั้งแล้วxtermจะไม่ปิดและทำงานได้ตามปกติ

เป็นxtermกระบวนการที่เก็บไว้ชั่วคราวในแรมในขณะที่มันทำงานได้อย่างไร


6
เป็นที่แน่นอนมันไม่ได้จริงๆถอนการติดตั้งตัวเอง - apt-getจะถอนการติดตั้งxtermและมีความคิดที่ว่ามันอย่างใดขึ้นกับไม่มีxtermกระบวนการ - "ทำไมสามารถ xterm ถอนการติดตั้งในขณะที่ทำงาน" ดังนั้นจึงเป็นเรื่องเกี่ยวกับ เป็นคำถามที่ดี
Volker Siegel

2
มันคล้ายกับวิธีที่คุณสามารถลบฮาร์ดดิสก์ในขณะที่ใช้งานระบบปฏิบัติการ
jkd

คำตอบ:


53

ไม่มาก ไฟล์ถูกเปิดโดยโปรแกรม การลบไฟล์ (แล้วแทนที่ด้วยเวอร์ชันอื่น) จะไม่ส่งผลกระทบต่อโปรแกรมที่กำลังทำงานอยู่เนื่องจากไฟล์ต้นฉบับถูกเปิดค้างไว้ (แม้ว่าจะไม่มีชื่อบนดิสก์เพื่อเปิดอีกครั้ง) จนกว่าโปรแกรมจะเสร็จสิ้น เฉพาะเมื่อจัดการทั้งหมดกับไฟล์ถูกปิดเป็นบล็อกข้อมูลในดิสก์ที่นำออกใช้ จนกว่าจะถึงวันนั้นไฟล์ที่เปิดสามารถอ่านและเขียนได้เหมือนปกติ - การเปลี่ยนแปลงเพียงอย่างเดียวคือไม่มีใครสามารถเปิดได้ตั้งแต่ลบชื่อแล้ว

ในขณะที่บางส่วนของโปรแกรมอาจถูกอ่านเข้าไปในหน่วยความจำเมื่อมันถูกลบพวกเขายังอาจถูกทิ้งและอ่านอีกครั้งในภายหลังหรือส่วนใหม่ของโปรแกรมที่ไม่เคยถูกเรียกใช้งานมาก่อนก็ยังสามารถโหลดได้จากไฟล์ที่ถูกลบ


4
นี่คือเหตุผลที่แท้จริง .... นี่เป็นเหตุผลว่าทำไมจึงrm -rf /ทำงาน .....
heemayl

6
หากคุณต้องการใช้คำว่า "ทำงาน" เพื่ออธิบายความผิดพลาดทุกอย่างให้สำเร็จ ;) ที่น่าสนใจrm -rf /จะไม่ทำงานถ้าคุณพยายามที่จะเรียกใช้มันเป็นครั้งที่สองทันทีหลังจากนั้น;)
thomasrutter

1
ฉันมักจะเห็นlsofผลลัพธ์"/ some / file / name" (ลบแล้ว) " และฉันรู้ว่านี่เป็นไฟล์ 'zombie' ที่ดูเหมือน ... แต่มีวิธีบันทึกเนื้อหาของไฟล์ดังกล่าวไม่ให้หายไป เมื่อจัดการไฟล์ล่าสุดตาย?
Kilian Foth

1
@KilianFoth หากคุณสามารถค้นหากระบวนการที่ยังคงเปิดไฟล์อยู่คุณสามารถคัดลอกจาก / proc / $ PID / fd / $ ID ไปยังไฟล์อื่น แต่ฉันไม่สามารถหาวิธีกู้คืนไฟล์ได้ ในสถานที่เป็นความพยายามทั้งหมดที่เชื่อมโยงอย่างหนักไฟล์ล้มเหลว
psusi

3
@KilianFoth หากมีการจัดการไฟล์แล้วrootอาจจะสามารถสร้างชื่อให้มัน (และป้องกันการลบ) โดยใช้การlinkatเรียกระบบ แต่ไฟล์ปฏิบัติการและไลบรารีนั้นถูกแม็พหน่วยความจำซึ่งไม่ต้องการการจัดการไฟล์ ฉันไม่ทราบวิธีการจัดการกับไฟล์ที่มีอยู่เพียงเพราะมันถูกแมปหน่วยความจำ แม้ว่าสามารถเข้าถึงไฟล์ที่เรียกใช้งานได้/procในขณะที่กำลังทำงานอยู่ดังนั้นมันเป็นเพียงไลบรารีและไฟล์ที่แมปหน่วยความจำอื่น ๆ ซึ่งอาจอยู่นอกเหนือการกู้คืน หากคุณต้องการรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้คุณควรถามเป็นคำถามแยกต่างหาก
kasperd

8

เป็นxtermกระบวนการที่เก็บไว้ชั่วคราวในแรมในขณะที่มันทำงานได้อย่างไร

เผง คล้ายกับกระบวนการที่ให้คุณติดตั้งการอัปเดตสิ่งต่าง ๆ ในขณะที่กำลังทำงานอยู่โดยที่ไม่ทำงานล้มเหลว และทำไมคุณต้องเริ่มบริการใหม่หลังจากคุณอัปเดต เมื่อสิ่งที่กำลังทำงานอยู่ไบนารีของมันจะอยู่ในหน่วยความจำ

ถ้ามันขึ้นอยู่กับไฟล์อื่น ๆ (ที่ไม่ได้อยู่ในสถานะ "เปิด") ที่ถูกลบหรือแทนที่นั่นอาจทำให้เกิดปัญหา แต่สำหรับบางสิ่งที่ไม่ต่อเนื่องเหมือนxtermกัน


6
ไม่มาก .. บางส่วนของโปรแกรมจะถูกอ่านลงในหน่วยความจำเมื่อจำเป็นเท่านั้นและอาจถูกทิ้งเมื่อใดก็ได้เพื่อเพิ่มหน่วยความจำสำหรับการใช้งานอื่น ๆ และจะต้องอ่านอีกครั้งในภายหลัง (เมื่อโปรแกรมพยายามเข้าถึงส่วนเหล่านั้น อีกครั้ง)
psusi

17
มันไม่จำเป็นต้องอยู่ใน RAM แต่ไฟล์จะไม่ถูกลบจนกว่าจะไม่ได้เปิดรวมถึงไฟล์ xterm ที่สามารถใช้งานได้
253751

@immibis ดังนั้นคำตอบของฉัน;)
psusi

2

อันที่จริงแล้วมันเป็นคุณสมบัติของการทำงานของคอมพิวเตอร์: เมื่อมีการเรียกใช้โปรแกรมมันจะถูกโหลดเข้าสู่หน่วยความจำและทำงานได้จากที่นั่น

ไฟล์ใช้งานได้ในวิธีเดียวกัน เพื่อหลีกเลี่ยงปัญหาไฟล์จำนวนมากในระบบ UNIX-ish สร้างการล็อค

ปริศนาที่เกิดขึ้นจริงคือเหตุผลที่คุณไม่สามารถทำสิ่งนั้นและสิ่งที่คล้ายกันใน Windows

คุณลักษณะนี้เป็นสิ่งที่ช่วยให้คุณอัปเดตทั้งระบบรวมถึงโปรแกรมที่ใช้งานอยู่ในระบบของคุณ ;)


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