คุณสามารถเขียนไฟล์หรือสตรีมอินพุตอื่น ๆ/dev/null
แต่ไม่รวมถึงไดเร็กทอรี หากคุณลองย้ายไดเรกทอรีไป/dev/null
จะรายงานข้อผิดพลาดเนื่องจาก/dev/null
ไม่ใช่ไดเรกทอรี แต่เป็นไฟล์
อย่างไรก็ตามเนื่องจากคุณต้องการทำการทดสอบ/dev/null
คุณจะได้รับการแนะนำให้รู้จักผลที่ตามมาจากการย้ายไฟล์ไปยังการเขียนทับ/dev/null
และวิธีการกู้คืนจากสถานการณ์ดังกล่าว:
ตามที่แนะนำโดย@Rmanoในคำตอบของคำถามนี้เพื่อที่จะทำการทดสอบกับ/dev/null
เราเราควรสร้างสำเนาของมันขึ้นมาและทำการทดลองของเรา ดังนั้นมาสร้าง/tmp/null
และใช้มันเพื่อการทดลองของเรา:
sudo mknod -m 0666 /tmp/null c 1 3
ตอนนี้เป็นต้นไป/tmp/null
เป็นของเรา/dev/null
สำหรับทุกวัตถุประสงค์:
ขอให้เราสร้างtest_file
และภายในไดเรกทอรีที่เรียกว่าtest_dir
ask_ubuntu
$ mkdir ask_ubuntu
$ cd ask_ubuntu
$ touch test_file
$ mkdir test_dir
$ echo "Let us test if we can recover our test_file." > test_file
ต่อไปนี้แสดงเนื้อหาของask_ubuntu
ไดเรกทอรี:
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:10 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
-rw-r--r-- 1 aditya aditya 0 Mar 18 17:10 test_file
ตอนนี้ลองย้ายtest_file
ไปที่/tmp/null
และดูเนื้อหาของask_ubuntu
:
$ sudo mv test_file /tmp/null # This succeeds
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
คำสั่งสำเร็จและtest_file
ไม่สามารถใช้ได้อีกต่อไป ตอนนี้พยายามย้ายtest_dir
ไปสู่/tmp/null
สิ่งที่ไม่สำเร็จ:
$ sudo mv test_dir/ /tmp/null
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’
test_dir
ยังคงอยู่ภายในask_ubuntu
:
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
ตอนนี้ให้เราคิดหากเราสามารถกู้คืนtest_file
จาก/tmp/null
:
$ cat /tmp/null
Let us test if we can recover our test_file.
ดังนั้นมันยังคงอยู่ที่นั่นและ/tmp/null
ไฟล์ใดถูกเขียนทับและมันกลายเป็นไฟล์ปกติอื่น ๆ เราสามารถกู้คืนไฟล์ของเราได้โดยการคัดลอก/tmp/null
เหมือนกับไฟล์อื่น ๆ :
$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.
กู้คืนไฟล์แล้ว
บันทึก:
หากคุณไม่ได้สร้าง/tmp/null
และลองใช้คำสั่งเหล่านั้นโดยตรงโดยใช้/dev/null
; ให้แน่ใจว่าคุณกู้คืนไฟล์ (ถ้าคุณต้องการ) โดยการเรียกใช้cp /dev/null our_test_file
; และกู้คืน/dev/null
เพื่อวัตถุประสงค์ที่มีอยู่ในระบบของเราโดยการเรียกใช้คำสั่งต่อไปนี้ตามที่กำหนดในคำถามที่เชื่อมโยงโดยเร็วที่สุด:
$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null
สรุป:
ดังนั้นจึงเป็นไปไม่ได้ที่จะย้ายไดเรกทอรีไป/dev/null
และด้วยเหตุนี้จึงไม่มีปัญหาในการกู้คืนไดเรกทอรีจากที่นั่น
สำหรับไฟล์ที่เกี่ยวข้องหากคุณย้ายไฟล์ไปยังโดยตรง/dev/null
คุณยังสามารถกู้คืนไฟล์ได้ตามที่แสดงไว้ด้านบน อย่างไรก็ตามมีข้อยกเว้นสองประการ:
ระหว่างช่วงเวลาที่คุณรันsudo mv test_file /dev/null
และcp /dev/null our_test_file
หากมีสคริปต์รูทในระบบเขียนทับมันโดยการเรียกใช้echo "Whatever text the root script wants to send to /dev/null" > /dev/null
(หรือคำสั่งอื่นที่คล้ายคลึงกัน) จากนั้นเราไม่มีวิธีง่ายๆในการกู้คืนไฟล์ของเรา
หากคุณรีบูทระบบระหว่างการรันทั้งสองคำสั่ง /dev/null
ถูกสร้างขึ้นใหม่เมื่อบูตดังนั้นไฟล์ของเราจะหายไปเมื่อเราปิดคอมพิวเตอร์
แต่ถ้าคุณต้องการกู้คืนอินพุตสตรีมเช่นecho "Stream this line to /dev/null" > /dev/null
คุณไม่สามารถกู้คืนได้เนื่องจาก/dev/null
เป็นไฟล์พิเศษที่จะกำจัดไฟล์ที่ไม่ต้องการและสตรีมอินพุตและตามที่บทความ Wikipedia กล่าวถึงมันไม่ได้ให้ข้อมูลใด ๆ แก่กระบวนการที่อ่านจากมัน
การอ้างอิง: บทความ Wikipedia บน/dev/null