Przekieruj standardowe wyjście i stderr do pliku

Redirect Stdout Stderr File



Kiedy przekierujesz wyjście dowolnego polecenia do pliku, zauważysz, że komunikaty o błędach są drukowane w oknie terminala. Każde polecenie wykonywane w dowolnej powłoce systemu Linux, takiej jak bash, wykorzystuje trzy regularne strumienie we/wy. Numeryczny deskryptor pliku jest używany do reprezentowania każdego strumienia.

  • Standardowy strumień wejściowy (stdin): 0
  • Standardowy strumień wyjściowy (stdout): 1
  • Standardowy strumień błędów (stderr): 2

W tym poście przyjrzymy się informacjom zawartym w przekierowaniu stdout i stderr do pliku.







Wyjście standardowe (wyjście standardowe):

Każdy system operacyjny oparty na Linuksie ma przekonanie o domyślnym miejscu na wykonywane polecenie. Wszyscy nazywają to pojęcie stdout lub standardowym wyjściem, aby brzmiało to łatwiej. Twoja powłoka Bash lub Zsh stale szuka domyślnej lokalizacji wyjściowej. Gdy powłoka wykryje nowe wyjście, wyświetla je na ekranie terminala, abyś mógł je zobaczyć. W przeciwnym razie wyśle ​​dane wyjściowe do domyślnej lokalizacji.



Błąd standardowy (stderr):

Błąd standardowy lub stderr jest podobny do standardowego wejścia i wyjścia, ale jest używany do przechowywania komunikatów o błędach. Standardowy błąd można przekierować do wiersza poleceń lub pliku za pomocą terminala. Jeśli chcesz zapisywać lub przechowywać komunikaty w osobnym pliku dziennika lub ukrywać komunikaty o błędach, pomocne będzie przekierowanie na stderr. Przejdźmy teraz do praktycznej strony przekierowań stdout i stderr.



Przekierowanie stdout i stderr do pliku:

Przekierowanie jest metodą przechwytywania danych wyjściowych programu i wysyłania ich jako danych wejściowych do innego polecenia lub pliku. Strumienie we/wy można przekierować, używając operatora n>, gdzie n jest numerem deskryptora pliku. Do przekierowania stdout używamy 1>, a dla stderr 2> jest dodawane jako operator.





Stworzyliśmy plik o nazwie sample.txt do przechowywania przekierowanych danych wyjściowych w naszym bieżącym katalogu.



(polecenie > plik) jest uważany za klasyczny operator przekierowania, który przekierowuje standardowe wyjście tylko ze standardowym błędem pokazanym w terminalu. Zademonstrujemy również różne opcje przekierowania stderr.

Przekierowanie stderr i stdout do oddzielnych plików:

Poniżej znajduje się składnia poleceń do przekierowywania stdout i stderr do oddzielnych plików.

Komenda >na zewnątrz2>błąd

Podane poniżej polecenie przekieruje dane wyjściowe do pliku wyjściowego, a komunikaty o błędach do pliku błędów.

$Kotprzykład.txt>na zewnątrz2>błąd

Przekierowanie stderr do stdout:

Powszechną praktyką jest przekierowywanie stderr za pomocą standardowego wyjścia programu do przechowywania wszystkiego w jednym pliku. Oto składnia polecenia przekierowująca stderr na standardowe wyjście:

Komenda >na zewnątrz2> &1$ls >przykładowy plik.txt2> &1

$Kotprzykładowy plik.txt

> out przekierowuje przekierowuje stdout do samplefile.txt, a 2>&1 przekierowuje stderr do bieżącej lokalizacji stdout.

Jeśli stderr jest najpierw przekierowywany na stdout, użyj poniższego polecenia, aby przekierować stdout do pliku.

Komenda 2> &1 > plik$ls -do 2> &1 >przykładowy plik.txt

$Kotprzykładowy plik.txt

&> jest również używany do tej samej funkcji, którą wykonuje 2>&1.

Komenda &> plik$ls &>przykładowy plik.txt

$Kotprzykładowy plik.txt

Przekierowanie stdout i stderr do pojedynczego pliku:

Wszystkie powłoki nie obsługują tego przekierowania formularza, ale obsługują je bash i Zsh. Stdout i stderr można przekierować, korzystając z następującej składni.

Komenda &>na zewnątrz$Kotprzykład.txt&>na zewnątrz

W następnej części artykułu przyjrzymy się osobnym przykładom przekierowań stdout i stderr.

Przekierowanie stdout do pliku:

Standardowe wyjście jest reprezentowane przez 1 na liście numerów deskryptorów plików. W przypadku polecenia przekierowania bez numeru deskryptora pliku terminal ustawia jego wartość na 1. Składnia przekierowania standardowego wyjścia do pliku jest następująca:

Komenda > plik

Używamy pliku sample.file do przechowywania standardowego wyjścia polecenia ls -al

$ls -do >przykład.txt

$Kotprzykład.txt

Komenda 1> plik$ls 1>przykład.txt

$Kotprzykład.txt

Przekierowanie stderr do pliku:

Użyj operatora 2> do przekierowania stderr do pliku.

Komenda 2> plik $ls -do 2>przykład.txt

Możemy połączyć wykonanie stderr i stdout w jednym poleceniu przekierowania.

Komenda 2>błąd.txt1>output.txt

W poniższym przykładzie komunikaty o błędach będą przechowywane w pliku error.txt, gdzie output.txt będzie miał swoje standardowe wyjście polecenia ls.

$ls 2>błąd.txt1>output.txt

$Kotoutput.txt

Wniosek:

Posiadanie koncepcji przekierowania i deskryptorów plików dla strumieni I/O jest bardzo cenne podczas pracy w terminalu Linux. W tym poście omówiliśmy regularne strumienie I/O, w tym stdout i stderr. Pierwsza sekcja tego posta zawiera szczegółowe informacje na temat przekierowania, strumieni I/O i numerycznego deskryptora pliku. Następnie zapoznałeś się z praktycznym przykładem różnych form przekierowań stdout i stderr.