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 & # ログアウトしても実行を継続
主要なシグナル
| シグナル | 番号 | 説明 |
|---|
SIGHUP | 1 | 端末のハングアップ(設定再読み込みに使われることもある) |
SIGINT | 2 | キーボード割り込み(Ctrl+C) |
SIGKILL | 9 | 強制終了(キャッチ不可) |
SIGTERM | 15 | 終了要求(デフォルト) |
SIGSTOP | 19 | プロセスの停止(キャッチ不可) |
SIGCONT | 18 | 停止中のプロセスを再開 |
パーミッション
表記の読み方
-rwxr-xr-- 1 user group 4096 Mar 23 12:00 file.sh
│├─┤├─┤├─┤
│ │ │ └─ その他のユーザー (other)
│ │ └──── グループ (group)
│ └──────── 所有者 (user)
└────────── ファイルタイプ(- = 通常, d = ディレクトリ, l = シンボリックリンク)
各権限の意味:
| 記号 | 数値 | ファイルの場合 | ディレクトリの場合 |
|---|
r | 4 | 読み取り | 一覧の取得 |
w | 2 | 書き込み | ファイルの作成・削除 |
x | 1 | 実行 | ディレクトリへの移動 |
パーミッションの変更
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 <グループ> <ファイル> # グループを変更
よく使うパーミッションの数値
| 数値 | 記号 | 用途 |
|---|
755 | rwxr-xr-x | 実行可能スクリプト、ディレクトリ |
644 | rw-r--r-- | 一般的なファイル |
600 | rw------- | 秘密鍵、パスワードファイル |
700 | rwx------ | 秘密のディレクトリ(~/.ssh 等) |
775 | rwxrwxr-x | グループで共有するディレクトリ |
666 | rw-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 && cmd2 | cmd1が成功した場合のみcmd2を実行 |
cmd1 || cmd2 | cmd1が失敗した場合のみcmd2を実行 |
cmd1 ; cmd2 | cmd1の成否に関わらず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 が必要) |
参考リンク