Правильно ли я использую команды «ln» и «unlink»?

У меня есть несколько проектов JavaScript, которые используют один и тот же набор служебных скриптов.

Сегодня, после десятка раз скопировав (cp) папку библиотеки, я провел небольшое исследование и обнаружил команды ln && unlink.

Я использовал ln для создания символической ссылки на папку lib, например:

ln -s -t ~/Development/Web/Project.js ~/Development/Libraries/Main.js/lib

Исходя из того, что я понимаю, предыдущая команда:

  1. создает символическую ссылку с помощью -s
  2. создает ссылку на папку lib из ~/Development/Libraries/Main.js в папке ~/Development/Web/Project.js
  3. при удалении ссылки использование unlink ~/Development/Web/Project.js/lib не влияет (не изменяет) папку lib в папке Main.js
  4. , символическая ссылка - это (не изменяемый) указатель на целевой инод
  5. жесткая ссылка, которая создает новый со ссылкой на inode цели
  6. , вы также можете связывать / отменять связь файлов, используя те же команды

Верны ли мои предположения?

1
задан 23 July 2019 в 14:40

1 ответ

Большинство Ваших предположений кажется корректным мне, только 4-я точка является неправильной. Символьная ссылка является путем к цели, не указателем на inode цели, вот почему symbolink работа ссылок через файловые системы.

Чтобы продемонстрировать, как удалить связь команда работает, я создал несколько файлов и каталог, в котором я создам ссылки:

~$ touch test
~$ touch test1
~$ mkdir dir

Теперь я создаю символьную ссылку на test и жесткая ссылка на test1

~$ ln -s -t dir test
~$ ln -t dir test1
~$ ls -l dir
total 0
lrwxrwxrwx 1 user user 4 Jul 23 19:21 test -> test
-rw-rw-r-- 2 user user 0 Jul 23 19:22 test1
~$ ls -l test1
-rw-rw-r-- 2 user user 0 Jul 23 19:20 test1

Вы видите что жесткая ссылка dir/test1 имеет hardlink-количество 2, также цель test1 имеет hardlink-количества 2.

Теперь я удаляю символьную ссылку dir/test

~$ unlink dir/test
~$ ls -l dir
total 0
-rw-rw-r-- 2 user user 0 Jul 23 19:22 test1
~$ ls -l test
-rw-rw-r-- 1 user user 0 Jul 23 19:20 test

Мы видим, что ссылка удалена, но исходный файл test все еще существует.

Теперь я удаляю жесткую ссылку dir/test1:

~$ unlink dir/test1
~$ ls -l test1
~$ ls -l dir
 total 0
~$ ls -l test1
-rw-rw-r-- 1 user user 0 Jul 23 19:20 test1

И снова мы видим, что ссылка удалена, но исходный файл test1 все еще существует, но его hardlink-количество теперь 1.

Я никогда не использовал unlink- команда, Вы достигнете того же результата с rm- команда.

2
ответ дан 7 December 2019 в 13:15

Другие вопросы по тегам:

Похожие вопросы: