NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
Od podręczników Unix First Edition 1971 .
Istnieje druga prosta forma składni.
edit: I umieścić plik lub FILENAME zamiast TARGET --- zobaczyć komentarze itd. patrz również bardzo długi dodatek na dole, zwracając się do góry lodowej, twarde i miękkie z ln
, a nie tylko czubek niego.
GNU ln
ma to:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
gdzie nie potrzebujesz nazwy linku. Po ln -s /usr/lib/modules
otrzymaniu
modules -> /usr/lib/modules
o tej samej nazwie co FILENAME („target” lub „source”), dokładnie tam, gdzie jesteś. Bez wyboru, bez zamieszania.
Teraz, jeśli jesteś bardziej wymagający i chcesz utworzyć link pod inną nazwą i / lub gdzieś indziej , dodaj to życzenie jako nazwę lub ścieżkę. Prawdziwy cel jest na pierwszym miejscu, a druga fantastyczna nazwa nowego linku.
Albo mówisz: „Znam ten zapis strzałki ls -l
dla linków. Nie mam strzałki w powłoce, która wskazywałaby kierunek mojego linku. Więc muszę go odwrócić”.
Tworzysz go w jednym kierunku, dzięki czemu możesz go używać w drugim.
(ZAKOŃCZENIE CZĘŚCI ODPOWIEDZI NA PYTANIE)
Na innym poziomie samo słowo „link” ma głęboko ukryte podwójne znaczenie. Powiązania symboliczne pojawiły się później, więc na początku link był tylko linkiem. Nie było miękkiego i twardego, żadnej -s
opcji. A teraz używam nawet symboliki target-źródło:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
Na tym etapie istnieją linki, ale nie ma twardych i miękkich i ls -l
nie pokazuje strzałek, ponieważ nie ma kierunku w (twardym) łączu. „Link” na tym etapie ewolucji unixa oznaczał, że nazwa pliku „B” (pozycja katalogu „B”) w systemie plików wskazuje ten sam i-węzeł, na który wskazuje nazwa pliku „A”.
Pliki A i B są „połączone” razem, ponieważ dzielą te same bloki. Więc teraz przy każdym rm jądro musi sprawdzać: czy usuwam / zwalniam bloki tego pliku na dysku, czy też jest inny plik powiązany z tymi samymi blokami? W tym celu wykorzystywany jest licznik linków.
Powiedz, że chcesz zachować duży plik na / tmp grom, który chcesz usunąć ln /tmp/bigfile
. Teraz masz duży plik bigfile w swoim reż. Po wyczyszczeniu / tmp i przeniesieniu „oryginału” z przyjemnością korzystasz z tych samych bloków danych. Nie dostajesz martwego lub wiszącego linku, masz normalny plik. Wskazuje brak pliku, a tylko bloki systemu plików, jak robi to każdy wpis katalogu. Dopiero teraz „czyszczenie” / tmp nie jest tak skuteczne jak wcześniej. Wygląda na pustą i jest, ale bloki na partycji nie zwalniają się.
Chociaż twardy link nie kosztuje samego miejsca, jak cp, pośrednio może to zrobić.
Dodanie ln -s
do powyższej sekwencji:
ln -s A B --- copy only the file's name to "B"
Teraz „B”, miękkie łącze, ma tylko ciąg znaków z nazwą ścieżki. To są „miękkie” informacje. Technicznie „A” i „B” nie są ze sobą powiązane. Ale nadal B jest „linkiem” w nowym sensie, że można użyć zapisanej nazwy ścieżki jako skrótu do „A”. Teraz jest to „link do A” (kropka), a nie „ link do i -węzła pliku A”
Oba rodzaje linków mogą mylić nie tylko ludzi, ale także jądro / fs. Strona podręcznika użytkownika z 1971 r. Zauważa: „BŁĘDY: linki są dwukrotnie archiwizowane i odtwarzane jako osobne pliki z osobnymi i-węzłami”.
Twarde linki do katalogów (rzadkie / niedozwolone) mogą łatwo doprowadzić do zatkania.
Miękkie linki do katalogów (bardzo często) mogą prowadzić do wiecznych pętli - musi to być rozpoznane przez narzędzia / jądro.
Praktyczny przykład w bash
Począwszy od zwykłego pliku „F” ...
ln F Fhard
... sprawia, że Fhard ma taki sam rozmiar jak F, ale ZARÓWNO pojawiają się teraz w kolorze ciemnoczerwonym BEZ strzałek w ls -l --color
. Ze względu na stat
wyświetlanie „Links: 2” w połączeniu z „Inode: xyz”. Twarde linkowanie F powoduje, że sam F staje się twardym linkem. Oba są / pozostaną typem pliku „zwykły plik”. Ale oba mają i-węzeł z liczbą linków powyżej 1.
ln -s F Fsoft
... tworzy mały „nieregularny” plik „Fsoft” z typem pliku „dowiązanie symboliczne” - nawet więcej miejsca niż pusty reż. A ls -l
nie pokazuje nic specjalnego dla „F”. W przypadku Fsoft wyświetlany rozmiar to 1 bajt, ponieważ ciąg znaków to „F” i Fsoft -> F
jest wyświetlany jako nazwa. Nie trzeba pokolorować miękkiego linku, aby go rozpoznać. Ponieważ w krótkiej formie
dołączany ls -F
jest zwinięty łańcuch @
:Fsoft@
Z ls -l
wygląda to tak:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard ma rozmiar i typ F.
Fsoft ma nazwę F i długość nazwy F jako rozmiar i inny typ pliku.
Krótkie ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
dodanie --block-size=1
nie daje również takich samych rozmiarów. Fsoft ma rozmiar „jeden bajt, zero bloków”. F i Fhard odchylają równolegle:
6074368 F 6074368 Fhard 0 Fsoft@
Aby sprawdzić, czy Fsoft zwisa, czy nie, ls
możesz użyć kolorów.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
i nazwij tob
”