sudo를 사용하여 폴더에 액세스할 수 없습니다.

sudo를 사용하여 폴더에 액세스할 수 없습니다.

저는 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 nginxnginx 폴더에 들어갔다가 종료되었기 때문입니다. 따라서 명령을 시작하기 전의 상태로 돌아갑니다 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)는 상위 프로세스(대화형 셸)의 환경을 변경할 수 없습니다.

관련 정보