![]() |
Jeśli mamy już pewne pojęcia dotyczące drzewa katalogów GNU / Linux, powinniśmy przynajmniej zapoznać się z / dev / reference, które jest efektywnym miejscem, w którym wszystkie pliki związane z urządzenia sprzętowe.
Jeśli zajrzymy do katalogu / dev / zobaczymy „plik” o nazwie zero, ale jeśli będziemy chcieli go otworzyć, aby zobaczyć jego zawartość, system powie nam, że nie jest to możliwe, ponieważ nie jest to zwykła zawartość. Załączam plik słowa, ponieważ, jak wszyscy wiecie, w Linuksie wszystko (sprzęt i oprogramowanie) jest reprezentowane jako plik. |
Jakiemu urządzeniu odpowiada / dev / null?
Ze względów praktycznych wyobraź sobie kosz na śmieci, bezdenną jamę lub przestrzeń kosmiczną, do której można wrzucić cokolwiek bez możliwości odzyskania tego (bez względu na to, jak bardzo starają się ludzie z NASA).
Ale jeśli mam już polecenia takie jak rm, dlaczego chcę usunąć coś nowego?
Ponieważ sposób działania obu „czarnych dziur” jest zupełnie inny: w jaki sposób można by zastąpić standardowe wyjście błędu w poleceniu w skrypcie powłoki w czasie wykonywania? Tutaj pojawia się / dev / null.
Zobaczmy to na przykładzie.
Stworzyliśmy plik o nazwie testy zawierający ciąg znaków „Hello World”. Jeśli chcemy przedstawić zawartość tego pliku w linii poleceń, możemy to zrobić w następujący sposób:
user @ laptop: ~ $ cat test
Witaj świecie
Gdyby plik nie istniał lub został nazwany jako testy (z „s” na końcu), w konsoli pojawiłby się następujący błąd:
user @ laptop: ~ $ cat testy
cat: tests: plik lub katalog nie istnieje
Co możemy zrobić, aby uniknąć komunikatu o błędzie? Cóż, po prostu przekieruj wyjście polecenia, w przypadku błędu, do „kosza na śmieci”, czyli do / dev / null
Jak określimy, że ma to być w przypadku błędu? Tutaj wprowadza się standardowe wartości wejścia, wyjścia i błędów programu: STDIN, STDOUT i STDERR (które można zastąpić odpowiednio 0, 1 i 2). W ten sposób, jeśli postawimy ...
user @ laptop: ~ $ cat testy 2> / dev / null
użytkownik @ laptop: ~ $
… Zobaczymy, że komunikat o błędzie nie zostanie wyświetlony na konsoli.
Musisz uważać, ponieważ składnia jest niezbędna: między znakami 2 i> nie powinno być spacji. W przeciwnym razie dałoby to:
user @ laptop: ~ $ cat testy 2> / dev / null
cat: tests: plik lub katalog nie istnieje
cat: 2: plik lub katalog nie istnieje
W przeciwieństwie do tego spacja między> i / dev / null nie wpłynie negatywnie na wynik.
Możemy również użyć przekierowania błędów, na przykład, do przechwycenia błędów w pliku dziennika w następujący sposób:
user @ laptop: ~ $ cat testy 2> err.log
Innym ciekawym przypadkiem byłoby gromadzenie wyników w innym pliku, o ile nie wystąpi błąd, dla którego wstawilibyśmy:
użytkownik @ laptop: ~ $ cat test 1> output_result 2> err.log
Na koniec konieczne jest umieszczenie wyrażenia „> / dev / null 2> & 1”, w którym standardowe wyjście i wyjście błędu są połączone, przekierowując je tak, aby w żadnym przypadku nie były uzyskiwane informacje wyjściowe.
Ach, ale brakuje jednego z najczęściej używanych narzędzi, które ma / dev / null, czyli opróżniania plików: $ cat / dev / null> file.log W ten sposób plik file.log będzie pusty. Dodaj to!
Właśnie tego szukał.
Popieram wniosek o dodanie =)
Saludos!
Witam, przede wszystkim artykuł jest bardzo dobry! po drugie chciałbym wnieść coś na ten temat za pomocą tego linku cron w php z Cpanel i trzecie gratulacje dla bloga!
Niezły artykuł o dev / null, co za szkoda, myślę, że omyłkowo skomentowałem wcześniej w niewłaściwym miejscu! przepraszam
dobry wkład dzięki
Pozdrowienia, otrzymuję zerowy atak. Używam andrirc i otrzymuję prywatny od mojego pseudonimu ze słowem Null. 2 sekundy po zamknięciu programu czytałem iz tego co widzę może to zrobić tylko Shell, a nie ktoś z zewnątrz. Próbowałem zignorować siebie / zignorować -lrpcntikd i nic mnie nie zaskakuje, polecenie ciągle się pojawia. Byłbym wdzięczny, gdybyś miał jakikolwiek sposób go zablokować. Twoje zdrowie
Co się stanie, jeśli podczas wykonywania zdania symbol> nie zostanie umieszczony?
Czy ktoś mógłby mnie poprowadzić, proszę?
Dzień dobry zainstalowałem Debian netinst w ACER Extensa 5620Z – 32 bit Po zakończeniu instalacji z USB i wyjęciu pendrive'a tak aby startował z dysku twardego (nie instaluj ponownie z pena) ale w momencie startu system, który mnie pyta:
login Debiana: xxxxxxxx (ok)
Hasło: xxxxxxxx (ok)
nil@debian:~$ ???? co to jest? Co mam tam umieścić?
Bez tego polecenia nie mogę kontynuować rozruchu systemu.
Możesz mi pomóc? Nie wiem, jak mam kontynuować.
Dziękuję bardzo. Z poważaniem.