Bạn có thể ghi tập tin hoặc các luồng đầu vào khác vào /dev/nullnhưng không phải thư mục. Nếu bạn thử di chuyển một thư mục đến /dev/nullnó sẽ báo lỗi vì đó /dev/nullkhông phải là một thư mục mà là một tệp.
Tuy nhiên, vì bạn muốn thử nghiệm /dev/null, trước tiên bạn được đề nghị biết hậu quả của việc di chuyển tệp để ghi đè /dev/nullvà cách phục hồi từ tình huống đó:
Theo đề xuất của @Rmano trong câu trả lời cho câu hỏi này, để thử nghiệm với /dev/nullchúng ta, chúng ta nên tạo một bản sao của nó và sau đó thực hiện thử nghiệm của chúng tôi. Vì vậy, hãy tạo /tmp/nullvà sử dụng nó cho mục đích thử nghiệm của chúng tôi:
sudo mknod -m 0666 /tmp/null c 1 3
Bây giờ trở đi, /tmp/nulllà của chúng tôi /dev/nullcho tất cả các mục đích:
Hãy để chúng tôi tạo một test_filevà một test_dirbên trong một thư mục được gọi là 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
Sau đây cho thấy nội dung của ask_ubuntuthư mục:
$ 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
Bây giờ hãy thử di chuyển test_fileđến /tmp/nullvà xem nội dung của 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
Lệnh thành công và test_filekhông còn có sẵn. Bây giờ hãy thử chuyển test_dirsang /tmp/nullcái không thành công:
$ sudo mv test_dir/ /tmp/null
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’
test_dirvẫn còn hiện diện bên trong 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
Bây giờ, hãy cho chúng tôi biết nếu chúng tôi có thể phục hồi test_filetừ /tmp/null:
$ cat /tmp/null
Let us test if we can recover our test_file.
Vì vậy, nó vẫn còn đó và /tmp/nullđó là một tập tin đặc biệt đã bị ghi đè và nó đã trở thành giống như bất kỳ tập tin bình thường khác. Chúng tôi có thể khôi phục tệp của mình bằng cách sao chép /tmp/nullgiống như bất kỳ tệp nào khác:
$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.
Khôi phục tập tin.
Chú thích:
Nếu bạn không tạo /tmp/nullvà thử trực tiếp các lệnh đó bằng cách sử dụng /dev/null; đảm bảo bạn khôi phục tệp (nếu bạn cần) bằng cách chạy cp /dev/null our_test_file; và khôi phục /dev/nullcho các mục đích nó tồn tại trên hệ thống của chúng tôi bằng cách chạy các lệnh sau như được đưa ra trong câu hỏi được liên kết càng sớm càng tốt:
$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null
Phần kết luận:
Vì vậy, không thể di chuyển một thư mục đến /dev/nullvà do đó không có câu hỏi về việc khôi phục thư mục từ đó.
Đối với các tệp có liên quan, nếu bạn trực tiếp di chuyển tệp đến /dev/null, bạn vẫn có thể khôi phục tệp như đã trình bày ở trên. Tuy nhiên, có hai trường hợp ngoại lệ:
Trong khoảng thời gian bạn chạy sudo mv test_file /dev/nullvà cp /dev/null our_test_file, nếu bất kỳ tập lệnh gốc nào trong hệ thống sẽ ghi đè lên nó bằng cách chạy echo "Whatever text the root script wants to send to /dev/null" > /dev/null(hoặc các lệnh tương tự khác). Sau đó, chúng tôi không có cách dễ dàng để khôi phục tập tin của chúng tôi.
Nếu bạn khởi động lại hệ thống giữa việc chạy hai lệnh đó. /dev/nullđược tạo lại khi khởi động, vì vậy tệp của chúng tôi bị mất khi tắt máy tính.
Nhưng nếu bạn muốn khôi phục các luồng đầu vào như echo "Stream this line to /dev/null" > /dev/null, bạn không thể khôi phục đó /dev/nulllà một tệp đặc biệt để loại bỏ các tệp không mong muốn và các luồng đầu vào và như bài viết trên Wikipedia đề cập, nó không cung cấp bất kỳ dữ liệu nào cho quá trình đọc từ nó.
Tham khảo: Bài viết trên Wikipedia về/dev/null