レシピ
ワンライナー集
「容量を食っているのは何?」「このポートを使っているのは誰?」など、よくある作業をコマンドの組み合わせで解決する例。
コマンドを組み合わせた「そのまま使える」例です。各コマンドの詳しい説明は、リンク先のページを見てください。
ディスクと容量
# 今のディレクトリで大きいものを上位20個
$ du -ah . 2>/dev/null | sort -rh | head -20
# 100MB を超えるファイルを探す(/mnt は除く)
$ sudo find / -xdev -type f -size +100M -exec ls -lh {} + 2>/dev/null | sort -k5 -rh | head
# ディスクの空きをまとめて確認
$ df -h -x tmpfs -x devtmpfs
# node_modules がどれだけ容量を使っているか
$ find ~ -name node_modules -type d -prune -exec du -sh {} + | sort -rh | headプロセスとポート
# 3000番ポートを使っているプロセスを調べて止める
$ sudo lsof -i :3000
$ fuser -k 3000/tcp
# 待ち受け中のポートの一覧
$ ss -tlnp
# メモリを多く使っているプロセス上位10個
$ ps aux --sort=-%mem | head -11
# 名前で探して止める
$ pkill -f "node server.js"ファイルの検索と一括処理
# 7日以内に更新したファイル
$ find . -type f -mtime -7 -not -path '*/.git/*'
# 文字列を含むファイルをまとめて置換
$ rg -l 'old_name' | xargs sed -i 's/old_name/new_name/g'
# 拡張子をまとめて変える(.jpeg → .jpg)
$ for f in *.jpeg; do mv -- "$f" "${f%.jpeg}.jpg"; done
# ファイル名の空白を _ に
$ for f in *\ *; do mv -- "$f" "${f// /_}"; done
# 同じ中身のファイル(重複)を探す
$ find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
# 連番のファイル名を付ける
$ n=1; for f in *.png; do mv -- "$f" "$(printf 'img_%03d.png' $n)"; n=$((n+1)); doneログを読む
# アクセスの多いIPアドレス上位10件
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# ステータスコードごとの件数
$ awk '{print $9}' access.log | sort | uniq -c | sort -rn
# ERROR を含む行を、前後2行付きで追いかける
$ tail -F app.log | grep --line-buffered -C2 ERROR
# 今日のエラーだけ(journald)
$ journalctl -p err --since todayテキストの加工
# CSV の2列目の合計
$ awk -F, 'NR>1 {s+=$2} END {print s}' data.csv
# 重複行を、順番を保ったまま除く
$ awk '!seen[$0]++' list.txt
# 空行とコメント行を除いて設定ファイルを見る
$ grep -vE '^\s*(#|$)' /etc/ssh/sshd_config
# Windows の改行(CRLF)を LF に
$ sed -i 's/\r$//' script.sh
# JSON の配列から特定の項目だけ取り出して CSV に
$ jq -r '.[] | [.id, .name] | @csv' users.jsonネットワーク
# 自分のグローバルIP
$ curl -s ifconfig.me; echo
# サイトの応答コードと時間
$ curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com
# ポートが開いているか
$ nc -zv example.com 443
# 今のディレクトリを簡易Webサーバーで公開
$ python3 -m http.server 8000
# ファイルを作らずにサーバーへディレクトリを送る
$ tar czf - ./site | ssh vps 'tar xzf - -C /srv/www'バックアップ
# 日付付きでまとめて圧縮
$ tar czf "backup-$(date +%F).tar.gz" --exclude=node_modules ~/project
# 設定ファイルを書き換える前に日付付きでコピー
$ cp nginx.conf{,.$(date +%Y%m%d)}
# rsync で差分バックアップ(まず -n で確認)
$ rsync -avhn --delete ~/project/ /mnt/d/backup/project/
$ rsync -avh --delete ~/project/ /mnt/d/backup/project/シェルの小技
# 直前のコマンドを sudo でやり直す
$ sudo !!
# 直前のコマンドの最後の引数を使う
$ mkdir -p ~/work/new-app && cd !$
# 長いコマンドをエディタで書く
# Ctrl+X Ctrl+E
# 実行時間を測りつつ、終わったら音を鳴らす
$ time make; printf '\a'
# 同じコマンドを2秒ごとに繰り返して変化を見る
$ watch -n2 -d 'ls -l'画像・動画・PDF
# フォルダ内の JPEG を横1600px・画質85にまとめて縮小(元は上書き)
$ mogrify -resize '1600x>' -quality 85 *.jpg
# 画像の位置情報などのメタデータをまとめて消す
$ exiftool -all= -overwrite_original *.jpg
# 動画の最初の10秒を GIF に
$ ffmpeg -t 10 -i in.mp4 -vf "fps=12,scale=480:-1:flags=lanczos" out.gif
# スキャンした画像を1つの PDF に
$ convert scan_*.jpg scans.pdf
# PDF を小さくする
$ gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=small.pdf big.pdf
# PDF の文字をまとめて検索
$ for f in *.pdf; do pdftotext "$f" - | grep -q "請求書" && echo "$f"; done文字コードと改行
# Windows の Excel で作った CSV(Shift_JIS)を UTF-8 に
$ iconv -f CP932 -t UTF-8 data.csv > data_utf8.csv
# UTF-8 の CSV を Excel で文字化けせずに開けるようにする(BOM を付ける)
$ printf '\xEF\xBB\xBF' | cat - data.csv > data_bom.csv
# フォルダ内のテキストの改行を LF に揃える
$ find . -name '*.sh' -exec sed -i 's/\r$//' {} +日時
# ファイル名に日時を入れる
$ cp app.log "app_$(date +%Y%m%d_%H%M%S).log"
# UNIX時間 ⇔ 日時
$ date -d @1790000000 '+%F %T'
$ date -d '2026-12-31 23:59:59' +%s
# 2つの日付の差(日数)
$ echo $(( ($(date -d 2026-12-31 +%s) - $(date +%s)) / 86400 ))Git
# 自分のコミット数を日ごとに
$ git log --author="$(git config user.name)" --date=short --pretty=%ad | sort | uniq -c
# マージ済みのローカルブランチをまとめて消す
$ git branch --merged main | grep -vE '^\*|main' | xargs -r git branch -d
# 大きなファイルを履歴から探す
$ git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '$1=="blob"' | sort -k3 -n | tail -10
# 直前のコミットに今の変更を追加(メッセージはそのまま)
$ git commit --amend --no-editDocker
# 止まっているコンテナをまとめて消す
$ docker container prune -f
# すべてのコンテナのメモリ使用量を一度だけ表示
$ docker stats --no-stream --format 'table {{.Name}}\t{{.MemUsage}}'
# 動いているコンテナの環境変数を見る
$ docker exec web env | sort監視と通知
# 長い処理が終わったらデスクトップに通知
$ make build; notify-send "ビルド終了" "終了コード: $?"
# サイトが落ちたら知らせる(1分ごとに確認)
$ while true; do curl -fs -o /dev/null https://example.com || notify-send "ダウン"; sleep 60; done
# ディスクが90%を超えたら警告
$ df -h --output=pcent,target | awk 'NR>1 && $1+0 > 90 {print "警告:", $2, $1}'