Не удалось создать символьную ссылку файл не существует

Обновлено: 07.07.2024

Никак не могу врубиться в понятие символьной ссылки. Ну вот, допустим, я создаю файлы file1.txt с содержанием This is the first file и файл file2.txt с содержанием this is the second file .

Далее ввожу команду ln file1.txt file2.txt и на меня ругается Linux, говорит, что не получилось создать жесткую ссылку. Что мне надо добавить в первый файл, чтобы он ссылался на второй ? В интернете почти все примеры с ln -s . Зачем нужен аргумент -s ?

Был бы очень благодерн, если кто-нибудь объяснил бы на примере.

7,308 14 14 золотых знаков 56 56 серебряных знаков 108 108 бронзовых знаков

Пожалуй внесу и свою лепту, так как буквально позавчера разбирался что к чему крепится и конспектировал всё .

Простой исчерпывающий пример — лучшее объяснение: как говорится, лучше один раз пощупать, чем сто раз посмотреть.

Для начала создадим где-нибудь какую-нибудь папку для экспериментов (у меня, например, такая есть всегда — Tests , в домашнем каталоге):

Теперь создадим в ней файл source.txt с текстом 1 :

По умолчанию (при вызове без параметров) команда ln создаёт «жёсткую ссылку» («hard link»):

Жёсткая ссылка — хм . что за фигня.

OK. что такое «inode» файла.

OK. что такое «node» файла.

То есть это некий идентификатор файла в системе .

Фу-у-у, вроде с теорией более-менее разобрались .

Итак, у нас на данный момент в папке Tests имеется файл source.txt с текстом 1 и жёсткая ссылка на него hard-link.txt .

Изменения как в source.txt , так и в hard-link.txt синхронизируются — ничего удивительного.

Если мы перенесём (удалим из текущей директории) любой из файлов в рамках нашей точки монтирования, то на втором файле это никак не скажется и синхронизация будет работать (имеется в виду если мы переносили файл конечно). Опять же — ничего удивительного: файл продолжает существовать пока на него указывает хоть одна ссылка (жёсткая).

Так в чём собственно прикол? Прикол в том, что как уже упоминалось выше, жёсткая ссылка ссылается на индекс файла (inode). Поэтому, например, если мы удалим любой из файлов, а затем создадим файл в этом же месте файл с таким же именем (и расширением), то кажется, что он должен быть синхронизирован с другим файлом, но не тут то было — связь потеряна: так как новый файл — новый индекс (то же самое и при копировании файла — создаётся новый файл с новым индексом и связь теряется).

Перейдём к символическим ссылкам .

При вызове ln с параметром -s или --symbolic будет создана символическая ссылка:

Иными словами символическая ссылка ссылается на адрес файла, а не индекс файла.

Различные заметки о всем что меня интересует и что я могу.

вторник, 24 марта 2015 г.

Основы работы с этим инструментом подробно рассказали на Хабрахабр, я углубляться не буду, а просто покажу пример как я это реализовал.
Считаем что раздел у нас уже примонтирован, и в моем случае он имеет вот такой путь - /media/ulyssesd/My_Home/ulyssesd а далее уже находятся все остальные каталоги (Документы, Музыка и прочая), а основной путь перед локальными файлами у меня получается вот такой - /home/ulyssesd/
При создании симлинка на каталог, может получится так что симлинк будет создан внутри самого каталога или получить вот такой ответ от системы

Так что перед созданием симлинка мы все эти каталоги удалим (у меня система чистая, это сложности не вызывает, если у вас там есть информация, рекомендую ее скопировать в другое место или переименовать каталоги).
Итак приступим (все операции проводятся от имени пользователя без использования sudo и прав root!)
Удаляем каталог (для примера возьмем каталог "Видео")
$ ln -s /media/ulyssesd/My_Home/ulyssesd/Видео /home/ulyssesd
Т.к. каталогов много, а я человек ленивый, то решил для себя сделать sh файл собрав туда весь список каталогов и вот что у меня получилось
файл - simlink.sh

