5.4 Lekcja 1
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
5 Bezpieczeństwo i uprawnienia do plików |
Cel nauki: |
5.4 Katalogi i pliki specjalne |
Lekcja: |
1 z 1 |
Wstęp
W systemie Linux wszystko jest traktowane jak plik. Jednak niektóre pliki są traktowane w specjalny sposób, albo ze względu na miejsce, w którym są przechowywane (na przykład pliki tymczasowe), albo ze względu na sposób, w jaki wchodzą w interakcję z systemem plików (na przykład łącza). W tej lekcji dowiemy się, gdzie znajdują się takie pliki, jak działają i jak nimi zarządzać.
Pliki tymczasowe
Pliki tymczasowe to pliki używane przez programy do przechowywania danych, które są potrzebne tylko przez krótki czas. Mogą to być dane uruchomionych procesów, dzienniki awarii, pliki zapasowe pochodzące z automatycznego zapisywania, pliki pośredniczące używane podczas konwersji plików, pliki pamięci podręcznej i tak dalej.
Lokalizacja plików tymczasowych
Wersja 3.0 standardu FHS (Filesystem Hierarchy Standard, Standard Hierarchii Systemu Plików) definiuje standardowe lokalizacje przechowywania plików tymczasowych w systemach Linux. Każda lokalizacja ma inny cel i inne zachowanie. Zaleca się, aby programiści przestrzegali konwencji ustalonych przez FHS podczas zapisywania danych tymczasowych na dysku.
/tmp
-
Według FHS programy nie powinny zakładać, że zapisane tutaj pliki zostaną zachowane między wywołaniami programu. Zaleceniem jest wyczyszczenie tego katalogu (usunięcie wszystkich plików z tego katalogu) podczas uruchamiania systemu, chociaż jest to zalecenie nieobowiązkowe.
/var/tmp
-
Inna lokalizacja przechowywania plików tymczasowych, których nie należy usuwać podczas uruchamiania systemu. Pliki przechowywane w tym miejscu są zwykle zachowywane pomiędzy kolejnymi uruchomieniami systemu Linux.
/run
-
Ten katalog zawiera dane ze zmiennych środowiska wykonawczego, które są używane przez uruchomione procesy, takie jak pliki identyfikacyjne procesu (
.pid
). Programy, które potrzebują więcej niż jednego pliku wykonawczego, mogą tutaj tworzyć podkatalogi. Ta lokalizacja musi zostać wyczyszczona podczas uruchamiania systemu. Przeznaczeniem tego katalogu był kiedyś katalog/var/run
, a w niektórych systemach katalog/var/run
może być dowiązaniem symbolicznym do katalogu/run
.
Należy pamiętać, że nic nie stoi na przeszkodzie, aby program utworzył pliki tymczasowe w innym miejscu w systemie, ale dobrą praktyką jest przestrzeganie konwencji ustalonych przez FHS.
Uprawnienia do plików tymczasowych
Posiadanie ogólnosystemowych katalogów tymczasowych w systemie z wieloma użytkownikami stwarza pewne wyzwania dotyczące uprawnień dostępu. Na początku można by pomyśleć, że takie katalogi są “do zapisu przez cały świat”, tj. każdy użytkownik może zapisywać lub usuwać w nim dane. Jednakże tak nie jest. Pojawia się zatem pytanie: jak moglibyśmy jednemu użytkownikowi uniemożliwić usuwanie lub modyfikowanie plików utworzonych przez innego użytkownika?
Rozwiązaniem jest zastosowanie specjalnego uprawnienia, nazwanego sticky bit, które dotyczy zarówno katalogów, jak i plików. Jednak ze względów bezpieczeństwa jądro Linuxa ignoruje sticky bit dla plików. Gdy ten specjalny bit jest ustawiony dla katalogu, wówczas uniemożliwia użytkownikom usunięcie lub zmianę nazwy pliku w tym katalogu, chyba, że są właścicielami tego pliku.
Katalogi z ustawionym sticky bit pokazują znak t
zamiast znaku x
w kolumnie uprawnienia dla innych po wyświetleniu danych za pomocą polecenia ls -l
. Na przykład sprawdźmy uprawnienia do katalogów /tmp
oraz /var/tmp
:
$ ls -ldh /tmp/ /var/tmp/ drwxrwxrwt 25 root root 4,0K Jun 7 18:52 /tmp/ drwxrwxrwt 16 root root 4,0K Jun 7 09:15 /var/tmp/
Jak widać znak t
zastępuje znak x
w uprawnieniach dla innych, a oba katalogi mają ustawiony sticky bit
Aby ustawić sticky bit dla katalogu za pomocą polecenia chmod
w trybie numerycznym, użyj czterocyfrowej notacji i zapisz 1
jako pierwszą cyfrę. Na przykład:
$ chmod 1755 temp
ustawia sticky bit dla katalogu o nazwie temp
i uprawnienia jako rwxr-xr-t
.
W trybie symbolicznym użyj parametru t
. Zatem +t
ustawia sticky bit, natomiast -t
usuwa go:
$ chmod +t temp
Zrozumienie linków
Powiedzieliśmy wcześniej, że w systemie Linux wszystko jest traktowane jako plik. Jednakże istnieje specjalny typ pliku zwany linkiem. W systemie Linux istnieją dwa typy linków:
- Linki symboliczne (Symbolic links)
-
Są one nazywane również miękkimi linkami i wskazują ścieżkę do innego pliku. Jeśli usuniesz plik, na który wskazuje łącze (zwany celem lub targetem), wówczas link będzie nadal istniał, ale “przestanie działać”, ponieważ już nie będzie na nic wskazywać.
- Linki twarde (Hard links)
-
Potraktuj twarde linki jako drugą nazwę oryginalnego pliku. Nie jest to duplikat, ale dodatkowy wpis w systemie plików, który wskazuje na tą samą lokalizację na dysku (i-węzeł).
Tip
|
I-węzeł (Inode) to struktura danych przechowująca atrybuty obiektu (takiego jak plik lub katalog) w systemie plików. Te atrybuty to m.in. nazwa pliku, uprawnienia, właściciel oraz bloki dysku, na których są przechowywane dane obiektu. Potraktuj to jako wpis w indeksie, stąd nazwa “węzeł indeksu” (“index node”). |
Praca z twardymi linkami
Tworzenie twardych linków
Polecenie, które tworzy twarde linki w systemie Linux, to ln
. Ma ono następującą składnię:
$ ln TARGET LINK_NAME
Cel
(TARGET
) musi już istnieć (jest to plik, na który będzie wskazywać odsyłacz). Jeżeli celu nie ma w bieżącym katalogu lub jeśli chcesz utworzyć łącze w innym miejscu, to musisz podać pełną ścieżkę do niego. Na przykład polecenie
$ ln target.txt /home/carol/Documents/hardlink
utworzy plik o nazwie hardlink
w katalogu /home/carol/Documents/
, który jest powiązany z plikiem target.txt
w bieżącym katalogu.
Jeśli pominiesz ostatni parametr (NAZWA_LINKU
, LINK_NAME
), wówczas w bieżącym katalogu zostanie utworzone łącze o takiej samej nazwie jak cel.
Zarządzanie twardymi linkami
Twarde łącza to wpisy w systemie plików, które mają różne nazwy, ale wskazują na te same dane na dysku twardym. Wszystkie te nazwy są równoważne i mogą być używane w odniesieniu do pliku. Jeśli zmienisz zawartość jednej z nazw, wówczas zawartość wszystkich innych nazw wskazujących na ten plik ulegnie zmianie, ponieważ wszystkie te nazwy wskazują na te same dane. Jeśli usuniesz jedną z nazw, to pozostałe będą nadal działać.
Dzieje się tak, ponieważ “usunięcie” pliku w rzeczywistości nie powoduje usunięcia jego danych z dysku. System usuwa tylko wpis w tabeli systemu plików wskazujący na i-węzeł odpowiadający tym danym na dysku. Ale jeśli masz drugi wpis wskazujący na ten sam i-węzeł, nadal możesz uzyskać dostęp do tych danych. Potraktuj to jako dwie drogi zbiegające się w tym samym punkcie. Nawet jeśli zablokujesz lub zmienisz jedną z dróg, nadal możesz dotrzeć do celu, korzystając z drugiej.
Możesz to sprawdzić dodając parametr -i
do polecenia ls
. Rozważ następującą zawartość katalogu:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Liczba przed uprawnieniami jest numerem i-węzła. Zauważ, że zarówno plik hardlink
oraz plik target.txt
mają ten sam numer (3806696
). Dzieje się tak, ponieważ jeden jest twardym linkiem do drugiego.
Ale który z nich jest plikiem oryginalnym, a który jest linkiem? Nie można tego stwierdzić, ponieważ pod każdym względem są one takie same.
Zauważ, że każdy twardy link wskazujący na plik zwiększa liczbę linków do pliku. Jest to liczba znajdująca się bezpośrednio po uprawnieniach na wyjściu polecenia ls -l
. Domyślnie każdy plik ma liczbę dowiązań równą 1
(katalogi mają liczbę 2
), a każdy dodatkowy twardy link do tego pliku zwiększa tę liczbę o jeden. To jest powód, dla którego liczba linków w plikach na powyższej liście wynosi 2
.
W przeciwieństwie do linków symbolicznych, twarde linki można tworzyć tylko do plików, w przypadku których zarówno link, jak i cel muszą znajdować się w tym samym systemie plików.
Przenoszenie i usuwanie twardych linków
Ponieważ twarde linki są traktowane jak zwykłe pliki, można je usunąć za pomocą polecenia rm
i zmienić ich nazwę lub przenosić w systemie plików za pomocą polecenia mv
. Ponieważ twarde łącze wskazuje na ten sam i-węzeł, można je dowolnie przenosić bez obawy o “zerwanie” połączenia między nimi.
Linki symboliczne (Symbolic links)
Tworzenie linków symbolicznych
Polecenie tworzenia linków symbolicznych to ln
, ale wywoływane z parametrem -s
:
$ ln -s target.txt /home/carol/Documents/softlink
Polecenie tworzy plik o nazwie softlink
w katalogu /home/carol/Documents/
, który wskazuje na plik target.txt
w bieżącym katalogu.
Podobnie jak w przypadku linków twardych, można pominąć nazwę łącza, aby utworzyć linka o tej samej nazwie, co cel w bieżącym katalogu.
Zarządzanie linkami symbolicznymi
Linki symboliczne wskazują inną ścieżkę w systemie plików. Możesz tworzyć miękkie łącza do plików oraz katalogów, nawet na różnych partycjach. Dosyć łatwo jest zauważyć symboliczne linki po wydaniu polecenia ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
W powyższym przykładzie pierwszym znakiem w uprawnieniach do pliku softlink
jest l
, co wskazuje na link symboliczny. Ponadto zaraz po nazwie pliku widzimy nazwę celu, na który wskazuje odsyłacz ze strzałką, czyli plik target.txt
.
Zwróć uwagę, że na listach plików i katalogów, same linki miękkie zawsze pokazują uprawnienia rwx
dla użytkownika, grupy i innych, ale w rzeczywistości prawa dostępu dla nich są takie same jak dla pliku docelowego.
Przenoszenie i usuwanie linków symbolicznych
Podobnie jak linki twarde, linki symboliczne można usuwać za pomocą polecenia rm
oraz przenosić lub zmieniać ich nazwy za pomocą poelcenia mv
. Należy jednak zachować szczególną ostrożność podczas ich tworzenia, aby uniknąć “zerwania” połączenia w przypadku przeniesienia go z pierwotnej lokalizacji.
Podczas tworzenia linków symbolicznych należy mieć świadomość, że jeśli ścieżka do wskazywanego pliku nie jest w pełni określona, to lokalizacja miejsca docelowego zostanie zinterpretowana jako względna w stosunku do lokalizacji linku. Może to powodować problemy, jeśli link lub plik, na który ten link wskazuje, zostaną przeniesione.
Łatwiej to zrozumieć na przykładzie. Załóżmy, że mamy plik o nazwie original.txt
w bieżącym katalogu i chcemy utworzyć do niego link symboliczny o nazwie softlink
. Moglibyśmy użyć polecenia:
$ ln -s original.txt softlink
Wszystko wydaje się w porządku, jak pokazuje również polecenie ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Zobacz, jak jest zbudowany link: plik softlink
wskazuje na (→
) plik original.txt
. Zobaczmy jednak, co się stanie, jeśli przeniesiemy ten link do katalogu nadrzędnego i spróbujemy wyświetlić jego zawartość za pomocą polecenia less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Ponieważ ścieżka do pliku original.txt
nie została określona, system zakłada, że plik znajduje się w tym samym katalogu, co link. Jeśli tak nie jest, wówczas ten link przestanie działać.
Aby tego uniknąć, podczas tworzenia linku, należy zawsze określać pełną ścieżkę do miejsca docelowego:
$ ln -s /home/carol/Documents/original.txt softlink
W ten sposób, niezależnie od tego, gdzie przesuniesz link, będzie on nadal działać, ponieważ wskazuje bezwzględną lokalizację celu. Sprawdź to za pomocą polecenia ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Ćwiczenia z przewodnikiem
-
Załóżmy, że program musi utworzyć tymczasowy plik jednorazowego użytku, który już nigdy nie będzie używany ponownie po zamknięciu programu. W którym katalogu powinien zostać utworzony ten plik?
-
Który katalog tymczasowy musi zostać wyczyszczony podczas procesu rozruchu systemu?
-
Jaki jest parametr
chmod
w trybie symbolicznym, służący do ustawienia sticky bit dla katalogu? -
Wyobraź sobie, że w katalogu
/home/carol/Documents
znajduje się plik o nazwiedocument.txt
. Jakie polecenie służy do utworzenia linku symbolicznego o nazwietext.txt
w bieżącym katalogu? -
Wyjaśnij różnicę między twardym linkiem do pliku a kopią tego pliku.
Ćwiczenia eksploracyjne
-
Wyobraź sobie, że w katalogu tworzysz plik o nazwie
recipes.txt
. Wewnątrz tego katalogu tworzysz twardy link do tego pliku o nazwiereceitas.txt
oraz symboliczny (miękki) link do tego pliku o nazwierezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Zawartość katalogu powinna wyglądać następująco:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 24 10:12 rezepte.txt -> receitas.txt
Pamiętaj, że jako twardy link,plik
receitas.txt
wskazuje na ten sam i-węzeł corecipes.txt
. Co się stanie z miękkim linkiemrezepte.txt
, jeśli nazwareceitas.txt
zostanie usunięta? Dlaczego? -
Wyobraź sobie, podłączyłeś flash drive (pendrive) do swojego systemu i zamontowałeś go w katalogu
/media/youruser/FlashA
. Chcesz teraz utworzyć w swoim katalogu domowym link o nazwieschematics.pdf
wskazujące na plikesquema.pdf
w głównym katalogu dysku flash. Więc wpisujesz następujące polecenie:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Co by się stało? Dlaczego?
-
Rozważmy następujący wynik polecenia
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Ile linków prowadzi do pliku
document.txt
? -
Czy to są miękkie czy twarde linki?
-
Jaki parametr należy przekazać do polecenia
ls
, aby zobaczyć, który i-węzeł zajmuje każdy plik?
-
-
Wyobraź sobie, że w katalogu
~/Documents
znajduje się plik o nazwieclients.txt
, który zawiera nazwy klientów oraz katalog o nazwiesomedir
. Wewnątrz znajduje się inny plik, również nazwanyclients.txt
, który ma różne nazwy. Aby odtworzyć tę strukturę, użyj następujących poleceń:$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Następnie wewnątrz katalogu
somedir
utwórz link o nazwiepartners.txt
, wskazujący na ten plik, używając poleceń:$ cd somedir/ $ ln -s clients.txt partners.txt
Tak więc struktura katalogów jest następująca:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Teraz przenosisz plik
partners.txt
z katalogusomedir
do katalogu~/Documents
i wyświetlasz jego zawartość.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Czy link nadal działa? Jeśli tak, jaka zawartość pliku jest wyświetlana? Dlaczego?
-
Rozważ następujące pliki:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Jakie są prawa dostępu do pliku
partners.txt
? Dlaczego?
Podsumowanie
W tej lekcji nauczyłeś się:
-
Gdzie są przechowywane pliki tymczasowe.
-
Jakie specjalne uprawnienia mają do nich zastosowanie.
-
Jakie są linki.
-
Różnica między linkami symbolicznymi i twardymi.
-
Jak tworzyć linki.
-
Jak przenosić, zmieniać nazwę lub usunąć linki.
W tej lekcji omówiono następujące polecenia:
-
ln
-
Parametr
-i
dla polecenials
Odpowiedzi do ćwiczeń z przewodnikiem
-
Załóżmy, że program musi utworzyć tymczasowy plik jednorazowego użytku, który już nigdy nie będzie używany ponownie po zamknięciu programu. W którym katalogu powinien zostać utworzony ten plik?
Ponieważ plik nie ma znaczenia po zakończeniu programu, katalog
/tmp
jest prawidłowym katalogiem dla tego pliku. -
Który katalog tymczasowy musi zostać wyczyszczony podczas procesu rozruchu systemu?
Katalog to
/run
lub w niektórych systemach to katalog/var/run
. -
Jaki jest parametr
chmod
w trybie symbolicznym, służący do ustawienia sticky bit dla katalogu?Symbolem sticky bit w trybie symbolicznym jest znak
t
. Ponieważ chcemy dodać to uprawnienie do katalogu, parametr powinien mieć wartość+t
. -
Wyobraź sobie, że w katalogu
/home/carol/Documents
znajduje się plik o nazwiedocument.txt
. Jakie polecenie służy do utworzenia linku symbolicznego o nazwietext.txt
w bieżącym katalogu?Polecenie
ln -s
służy do utworzenia linku symbolicznego. Ponieważ powinniśmy podać pełną ścieżkę do pliku, do którego tworzymy link, polecenie brzmi:$ ln -s /home/carol/Documents/document.txt text.txt
-
Wyjaśnij różnicę między twardym linkiem do pliku a kopią tego pliku.
Twardy link to po prostu inna nazwa pliku, mimo że wygląda na duplikat oryginalnego pliku. Pod każdym względem zarówno link, jak i oryginał są takie same, ponieważ wskazują na te same dane na dysku twardym. Zmiany wprowadzone w treści linku są przenoszone do oryginału i odwrotnie. Z kolei kopia to całkowicie niezależny plik, zajmujący inne miejsce na dysku twardym. Zmiany w kopii nie zostaną odzwierciedlone w oryginale i odwrotnie.
Odpowiedzi do ćwiczeń eksploracyjnych
-
Wyobraź sobie, że w katalogu tworzysz plik o nazwie
recipes.txt
. Wewnątrz tego katalogu tworzysz twardy link do tego pliku o nazwiereceitas.txt
oraz symboliczny (miękki) link do tego pliku o nazwierezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Zawartość katalogu powinna wyglądać następująco:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 24 10:12 rezepte.txt -> recipes.txt
Pamiętaj, że jako twardy link, plik
receitas.txt
wskazuje na ten sam i-węzeł corecipes.txt
. Co się stanie z miękkim linkiemrezepte.txt
, jeśli nazwareceitas.txt
zostałaby usunięta? Dlaczego?Miękki link do pliku
rezepte.txt
przestał działać. Dzieje się tak, ponieważ miękkie linki wskazują na nazwy, a nie i-węzły, a nazwareceitas.txt
już nie istnieje, nawet jeśli dane są nadal dostępne na dysku twardym pod nazwąrecipes.txt
. -
Wyobraź sobie, podłączyłeś flash drive (pendrive) do swojego systemu i zamontowałeś go w katalogu
/media/youruser/FlashA
. Chcesz teraz utworzyć w swoim katalogu domowym link o nazwieschematics.pdf
wskazujące na plikesquema.pdf
w głównym katalogu dysku flash. Więc wpisujesz następujące polecenie:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Co by się stało? Dlaczego?
Wykonanie polecenia się nie powiedzie. Komunikat o błędzie brzmiałby
Invalid cross-device link
(Nieprawidłowe połaczenie między urządzeniami
) i wyjaśnia przyczynę: twarde linki nie mogą wskazywać celu na innej partycji lub innym urządzeniu. Jedynym sposobem utworzenia takiego linku jest użycie linku symbolicznego lub miękkiego. Można to zrobić za pomocą polecenialn
z parametrem-s
. -
Rozważmy następujący wynik polecenia
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Ile linków prowadzi do pliku
document.txt
?Każdy plik zaczyna się numerem linku równym
1
. Ponieważ liczba linków do pliku wynosi4
, zatem istnieją trzy linki wskazujące na ten plik. -
Czy to są miękkie czy twarde linki?
To są linki twarde, ponieważ linki miękkie nie zwiększają liczby linków do pliku.
-
Jaki parametr należy przekazać do polecenia
ls
, aby zobaczyć, który i-węzeł zajmuje każdy plik?Do polecenia
ls
należy przekazać parametr-i
. Wówczas I-węzeł jest wyświetlany jako pierwsza kolumna po wykonaniu polecenials
, jak to widać poniżej.$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 rigues rigues 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 rigues rigues 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 rigues rigues 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 rigues rigues 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 text.txt
-
-
Wyobraź sobie, że w katalogu
~/Documents
znajduje się plik o nazwieclients.txt
, który zawiera nazwy klientów oraz katalog o nazwiesomedir
. Wewnątrz znajduje się inny plik, również nazwanyclients.txt
, który ma różne nazwy. Aby odtworzyć tę strukturę, użyj następujących poleceń:$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Następnie wewnątrz katalogu
somedir
utwórz link o nazwiepartners.txt
, wskazujący na ten plik, używając poleceń:$ cd somedir/ $ ln -s clients.txt partners.txt
Tak więc struktura katalogów jest następująca:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Teraz przenosisz plik
partners.txt
z katalogusomedir
do katalogu~/Documents
i wyświetlasz jego zawartość.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Czy link nadal działa? Jeśli tak, jaka zawartość pliku jest wyświetlana? Dlaczego?
Jest to zaskakujące, ale link będzie działać, a wymieniony plik będzie tym, który znajduje się w katalogu
~/Documents
i będzie zawierał imionaJohn
,Michael
,Bob
.Ponieważ nie określiliśmy pełnej ścieżki do docelowego
clients.txt
, dlatego podczas tworzenia miękkiego linkupartners.txt
, lokalizacja docelowa zostanie zinterpretowana jako ścieżka względna od lokalizacji linku, która w tym przypadku jest katalogiem bieżącym.Kiedy link został przeniesiony z katalogu
~/Documents/somedir
do katalogu~/Documents
, powinien przestać działać, ponieważ cel linku nie znajdował się już w tym samym katalogu, co link. Jednakże w tym przypadku zdarzyło się tak, że w katalogu~/Documents
znajduje się plik o nazwieclients.txt
. Zatem link wskazuje na ten plik zamiast pierwotnego miejsca docelowego w katalogu~/somedir
.Aby tego uniknąć, podczas tworzenia linku symbolicznego zawsze podajemy pełną ścieżkę do pliku docelowego.
-
Rozważ następujące pliki:
-rw-r--r-- 1 rigues rigues 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 rigues rigues 11 Jun 24 11:13 partners.txt -> clients.txt
Jakie są prawa dostępu do pliku
partners.txt
? Dlaczego?Prawa dostępu dla pliku
partners.txt
sąrw-r—r--
, ponieważ linki zawsze dziedziczą te same uprawnienia dostępu, co plik docelowy.