web-dev-qa-db-ja.com

Linuxでスーパーユーザーとして「cd」コマンドを実行します

スーパーユーザー権限でcdコマンドを実行して、rootが所有するディレクトリにアクセスする方法はありますか? Sudo cd <path>を実行すると、Sudo: cd: command not foundが表示されます。

9
thecomputerguru

他の答えは間違っていません。

おそらくより良い答えは:

Sudoツールは、スーパーユーザーとしてアクションを実行することを目的としており、「ls」や「vi」などのアクションに先行してそれらをより単純にするための、状態の変化を表すものです。

たとえば、/root/private /内のファイルを編集したい場合:

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

これは間違いなくタイピングが多く、単にディレクトリを変更するよりも少し難しいです。ただし、それはfarより監査可能であり、「Sudo bash」の一部のバリアントを実行するよりも、Sudoの背後にある原則にはるかに沿っています。

安全な環境で作業している場合は、IAチームに感謝します。 「先日私はどのような変更を加えましたか?」と思った場合は、-あなたに感謝します。編集したファイルを気にする必要がないからです。

これらすべてのことから、何らかの形の「Sudo bash」の有効化と実行は間違いなく簡単です。より簡単に探していたのに、なぜrootとしてログインするのではなく、なぜ最初に「Sudo」を使用しているのですか?

22
Slartibartfast

お気づきのように、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
23
user1686

私がする必要があることをする最も速い方法はこれです:

Sudo -s

この答え で説明されています。

0