Як я можу символізувати файл у Linux? [зачинено]


1938

Я хочу зробити символічне посилання в Linux. Я написав цю команду Bash, де перший шлях - це папка, до якої я хочу посилання, а другий шлях - це скомпільоване джерело.

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

Це правильно?


Вам, мабуть, варто задати це питання на unix.stackexchange.com
Guss

Відповіді:


3677

Щоб створити нове посилання (не вдасться, якщо символьне посилання вже існує):

ln -s /path/to/file /path/to/symlink

Щоб створити або оновити символьне посилання:

ln -sf /path/to/file /path/to/symlink

381
@micapam lnСинтаксис схожий на cpсинтаксис, наприклад, джерело призначення .
Андрій

157
Ось мнемонічний для вас: l (i) n (k) -s (ymbolic) <target> <необов'язкове ім'я> (той факт, що останній параметр є необов'язковим, допомагає зрозуміти, що це не ціль) (btw залишаючи шлях до символьної посилання створює посилання в поточному каталозі з тим самим
базовим іменем, що

32
@micapam Подібно до того , як cpце CoPy, lnє LiNk. Перша і третя букви.
Коул Джонсон

68
Я провів кілька хвилин, намагаючись зрозуміти, чому це не працює для мене. Він створив посилання, що самоконтролюється. Здається, що / шлях / до / файл повинен бути абсолютним, а не відносно "поточної папки". Можливо, вказати на це у відповіді?
Абхішек Ананд

52
@AbhishekAnand це було пару років, але я просто хотів би залишити записку , що робить роботу з відносними шляхами; він просто повинен бути відносно отриманого каталогу символьної посилання, а не поточного каталогу. Те, що ви пишете як аргумент першого шляху, - це насправді, дослівно, текст, який буде знаходитися всередині символічної ланки; тому, коли це відносно, воно повинно бути відносно посилання.
JoL

302
ln -s TARGET LINK_NAME

Де це -sробить символічним.


2
TARGET & LINKNAME - кращий спосіб запам'ятати. btw для видалення символьного посилання:unlink LINK_NAME
Silvan

31
Я хотів би висловити це в такий спосіб: ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
totymedli

@Silvan ви можете видалити симпосилання за допомогою rm, але більшість людей не знають, як видалити останнє /.
FreeSoftwareServers

288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

2
Краще, ніж прийнята відповідь і покрита однозначною короткістю.
Джош Хабдас

3
За винятком того, що це не нове ім'я символьного посилання. Це ім'я або повний шлях (відносно cur dir або абсолютного) для нового символьного посилання, включаючи ім'я.
Девід Спектор

ln -s EXISTING_FILE_OR_DIRECTORY {необов'язковий шлях до /} SYMLINK_NAME і не слід ставити проміжок на символьному посиланні, оскільки це не каталог
comfytoday,


88

(Тому що зображення ASCII вартує тисячі символів.)

Стріла може бути корисною мнемонією, тим більше, що це майже точно так, як це виглядає в Emacs 'dired.

І велика картина, щоб не плутати її з версією Windows

Linux:

ln -s target <- linkName

Windows:

mklink linkName -> target

Ви також можете подивитися на це як

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

Це ще from-hereне повинно існувати, воно має бути створене, тоді як воно to-hereповинно вже існувати (IIRC).

(Я завжди змішуюся з приводу того, чи повинні різні команди та аргументи включати попередньо існуюче місце чи таке, яке потрібно зробити.)

РЕДАКТУВАННЯ: Він все ще повільно занурюється в мене; У мене є інший спосіб, який я записав у своїх замітках.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)

У Emacs ' diredце дуже просто, коли ви кладете курсор на вашу ціль, натискаєте Sта вводите каталог, де ви хочете створити посилання. Скорочує розрив між уявленням про бажаний результат та набором тексту. Див gnu.org/software/emacs/manual/html_node/emacs / ... .
Брейді Тренер

2
Моя мнемонія ввімкнена: ln -s Original Newfile (symlink)
robstarbuck

це працювало для мене
Хайдер Алі


22

До початкового питання:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

Це дійсно створить символічне посилання ( -s) з файлу / каталогу:

<basebuild>/IpDome-kernel/kernel

до вашого нового посилання

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

Ось кілька способів допомогти вам запам'ятати:

По-перше, тут є сторінка для людиниln . Ви можете отримати доступ до цього за допомогою пошуку "man ln" в google, або просто відкрийте вікно терміналу та введіть, man lnі ви отримаєте ту саму інформацію. На сторінці чоловіка чітко зазначено:

ln [ОПЦІЯ] ... [-T] ЦІЛЬНА LINK_NAME (1-а форма)


Якщо вам доводиться шукати чи читати на чоловічій сторінці кожен раз, якщо це не для вас, можливо, вам буде легше запам’ятати, що всі команди nix працюють однаково:

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp копіює файл, який існує на даний момент (перший аргумент), у новий файл (другий аргумент).
mv переміщує файл, який існує в даний час (перший аргумент), на нове місце (другий аргумент)

Аналогічно lnпосилається файл, який існує на даний момент (перший аргумент), до нового посилання (другий аргумент) *


Остаточний варіант, який я хотів би запропонувати, - це ви можете створити власні чоловічі сторінки, які легко читати і легко (для вас) знайти / запам'ятати. Просто зробіть простий скрипт оболонки, який дає вам підказку. Наприклад :

У файлі .bash_aliases ви можете розмістити щось на кшталт:

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

Потім, коли вам це потрібно, просто введіть командний рядок, cmdsі ви отримаєте відповідний синтаксис таким чином, щоб ви могли швидко його прочитати та зрозуміти. Ви можете зробити ці функції настільки вдосконаленими, як хотіли б отримати те, яка інформація вам потрібна, саме від вас залежить. Ви навіть можете зробити їх інтерактивними, так що вам просто потрібно дотримуватися підказок .. щось на кшталт:

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

* - очевидно, що всі вони можуть приймати різні параметри і робити різні речі і можуть працювати як з файлами, так і з каталогами ... але передумова однакова
♦ - приклади, що використовують оболонку bash


18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.

16

Створення символьних або м'яких посилань на Linux:

Відкрийте підказку Bash і введіть вказану нижче команду, щоб зробити символічне посилання на ваш файл:

A) Перейдіть до папки, в якій потрібно створити м'яке посилання, і введіть команду, як зазначено нижче :

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