/Видео
ln -s /media/ulyssesd/My_Home/ulyssesd/Видео /home/ulyssesd
rm -fR

/Документы
ln -s /media/ulyssesd/My_Home/ulyssesd/Документы /home/ulyssesd
rm -fR

/Изображения
ln -s /media/ulyssesd/My_Home/ulyssesd/Изображения /home/ulyssesd
rm -fR

/Загрузки
ln -s /media/ulyssesd/My_Home/ulyssesd/Загрузки /home/ulyssesd
rm -fR

/Музыка
ln -s /media/ulyssesd/My_Home/ulyssesd/Музыка /home/ulyssesd
rm -fR

/Рабочий\ стол
ln -s /media/ulyssesd/My_Home/ulyssesd/Рабочий\ стол /home/ulyssesd
rm -fR

/Общедоступные
ln -s /media/ulyssesd/My_Home/ulyssesd/Общедоступные /home/ulyssesd
rm -fR

/Dropbox
ln -s /media/ulyssesd/My_Home/ulyssesd/Dropbox /home/ulyssesd
rm -fR

/Yandex.Disk
ln -s /media/ulyssesd/My_Home/ulyssesd/Yandex.Disk /home/ulyssesd

Отдельно хочу остановится на каталоге "Рабочий стол", т.к. он в имени имеет пробел, то в команде для терминала его необходимо использовать следующим образом "Рабочий\ стол"
Результаты работы можно оценить визуально



Все, мы решили поставленную задачу.

Если вдруг надумаете удалять симлинки, то рекомендую обязательно! размонтировать раздел на который они ссылаются и после этого уже их удалять, иначе можете удалить и каталог на который они ссылаются.

Символическая ссылка, также известная как символическая ссылка или программная ссылка, представляет собой специальный тип файла, который указывает на другой файл или каталог.

Типы ссылок

В системах Linux / UNIX есть два типа ссылок:

    Hard links . Вы можете придумать жесткую ссылку как дополнительное имя для существующего файла. Жесткие ссылки связывают два или более имен файлов с одним и тем же индексом . Вы можете создать одну или несколько жестких ссылок для одного файла. Жесткие ссылки не могут быть созданы для каталогов и файлов в другой файловой системе или разделе.

Как использовать ln команду

ln утилита командной строки для создания ссылок между файлами По умолчанию ln команда создает жесткие ссылки. Чтобы создать символическую ссылку, используйте параметр -s ( --symbolic ).

ln Синтаксис команды для создания символических ссылок выглядит следующим образом :

  • Если оба FILE и LINK приведены, ln создаст ссылку из файла , указанного в качестве первого аргумента ( FILE ) в файл , указанный в качестве второго аргумента ( LINK ).

По умолчанию в случае успеха ln не выводит никаких данных и возвращает ноль.

Создание символической ссылки на файл

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

Замените source_file на имя существующего файла, для которого вы хотите создать символическую ссылку, и symbolic_link на имя символической ссылки.

symbolic_link Параметр является необязательным. Если вы не укажете символическую ссылку, ln команда создаст новую ссылку в вашем текущем каталоге:

В следующем примере мы создаем символическую ссылку с именем my_link.txt файла my_file.txt :


Чтобы убедиться, что символическая ссылка была успешно создана, используйте ls команду:


Вывод будет выглядеть примерно так:


Символ l представляет собой флаг типа файла, который представляет символическую ссылку. В -> символ показан файл символическая ссылка указывает.

Создание символических ссылок на каталог

Команда для создания символической ссылки на каталог такая же, как и при создании символической ссылки на файл. Укажите имя каталога в качестве первого параметра и символическую ссылку в качестве второго параметра.

Например, если вы хотите создать символическую ссылку из /mnt/my_drive/movies каталога в

/my_movies каталог, вы должны выполнить:


Перезапись символических ссылок


Чтобы перезаписать путь назначения символической ссылки, используйте параметр -f ( --force ).


Удаление символических ссылок

