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

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
so:redirects [2023/03/27 11:24]
jkonczak [Szczegóły]
so:redirects [2024/03/19 23:11] (aktualna)
jkonczak [Szczegóły]
Linia 69: 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 183: Linia 183:
 </​small>​ </​small>​
  
-=== Input redirections ​===+=== Przekierowanie wejścia ​===
  
 ''​komenda < nazwa_pliku''​ ''​komenda < nazwa_pliku''​
Linia 235: Linia 235:
 | ''>>''​ | 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: spacje 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ę |
Linia 299: Linia 299:
     * ''​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 +~~META
-opiera się na programach które robią jak najwięcej się da i rozrosły się do tego +language ​pl 
-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''​ +
-z //p// w jednym terminalu, a w drugim przekieruj wyjście ''​ps -eF''​ do //p//. +
-Powtórz komendy wykonując ''​ps''​ przed ''​fold''​. +
- +
-===== 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>​+
so/redirects.1679909060.txt.gz · ostatnio zmienione: 2023/03/27 11:24 przez jkonczak