sobota, 9 sierpnia 2008

Prawa plików (nadawanie i zmiana praw)

W linuksie każdy utworzony plik posiada określone prawa. Można je sprawdzić za pomocą polecenia ls -l, które listuje zawartość katalogu. Dla przykładowo utworzonego pliku, polecenie ls - l daje u mnie następujący wynik:

$ ls -l

-rw-r--r-- 1 sebastian sebastian 27 sie 9 15:47 przykład

Pierwszy znak oznacza rodzaj pliku. W tym przypadku jest to myślnik oznaczający zwykły plik. Na przykład "d" w tym miejscu oznacza katalog a "l" dowiązanie symboliczne. Następne dziewięć znaków oznacza prawa pliku. Dalej można odczytać właściciela pliku, grupę pliku, czas ostatniej modyfikacji i nazwę pliku.
Te dziewieć znaków określa prawa pliku dla właściciela pliku, grupy przypisanej do pliku i pozostałych użytkowników (wszystkich tych którzy nie są ani właścicielem pliku ani nie należą do grupy pliku). Prawa każdej z tych trzech "grup" (właściciel, grupa, pozostali użytkownicy) określają trzy znaki. Pierwsze trzy określają prawa właściciela pliku, kolejne trzy prawa grupy natomiast ostatnie trzy określają prawa pozostałych użytkowników.
W powyższym przykładzie właścicielem pliku jest sebastian, grupa pliku też się nazywa sebastian. Prawa pliku są natomiast następujące (pierwszy myślnik pomijamy bo oznacza on rodzaj pliku):

rw- dla właściciela pliku (sebastian)
r-- dla grupy pliku (sebastian)
r-- dla pozostałych użytkowników

Litera r (od słowa read - ang. czytać) oznacza prawa do odczytu pliku natomiast litera w (od słowa write - ang. pisać) oznacza prawo do zapisu czyli zaminy zawartości pliku. Oprócz tych dwóch praw może się jeszcze pojawić prawo wykonywania pliku - litera x (od słowa execute - ang. wykonywać). Myślnik oznacza brak danego prawa. Wracając do przykładu można powiedzieć, że właściciel pliku (sebastian) może odczytać plik i zmienić jego zawartość (rw). Użytkownicy należący do grupy sebastian mogą tylko odczytać plik (r), podobnie jak wszyscy pozostali użytkownicy pliku (r). Natomiast gdyby wszyscy użytkownicy posiadali prawa do odczytu i zapisu pliku, wówczas prawa pliku wyglądałyby następująco:

-rw-rw-rw-

Trzy ostatnie myślniki to są miejsca gdzie może pojawić się x jeśli zostaną nadane prawa wykonywania pliku dla właściciela, grupy, pozostałych użytkowników lub wszystkich naraz. Jeżeli wszyscy w tym wypadku posiadaliby prawa wykonywania pliku, wówczas wszyscy posiadaliby pełne prawa do pliku (odczyt, zapis, wykonywanie). Wtedy prawa pliku wyglądałby następująco:

-rwxrwxrwx

To są pełne prawa do pliku dla wszystkich. Jeżeli jakiegoś prawa nie ma, wtedy pojawia się zamiast litery myślnik. Stąd te myśliniki w pierwszym przykładzie. Wyżej wspomniano co oznaczają poszczególne prawa dla plików. Co oznaczają one natomiast dla katalogów ? Dla katalogu prawo odczytu - r oznacza prawo do przeszukania zawartości katalogu, prawo zapisu - w oznacza prawo do zmiany zawartości czyli prawo do tworzenia i usuwania plików w katalogu, natomiast prawo wykonywania - x dla katalogu oznacza prawo wejścia do niego.

Podsumowując:

prawo odczytu - r - dla pliku oznacza odczyt zawartości pliku, dla katalogu odczyt zawartości katalogu
prawo zapisu - w - dla pliku oznacza zamianę zawartości pliku, dla katalogu prawo do tworzenia i usuwania plików w katalogu
prawo wykonywania - x - dla pliku oznacza uruchomienie pliku jako programu, dla katalogu oznacza prawo wejścia do katalogu

Do zmiany/nadawania praw służy polecenie chmod. Można go używać w dwojaki sposób: za pomocą liter i znaków lub za pomocą liczb.
Jeżeli używamy liter i znaków składania jego polecenia jest następująca.