B) Перейдіть до шляху імені нового файлу та введіть його :

$ ls -lrt (To see if the new-file is linked to the file or not)

Приклад:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B

12

ln -s sourcepath linkpathname

Примітка:

-s робить символічні посилання замість жорстких посилань


11

Якщо ви знаходитесь в каталозі, де ви хочете створити посилання, ігноруйте другий шлях.

cd myfolder
ln -s target

Це створить симпосилання targetзсередини myfolder.

Загальний синтаксис

ln -s TARGET LINK_NAME

11

Це переповнення стека, тому я вважаю, що ви хочете код:

Усі наступні коди передбачають, що ви хочете створити символічне посилання, на /tmp/linkяке посилаються /tmp/realfile.

ПОПЕРЕДЖЕННЯ . Хоча цей код перевіряє помилки, він НЕ перевіряє, чи /tmp/realfileіснує насправді! Це тому, що мертве посилання все ще діє, і залежно від вашого коду, ви можете (рідко) хочете створити посилання перед реальним файлом.


Shell (bash, zsh, ...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

По-справжньому просто, як і в командному рядку (це оболонка). Всі помилки обробляються інтерпретатором оболонки. Цей код передбачає, що у вас працює робочий інтерпретатор оболонки /bin/sh.

Якщо потрібно, ви все ще можете реалізувати власну операцію з помилками, використовуючи $?змінну, яка буде встановлена ​​на 0 лише в тому випадку, коли посилання було успішно створено.

C і C ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinkповертає 0 лише тоді, коли посилання можна створити. В інших випадках я використовую perrorдокладніше про проблему.

Perl

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

Цей код передбачає, що у вас є перекладач perl 5 /usr/bin/perl. symlinkповертає лише 1, якщо посилання можна створити. В інших випадках я друкую причину відмови на стандартний вихід помилки.


1
Пояснення додано, також слово обережності для мертвих посилань. Я не перевіряю цього, тому що не можна припустити, що цього не потрібно, а також тому, що файлові тести вже не на темі
Гаро

8

Я хотів би представити простіший англійський варіант уже представлених описів.

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

Команда "ln" створює посилання-FILE, а "-s" вказує, що тип посилання буде символічним. Приклад файлу символічної посилання можна знайти в установці WINE (використовуючи "ls -la" для показу одного рядка вмісту каталогу):

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

Стандартна інформація про файл - ліворуч (хоча, зверніть увагу, перший символ - це "l" для "посилання"); ім'я файлу - "a:", а "->" також означає, що файл є посиланням. Це в основному розповідає WINE, як Windows "Drive A:" має бути пов'язаний з дискетою в Linux. Справді створити символічне посилання SIMILAR на це (у поточному каталозі, а реально зробити це для WINE складніше; скористайтеся утилітою "winecfg"):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists

7

Щоб створити символічне посилання / м'яке посилання, використовуйте:

ln -s {source-filename} {symbolic-filename}

наприклад:

ln -s file1 link1

4

Існує два типи посилань:

символічні посилання: див. символьний шлях із зазначенням абстрактного розташування іншого файлу

посилання: див. конкретне місце фізичних даних.

У вашому випадку посилання:

ln -s source target

ви можете посилатися на http://man7.org/linux/man-pages/man7/symlink.7.html

ви можете створити занадто жорсткі посилання

Жорстке посилання на файл не відрізняється від оригінального запису каталогу; будь-які зміни у файлі фактично не залежать від імені, яке використовується для посилання на файл. Жорсткі посилання зазвичай не можуть посилатися на каталоги та можуть не охоплювати файлові системи.

ln source link

4

Посилання в основному двох типів:

Символічні посилання (м'які): посилання на символічний шлях із зазначенням абстрактного розташування іншого файлу

Постійні посилання: посилання на конкретне місце фізичних даних.

Приклад 1:

ln /root/file1 /root/file2

Наведене вище - приклад жорсткого посилання, де ви можете мати копію фізичних даних.

Приклад 2:

ln -s /path/to/file1.txt /path/to/file2.txt

Вищевказана команда створить символічне посилання на file1.txt.

Якщо ви видалите вихідний файл, тоді у вас не буде нічого в пункті призначення в м'якому режимі.

Коли ви робите:

ls -lai

Ви побачите, що для символьних посилань існує інше число inode.

Для отримання більш детальної інформації, ви можете прочитати довідкову сторінку ln у вашій ОС Linux.


hard link where you can have a copy of your physical data- Я думаю, ми не створюємо копії фізичних даних. Просто інша назва тих самих фізичних даних.
Олександр Радченко

3

Я знаходжу трохи заплутаних термінологій "target" та "directory" в інформації про людину.

Ціль - це папка, до якої ми посилаємось, і каталог власне символьне посилання (а не каталог, у який ви будете посилатися), якщо хтось відчуває ту саму плутанину, не відчувайте себе самотнім.

Це моя інтерпретація створення Symlink (в Linux):

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

Ви можете перейти до папки, де ви хочете створити симпосилання, і запустити команду або вказати ПОВНУЮ ПУТКУ для вашої символьної посилання замість NAME-OF-YOUR-SYMLINK.

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

АБО

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

Я сподіваюся, що це допомагає тим, хто (все ще) трохи розгублений.


-2

Як створити символьне посилання в бродячому. Кроки:

  1. У файлі бродяж створіть синхронізовану папку. наприклад config.vm.synced_folder "F: / Sunburst / source / sunburst / lms", "/ source" F: / Sunburst / source / sunburst / lms: - де вихідний код, / source: - шлях до каталогу до бродячого
  2. Прокручуйте і введіть vagrant ssh та перейдіть до каталогу джерел, наприклад, cd source
  3. Перевірте, чи наявна структура папки вихідного коду у вихідному каталозі. наприклад / джерело / місцевий
  4. Потім перейдіть до каталогу гостьової машини, де файли, пов’язані з браузером. Після отримання резервної копії файлу. наприклад, sudo mv local local_bk
  5. Потім створіть символьне посилання, наприклад, sudo ln -s / source / local local. місцеве середнє ім'я посилання (ім'я папки в гостьовій машині, на яку ви збираєтесь зв’язатись), якщо вам потрібно видалити символьне посилання: - Введіть sudo rm local
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.