Linux에서 슈퍼유저로 "cd" 명령을 실행하세요.

Linux에서 슈퍼유저로 "cd" 명령을 실행하세요.

cd루트가 소유한 디렉토리에 액세스하기 위해 슈퍼유저 권한으로 명령을 실행하는 방법이 있습니까 ? 실행 sudo cd <path>하면 sudo: cd: command not found.

답변1

다른 대답은 틀린 것이 아닙니다.

아마도 더 나은 대답은 다음과 같습니다.

sudo 도구는 수퍼유저로서 작업을 수행하기 위한 것이며 'ls' 또는 'vi' 또는 기타 작업을 더 단순하게 만들기 위해 'ls' 또는 'vi'와 같은 작업보다 먼저 수행되는 상태 변경에 더 가까운 것을 설명하고 있습니다.

예를 들어 /root/private/에 있는 파일을 편집하고 싶다면 다음을 제안합니다.

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

이것은 확실히 타이핑이 더 많고 디렉토리를 변경하는 것보다 조금 더 어렵습니다. 그러나 그것은멀리'sudo bash'의 일부 변형을 실행하는 것보다 더 감사하기 쉽고 sudo 뒤에 있는 원칙에 훨씬 더 부합합니다.

안전한 환경에서 작업하고 있다면 IA 팀이 감사할 것입니다. "저번에 내가 무슨 변화를 줬지?"라고 궁금해하신다면,어떤 파일을 편집했는지 궁금해할 필요가 없기 때문에 감사할 것입니다.

이 모든 것을 말하자면 'sudo bash' 형식을 활성화하고 실행하는 것이 확실히 더 쉽습니다. 더 쉬운 방법을 찾고 있다면 애초에 루트로 로그인하는 대신 'sudo'를 사용하는 이유는 무엇입니까?

답변2

언급했듯이 cd은 쉘 내장 명령이며이유가 있어이를 위해: "현재 디렉터리"는 프로세스에 의해서만 변경될 수 있는 프로세스별 매개변수입니다.그 자체.

쉘의 작업 디렉토리는 하위 프로세스에 의해 변경될 수 없습니다. 따라서 권한 있는 하위 쉘에서 실행하더라도 cd해당 임시 하위 쉘의 작업 디렉토리만 변경되며 권한을 높이는 방법은 중요하지 않습니다.

따라서 sudo cd작동하려면 sudo 자체가 쉘에 내장되어 있어야 하며 이미 실행 중인 프로세스의 권한을 높이는 방법이 필요합니다. 현재 Linux(또는 대부분의 다른 운영 체제)에는 이러한 메커니즘이 없습니다.


원하는 것을 달성하는 한 가지 방법은 다음을 실행하는 것입니다.인터렉티브루트 권한이 있는 쉘(어떤 방법이든 가능)을 실행하고 cd그 안에 일반 코드를 사용하십시오.

[user@host /]$ sudo bash
[root@host /]# cd /root/secret

하나의 명령으로 모든 작업을 수행하려면 다음과 같아야 합니다. 먼저 작업 디렉터리를 변경한 다음 대화형 셸을 시작합니다.

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

참고: 외부 명령은 셸일 필요는 없습니다.무엇작업 디렉터리를 변경하고 새 명령을 실행합니다. 최신 Linux 시스템에는 사용할 수 있는 하나 또는 두 개의 도우미가 있습니다.

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

이 방법의 장점은 중첩된 인용이 필요하지 않다는 것입니다. 공백이나 특수 문자 문제 없이 여러 단어로 구성된 명령을 실행할 수 있습니다.

마지막으로 일부 프로그램에는 작업 디렉터리를 변경할 수 있는 옵션이 내장되어 있습니다.

sudo make -C /etc
sudo git -C /root/secret log

답변3

내가 해야 할 일을 수행하는 가장 빠른 방법은 다음과 같습니다.

sudo -s

에 설명된 대로이 답변.

관련 정보