chmod <kogo dotyczy zmiana praw><w jaki sposób prawa będą zmieniane><jakie prawa> nazwa_pliku

kogo dotyczy zamiana praw - tu używamy następujących liter, które oznaczają:

u - (user - ang. użytkownik) - oznacza właściciela pliku
g - (group - ang. grupa) - oznacza grupę użytkowników pliku
o - (others - ang. inni) - oznacza pozostałych użytkowników pliku
a - (all - ang. wszyscy) - oznacza wszystkich użytkowników

w jaki sposób prawa będą zmieniane - tu używamy trzech znaków, które oznaczają:

+ - dodanie praw (dodanie kolejnych praw do już istniejących)
- - odebranie praw (odjęcie praw od istniejących)
= - nadanie praw (te które były wcześniej są kasowane)

jakie prawa - tu używa się liter praw omówionych wcześniej czyli:

r - prawo do odczytu
w - prawo do zapisu
x - prawo wykonywania

Dla katalogów znaczenie jest takie jak omówiono.

Weźmy na przykład plik o nazwie tomek, który posiada następujące prawa:

-rw-r--r--

Widać, że właściciel ma prawo do zapisu i odczytu a pozostali tylko do odczytu. Chcemy nadać grupie i pozostałym użytkownikom prawo do zapisu. Używamy więc polecenia:

chmod go+w tomek

(go+w jest pisane ciągiem bez spacji). Teraz prawa pliku będą wyglądały następująco:

-rw-rw-rw-

Wszyscy posiadają takie same prawa, mogą czytać i zmieniać zawartość pliku. Ten sam efekt można byłoby uzyskać wydając polecenie: chmod go=rw tomek. Wtedy prawa grupy i pozostałych użytkowników zostałyby zmienione na rw (stare są kasowane). Efekt jest ten sam. Załóżmy, że chcemy teraz wszystkim odebrać prawo do zapisu pliku. Można użyć polecenia:

chmod a-w tomek

lub

chmod ugo-w tomek

Wtedy prawa pliku wyglądałyby następująco:

-r--r--r--

Jak widać te same prawa można nadawać w różny sposób. Parametry ugoa jak i rwx można łączyć ze sobą (pisze się je łącznie bez spacji). Jeżeli chcemy teraz nadać wszystkim pełne prawa do pliku możemy użyć:

chmod a=rwx tomek

chmod ugo=rwx tomek

chmod ugo+wx tomek

Drugim sposobem nadawania praw jest użycie polecenia chmod przy pomocy liczb. Poszczególne prawa odpowiadają następującym liczbom:

r - odczyt - 4
w - zapis - 2
x - wykonanie - 1

Łączne prawa odpowiadają sumom liczb. Na przykład 6 oznacza prawo do odczytu i zapisu. Wszystkie prawa można przedstawić za pomocą następujących cyfr:

0 - brak praw (---)
1 - prawo do wykonywania (--x)
2 - prawo do zapisu (-w-)
3 - prawo do zapisu i wykonania (-wx)
4 - prawo do odczytu (r--)
5 - prawo do odczytu i wykonania (r-x)
6 - prawo do zapisu i odczytu (rw-)
7 - prawo do zapisu, odczytu i wykonania - pełne prawa (rwx)

Polecenie chmod z użyciem liczb działa jak chmod z użyciem = tzn. nadaje prawa zastępując stare nowymi. Używamy go w następujący sposób:

chmod xxx nazwa_pliku

gdzie xxx to trzycyfrowa liczba (niekoniecznie musi być trzycyfrowa) składająca się z cyfr od 0 do 7. Pierwsza cyfra opisuje prawa właściciela pliku, druga cyfra odpowiada za prawa grupy a ostatnia za prawa pozostałych użytkowników.

Na przykład polecenie:

chmod 664 bartek

nada plikowi bartek prawa do odczytu i zapisu dla właściciela pliku, prawa do odczytu i zapisu dla grupy pliku i prawa do odczytu dla pozostałych użytkowników (-rw-rw-r--), przy czym nie ma znaczenia jakie prawa plik miał wcześniej. Z kolei polecenie:

chmod 777 bartek

nada temu samemu plikowi pełne prawa dla wszystkich użytkowników (-rwxrwxrwx). Polecenie:

chmod 700 aneta

nadaje pełne prawa dla właściciela pliku aneta i żadnych praw pozostałym użytkownikom (-rwx------). Polecenie:

chmod 666 tomek

