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).
Przykład:
ls -al > listings
Tutaj wyjście polecenia ls -al jest przekierowywane do pliku „listings” zamiast ekranu.
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.
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).
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
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..
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
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”
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
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.