Możesz zapisywać pliki lub inne strumienie wejściowe do /dev/null
katalogów, ale nie do nich. Próba przeniesienia katalogu do /dev/null
niego spowoduje zgłoszenie błędu, ponieważ /dev/null
nie jest to katalog, ale plik.
Ponieważ jednak chcesz poeksperymentować /dev/null
, najpierw sugeruje się znać konsekwencje przeniesienia pliku do zastąpienia /dev/null
i sposób odzyskania po tej sytuacji:
Jak sugeruje @Rmano w tej odpowiedzi na to pytanie, w celu eksperymentowania z nim /dev/null
powinniśmy raczej utworzyć jego kopię, a następnie przeprowadzić nasze eksperymenty. Stwórzmy /tmp/null
go i wykorzystajmy do naszych celów eksperymentalnych:
sudo mknod -m 0666 /tmp/null c 1 3
Teraz /tmp/null
jest nasz /dev/null
do wszystkich celów:
Stwórzmy test_file
ai test_dir
wewnątrz katalogu o nazwie 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
Poniżej przedstawiono zawartość ask_ubuntu
katalogu:
$ 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
Teraz starają się przenieść nasze test_file
do /tmp/null
i zobaczyć zawartość 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
Polecenie się powiodło i test_file
nie jest już dostępne. Teraz spróbuj przejść test_dir
do tego, /tmp/null
co się nie powiedzie:
$ sudo mv test_dir/ /tmp/null
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’
test_dir
jest nadal obecny w środku 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
Teraz, niech nam dowiedzieć, czy możemy odzyskać nasze test_file
od /tmp/null
:
$ cat /tmp/null
Let us test if we can recover our test_file.
Tak więc nadal tam jest i /tmp/null
który był specjalnym plikiem został nadpisany i stał się jak każdy inny zwykły plik. Możemy odzyskać nasz plik, kopiując /tmp/null
tak jak każdy inny plik:
$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.
Plik odzyskany.
Uwaga:
Jeśli nie utworzyłeś /tmp/null
i nie wypróbowałeś tych poleceń bezpośrednio za pomocą /dev/null
; upewnij się, że odzyskałeś plik (jeśli potrzebujesz), uruchamiając cp /dev/null our_test_file
; i przywróć /dev/null
do celów, jakie istnieje w naszym systemie, uruchamiając następujące polecenia, jak podano w połączonym pytaniu, tak szybko jak to możliwe:
$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null
Wniosek:
Dlatego nie można przenieść katalogu do katalogu /dev/null
i dlatego nie ma mowy o odzyskaniu katalogu z tego miejsca.
Jeśli chodzi o pliki, jeśli przeniesiesz je bezpośrednio /dev/null
, nadal możesz je odzyskać, jak pokazano powyżej. Istnieją jednak dwa wyjątki:
W okresie uruchamiania sudo mv test_file /dev/null
i cp /dev/null our_test_file
, jeśli skrypt korzeń w systemie zastąpienie go systemem echo "Whatever text the root script wants to send to /dev/null" > /dev/null
(lub innych podobnych poleceń). W takim razie nie mamy łatwego sposobu na odzyskanie naszego pliku.
Jeśli zrestartujesz system między uruchomieniem tych dwóch poleceń. /dev/null
zostanie ponownie utworzony podczas rozruchu, więc nasz plik zostanie utracony po wyłączeniu komputera.
Ale jeśli chcesz odzyskać strumienie wejściowe echo "Stream this line to /dev/null" > /dev/null
, nie możesz tego odzyskać, ponieważ /dev/null
jest to specjalny plik do usuwania niechcianych plików i strumieni wejściowych, a jak wspomina artykuł w Wikipedii, nie dostarcza żadnych danych do procesu, który z niego odczytuje.
Odniesienie: Artykuł w Wikipedii na temat/dev/null