Linux/シェルコマンドリファレンス - 実務で使うコマンドの早見表

Linux/Bashで日常的に使うコマンドをまとめたリファレンス。コマンドごとに用途・主要オプション・実例を掲載している。

ファイル操作

ファイルの一覧表示 (ls)

ls                    # カレントディレクトリの一覧
ls -l                 # 詳細表示(パーミッション・サイズ・日時)
ls -la                # 隠しファイルを含む詳細表示
ls -lh                # サイズを人間が読みやすい形式で表示(KB, MB等)
ls -lt                # 更新日時の新しい順にソート
ls -lS                # ファイルサイズの大きい順にソート
ls -R                 # サブディレクトリを再帰的に表示

ファイルのコピー・移動・削除

コマンド説明
cp <元> <先>ファイルをコピー
cp -r <元> <先>ディレクトリを再帰的にコピー
cp -p <元> <先>パーミッション・タイムスタンプを保持してコピー
cp -i <元> <先>上書き時に確認する
mv <元> <先>ファイル/ディレクトリの移動またはリネーム
mv -i <元> <先>上書き時に確認する
rm <ファイル>ファイルを削除
rm -r <ディレクトリ>ディレクトリを再帰的に削除
rm -f <ファイル>確認なしで強制削除
rm -rf <ディレクトリ>ディレクトリを確認なしで再帰削除

ファイルの作成・内容表示

touch <ファイ>                # 空ファイルを作成(既存ならタイムスタンプ更新)
cat <ファイ>                  # ファイルの内容を全て表示
cat -n <ファイ>               # 行番号付きで表示
head <ファイ>                 # 先頭10行を表示
head -n 20 <ファイ>           # 先頭20行を表示
tail <ファイ>                 # 末尾10行を表示
tail -n 20 <ファイ>           # 末尾20行を表示
tail -f <ファイ>              # ファイルの追記をリアルタイムで監視
less <ファイ>                 # ページャで表示(上下スクロール可能)
wc <ファイ>                   # 行数・単語数・バイト数を表示
wc -l <ファイ>                # 行数のみ表示

ファイルの検索 (find)

find . -name "*.log"                    # 名前で検索
find . -iname "*.txt"                   # 名前で検索(大文字小文字を区別しない)
find /var -type f -name "*.conf"        # ファイルのみを検索
find /var -type d -name "log*"          # ディレクトリのみを検索
find . -mtime -7                        # 7日以内に更新されたファイル
find . -size +100M                      # 100MB以上のファイル
find . -name "*.tmp" -delete            # 条件に一致するファイルを削除
find . -name "*.sh" -exec chmod +x {} \;  # 検索結果にコマンドを実行

リンク

ln <> <リンク>              # ハードリンクを作成
ln -s <> <リンク>           # シンボリックリンクを作成
readlink -f <リン>            # シンボリックリンクの実体パスを表示

ディレクトリ操作

pwd                             # カレントディレクトリのパスを表示
cd <ディレクト>               # ディレクトリを移動
cd ..                           # 親ディレクトリに移動
cd -                            # 直前のディレクトリに戻る
cd ~                            # ホームディレクトリに移動
mkdir <ディレクト>            # ディレクトリを作成
mkdir -p a/b/c                  # 親ディレクトリも含めて作成
rmdir <ディレクト>            # 空のディレクトリを削除
tree                            # ディレクトリ構造をツリー表示
tree -L 2                      # 深さ2階層まで表示
du -sh <ディレクト>           # ディレクトリの合計サイズを表示
du -sh *                        # カレントディレクトリ直下の各サイズを表示
df -h                           # ディスクの空き容量を表示

テキスト処理

grep - パターン検索

grep "パターン" <ファイ>           # パターンに一致する行を表示
grep -i "パターン" <ファイ>        # 大文字小文字を区別しない
grep -r "パターン" <ディレクト>    # ディレクトリを再帰的に検索
grep -n "パターン" <ファイ>        # 行番号を表示
grep -c "パターン" <ファイ>        # 一致した行数を表示
grep -l "パターン" *.txt            # 一致するファイル名のみ表示
grep -v "パターン" <ファイ>        # 一致しない行を表示
grep -E "パターン1|パターン2" <ファイ>  # 拡張正規表現(OR検索)
grep -w "word" <ファイ>            # 単語単位で一致
grep -A 3 "パターン" <ファイ>      # 一致行の後3行も表示
grep -B 3 "パターン" <ファイ>      # 一致行の前3行も表示
grep -C 3 "パターン" <ファイ>      # 一致行の前後3行を表示

sed - ストリームエディタ

