世界を動かす技術を、日本語で。

生活を楽にするシェルの裏技(心の平穏も守る)

2026年3月26日原文(blog.hofstede.it)

概要

  • 優れたエンジニアでも、非効率なターミナル操作に陥りがち
  • POSIX互換シェルで使える便利なショートカットやコマンドを紹介
  • Bash/Zsh限定の快適機能も網羅
  • 作業効率を劇的に向上させるテクニック集
  • 日常的に一つずつ習得することを推奨

ターミナル操作の非効率とその解決策

  • エンジニア でも、行頭のタイプミス修正時に Backspace長押し をしがち
  • ls, cd, grep など基本コマンドを覚えた後、効率化を怠る傾向
  • ターミナルは「住まい」だが、 家具の配置換え (効率化)をしない現状

ほぼ全てのPOSIX系シェルで使える基本テクニック

  • Emacs風ショートカット (Readline対応シェルで標準)
    • CTRL + W :カーソル直前の単語を即削除
    • CTRL + U/K :行頭/行末まで一気にカット、 CTRL + Y で再貼り付け
    • CTRL + A/E :行頭/行末に瞬間移動
    • ALT + B/F :単語単位で前後移動(MacはOptionキー設定要)
  • reset (または stty sane):バイナリファイルcat後のターミナル復旧
  • CTRL + C :コマンド即中断
  • CTRL + D :EOF送信、空行でシェル終了に注意
  • CTRL + L :画面クリア、入力中コマンドはそのまま
  • cd - :直前のディレクトリに即戻り
  • pushd/popd :複数ディレクトリのスタック管理
  • > file.txt :ファイル内容を即空に、パーミッション等維持
  • $_ :直前コマンドの最終引数展開、パス再利用に便利
  • set -e/-u :スクリプトのエラー時即終了、未定義変数利用時エラー

Bash/Zsh限定の快適ショートカット集

  • CTRL + R :履歴から逆検索、キーワード入力で過去コマンドを即呼び出し
  • !! :直前コマンド全文展開、sudo !!で「権限昇格リトライ」
  • CTRL + X, CTRL + E :現在のコマンドラインをエディタで編集&即実行
  • fc :$EDITORで直前コマンドを編集、BashやZsh以外でも利用可
  • ESC + .(ALT + .) :直前コマンドの最後の引数を挿入、連打でさらに遡れる
  • !$ :直前コマンドの最後の引数を即展開(入力時編集不可)
  • 中括弧展開(brace expansion)
    • cp pf.conf{,.bak} :バックアップファイルの一発作成
    • mv filename.{txt,md} :拡張子変更を一瞬で
    • mkdir -p project/{src,tests,docs} :複数ディレクトリ同時作成
  • プロセス置換(process substitution)
    • diff <(sort file1.txt) <(sort file2.txt) :一時ファイル不要の比較
  • グロブスター(globstar)
    • shopt -s globstar で **ls ** /*.js:再帰的なファイル検索が簡単に
  • バックグラウンド&切り離し
    • CTRL + Z で一時停止、 bg でバックグラウンド化、 disown でターミナルから切り離し
  • |& tee file.log
    • 標準出力・標準エラー出力を同時に画面表示&ログ保存

ターミナル習熟のすすめ

  • シェルは 障害物競走 ではなく 道具箱
  • 全てを一度に覚える必要なし、 一つずつ習得 して習慣化
  • ターミナルの「家具」を 自分好みに配置 して快適作業環境の構築

Hackerたちの意見

LLMっぽい見出しはあんまり好きじゃないし、アドバイスもバラバラな感じだね(シェルじゃなくてreadlineライブラリにちゃんとクレジットをあげてほしいところもあるけど)。でも、ここには試してみたいことがいくつかあるよ。ブレース展開が嫌いな理由の一つは、タブ補完と上手く連携しないこと。例えば、最後のトークンを簡単に複製したり(エスケープされたスペースや引用符付きのスペースも含めて)、ファイル名のサフィックスを削除したりするのが楽だといいな。それと、変数や~をすぐに展開してほしい(エンターを押した後じゃなくて)。

readlineの話だけど、最近PowerShellにreadlineモードがあることを知ったよ。めっちゃ便利だね。WSLで主に作業してて、たまにPSを使うから、コンテキストスイッチの手間がかなり減る。

CTRL + Wは通常、前の空白までの全てを削除するから、OPの例だと'/var/log/nginx/'の文字列が全部消えちゃうよ。Alt + バックスペースは通常、非英数字の文字に出会うまで削除するんだ。ただ、CTRL + Wを筋肉記憶に組み込むのは気をつけてね、ブラウザのタブを何回閉じたか数えきれないよ…

Ctrl-Shift-Tを押すと、少なくともそのタブがすぐ戻ってくるよ。

私のターミナルでは全く逆で、Alt-Backspaceは前のスペースまで削除するけど、Ctrl-Wは最後の非英数字(例えば/)まで削除するんだ。Alacrittyターミナルでfishシェルを使ってるよ。うん、時々Ctrl-Wを誤って押しちゃうのは面倒だけど、FirefoxのCtrl-Shift-Tは神だね。

CTRL + Wを筋肉記憶にするのは気をつけてね、ブラウザのタブを何回閉じたか数えきれないよ…これ痛い。あと、シェルではC+wをやると、C+yで「貼り付け」できるよ。設定を消してなければだけど。

$WORDCHARSをそれに合わせて設定してね。君の場合、$WORDCHARSから/を削除するといいよ。https://unix.stackexchange.com/a/726014

ctrl+rを2回押すと、最後に検索した内容で自動補填されるよ。もっと押すと履歴を遡ることができる。最近、Dockerの作業をしているときによく使ってる。ctrl+rでコンテナ名を入力して、compose buildコマンドが出るまで続ける。ctrl+r、ctrl+r、ログコマンドが出るまで繰り返す。そうすれば、ビルドとログコマンドを簡単に取得できる。ctrl+rは友達だね。ctrl+r

fzfとシェル統合を追加すると、Ctrl+rがもっと便利になるよ!

この記事のコメントから好きな部分があるんだけど:彼はパスに#というスクリプトを持っていて、mycmd1 | # mycmd2 | mycmd3みたいにパイプ要素をコメントアウトするのに使ってたんだ。このスクリプトはこう書かれてた:#!/bin/sh cat

うん!これ、$PATHに入れるわ。catの使い方としてはめっちゃ便利だね!

似たようなトリック: #!/bin/sh $* これが俺の~/bin/noglobファイルなんだけど、bashからnoglobを使うzshスクリプトを呼ぶときに、壊れないようになってるんだ。

Hacker Newsで議論の続きを見る