คุณสามารถเขียนไฟล์หรือสตรีมอินพุตอื่น ๆ/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_dirask_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