このチートシートで確認できること
Bash は、コマンドを組み合わせてファイル操作、検索、集計、自動化を行うためのシェルです。このページでは、日常的に使うコマンド、変数、条件分岐、ループ、関数、パイプ、リダイレクトを確認できます。
最初に覚えるのは、pwd、ls、cd、cp、mv、grep、find、|、>、&& です。削除や一括処理は便利ですが、対象を間違えると戻せないため、確認コマンドとセットで使います。
基本コマンド
ファイル操作
# 一覧表示
ls # 基本
ls -la # 詳細(隠しファイル含む)
ls -lh # 人間が読みやすいサイズ
# ディレクトリ移動
cd /path/to/dir
cd ~ # ホームディレクトリ
cd - # 前のディレクトリ
cd .. # 親ディレクトリ
# ファイル操作
cp file1 file2 # コピー
cp -r dir1 dir2 # ディレクトリコピー
mv file1 file2 # 移動/リネーム
rm file # 削除
rm -rf dir # ディレクトリ削除(強制)
mkdir dir # ディレクトリ作成
mkdir -p a/b/c # 親ディレクトリも作成
# ファイル内容
cat file # 全表示
head -n 10 file # 先頭10行
tail -n 10 file # 末尾10行
tail -f file # リアルタイム監視
less file # ページャー
ポイント: grep・sed・awkはBashの三大テキスト処理ツール。パイプで組み合わせることで強力なデータ加工ができます。
テキスト処理
# 検索
grep "pattern" file
grep -r "pattern" dir # 再帰検索
grep -i "pattern" file # 大文字小文字無視
grep -n "pattern" file # 行番号表示
grep -v "pattern" file # 除外
# 置換
sed 's/old/new/' file # 最初の1つ
sed 's/old/new/g' file # 全て置換
sed -i 's/old/new/g' file # ファイル直接編集
# カラム抽出
awk '{print $1}' file # 1列目
awk -F: '{print $1}' file # 区切り文字指定
cut -d: -f1 file # 区切り文字と列
# ソート
sort file
sort -n file # 数値ソート
sort -r file # 逆順
sort -u file # 重複除去
# 重複
uniq file # 連続した重複を除去
sort file | uniq # 全重複を除去
uniq -c file # 出現回数カウント
# カウント
wc -l file # 行数
wc -w file # 単語数
wc -c file # バイト数
ファイル検索
# find
find . -name "*.txt" # 名前で検索
find . -type f -name "*.log" # ファイルのみ
find . -type d -name "src" # ディレクトリのみ
find . -mtime -7 # 7日以内に更新
find . -size +100M # 100MB以上
find . -name "*.tmp" -delete # 削除
# locate(インデックス検索)
locate filename
注意: rm -rfは取り消しできません。必ず対象パスを確認してから実行しましょう。特に変数展開と組み合わせる場合は要注意です。
変数
# 変数
name="Alice"
echo $name
echo ${name}
# 環境変数
export PATH="$PATH:/new/path"
export NODE_ENV=production
特殊変数
| 変数 | 説明 |
|---|---|
$0 | スクリプト名 |
$1 | 第1引数 |
$@ | 全引数(個別) |
$* | 全引数(まとめて) |
$# | 引数の数 |
$? | 直前のコマンドの終了ステータス |
$$ | プロセスID |
$! | 最後のバックグラウンドプロセスID |
文字列操作
| 構文 | 説明 |
|---|---|
${var:-default} | 未定義ならデフォルト値 |
${var:=default} | 未定義なら代入 |
${#var} | 文字列長 |
${var#pattern} | 先頭からパターン削除(最短) |
${var##pattern} | 先頭からパターン削除(最長) |
${var%pattern} | 末尾からパターン削除(最短) |
${var%%pattern} | 末尾からパターン削除(最長) |
${var/old/new} | 置換(最初の1つ) |
${var//old/new} | 置換(全て) |
実践メモ: ${var:-default}構文を使えば、未定義変数にデフォルト値を設定できます。スクリプトの堅牢性が大幅に向上します。
制御構文
条件分岐
# if文
if [ "$name" = "Alice" ]; then
echo "Hello Alice"
elif [ "$name" = "Bob" ]; then
echo "Hello Bob"
else
echo "Hello stranger"
fi
条件演算子
文字列
| 演算子 | 説明 |
|---|---|
[ "$a" = "$b" ] | 等しい |
[ "$a" != "$b" ] | 等しくない |
[ -z "$a" ] | 空文字 |
[ -n "$a" ] | 空でない |
数値
| 演算子 | 説明 |
|---|---|
[ $a -eq $b ] | 等しい |
[ $a -ne $b ] | 等しくない |
[ $a -lt $b ] | より小さい |
[ $a -le $b ] | 以下 |
[ $a -gt $b ] | より大きい |
[ $a -ge $b ] | 以上 |
ファイル
| 演算子 | 説明 |
|---|---|
[ -e file ] | 存在する |
[ -f file ] | ファイルである |
[ -d dir ] | ディレクトリである |
[ -r file ] | 読み取り可能 |
[ -w file ] | 書き込み可能 |
[ -x file ] | 実行可能 |
論理演算
| 演算子 | 説明 |
|---|---|
[ cond1 ] && [ cond2 ] | AND |
[ cond1 ] || [ cond2 ] | OR |
! [ cond ] | NOT |
[[ ]] の使用(拡張テスト)
| 演算子 | 説明 |
|---|---|
[[ $name == A* ]] | パターンマッチ |
[[ $name =~ ^A.*$ ]] | 正規表現 |
ループ
# for
for i in 1 2 3 4 5; do
echo $i
done
for i in {1..10}; do
echo $i
done
for file in *.txt; do
echo $file
done
for ((i=0; i<10; i++)); do
echo $i
done
# while
while [ $count -lt 10 ]; do
echo $count
((count++))
done
# ファイル読み込み
while read line; do
echo $line
done < file.txt
case
case $option in
start)
echo "Starting..."
;;
stop)
echo "Stopping..."
;;
restart)
echo "Restarting..."
;;
*)
echo "Unknown option"
;;
esac
関数
# 関数定義
greet() {
local name=$1
echo "Hello, $name!"
return 0
}
# 呼び出し
greet "Alice"
# 戻り値の取得
result=$(greet "Alice")
status=$?
ポイント: パイプ(|)とリダイレクト(>)はBashの最も重要な概念。コマンドを繋げてデータを流す仕組みを理解しましょう。
リダイレクト・パイプ
| コマンド | 説明 |
|---|---|
command > file | 出力リダイレクト(上書き) |
command >> file | 出力リダイレクト(追記) |
command 2> file | 標準エラーリダイレクト |
command &> file | 両方リダイレクト |
command < file | 入力リダイレクト |
command1 | command2 | パイプ |
ls | grep "txt" | wc -l | パイプ連結 |
diff <(command1) <(command2) | プロセス置換 |
Here Document
cat << EOF
複数行の
テキスト
EOF
便利なテクニック
| コマンド | 説明 |
|---|---|
date=$(date +%Y%m%d) | コマンド置換 |
files=$(ls *.txt) | コマンド置換(ファイル一覧) |
((result = 5 + 3)) | 算術演算 |
result=$((5 + 3)) | 算術演算(代入) |
command & | バックグラウンド実行 |
nohup command & | ログアウト後も継続 |
command1 && command2 | 成功時のみ次を実行 |
command1 || command2 | 失敗時のみ次を実行 |
command1 ; command2 | 常に両方実行 |
find . -name "*.txt" | xargs grep "pattern" | xargs(検索) |
find . -name "*.tmp" | xargs rm | xargs(削除、実行前に対象確認) |
command | tee file | 画面とファイル両方に出力 |
注意: [ ]と[[ ]]は異なります。拡張テストの[[ ]]はBash固有で、パターンマッチや正規表現が使えます。POSIX互換が必要なら[ ]を使いましょう。
実践メモ: xargsとfindの組み合わせは頻出パターンです。削除に使う前に、まず find . -name "*.tmp" -print で対象を確認します。
シェルスクリプト例
#!/bin/bash
set -e # エラーで停止
set -u # 未定義変数でエラー
# 引数チェック
if [ $# -lt 1 ]; then
echo "Usage: $0 <filename>"
exit 1
fi
# ファイル存在チェック
if [ ! -f "$1" ]; then
echo "File not found: $1"
exit 1
fi
# 処理
echo "Processing $1..."
まとめ
Bash は、単体コマンドよりも「検索して、絞り込み、加工して、別のコマンドへ渡す」流れを覚えると実用的になります。まずは grep、find、パイプ、リダイレクト、終了ステータスを押さえてください。
削除、上書き、変数展開を伴う処理は事故につながりやすいため、先に対象を表示してから実行します。
参考リソース
- GNU Bash Manual - Bash 公式リファレンスマニュアル
- Bash Reference Manual (PDF/HTML) - GNU 公式ドキュメント一覧
- Bash man page - Linux man-pages プロジェクトの bash(1)
- Advanced Bash-Scripting Guide - TLDP の詳細ガイド
関連記事
- Gitチートシート - Git操作
- Dockerチートシート - Docker操作
- Linux基礎 - Linux入門