nadaje wszystkim prawa do zapisu i odczytu pliku tomek (-rw-rw-rw-).

Liczba użyta w poleceniu chmod może być także czterocyfrowa. Wtedy pierwsza cyfra odpowiada za prawa specjalne pliku, a trzy następne nadają prawa tak jak liczba trzycyfrowa. Na przykład w poleceniu chmod 1770 tomek jedynka ustawia tzw. lepki bit a 770 nadaje pełne prawa dla właściciela i grupy i żadnych praw dla pozostałych użytkowników. Tzw. lepki bit na przykład dla katalogów oznacza, że pliki w takim katalogu może usunąć tylko właściciel katalogu lub właściciel danego pliku.

Więcej na temat praw plików i praw specjalnych w man chmod i info chmod.

piątek, 1 sierpnia 2008

Edytory html

Jakiś czas temu postanowiłem zainstalować jakiś edytor html. Pod windowsem używałem kED. Szukałem czegoś podobnego dla Debiana. Wybrałem dwa, które są dostępne w repozytorium Debiana, oparte na Gtk+ - Screem i Bluefish. Na pierwszy rzut oka prostszy i łatwiejszy w obsłudze wydał mi się Screem. Posiada on łatwe w obsłudze kreatory. Przy tworzeniu nowej strony wystarczy w kreatorze podać typ dokumentu, kodowanie, tytuł, opis, słowa kluczowe a program automatycznie wstawi w nagłówku strony odpowiednie meta znaczniki. Ze Screemem miałem jednak jeden problem, którego nie udało mi się jeszcze rozwiązać. W trakcie pracy potrafi się bez powodu zamknąć nie zapisując danych. Zdarzyło mi się to kilkakrotnie. Z konieczności więc zamieniłem go na Bluefisha. Bluefish na początku wydawał się trudniejszy w obsłudze, ale po bliższym poznaniu z programem coraz lepiej mi się w nim pracuje. Na początku nie mogłem w nim znaleźć analogicznego kreatora strony jaki ma Screem. Bluefish ma podobny kreator tylko w innym miejscu. W Screemie kreator strony można znaleźć w menu Plik > Utwórz > Nowy dokument, natomiast w Bluefishu kreator znajduje się w menu Okna dialogowe > Ogólne > Szybki start. Tylko trzeba uważać na to jakie meta znaczniki wstawia kreator. W Bluefishu kreator domyślnie wstawia znacznik <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">. Jest to informacja dla robotów sieciowych, aby nie indeksowały takiej strony i nie podążały za linkami na stronie. Trzeba więc zwracać na to uwagę. Roboty sieciowe domyślnie indeksują strony, więc jeśli chcemy mieć zaindeksowane strony wystarczy po prostu ten znacznik pominąć lub zamiast "NOINDEX" i "NOFOLLOW" wstawić "INDEX" i "FOLLOW".
Jak już napisałem oba edytory dostępne są w repozytorium Debiana. Pakiety do zainstalowania to bluefish i screem:

# aptitude install bluefish

# aptitude install screem

Poniżej znajdują się zrzuty ekranu obu programów:

Bluefish




Screem



czwartek, 17 lipca 2008

Klient FTP

Dziś postanowiałem zainstalować jakiegoś klienta ftp. Po wydaniu polecenia $ aptitude search ftp wyświetliła mi się lista zawierająca kilka klientów ftp dostępnych w repozytorium lennego. Wybrałem pakiet gftp - pierwszy, który rzucił mi się w oczy, oparty na GTK+. Używam XFCE, dlatego właśnie takiego szukałem. Aby zainstalować gFTP wystarczy wydać polecenie:

# aptitude install gftp

Po chwili pakiet powinien być zainstalowany. Program jest prosty i intuicyjny w użyciu. Po otwarciu jego okno wygląda następująco:



Pola do wypełnienia wydają się oczywiste. Host - adres serwera, Port - numer portu (dla FTP 21), User - nasza nazwa użytkownika na serwerze, Hasło - hasło dla naszej nazwy użytkownika. Jeśli nie podamy nazwy użytkownika, program spróbuje nas zalogować jako gościa- anonimowo. Jesli nie podamy numeru portu, program domyślnie wybierze 21 dla serwera ftp. Przycisk po lewej stronie (ikony dwóch komputerów) służy do łączenia i rozłączania z serwerem, przycisk po prawej (czerwone kółko z białym krzyżykiem) do przerywania połączenia, gdy program jest w trakcie łączenia.

