できない.dev

sudo

別名: sudo コマンド

許可されたユーザーが、コマンドを root(または別のユーザー)の権限で実行するための Linux / macOS のコマンド。
権限エラーの回避に使われがちだが、作られたファイルが root 所有になる副作用がある。

公開:

定義

sudo は、設定ファイル sudoers で許可されたユーザーが、コマンドを別のユーザーの権限で実行するためのコマンド。
実行ユーザーを指定しなければ root(スーパーユーザー)として動く。sudo apt install のように、システム領域への書き込みやサービスの起動停止を一時的に行うときに使う。

詳細

sudo で実行したコマンドが作ったファイルやディレクトリは root の所有になる。
また sudoers の env_reset は既定で有効で、コマンドは最小限の環境変数だけを持った状態で動く。secure_path が設定されている環境では PATH もその値に置き換わるため、nvm や pyenv でホームディレクトリに入れたコマンドは、sudo を付けた途端に見つからなくなることがある。

よくある誤解

  • 権限エラーは sudo を付ければ解決する: その場は通っても、作られたファイルが root 所有になり、次に sudo 無しで同じ場所を触ったときに再び権限エラーになる。
    npm の公式ドキュメントも、sudo に頼らず Node.js をバージョンマネージャーで入れ直す方法を勧めている(npm install が EACCES(permission denied)で失敗する)。
  • sudo pip install なら確実に入る: OS の Python を書き換えると OS のパッケージ管理と衝突するため、externally-managed-environment で止められる。venv の中に入れる。

関連

Docker を sudo 無しで使いたい場合は Docker で「permission denied while trying to connect to the Docker daemon socket」が実行できない のとおり docker グループに追加する。
ただし docker グループは root 相当の権限を持つ点に注意する。

この記事は役立ちましたか?