sed 's/old/new/' <ファイ>              # 各行の最初の一致を置換(標準出力)
sed 's/old/new/g' <ファイ>             # 各行の全ての一致を置換
sed -i 's/old/new/g' <ファイ>          # ファイルを直接編集
sed -i.bak 's/old/new/g' <ファイ>      # バックアップを作成して編集
sed -n '10,20p' <ファイ>               # 10〜20行目を表示
sed '3d' <ファイ>                      # 3行目を削除
sed '/^#/d' <ファイ>                   # コメント行を削除
sed '/^$/d' <ファイ>                   # 空行を削除

awk - テキスト処理

awk '{print $1}' <ファイ>              # 1列目を表示
awk '{print $1, $3}' <ファイ>          # 1列目と3列目を表示
awk -F',' '{print $2}' <ファイ>        # 区切り文字をカンマに指定
awk '$3 > 100' <ファイ>                # 3列目が100より大きい行を表示
awk '{sum += $1} END {print sum}' <ファイ>   # 1列目の合計を計算
awk 'NR==5,NR==10' <ファイ>            # 5〜10行目を表示
awk '{print NR, $0}' <ファイ>          # 行番号付きで全行を表示
awk '!seen[$0]++' <ファイ>             # 重複行を除去(順序を保持)

ソート・重複除去・集計

sort <ファイ>                  # 昇順ソート
sort -r <ファイ>               # 降順ソート
sort -n <ファイ>               # 数値としてソート
sort -k2 <ファイ>              # 2列目を基準にソート
sort -t',' -k3 -n <ファイ>     # カンマ区切りの3列目を数値ソート
sort -u <ファイ>               # ソートして重複を除去

uniq <ファイ>                  # 連続する重複行を除去(事前にソートが必要)
uniq -c <ファイ>               # 重複回数をカウント
uniq -d <ファイ>               # 重複している行のみ表示

# 出現頻度の集計(よく使うパターン)
sort <ファイ> | uniq -c | sort -rn

その他のテキスト処理

cut -d',' -f1,3 <ファイ>       # カンマ区切りの1列目と3列目を抽出
cut -c1-10 <ファイ>            # 各行の1〜10文字目を抽出
paste file1 file2                # 2つのファイルを行ごとに結合
tr 'a-z' 'A-Z' < <ファイ>     # 小文字を大文字に変換
tr -d '\r' < <ファイ>          # キャリッジリターンを除去
diff file1 file2                 # 2つのファイルの差分を表示
diff -u file1 file2              # unified形式で差分を表示
tee <ファイ>                   # 標準入力を標準出力とファイルの両方に書き出す
xargs                            # 標準入力からコマンドの引数を構成

xargs の実例:

find . -name "*.log" | xargs rm                 # 検索結果を引数にしてrmを実行
find . -name "*.log" -print0 | xargs -0 rm      # ファイル名にスペースが含まれる場合
cat urls.txt | xargs -I{} curl -O {}            # 各行を引数として展開
echo "a b c" | xargs -n1                         # 1つずつ引数に渡す

パイプとリダイレクト

パイプ

command1 | command2              # command1の標準出力をcommand2の標準入力に渡す

# 実例
ps aux | grep nginx              # プロセス一覧からnginxを検索
cat access.log | sort | uniq -c | sort -rn | head -20   # アクセス頻度の上位20件
ls -l | awk '{print $5, $9}' | sort -n                  # ファイルサイズ順に表示

リダイレクト

記法説明
command > file標準出力をファイルに書き込み(上書き)
command >> file標準出力をファイルに追記
command 2> file標準エラー出力をファイルに書き込み
command 2>&1標準エラー出力を標準出力にマージ
command > file 2>&1標準出力・標準エラー出力の両方をファイルに書き込み
command &> file上と同じ(Bash拡張記法)
command < fileファイルを標準入力として渡す
command > /dev/null 2>&1出力を全て破棄

ヒアドキュメント

cat <<EOF
複数行のテキストを
そのまま渡す
変数展開: $HOME
EOF

cat <<'EOF'
変数展開されない: $HOME
シングルクォートで囲むと展開を抑制
EOF

プロセス管理

プロセスの確認

ps aux                          # 全プロセスの一覧
ps aux | grep <プロセス>      # 特定プロセスの検索
ps -ef                          # 全プロセスの一覧(System V形式)
ps -ef --forest                 # プロセスツリー形式で表示
top                             # リアルタイムのプロセスモニタ
htop                            # 高機能プロセスモニタ(要インストール)
pgrep -a <>                 # 名前でプロセスを検索(PIDとコマンドライン)

プロセスの終了

