Ponieważ ludzie zakładają. Byłem jedną z tych osób, dopóki tego nie przetestowałem . Łatwo zrozumieć, dlaczego ludzie zakładają ... Wygląda niebezpiecznie ...
... ale tak naprawdę nie można przenieść rzeczy do /dev/null
- To specjalny plik, który po prostu pochłania przekierowania (i wysyła je w nicość). Jeśli spróbujesz przenieść do niego katalog, system plików eksploduje na twoją twarz i jeśli spróbujesz przenieść do niego plik, prawdopodobnie skończysz go zastępując.
Pierwszy link będzie dotyczył katalogów, ale tutaj jest osobny test tylko nadpisania go plikiem. Jak zauważa Rmano w komentarzach, prawdopodobnie nie należy tego robić bez nadzoru osoby dorosłej. Istnieje ryzyko.
$ echo "this is my file" > test
$ cat test
this is my file
$ sudo mv test /dev/null
$ cat /dev/null
this is my file
# Fix this!
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3
/dev/null
nie spowoduje, że dane zostaną przeniesione w nicość. Spowoduje to przeniesienie danych w porządku, ale/dev/null
zostanie nadpisane, dzięki czemu można je jeszcze cofnąć :) Zobacz także askubuntu.com/questions/435887/...sudo mv file /dev/null
odniesie sukces i może z łatwością doprowadzić do całkowicie bezużytecznego systemu. Zobacz moje komentarze do pytania połączone w komentarzu @MalteSkoruppa. To kolejny wyraźny przykład „prependsudo
tylko, jeśli trzykrotnie sprawdziłeś, czy wiesz, co robisz” ;-)sudo mknod -m 0666 /tmp/mynull c 1 3
---, a następnie pobaw się nią ;-)/dev/null
to tylko plik, jest to plik „znaków specjalnych”, ale mimo to nadal jest związany zasadami, których muszą przestrzegać pliki. Biorąc to pod uwagę, nigdy nie można uruchomić tego polecenia:mv
Komenda nie pozwoli na to, ponieważ jesteś w ruchu katalog do pliku, który po prostu nie ma sensu kontekstowo imv
wie o tym.Przykład
Nie możesz kopiować do
/dev/null
żadnego z nich, biorąc pod uwagę, że jest to plik znakowy, jeśli spróbujesz skopiować do niego zwykły plik.Jedyne, co możesz zrobić z tym plikiem, to skopiować
mv
na niego inny plik lub go usunąć.Po tym poleceniu
/dev/null
jest zwykłym plikiem. Najbardziej niebezpiecznym efektem tej zmiany jest to, że nigdy nie/dev/null
powinna generować żadnych danych, więc szereg skryptów powłoki to założyjest równoznaczne z powiedzeniem „nic”. Złamanie tego założenia może prowadzić do losowych danych (no cóż, danych, które ostatni proces zapisał do `/ dev / null ') wstawionych do plików systemowych w całym systemie --- co może prowadzić do całkowicie zepsutego i niemożliwego do odzyskania systemu.
źródło
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:Teraz
/tmp/null
jest nasz/dev/null
do wszystkich celów:Stwórzmy
test_file
aitest_dir
wewnątrz katalogu o nazwieask_ubuntu
.Poniżej przedstawiono zawartość
ask_ubuntu
katalogu:Teraz starają się przenieść nasze
test_file
do/tmp/null
i zobaczyć zawartośćask_ubuntu
: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:test_dir
jest nadal obecny w środkuask_ubuntu
:Teraz, niech nam dowiedzieć, czy możemy odzyskać nasze
test_file
od/tmp/null
: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: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ąccp /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: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
icp /dev/null our_test_file
, jeśli skrypt korzeń w systemie zastąpienie go systememecho "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
źródło
sudo mv test_file /dev/null
zastępuje/dev/null
siętest_file
. Po tym/dev/null
jest to zwykły plik i możesz z niego odczytać wszystko, co do niego napisałeś. NIEWszystko wysłane do
/dev/null
jest po cichu odrzucane. Jeśli wpiszesz:Hello World
pojawi się na ekranie. Jeśli wpiszesz:nic nie wyświetla się na ekranie.
Ale w przypadku polecenia move polecenie
mv
próbuje zastąpić plik / dev / null katalogiem, co nie jest możliwe. Ponieważ w Linuksie wszystko jest plikiem, / dev / null jest plikiem. Oczywiście jeden specjalny (plik urządzenia), specjalny plik umożliwiający dostęp do sprzętu (takiego jak dyski, partycje, karty dźwiękowe, porty szeregowe, ...). W przypadku / dev / null nie jest to powiązane z żadnym sprzętem, więc dane do niego wysyłane są dyskretnie odrzucane. Właśnie dlatego „oni” mogli nazwać to blackhole.źródło