W menu XFCE program można znaleźć np. w (XFCE) > Sieć > gFTP.
Program domyślnie działa w trybie pasywnym. Opcję tą można zmienić w gFTP > FTP > Opcje > FTP - Pasywna transmisja plików.

czwartek, 3 lipca 2008

Iceweasel - otwieranie linków zewnętrznych

Po zainstalowaniu Iceweasela miałem problem z otwieraniem linków. Iceweasel nie otwierał linków z zewnętrznych aplikacji np. link zawarty w e-mailu lub w wiadomości komunikatora. Problem pojawiał się wtedy gdy Iceweasel był już uruchomiony. Kiedy Iceweasel był zamknięty wszystko było ok. Wtedy kliknięcie np. na link w e-mailu powodowało uruchomianie Iceweasela i otwarcie strony podanej w linku. Problem pojawiał się gdy Iceweasel był już uruchomiony. Wtedy kliknięcie w taki link powodowało wyświetlenie takiego komunikatu:

Iceweasel is already running , but is not responding. To open a new window, you must first close the existing Iceweasel process, or restart your system.
Znalazłem informację, że jest to znany bug i jego rozwiązaniem jest edycja pliku /usr/lib/iceweasel/iceweasel, w którym należy zmienić wyrażenie APPLICATION_ID=firefox na APPLICATION_ID=iceweasel. Po prostu w wyrażeniu APPLICATION_ID=firefox słowo firefox należy zamienić na iceweasel. U mnie niestety nie rozwiązało to problemu. Powróciłem więc ponownie do pierwotnej wersji APPLICATION_ID=firefox.
W moim przypadku rozwiązaniem okazało się usunięcie pliku .parentlock. Jest to plik znajdujący się w katalogu profilu użytkownika Iceweasela. Katalog ten to katalog w którym Iceweasel przechowuje dane i ustawienia użytkownika takie jak ulubione strony, ciasteczka, historię przeglądanych stron itp. Aby uniknąć konfliktów Iceweasela zaprojektowano tak aby tylko jedna jego kopia miała dostęp do danego profilu w tym samym czasie. Podczas uruchamiania Iceweasel tworzy w katalogu profilu plik lock, który blokuje pozostałym jego kopiom lub innym aplikacjom dostęp do tego profilu w tym samym czasie. Przy zamknięciu Iceweasela plik ten jest usuwany. Czasami zdarza się, że przeglądarka zostanie nieprawidłowo zamknięta i plik ten nie zostanie usunięty. Wtedy przy ponownym uruchomieniu może pojawić się ten komunikat, że Iceweasel jest uruchomiony, ale nie odpowiada i żeby najpierw zakończyć istniejący proces Iceweasela lub zrestartować system. Usunięcie tego pliku jest rozwiązaniem w tego typu sytuacjach. U mnie naprawiło to także problem z otwieraniem linków zewnętrznych przez Iceweasela. Teraz kliknięcie w link zewnętrzny powoduje po prostu otwarcie nowej zakładki w Iceweaselu.
Katalog profilu Iceweasla znajduje się w katalogu domowym użytkownika. Jego scieżka jest następująca ~/.mozilla/firefox/nazwa_profilu. Automatycznie utworzony profil kończy się na "default". Aby usunąć plik blokujący należy zamknąć przeglądarkę i usunąć z katalogu plik lock i .parentlock. Można wykonać następujące komendy:

$ rm ~/.mozilla/firefox/*/.parentlock
$ rm ~/.mozilla/firefox/*/lock

Gwiazdkę można zastąpić własną nazwą profilu.

Podobny plik blokujący wykorzystuje Icedove (Thunderbird) znajdujący się w analogicznym katalogu profilu.

czwartek, 26 czerwca 2008

Dowiązania (linki) twarde i symboliczne

Dowiązania twarde (hard links). Dowiązanie twarde to utworzenie nowej nazwy dla istniejącego pliku. Jeśli wyobrazimy sobie plik jako jego nazwę i dane na które ta nazwa wskazuje to można powiedzieć, że dowiązanie twarde to utworzenie nowej nazwy wskazującej na te same dane. Polecenie to jest podobne do kopiowania pliku z tym, że przy kopiowaniu tworzona jest niezależna kopia pliku a przy dowiązaniu twardym tworzona jest tylko nowa nazwa, która wskazuje na ten sam istniejący już plik. Do tworzenia dowiązań twardych służy polecenie ln. Używamy go następująco:

