履歴とショートカット
前提:1-5が完了し、ホームディレクトリにいる状態から始めます(~/practiceは空のままです)。ここまでのページで何十行ものコマンドを手打ちしてきましたが、実は同じコマンドを毎回フルで打ち直す必要はありません。ターミナルはあなたが打った履歴をすべて覚えていて、それを呼び出したり編集したりするショートカットが揃っています。このページではhistory・!!・!番号・!文字列という履歴を再実行する仕組みと、Ctrl+RやTab補完といったキー操作を練習し、第1章のまとめに入ります。
このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。一部の行はキーボードショートカットの操作で、コマンドではなく「何のキーを押すか」を説明した出力例として示します。手打ち推奨で、ページの最後には~/practiceが空であることを確認して第1章を締めくくります。
SET 1 ― historyで履歴を見る
- $pwd
- /home/ubuntu
- $cd ~/practice
- $mkdir sandbox
- $touch sandbox/draft.txt
- $ls
- sandbox
- $ls sandbox
- draft.txt
- $history
- 238 cd ~/practice
- 239 mkdir sandbox
- 240 touch sandbox/draft.txt
- 241 ls
- 242 ls sandbox
- $history 3
- $history 5
- $history | tail -n 5
1行目のpwdでホームディレクトリにいることを確認し、2〜3行目で~/practiceにsandboxというディレクトリを作ります。4行目のtouch sandbox/draft.txtで中に空ファイルを1つ作り、5〜6行目のls・ls sandboxで確認します。ここまでは1-2・1-4で覚えたコマンドの復習です。7行目のhistoryコマンドを実行すると、今のログインセッションでこれまでに打ってきたコマンドが、実行した順番と通し番号つきで一覧表示されます。出力例のように、行の先頭に付いている数字が履歴番号※1です(実際の番号はここまで打ってきたコマンドの数によって変わります)。
8行目のhistory 3、9行目のhistory 5のように数字を指定すると、直近何件だけに絞って表示するかを変えられます。数字を大きくするほど、さかのぼって表示される件数が増えます。10行目のhistory | tail -n 5は、1-4で習ったtailと|(パイプ)を組み合わせて、履歴の末尾5件だけを取り出す書き方です。history 5と似た結果になりますが、|は左側のコマンドの出力を右側のコマンドに渡す記号で、詳しくは第3章「リダイレクトとパイプ」で扱いますが、こうして今まで習ったコマンド同士を組み合わせられることも覚えておいてください。
historyは単なる記録係ではなく、次に紹介する!!や!番号で「もう一度呼び出す」ための土台でもあります。番号がどう並んでいるかを意識しておくと、このあとの操作がスムーズです。
SET 2 ― !!・!番号・!文字列で再実行する
- $ls sandbox
- $!!
- ls sandbox
- $touch sandbox/memo.txt
- $history | tail -n 3
- 242 touch sandbox/memo.txt
- 243 history | tail -n 3
- $!242
- touch sandbox/memo.txt
- $!mkdir
- mkdir sandbox
- mkdir: cannot create directory 'sandbox': File exists
- $!ls
- draft.txt memo.txt
- $!touch
- touch sandbox/memo.txt
- $ls -l sandbox
- $history 3
2行目の!!(エクスクラメーションマーク2つ、「バンバン」と読まれます)は、直前に実行したコマンドをそのまま再実行する書き方です。出力例のように、まず実行内容が画面にechoされてから結果が表示されます。1行目でls sandboxを打ったあと!!を打つと、もう一度ls sandboxが実行されます。
5行目の!242のように、!のあとにSET 1で見た履歴番号を指定すると、その番号のコマンドをピンポイントで再実行できます。出力例の242行目はtouch sandbox/memo.txtだったので、同じコマンドがもう一度走ります(番号は環境によって変わるため、自分のhistoryの実際の番号に読み替えて試してください)。
6行目の!mkdirのように、番号の代わりに文字列を指定すると、その文字列で始まる直近のコマンドを履歴から探して再実行してくれます。出力例のように、過去に打ったmkdir sandboxが再実行され、sandboxはすでに存在するため1-2で見たFile existsエラーになりますが、これは想定どおりの結果です。7行目の!lsも同様に、直近のlsで始まるコマンドを呼び出します。出力例のとおり、sandboxの中にはSET 1のdraft.txtとこのSETで作ったmemo.txtが並んでいます。
8行目の!touchのように、!文字列はlsのような短いコマンドだけでなく、touchのような別のコマンド名でも同じように使えます。!文字列は「うろ覚えの長いコマンドを、最初の数文字だけで呼び出す」ときにとても便利です。9行目のls -l sandboxで、ここまでの!!・!番号・!文字列による再実行の結果、ファイルが増えたり更新日時が変わったりしたことを確認しておきます。10行目のhistory 3で、SET 1に続いてもう一度直近の履歴を振り返り、このSETで打ったコマンドがちゃんと記録されていることを確かめてSETを締めくくります。

