먼저, 저는 공유 서버에 있고 루트 액세스 권한이 없으므로 su 또는 sudo와 관련된 모든 것은 의문의 여지가 없습니다.
AFAIK ln 및 Linux는 심볼릭 링크의 대상이 존재하는지 또는 사용자에게 액세스 권한이 있는지 확인하는 데 신경을 써서는 안 됩니다. 그러나 어떤 이유로 이런 일이 발생합니다.
[email protected] [~/tmp/test]# ls -la
total 8
drwxr-xr-x 2 user user 4096 Aug 17 14:52 ./
drwxr-xr-x 13 user user 4096 Aug 17 14:52 ../
[email protected] [~/tmp/test]# ln -s target a
ln: failed to create symbolic link 'a': No such file or directory
[email protected] [~/tmp/test]# ls -la
total 8
drwxr-xr-x 2 user user 4096 Aug 17 14:52 ./
drwxr-xr-x 13 user user 4096 Aug 17 14:52 ../
[email protected] [~/tmp/test]# touch target
[email protected] [~/tmp/test]# ls -la
total 8
drwxr-xr-x 2 user user 4096 Aug 17 14:53 ./
drwxr-xr-x 13 user user 4096 Aug 17 14:52 ../
-rw-r--r-- 1 user user 0 Aug 17 14:53 target
[email protected] [~/tmp/test]# ln -s target a
[email protected] [~/tmp/test]# ls -la
total 8
drwxr-xr-x 2 user user 4096 Aug 17 14:53 ./
drwxr-xr-x 13 user user 4096 Aug 17 14:52 ../
lrwxrwxrwx 1 user user 6 Aug 17 14:53 a -> target
-rw-r--r-- 1 user user 0 Aug 17 14:53 target
[email protected] [~/tmp/test]#
보시다시피 ln은 존재하지 않는 대상에 대한 심볼릭 링크 생성을 거부합니다.
또한 읽기 권한이 없는 대상, 읽기 권한이 없는 디렉터리에 있는 대상, 심지어 권한이 있는 파일에 대한 심볼릭 링크 생성을 거부합니다. 상위 디렉터리부터 루트 디렉터리까지.
또한 Python의 os.symlink() 함수를 사용해 보았지만 동일한 문제가 발생했습니다.
저는 여기서 정말 혼란스러워요.
답변1
현재 있는 디렉토리를 삭제하기 위해 다른 세션을 사용할 수 있습니까?
다음을 사용하여 오류 메시지를 재현할 수 있습니다.
mkdir -p ~/tmp/test
cd ~/tmp/test
<< in another window: rmdir ~/tmp/test >>
ln -s target a
ln: failed to create symbolic link 'a': No such file or directory
이 경우 다른 셸을 시작하려고 해도 다음 오류 메시지가 나타납니다.
bash
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
즉, 오류 메시지는 다음 ln
을 의미할 수 있습니다.대상 디렉토리더 이상 존재하지 않습니다. 디렉토리는 삭제되었지만 열린 파일로 처리됩니다. 쉘이 해당 파일을 열어두었기 때문에 쉘은 여전히 해당 파일에 액세스할 수 있지만 새 프로세스에서는 액세스할 수 없습니다.
cd ..
오류가 발생할 수도 있습니다.
cd ..
chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
cd ~/tmp
ls
<< directory is empty >>