kill <PID>                      # プロセスにSIGTERMを送信(正常終了を要求)
kill -9 <PID>                   # プロセスにSIGKILLを送信(強制終了)
kill -l                         # シグナル一覧を表示
killall <プロセス>            # 名前でプロセスを終了
pkill <パター>                # パターンに一致するプロセスを終了

ジョブ管理

command &                       # バックグラウンドで実行
jobs                            # ジョブの一覧
fg %1                           # ジョブ1をフォアグラウンドに戻す
bg %1                           # 停止中のジョブ1をバックグラウンドで再開
Ctrl+Z                          # フォアグラウンドのプロセスを停止
Ctrl+C                          # フォアグラウンドのプロセスを中断
nohup command &                 # ログアウトしても実行を継続

主要なシグナル

シグナル番号説明
SIGHUP1端末のハングアップ(設定再読み込みに使われることもある)
SIGINT2キーボード割り込み(Ctrl+C)
SIGKILL9強制終了(キャッチ不可)
SIGTERM15終了要求(デフォルト)
SIGSTOP19プロセスの停止(キャッチ不可)
SIGCONT18停止中のプロセスを再開

パーミッション

表記の読み方

-rwxr-xr-- 1 user group 4096 Mar 23 12:00 file.sh
│├─┤├─┤├─┤
│ │   │  └─ その他のユーザー (other)
│ │   └──── グループ (group)
│ └──────── 所有者 (user)
└────────── ファイルタイプ(- = 通常, d = ディレクトリ, l = シンボリックリンク)

各権限の意味:

記号数値ファイルの場合ディレクトリの場合
r4読み取り一覧の取得
w2書き込みファイルの作成・削除
x1実行ディレクトリへの移動

パーミッションの変更

chmod 755 <ファイ>            # rwxr-xr-x(所有者:全権限, その他:読み取り+実行)
chmod 644 <ファイ>            # rw-r--r--(所有者:読み書き, その他:読み取り)
chmod +x <ファイ>             # 全ユーザーに実行権限を追加
chmod u+x <ファイ>            # 所有者に実行権限を追加
chmod g-w <ファイ>            # グループの書き込み権限を除去
chmod -R 755 <ディレクト>     # 再帰的にパーミッションを変更
chown <ユーザ> <ファイ>     # 所有者を変更
chown <ユーザ>:<グルー> <ファイ>  # 所有者とグループを変更
chown -R <ユーザ> <ディレクト>     # 再帰的に所有者を変更
chgrp <グルー> <ファイ>     # グループを変更

よく使うパーミッションの数値

数値記号用途
755rwxr-xr-x実行可能スクリプト、ディレクトリ
644rw-r--r--一般的なファイル
600rw-------秘密鍵、パスワードファイル
700rwx------秘密のディレクトリ(~/.ssh 等)
775rwxrwxr-xグループで共有するディレクトリ
666rw-rw-rw-全ユーザーが読み書き可能

ネットワーク

接続の確認

ping <ホス>                   # 疎通確認(Ctrl+Cで停止)
ping -c 3 <ホス>              # 3回だけ送信
curl <URL>                      # URLのコンテンツを取得
curl -I <URL>                   # レスポンスヘッダのみ表示
curl -o output.html <URL>       # ファイルに保存
curl -O <URL>                   # 元のファイル名で保存
curl -X POST -d '{"key":"val"}' -H 'Content-Type: application/json' <URL>  # POSTリクエスト
curl -s <URL>                   # プログレスバーを非表示
curl -L <URL>                   # リダイレクトを追跡
wget <URL>                      # ファイルをダウンロード
wget -r -l 2 <URL>              # 2階層まで再帰的にダウンロード

ポート・接続の確認

ss -tlnp                        # リッスン中のTCPポート一覧
ss -ulnp                        # リッスン中のUDPポート一覧
ss -anp                         # 全接続の一覧
netstat -tlnp                   # リッスン中のTCPポート一覧(旧式)
lsof -i :8080                   # ポート8080を使用しているプロセス

DNS・ネットワーク情報

dig <ドメイ>                  # DNSレコードの詳細情報
dig <ドメイ> +short           # IPアドレスのみ表示
nslookup <ドメイ>             # DNS問い合わせ
host <ドメイ>                 # ホスト情報の確認
ip addr                         # ネットワークインターフェースの情報
ip route                        # ルーティングテーブル
hostname                        # ホスト名の表示

リモート接続

