質問: linuxでスーパーユーザーとして「cd」コマンドを実行します スーパーユーザー権限でcdコマンドを実行して、rootが所有するディレクトリにアクセスする方法はありますか? sudo cd <path>を実行すると、sudo: cd: command not foundが表示されます。
回答: お気づきのように、cdはシェルの組み込みコマンドであり、そのため理由がありますです。「現在のディレクトリ」はプロセスごとのパラメーターであり、プロセスitself。シェルの作業ディレクトリは子プロセスによって変更できません。特権サブシェルでcdを実行しても、一時的なサブシェルの作業ディレクトリのみが変更され、どの方法でもかまいません。あなたが使用する特権を上げることの。sudo cd機能させるには、sudo自体が組み込みのシェルである必要があり、すでに実行中のプロセスの特権を上げるための何らかの方法が必要になります。現在、このようなメカニズムはlinux(および他のほとんどのオペレーティングシステム)には存在しません。interactiveシェルをroot権限で実行し(任意のメソッドが機能する)、通常のcd 初期化:[user@host /]$ sudo bash [root@host /]# cd /root/secret すべてを1つのコマンドで実行する場合は、次のようにする必要があります。まず作業ディレクトリを変更してから、対話型シェルを起動します。sudo bash -c "cd /root/secret && bash" su -c "cd /root/secret && zsh" 注:外側のコマンドはシェルである必要はなく、作業ディレクトリを変更して新しいコマンドを実行するsomethingである必要があります。最近のlinuxシステムには、使用できるヘルパーが1つまたは2つあります。sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie) sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster) この方法の利点は、ネストされた引用を必要としないことです。空白文字や特殊文字を使用することなく、複数のwordコマンドを実行できます。最後に、一部のプログラムには、作業ディレクトリを変更するための組み込みオプションがあります。sudo make -c /etc sudo git -c /root/secret log