Co to jest /dev /null i jak go używać

Co to jest /dev /null i jak go używać
Linux to interesujący system operacyjny, który hostuje niektóre wirtualne urządzenia do wielu celów. Jeśli chodzi o programy działające w systemie, te urządzenia wirtualne działają tak, jakby były prawdziwymi plikami. Narzędzia mogą żądać i zasilać dane z tych źródeł. Dane są generowane przez system operacyjny zamiast je odczytać z dysku.

Jednym z takich przykładów jest /dev /null. To specjalny plik obecny w każdym systemie Linux. Jednak w przeciwieństwie do większości innych wirtualnych plików, zamiast czytać, służy do pisania. Cokolwiek napiszesz do /dev /null, zostanie odrzucone, zapomniane do pustki. Jest znany jako urządzenie zerowe w systemie UNIX.

Dlaczego miałbyś chcieć odrzucić coś w pustkę? Sprawdźmy, czym jest /dev /null i jego użycie.

Wymagania wstępne

Przed nurkowaniem głęboko w użyciu /dev /null musimy mieć wyraźne zrozumienie Stdout I Stderr strumień danych. Sprawdź ten dogłębny przewodnik stdin, Stderr, I Stdout.

Szybko odświeżajmy. Ilekroć uruchomi się jakiekolwiek narzędzie wiersza poleceń, generuje dwa wyjścia. Wyjście idzie do Stdout i pojawia się błąd (jeśli wygenerowany) Stderr. Domyślnie oba te strumienie danych są powiązane z terminalem.

Na przykład następujące polecenie wydrukuje ciąg w podwójnym znaku cytatu. Tutaj wyjście jest przechowywane w Stdout.

$ echo „Hello World”

Następne polecenie pokaże nam status wyjścia poprzednio prowadzonego polecenia.

$ echo $?

Ponieważ poprzednie polecenie działało z powodzeniem, status wyjścia wynosi 0. W przeciwnym razie status wyjścia będzie inny. Co się stanie, gdy próbujesz uruchomić nieprawidłowe polecenie?

$ adfadsf
$ echo $?

Teraz musimy wiedzieć o deskryptorze pliku. W ekosystemie UNIX są to wartości całkowite przypisane do pliku. Obydwa Stdout (deskryptor pliku = 1) i Stderr (Deskryptor pliku = 2) Miej określony deskryptor pliku. Korzystając z deskryptora pliku (1 i 2 w tej sytuacji), możemy przekierować Stdout I Stderr do innych plików.

Na początek następujący przykład przekieruje Stdout polecenia Echo do pliku tekstowego. Tutaj nie określiliśmy deskryptora pliku. Jeśli nie zostanie określony, Bash użyje Stdout domyślnie.

$ echo „Hello World”> log.tekst

Następujące polecenie przekieruje Stderr do pliku tekstowego.

$ asdfadsa 2> błąd.tekst

Korzystanie /dev /null

Przekierowanie wyjściu do /dev /null

Teraz jesteśmy gotowi nauczyć się, jak używać /dev /null. Najpierw sprawdźmy, jak filtrować normalne wyjście i błąd. W poniższym poleceniu GREP spróbuje wyszukać ciąg (cześć, w tym przypadku) w katalogu „/SYS”.

$ grep -r hello /sys /

Jednak wygeneruje wiele błędów, ponieważ bez uprawnienia korzenia, GREP nie może uzyskać dostępu do liczby plików. W takim przypadku spowoduje to błędy „odmowy uprawnień”. Teraz, za pomocą przekierowania, możemy uzyskać wyraźniejsze wyjście.

$ grep -r hello /sys /2> /dev /null

Wyjście wygląda znacznie lepiej, prawda? Nic! W takim przypadku GREP nie ma dostępu do wielu plików, a te, które są dostępne, nie mają ciągu „Hello”.

W poniższym przykładzie będziemy pingować Google.

$ ping Google.com

Nie chcemy jednak widzieć tych wszystkich udanych wyników ping. Zamiast tego chcemy skupić się tylko na błędach, gdy ping nie mógł dotrzeć do Google. Jak to zrobimy?

$ ping Google.com 1> /dev /null

Tutaj treść Stdout są zrzucane do /dev /null, pozostawiając tylko błędy.

Przekieruj wszystkie wyjście do /dev /null

W niektórych sytuacjach wyjście może wcale nie być przydatne. Za pomocą przekierowania możemy zrzucić wszystkie wyjście do pustki.

$ grep -r hello /sys /> /dev /null 2> i 1

Złammy to polecenie trochę. Najpierw zrzucamy wszystkie Stdout do /dev /null. Następnie, w drugiej części, kazujemy Bashowi wysłać Stderr Do Stdout. W tym przykładzie nie ma nic do wyjścia. Jeśli jednak jesteś zdezorientowany, zawsze możesz sprawdzić, czy polecenie działało pomyślnie.

$ echo $?

Wartość wynosi 2, ponieważ polecenie wygenerowało wiele błędów.

Jeśli zwykle zapomnisz deskryptora pliku Stdout I Stderr, Następujące polecenie zrobi dobrze. To bardziej uogólniony format poprzedniego polecenia. Obydwa Stdout I Stderr zostanie przekierowany do /dev /null.

$ grep -r hello /sys /i> /dev /null

Inne przykłady

To jest interesujące. Pamiętaj o narzędzia DD? Jest to potężne narzędzie do konwersji i kopiowania plików. Dowiedz się więcej o DD. Za pomocą DD możemy przetestować sekwencyjną prędkość odczytu twojego dysku. Oczywiście nie jest to dokładny pomiar. Jednak w przypadku szybkiego testu jest to bardzo przydatne.

$ dd if = Of =/dev/null Status = Progress Bs = 1M IFLAG = Direct

Tutaj użyłem Ubuntu 18.04.4 ISO jako duży plik.

Podobnie możesz również przetestować szybkość pobierania swojego połączenia internetowego.

$ wget -o /dev /null

Końcowe przemyślenia

Mamy nadzieję, że masz jasne zrozumienie tego, czym jest ten plik /dev /null. Jest to specjalne urządzenie, które, jeśli do niego napisane, odrzuca i odczytuje się, czyta Null. Prawdziwym potencjałem tej interesującej funkcji są ciekawe skrypty bash.

Czy jesteś zainteresowany skryptami Bash? Sprawdź przewodnik dla początkujących po skryptach Bash.

Cieszyć się!