新卒エンジニアが最初に覚えるLinuxコマンドと危ないオプション

よく使うコマンドと、Enter の前に止まるべき使い方をセットで覚える。

コマンドの入出力を読む。パイプ | が渡すのは標準出力
コマンドの入出力を読む。パイプ | が渡すのは標準出力

最初に覚えるコマンドは 12 個で足りる

Linux のサーバーにログインして作業する場面は、開発環境の構築、ログの確認、障害の調査など、新卒のうちから頻繁にあります。コマンドは数百ありますが、最初の数か月で使うものは限られています。この記事では、移動と一覧、ファイル操作、検索と閲覧、権限とプロセスの 4 分野で 12 個のコマンドを整理し、それぞれの「危ない使い方」を合わせて紹介します。

Linux のコマンドは、Windows のエクスプローラーのように確認ダイアログを出さないものが多くあります。上書きや削除が一瞬で終わり、元に戻せないこともあります。便利なオプションを覚えるのと同じくらい、Enter を押す前に止まるべきパターンを知っておくことが大切です。オプションの詳細は、man コマンド(man ls など)や --help で確認できます。

コマンド主な用途よく使う形注意点
lsファイルの一覧ls -la-a を付けないと . で始まる隠しファイルは表示されない
cdディレクトリの移動cd /var/log、cd -、cd引数なしの cd はホームディレクトリに戻る
cpコピーcp -r src backupディレクトリには -r が必要。同名ファイルは確認なしで上書き
mv移動・名前の変更mv old.txt new.txt同名ファイルは確認なしで上書き
rm削除rm file.txt、rm -r dirゴミ箱はない。-rf は確認なしで再帰削除
grep文字列の検索grep -rn "ERROR" ./logs-i で大文字小文字を区別しない、-v で一致しない行
findファイルの検索find . -name "*.log" -type f-delete を付けると見つけたものをすぐ削除する
lessファイルの閲覧less app.logq で終了、/ で検索。巨大なファイルも開ける
tail末尾の表示・追跡tail -n 100 app.log、tail -f app.log-f は Ctrl+C で止めるまで追い続ける
chmod権限の変更chmod 755 run.sh、chmod u+x run.sh777 は誰でも書き換え可能になる
psプロセスの一覧ps auxps aux | grep の結果には grep 自身が混ざることがある
killプロセスへのシグナル送信kill 1234-9 は後片付けなしの強制終了

移動・一覧とファイル操作:上書きと削除に注意

ls と cd は毎日使うコマンドです。ls -l は権限や所有者、サイズ、更新日時を表示し、-a は . で始まる隠しファイル(.env や .gitignore など)も表示します。設定ファイルの多くは隠しファイルなので、ls だけで「ファイルがない」と判断しないようにします。cd - は直前にいたディレクトリに戻り、引数なしの cd はホームディレクトリに戻ります。作業の前に pwd で現在の場所を確かめる習慣は、後述の rm の事故を防ぎます。

cp と mv は確認なしで上書きする

cp と mv は、コピー先や移動先に同じ名前のファイルがあると、既定では何も聞かずに上書きします。設定ファイルを退避するつもりで cp app.conf app.conf.bak を実行し、すでにあった古いバックアップを消してしまう、という事故が起こりえます。-i を付けると上書き前に確認し、-n を付けると上書きしません(GNU coreutils の場合)。ディレクトリをコピーするには -r が必要で、付けないとディレクトリは飛ばされます。

# 悪い例:既存の .bak を確認なしで上書きするcp /etc/app/app.conf /etc/app/app.conf.bak# 良い例:日付を付けて名前の衝突を避け、-i で上書き前に確認するcp -i /etc/app/app.conf /etc/app/app.conf.$(date +%Y%m%d)ls -l /etc/app/
悪い例と良い例:バックアップを取るとき

rm には「ゴミ箱」がない

