심볼릭 링크는 일반 파일과 같은 방법으로 지운다. 지워지는 것은 링크 자체이고 원본에는 아무 영향이 없다.
rm mylink
unlink mylink
unlink 는 인자를 하나만 받고 디렉터리를 거부한다. 스크립트에서 "링크 하나만 지운다" 는 의도를 명확히 하고 싶을 때 쓴다.
지우기 전에 링크가 맞는지 확인한다. 권한 문자열의 첫 글자가 l 이면 심볼릭 링크다.
ls -l mylink
lrwxrwxrwx 1 root root 15 Oct 31 13:00 mylink -> /etc/somepath
디렉터리를 가리키는 링크에서 사고가 나는 지점은 -r 옵션이 아니라 이름 끝의 슬래시다.
rm 은 심볼릭 링크를 따라가지 않는다. 그래서 rm -r mylink 도 링크만 지운다. 하지만 mylink/ 처럼 슬래시를 붙이면 커널이 링크를 해석해 원본 디렉터리를 가리키게 되고, 그 안의 내용이 지워진다.
rm -r mylink # 링크만 지워진다
rm -r mylink/ # 원본 디렉터리의 내용을 지운다 — 위험
탭 완성은 디렉터리를 가리키는 링크 뒤에 슬래시를 자동으로 붙인다. 이것이 사고의 실제 경로다. 완성한 뒤 슬래시를 지우는 습관을 들이거나, 애초에 -r 없이 지운다.
rm mylink # 가장 안전한 형태
원본이 사라진 링크(dangling symlink)는 화면에서 붉게 보이지만 그것만으로는 목록을 만들기 어렵다.
find /path -xtype l
-xtype l 은 "따라간 결과가 링크인 것", 즉 가리키는 대상이 없는 링크만 골라낸다. 지우려면 이어서 실행한다.
find /path -xtype l -print -delete
링크 전체를 보려면 -type l 을 쓴다.
find /path -maxdepth 1 -type l -ls
하드 링크는 같은 inode 를 가리키는 또 하나의 이름이다. 하나를 지워도 링크 카운트만 줄고, 카운트가 0 이 될 때까지 실제 데이터는 남는다.
stat -c '%h %i %n' myfile
첫 번째 숫자가 링크 카운트다. 심볼릭 링크는 원본을 지우면 즉시 끊어지지만, 하드 링크는 다른 이름이 남아 있는 한 파일이 살아 있다.
rm -rf 를 습관적으로 붙인다 — 링크를 지울 때 -r 은 필요 없다. 옵션이 없으면 후행 슬래시 사고도 나지 않는다.rm 대신 다른 도구를 쓴다 — rsync --delete 나 find -exec rm -r {} + 같은 것은 링크 취급 규칙이 다르다. 대상 목록을 먼저 출력해 확인한다.ln -sfn /new/target mylink
-n 이 없으면 mylink 가 이미 디렉터리를 가리키는 링크일 때 링크 안쪽에 새 링크가 생긴다.
find -exec 사용 형태.