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
a
, 그리고 전화b
"