ln cel_dowiązania dowiązanie

gdzie:

cel_dowiązania - plik do którego chcemy zrobić dowiązanie
dowiązanie - plik, który będzie stanowił dowiązanie do pierwszego

Przykład. Weźmy pod uwagę plik "dorota" znajdujący się na pulpicie, którego ścieżka jest następująca: ~/Desktop/dorota. W moim przypadku jest to /home/sebastian/Desktop/dorota. (Znak "~" oznacza katalog domowy użytkownika). Na pulpicie znajduje się katalog "Katalog1" w którym chcemy zrobić dowiązanie do "dorota". Ścieżka do katalogu to ~/Desktop/Katalog1. Chcemy zrobic dowiązanie o nazwie "aneta". Wówczas cel dowiązania i dowiązanie będą następujące:

cel dowiązania - ~/Desktop/dorota
dowiązanie - ~/Desktop/Katalog1/aneta

Polecenie ln będzie wyglądało następująco:

$ ln ~/Desktop/dorota ~/Desktop/Katalog1/aneta

Polecenie to utworzy nam w katalogu "Katalog1" plik "aneta", który będzie dowiązaniem do pliku "dorota" znajdującego się na pulpicie (w katalogu ~/Desktop). W ten sposób nadaliśmy plikowi nową nazwę, która jest równoprawna ze starą. Oba pliki mają taką samą (wskazują na tą samą) zawartość.
Liczbę dowiązań do plików można sprawdzić wydając polecenie ls -l, które listuje zawartość katalogu podając kilka parametrów plików w nim zawartych. Jeśli wydamy to polecenie w katalogu "Katalog1" otrzymamy jeden wpis dotyczący pliku "aneta". U mnie wygląda on następująco:

$ ls -l

-rw-r--r-- 2 sebastian sebastian 12 cze 26 18:30 aneta

Pierwszy myślnik oznacza że jest to plik zwykły, pozostałe litery r,w i myślniki określają prawa dostępu do pliku. Cyfra 2 znajdująca się za nimi oznacza właśnie liczbę dowiązań. Pierwszym dowiązaniem jest nazwa ~/Desktop/dorota, drugim - ~/Desktop/Katalog1/aneta. Obie są równoprawne. Skasowanie jednej z nich nie kasuje zawartości pliku. Aby skasować plik należy skasować wszystkie dowiązania do niego. Plik zostaje skasowany w momencie skasowania ostatniego dowiązania twardego (nazwy). Jeżeli wylistujemy zawartość katalogu ~/Desktop otrzymamy analogiczny wpis z nazwą dorota, który też pokaże liczbę dowiązań 2.

Skasujmy teraz jedną nazwę np: rm ~/Desktop/dorota

Listujemy ponownie katalog "Katalog1":

$ ls -l

-rw-r--r-- 1 sebastian sebastian 12 cze 26 18:30 aneta

Widać, że ilość dowiązań wynosi teraz 1. Nazwa ~/Desktop/Katalog1/aneta jest więc jedyną i jej skasowanie skasuje plik z jego zawartością.

Napisałem, że polecenia ln używa się podając dowiązanie i cel dowiązania, ale parametr dowiązanie nie jest obowiązkowy. Jeżeli go nie podamy, podając tylko cel dowiązania to dowiązanie zostanie utworzone w katalogu w którym się akurat znajdujemy. Dowiązanie będzie miało taką samą nazwę jak oryginalna.
Rozpatrzmy naszą początkową sytuację. Jeśli chcemy utowrzyć dowiązanie do ~/Desktop/dorota w katalogu ~/Desktop/Katalog1 wystarczy w tym katalogu wydać polecenie:

$ ln ~/Desktop/dorota

Polecenie to utworzy w katalogu ~/Desktop/Katalog1 dowiązanie do ~/Desktop/dorota ale o nazwie dorota (~/Desktop/Katalog1/dorota).
Jeżeli chcemy utworzyć dowiązanie o nazwie aneta, a wydajemy je z katalogu ~/Desktop/Katalog1, wystarczy wydać polecenie:

$ ln ~/Desktop/dorota aneta

Jak widać nie trzeba wpisywać pełnych nazw plików jeśli wydajemy polecenie z katalogu w którym ma znajdować się dowiązanie. (Analogicznie byłby z nazwą dorota jeśli polecenie wydawalibyśmy z katalogu ~/Desktop).

