ln의 매개 변수 순서를 기억하기위한 팁? 순서가 잘못되었습니다. 이것은 일반적으로 다음과 같이 작성합니다. ln -s

나는 ln수년간 상징적 인 링크를 쓰는 데 사용 했지만 여전히 매개 변수의 순서가 잘못되었습니다.

이것은 일반적으로 다음과 같이 작성합니다.

ln -s a b

그런 다음 출력을보고 나 자신을 생각 나게합니다.

나는 a -> b그것이 실제로 반대 일 때 그것을 읽은 것처럼 항상 상상합니다 b -> a. 이것은 반 직관적 인 느낌이 들기 때문에 항상 제 자신을 추측합니다.

누구든지 올바른 순서를 기억하는 데 도움이되는 팁이 있습니까?



답변

나는 다음을 사용한다 : ln하나의 인수 형식 ( 맨 페이지에 나열된 두 번째 형식 )이 있고 목표 만 ln알면 (목표를 몰라도 전혀 작동하지 않을 수 있기 때문에 ) ln현재 디렉토리에 링크를 만든다. 2 인수 형식은 1 인수 형식에 추가 된 것이므로 대상은 항상 첫 번째 인수입니다.


답변

나는 ” ln와 같다 cp. ‘원본’이 먼저 와야한다.”


답변

대부분의 Unices는 ln명령을 다음과 같이 문서화합니다

ln source target

(여기에서 옵션 등을 생략하고 있습니다)

예 :

  • POSIX 표준

    ln [-fs] [-L|-P] source_file target_file
    
  • OpenBSD :

    ln [-fhLnPs] source [target]
    
  • NetBSDFreeBSD

    ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
    
  • 맥 OS

    ln [-Ffhinsv] source_file [target_file]
    
  • 솔라리스

    /usr/bin/ln [-fns] source_file [target]
    
  • AIX

    ln [ -f | -n ] [ -s ] SourceFile [ TargetFile ]
    

는 GNU ln매뉴얼은 호출 source 대상target LINKNAME을 .

단어의 GNU 선택을 무시하고 ln유틸리티는 예를 들어, 같은 의미의 동일한 종류를 다음 mvcp점에서 대상 으로부터 생성되는 것입니다 소스 .

따라서,

ln -s a b

b가리키는 심볼릭 링크를 만듭니다 a.

또한 심볼릭 링크를 만들 때 소스는 단순히 심볼릭 링크가 가리키는 것을 나타내는 문자열입니다. 일반적으로 유용한 정보를 가리키는 지 확인하기위한 검사는 없습니다.

$ ln -s "hello world" README.txt
$ ls -l
total 0
lrwxr-xr-x  1 kk  wheel  11 Sep 15 11:39 README.txt -> hello world


답변

이것이 누군가에게 도움이되는 경우 : 나는 그것을 “ln what where ” 로 생각하는 데 익숙해졌습니다 . 첫 번째 인수 ( “what”)는 기존 파일이고 두 번째 인수 ( “where”)는 장소입니다 그것을 (링크) 넣습니다. 대부분의 다른 대답의 추론과는 달리, 이것은 기억 보조제 역할을하는 명령을 입력 할 때 정신적으로 암송 할 수있는 까다로운 문구에 지나지 않습니다. 이것은 아마도 모든 사람에게 유용하지는 않지만 일부 사람들에게는 도움이 될 것으로 생각됩니다.

다른 표준 파일 조작 명령이 동일한 규칙을 사용하는 데 도움이되므로 cpand에 대해서도 동일한 작업을 수행 할 수 있습니다 mv.


답변

나는 최근에이 특별한 것을 기억하는 좋은 방법을 들었습니다 : 운율

오래된 것, 새로운 것

빌린 물건, 파란 물건,

그녀의 신발에 6 펜스.

첫 번째 구절은 ln의 인수입니다. 오래된 것 뒤에 새 디렉토리 항목의 이름이옵니다.


답변

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 매뉴얼 .

있다 둘째 , 간단한 문법 형태.


편집 : 나는 주소 등의 의견을 참조 또한 하단의 매우 긴 또한 참조 — TARGET 대신 FILE 또는 FILENAME을 넣어 빙산, 하드와 소프트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 ( “target”또는 “source”)과 동일한 이름이 있습니다. 선택도없고 혼란도 없습니다.

당신이 더 요구하고 아래에 생성 링크하려면 이제 다른 이름 및 / 또는 다른 곳을 , 당신은 추가 이름이나 경로로 그 소원을. 실제 목표는 첫 번째로, 환상의 새 링크 이름은 두 번째입니다.


