Linux에서 파일을 심볼릭 링크하려면 어떻게해야합니까? [닫은]


1939

리눅스에서 심볼릭 링크를 만들고 싶습니다. 첫 번째 경로는 링크하려는 폴더이고 두 번째 경로는 컴파일 된 소스 인이 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합니다 (예 : source destination) .
Andrey

157
다음은 니모닉입니다. l (i) n (k) -s (ymbolic) <target> <optional name> symlink의 경로는 현재 디렉토리에 대상과 동일한 기본 이름을 가진 링크를 작성합니다)
UncleZeiv

32
@micapam은 마찬가지로 cp이다 CoPy, ln입니다 LiNk. 첫 번째와 세 번째 글자.
Cole Johnson

68
나는 이것이 왜 효과가 없는지 알아 내려고 몇 분을 보냈다. 자체 루프 링크를 작성했습니다. / path / to / file은 절대적이어야하며 "현재 폴더"와 관련이 없어야합니다. 아마도 대답에서 이것을 지적합니까?
Abhishek Anand

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
허용 된 답변보다 낫고 모호하지 않은 간결함으로 덮여 있습니다.
Josh Habdas

3
새로운 심볼릭 링크 이름이 아닌 것을 제외하고. 이름을 포함하여 새 심볼릭 링크의 이름 또는 전체 경로 (cur dir 또는 absolute에 상대적)입니다.
David Spector

이 디렉토리가 아니다으로 LN -s EXISTING_FILE_OR_DIRECTORY {/에 대한 선택적 경로를} SYMLINK_NAME하고, 심볼릭 링크에 후행 슬래시를 넣지 마십시오
comfytoday


88

(ASCII 그림은 천 자의 가치가 있기 때문에.)

화살표는 유용한 니모닉 일 수 있습니다. 특히 Emacs에서 거의 정확하게 보이는 방식이기 때문입니다.

큰 그림이므로 Windows 버전과 혼동되지 않습니다.

리눅스 :

ln -s target <- linkName

윈도우 :

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/…를 참조하십시오 .
Brady Trainor

2
내 니모닉이 켜져 있습니다 : ln -s Original Newfile (symlink)
robstarbuck

이것은 나를 위해 일했다
Haider Ali


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 있습니다. Google에서 "man ln"을 검색하여 액세스하거나 터미널 창을 열고 입력 man ln하면 동일한 정보를 얻을 수 있습니다. 매뉴얼 페이지에는 다음과 같이 명확하게 설명되어 있습니다.

[OPTION] ... [-T] TARGET LINK_NAME (첫 번째 형식)


매번 맨 페이지를 검색하거나 읽을 필요가 없다면 모든 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

symlink를 작성하려는 디렉토리에 있으면 두 번째 경로를 무시하십시오.

cd myfolder
ln -s target

target내부의 심볼릭 링크를 만듭니다 myfolder.

일반적인 문법

ln -s TARGET LINK_NAME

11

이것은 스택 오버플로이므로 코드를 원한다고 가정합니다.

모든 다음 코드라는 이름의 심볼릭 링크 생성 할 것으로 가정 /tmp/link링크에 있음을 /tmp/realfile.

주의 :이 코드는 오류를 검사하지만 /tmp/realfile실제로 존재 하는지 검사하지는 않습니다 ! 데드 링크는 여전히 유효하고 코드에 따라 실제 파일 전에 링크를 거의 생성하지 않을 수 있기 때문입니다.


셸 (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에는 문제에 대해 더 많이 알리기 위해 사용 하고 있습니다.

#!/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
설명은 또한 죽은 링크에 대한 경고 단어를 추가했습니다. 그것은 가정 할 수 없기 때문에 나는이 filetests이 주제에 더 이상도 있기 때문에 원하는되지 않고 있음이 확인 아니에요
개로

8

이미 제시된 설명의 평범한 영어 버전을 제시하고 싶습니다.

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

"ln"명령은 link-FILE을 작성하고 "-s"는 링크 유형이 기호가되도록 지정합니다. 심볼릭 링크 파일의 예는 WINE 설치에서 찾을 수 있습니다 ( "ls -la"를 사용하여 한 줄의 디렉토리 내용 표시).

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

표준 파일 정보 항목은 왼쪽에 있습니다 (첫 번째 문자는 "링크"의 경우 "l"임). 파일 이름은 "a :"이고 "->"는 파일이 링크임을 나타냅니다. 기본적으로 WINE에 Linux에서 Windows "Drive A :"가 플로피 드라이브와 연결되는 방법을 알려줍니다. 실제로 이와 유사한 심볼릭 링크를 작성하려면 (현재 디렉토리에서 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

두 가지 유형의 링크가 있습니다.

심볼릭 링크 : 다른 파일의 추상 위치를 나타내는 심볼릭 경로를 참조하십시오.

하드 링크 : 실제 데이터의 특정 위치를 참조하십시오.

귀하의 경우 symlinks :

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 번호가 있음을 알 수 있습니다.

자세한 내용은 Linux OS에서 ln의 매뉴얼 페이지를 읽을 수 있습니다.


hard link where you can have a copy of your physical data- 실제 데이터 사본 을 만들지 않는 것 같습니다 . 동일한 물리적 데이터에 대한 또 다른 이름입니다.
Alexander Radchenko

3

man 정보에서 "target"과 "directory"라는 용어를 혼동하는 것을 발견했습니다.

누군가가 같은 혼란을 겪고 있다면, 목표는 우리가 링크하고있는 폴더와 실제 심볼릭 링크 (디렉토리가 아닌 디렉토리)입니다.

이것은 Linux에서 Symlink를 만드는 것에 대한 나의 해석입니다.

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 :-vagrant 내의 디렉토리 경로
  2. vagrant up을 입력하고 vagrant ssh를 입력하고 소스 디렉토리로 이동하십시오.
  3. 소스 코드 폴더 구조가 소스 디렉토리에서 사용 가능한지 확인하십시오. 예 : / source / local
  4. 그런 다음 브라우저와 연관된 파일이있는 게스트 머신 디렉토리로 이동하십시오. 파일 백업 후. 예 : sudo mv local local_bk
  5. 그런 다음 symlink를 만듭니다 (예 : sudo ln -s / source / local local). symlink를 제거해야하는 경우 로컬 평균 링크 이름 (연결하려는 게스트 시스템의 폴더 이름) :-sudo rm local을 입력하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.