sudoに変更するときは、同じ作業ディレクトリを維持してください。

sudoに変更するときは、同じ作業ディレクトリを維持してください。

コマンドラインで作業するとき、私はしばしばsudoに変更を使用しますsudo -i。しかし、私の作業ディレクトリは自動的にに変更されます/root。私はそこに行きたくありません。この目標をどのように達成できますか?

答え1

代わりに使用できますsudo -s。これは現在のディレクトリをrootに変更しませんが、/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 --

関連情報