Linuxコマンドを目的・症状から検索する
コマンド名を覚えていなくても、日本語の目的やError Messageから候補を絞り、Syntax・Option・危険度を確認できます。
Linuxコマンド一覧・検索チートシートを開く結論:必要な操作と拒否された層を特定して、最小限の権限だけ直す
read・write・execute/searchのどれが必要か決め、実行Userと各Path ComponentのModeを確認します。Ownerが違う場合はchmodではなくchownやGroup設計が必要です。
whoami
id
ls -ld /path /path/to /path/to/file
stat /path/to/file
chmod 777は全員へread・write・executeを与えます。原因未確認の万能対処として使わないでください。
最初に状態を確認する
対象Fileだけでなく、到達する全Directoryのsearch権限を確認します。
| 確認対象 | コマンド例 | 判断 |
|---|---|---|
| 実行User | whoami / id | Owner・Group所属 |
| 対象Mode | ls -l / stat | r/w/x不足 |
| 親Directory | ls -ld各階層 | x不足 |
| 追加制御 | getfacl / SELinux / mount | Mode外の拒否 |
使用するLinuxコマンドとよく使うオプション
| コマンド・構文 | 役割 | 確認ポイント |
|---|---|---|
| ls -l / ls -ld | Mode・Owner・Group確認 | 先頭文字はFile Type |
| chmod | Mode変更 | SymbolicまたはOctal |
| chown / chgrp | Owner・Group変更 | 管理権限と影響範囲 |
| id | User・Group確認 | Process実行Userも確認 |
安全に切り分ける手順
- 拒否された操作をread・write・executeへ分解します。
- 実行UserとGroupを確認します。
- 対象と親DirectoryのModeを確認します。
- ACL・SELinux・noexec等を確認します。
- 必要最小限の主体へ権限を変更して再確認します。
出力の見方とよくある原因
Mode表示はOwner、Group、Otherの3組です。Directoryのxは配下へ到達するsearch権限です。
| 表示・症状 | 意味・原因候補 | 次の確認 |
|---|---|---|
| -rw-r----- | Owner rw、Group r | 実行Userとの関係 |
| drw-r--r-- | Directory xなし | Traversal不可 |
| Operation not permitted | Owner・Capability等 | 実行主体確認 |
| Mode正常でも拒否 | ACL・SELinux・Mount | 追加Access Control |
対処方法と危険な操作
変更前ModeとOwner・Groupを記録し、戻せる状態で限定的に変更します。
| 目的 | 操作候補 | 注意 |
|---|---|---|
| 所有者へ実行追加 | chmod u+x FILE | Script内容も確認 |
| Groupへ読取追加 | chmod g+r FILE | Group所属確認 |
| Owner修正 | chown USER FILE | Service実行User確認 |
sudo付与、再帰chmod/chown、777への変更は影響範囲が大きいため、対象一覧とRollbackを用意してください。
コマンドの実装・ディストリビューション・Shell差を確認する
Linux上のコマンドは一つのProjectから提供されるわけではありません。GNU Coreutils、GNU Grep、GNU Findutils、procps-ng、iproute2、systemd、OpenSSH、curlなどで実装元が異なり、BusyBoxやBSD系実装ではOptionや出力が変わります。
| 確認対象 | 確認方法 | 判断 |
|---|---|---|
| コマンドの実体 | type -a NAME / command -V NAME | Builtin・Alias・Function・Externalを区別 |
| 実装とVersion | NAME --version / Package情報 | 記事のOptionを利用できるか確認 |
| 利用中Shell | printf "%s\n" "$SHELL" / Process情報 | Pipeline・Redirect等の構文差を確認 |
| Distribution | /etc/os-release | Package Manager・Service Managerを確認 |
記事の例は代表的なGNU/Linux環境を基準にしています。実行前に、その端末のman、--help、公式Documentationを優先してください。
DevelopToolsのLinuxコマンド検索で確認できること
| 機能 | 確認できる内容 |
|---|---|
| 検索 | コマンド名、用途、日本語・英語Keyword、Permission denied等のError Keyword |
| 絞り込み | Category、危険度、必要権限、Command種別、利用環境 |
| 分類 | External Command、Shell Builtin、Shell Operator、Redirection Operator |
| 詳細 | Syntax、主なOption、Example、実装元、関連Command、よくあるError |
| 安全性 | 通常操作、要確認、管理操作、破壊的操作を文字Label付きで表示 |
| 非対応 | Terminal接続、Command実行、Server状態診断、Installed Version自動検出 |
公式Documentationで最終確認する
利用中の実装とVersionに合うManualを優先します。Web上の例と端末のOptionが一致しない場合は、端末のmanとPackage情報を基準に判断します。
ScriptがPermission deniedになる
x不足だけでなくnoexec Mount、Shebang、Interpreterも確認します。
実行前後の出力とExit Statusを記録し、想定した対象だけに操作が及んだことを確認します。
- ls -l script.sh
- 実行Userと親Directory確認
- 必要ならchmod u+x script.sh
- Shebang・改行・noexecを確認
権限計算にはchmodパーミッション計算ツールも利用できますが、実Fileの状態は端末で確認してください。
よくある質問
- 記事のコマンドをそのまま本番環境で実行してもよいですか?
- そのまま実行しないでください。Placeholder、対象Path、PID、Host、実行User、展開されるWildcardを確認し、参照系コマンドから段階的に試してください。
- Linuxなら同じOptionを使えますか?
- 実装、Distribution、Version、BusyBox環境等で異なります。type、--version、man、--helpと公式Documentationで確認してください。
- DevelopToolsからLinuxコマンドが実行されますか?
- 実行されません。検索、絞り込み、表示、コピーはブラウザ内だけで行われ、TerminalやServerへ接続しません。