Narzędzia użytkownika

Narzędzia witryny


so:redirects

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
so:redirects [2023/03/27 00:35]
jkonczak utworzono
so:redirects [2024/03/19 23:11] (aktualna)
jkonczak [Szczegóły]
Linia 1: Linia 1:
-===== Edycja linii poleceń ​ ===== 
- 
-Bash (i wiele innych programów) korzysta do odczytywania komend ze standardowego wejścia biblioteki [[https://​en.wikipedia.org/​wiki/​GNU_Readline|readline]]. 
-\\ 
-Część programów z przyczyn licencyjnych wybiera do tego samego celu [[https://​thrysoee.dk/​editline/​|libedit]]. 
- 
-Readline pozwala na wygodną edycję linii poleceń i tworzenie historii poleceń. 
- 
-Lista sensownych skrótów klawiszowych do edycji linii poleceń (nie uwzględniająca strzałek) jest tutaj: https://​readline.kablamo.org/​emacs.html 
-\\ 
-Pełna lista komend i przypisanych do nich skrótów jest w podręczniku systemowym \\ (''​man readline''​ i ''​man bash''​). 
-\\ 
-Konwencja zapisu skrótów klawiszowych to: 
-  * ''​^//​x//''​ lub ''​C-//​x//''​ to //Ctrl+x// (uwaga:''​^//​X//''​ lub ''​C-//​X//''​ to //​Ctrl+Shift+x//​),​ 
-  * ''​M-//​x//''​ to zwykle //Alt-x// (patrz: https://​en.wikipedia.org/​wiki/​Meta_key),​ 
-  * ''//​a//​ //​b//''​ to wciśnięcie po skrócie //a// skrótu //b//. 
- 
-Bash domyślnie dopisuje historię wykonanych poleceń do pliku ''​**~/​.bash_history**''​ w momencie wyjścia z powłoki. 
-\\ 
-Historię (tą z pliku połączoną z bieżącą) można wyświetlić komendą ''​**history**''​. (W ''​man bash_builtins''​ znajduje się opis przełączników.) 
- 
-<​small>​ 
- 
-Do wygodnego przeglądania historii można też użyć programu [[https://​dvorka.github.io/​hstr/​|hstr]] 
- 
-</​small>​ 
- 
-~~Zadanie.#​~~ Jakim skrótem czyści się ekran? 
- 
-~~Zadanie.#​~~ Jakimi skrótami wyszukuje się wstecz w historii? 
- 
-~~Zadanie.#​~~ Jakim skrótem przesuwa się kursor o jedno słowo? 
- 
-<​small>​ 
- 
-~~Zadanie.#​~~ Jakim złożeniem skrótów przesuwa się kursor o 5 słów? 
- 
-~~Zadanie.#​~~ Jakim skrótów wstawia się ostatnie słowo z poprzedniego polecenia w historii? 
- 
-~~Zadanie.#​~~ Jakim złożeniem skrótów wstawia się trzecie od końca słowo z poprzedniego polecenia w historii? 
- 
-~~Zadanie.#​~~ Jakim skrótem zamienia się kolejnością to słowo z poprzednim? 
- 
-</​small>​ 
- 
-===== Edycja plików w konsoli ===== 
- 
-=== vi i vim === 
- 
-''​vi''​ jest często jedynym domyślnie instalowanym edytorem tekstowym. 
- 
-''​vim''​ to ulepszona wersja ''​vi''​. 
- 
-Żeby nauczyć się ''​vim'',​ uruchom ''​vimtutor''​. 
- 
- 
-<​small>​ 
- 
-''​vi''​ jest wpisane w standard [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​vi.html|POSIX]]. 
-\\ 
-Jest też częścią minimalistycznych zestawów narzędzi takich jak busybox i toybox. 
- 
-</​small>​ 
- 
-~~Zadanie.#​~~ Przejdź całą pierwszą lekcję w ''​vimtutor''​. 
- 
-<​small>​ 
- 
-~~Zadanie.#​~~ Przejdź pozostałe lekcje w ''​vimtutor''​. 
- 
-=== nano === 
- 
-Nano jest stosunkowo prostym edytorem tekstowym. 
- 
-Podstawowe skróty są wyświetlone na dole ekranu. 
- 
-Więcej na: https://​www.nano-editor.org/​docs.php 
- 
-=== Emacs === 
- 
-[[https://​www.gnu.org/​software/​emacs/​|Emacs]] jest [[https://​en.wikipedia.org/​wiki/​Editor_war|odwiecznym rywalem]] ''​vim''​a w konkurencji programów do edytowania tekstu w konsoli. 
- 
-Po wpisaniu ''​emacs''​ możesz wybrać tutorial skrótem //Ctrl+h t//. 
- 
-=== Inne === 
- 
-  * [[https://​joe-editor.sourceforge.io/​joe]] 
-  * mcedit – edytor zintegrowany z [[https://​en.wikipedia.org/​wiki/​Midnight_Commander|mc]] 
-  * [[https://​micro-editor.github.io/​|micro]] 
-  * [[https://​neovim.io/​|neovim]] 
-  * [[https://​helix-editor.com/​|hx]] 
-  ​ 
-</​small>​ 
- 
 ===== Wyświetlanie linków / tekstu / sekwencji liczb ===== ===== Wyświetlanie linków / tekstu / sekwencji liczb =====
  
Linia 117: Linia 23:
 ''​**column** [-x] [//​plik//​]...''​ działa jak ''​cat''​ jeśli najdłuższa linia w ''​**column** [-x] [//​plik//​]...''​ działa jak ''​cat''​ jeśli najdłuższa linia w
 //plik//ach (bądź standardowym wejściu) nie zmieściłaby się dwukrotnie na szerokość //plik//ach (bądź standardowym wejściu) nie zmieściłaby się dwukrotnie na szerokość
-w terminalu; ​\\+w terminalu;
 w innym wypadku, wypisuje dane w tylu kolumnach ile mieści się na szerokość terminala, w innym wypadku, wypisuje dane w tylu kolumnach ile mieści się na szerokość terminala,
 uzupełniając wpierw kolumny (albo, z ''​-x'',​ wiersze). uzupełniając wpierw kolumny (albo, z ''​-x'',​ wiersze).
Linia 125: Linia 31:
 w tabelę. w tabelę.
  
-''​**od** [-t x1]'',​ ''​**hexdump** [-C]'',​ i ''​**xxd**''​ pokazują pliki binarnie.+''​**od** [-t x1] '',​ ''​**hexdump** [-C] '',​ i ''​**xxd** ​''​ pokazują pliki binarnie.
  
 ++++ Przykłady | {{page>​so:​redirects:​cat&​inline}} ++++ ++++ Przykłady | {{page>​so:​redirects:​cat&​inline}} ++++
Linia 163: Linia 69:
 ++++ Przykłady | {{page>​so:​redirects:​echo&​inline}} ++++ ++++ Przykłady | {{page>​so:​redirects:​echo&​inline}} ++++
  
-~~Zadanie.#​~~ Sprawdź działanie ''​echo -e '​foo\n\nbaz'​ ''​ \\ oraz ''​echo -e '\n\n one \033[A \033[A two \033[B \033[B \n \033[1;31m red \033[0m'​ ''​ \\ <​small>​[[https://​en.wikipedia.org/​wiki/​ANSI_escape_code|Sekwencje sterujące ANSI]] są dobrze opisane [[https://​gist.github.com/​fnky/​458719343aabd01cfb17a3a4f7296797|tutaj]]</​small>​+~~Zadanie.#​~~ Sprawdź działanie ''​echo -e '​foo\n\nbaz'​ ''​ \\ oraz ''​echo -e '\n\n one \033[A \033[A two \033[B \033[B \n \033[1;31m red \033[0m'​ ''​ \\ <​small>​[[https://​en.wikipedia.org/​wiki/​ANSI_escape_code|Sekwencje sterujące ANSI]] są dobrze opisane [[https://​gist.github.com/​fnky/​458719343aabd01cfb17a3a4f7296797|tutaj]] ​oraz w podręczniku systemowym na stronie ''​[[https://​man7.org/​linux/​man-pages/​man4/​console_codes.4.html|console_codes]]''​.</​small>​
  
-~~Zadanie.#​~~ Sprawdź działanie ''​printf "​|%4.2f|%3s|%-16s|\n|%4.2f|%3s|%-16s|\n"​ 3,1428 pi obwod/​srednica 9,8 g grawitacja''​+~~Zadanie.#​~~ Sprawdź działanie ''​printf "​|%4.2f|%3s|%-16s|\n|%4.2f|%3s|%-16s|\n"​ 3.1428 pi obwod/​srednica 9.8 g grawitacja''​
  
  
Linia 261: Linia 167:
 ++++ Przykłady | {{page>​so:​redirects:​out&​inline}} ++++ ++++ Przykłady | {{page>​so:​redirects:​out&​inline}} ++++
  
-~~Zadanie.#​~~ ​Komend ​''​date''​ wypisuje bieżącą datę. Przekieruj jej wynik do pliku.+~~Zadanie.#​~~ ​Komenda ​''​date''​ wypisuje bieżącą datę. Przekieruj jej wynik do pliku.
  
 ~~Zadanie.#​~~ Dodaj kolejną datę do pliku z poprzedniego zadania. ~~Zadanie.#​~~ Dodaj kolejną datę do pliku z poprzedniego zadania.
Linia 267: Linia 173:
 ~~Zadanie.#​~~ Wykonaj komendę ''​cat /etc/motd /​etc/​shadow''​. Przekieruj jej standardowy błąd do pliku. ~~Zadanie.#​~~ Wykonaj komendę ''​cat /etc/motd /​etc/​shadow''​. Przekieruj jej standardowy błąd do pliku.
  
 +<​small>​
 ~~Zadanie.#​~~ Wykonaj ''​find /​var/​spool/''​ (polecenie ''​find''​ będzie omawiane później). Przekieruj standardowy błąd do pliku ''/​dev/​null''​. ~~Zadanie.#​~~ Wykonaj ''​find /​var/​spool/''​ (polecenie ''​find''​ będzie omawiane później). Przekieruj standardowy błąd do pliku ''/​dev/​null''​.
 +</​small>​
  
 ~~Zadanie.#​~~ Przekieruj standardowe wyjście komendy ''​find /​var/​spool/''​ do jednego pliku, a standardowy błąd do innego. ~~Zadanie.#​~~ Przekieruj standardowe wyjście komendy ''​find /​var/​spool/''​ do jednego pliku, a standardowy błąd do innego.
  
 +<​small>​
 ~~Zadanie.#​~~ Przekieruj standardowe wyjście i standardowy błąd komendy ''​find /​var/​spool/''​ do tego samego pliku. ~~Zadanie.#​~~ Przekieruj standardowe wyjście i standardowy błąd komendy ''​find /​var/​spool/''​ do tego samego pliku.
 +</​small>​
  
-=== Input redirections ​===+=== Przekierowanie wejścia ​===
  
 ''​komenda < nazwa_pliku''​ ''​komenda < nazwa_pliku''​
Linia 312: Linia 222:
 **Domyślny //​deskryptor_pliku//​ to 0 jeśli //​operator//​ zawiera ''<''​ albo 1 w przeciwnym wypadku** **Domyślny //​deskryptor_pliku//​ to 0 jeśli //​operator//​ zawiera ''<''​ albo 1 w przeciwnym wypadku**
 \\ \\
-Czyli: ''​komenda < plik''​ jest identyczna z ''​komenda 0< plik'',​ a ''​komenda >> plik ''​ jest identyczna z ''​komenda 1>> plik''​.+Czyli: ''​komenda < plik''​ jest identyczna z ''​komenda 0< plik'',​ a ''​komenda >> plik''​ jest identyczna z ''​komenda 1>> plik''​.
 \\ \\
  
Linia 321: Linia 231:
  
 | ''<'' ​ | otwiera plik //słowo// do odczytu i zastępuje //​deskryptor_pliku//​ nowo otwartym| | ''<'' ​ | otwiera plik //słowo// do odczytu i zastępuje //​deskryptor_pliku//​ nowo otwartym|
-| ''>'' ​ | wyświetla błąd jeśli plik //słowo// istnieje i opcja "​noclobber"​ jest ustawiona ((Opcja "​noclobber"​ jest domyślnie wyłączona;​ można ją włączyć komendą ''​set -C''​.)),​\\ otwiera plik //słowo// do zapisu, ucina go i zastępuje //​deskryptor_pliku//​ nowo otwartym plikiem | +| ''>'' ​ | wyświetla błąd jeśli plik //słowo// istnieje i opcja "​noclobber"​ jest ustawiona((Opcja "​noclobber"​ jest domyślnie wyłączona;​ można ją włączyć komendą ''​set -C''​.)),​\\ otwiera plik //słowo// do zapisu, ucina go i zastępuje //​deskryptor_pliku//​ nowo otwartym plikiem | 
-| ''>​|''​ | otwiera plik //słowo// do zapisu, ucina go i zastępuje //​deskryptor_pliku//​ nowo otwartym plikiem (niezależnie czy plik //słowo// istnieje) |+| ''>​|''​ | otwiera plik //słowo// do zapisu, ucina go i zastępuje //​deskryptor_pliku//​ nowo otwartym plikiem ​\\ (niezależnie czy plik //słowo// istnieje) |
 | ''>>''​ | otwiera plik //słowo// do dopisywania i zastępuje //​deskryptor_pliku//​ nowo otwartym | | ''>>''​ | otwiera plik //słowo// do dopisywania i zastępuje //​deskryptor_pliku//​ nowo otwartym |
 | ''<>''​ | otwiera plik //słowo// do odczytu i zapisu, oraz zastępuje //​deskryptor_pliku//​ nowo otwartym | | ''<>''​ | otwiera plik //słowo// do odczytu i zapisu, oraz zastępuje //​deskryptor_pliku//​ nowo otwartym |
-| ''<<''​ | 1) tworzy tymczasowy plik \\ 2) czyta linię ze standardowego wejścia\\ 3) jeśli cała linia to dokładnie //słowo//, idź do \\ 4) jeśli ​//słowie// nie ma cudzysłowów (pary ''"''​ lub <​html><​code>'</​code></​html>​),​ wykonuje podstawienia ((Np. pod ''​$VAR''​ podstawia wartość zmiennej ''​VAR'',​ ''​`date`''​ jest zastąpione wynikiem komendy ''​date''​ etc.)) w linii \\ 5) pisze linię do pliku tymczasowego \\ 6) otwiera plik tymczasowy do odczytu \\ 7) zastępuje //​deskryptor_pliku//​ nowo otwartym \\ 8) uruchamia komendę | +| ''<<''​ | 1) tworzy tymczasowy plik \\ 2) czyta linię ze standardowego wejścia\\ 3) jeśli cała linia to dokładnie //słowo//, idź do \\ 4) jeśli //słowo// nie było ujęte w cudzysłowy (pary ''"''​ lub <​html><​code>'</​code></​html>​),​ wykonuje podstawienia((Np. pod ''​$VAR''​ podstawia wartość zmiennej ''​VAR'',​ ''​`date`''​ jest zastąpione wynikiem komendy ''​date''​ etc.)) w linii \\ 5) pisze linię do pliku tymczasowego \\ 6) wraca do 2 \\ 7) otwiera plik tymczasowy do odczytu \\ 8) zastępuje //​deskryptor_pliku//​ nowo otwartym \\ 9) uruchamia komendę | 
-| ''<<​-''​| działa jak ''<<'',​ ale po kroku 2 dodaje jeszcze krok: \\ 2a) usuwa wszystkie początkowe tabulatory (''​\t''​) \\ uwaga: ​spaces ​nie są usuwane|+| ''<<​-''​| działa jak ''<<'',​ ale po kroku 2 dodaje jeszcze krok: \\ 2a) usuwa wszystkie początkowe tabulatory (''​\t''​) \\ uwaga: ​spacje ​nie są usuwane|
 | ''<<<''​| Uwaga: to jest rozszerzenie powłoki Bash \\ 1) tworzy tymczasowy plik \\ 2) pisze //słowo// do pliku tymczasowego \\ 3) pisze znak nowego wiersza do pliku tymczasowego \\ 4) otwiera plik tymczasowy do odczytu ​ \\ 5) zastępuje //​deskryptor_pliku//​ nowo otwartym \\ 6) uruchamia komendę | | ''<<<''​| Uwaga: to jest rozszerzenie powłoki Bash \\ 1) tworzy tymczasowy plik \\ 2) pisze //słowo// do pliku tymczasowego \\ 3) pisze znak nowego wiersza do pliku tymczasowego \\ 4) otwiera plik tymczasowy do odczytu ​ \\ 5) zastępuje //​deskryptor_pliku//​ nowo otwartym \\ 6) uruchamia komendę |
 | ''<&''​ | jeśli //słowo// jest deskryptorem pliku //p// otwartym w trybie pozwalającym na odczyt: duplikuje deskryptor //p// tak żeby zarówno //słowo// jak i //​deskryptor_pliku//​ odnosiły się do tego samego \\  jeśli //słowo// jest ''​-'':​ zamyka //​deskryptor_pliku//​ | | ''<&''​ | jeśli //słowo// jest deskryptorem pliku //p// otwartym w trybie pozwalającym na odczyt: duplikuje deskryptor //p// tak żeby zarówno //słowo// jak i //​deskryptor_pliku//​ odnosiły się do tego samego \\  jeśli //słowo// jest ''​-'':​ zamyka //​deskryptor_pliku//​ |
Linia 337: Linia 247:
 Uruchom ''​find /​var/​spool/''​ z zamkniętym deskryptorem standardowego błędu. Uruchom ''​find /​var/​spool/''​ z zamkniętym deskryptorem standardowego błędu.
  
 +<​small>​
 ~~Zadanie.#​~~ Przekieruj standardowe wyjście i standardowy błąd komendy ''​cat /etc/motd /​etc/​shadow''​ do jednego pliku bez użycia nieprzenośnej składni ''&>''​. ~~Zadanie.#​~~ Przekieruj standardowe wyjście i standardowy błąd komendy ''​cat /etc/motd /​etc/​shadow''​ do jednego pliku bez użycia nieprzenośnej składni ''&>''​.
  
-<​small>​ 
 ~~Zadanie.#​~~ Skopiuj duży plik tekstowy (np. ''/​etc/​services''​) do pliku //p//. ~~Zadanie.#​~~ Skopiuj duży plik tekstowy (np. ''/​etc/​services''​) do pliku //p//.
 \\ \\
Linia 350: Linia 260:
  
 ~~Zadanie.#​~~ Zamień miejscami standardowe wyjście i standardowy błąd komendy ~~Zadanie.#​~~ Zamień miejscami standardowe wyjście i standardowy błąd komendy
-''​cat /etc/motd /​etc/​shadow''​. Sprawdź działanie dodając ''​|rev''​ na koniec (co +''​cat /etc/motd /​etc/​shadow''​. ​\\ Sprawdź działanie dodając ''​|rev''​ na koniec 
-odwróci kolejność znaków na standardowym wyjściu).+(co odwróci kolejność znaków na standardowym wyjściu).
  
 === Przekierowania standardowych strumieni bieżącej powłoki === === Przekierowania standardowych strumieni bieżącej powłoki ===
Linia 385: Linia 295:
     * ''​cat <(echo a)''​     * ''​cat <(echo a)''​
     * ''​echo '​abc'​ > >​(rev)''​     * ''​echo '​abc'​ > >​(rev)''​
-    * ''​cat <(date) > >​(rev)''​+    * ''​cat ​  <(date) > >​(rev)''​
     * ''​cat < <(date) > >​(rev)''​     * ''​cat < <(date) > >​(rev)''​
-    * ''​cat <(date) <​(date) ​  ​<(date) > >​(rev)''​+    * ''​cat <(date) <​(date) ​  <(date) > >​(rev)''​
     * ''​cat <(date) <(date) < <(date) > >​(rev)''​     * ''​cat <(date) <(date) < <(date) > >​(rev)''​
-  ​ 
-===== Potoki ===== 
- 
-<​small>​Dla przypomnienia:​ standardowe funkcje I/O czytają ze standardowego 
-wejścia, a piszą do standardowego wyjścia.</​small>​ 
- 
-Uniksopodobne systemy przez długie lata((Od jakiegoś czasu wiele dystrybucji 
-opiera się na programach które robią jak najwięcej się da i rozrosły się do tego 
-stopnia że nikt już do końca nie panuje nad tym co i w jaki sposób robią (jak 
-np. [[https://​en.wikipedia.org/​wiki/​Systemd|systemd]]).)) trzymały się założenia,​ 
-że każdy program ma [[https://​en.wikipedia.org/​wiki/​Unix_philosophy|solidnie wykonywać jedno dobrze określone zadanie]]. 
-\\ 
-Żeby zrobić skomplikowane zadania, należy podzielić je na mniejsze rozwiązywalne 
-przez takie proste programy. 
- 
-<​small>​ 
-Dla przykładu: powiedzmy że chcesz dowiedzieć się ile procesów ma każdy z użytkowników systemu. 
-  - Wiesz że ''​ps -ef''​ wypisuje procesy, więc zapisujesz do pliku ich listę: ''​ps -ef > ps_output''​. 
-  - Potrzebujesz tylko pierwszej kolumny – nazwy użytkownia,​ \\ Żeby wyciąć tylko pierwszą (oddzielaną spacją) kolumnę, używasz komendy ''​cut --delimiter ' ' --field 1 < ps_output > cut_output''​. 
-  - Żeby skorzystać z programu który liczy powtarzające się linie, musisz mieć je obok siebie. \\ Więc komendą ''​sort < cut_output > sort_output''​ sortujesz plik. 
-  - Na końcu korzystasz z komendy ''​uniq --count < sort_output''​ która pomija powtarzające się linie i przed każðą linię wpisuje ile razy się powtórzyła. 
-Ale: żeby wykonać takie zadanie powstały (niepotrzebne) pliki ''​ps_output'',​ ''​cut_output''​ i ''​sort_output''​. 
-</​small>​ 
- 
-W systemie UNIX wprowadzono możliwość połączenia standardowego wyjścia jednego 
-programu ze standardowym wejściem innego programu. 
-\\ 
-<​small>​Zamiast wykonywać powyższe komendy, można uruchomić 
-''​ps -ef | cut --delimiter ' ' --field 1 | sort | uniq --count''​ 
-które robi to samo bez tworzenia żadnych plików na dysku.</​small>​ 
-\\ 
-Łączenie standardowego wyjścia jednego programu ze standardowym wejściem innego 
-jest technicznie wykonywane za pomocą specjalnego rodzaju pliku nazwanego 
-**potokiem** (//pipe//). Powłoka tworzy taki plik (w RAMie), zastępuje 
-standardowe wyjście jednego programu tym plikiem oraz zastępuje standardowe 
-wejście drugiego programu tym samym plikiem. Odczyt z potoku blokuje się do 
-czasu aż pojawią się na nim dane lub aż wszyscy piszący do potoku go nie zamkną. 
- 
-**Składnia ''//​cmd_a//​ | //​cmd_b//''​ łączy standardowe wyjście //cmd_a// ze  
-standardowym wejściem //​cmd_b//​.** \\ 
-Takie komendy są uruchamiane współbieżnie. 
- 
-Programy trzymające się "​filozofii UNIX'​a"​ czytają z plików o ile podano je w 
-argumentach __lub ze standardowego wejścia jeśli nie podano plików w argumentach__. 
-Dodatkowo standardowe wejście jest używane ilekroć ''​-''​ pojawia się w kontekście 
-nazwy pliku. 
- 
-Do wykonania ''//​cmd_a//​ | //​cmd_b//''​ powłoka tworzy **potok nienazwany** 
-(anonimowy). \\ 
-Można stworzyć **potok nazwany** używając komendy ''​**mkfifo** //​nazwa_pliku//''​. \\ 
-Dane zapisane do potoków, zarówno nazwanego jak i anonimowego,​ są przechowywane 
-w pamięci operacyjnej – nie są zapisywane na dysk. Odczytanie danych z potoku 
-usuwa je z pamięci. 
- 
-++++ Przykłady | {{page>​so:​redirects:​pipes1&​inline}} ++++ 
- 
-~~Zadanie.#​~~ Wykonaj ''​echo '​2+2*2'​ ''​. Potem wynik tego polecenia przekaż przez potok do ''​bc''​. 
- 
-~~Zadanie.#​~~ Użyj ''​echo''​ do wyświetlenia jakiegoś teksu. Potem powtórz komendę 
-przekazując jej wynik w potoku do ''​xxd''​. 
- 
-~~Zadanie.#​~~ Wypisz listę plików w katalogu domowym. 
-\\ 
-Powtórz komendę przekazując w potoku jej wyniki do programu ''​cat''​. 
-\\ 
-Dodaj na koniec poprzedniej komendy przekazanie jej wyniku do ''​cat -n''​. 
  
-~~Zadanie.#​~~ Połącz w potok komendy ''​ps -eF''​ i ''​fold''​ 
  
-~~Zadanie.#~~ Stwórz nazwany potok //p//. Przekieruj wejście programu ''​fold''​ +~~META: 
-z //p// w jednym terminalu, a w drugim przekieruj wyjście ''​ps -eF''​ do //p//. +language = pl 
-Powtórz komendy wykonując ''​ps''​ przed ''​fold''​.+~~
so/redirects.1679870157.txt.gz · ostatnio zmienione: 2023/03/27 00:35 (edycja zewnętrzna)