sudo로 변경할 때 동일한 작업 디렉토리에 유지

sudo로 변경할 때 동일한 작업 디렉토리에 유지

명령줄에서 작업할 때 sudo -i. 그러나 내 작업 디렉토리는 자동으로 /root. 나는 결코 그곳에 가고 싶지 않습니다. 나는 내가 있던 곳에 머물고 싶다! 어떻게 이를 달성할 수 있나요?

답변1

대신 사용할 수 있습니다 . 환경 변수 중 일부는 루트의 변수가 아니지만 sudo -s현재 디렉터리는 로 변경되지 않습니다 ./root

이것페이지Ubuntu 포럼에는 다음과 같은 멋진 요약이 있습니다.

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

Ubuntu 문서의 이 페이지에는 훨씬 더 많은 내용이 있습니다.sudo에 대한 배경 정보.

답변2

를 사용하려면 su동일한 디렉토리에 머무르는 방법이 있습니다.

수 -사용자-c "cd `pwd`; 배시"

무슨 일이야?

  • su - user= 다음으로 로그인user
  • -c이는 "새 사용자의 셸에서 명령을 실행합니다"를 의미합니다.
  • -c "cd `pwd`"우리가 제공하는 명령은 현재 디렉터리( `pwd`)로 전환하는 것입니다. 그러나 큰따옴표로 묶인 백틱을 사용하기 때문에 명령 pwd을 실행하기 전에 명령이 평가되어 su실제로 지금 있는 디렉터리로 이전 디렉터리로 전환합니다. 사용자.

    • 대조적으로 는 새 셸에서 명령을 -c 'cd `pwd`'실행하므로 이는 로 평가되며 물론 아무 것도 수행하지 않습니다.pwdcd /root

    여기서 유일한 문제는 명령을 실행한 직후 새 쉘이 종료된다는 것입니다. 따라서 다음을 추가합니다.

  • -c "cd `pwd`; bash"이는 " 명령을 bash실행한 후 실행(새 쉘)을 의미합니다 cd. bash 쉘은 로그아웃할 때까지 종료되지 않습니다.

`pwd`로 대체할 수 있으니 참고하세요 $(pwd). 기능적으로는 동일하지만 인용문과 유사한 문자가 많아 읽기가 어려울 수 있습니다.

답변3

나는 같은 문제에 직면했고 개발 서버 이외의 다른 것을 실행할 수 없으므로 sudo su - devuser이것이 내가 생각해낸 것입니다:

  1. devuser의 .profile에서 다음이 발견되면 이전 사용자 홈으로 다시 전환합니다.
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. 이전 사용자를 확인하는 스크립트입니다. 스크립트는 devuser의 bin 디렉터리에 있습니다.
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

프로세스 트리에 올라가서 프로세스 소유 사용자가 변경되었는지 확인합니다.

답변4

두 사용자 모두 작업 디렉토리에 액세스할 수 있는 경우:

sudo su -- $USER

작업 디렉토리에 대한 액세스 권한이 없는 사용자가 되면 새 사용자는 해당 디렉토리에서 읽기/쓰기 작업을 수행할 수 없습니다.

또는 작업 디렉토리의 루트가 되려면 다음을 수행하십시오.

sudo su --

관련 정보