Przekierowanie wejścia/wyjścia w przykładach systemu Linux/Unix

Co to jest przekierowanie?

Przekierowanie to funkcja systemu Linux, dzięki której podczas wykonywania polecenia można zmienić standardowe urządzenia wejścia/wyjścia. Podstawowy przepływ pracy dowolnego Polecenie Linuksa polega na tym, że pobiera dane wejściowe i podaje dane wyjściowe.

  • Standardowym urządzeniem wejściowym (stdin) jest klawiatura.
  • Standardowym urządzeniem wyjściowym (stdout) jest ekran.

Dzięki przekierowaniu można zmienić powyższe standardowe wejście/wyjście.

Kliknij w tym miejscu jeśli film nie jest dostępny

Przekierowanie wyjścia

'>Symbol ' służy do przekierowania wyjścia (STDOUT).

Przekierowanie wyjścia

Przykład:

ls -al > listings

Tutaj wyjście polecenia ls -al jest przekierowywane do pliku „listings” zamiast ekranu.

Przekierowanie wyjścia

Note: Użyj poprawnej nazwy pliku podczas przekierowywania danych wyjściowych polecenia do pliku. Jeśli istnieje plik o tej samej nazwie, przekierowane polecenie usunie zawartość tego pliku, a następnie może zostać nadpisany.”

Jeśli nie chcesz, aby plik został nadpisany, ale chcesz dodać więcej treści do istniejącego pliku, powinieneś użyć '>>'operatora.

Przekierowanie wyjścia

Możesz przekierować standardowe wyjście, nie tylko do plików, ale także do urządzeń!

$ cat music.mp3 > /dev/audio

Polecenie cat odczytuje plik music.mp3 i wysyła dane wyjściowe do /dev/audio, które jest urządzeniem audio. Jeśli konfiguracje dźwięku na twoim komputerze są prawidłowe, to polecenie odtworzy plik music.mp3

Przekierowanie wejścia

'Symbol ' służy do przekierowania wejścia (STDIN).

Przekierowanie wejścia

Przykład: Program pocztowy w systemie Linux może pomóc w wysyłaniu wiadomości e-mail z terminala.

Możesz wpisać treść wiadomości e-mail za pomocą standardowej klawiatury urządzenia. Ale jeśli chcesz dołączyć plik do wiadomości e-mail, możesz użyć operatora przekierowania wejściowego w następującym formacie.

Mail -s "Subject" to-address < Filename

Przekierowanie wejścia

Spowoduje to dołączenie pliku do wiadomości e-mail i wysłanie go do odbiorcy.

Powyższe przykłady były proste. Przyjrzyjmy się niektórym zaawansowanym technikom przekierowywania, które wykorzystują File Descriptlub.

filet Descriptory (FD)

W systemie Linux/Unix wszystko jest plikiem. Zwykły plik, katalogi, a nawet urządzenia są plikami. Z każdym plikiem jest powiązany numer zwany Plikiem Descriptlub (FD).

Na Twoim ekranie znajduje się również plik DescriptLub. Kiedy program jest wykonywany, dane wyjściowe są wysyłane do pliku Descriptlub ekranu, a na monitorze zobaczysz wynik programu. Jeśli dane wyjściowe zostaną wysłane do File Descriptlub drukarki, wynik programu zostałby wydrukowany.

Błąd przekierowania

Za każdym razem, gdy uruchamiasz program/polecenie w terminalu, zawsze otwarte są 3 pliki: standardowe wejście, standardowe wyjście i standardowy błąd..

Błąd przekierowania

Pliki te są zawsze obecne przy każdym uruchomieniu programu. Jak wyjaśniono wcześniej, z każdym z tych plików jest powiązany deskryptor pliku.

filet filet Descriptor
Standardowe wejście STDIN 0
Standardowe wyjście STDOUT 1
Błąd standardowy STDERR 2

Domyślnie strumień błędów jest wyświetlany na ekranie. Przekierowanie błędów to kierowanie błędów do pliku innego niż ekran.

Dlaczego przekierowanie błędów?

Przekierowanie błędów jest jedną z bardzo popularnych funkcji Uniks/Linux.

Często użytkownicy systemu UNIX uznają, że wiele poleceń powoduje ogromną liczbę błędów.

  • Na przykład podczas wyszukiwania plików zazwyczaj pojawiają się błędy „permission denied”. Błędy te zazwyczaj nie pomagają osobie wyszukującej konkretny plik.
  • Podczas wykonywania skryptów powłoki często NIE chcesz, aby komunikaty o błędach zaśmiecały normalne wyjście programu.

Rozwiązaniem jest przekierowanie komunikatów o błędach do pliku.

1 przykład

$ myprogram 2>errorsfile

Dlaczego przekierowanie błędu

Powyżej wykonujemy program o nazwie myprogram.

Deskryptor pliku dla błędu standardowego to 2.

Używając „2>” przekierowujemy wyjście błędu do pliku o nazwie „errorfile”

Dzięki temu dane wyjściowe programu nie są zaśmiecone błędami.

2 przykład

Oto kolejny przykład, który używa instrukcji find –

find . -name 'my*' 2>error.log

Używając polecenia „find” przeszukujemy bieżący katalog „.” w poszukiwaniu pliku, którego „name” zaczyna się od „my”

Dlaczego przekierowanie błędu

3 przykład: Zobaczmy bardziej złożony przykład,

Administratorzy serwerów często wypisują katalogi i przechowują zarówno błąd, jak i standardowe wyjście w pliku, który można później przetworzyć. Oto polecenie.

ls Documents ABC> dirlist 2>&1

Tutaj,

  • który zapisuje dane wyjściowe z jednego pliku do danych wejściowych innego pliku. 2>&1 oznacza, że ​​STDERR przekierowuje do celu STDOUT (który jest katalogiem plików)
  • Przekierowujemy wyjście błędów na standardowe wyjście, które z kolei jest przekierowywane do dirlist pliku. Stąd oba dane wyjściowe są zapisywane do pliku dirlist

Dlaczego przekierowanie błędu

Podsumowanie

  • Każdy plik w systemie Linux ma odpowiadający mu plik Descriptlub z nim związane
  • Klawiatura jest standardowym urządzeniem wejściowym, a ekran jest standardowym urządzeniem wyjściowym
  • „>” to operator przekierowania wyjścia. „>>” dołącza wyjście do istniejącego pliku
  • „<” jest operatorem przekierowania danych wejściowych
  • ">&"przekierowuje wyjście jednego pliku do drugiego.
  • Możesz przekierować błąd, używając odpowiedniego pliku Descriptlub 2.