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 15:03]
jkonczak [Często używane przekierowania]
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 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 
-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żdą 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. 
-\\ 
-Po uruchomieniu potoku powłoka czeka na zakończenie wszystkich procesów w potoku((Inaczej niż przy process substitution,​ gdzie powłoka czeka tylko na wykonywaną komendę)). 
- 
-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. Otwarcie potoku od odczytu domyślnie blokuję się aż inny 
-proces otworzy potok do zapisu. 
- 
-++++ Przykłady | {{page>​so:​redirects:​pipes1&​inline}} ++++ 
- 
-~~Zadanie.#​~~ Wykonaj ''​echo '​2+2*2'<​nowiki></​nowiki>''​. 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.1679922223.txt.gz · ostatnio zmienione: 2023/03/27 15:03 przez jkonczak