rm で削除したファイルは、通常の方法では元に戻せません。-r はディレクトリの中身を再帰的に削除し、-f は確認や存在しないファイルのエラーを省略します。組み合わせた rm -rf は、指定したパスの下を何も聞かずにすべて削除します。特に危ないのは、変数を使ったパスとワイルドカードです。変数が空のまま rm -rf "$DIR"/* を実行すると、rm -rf /* と同じ意味になります。cd に失敗したまま rm -rf * を実行すると、意図しない現在のディレクトリの中身が消えます。

cd build ; rm -rf *rm -rf $OLD_DIR/*
悪い例:cd の失敗や空の変数に気づかず削除してしまう
cd build && rm -rf ./*: "${OLD_DIR:?OLD_DIR is empty}"   # 空なら止まるls "$OLD_DIR"                        # 消す前に中身を確認rm -rf -- "$OLD_DIR"/*
良い例:失敗したら止まる書き方と、事前の確認
Enter の前に確かめること

rm、mv、cp で本番サーバーのファイルを扱うときは、pwd で現在の場所、ls で対象の中身を確かめてから実行します。パスに変数やワイルドカードが含まれるなら、先に echo や ls で展開結果を表示して、想定どおりかを見ます。手順書の通りでも、ホスト名とパスの読み違いはよく起きます。

検索と閲覧:grep・find・less・tail -f

grep はファイルの中から文字列を含む行を探します。-r でディレクトリを再帰的に、-n で行番号付き、-i で大文字小文字を区別せず、-v で一致しない行を表示し、-c で一致した行数を数えます。find はファイル名や種類、更新日時などの条件でファイルそのものを探します。grep は「中身」、find は「ファイル名や属性」を探す、と区別すると使い分けやすくなります。

ログの閲覧には less と tail が便利です。less は巨大なファイルでも全体を読み込まずに開けるので、数 GB のログをエディタで開いてサーバーのメモリを圧迫するような事態を避けられます。tail -n 100 は末尾 100 行、tail -f はファイルに追記される内容をリアルタイムで表示し続けます。tail -f は Ctrl+C で止めるまで終わらないので、止め方を覚えてから使います。

find -delete と xargs rm は一覧を確かめてから

find . -name "*.tmp" -delete は、見つけたファイルをその場で削除します。-name の条件を間違えると、必要なファイルまで消えます。まず -delete を付けずに実行して一覧を確認し、想定どおりなら付け足す、という順番にします。find ... | xargs rm も同様で、ファイル名に空白が含まれると意図しない名前で rm が実行されることがあるため、find -print0 と xargs -0 を組み合わせます。

パイプとリダイレクト:> と >> の違い

パイプ(|)は、左のコマンドの標準出力を右のコマンドの標準入力に渡します。grep で絞り、sort で並べ、uniq -c で数え、head で先頭だけを出す、というように小さなコマンドをつないで処理を組み立てられます。注意したいのは、パイプが渡すのは標準出力だけで、エラーメッセージが出る標準エラー出力は渡らない点です。両方を渡したいときは 2>&1 を使います。

書き方意味
cmd > out.txt標準出力をファイルに書く。既存の内容は消える
cmd >> out.txt標準出力をファイルの末尾に追記する
cmd 2> err.txt標準エラー出力をファイルに書く
cmd > out.txt 2>&1標準出力と標準エラー出力の両方を out.txt に書く
cmd 2>&1 | tee build.log両方を画面に表示しつつ build.log にも保存する
cmd 2>/dev/null標準エラー出力を捨てる

> と >> の取り違えは、気づきにくい事故の原因になります。ログや設定ファイルに追記するつもりで > を使うと、それまでの内容が消えます。また、2>&1 の位置によって意味が変わります。cmd > out.txt 2>&1 は両方をファイルへ送りますが、cmd 2>&1 > out.txt は標準エラー出力が画面に残ります。リダイレクトは左から順に処理されるためです。

grep -c "ERROR" app.log                         # ERROR を含む行数awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -5./build.sh >> build.log 2>&1                    # 既存のログを消さずに追記echo "export APP_ENV=dev" >> ~/.bashrc          # > にすると .bashrc が消える
パイプとリダイレクトの例

権限とプロセス:chmod 777 と kill -9 を気軽に使わない

chmod はファイルの権限を変えます。755 は所有者が読み書き実行、グループとその他が読み実行、644 は所有者が読み書き、ほかは読みのみです。u+x のような記号表記なら、所有者にだけ実行権限を足し、他の権限は変えません。Permission denied が出たときに chmod 777 で解決しようとするのは避けます。777 は誰でも書き換えられる状態で、スクリプトなら第三者に中身を差し替えられるおそれがあります。必要な権限だけを足すのが原則です。

ps aux は動いているプロセスの一覧を表示し、grep と組み合わせて目的のプロセスを探します。kill はプロセスにシグナルを送るコマンドで、既定の SIGTERM は「終了してください」という依頼です。プロセスは一時ファイルの削除や接続の切断などの後片付けをしてから終わることができます。kill -9 は SIGKILL を送り、後片付けの機会を与えずに止めます。書き込み中のデータが壊れることもあるため、まず kill を試し、止まらないときに -9 を検討します。kill する前に、PID が本当に目的のプロセスかを ps で確かめます。

危ないコマンドを実行する前のチェックリスト

  • ホスト名とユーザーを確かめたか(本番か検証環境か、sudo が必要か)
  • pwd で現在のディレクトリを確かめたか
  • rm、mv、cp の対象を ls で確かめたか
  • パスの変数やワイルドカードの展開結果を echo で確かめたか
  • find に -delete を付ける前に、付けずに一覧を確かめたか
  • ファイルへの出力が > ではなく >> であるべきではないか
  • chmod 777 ではなく、必要な権限だけを足しているか
  • kill の PID が目的のプロセスか、-9 が本当に必要か

問題で確かめる

この記事の内容を、制限時間つきの問題で確かめられます。

参考

よくある質問

Linux で最初に覚えるべきコマンドは?

ls、cd、pwd、cp、mv、rm、mkdir、grep、find、less、tail、chmod、ps、kill などです。ファイル操作、検索と閲覧、権限とプロセスの分野ごとに覚え、あわせて上書きや削除の危ない使い方も押さえます。

rm -rf はなぜ危ない?

指定したパスの下を確認なしで再帰的に削除し、通常の方法では元に戻せないためです。変数が空だったり cd に失敗したりすると、意図しない場所のファイルが消えます。実行前に pwd と ls で対象を確かめます。

> と >> の違いは?

> はファイルの内容を消してから書き込み、>> は既存の内容の末尾に追記します。ログや設定ファイルに追加したいときに > を使うと、それまでの内容が失われます。

kill と kill -9 の違いは?

kill は既定で SIGTERM を送り、プロセスに後片付けをしてから終了するよう依頼します。kill -9 は SIGKILL を送り、後片付けをさせずに強制終了します。まず kill を試すのが一般的です。

chmod 777 を使ってはいけないのはなぜ?

所有者以外の誰でも読み書き実行できる状態になり、第三者にファイルを書き換えられるおそれがあるためです。Permission denied の対処では、chmod u+x などで必要な権限だけを足します。