Narzędzia użytkownika

Narzędzia witryny


so:files_basics

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: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 katalogijeden 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>​+
  
   ​   ​
so/files_basics.1678104411.txt.gz · ostatnio zmienione: 2023/03/06 13:06 przez jkonczak