저는 2년 동안 리눅스를 사용해왔는데, 오늘 아주 이상한 일을 만났습니다. 서버에 nginx를 배포했는데 이것이 해당 로그 폴더입니다.
♪ log l -d nginx drwx------ 2 nginx nginx 4.0K Dec 7 03:15 nginx
(저는 zsh를 사용하고 있습니다. 이는 ♪ log
"log"라는 폴더에 있다는 의미입니다. 보시다시피 "nginx"라는 폴더에 없다고 나옵니다.)
액세스하려고 하면 다음과 같습니다.
♪ log cd nginx cd: permission denied: nginx ♪ log sudo cd nginx ♪ log
권한을 766으로 변경한 후에도 폴더에 여전히 액세스할 수 없습니다.
♪ log sudo chmod -R 766 nginx ♪ log l -d nginx drwxrw-rw- 2 nginx nginx 4.0K Dec 7 03:15 nginx ♪ log cd nginx cd: permission denied: nginx ♪ log sudo cd nginx ♪ log
누구든지 나에게 이것을 설명해 줄 수 있습니까?
답변1
가장 큰 이유는 sudo cd nginx
nginx 폴더에 들어갔다가 종료되었기 때문입니다. 따라서 명령을 시작하기 전의 상태로 돌아갑니다 sudo
.
이는 예제와 동일하며 sudo ls nginx/*
내용을 나열하고 종료됩니다 nginx folder
.
sudo
요청된 권한으로 새 프로세스를 생성하고 요청된 명령을 실행합니다. 명령이 완료되면 sudo가 종료되고 이전 상황으로 돌아갑니다.
이를 이해하려면 파일 시스템 내의 위치가 사용 중인 쉘 프로그램에 의해 동적으로 관리된다는 점을 이해해야 합니다. 프로세스가 분기되면 셸 컨텍스트가 새 프로세스에 복사됩니다. 복사 컨텍스트에 대한 각 작업은 해당 컨텍스트에만 적용되며 상위 컨텍스트에 영향을 주지 않습니다. 따라서 우리의 경우 수정되는 것은 상위 프로세스의 cd nginx
프로세스가 아닌 새로운 프로세스의 프로세스입니다 . $PWD
완료되면 관련 컨텍스트가 삭제되고 수정되지 않은 상위 컨텍스트로 돌아갑니다.
다른 사람이 설명했듯이 폴더로 이동하려면 실행 권한(+x)도 있어야 합니다.
답변2
사용자는 디렉토리를 변경하려면 디렉토리에 대한 실행 권한이 있어야 합니다.
예를 들어 질문을 참조하세요.cd로 디렉토리에 들어가세요".
루트 가 아닌 일반 사용자로 nginx
이 디렉터리로 변경 하려면 먼저 이 셸 세션을 사용하여 루트 셸을 시작하고 액세스 할 sudo chmod o+x nginx
수도 있습니다 .sudo -s
sudo cd nginx
별 의미가 없습니다. 성공 cd
하지만 sudo
프로세스가 종료되면 해당 프로세스가 실행된 디렉터리에 남게 됩니다 sudo
. 현재 작업 디렉토리는 프로세스 환경의 일부이며 하위 프로세스( sudo
)는 상위 프로세스(대화형 셸)의 환경을 변경할 수 없습니다.