홈 폴더에 대한 하드 링크를 안전하게 삭제하는 방법은 무엇입니까?

홈 폴더에 대한 하드 링크를 안전하게 삭제하는 방법은 무엇입니까?

내 사용자가 소유한 폴더에는 /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 ~

물결표 시작 부분에 따옴표가 없는 경로 이름만 홈 디렉토리로 확장됩니다.

관련 정보