!文字列、最初は「え、危なくない?」って思うかもだけど、実行される前に一瞬コマンドの中身が画面にプレビュー表示されるから安心して! 不安なときはhistoryで番号を確認してから!番号を使うのが確実だよ。あたしは長いコマンドを打つのが面倒なとき、よく!!で「さっきの」を呼び出してるよ!
!!=直前、!番号=履歴の番号指定、!文字列=その文字列で始まる直近のコマンド。3つとも「もう一度打つ」を省略する仕組みだと覚えてください。
SET 3 ― Tab補完とカーソル移動のショートカット
- $cd sand
- (ここで Tab キーを1回押す → cd sandbox/ まで自動補完される)
- $cd sandbox/
- $pwd
- /home/ubuntu/practice/sandbox
- $ls dr
- (ここで Tab キーを1回押す → ls draft.txt まで自動補完される)
- $ls draft.txt
- $cd ~/practice
- (Ctrl+R を押して "mkdir" と入力 → history から mkdir sandbox がヒットして表示される)
- (そのまま Enter で実行、もしくは Ctrl+C でキャンセルして入力前の状態に戻れる)
- $ls -l sandbox/memo.txt
- (行末で Ctrl+A を押す → カーソルが行の先頭 "ls" の直前に飛ぶ)
- (続けて Ctrl+E を押す → カーソルが行の末尾に戻る)
- (Ctrl+U を押す → カーソルより左が全部消える。打ち間違えたときの一括消去に便利)
- $!cd
- cd ~/practice
- $clear
- (Ctrl+L でも同じく画面をクリアできる。履歴は消えない)
- $rm -r sandbox
1行目、cd sandまで打った状態でTabキーを押すと、シェルが~/practice内を検索してsandboxという候補を見つけ、出力例のように自動的にcd sandbox/まで補完してくれます。これがTab補完※2です。候補が複数あるときはTabを2回押すと一覧が表示されます。長いファイル名やディレクトリ名を全部手打ちしなくてよくなるので、綴りミスも減らせる非常に強力な機能です。3行目のpwdで、cd sandbox/まで補完された結果/home/ubuntu/practice/sandboxに移動できていることを確認します。
4行目のls drまで打ってTabを押すと、sandboxの中でdrから始まるファイルはdraft.txtだけなので、出力例のようにls draft.txtまで一意に補完されます。Tab補完はディレクトリの移動だけでなく、こうしてコマンドの引数に渡すファイル名にも使えます。5行目で実際にls draft.txtを実行して確認します。
6行目のcd ~/practiceのあと、Ctrl+Rを押すとターミナルの下部に検索プロンプトが現れ、そこにmkdirと打つと、SET 1やSET 2で実行したmkdir sandboxが履歴から浮かび上がってきます。これは逆方向インクリメンタル検索※3と呼ばれる機能で、historyを目で追って番号を探すより速く、うろ覚えのコマンドにたどり着けます。見つかったコマンドはEnterで実行、気が変わったらCtrl+Cを押せば検索をキャンセルして何もなかった状態に戻れます。
7行目のls -l sandbox/memo.txtのあとの3つの出力例は、入力中の行そのものを編集するショートカットです。Ctrl+Aは行頭へ、Ctrl+Eは行末へ一瞬でカーソルを飛ばします(AはAlphabetの最初=行の先頭、EはEnd=行の末尾と覚えると混同しません)。長いコマンドを打ったあとに先頭のタイプミスに気づいたとき、矢印キーを連打せずに一発で戻れます。Ctrl+Uはカーソルより左側の入力をまとめて消去するショートカットで、打ちかけのコマンドを丸ごとやり直したいときに重宝します。
8行目の!cdは、SET 2で練習した!文字列の総復習です。直近のcdで始まるコマンド、つまり6行目のcd ~/practiceが再実行され、出力例のように同じ場所へ移動します(すでにその場所にいるので実質的には何も変わりません)。SET 2で覚えた再実行の仕組みと、このSETのキー操作は、どちらも「同じ入力を繰り返さない」という同じ目的でつながっています。
9行目のclearコマンドと、その代わりに使えるCtrl+Lは、画面の表示だけをきれいに消してくれます。ここが履歴とは違う重要な点で、画面がまっさらになってもhistoryで振り返れる記録自体は消えません。最後に10行目のrm -r sandboxで、このページの練習用に作ったsandboxディレクトリを中身ごと削除します。

