przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
so
»
files_basics
so:files_basics
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Kopiowanie, przenoszenie, i usuwanie plików ===== <html><small></html> 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. Aby wyświetlić plik, użyj ''cat //plik//''. <html></small></html> ==== Katalogi ==== **''mkdir //dir//''** tworzy nowy katalog. \\ <small> ''mkdir -p //dir1/dir2/dir3//'' tworzy katalog ''dir1'', i katalog ''dir2'' w ''dir1'', i katalog ''dir3'' w ''dir1/dir2''. \\ Podając przełącznik ''-p'' polecenie ''mkdir'' nie wyświetla błędu jeśli katalog już istnieje. </small> Do usunięcia pustego katalogu można użyć ''rmdir //dir//''. ~~Zadanie.#~~ Stwórz następujące drzewo katalogów: . ├── foo │ ├── baz │ │ └── bar │ └── bar └── foobaz └── bar ~~Zadanie.#~~ Usuń katalog ''foo/baz''. ==== Twarde i symboliczne dowiązania ==== Wiele wpisów w katalogach może wskazywać na ten sam plik. Nazywa się to [[https://en.wikipedia.org/wiki/Hard_link|twardym dowiązaniem]] (//hard link//). \\ Wpis w katalogu może również wskazywać na inny wpis w katalogu. Nazywa się to [[https://en.wikipedia.org/wiki/Symbolic_link|dowiązaniem symbolicznym]] (//soft link// / //symbolic link//, zwykle skracane do //symlink//). Wszystkie Linuksowe systemy [[https://en.wikipedia.org/wiki/Comparison_of_file_systems#File_capabilities|obsługują]] dowiązania twarde do zwykłych plików i symlinki do dowolnych ścieżek (np. pliku lub katalogu). Aby utworzyć twarde łącze, można użyć **''ln //źródło// //cel//''**. \\ Aby utworzyć symlink, można użyć **''ln -s //źródło// //cel//''**. ~~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> ~~Zadanie.#~~ Komenda ''ls'' może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. 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> ~~Zadanie.#~~ Utwórz w swoim katalogu domowym symlink o nazwie ''TMP'' wskazujący na ''/tmp''. Zmień katalog na ''TMP''. Co wypisuje ''pwd''? ~~Zadanie.#~~ Utwórz w swoim katalogu domowym symlink o nazwie ''loop'' wskazujący na twój katalog domowy. Wejdź do ''loop''. I wejdź jeszcze raz do ''loop''. ~~Zadanie.#~~ Utwórz symlink do nieistniejącej ścieżki. Wyświetl zawartość katalogu w którym jest ten symlink. <html><small></html> Polecenie ''readlink [-f] //cel//'' rozwiązuje wszystkie symlinki i wyświetla [[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]]. <html></small></html> ==== Kopiowanie i przenoszenie plików ==== Pliki można kopiować komendą **''cp''** i przenosić (bądź zmieniać nazwę) komendą **''mv''** (nazwy pochodzą odpowiednio od słów //copy// i //move//). Podstawowa składnia to ''cp/mv //źródło//… //cel//''. \\ Można podać wiele plików źródłowych jeżeli cel jest katalogiem. \\ Jeśli cel jest plikiem, to zostanie bez ostrzeżenia nadpisany <small>(o ile nie zostanie użyty przełącznik ''-i'' bądź ''-n'')</small>. <html><small></html> Domyślnie ''cp'' odmówi kopiowania katalogu. Przełącznik ''-r'' pozwoli skopiować rekurencyjnie katalog z zawartością. <html></small></html> ''cp'' kopiując plik tworzy nowy plik z aktualną datą, domyślnymi uprawnieniami itp. \\ Aby skopiować rekursywnie, zachować daty, uprawnienia i inne, można użyć przełącznika **''-a''** (''--archive''). <html><small></html> Z przełącznikiem ''-l'' program ''cp'' tworzy twarde dowiązania zamiast kopiować pliki. Można to połączyć z ''--recursive''. <html></small></html> ~~Zadanie.#~~ Skopuj jednym poleceniem pliki ''/etc/os-release'' i ''/etc/SUSE-brand'' do bieżącego katalogu. ~~Zadanie.#~~ Wykonaj ''mkdir someDir && for F in plik{1..3}; do echo $RANDOM$RANDOM > someDir/$F; done'' które stworzy katalog ''someDir'' z trzema plikami w środku. ~~Zadanie.#~~ Skopiuj rekurencyjnie ''someDir'' i zawartość. ~~Zadanie.#~~ Przenieś nowo utworzony katalog do środka katalogu ''someDir''. ~~Zadanie.#~~ Zmień nazwę katalogu ''someDir'' na inną. <html><small></html> ~~Zadanie.#~~ Skopiuj nowo nazwany katalog podając przełączniki ''-al''. Zmień wybrany plik w którymkolwiek z katalogów. Treść których plików uległa zmianie? \\ (Wyświetl je ''cat //nazwa_pliku//'' lub wyświetl daty modyfikacji z sekundami przez ''ls -l --time-style=+%H:%M:%S …'' lub ''tree -D --timefmt=%H:%M:%S …'') <html></small></html> ==== Kopiowanie plików do/z maszyny zdalnej ==== Za pomocą SSH można kopiować pliki. Jeśli ktoś ma dostęp do SSH na zdalnej maszynie, to może kopiować pliki komendą **''scp''**.\\ ''scp'' rozumie ''//nazwa//'' jako ścieżkę do lokalnego pliku i ''//użytkownik//@//host//://nazwa//'' jako ścieżkę do pliku na zdalnej maszynie. Zdalne względne ścieżki są rozwiązywane względem katalogu domowego.\\ ''scp'' przyjmuje przełącznik ''-r'' do rekursywnego kopiowania katalogów. <html><small></html> 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> Większość serwerów SSH wspiera też protokół SFTP, pozwalający na wygodniejsze kopiowanie plików.\\ **''sftp //użytkownik//@//host//''** uruchamia linię poleceń ''sftp''. Działają w niej ''ls'' i ''cd'' do nawigowania po zdalnych plikach oraz ''get'' i ''put'' do przenoszenia plików. ''help'' pokaże wszystkie wspierane komendy. ~~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 ''sftp''. <html><small></html> === 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. <html></small></html> ==== Usuwanie plików ==== Program usuwający pliki nazywa się **''rm''** (od //remove//). ''rm'' domyślnie nie usunie katalogów (niezależnie czy są puste) ani plików chronionych przed zapisem. Aby usunąć katalog poleceniem ''rm'' (wraz z całą zawartością) trzeba dodać przełącznik ''-r''. Aby usunąć plików zabezpieczony przed zapisem (i nie wyświetlać ostrzeżenia jeśli plik który nakazano usunąć nie istnieje) można użyć przełącznika ''-f'' (''--force''). Przypadkowo bądź nieprawidłowo użyte ''rm -rf …'' jest częstą przyczyną utraty danych. Szczególnie uważaj na wszystkie ''*'' i to do czego się rozwiną. ''rm'' przyjmuje przełączniki **''-I''** i ''-i'' które proszą o potwierdzenie usunięcia plików. ''-I'' pyta raz przed rozpoczęciem usuwania wielu plików, a ''-i'' pyta przed usunięciem każdego pliku z osobna. ~~Zadanie.#~~ Stwórz wiele plików komendą ''touch file_{a..z}''. \\ Usuń wszystkie te pliki jednym poleceniem ''rm'': * bez przełączników, * z przełącznikiem ''-f'', * z przełącznikiem ''-I'', * z przełącznikiem ''-i''. ~~Zadanie.#~~ Powtórz komendę usuwającą pliki z poprzedniego zadania po usunięciu plików. \\ Potem powtórz tą komendę raz jeszcze z przełącznikiem ''-f''. ~~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> 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> ~~META: language = pl ~~
so/files_basics.1678025540.txt.gz
· ostatnio zmienione: 2023/03/05 15:12 (edycja zewnętrzna)
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry