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;
З 1971 р . Посібники Unix First Edition .
Є друга , проста, синтаксична форма.
Змінити: Я ставлю FILE або FILENAME замість TARGET --- бачити коментарі і т.д. Дивись також дуже довго додавання в нижній частині, звертаючись до айсберг, тверді і м'які з ln
, а не тільки кінчик його.
Отже, GNU ln
має таке:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
де вам не потрібно ім'я посилання. Після ln -s /usr/lib/modules
того, як ви отримаєте
modules -> /usr/lib/modules
з тим самим іменем, що і FILENAME ("ціль" або "джерело"), де ви знаходитесь. Ні вибору, ні плутанини.
Тепер, якщо ви більш вимогливі і хочете, щоб посилання було створене під іншим ім'ям та / або деінде , ви додасте це бажання як ім’я чи шлях. Справжня ціль на першому місці, додаткова фантазійна нова назва посилання друга.
Або ви кажете: "Я знаю цю позначку стрілки ls -l
для посилань. У мене немає стрілки в оболонці, щоб показати напрямок моєї посилання. Тому я повинен її перевернути".
Ви створюєте його в одному напрямку, щоб ви могли використовувати його в іншому.
(КІНЦЯ ВІДПОВІДЬ-ЗАПИТАННЯ)
На іншому рівні слово "посилання" саме по собі несе в собі глибоке приховане подвійне значення. Символічні посилання з’явились пізніше, тому в перші дні посилання було лише посиланням. Не було м'якого і твердого, не було -s
варіанту. І тепер я навіть використовую символіку-джерело-ціль:
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
На цьому етапі є посилання, але немає жорстких і м'яких, і ls -l
стрілки не показуються, тому що в (жорсткому) зв’язку немає напряму. "Посилання" на тому етапі еволюції unix означало, що ім'я файлу "B" (запис в каталозі "B") у файловій системі вказує на той самий inode, на який вказує ім'я файлу "A".
Файли A і B "пов'язані" разом, оскільки вони поділяють однакові блоки. Отже, з кожним rm ядро має перевірити: чи я видаляю / звільняю блоки цього файлу на диску, чи є інший файл, пов'язаний з тими ж блоками? Для цього використовується лічильник посилань.
Скажіть, ви хочете, щоб великий файл у / tmp grom видалявся та роби ln /tmp/bigfile
. Тепер у вас є великий bigfile у вашому робочому режимі. Після очищення / tmp та переміщення "оригіналу" ви радісно продовжуєте використовувати ті самі блоки даних. Ви не отримаєте мертве або звисаюче посилання, у вас нормальний файл. Вказуючи не на файл, а лише на файлову систему, як це робить кожен запис в режимі dir. Тільки зараз "чистка" / tmp не настільки ефективна, як була. Він виглядає порожнім, і він є, але блоки на розділі не звільняються.
Навіть незважаючи на те, що жорстке посилання не коштує простору, як це робить cp, опосередковано.
Додавання ln -s
до послідовності вище:
ln -s A B --- copy only the file's name to "B"
Тепер "B", м'яке посилання, містить лише рядок з назвою шляху. Це "м'яка" інформація. Технічно "А" і "В" не пов'язані між собою. Але все ж B - це "посилання" в новому сенсі, що ви можете використовувати збережене ім'я шляху як ярлик до "A". Тепер це "посилання на A" (період), а не "пов'язане з inode файла A"
Обидва види посилань можуть заплутати не тільки людей, але й ядро / fs. Сторінка 1971 року зазначає: "BUGS: посилання двічі резервуються і відновлюються як окремі файли з окремими вводами".
Жорсткі посилання на каталоги (рідкісні / заборонені) можуть легко призвести до засмічення.
М'які посилання на каталоги (дуже поширені) можуть призвести до вічних циклів - їх слід розпізнати утилітами / ядром.
Практичний приклад з баш
Починаючи зі звичайного файлу "F" ...
ln F Fhard
... робить Fhard такого ж розміру, що і F, але вони БУДУТЬ тепер відображатися у темно-червоному БЕЗ стрілок ls -l --color
. Через stat
показ "Посилання: 2" у зв'язку з "Inode: xyz". Жорстке з'єднання F перетворює F себе в жорстке з'єднання. Обидва є / залишаються файли "звичайний файл". Але обидва мають inode із кількістю посилань вище 1.
ln -s F Fsoft
... робить невеличкий "нерегулярний" файл "Fsoft" з файловим "символічним посиланням" --- навіть більше економії місця, ніж порожній реж. A не ls -l
показує нічого особливого для "F". Для Fsoft показаний розмір становить 1 байт, оскільки рядок "F", і Fsoft -> F
відображається як ім'я. Не потрібно розфарбовувати м'яке посилання, щоб його розпізнати. Тому що в короткій формі ls -F
ви отримуєте додану згорнуту ланцюжок @
:Fsoft@
З ls -l
цим виглядає так:
-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 має розмір і тип F.
Fsoft має ім'я F та довжину імені F як розмір та інший тип файлу.
Короткий ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
додавання --block-size=1
також не дає однакових розмірів. Fsoft має розмір "один байт, нульові блоки". F і Fhard відхиляються паралельно:
6074368 F 6074368 Fhard 0 Fsoft@
Щоб побачити, чи Fsoft звисає чи ні, ls
ви можете використовувати кольори.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
і називаєтеb
"