Tab補完とCtrl+Rは、慣れると本当に手放せなくなるよ。あたしは長いパスを打つときは絶対Tabキー連打だし、「あのコマンド何だっけ…」ってなったら反射でCtrl+R押しちゃう。最初は忘れがちだけど、この2つだけでも意識して使ってみると、タイピング量が体感半分くらいになるからぜひ試してみて!
まとめ
- $ls -la
- . ..
- $cd ~
- $pwd
- /home/ubuntu
仕上げにls -laで~/practiceの中身を確認すると、.と..だけが並ぶ空のディレクトリに戻っていることがわかります。cd ~でホームディレクトリに戻り、これで第1章「ファイル操作の基本」は完了です。~/practiceという練習拠点はこのあとの章でも空のまま存在し続け、第2章からはここに新しい仲間yumiを迎えて、ユーザーと権限の世界に進んでいきます。
1-6では、コマンドを打ち直す手間を減らすための履歴操作とキーボードショートカットを一通り体験しました。このページで叩けるようになったコマンド・操作を一覧にまとめます。
| コマンド/操作 | 何をするか | 覚え方 |
|---|---|---|
history | これまで実行したコマンドを番号付きで一覧する | 履歴そのもの |
!! | 直前のコマンドを再実行する | バンバン=直前をもう一度 |
!番号 | 指定した履歴番号のコマンドを再実行する | historyで見た番号を指定 |
!文字列 | その文字列で始まる直近のコマンドを再実行する | うろ覚えの頭数文字で呼び出す |
| Tab | ファイル名やディレクトリ名を自動補完する | 最後まで打たなくていい |
| Ctrl+R | 履歴を逆方向にインクリメンタル検索する | Reverse search(逆方向検索) |
| Ctrl+A / Ctrl+E | 入力行の先頭/末尾へカーソルを移動する | 行のAtama(先頭)とEnd(末尾) |
| Ctrl+U | カーソルより左の入力を一括で消す | Undo的に打ち間違いを消す |
clear / Ctrl+L | 画面表示だけをクリアする(履歴は消えない) | 画面のお掃除。記憶は消えない |
次のページ「2-1. sudoとrootの正体」からは第2章に入り、いよいよ管理者権限の世界と、この講座のもう1人の主役となる練習用ユーザーyumiが登場します。