Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
so:files_basics [2023/03/06 13:06] jkonczak [Uprawnienia dostępu do plików] |
so:files_basics [2025/04/07 19:53] (aktualna) jkonczak |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
===== Kopiowanie, przenoszenie, i usuwanie plików ===== | ===== Kopiowanie, przenoszenie, i usuwanie plików ===== | ||
- | <html><small></html> | + | |
+ | <small> | ||
Do utworzenia pustego pliku możesz użyć ''touch //plik//''. \\ Aby utworzyć plik z zawartością, możesz użyć ''fortune > //plik//'' lub ''echo //zawartość// > //plik//''. \\ Polecenia ''touch'' i ''echo'', jak również znaczenie ''>'' zostaną omówione później. | Do utworzenia pustego pliku możesz użyć ''touch //plik//''. \\ Aby utworzyć plik z zawartością, możesz użyć ''fortune > //plik//'' lub ''echo //zawartość// > //plik//''. \\ Polecenia ''touch'' i ''echo'', jak również znaczenie ''>'' zostaną omówione później. | ||
Linia 6: | Linia 7: | ||
Aby wyświetlić plik, użyj ''cat //plik//''. | Aby wyświetlić plik, użyj ''cat //plik//''. | ||
- | <html></small></html> | + | </small> |
==== Katalogi ==== | ==== Katalogi ==== | ||
Linia 29: | Linia 30: | ||
~~Zadanie.#~~ Usuń katalog ''foo/baz''. | ~~Zadanie.#~~ Usuń katalog ''foo/baz''. | ||
+ | |||
+ | ++++Przykłady|{{page>so:files_basics:examples#mkdir_rmdir&inline&noheader}}++++ | ||
==== Twarde i symboliczne dowiązania ==== | ==== Twarde i symboliczne dowiązania ==== | ||
Linia 43: | Linia 46: | ||
~~Zadanie.#~~ Stwórz plik ''plik1'' z zawartością. Stwórz twarde dowiązanie do pliku ''plik1'' o nazwie ''plik2''. Zmodyfikuj ''plik2''. Wyświetl ''plik1''. | ~~Zadanie.#~~ Stwórz plik ''plik1'' z zawartością. Stwórz twarde dowiązanie do pliku ''plik1'' o nazwie ''plik2''. Zmodyfikuj ''plik2''. Wyświetl ''plik1''. | ||
- | <html><small></html> | + | <small> |
~~Zadanie.#~~ Komenda ''ls'' może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. | ~~Zadanie.#~~ Komenda ''ls'' może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. | ||
Linia 49: | Linia 52: | ||
Miejsce na dysku wykorzystywane przez plik wraca do puli wolnej przestrzeni gdy liczba dowiązań spadnie do 0 (wszystkie wpisy w katalogach, które wskazują na plik są usunięte) i plik nie jest już otwarty w żadnym procesie. | Miejsce na dysku wykorzystywane przez plik wraca do puli wolnej przestrzeni gdy liczba dowiązań spadnie do 0 (wszystkie wpisy w katalogach, które wskazują na plik są usunięte) i plik nie jest już otwarty w żadnym procesie. | ||
- | <html></small></html> | + | </small> |
Linia 58: | Linia 61: | ||
~~Zadanie.#~~ Utwórz symlink do nieistniejącej ścieżki. Wyświetl zawartość katalogu w którym jest ten symlink. | ~~Zadanie.#~~ Utwórz symlink do nieistniejącej ścieżki. Wyświetl zawartość katalogu w którym jest ten symlink. | ||
- | <html><small></html> | + | <small> |
- | Polecenie ''readlink [-f] //cel//'' rozwiązuje wszystkie symlinki i wyświetla [[https://en.wikipedia.org/wiki/Canonicalization|kanoniczną]] postać ścieżki. | + | Polecenia ''readlink [-f] //cel//'' oraz ''realpath [-e] //cel//'' rozwiązują |
+ | wszystkie symlinki i wyświetlają | ||
+ | [[https://en.wikipedia.org/wiki/Canonicalization|kanoniczną]] postać ścieżki. | ||
System plików Windows NTFS też obsługuje dowiązania. Tworzenie ich jest możliwe np. poleceniem [[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mklink|mklink]]. | System plików Windows NTFS też obsługuje dowiązania. Tworzenie ich jest możliwe np. poleceniem [[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mklink|mklink]]. | ||
- | <html></small></html> | + | </small> |
+ | |||
+ | ++++Przykłady|{{page>so:files_basics:examples#ln&inline&noheader}}++++ | ||
==== Kopiowanie i przenoszenie plików ==== | ==== Kopiowanie i przenoszenie plików ==== | ||
Linia 96: | Linia 103: | ||
~~Zadanie.#~~ Skopiuj rekurencyjnie ''someDir'' i zawartość. | ~~Zadanie.#~~ Skopiuj rekurencyjnie ''someDir'' i zawartość. | ||
- | ~~Zadanie.#~~ Przenieś nowo utworzony katalog do środka katalogu ''someDir''. | + | ~~Zadanie.#~~ Przenieś katalog utworzony w poprzednim zadaniu do środka katalogu ''someDir''. |
~~Zadanie.#~~ Zmień nazwę katalogu ''someDir'' na inną. | ~~Zadanie.#~~ Zmień nazwę katalogu ''someDir'' na inną. | ||
Linia 105: | Linia 112: | ||
<html></small></html> | <html></small></html> | ||
+ | |||
+ | ++++Przykłady|{{page>so:files_basics:examples#cp_mv&inline&noheader}}++++ | ||
==== Kopiowanie plików do/z maszyny zdalnej ==== | ==== Kopiowanie plików do/z maszyny zdalnej ==== | ||
Linia 112: | Linia 121: | ||
''scp'' przyjmuje przełącznik ''-r'' do rekursywnego kopiowania katalogów. | ''scp'' przyjmuje przełącznik ''-r'' do rekursywnego kopiowania katalogów. | ||
- | <html><small></html> | + | <small> |
MS Windows ma domyślnie komendę ''scp'', ale zwykle wygodniej jest korzystać z [[https://en.wikipedia.org/wiki/Comparison_of_FTP_client_software#Protocol_support|menadżerów plików]] wspierających SSH. | MS Windows ma domyślnie komendę ''scp'', ale zwykle wygodniej jest korzystać z [[https://en.wikipedia.org/wiki/Comparison_of_FTP_client_software#Protocol_support|menadżerów plików]] wspierających SSH. | ||
- | <html></small></html> | + | </small> |
Większość serwerów SSH wspiera też protokół SFTP, pozwalający na wygodniejsze kopiowanie plików.\\ | Większość serwerów SSH wspiera też protokół SFTP, pozwalający na wygodniejsze kopiowanie plików.\\ | ||
Linia 123: | Linia 132: | ||
~~Zadanie.#~~ Stwórz plik w katalogu ''/tmp'' swojego komputera. Skopiuj go do katalogu domowego użytkownika ''student'' na innym komputerze. | ~~Zadanie.#~~ Stwórz plik w katalogu ''/tmp'' swojego komputera. Skopiuj go do katalogu domowego użytkownika ''student'' na innym komputerze. | ||
- | ~~Zadanie.#~~ Skopiuj ten plik do katalogu ''/tmp'' innego komputera. | + | ~~Zadanie.#~~ Skopiuj ten plik do katalogu ''/tmp'' innego komputera używając ''scp''. |
~~Zadanie.#~~ Skopiuj ten plik do katalogu ''/tmp'' innego komputera używając ''sftp''. | ~~Zadanie.#~~ Skopiuj ten plik do katalogu ''/tmp'' innego komputera używając ''sftp''. | ||
- | <html><small></html> | + | ++++Przykłady|{{page>so:files_basics:examples#scp_sftp&inline&noheader}}++++ |
+ | |||
+ | <small> | ||
=== Rsync === | === Rsync === | ||
Program ''[[https://en.wikipedia.org/wiki/Rsync|rsync]]'' jest powszechnie używany do kopiowania plików i katalogów. Wydajnie porównuje pliki źródłowe z docelowymi i kopiuje tylko różnice. Może kopiować dane do/z zdalnych urządzeń, a także może kompresować dane przesyłane przez sieć dla zwiększenia przepustowości. ''rsync'' jest też powszechnie używany do tworzenia kopii zapasowych. | Program ''[[https://en.wikipedia.org/wiki/Rsync|rsync]]'' jest powszechnie używany do kopiowania plików i katalogów. Wydajnie porównuje pliki źródłowe z docelowymi i kopiuje tylko różnice. Może kopiować dane do/z zdalnych urządzeń, a także może kompresować dane przesyłane przez sieć dla zwiększenia przepustowości. ''rsync'' jest też powszechnie używany do tworzenia kopii zapasowych. | ||
- | <html></small></html> | + | </small> |
==== Usuwanie plików ==== | ==== Usuwanie plików ==== | ||
Linia 158: | Linia 170: | ||
~~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 ===== | + | ++++Przykłady|{{page>so:files_basics:examples#rm&inline&noheader}}++++ |
- | + | ||
- | ==== 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> | + | |
| |