Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja | |||
so:files_basics [2023/03/06 13:06] jkonczak [Uprawnienia dostępu do plików] |
so:files_basics [2023/03/12 22:40] (aktualna) jkonczak |
||
---|---|---|---|
Linia 158: | Linia 158: | ||
~~Zadanie.#~~ Stwórz katalog i usuń go używając ''rm''. | ~~Zadanie.#~~ Stwórz katalog i usuń go używając ''rm''. | ||
- | ===== Użytkownicy, uprawnienia do plików ===== | ||
- | |||
- | ==== Użytkownicy i grupy ==== | ||
- | |||
- | W uniksopodobnych systemach istnieją użytkownicy i grupy. \\ | ||
- | Użytkownicy identyfikowani są po numerycznych identyfikatorach **uid** (//user identifier//), które są mapowane na nazwy użytkowników. | ||
- | \\ | ||
- | Podobnie grupy mają identyfikatory numeryczne o nazwie **gid** (//group identifier//), które też są mapowane na nazwy grup. | ||
- | |||
- | Każdy użytkownik jest w jednej podstawowej grupie (nazywanej jego grupą podstawową, //primary group//) i może należeć do dowolnie wielu grup (nazywanych jego grupami dodatkowymi, //supplementary groups//). | ||
- | |||
- | Lista dostępnych użytkowników i grup oraz powiązania uid/gid z nazwami zwykle są czytane z plików ''/etc/passwd'' i ''/etc/groups'', ale po odpowiedniej konfiguracji może być pobierana też z innych źródeł. \\ | ||
- | <small>Np. można wykorzystać serwer LDAP, czy kontroler domeny AD za pośrednictwem programu ''winbindd''. Więcej informacji na [[https://en.wikipedia.org/wiki/Name_Service_Switch|tutaj]]. \\ Hasła lokalnych użytkowników i grup są przechowywane w ''/etc/shadow'' i ''/etc/gshadow''</small> | ||
- | |||
- | W systemie plików zapisane są uidy i gidy (a nie nazwy użytkowników), stąd np. podłączenie dysku z jednego komputera do drugiego przypisze pliki innym nazwom użytkowników i grup jeżeli mapowania uid/gid na nazwy nie są identyczne na obu systemach. \\ <small>To dotyczy również kontenerów (sic!).</small> | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Dla procesów uniksopodobne systemy przechowują efektywny, zapisany i rzeczywisty uid (analogicznie gid). | ||
- | \\ | ||
- | Dla zwykłych procesów te identyfikatory są równe, dla procesów które zmieniały użytkownika mogą być różne. Więcej informacji na [[https://en.wikipedia.org/wiki/User_identifier|tutaj]]. | ||
- | \\ | ||
- | W tej chwili zakres uid'ów i gid'ów w Linuksie to 0÷(2<sup>32</sup>-2) | ||
- | |||
- | <html></small></html> | ||
- | |||
- | Użytkownik o uid równym **0** nazywany jest **superużytkownikiem** (//superuser//) i ma zwyczajowo nadaną nazwę **[[https://pl.wikipedia.org/wiki/Root|root]]**. | ||
- | |||
- | Żeby sprawdzić swoją nazwę użytkownika, można skorzystać z komendy ''**whoami**''. \\ | ||
- | Do sprawdzenia listy grup służy komenda ''**groups** [//użytkownik//]''. Bez argumentów wyświetla grupy bieżącego użytkownika. | ||
- | |||
- | ~~Zadanie.#~~ Przetestuj działanie komendy ''whoami''. | ||
- | |||
- | ~~Zadanie.#~~ Sprawdź listę grup w której jesteś. Sprawdź listę grup w której jest użytkownik student. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Komenda ''**id** [//użytkownik//]'' wyświetla nazwy i numery użytkownika, jego grupy podstawowej i grup dodatkowych. | ||
- | |||
- | Informację o użytkowniku można wyciągnąć poleceniem ''getent passwd //użytkownik//'', o grupach – ''getent group //grupa//''. | ||
- | |||
- | ~~Zadanie.#~~ Sprawdź jaki masz uid i gid, zarówno poleceniem ''id'' jak i ''getent''. | ||
- | |||
- | <html></small></html> | ||
- | |||
- | |||
- | Zmiana hasła użytkownika jest wykonywana przy pomocy komendy **''passwd''**. \\ <small>Root może przy pomocy ''passwd //user//'' ustawić hasło każdego użytkownika, może też zmienić czas ważności hasła bądź zablokować konto.</small> | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Podstawowe komendy administracyjne do zarządzania użytkownikami to: | ||
- | * dodawanie nowego użytkownika: ''useradd [-m] [-g //grupa//] //nazwa//'' | ||
- | * dodawanie nowej grupy: ''groupadd //nazwa//'' | ||
- | * dodanie użytkownika do grupy: ''gpasswd -a //użytkownik// //grupa//'' | ||
- | * zmiana/usunięcie użytkownika/grupy: ''usermod'' / ''userdel'' / ''groupmod'' / ''groupdel'' | ||
- | | ||
- | <html></small></html> | ||
- | | ||
- | ==== Użytkownicy w systemie, historia logowania, komunikacja ==== | ||
- | |||
- | Listę osób bieżąco używających systemu można wyświetlić komendą **''w -n''** oraz ''who''. | ||
- | |||
- | Historię logowań można wyświetlić używając polecenia ''**last** [-n //ile_ostatnich//] [//username//]''. | ||
- | |||
- | ~~Zadanie.#~~ Zaloguj się po ssh na polluksa. Sprawdź jacy inni użytkownicy są zalogowani. | ||
- | |||
- | ~~Zadanie.#~~ Na polluksie sprawdź jacy trzej użytkownicy logowali się ostatnio. | ||
- | |||
- | ~~Zadanie.#~~ Na polluksie sprawdź kiedy ostatnio logował się użytkownik root. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | ~~Zadanie.#~~ Sprawdź jacy użytkownicy byli zalogowaniu na polluksie w chwili ''2023-03-03 13:30'' | ||
- | |||
- | <html></small></html> | ||
- | |||
- | Komendą ''**write** //użytkownik// [//terminal//]'' można wysłać tekst do wybranego użytkownika (kończąc wpisany tekst przez EOF, zwykle //Ctrl+d//). | ||
- | \\ | ||
- | Spowoduje to wyświetlenie mu podanego testu poprzedzonego komunikatem "message from…" w terminalu. | ||
- | \\ | ||
- | Otrzymywanie takich wiadomości można zablokować (bądź odblokować) komendą ''**mesg {n|y}**''. | ||
- | |||
- | Można też wysłać wiadomość do wszystkich użytkowników komendą ''wall''. | ||
- | |||
- | ~~Zadanie.#~~ Napisz do sąsiada wiadomość. Zobacz na własnym ekranie wiadomość wysłaną od kogoś. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Istnieje też komenda ''[[https://en.wikipedia.org/wiki/Talk_(software)|talk]] //użytkownik//'' pozwalająca na rozmowę między dwoma użytkownikami. | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ==== Przełączenie się na innego użytkownika ==== | ||
- | |||
- | Posiadając odpowiednie uprawnienia i/lub znając odpowiednie hasło (w zależności od ustawień systemu) można przełączyć się na innego użytkownika bądź wykonać komendę jako inny użytkownik. | ||
- | |||
- | Komenda ''**su** [-] [//użytkownik//]'' po autoryzacji uruchamia domyślną powłokę dla podanego użytkownika (domyślnie roota). \\ | ||
- | Komenda ''su -c //komenda// [-] [//użytkownik//]'' po autoryzacji uruchamia w domyślnej powłoce dla podanego użytkownika (domyślnie roota) podaną komendę. \\ | ||
- | ''su'' jest dostępna w każdym uniksopodobnym systemie. | ||
- | W domyślnych ustawieniach Linuksa komenda ''su'' wymaga podania hasła użytkownika docelowego (i w niektórych dystrybucjach przynależności do odpowiedniej grupy, zwykle ''wheel''). | ||
- | |||
- | Na wielu dystrybucjach instalowana jest też komenda ''sudo'' która ma na celu zezwolenie wybranym użytkownikom na wykonywanie wybranych komend z uprawnieniami wskazanych użytkowników. Do autoryzacji ''sudo'' wykorzystuje hasło bieżącego bądź docelowego użytkownika. | ||
- | W niektórych dystrybucjach komenda ''sudo'' jest nadużywana do zastąpienia komendy ''su''. | ||
- | |||
- | ~~Zadanie.#~~ Zaloguj się na podany przez prowadzącego serwer przez ssh (prawdopodobnie ''ssh user//N//@fe80::1%br0''). Zmień użytkownika na ''root''. Zmień użytkownika na innego ''user//N//''. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Root może też korzystać z komend ''runuser'' i ''setpriv'' do uruchamiania komend z innym uid/gid/[[https://linux.die.net/man/7/capabilities|uprawnieniami]]. | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ==== Uprawnienia dostępu do plików ==== | ||
- | |||
- | === Rodzaje i zapis uprawnień === | ||
- | |||
- | W uniksopodobnych systemach dostęp do pliku określają trzy podstawowe uprawnienia: odczytu (__**r**__ead), zapisu (__**w**__rite) i wykonania (e__**x**__ecute). | ||
- | \\ | ||
- | Każde z tych uprawnień jest przyznawane osobno właścicielowi pliku (__**u**__ser), grupie pliku (__**g**__roup) i pozostałym użytkownikom (__**o**__thers). | ||
- | \\ | ||
- | Dodatkowo można ustawić trzy uprawnienia specjalne: set-user-id (sgid, __**s**__), set-group-id (sgid, __**s**__) i sticky (__**t**__). | ||
- | |||
- | Prawo do wykonania dla pliku oznacza możliwość uruchomienia go (jako skryt, program etc.), dla katalogu – wejścia do niego. | ||
- | |||
- | Suid/sgid nadany zwykłym plikom oznacza, że po uruchomieniu proces będzie działać z efektywnym uid/gid właściciela pliku. | ||
- | \\ | ||
- | <small> | ||
- | Zauważ że skrypt są interpretowane przez inny program, nie uruchamiane. Nadanie skryptowi suid/sgid nie ma wpływu na jego działanie. | ||
- | \\ | ||
- | Suid pozwala np. zwykłemu użytkownikowi zmienić hasło (czyli zmienić plik /etc/shadow do którego zwykły użytkownik nie ma dostępu). | ||
- | \\ | ||
- | Sgid pozwala np. zwykłemu użytkownikowi uruchamiać maszyny wirtualne w VirtualBoxie czy analizować pakiety sieciowe w Wiresharku. | ||
- | </small> | ||
- | |||
- | [[https://en.wikipedia.org/wiki/Sticky_bit|Sticky bit]] nadany katalogowi D oznacza, że plik X z katalogu D może usunąć tylko właściciel pliku X bądź katalogu D. | ||
- | \\ | ||
- | <html><small></html> | ||
- | Sticky bit ustawiany jest w katalogu ''/tmp'' i innych, gdzie każdy użytkownik może tworzyć pliki o to, by tylko właściciel (bądź root) mogli usunąć pliki. | ||
- | |||
- | Suid/sgid dla innych plików niż zwykłe i sticky bit dla innych plików niż katalogi nie mają spójnego znaczenia w uniksopodobnych systemach. | ||
- | |||
- | Przy montowaniu systemu plików można ustawić opcję ''nosuid'' która wyłącza działanie suid/sgid | ||
- | |||
- | <html></small></html> | ||
- | |||
- | Uprawnienia są przechowywane jako liczba, gdzie wartości kolejnych bitów oznaczają (od najstarszego bitu): prawa specjalne (w kolejności suid, sgid, sticky), i prawa dla użytkownika, grupy, innych (w kolejności odczyt, zapis, wykonanie). | ||
- | \\ | ||
- | Numerycznie uprawnienia zapisuje się w systemie ósemkowym, np: ''<color #f000f0>4</color><color #800000>7</color><color #008000>5</color><color #000080>1</color>'' gdzie kolejne cyfry oznaczają uprawnienia <color #f000f0>specjalne</color> (tutaj: suid), <color #800000>użytkownika</color> (tutaj: wszystkie), <color #008000>grupy</color> (tutaj: odczyt i wykonanie) i <color #000080>innych</color> (tutaj: żadne). | ||
- | |||
- | Tekstowo uprawnienia zapisuje się jako: ''<color #800000>rwx</color><color #008000>rwx</color><color #000080>rwx</color>'', gdzie kolejne trójki to właśnie uprawnienia <color #800000>użytkownika</color>, <color #008000>grupy</color> i <color #000080>innych</color>. | ||
- | \\ | ||
- | Brak danego uprawnienia zapisuje się przez **''-''**. | ||
- | \\ | ||
- | Zwykle przed tak zapisanymi uprawnieniami pojawia się dodatkowa litera określająca typ pliku. | ||
- | \\ | ||
- | Uprawnienia specjalne zapisuje się na pozycji uprawnień wykonania: suid i prawo do wykonanie to ''s'', suid i brak prawa do wykonania to ''S'' na pozycji użytkownika. Analogicznie prezentowany jest sgid na pozycji grupy, i sticky bit z literami ''t'' i ''T'' na pozycji pozostałych. | ||
- | \\ | ||
- | Przykładowo: ''rw-r--r--'' oznacza że użytkownik ma prawo zapisu i odczytu, a pozostali tylko do odczytu (równoważne ''644''), | ||
- | \\ | ||
- | a ''rwx--x--x'' pozwalają właścicielowi na odczyt, zapis i wykonanie pliku, a grupie i pozostałym tylko na wykonanie (''711''). | ||
- | |||
- | Aby zobaczyć szczegółowe informacje o pliku, w tym uprawnienia, można wykonać ''**stat** //plik//''. | ||
- | \\ | ||
- | Uprawnienia są też wyświetlane w wynikach ''ls -l'' i ''tree -p''. | ||
- | \\ | ||
- | Wszystkie powyższe polecenia dodają na początek uprawnień literę określającą rodzaj pliku. | ||
- | |||
- | ~~Zadanie.#~~ Sprawdź jakie uprawienia mają (na twoim komputerze): | ||
- | * twój katalog domowy | ||
- | * podkatalog ''.ssh'' w twoim katalogu domowym | ||
- | * plik ''.bash_history'' w twoim katalogu domowym | ||
- | * plik ''/etc/passwd'' i ''/etc/shadow'' | ||
- | * katalog ''/tmp'' | ||
- | * plik ''/usr/bin/passwd'' i ''/usr/bin/write'' | ||
- | |||
- | ~~Zadanie.#~~ Sprawdź jakie mają uprawnienia i jakim są rodzajem plików: | ||
- | * ''/var/run'' | ||
- | * ''/dev/sda'' lub ''/dev/nvme0n1'' | ||
- | * ''/dev/null'' | ||
- | * ''/run/initctl'' | ||
- | * ''/run/rpcbind.sock'' | ||
- | | ||
- | === Zmiana uprawnień, grupy i użytkownika pliku === | ||
- | |||
- | Domyślnie uprawnienia nadawane plikom i katalogom określa maska którą można odczytać poleceniem ''**umask**'' (i zmienić dla bieżącej powłoki poleceniem ''umask //oktalnie//''). | ||
- | |||
- | Do zmiany uprawnień służy komenda ''**chmod** //uprawnienia// //plik//''. | ||
- | \\ | ||
- | ''chmod'' przyjmuje uprawnienia w postaci ósemkowej, np. ''chmod 644 plik'' lub w postaci symbolicznej. \\ | ||
- | Postać symboliczna to oddzielone przecinkami wyrażenia na które składa się: | ||
- | * litera ''u'', ''g'', ''o'' lub ''a'' (user, group, others lub __**a**__ll - wszyscy) | ||
- | * operacja ''+'', ''-'' lub ''='' (dodaj, usuń lub ustaw te prawa) | ||
- | * uprawnienia ''r'', ''w'', ''x'', ''s'' lub ''t''. | ||
- | Przykładowo ''u+x,o='' doda użytkownikowi prawo do zapisu i ustawi brak praw dla innych. | ||
- | \\ | ||
- | <small>Pominięcie litery ''[ugoa]'' przed operacją ma specjalne znaczenie, szczegóły w podręczniku systemowym.</small> | ||
- | |||
- | Właściciel pliku będący w kliku grupach może użyć komendy ''**chgrp** //grupa// //plik//'' do zmiany grupy do której należy plik. | ||
- | |||
- | Tylko root może zmienić właściciela (i grupę) pliku poleceniem ''**chown** [//właściciel//][:[//grupa//]] //plik//''. | ||
- | |||
- | Zarówno ''chmod'', ''chgrp'' i ''chown'' przyjmują przełączniki ''-R'' (''--recursive'') dla rekursywnej zmiany i ''--reference=//plik//'' dla ustawienia uprawnień/grupy/właściciela identycznego jak we wskazanym pliku. | ||
- | |||
- | //Ćwiczenia wykonuj na podanym przez prowadzącego serwerze. \\ Do tworzenia plików możesz wykorzystać np. komendę // ''fortune > //plik//''. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel mógł odczytać plik. | ||
- | \\ | ||
- | Sprawdź poprawność nadanych praw przełączając się na innych użytkowników. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz plik. Ustaw korzystając z ósemkowego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik. Sprawdź poprawność nadanych praw. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz plik. Ustaw korzystając z symbolicznego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik. | ||
- | |||
- | ~~Zadanie.#~~ Zmień grupę pliku z poprzedniego zadania. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel i pozostali mogli odczytać plik. Sprawdź czy osoba należąca do grupy pliku może go odczytać. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz katalog ze zwykłym plikiem w środku. Odbierz prawo do wykonywania katalogu. Spróbuj wylistować katalog, wejść do katalogu i wyświetlić plik bez wchodzenia do katalogu. | ||
- | |||
- | ~~Zadanie.#~~ Zmień prawa dostępu katalogu na ''u=rwx,go=rx''. Stwórz w tym katalogu zwykły plik. Wyświetl plik jako inny użytkownik. Wyświetl zawartość katalogu jako inny użytkownik. \\ Następnie zmień prawa do katalogu ''u=rwx,go=x''. Spróbuj ponownie wyświetlić plik i zawartość katalogu jako inny użytkownik. | ||
- | |||
- | ~~Zadanie.#~~ Stwórz katalog z prawami dostępu ''777'' i stwórz w nim dwa pliki. Jednemu z nich ustaw prawa ''600''. Z innego użytkownika spróbuj usunąć oba pliki. | ||
- | |||
- | ~~Zadanie.#~~ W katalogu użytkownika A z prawami dostępu ''777'' stwórz jako użytkownik B dwa katalogi: jeden pusty, jeden z plikiem w środku. Spróbuj usunąć te katalogi jako użytkownik A. | ||
- | |||
- | ~~Zadanie.#~~ Czy możesz zmienić nazwę katalogu K który nie dał się usunąć w poprzednim zadaniu? Czy możesz przenieść katalog K do innego? Czy możesz przenieść katalog zawierający K do innego? | ||
- | |||
- | ~~Zadanie.#~~ Stwórz plik i katalog z plikiem w środku i odbierz wszystkim trzem wszystkie uprawnienia. Zmień użytkownika na root i spróbuj wyświetlić oba pliki. | ||
- | |||
- | ~~Zadanie.#~~ Z roota zmień właściciela wybranego pliku. Następnie zmień grupę innego pliku na ''www-data''. | ||
- | |||
- | ==== Data utworzenia, modyfikacji, dostępu ==== | ||
- | |||
- | Linuksowe system plików zwykle przechowują datę zmiany metadanych (//change//, ctime), zmiany treści (//modify//, mtime) i ostatniego dostępu (//access//, atime) dla każdego pliku. Niektóre systemy plików dodatkowo przechowują też czas utworzenia pliku. | ||
- | \\ | ||
- | <small>Montując system plików często wyłącza się rejestrowanie czasu ostatniego dostępu podając opcję ''noatime'' lub ustawia zmianę tego czasu tylko w szczególnych przypadkach podając opcję ''relatime''. Komenda ''mnt'' i ''findmnt'' wyświetlają z jakimi opcjami zamontowano system plików.</small> | ||
- | |||
- | Polecenie ''stat //plik//'' pokazuje te czasy. | ||
- | |||
- | Komenda ''touch //plik//'' ustawia czas dostępu i modyfikacji pliku, domyślnie na teraz. | ||
- | \\ | ||
- | Podając ''-d //data//'' lub ''--reference=//plik//'' można wybrać inną datę, a ''-a'', ''-c'' i ''-m'' wybierają który czas zmodyfikować. | ||
- | \\ | ||
- | Jeśli plik docelowy nie istnieje, domyślnie komenda ''touch'' go stworzy. Jest to często używane do tworzenia pustych plików. | ||
- | |||
- | |||
- | ~~Zadanie.#~~ Sprawdź daty dla pliku ''/var/log/wtmp'' | ||
- | |||
- | ~~Zadanie.#~~ Zmień daty do swojego katalogu domowego. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | ~~Zadanie.#~~ Zmień datę zmiany zawartości wybranego pliku na ''13:30 PDT Saturday month ago''. | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ===== 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ń 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.) | ||
- | |||
- | <html><small></html> | ||
- | |||
- | Do wygodnego przeglądania historii można też użyć programu [[https://dvorka.github.io/hstr/|hstr]] | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ~~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? | ||
- | |||
- | <html><small></html> | ||
- | |||
- | ~~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? | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ===== 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''. | ||
- | |||
- | |||
- | <html><small></html> | ||
- | |||
- | ''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. | ||
- | |||
- | <html></small></html> | ||
- | |||
- | ~~Zadanie.#~~ Przejdź całą pierwszą lekcję w ''vimtutor''. | ||
- | |||
- | <html><small></html> | ||
- | |||
- | ~~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]] | ||
- | | ||
- | <html></small></html> | ||
| |