![홈 폴더에 대한 하드 링크를 안전하게 삭제하는 방법은 무엇입니까?](https://linux55.com/image/31161/%ED%99%88%20%ED%8F%B4%EB%8D%94%EC%97%90%20%EB%8C%80%ED%95%9C%20%ED%95%98%EB%93%9C%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 사용자가 소유한 폴더에는 /sites/Website
이라는 디렉터리가 있습니다 ~
.
이 디렉토리에 들어가면 내 홈 폴더 cd
로 리디렉션됩니다 .~/
처음에는 심볼릭 링크인 줄 알았는데 실제로 해보니 ls -al
평범하다는 걸 깨달았습니다. 나는 이것이 하드 링크라고 가정합니다. 난 달린다:
$ rm -r /sites/Website/~
이로 인해 실제로 홈 폴더가 삭제되기 시작했고 많은 데이터가 손실되었습니다. 나는 멈췄다 rm
. Ctrlc이 링크를 안전하게 제거하려면 어떻게 해야 합니까?
답변1
~
많은 쉘은 경로 이름 시작 부분의 슬래시 앞의 물결표( )를 HOME 디렉토리의 절대 경로로 확장합니다. 물결표 문자를 인용하거나 물결표가 경로 이름을 시작하지 않도록 하여 이 쉘 확장을 방지할 수 있습니다.
$ echo "$HOME"
/home/idallen
$ echo ~
/home/idallen
$ echo "~"
~
$ echo \~
~
$ echo ./~
./~
Unix 자체에는 물결표 문자에 대한 특별한 사항이 없으므로 위의 방법 중 하나를 사용하여 쉘 확장을 방지하기 위해 물결표를 숨긴다면 물결표라는 디렉토리를 만들 수 있습니다.
$ mkdir "~"
$ ls -ld '~'
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld \~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld ./~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld /tmp/idallen/~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 /tmp/idallen/~
쉘에서 앞의 물결표 문자를 숨기지 않으면 쉘은 이를 HOME 디렉토리로 확장합니다. echo
명령줄 접두어는 쉘이 명령줄을 실행하기 전에 명령줄에 수행한 작업을 보여줍니다.
$ echo cd ~
cd /home/idallen # would go to $HOME directory
$ echo cd ./~
cd ./~ # would go into directory named ~
다음 명령은 인용되지 않은 선행 물결표를 확장하는 쉘에 따라 매우 다른 효과를 갖기 때문에 물결표를 인용해야 한다는 것을 발견했습니다.
$ echo rm -r ~
rm -r /home/idallen # would remove the $HOME directory
$ echo rm -r "~"
rm -r ~ # would remove the directory named ~
$ echo rm -r ./~
rm -r ./~ # would remove the directory named ~
$ echo rm -r /tmp/idallen/~
rm -r /tmp/idallen/~ # would remove the directory named ~
물결표 시작 부분에 따옴표가 없는 경로 이름만 홈 디렉토리로 확장됩니다.