Bash コマンド辞典
Bash コースで覚えるコマンドと構文の一覧です。cd・ls などの基本操作(pwd・cd・ls・mkdir・touch・cp・mv・rm・less・basename・date・diff・which)は最初から使えます。
basename / dirnameパスのファイル名部分・ディレクトリ部分いつでも使える
basename パス [拡張子] dirname パス
パスから名前だけ、またはディレクトリだけを取り出します。
diff2 つのファイルの違いいつでも使える
diff ファイル1 ファイル2
< は 1 つ目だけ、> は 2 つ目だけにある行です。
break / continueくり返しを抜ける・次へいつでも使える
break [n] continue [n]
for・while の中で使います。break でループを抜け、continue で次のくり返しへ進みます。
$1 $# $@ shiftスクリプトの引数いつでも使える
$0 $1 $2 … $# "$@" shift [n] set -- 値...
$0 はスクリプト名、$1 からが引数、$# は個数、"$@" は全部(1 つずつ別の語)。shift で 1 つずらします。終了コードは $? で見ます。
catファイルの中身を表示Lv1 で覚える
cat [-n] ファイル...
ファイルを連結して表示します。-n で行番号付き。
$ cat /etc/os-release
echo / printf文字を表示Lv1 で覚える
echo [-n] [-e] 文字列... printf 書式 引数...
文字列を表示します。> ファイル と組み合わせるとファイルに書けます。
$ echo hello > memo.txt $ echo 'line' >> memo.txt
head先頭の行を表示Lv2 で覚える
head [-n 行数] ファイル
既定は 10 行。-n 5 または -5 で行数を指定します。
$ head -n 3 /etc/passwd
tail末尾の行を表示Lv2 で覚える
tail [-n 行数] ファイル
ログの最新部分を見るのに使います。-n +2 で 2 行目以降。
$ tail -n 20 /var/log/messages
wc行数・単語数・バイト数を数えるLv2 で覚える
wc [-l] [-w] [-c] [ファイル]
-l で行数だけ。パイプと組み合わせて件数を数えます。
$ grep error app.log | wc -l
sort行を並べ替えるLv3 で覚える
sort [-n] [-r] [-u] [-k 列] [-t 区切り]
-n 数値順、-r 逆順、-u 重複を除く、-k 何列目で並べるか。
$ sort -nr counts.txt
uniq連続する重複行をまとめるLv3 で覚える
uniq [-c] [-d]
sort と組み合わせて使います。-c で回数付き。
$ sort access.log | uniq -c | sort -nr
cut列を切り出すLv4 で覚える
cut -d 区切り -f 列番号 cut -c 文字位置
区切り文字で分けた何列目かを取り出します。
$ cut -d: -f1 /etc/passwd
tr文字を置き換える・消すLv4 で覚える
tr 置換元 置換先 tr -d 消す文字
標準入力の文字を変換します。
$ echo hello | tr a-z A-Z
tee画面とファイルの両方に出すLv5 で覚える
tee [-a] ファイル
パイプの途中で内容をファイルに保存します。sudo tee で root 権限のファイルに書けます。
$ echo 'Listen 8080' | sudo tee -a /etc/httpd/conf/httpd.conf
xargs入力をコマンドの引数にするLv5 で覚える
xargs [-I {}] コマンドパイプで受け取った一覧を、別のコマンドの引数として渡します。
$ find . -name '*.tmp' | xargs rm
export / env環境変数Lv6 で覚える
export 名前=値 env echo $名前
env で一覧、echo $PATH のように参照します。
seq数の並びを出すLv6 で覚える
seq 終わり seq 始め 終わり seq 始め 増分 終わり seq -s 区切り … / seq -w …
1 行に 1 つずつ数を出します。-s で区切り、-w で桁をそろえます。{1..10} のブレース展開でも同じことができます。
$ seq 5 $ seq -s, 1 3
grepパターンに合う行を探すLv8 で覚える
grep [-i] [-v] [-n] [-c] [-r] [-E] [-o] パターン [ファイル...]
-i 大文字小文字を区別しない、-v 合わない行、-n 行番号、-c 件数、-r 再帰、-E 拡張正規表現、-o 合った部分だけ。
$ grep -i error /var/log/messages $ grep -rn Listen /etc/httpd
find条件に合うファイルを探すLv12 で覚える
find [場所] [-name パターン] [-type f|d] [-size +100M] [-mtime +7] [-user 名前] [-exec コマンド {} \;]名前・種類・サイズ・更新日・所有者で探せます。-delete や -exec で見つけたものに処理もできます。
$ find /var/log -name '*.log' -size +100M $ find ~ -type f -name '*.bak' -delete
awk列を取り出す・集計するLv14 で覚える
awk [-F 区切り] 'パターン { 処理 }' [ファイル]$1 $2 は列、$NF は最後の列、NR は行番号。{ count[$1]++ } のように集計もできます。
$ awk '{print $1}' access.log
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwdsed文字列を置換・行を削除Lv21 で覚える
sed [-i] [-n] 's/前/後/g' [ファイル] sed '/パターン/d'
-i でファイルを直接書き換えます。設定ファイルの一部を変えるときに便利。
$ sudo sed -i 's/^Listen 80$/Listen 8080/' /etc/httpd/conf/httpd.conf
chmod権限を変えるLv27 で覚える
chmod 755 ファイル chmod u+x,go-w ファイル chmod -R モード ディレクトリ
r=4 w=2 x=1 を所有者・グループ・その他の順に足した数字、または u/g/o と +-= で指定します。
$ chmod +x deploy.sh $ chmod 600 secret.key
viテキストエディタLv27 で覚える
vi ファイル sudo vi ファイル
i で入力、Esc で戻る、:wq で保存して終了、:q! で保存せずに終了。Vim コースで覚えた操作がそのまま使えます。
bash / sourceシェルスクリプトを実行Lv27 で覚える
bash スクリプト ./スクリプト(実行権限が必要) bash -c 'コマンド'
./ で実行するには chmod +x が必要です。
[ ] / test / [[ ]]条件を調べるLv28 で覚える
[ "$a" -eq 1 ] [ -f ファイル ] [[ $s == *.log ]] [[ $s =~ 正規表現 ]]
数値は -eq -ne -lt -le -gt -ge、文字列は = != -z(空)-n(空でない)、ファイルは -e -f -d -r -w -x -s。[[ ]] では == がパターン一致、=~ が正規表現、&& || が使えます。結果は終了コード(0 が真)。
$ [ -d /tmp ] && echo yes $ [[ $name == a* ]] && echo match
if条件で分けるLv28 で覚える
if 条件; then …; elif 条件; then …; else …; fi
条件のコマンドの終了コードが 0 なら then を実行します。条件には [ ]、[[ ]]、(( ))、grep -q などのコマンドを書けます。
$ if [ $# -lt 1 ]; then echo usage; exit 1; fi
forくり返すLv29 で覚える
for 変数 in 値...; do …; done for ((i=0; i<n; i++)); do …; done
値を 1 つずつ変数に入れてくり返します。in を省くと引数("$@")を順に。break で抜け、continue で次へ。
$ for f in *.log; do wc -l "$f"; done $ for i in $(seq 3); do echo $i; done
while / until条件のあいだくり返すLv30 で覚える
while 条件; do …; done until 条件; do …; done while read -r line; do …; done < ファイル
条件が真のあいだ(until は偽のあいだ)くり返します。while read でファイルを 1 行ずつ処理するのが定番です。
$ i=0; while [ $i -lt 3 ]; do i=$((i+1)); done
read1 行読んで変数に入れるLv30 で覚える
read 変数... IFS=区切り read -r a b read -a 配列
標準入力から 1 行読みます。変数が複数なら空白(IFS)で分け、最後の変数に残り全部。-r でバックスラッシュをそのまま。読めないと終了コード 1。
$ while IFS=, read -r name age; do echo "$name"; done < users.csv
caseパターンで分けるLv31 で覚える
case 語 in パターン) …;; パターン|パターン) …;; *) …;; esac
語に合う最初のパターンの処理を実行します。パターンは * ? [ ] のワイルドカードと | の「または」。
$ case "$1" in start) echo start;; *) echo usage;; esac
$(( )) / (( )) / let / expr整数の計算Lv32 で覚える
$(( 式 )) (( 式 )) let 変数=式
+ - * / %(割り算は整数)、** べき乗、++ --、比較 == < >、&& ||、三項演算子 ? :。(( )) は結果が 0 以外なら真。変数は $ なしでも書けます。
$ echo $(( 7 / 2 )) $ (( count++ )) $ (( n > 10 )) && echo big
関数 name() { }処理に名前をつけるLv33 で覚える
name() { …; }
local 変数=値
return 終了コード関数の中では引数が $1 $2 … $# になります。local で関数の中だけの変数。値を返すときは echo して $(name) で受け取ります。
$ greet() { echo "Hello, $1"; }; greet Taro配列 / ${ } の展開値の並びと文字列の加工Lv34 で覚える
arr=(a b c) ${arr[0]} "${arr[@]}" ${#arr[@]} arr+=(d)
${v#パターン} ${v##…} ${v%…} ${v%%…}
${v/a/b} ${v//a/b} ${v^^} ${v,,} ${v:位置:長さ} ${#v} ${v:-既定値}配列は 0 番から。# は前から、% は後ろから取り除き(2 つ重ねると最長一致)。/ は置き換え、^^ は大文字、,, は小文字、:- は空のときの既定値。
$ f=/var/log/app.log; echo ${f##*/} ${f%.log}tarアーカイブの作成・展開Lv38 で覚える
tar czf 出力.tar.gz 対象... tar xzf ファイル.tar.gz [-C 展開先] tar tzf ファイル.tar.gz
c 作成、x 展開、t 一覧、z gzip 圧縮、f ファイル名、v 表示。
$ tar czf backup.tar.gz /etc/httpd
systemctlサービスの起動・停止・自動起動Lv39 で覚える
systemctl start|stop|restart|reload|status サービス systemctl enable|disable [--now] サービス systemctl is-active|is-enabled サービス systemctl list-units --type=service [--failed]
start は今すぐ起動、enable は再起動後も自動で起動。enable --now で両方。操作には sudo が必要です。
$ sudo systemctl enable --now httpd $ systemctl status sshd
curlURL にアクセスLv39 で覚える
curl [-I] [-s] [-o ファイル] URL
Web サーバーの動作確認に使います。-I でヘッダーだけ、-o でファイルに保存。
$ curl http://localhost/ $ curl -I http://localhost:8080/