Parametr dowiązanie oprócz tego, że nie jest obowiązkowy to jeśli występuje może być zarówno plikiem jak i katalogiem. Jeśli jest plikiem, tak jak w naszym początkowym przykładzie to podany plik jest tworzony jako dowiązanie do pierwszego. Jeśli jest katalogiem to w nim tworzone jest dowiązanie, ale z taką samą nazwą jak cel dowiązania. Jeśli go brak tak jak w ostatnich przykładach to też tworzone jest dowiązanie z taką samą nazwą jak cel dowiązania tylko dodatkowo w katalogu w którym się akurat znajdujemy (bo żaden nie został określony). Krótko można to przedstawić następująco:

ln plik1 plik2 - tworzy plik2 jako dowiązanie do plik1
ln plik1 Katalog - tworzy w Katalogu dowiązanie do plik1 z taką samą nazwą jak plik1
ln plik1 - tworzy dowiązanie z taką samą nazwą jak plik1 w katalogu w którym jest wydawane


Dowiązania symboliczne (symbolic links). Link symboliczny to dowiązanie do pliku wskazujące na jego nazwę. O ile dowiązanie twarde to była nowa nazwa wskazująca na plik tak samo jak stara to link symboliczny wskazuje na nazwę pliku, która dopiero wskazuje na plik. Linki symboliczne tworzy się analogicznie jak dowiązania twarde tylko dodając do polecenia ln parametr -s. Na przykład ln -s plik1 plik2 utowrzy plik2 jako dowiązanie symboliczne do plik1.

Wracając do naszego pierwotnego przykładu czyli pliku ~/Desktop/dorota i katalogu ~/Desktop/Katalog1. Jeżeli chcemy utworzyć dowiązanie do "dorota" o nazwie "aneta", które będzie się znajdowało w katalogu "Katalog1", ale tym razem ma to być link symboliczny, wydajemy analogiczną komendę ale z parametrem -s:

$ ln -s ~/Desktop/dorota ~/Desktop/Katalog1/aneta

Podobnie jak wcześniej wylistujmy teraz zawartość jednego z katalogów zawierających plik "dorota" lub "aneta". Tym razem niech to będzie ~/Desktop. Wylistowanie katalogu polecenim ls -l pokaże jeden wpis dotyczący pliku "dorota". U mnie wygląda on następująco:

-rw-r--r-- 1 sebastian sebastian 12 cze 27 12:29 dorota

Tym razem widać, że liczba dowiązań się nie zmieniła. Utworzenie linku symbolicznego nie zwiększa liczby dowiązań do pliku. Jeśli wylistujemy zawartość katalogu "Katalog1" ujrzymy jeden wpis dotyczący pliku "aneta". U mnie wygląda on tak:

lrwxrwxrwx 1 sebastian sebastian 30 cze 27 12:25 aneta -> /home/sebastian/Desktop/dorota

Pierwsza litera l informuje o tym że jest to link symboliczny a nie plik zwykły jak było w przypadku dowiązania twardego (tam był myślnik zamiast l). Dalej określone są prawa do pliku (linku), liczba dowiązań 1 i inne jego parametry a następnie określny jest plik do którego odnosi się ten link symboliczny - /home/sebastian/Desktop/dorota.

W przypadku linku symbolicznego wyraźnie rozdzielony jest plik i link symboliczny do pliku. W przypadku dowiązania twardego takiego rozróżnienia nie było. Obie nazwy były równoprawne. Większość operacji wykonywana na linkach symbolicznych wykonywana jest na plikach na które wskazują np. odczyt, zapis, ale już usunięcie usuwa tylko link symboliczny. Może się też zdarzyć, że najpierw zostanie usunięty plik docelowy a prowadzący do niego link symboliczny pozostanie. Wtedy jest to tzw. broken link, który prowadzi do nieistniejącego już pliku. W przypadku dowiązań twardych usunięcie pliku następowało po usunięciu ostatniego dowiązania. W przypadku linków symbolicznych można usunąć plik pomimo że prowadzą do niego linki symboliczne. Dowiązania twarde można tworzyć w obrębie jednego systemu plików natomiast linki symboliczne nie mają takiego ograniczenia. Ponadto linki symboliczne w przeciwieństawie do dowiązań twardych można tworzyć zarówno do plików jak i katalogów.