ssh <ユーザ>@<ホス>                  # SSH接続
ssh -p 2222 <ユーザ>@<ホス>          # ポート指定で接続
ssh -i <秘密> <ユーザ>@<ホス>      # 鍵を指定して接続
ssh -L 8080:localhost:80 <ホス>        # ローカルポートフォワーディング
scp <ファイ> <ユーザ>@<ホス>:<>  # ファイルをリモートにコピー
scp <ユーザ>@<ホス>:<> <ローカ>  # リモートからファイルをコピー
scp -r <ディレクト> <ユーザ>@<ホス>:<>  # ディレクトリを再帰コピー
rsync -avz <> <>                     # 差分のみ効率的に同期
rsync -avz --delete <> <>            # 同期して不要ファイルを削除

アーカイブ・圧縮

tar cf archive.tar <ディレクト>         # tarアーカイブの作成
tar czf archive.tar.gz <ディレクト>     # gzip圧縮したtarアーカイブ
tar cjf archive.tar.bz2 <ディレクト>   # bzip2圧縮したtarアーカイブ
tar xf archive.tar                        # tarアーカイブの展開
tar xzf archive.tar.gz                    # gzip圧縮のtarを展開
tar xjf archive.tar.bz2                   # bzip2圧縮のtarを展開
tar tf archive.tar                        # アーカイブの内容を一覧表示
tar xzf archive.tar.gz -C /tmp/           # 展開先ディレクトリを指定

gzip <ファイ>                           # gzip圧縮(元ファイルは削除される)
gzip -k <ファイ>                        # gzip圧縮(元ファイルを保持)
gunzip <ファイル.gz>                      # gzip展開
zip -r archive.zip <ディレクト>         # zipアーカイブの作成
unzip archive.zip                         # zipの展開
unzip -l archive.zip                      # zipの内容を一覧表示

システム情報

uname -a                        # カーネル・OS情報
uname -r                        # カーネルバージョン
cat /etc/os-release             # ディストリビューション情報
uptime                          # 稼働時間・ロードアベレージ
free -h                         # メモリ使用状況
lscpu                           # CPU情報
lsblk                           # ブロックデバイス一覧
whoami                          # 現在のユーザー名
id                              # ユーザーID・グループ情報
w                               # ログイン中のユーザーと実行中のプロセス
last                            # ログイン履歴
date                            # 現在日時
date +"%Y-%m-%d %H:%M:%S"      # フォーマット指定で日時を表示
cal                             # カレンダーを表示

環境変数・シェル設定

echo $HOME                      # 環境変数の参照
echo $PATH                      # PATHの確認
env                             # 全ての環境変数を表示
printenv <変数>               # 特定の環境変数を表示
export VAR="value"              # 環境変数の設定(子プロセスに継承)
unset VAR                       # 環境変数の削除

# 設定ファイル
source ~/.bashrc                # 設定ファイルの再読み込み
. ~/.bashrc                     # 同上(sourceの省略形)

# エイリアス
alias ll='ls -la'               # エイリアスの定義
alias                           # 定義済みエイリアスの一覧
unalias ll                      # エイリアスの削除

PATHの確認と追加

echo $PATH | tr ':' '\n'        # PATHを見やすく1行ずつ表示
which <コマン>                # コマンドの実体パスを表示
type <コマン>                 # コマンドの種類(組み込み/エイリアス/外部)を表示
export PATH="$HOME/bin:$PATH"   # PATHの先頭にディレクトリを追加

その他の便利なコマンド

履歴

history                         # コマンド履歴の一覧
history | grep <パター>       # 履歴からの検索
!<番号>                         # 指定番号のコマンドを再実行
!!                              # 直前のコマンドを再実行
Ctrl+R                          # 履歴のインクリメンタル検索

コマンドの連結

記法説明
cmd1 && cmd2cmd1が成功した場合のみcmd2を実行
cmd1 || cmd2cmd1が失敗した場合のみcmd2を実行
cmd1 ; cmd2cmd1の成否に関わらずcmd2を実行

コマンド置換・変数展開

result=$(command)               # コマンドの出力を変数に格納
echo "ファイル数: $(ls | wc -l)"  # 文字列中にコマンド結果を埋め込む
echo "${var:-default}"          # 変数が未定義の場合のデフォルト値
echo "${var:=default}"          # 変数が未定義の場合に代入してから展開
echo "${#var}"                  # 変数の文字数
echo "${var%.txt}"              # 末尾から最短一致で除去
echo "${var##*/}"               # 先頭から最長一致で除去(ファイル名の取得)

ワイルドカード(グロブ)

パターン説明
*任意の文字列(0文字以上)
?任意の1文字
[abc]a, b, c のいずれか1文字
[0-9]数字1文字
{a,b,c}a, b, c のいずれか(ブレース展開)
**再帰的なディレクトリマッチ(shopt -s globstar が必要)

参考リンク