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;
Dal 1971 Manuali Unix Prima edizione .
Esiste una seconda , semplice forma di sintassi.
edit: ho messo FILE o FILENAME invece di TARGET --- vedere i commenti ecc vedi anche molto lungo, oltre al fondo, rivolgendosi al iceberg, duro e morbido di ln
, non solo la punta di esso.
Quindi GNU ln
ha questo:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
dove non è necessario il nome del collegamento. Dopo ln -s /usr/lib/modules
aver ottenuto un
modules -> /usr/lib/modules
con lo stesso nome di FILENAME ("target" o "source"), proprio dove ti trovi. Nessuna scelta, nessuna confusione.
Ora, se sei più esigente e desideri che il link venga creato con un altro nome e / o da qualche altra parte , aggiungi quel desiderio come nome o percorso. Il vero obiettivo viene prima di tutto, il nuovo nome di fantasia extra secondo.
Oppure dici: "Conosco questa notazione di freccia ls -l
per i collegamenti. Non ho una freccia nella shell per mostrare la direzione del mio collegamento. Quindi devo girarlo."
Lo crei in una direzione, quindi puoi usarlo nell'altra.
(FINE DI RISPOSTA ALLA PARTE DOMANDA)
Ad un altro livello, la parola "link" stessa ha un doppio significato nascosto. I collegamenti simbolici sono arrivati dopo, quindi all'inizio un collegamento era solo un collegamento. Non c'è stato morbido e duro, nessuna -s
opzione. E ora uso persino il simbolismo sorgente-bersaglio:
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
In questa fase, ci sono collegamenti, ma non hard e soft, e ls -l
non mostra le frecce, perché non c'è direzione in un (hard) link. Un "collegamento" in quella fase dell'evoluzione unix significava che il nome file "B" (voce di directory "B") nel filesystem punta allo stesso inode del nome file "A".
I file A e B sono "collegati" insieme, perché condividono gli stessi blocchi. Quindi ora con ogni rm, il kernel deve controllare: posso cancellare / liberare i blocchi di questo file sul disco o c'è un altro file collegato agli stessi blocchi? Per questo, viene utilizzato un contatore di collegamenti.
Supponiamo che tu voglia mantenere un file di grandi dimensioni su / tmp grom da eliminare e farlo ln /tmp/bigfile
. Ora hai un grosso file nella directory di lavoro. Dopo aver pulito / tmp e rimosso l'originale, si continua felicemente a utilizzare gli stessi blocchi di dati. Non ottieni un collegamento morto o penzolante, hai un file normale. Indicando nessun file ma solo il filesystem si blocca come fa ogni voce dir. Solo ora "cleaning" / tmp non è così efficace come lo era. Sembra vuoto, e lo è, ma i blocchi sulla partizione non vengono liberati.
Anche se un hard link non costa spazio stesso come cp, indirettamente, può farlo.
Aggiungendo ln -s
alla sequenza sopra:
ln -s A B --- copy only the file's name to "B"
Ora "B", il soft link, ha solo una stringa con un nome percorso. Queste sono informazioni "soft". Tecnicamente "A" e "B" non sono correlati. Ma ancora B è un "collegamento" nel nuovo senso che è possibile utilizzare quel percorso memorizzato come scorciatoia per "A". Ora è "un collegamento ad A" (punto) e non "collegato all'inode del file A"
Entrambi i tipi di collegamenti possono confondere non solo gli umani ma anche il kernel / fs. La pagina man del 1971 nota: "ERRORI: i collegamenti vengono sottoposti a backup due volte e ripristinati come file separati con inode separati".
I collegamenti rigidi alle directory (rari / non consentiti) possono facilmente causare un intasamento.
I collegamenti soft alle directory (molto comuni) possono portare a cicli eterni - devono essere riconosciuti da utility / kernel.
Esempio pratico in bash
A partire da un normale file "F" ...
ln F Fhard
... rende Fhard delle stesse dimensioni di F, ma ENTRAMBE appaiono ora in un rosso scuro SENZA frecce all'interno ls -l --color
. A causa della stat
visualizzazione di "Link: 2" in connessione con "Inode: xyz". L'hard linking F trasforma F stesso in un hard link. Entrambi sono / stay il tipo di file "file normale". Ma entrambi hanno un inode con un conteggio dei collegamenti superiore a 1.
ln -s F Fsoft
... crea un piccolo file "non regolare" "Fsoft" con il tipo di collegamento "link simbolico" --- ancora più spazio di un dir vuoto. A ls -l
non mostra nulla di speciale per "F". Per Fsoft, la dimensione visualizzata è 1 byte in quanto la stringa è 'F' e Fsoft -> F
viene visualizzata come nome. Non è necessario colorare un collegamento software per riconoscerne uno. Perché in forma abbreviata ls -F
si @
aggiunge una catena a spirale :Fsoft@
Con ls -l
sembra così:
-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 ha dimensioni e tipo di F.
Fsoft ha il nome e la lunghezza del nome F come dimensione e un diverso tipo di file.
Breve ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
l'aggiunta --block-size=1
non produce nemmeno le stesse dimensioni. Fsoft ha dimensioni "un byte, zero blocchi". F e Fhard si discostano in parallelo:
6074368 F 6074368 Fhard 0 Fsoft@
Per vedere se Fsoft è penzolante o meno, ls
ti consente di usare i colori.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
, e lo chiamib
"