Чтобы удалить символические ссылки, используйте команду unlink или rm .

Синтаксис unlink очень прост:

Удаление символической ссылки с помощью rm команды аналогично удалению файла:

Независимо от того, какую команду вы используете, при удалении символической ссылки не добавляйте / косую черту в конце ее имени.

Если вы удалите или переместите исходный файл в другое место, символический файл останется висящим (сломанным) и должен быть удален.

Вывод

Для создания символической ссылки в Linux используйте ln команду с -s опцией.

Для получения дополнительной информации о ln команде посетите страницу руководства ln или введите man ln свой терминал.

Как создаются и работают ссылки Windows, или что можно сделать при помощи mklink.

СПРАВКА, или что такое ссылка для Windows?

documents and settings windows xp

А вот она в Windows 7:

documents and settings windows7

загляните внутрь папки Documents and Settings: ничего не замечаете?

А в Windows 10 этой папки нет? Вскроем скрытые файлы и папки:

documents and settings нет в windows 10 ?

Да нет, всё на месте:

Documents and Settings в windows10

Чем отличаются символьные ссылки от стандартных ярлыков?

Таким образом, в отличии симлинка от обычного ярлыка и кроется её основное предназначение: Windows относится к симлинку как к настоящей папке. Т.е. разницы между ними нет. Одна и та же папка может находится сразу в нескольких местах. Представьте, что у вас есть программа, файлы которой ОБЯЗАТЕЛЬНО должны находиться по адресу C:\Program Files. Только системный диск забит и места на диске С уже нет. А вот другой диск или том под буквой, например, D полупуст. Вам нужно лишь перетащить вашу программу на диск D, создав попутно папку типа D:\Программа, создав в папке C:\Program Files симлинк на D:\Программа. И, если в вашем арсенале есть такие инструменты как виртуальный хранилища данных на манер like Dropbox, Google Drive, Яндекс.Диск или OneDrive, пространство рабочей зоны Windows можно серьёзно увеличить.

Создавая ссылки для Windows: mklink

справка mklink

Итак, что видно по справке?

  • mklink может создавать ссылки не только на сами папки и файлы, но и на такие же символьные ссылки
  • если не использовать аргумент /d, будет создана символьная ссылка на файл
  • если флаг /d применяется в команде, то появится символьная ссылка на папку/директорию

создать простую символическую ссылку

сохранение файла через символьную ссылку

А зачем это надо-то?

Да, казалось бы, в том варианте как описывается, разницы между созданием обычного ярлыка для файла или папки нет. Но это лишь на первый взгляд. Ну, представьте себе, что купленная только что игра требует установиться в корневую C:\Games (как обычно), требуя при том свободного места на диске С этак Гбайт 30. И при этом карта системного диска С выглядит примерно так:

диск С забит

справится с задачей в два счёта. И оп: игра-то думает, что её установили в нужную папку. А это не так, на самом деле. Какие ещё варианты? Я не особо игрок, но для меня, обладателя огромного количества виртуальных машин, которые занимают немало пространства, в такой ситуации тоже есть свои плюсы как решить проблему нехватки пространства для кучи виртуальных Windows.

Кроме того, создание ссылки подразумевает возможность быстрого к ней обращения: фактически вы создаёт новый путь. А он может быть максимально коротким. И тут в дело вступает возможность быстрого доступа из поисковой строки. Например, на одном из томов хранятся памятные фотографии, причём доступ к ним ограничен, а путь бесконечно долог для проводника. Создадим ссылку на манер:

А теперь набираем WIN + R, вводим D:\Фотки и работаем как хотим:

Ссылки Windows из mklink: о чём следует помнить?

суть символьной ссылки

ссылка помечена как Junction, а не DIR

Точки стыка (жёсткие связи), соединения и символические ссылки файловой системы NTFS

Итак, в чём основные отличия связующих ссылок?

Отличия между типами связей можно представить в таком виде:

Ну, вот такая в целом ситуация с типами внутренних связей Windows. Успехов.

Читайте также: