MENU

ターミナル画面とスクロールバック履歴を完全に消去する実務手順

目次

まず結論:目的別コマンド早見表

ターミナルの画面を整理したい場面は作業中に何度も訪れます。ひと口に「画面をきれいにする」といっても、目的によって使うべき手段が異なります。まず3パターンを押さえてください。

# 1. 画面の表示のみ消す(スクロールで過去出力を遡れる)
clear

# 2. キーボードショートカットで同じ動作(コマンド入力なし)
#    Ctrl + L

# 3. スクロールバック履歴ごと消去する(完全にリセット)
clear && printf '\033[3J'

Ctrl+Lclearコマンドと同等の動作で、ホームポジションを崩さずに即実行できます。コマンド入力中でも割り込んで実行されるため、長いコマンドを打っている途中でも使えます。スクロールで過去の出力を遡られたくない場面、あるいは機密性の高いログを確認した後には3番目のエスケープシーケンスを組み合わせた方法が有効です。

「表示クリア」と「スクロールバック消去」は別物

clearコマンドやCtrl+Lで行われるのは、画面の表示内容をカーソル位置より上へ押し出す操作です。ターミナルエミュレータのスクロールバックバッファには過去の出力がそのまま残るため、マウスホイールやスクロールバーで遡ることができます。「画面がきれいになった」ように見えても、バッファを消したわけではありません。

一方、printf '\033[3J'が送るエスケープシーケンスはスクロールバックバッファ自体を消去するよう端末に指示するものです。clearと組み合わせることで「現在の表示をクリアしつつバッファも消去する」操作が1行で完結します。

ある運用現場では、sudo経由でシステムログを参照した後、画面を引き継いで別の担当者が作業するという運用をしていました。その際にclearだけでは参照したログが残り続けるため、バッファまで消去するコマンドをbashrcにエイリアスとして登録する対応を採用していました。

ターミナルエミュレータ・多重端末別の消去方法

スクロールバックの消去方法はターミナルエミュレータや多重端末ソフトウェアによって操作が異なります。環境に合わせて以下を参照してください。

GNOME Terminal・Konsole(デスクトップ環境)

GNOME TerminalではCtrl+Shift+Kでスクロールバックバッファを消去できます。Konsoleでも同じショートカットが使えます。GUIメニューから「Edit → Clear Scrollback」を選ぶ方法もあります。エスケープシーケンス(printf '\033[3J')はこれらの環境でも動作しますが、ショートカットの方が素早く操作できます。

tmux(多重ターミナル)

tmux環境ではclearコマンドだけではtmux自身が管理するスクロールバックバッファが残ります。tmuxのペインごとにバッファを消去するには専用コマンドを使います。

# 現在のペインのスクロールバックを消去
tmux clear-history

# コマンドラインから表示クリアと同時に実行
clear && tmux clear-history

# tmuxのコマンドプロンプト経由(プレフィックス→:→コマンド名)
# プレフィックス(デフォルト: Ctrl+B)→ : → clear-history → Enter

tmuxセッション内でエスケープシーケンスを送ってもtmuxのバッファには効かないため、tmux clear-historyとの組み合わせが確実です。複数ペインをまとめてクリアしたい場合はtmuxのスクリプト機能で全ペインに対してループ実行する方法もあります。

ターミナルが文字化け・壊れたときの完全リセット

バイナリファイルを誤ってcatしたり、エンコードの異なるファイルを表示したりすると、ターミナルの表示が崩れて制御文字が乱立した状態になることがあります。このような場合、clearでは回復できません。

# ターミナルの状態を初期値に戻す(表示が壊れていても実行可能)
reset

# reset が使えない場合のフォールバック
tput reset

# 端末の入出力設定だけを安全な状態に戻す(軽量版)
stty sane

resetはエスケープシーケンスを初期状態に戻し、文字コード設定やカーソル形状のリセットも含みます。実行直後に画面が暗転することがありますが、数秒待つと正常な状態に戻るのが通常です。コマンドが正しく入力できているか不安な場合は、Enterを一度押してプロンプトを出してからブラインドタッチでresetと入力します。

stty saneは端末の入出力属性(エコー表示、シグナル処理など)を安全な値に戻すだけで、表示の乱れ自体は修正しません。「コマンドを打っても文字が表示されない」「Enterが効かない」といった入力系のトラブルにはstty saneが有効で、表示の文字化けにはresetが適しています。

シェルスクリプトで画面クリアを組み込む際の注意点

スクリプト内で画面を整理したい場合は、clearよりもtput clearを使う方が移植性が高くなります。tputterminfoデータベースを参照して実行環境に合ったエスケープシーケンスを生成するため、さまざまな端末タイプで正確に動作します。

#!/bin/bash
# 操作メニューを繰り返し表示するスクリプト例

while true; do
    tput clear                    # 環境依存しない画面クリア
    echo "=== 運用メニュー ==="
    echo "1) 直近ログ確認"
    echo "2) プロセス確認"
    echo "q) 終了"
    read -rp "選択: " choice
    case "$choice" in
        1) journalctl -n 50 --no-pager ;;
        2) ps aux ;;
        q) break ;;
        *) echo "無効な選択です" ;;
    esac
    read -rp "Enterキーで戻る..."
done

重要な落とし穴として、スクリプトが非対話的環境(cronsystemdExecStart=)で実行される場合、端末が存在しないためクリア系のコマンドがエラーになります。スクリプトが複数の実行文脈で呼ばれる可能性があるなら、標準出力がターミナルに接続されているかを確認する条件分岐を入れておくと安全です。

# 対話的シェル(tty)のときだけクリアを実行する
if [ -t 1 ]; then
    tput clear
fi

-t 1は標準出力がターミナルに接続されているかを確認する条件です。パイプやリダイレクト先、またはsystemdから起動された場合にはfalseとなるため、クリア処理が意図しない環境で実行されることを防げます。この1行を加えるだけで、同じスクリプトを対話的・非対話的どちらの環境でも安全に動作させられます。

エイリアス登録で日常作業を効率化する

バッファ消去までをワンコマンドにまとめたエイリアスを~/.bashrcまたは~/.zshrcに登録しておくと、毎回エスケープシーケンスを覚えなくて済みます。

# ~/.bashrc または ~/.zshrc に追記
# 画面表示とスクロールバックをまとめて消去
alias cls='clear && printf "\033[3J"'

# tmux 環境ではスクロールバックも合わせて消去
alias clst='clear && tmux clear-history 2>/dev/null; printf "\033[3J"'

clstエイリアスでは、tmux外で実行されたときにtmux clear-historyがエラーになるのを2>/dev/nullで抑制しています。追記後はsource ~/.bashrc(zshならsource ~/.zshrc)で反映させてください。設定ファイルへの変更は新規セッションを開くまで他のウィンドウには反映されない点にも注意してください。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次