「su -」ではコマンドが見つかりましたが、「su root」では見つかりませんでした。

「su -」ではコマンドが見つかりましたが、「su root」では見つかりませんでした。

オペレーティングシステム:Debian 10.10

"su -"で起動したときに "usermod"コマンドが実行される理由を理解しようとしましたが、 "su root"から起動すると、コマンドは "bash:usermod:command notfound"です。

ありがとうございます!

答え1

suこのコマンドは既存の環境を維持せず、-すべての環境変数をロードせずにユーザーに切り替えるだけです。

su -ユーザーログインをシミュレートしてそのユーザーに切り替えるだけでなく、そのユーザーの環境変数もロードします。

~からman su

   -, -l, --login
          Start the shell as a login shell with an environment similar to a real login:

             o      clears all the environment variables except TERM and variables specified by --whitelist-environment

             o      initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH

             o      changes to the target user's home directory

             o      sets argv[0] of the shell to '-' in order to make the shell a login shell

この場合、rootユーザーのPATH変数内のすべての要素をロードできない可能性があります。

echo $PATH実行後に入力してください。su rootコマンドを実行すると、su -PATHに追加のフォルダが表示されることがありますsu -

usermodコマンドはに配置する必要があります/usr/sbin。これはスーパーユーザーのみが使用できるパスです。内部コマンドは、管理目的で通常のユーザーではなく管理ユーザーのみが実行できます/sbin/usr/sbin

type usermodまたはを使用してパスにあることをwhich usermod確認できます。 afterの出力には表示されませんが、コマンドの後のPATH変数に配置されます。usermod/usr/sbin/usermod/usr/sbinecho $PATHsu rootsu -

/ sbin / binと同様に、このディレクトリにはシステムを起動するために必要なコマンドが含まれていますが、通常のユーザーは通常は実行しません。

/usr/sbin このディレクトリには、ブートプロセス、/usr マウント、またはシステムの回復に不要なシステム管理に使用されるプログラムバイナリが含まれています。

答え2

を実行すると、su -rootユーザーエクスペリエンスを使用してシェルを起動します。この質問に対する環境の重要な部分は、rootユーザーのPATHを取得することです。終了し-て実行すると、su rootユーザーエクスペリエンスとより重要なのはユーザーのPATHが保存されます。

関連情報