Linux基礎コマンド入門

WSL(WindowsでLinuxを動かす仕組み)やDockerの環境が整うと、次にぶつかるのが「AIが出してくるシェルコマンドの意味が分からないまま実行している」という状態です。動けばいいと割り切っていると、ある日chmod 777やrm -rfのような、意味を知っていれば素通りしないコマンドまで通してしまいます。この記事では、そうした事故を防ぐために最低限読めておきたいLinuxコマンドの考え方を整理します。

コマンドは「動詞+対象+条件」で読む

Linuxのコマンドは一見暗号のように見えますが、実は「何をする(動詞)」「何に対して(対象)」「どんな条件で(オプション)」という3要素の組み合わせにすぎません。この型さえ意識できれば、知らないコマンドでも8割は推測できるようになります。

# ls  = 一覧する(動詞)
# -l  = 詳細形式で(条件)
# -a  = 隠しファイルも含めて(条件)
ls -la /var/log

# 現在地を確認する(pwd) → 移動する(cd) → 中身を見る(ls)、が基本の三点セット
pwd
cd /var/log
ls
🎯 読み解きポイント:ls/cd/pwdはキャラクターの「所持品確認」と「移動」

ハクスラゲームでたとえると、pwdは「今どのマップにいるか確認する」、cdは「隣のマップへ移動する」、lsは「今いるマップに落ちているアイテムを一覧する」動作です。AIが生成したスクリプトの冒頭でこの3つが並んでいたら、それは危険な処理ではなく単なる状況確認だと分かるだけで、読む不安がかなり減ります。

探す:grepとfindは「探す対象」が違うだけ

「ログの中からエラー行を見たい」「特定の名前のファイルがどこにあるか知りたい」——似ているようで探す対象が違います。grepはファイルの中身(テキスト)を、findはファイルシステムの構造(場所そのもの)を探します。

# ログファイルの中身から "Error" を含む行を探す
grep "Error" /var/log/app.log

# カレントディレクトリ以下から拡張子.logのファイルを探す
find . -name "*.log"
🎯 読み解きポイント:grepは「持ち物の中身」、findは「マップ上の位置」を探す

ハクスラゲームでたとえると、findは「マップ全体からアイテムの落下場所を探す」動作、grepは「持っているアイテムの説明文にキーワードが無いか調べる」動作です。「場所を探しているのか」「中身を調べているのか」を区別するだけで、コードの意図を読み違えなくなります。

権限を理解する:chmodとchown

「権限エラーが出た」と伝えると、AIは深く説明せずにchmod 777を提案してくることがありますが、これは初心者が最も踏みやすい地雷のひとつです。Linuxのファイルには「誰が(所有者・所有グループ・その他)」「読み書き実行のどれを」できるかという権限が必ず設定されており、chmodはその権限を、chownは「誰の所有か」自体を変更します。

# 8進数3桁は「所有者・グループ・その他」の順で rwx(読み4+書き2+実行1)を表す
chmod 644 config.txt   # 所有者は読み書き、それ以外は読み取りのみ(安全な既定値に近い)
chmod 777 config.txt   # 全ユーザーが読み書き実行し放題(まず避けるべき設定)

# 所有者をwww-dataユーザー・www-dataグループに変更する
chown www-data:www-data config.txt
🎯 読み解きポイント:chmod 777は「装備を誰でも改造できる状態」、chownは「装備の持ち主」

自分の装備を誰でも自由に付け替えられる状態にすると考えると、777の危うさが直感的に分かります。エラーを消したいだけなら、まず必要な権限だけを狭く与える(644や755)ところから試すべきで、777は「原因を調べるのが面倒だから全部許可する」思考停止の結果であることがほとんどです。一方chownは権限の強さではなく「誰の持ち物か」を変える操作なので、Webサーバーがファイルを読めないときは権限より先に持ち主を疑うべき場面もあります。

つなげる:パイプとリダイレクト

「|や>が並ぶ長い1行コマンド」は難しそうに見えますが、分解すると単純な部品の組み合わせにすぎません。|(パイプ)はあるコマンドの出力を次のコマンドの入力に渡し、>はコマンドの出力をファイルに書き出します。

# プロセス一覧(ps)からnginxを含む行だけを抽出(grep)する
ps aux | grep nginx

# lsの結果をファイルに保存する(上書き) / 追記する場合は >>
ls -la > filelist.txt
① パイプ(|):標準出力を次のコマンドの標準入力へ ps aux 標準出力 grep nginx 標準出力 nginxの行だけ表示 ② リダイレクト(>):標準出力の行き先をファイルに変更 ls -la 標準出力 filelist.txt
🎯 読み解きポイント:パイプは「前の人の成果物を次の人に渡す」流れ作業

パーティ連携でたとえると、パイプは「前衛が倒した敵のドロップ品を、そのまま後衛が拾って加工する」流れです。ps aux | grep nginxなら「全プロセスを一覧する係」の結果を「nginxを含む行だけ選ぶ係」に渡している、と読めば、長いコマンドも係の連鎖として追えます。

よくあるはまりポイント:rm -rfのタイポ事故

Linuxを長く使っている人でも一度はやらかすと言われるのがrm -rfのタイポ事故です。-r(ディレクトリごと)と-f(確認なしで強制)を組み合わせたこのコマンドは、指定パスをゴミ箱を経由せず完全に削除します。パスの前のスペース一つ、空の変数(例えば$DIRが空だとrm -rf $DIR/*は意図せず/*相当に展開される)といった些細なミスが、消せないはずのものを消す結果につながります。

# 実行前にパスを確認する習慣
echo rm -rf "$TARGET_DIR"/*
# 表示された内容が想定通りなら、echoを外して実行する
🎯 読み解きポイント:rm -rfは「確認画面なしの即時ドロップ破棄」

「本当に破棄しますか?」の確認画面が一切出ないまま、指定した装備が即座に消滅する仕様だと考えてください。AIが生成したクリーンアップ用スクリプトにrm -rfが含まれていたら、実行前に対象パスをechoで表示して目視確認する癖をつけておくと、この手の事故はほぼ防げます。

あわせて知っておきたい用語
シェル
コマンドを受け取ってOSに伝える対話プログラム(bash、zshなど)
標準出力・標準エラー出力
コマンドの実行結果を流す2つの経路。別経路なのでリダイレクトで個別に扱える
💡 ワンポイントアドバイス:知らないコマンドはAIに「副作用」を聞き返す

AIが提案したコマンドの意味が分からないときは、そのまま実行せず「具体的に何を変更しますか、元に戻せますか」と聞き返してみてください。AIは大抵の場合、副作用まで含めて説明し直してくれます。この一往復が、rm -rfやchmod 777のような取り返しのつかない事故を防ぐ一番手軽な方法です。

コマンドの基本が読めるようになったら、次はWSLの記事でファイルの行き来を、Dockerの記事でコンテナ内でのコマンドの使われ方を確認してみてください。