まず確認 — 現在の行数と桁数を調べる
変更作業の前に、OSが現在認識している端末サイズを確認します。最も確実な方法は stty size です。
$ stty size
50 200
出力は「行数 桁数」の順です。上の例では50行・200桁として認識されています。
シェル変数 $LINES・$COLUMNS でも確認できますが、これはシェル自身が管理する値であり、OSが保持するPTY(疑似端末)のサイズとは別物です。通常は両者が一致しますが、SSH接続直後やシリアルコンソールでは食い違うことがあります。信頼性の観点から stty size を主に使うことを推奨します。
# シェル変数での確認(参考程度)
$ echo "$LINES $COLUMNS"
50 200
# tputでも同様に確認できる
$ tput lines; tput cols
50
200
sttyコマンドで行数・桁数を変更する
行数と桁数を変更するには stty rows と stty cols(または columns)を使います。1つのコマンドで両方まとめて指定できます。
# 行数50・桁数200に変更
$ stty rows 50 cols 200
# 変更を確認
$ stty size
50 200
この変更はカーネルのPTYサイズに直接書き込まれます。vi・less・htop のような画面描画ライブラリ(curses)を使うプログラムはPTYサイズをリアルタイムで参照しているため、変更後すぐに効果が現れます。
変更はそのセッションが終了するまで有効です。ログアウトや接続切断で元に戻るため、永続化が必要な場合は後述のシェルプロファイル設定を使います。
環境変数LINES・COLUMNSとの使い分け
stty rows N cols N と export LINES=N COLUMNS=N は似て非なるものです。役割を理解せずに混在させると、プログラムによって参照先が異なるため思わぬ表示崩れを招きます。
- PTYサイズ(sttyが変更):OSカーネルが保持する物理的な端末サイズ。curses系アプリケーション(vi、less、htop、tmuxなど)はこちらを参照します。
- LINES・COLUMNS環境変数:bashが自身の動作に使う変数。シェルスクリプト内の
$COLUMNS参照や、一部コマンドの折り返し幅に影響します。
実務上の原則は「stty rows N cols N で変更し、シェル変数は自動更新に任せる」です。bashはウィンドウリサイズ時のSIGWINCHシグナルを受け取ると LINES・COLUMNS を自動更新します。手動で両方を書き換える必要はほとんどありません。
端末サイズがずれる主な原因と即効対処
SSH接続時にサイズが正しく伝わらないケース
多くのSSHクライアントはローカルの端末サイズを接続先に自動通知しますが、古いクライアントや踏み台サーバー経由の接続では伝わらないことがあります。ある運用現場では、社内で長年使い続けていたJavaベースのSSHクライアントが端末サイズ通知に対応しておらず、接続先での vim の表示崩れが長期間放置されていたという事例があります。
resize コマンド(Debian/Ubuntuでは xterm パッケージに同梱)が使える環境では、端末エミュレータのサイズを自動検出して stty と環境変数を同時に設定してくれます。
# resizeコマンドで自動検出・適用
$ resize
COLUMNS=200;
LINES=50;
export COLUMNS LINES;
# resizeが使えない場合はローカルで確認してから手動設定
## ローカル端末で確認
$ stty size
50 200
## SSH先で手動設定
$ stty rows 50 cols 200
シリアルコンソールは固定80×24のことが多い
BMCやIPMIを介したシリアルコンソール(/dev/ttyS0 など)では、端末サイズが80×24で固定されているケースがほとんどです。サーバーラック作業でIPMI SOLコンソールを使う際、ログが1行おきに折り返されて読みにくいのはこれが原因です。接続後すぐに目的のサイズを設定する習慣をつけましょう。
# シリアルコンソール接続後に端末サイズを設定
$ stty rows 50 cols 200
tmux・screenを別サイズの端末からアタッチ
tmux のセッションに、デタッチ時とは異なるウィンドウサイズの端末からアタッチすると、セッション全体が小さいほうのサイズに合わせられます。-d オプションで既存クライアントを切断してからアタッチすることで、現在の端末サイズに再描画されます。
# 既存クライアントを切断して現在の端末サイズでアタッチ
$ tmux attach -d -t セッション名
設定を恒久化する — シェルプロファイルへの記述
特定の接続経路でサイズを固定したい場合は ~/.bashrc に条件付きで追記します。条件なしにすべての端末へ適用すると、グラフィカル端末でSIGWINCHによる自動更新が正常に機能している場面と競合する可能性があります。
# ~/.bashrc に追記(シリアルコンソールのみに適用する例)
if [[ "$(tty)" == /dev/ttyS* || "$(tty)" == /dev/ttyAMA* ]]; then
stty rows 50 cols 200
fi
tty の出力パターンはディストリビューションやデバイス構成によって異なります。たとえばRaspberry PiのプライマリUARTは /dev/ttyAMA0 ですが、構成によって /dev/serial0 へのシンボリックリンク経由になることもあります。実環境の tty コマンド出力を確認してからパターンを調整してください。
実務でよく使うシナリオ
カーネルログ・システムログの閲覧
journalctl や dmesg の出力は1行が長いエントリが多く、桁数が少ないと折り返しが頻発して前後関係が読み取りにくくなります。200桁程度に広げておくことで、1つのエントリがひとまとまりとして読めるようになります。
# 広い端末でカーネルログを確認する
$ stty cols 200
$ journalctl -k --no-pager | tail -50
差分確認と設定ファイル編集
git diff や設定ファイルの並列比較では、桁数が不足していると変更行が折り返されて前後の文脈が追いにくくなります。作業前に桁数を広げておくだけで、見落としが減ります。特にインフラコードのレビューでは、1行に収まるかどうかが意図の読み取りやすさに直結します。
監視コマンドの表示レイアウト
top・htop・iotop などはPTYサイズを参照してカラム幅を自動調整します。端末を広げるだけで、プロセス名やコマンドライン引数が切り詰められずに表示されるようになります。ps aux の COMMAND 列が途中で切れてプロセスの判別に手間取る問題も、桁数を増やすことで解消できます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

コメント