Bạn có thể ghi tập tin hoặc các luồng đầu vào khác vào /dev/null
nhưng không phải thư mục. Nếu bạn thử di chuyển một thư mục đến /dev/null
nó sẽ báo lỗi vì đó /dev/null
khô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/null
và 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/null
chú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/null
và 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/null
là của chúng tôi /dev/null
cho tất cả các mục đích:
Hãy để chúng tôi tạo một test_file
và một test_dir
bê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_ubuntu
thư 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/null
và 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_file
không còn có sẵn. Bây giờ hãy thử chuyển test_dir
sang /tmp/null
cá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_dir
vẫ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_file
từ /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/null
giố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/null
và 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/null
cho 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/null
và 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/null
và 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/null
là 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