Co to jest / dev / null i jak może ci pomóc?

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.

To wkład od Daniela Durantego, stając się tym samym jednym ze zwycięzców naszego cotygodniowego konkursu: «Podziel się swoją wiedzą o Linuksie«. Gratulacje Daniel!

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.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Guido Ignacy Ignacy powiedział

    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!

    1.    Eduardo H. powiedział

      Właśnie tego szukał.
      Popieram wniosek o dodanie =)

      Saludos!

  2.   Paweł powiedział

    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!

  3.   Paweł powiedział

    Niezły artykuł o dev / null, co za szkoda, myślę, że omyłkowo skomentowałem wcześniej w niewłaściwym miejscu! przepraszam

  4.   anonimowy powiedział

    dobry wkład dzięki

  5.   koszulki powiedział

    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

  6.   sophia martinez powiedział

    Co się stanie, jeśli podczas wykonywania zdania symbol> nie zostanie umieszczony?

    Czy ktoś mógłby mnie poprowadzić, proszę?

  7.   Zero powiedział

    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.