또는 “당신은 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않으며 화살표가 표시되지 않습니다. (하드) 링크에는 방향이 없기 때문입니다. 유닉스 진화 단계에서 “링크”는 파일 시스템의 파일 이름 “B”(디렉토리 항목 “B”)가 파일 이름 “A”가 가리키는 것과 동일한 inode를 가리키는 것을 의미합니다.

파일 A와 B는 동일한 블록을 공유하기 때문에 “연결”됩니다. 이제 모든 rm에서 커널은 확인해야합니다 : 디스크 에서이 파일의 블록을 삭제 / 해제합니까, 아니면 동일한 블록에 연결된 다른 파일이 있습니까? 이를 위해 링크 카운터가 사용됩니다.

삭제되는 / tmp grom에 큰 파일을 유지하고 싶다고 가정하십시오 ln /tmp/bigfile. 이제 작업 디렉토리에 큰 파일이 있습니다. / tmp를 청소하고 “원본”을 이동 한 후에는 동일한 데이터 블록을 사용하는 것이 좋습니다. 연결이 끊어 지거나 매달려 있지 않으면 정상적인 파일이 있습니다. 파일을 가리 키지 않고 파일 시스템 만 가리키는 것은 모든 dir 항목과 마찬가지로 차단합니다. 현재 “청소”/ tmp는 그다지 효율적이지 않습니다. 비어있는 것처럼 보이지만 파티션의 블록은 해제되지 않습니다.

하드 링크는 cp처럼 간접적으로 공간 자체를 소비하지는 않지만 간접적으로 가능합니다.

ln -s위 시퀀스에 추가 :

ln -s A B   --- copy only the file's name to "B"

이제 소프트 링크 인 “B”에는 경로 이름이있는 문자열 만 있습니다. “소프트”정보입니다. 기술적으로 “A”와 “B”는 관련이 없습니다. 그러나 여전히 B는 새로운 의미에서 “링크”이며, 저장된 경로 이름 을 “A” 의 바로 가기 로 사용할 수 있습니다 . 이제는 “A에 대한 링크” (기간)이며 “파일 A의 inode와 연결 되지 않았습니다

두 종류의 링크는 인간뿐만 아니라 커널 / fs도 혼동 할 수 있습니다. 1971 맨 페이지 참고 : “BUGS : 링크가 두 번 백업되고 별도의 inode가있는 별도의 파일로 복원됩니다.”

디렉토리에 대한 하드 링크 (희귀 / 허용되지 않음)는 쉽게 막힘을 유발할 수 있습니다.

디렉토리에 대한 소프트 링크 (매우 일반적)는 영구 루프로 이어질 수 있습니다. 유틸리티 / 커널에 의해 인식되어야합니다.

bash에서의 실제 예

일반 파일 “F”로 시작하는 중 …

ln F Fhard

… Fhard를 F와 같은 크기로 만들지 만 둘 다 화살표가없는 진한 빨간색으로 나타납니다 ls -l --color. stat“Inode : xyz”와 관련하여 “Links : 2” 를 표시 하기 때문입니다 . 하드 링크 F는 F 자체를 하드 링크로 바꿉니다. 둘 다 / stay 파일 유형 “일반 파일”입니다. 그러나 둘 다 1보다 큰 링크 수를 가진 inode를 가지고 있습니다.

   ln -s F Fsoft

… 파일 유형이 “symbolic link”인 작은 “비정규”파일 “Fsoft”를 만듭니다. — 빈 디렉토리보다 훨씬 더 많은 공간을 절약합니다. A ls -l는 “F”에 특별한 것을 보여주지 않습니다. Fsoft의 경우 문자열이 ‘F’이므로 표시된 크기는 1 바이트이며 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의 크기는 “1 바이트, 제로 블록”입니다. F와 Fhard는 동시에 일탈합니다 :

6074368 F  6074368 Fhard    0 Fsoft@

Fsoft가 매달려 있는지 여부를 확인하려면 ls색상을 사용하십시오.

ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file


답변

링크 이름은 선택 사항임을 기억하는 것이 정말 도움이됩니다. 지정하지 않으면 링크 대상의 기본 이름이 사용됩니다.

ln -s /path/to/file1 file1

링크 이름을 완전히 삭제하는 것과 같습니다.

ln -s /path/to/file1

링크 대상이 마지막으로 언급 된 경우에는 의미가 없습니다.