2.3 Lekcja 2
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
2 Poruszanie się po systemie Linux |
Cel nauki: |
2.3 Korzystanie z katalogów i plików list |
Lekcja: |
2 z 2 |
Wstęp
System operacyjny Unix został pierwotnie zaprojektowany dla komputerów typu mainframe w połowie lat sześćdziesiątych XX wieku. Komputery te były wówczas współdzielone przez wielu użytkowników, którzy uzyskiwali dostęp do zasobów systemu za pośrednictwem terminali. Dzisiejsze systemy Linux również stosują to podstawowe podejście. Nadal mówimy o używaniu “terminali” do wprowadzania poleceń w powłoce, a każdy system Linux jest zorganizowany w taki sposób, że w jednym systemie można łatwo utworzyć wielu użytkowników.
Katalogi domowe
Poniżej znajduje się przykład standardowego systemu plików w systemie Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
Większość z tych katalogów można znaleźć we wszystkich systemach Linux: od serwerów i superkomputerów po małe systemy wbudowane. Doświadczony użytkownik Linuxa może założyć, że znajdzie polecenie ls
w katalogu /bin
, zmieni konfigurację systemu poprzez modyfikację plików w /etc
i odczyta logi systemowe w katalogu /var
. Standardowe lokalizacje tych plików i katalogów są zdefiniowane przez Filesystem Hierarchy Standard (FHS), który zostanie omówiony w dalszej części. Dowiesz się wówczas więcej o zawartości tych katalogów podczas codziennego korzystania z Linuxa, ale na razie powinieneś pamiętać, że:
-
zmiany wprowadzone w głównym systemie plików mają wpływ na wszystkich użytkowników, oraz
-
zmiany plików w głównym systemie plików wymagają uprawnień administratora systemu.
Oznacza to, że zwykli użytkownicy nie mogą modyfikować tych plików, a także mogą mieć nawet zakaz czytania tych plików. Temat uprawnień zostanie omówiony w dalszej części.
Skoncentrujmy się teraz na katalogu /home
, który w tym momencie powinien być nieco znajomy:
$ tree -L 1 /home /home ├── user ├── michael └── lara
Nasz przykładowy system ma trzech zwykłych użytkowników, a każdy z naszych użytkowników ma swój własny obszar, w którym może tworzyć i modyfikować pliki i katalogi bez wpływu na sąsiadów. Na przykład w poprzedniej lekcji pracowaliśmy z następującą strukturą plików:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
W rzeczywistości rzeczywisty system plików wygląda bardziej tak:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
-
to samo dotyczy użytkownika
lara
.
W systemie Linux katalog /home
przypomina budynek mieszkalny. Wielu użytkowników ma tutaj swoją przestrzeń, podzieloną na dedykowane mieszkania. Za zarządzanie, konserwację i utrzymanie samego budynku odpowiedzialny jest administrator nieruchomości zwany root.
Specjalna ścieżka względna do katalogu domowego
Po uruchomieniu nowej sesji terminala w systemie Linux zobaczysz wiersz polecenia podobny do tego:
user@hostname ~ $
Tylda (~
) reprezentuje tutaj nasz katalog domowy. Po uruchomieniu polecenia ls
zobaczysz znane dane wyjściowe:
$ cd ~ $ ls Documents
Dla lepszego zrozumienia porównaj to z powyższym systemem plików.
Zastanówmy się teraz, co wiemy o systemie Linux: jest podobny do budynku mieszkalnego, w którym wielu użytkowników mieszka w katalogu /home
. Więc dom użytkownika user
będzie inny niż dom użytkownika michaela
. Aby to zademonstrować, użyjemy polecenia su
(switch user, przełącz użytkownika), które przełącza użytkowników w systemie Linux.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
Znaczenie tyldy ~
zmienia się w zależności od użytkownika. Dla użytkownika michael
ścieżka bezwzględna ~
to /home/michael
. Dla użytkownika lara
ścieżka bezwzględna ~
to /home/lara
i tak dalej.
Względne ścieżki plików do katalogu home
Używanie tyldy ~
w poleceniach jest bardzo wygodne, pod warunkiem, że nie przełączasz użytkowników. Rozważmy następujący przykład dla użytkownika, który rozpoczął nową sesję:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Należy pamiętać, że użytkownicy zawsze rozpoczynają nową sesję w swoim katalogu domowym. W tym przykładzie użytkownik user
przeszedł do podkatalogu Documents/Reports
, a następnie wrócił do punktu wyjścia poleceniem cd ~
. Użytkownik ten osiągnąłby to samo używając polecenia cd
bez argumentów:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
Ostatnia uwaga: możemy określić katalogi domowe innych użytkowników, podając nazwę użytkownika po tyldzie, np.
$ ls ~michael Documents Music
Zauważ, że zadziała to tylko wtedy, gdy uzytkownik michael
udzielił nam pozwolenia na przeglądanie zawartości swojego katalogu domowego.
Rozważmy sytuację, w której michael
chciałby przejrzeć plik report2018.txt
w katalogu domowym użytkownika user
. Zakładając, że michael
ma na to pozwolenie, może on użyć polecenia less
.
$ less ~user/Documents/Reports/report2018.txt
Każda ścieżka pliku zawierająca znak ~
jest nazywana ścieżką względną do katalogu domowego.
Ukryte pliki i katalogi
W poprzedniej lekcji wprowadziliśmy opcję -a
dla polecenia ls
. Użyliśmy ls -a
, aby wprowadzić dwie specjalne ścieżki względne: .
oraz ..
. Opcja -a
wyświetli listę wszystkich plików i katalogów, w tym także ukrytych plików i katalogów.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
Ukryte pliki i katalogi zawsze zaczynają się od kropki (.
). Domyślnie katalog domowy użytkownika będzie zawierał wiele ukrytych plików. Są one często używane do zmiany ustawień konfiguracyjnych, specyficznych dla danego użytkownika i powinny być modyfikowane tylko przez doświadczonego użytkownika.
Opcja długiej listy
Polecenie ls
ma wiele opcji, które umożliwiają zmianę jego zachowania. Spójrzmy na jedną z najczęściej używanych opcji:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
-l
tworzy długą listę (long list). Pliki i katalogi będą zajmować jeden wiersz w danych wyjściowych, ale zostaną także wyświetlone dodatkowe informacje o każdym pliku i katalogu.
-rw-r—r--
-
Typ pliku i uprawnienia do pliku. Zauważ, że zwykły plik zaczyna się od myślnika
-
, a katalog zaczyna się odd
. 1
-
Liczba linków do pliku.
user staff
-
Określa prawo własności do pliku. w tym przypadku użytkownik
user
jest właścicielem pliku. Plik jest również przypisywany do grupystaff
(pracowników
). 3606
-
Rozmiar pliku w bajtach.
Jan 13 2017
-
Znacznik czasu ostatniej zmiany w pliku.
report2018.txt
-
Nazwa pliku.
Tematy takie jak własność plików i katalogów, uprawnienia i linki zostaną omówione w dalszych lekcjach. Jak widać, często preferowana jest długa lista ls
zamiast domyślnej.
Dodatkowe opcje polecenia ls
Poniżej znajdują się niektóre z najczęstszych sposobów korzystania z polecenia ls
. Jak widać, można połączyć kilka opcji w celu uzyskania pożądanego wyniku.
ls -lh
-
Połączenie długiej listy z czytelnymi dla człowieka rozmiarami plików dają nam przydatne przedrostki (sufiksy), takie jak
M
dla megabajtów lubK
dla kilobajtów. ls -d */
-
Opcja
-d
wyświetla katalogi, ale nie wyświetla ich zawartości. W połączeniu z*/
pokazuje tylko podkatalogi bez żadnych plików. ls -lt
-
Łączy długą listę z opcją sortowania według czasu ostatniej modyfikacji. Pliki z najnowszymi zmianami znajdują się na górze, a pliki z najstarszymi zmianami znajdują się na dole. jednakże tę kolejność można także odwrócić.
ls -lrt
-
Łączy długą listę z sortowaniem według czasu modyfikacji w połączeniu z opcją
-r
, która odwraca sortowanie. Teraz pliki z najnowszymi zmianami znajdują się na dole listy. Oprócz sortowania według czasu ostatniej modyfikacji pliki można również sortować według czasu ostatniego dostępu lub czasu ostatniej zmiany statusu. ls -lX
-
Łączy długą listę z opcją sortowania według rozszerzeń plików (file eXtension). Spowoduje to pogrupowanie wszystkich plików kończących się na przykład na
.txt
,.jpg
i tak dalej. ls -S
-
Opcja
-S
sortuje pliki według rozmiaru pliku, podobnie jak-t
sortuje według czasu modyfikacji pliku, a-X
sortuje według rozszerzenia pliku. Dla opcji-S
największe pliki pojawią się jako pierwsze, a najmniejsze jako ostatnie. Zauważ, że zawartość podkatalogów nie jest uwzględniana w sortowaniu. ls -R
-
Opcja
-R
zmodyfikuje poleceniels
, aby wyświetlić listę rekurencyjną (recursive list). Co to jednak oznacza?
Rekurencja w Bashu
Rekurencja opisuje sytuację, w której “coś jest zdefiniowane samo w sobie”. Rekurencja jest bardzo ważnym pojęciem w informatyce, ale tutaj jej znaczenie jest znacznie prostsze. Spójrzmy na nasz wcześniejszy przykład:
$ ls ~ Documents
Wiemy już, że użytkownik user
ma swój katalog domowy i że jest w nim jeden podkatalog. Do tej pory ls
pokazywał nam tylko pliki i podkatalogi lokalizacji, ale nie mógł pokazać nam zawartości tych podkatalogów. W poprzednich lekcjach używaliśmy polecenia tree
, aby wyświetlić zawartość wielu katalogów. Niestety, polecenie tree
nie jest jednym ze standardowych narzędzi systemu Linux i dlatego nie zawsze jest dostępne. Porównaj wynik działania polecenia tree
z wynikiem polecenia ls -R
w poniższych przykładach:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Jak widać, przy uzyciu opcji rekurencyjnej otrzymujemy znacznie dłuższą listę plików. W rzeczywistości wygląda to tak, jakbyśmy uruchomili polecenie ls
w katalogu domowym użytkownika user
i napotkali jeden podkatalog. Następnie przechodzimy do tego podkatalogu i ponownie wykonujemy polecenie ls
. Widzimy teraz plik Mission-Statement
i inny podkatalog o nazwie Reports
. I znowu wchodzimy do podkatalogu, tym razem o nazwie Reports
i ponownie uruchamiamy polecenie ls
. Zasadniczo wykonanie polecenia ls -R
jest jak powiedzenie Bashowi: “Uruchom polecenie ls
tutaj i powtórz polecenie ls
w każdym znalezionym podkatalogu”.
Rekurencja jest szczególnie ważna podczas modyfikacji plików, a także kopiowania lub usuwania katalogów. Na przykład, jeśli chcesz skopiować podkatalog Documents
, musisz wykonać kopię rekurencyjną, aby rozszerzyć polecenie na wszystkie podkatalogi.
Ćwiczenia z przewodnikiem
-
Użyj następującej struktury plików, aby odpowiedzieć na następujące trzy pytania:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Jakie polecenie spowoduje przejście do katalogu
network
niezależnie od Twojej bieżącej lokalizacji? -
Jakie polecenie może wprowadzić użytkownik
user
, aby przejść do swojego kataloguDocuments
z lokalizacji/etc/udev
? Wprowadź najkrótszą możliwą ścieżkę. -
Jakie polecenie może wprowadzić użytkownik
user
, aby przejść do kataloguMusic
użytkownika „michael
? Skorzystaj z możliwie najkrótszej ścieżki.
-
-
Rozważmy następujący wynik polecenia
ls -lh
, aby odpowiedzieć na dwa poniższe pytania. Zwróć uwagę, że katalogi są oznaczone literąd
na początku linii.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Jaki jest początek pliku po uruchomieniu polecenia
ls -lrS
? -
Proszę opisać, co spodziewasz się zobaczyć jako wynik polecenia
ls -ad */
.
-
Ćwiczenia eksploracyjne
-
Uruchom komendę
ls -lh
w katalogu zawierającym podkatalogi. Zwróć uwagę na wyświetlany rozmiar tych katalogów. Czy te rozmiary plików wydają Ci się prawidłowe? Czy dokładnie przedstawiają zawartość wszystkich plików w tym katalogu? -
Oto nowe polecenie do wypróbowania:
du -h
. Uruchom to polecenie i opisz otrzymane dane wyjściowe. -
W wielu systemach Linux możesz wpisać
ll
i otrzymać to samo wyjście, co w przypadku wpisania polecenials -l
. Należy jednak pamiętać, że poleceniell
nie jest poleceniem. Na przykład zauważysz,man ll
wyświetli komunikat, że nie ma odpowiedniej strony podręcznika. To jest przykład aliasu. Dlaczego aliasy mogą być przydatne dla użytkownika?
Podsumowanie
W tej lekcji nauczyłeś się:
-
że każdy użytkownik Linuxa ma katalog domowy,
-
do katalogu domowego bieżącego użytkownika można się dostać przez
~
, -
każda ścieżka do pliku, która używa znaku
~
, nazywana jest ścieżką względną do katalogu domowego.
Dowiedziałeś się również o niektórych z najpopularniejszych opcji, które modyfikują działanie polecenia ls
:
-a
(all)-
Wyświetla wszystkie pliki / katalogi, w tym ukryte.
-d
(directories)-
Wyświetla listę wszystkich katalogów, ale nie ich zawartość.
-h
(human readable)-
Wyświetla rozmiary plików w formacie czytelnym dla człowieka.
-l
(long list)-
Zawiera dodatkowe szczegóły z jednym plikiem / katalogiem w każdym wierszu.
-r
(reverse)-
Odwraca kolejność sortowania.
-R
(recursive)-
Wyświetla każdy plik, w tym pliki we wszystkich podkatalogach.
-S
(size)-
Sortuje według rozmiaru pliku
-t
(time)-
Sortuje według czasu ostatniej modyfikacji
-X
(eXtension)-
Sortuje według rozszerzenia pliku.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Użyj następującej struktury plików, aby odpowiedzieć na następujące trzy pytania:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Jakie polecenie spowoduje przejście do katalogu
network
niezależnie od Twojej bieżącej lokalizacji?cd /etc/network
-
Jakie polecenie może wprowadzić użytkownik
user
, aby przejść do swojego kataloguDocuments
z lokalizacji/etc/udev
? Wprowadź najkrótszą możliwą ścieżkę.cd ~/Documents
-
Jakie polecenie może wprowadzić użytkownik
user
, aby przejść do kataloguMusic
użytkownika „michael
? Skorzystaj z możliwie najkrótszej ścieżki.cd ~michael/Music
-
-
Rozważmy następujący wynik polecenia
ls -lh
, aby odpowiedzieć na dwa poniższe pytania. Zwróć uwagę, że katalogi są oznaczone literąd
na początku linii.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Jaki jest początek pliku po uruchomieniu polecenia
ls -lrS
?Wszystkie trzy katalogi mają rozmiar 4.0 KB, czyli najmniejszy możliwy rozmiar pliku. Polecenie
ls
domyślnie posortuje katalogi alfabetycznie. Prawidłowa odpowiedź to plikscary.jpg
. -
Proszę opisać, co spodziewasz się zobaczyć jako wynik polecenia
ls -ad */
.To polecenie pokaże wszystkie podkatalogi, w tym podkatalogi ukryte.
-
Odpowiedzi do ćwiczeń eksploracyjnych
-
Uruchom komendę
ls -lh
w katalogu zawierającym podkatalogi. Zwróć uwagę na wyświetlany rozmiar tych katalogów. Czy te rozmiary plików wydają Ci się prawidłowe? Czy dokładnie przedstawiają zawartość wszystkich plików w tym katalogu?Nie, one nie są prawisłowe. Każdy katalog ma wyświetlany rozmiar 4096 bajtów, ponieważ katalogi są tutaj abstrakcją, to znaczy, że nie istnieją jako struktura drzewa na dysku twardym. Jeśli widzisz wymieniony katalog, to widzisz jedynie link do listy plików. Rozmiar takich łączy to 4096 bajtów.
-
Oto nowe polecenie do wypróbowania:
du -h
. Uruchom to polecenie i opisz otrzymane dane wyjściowe.Polecenie
du
tworzy listę wszystkich plików i katalogów oraz określa rozmiar każdego z nich. Na przykład poleceniedu -s
wyświetla rozmiar wszystkich plików, katalogów i podkatalogów dla określonej lokalizacji. -
W wielu systemach Linux możesz wpisać
ll
i otrzymać to samo wyjście, co w przypadku wpisania polecenials -l
. Należy jednak pamiętać, że poleceniell
nie jest poleceniem. Na przykład zauważysz,man ll
wyświetli komunikat, że nie ma odpowiedniej strony podręcznika. To jest przykład aliasu. Dlaczego aliasy mogą być przydatne dla użytkownika?Polecenie
ll
jest aliasem polecenials -l
. W Bashu aliasy są używane do uproszczenia często używanych poleceń. Poleceniell
jest często definiowane dla Ciebie w systemie Linux, ale możesz też stworzyć swoje własne aliasy.