概要
ユーザーがターミナルにログインした直後に起動するシェル(ログインシェル)を変更するためのコマンドです。
bashからzshへの切り替えや、システム管理用ユーザーのシェルを無効化する場合などに使用します。変更内容はユーザーデータベース(/etc/passwd)に直接反映され、次回のログイン時から有効になります。
仕様(引数・オプション)
構文
chsh [オプション] [ユーザー名]
主なオプション
| オプション | 説明 |
| -s [シェル] | 新しいログインシェルのフルパスを指定します。 |
| -l / –list-shells | /etc/shells に記載されている、システムで使用可能なシェルの一覧を表示します。 |
基本の使い方
オプションを指定せずに実行すると、対話モードでシェルを変更できます。現在の設定が表示され、新しいパスの入力を求められます。
BASH
# 現在の設定を確認
grep mori /etc/passwd
# 対話モードで変更(パスワードが求められます)
chsh
# 変更後の確認
finger mori
実行結果例
Changing shell for mori.
Password:
New shell [/bin/bash]: /bin/zsh
Shell changed.
実践コマンド
管理者権限で特定ユーザーのシェルを変更する
システム管理者が、ユーザー mori のログインシェルを強制的に /bin/tcsh に変更するシナリオです。この場合、ユーザーのパスワードではなく管理者(root)権限で実行するため、相手のパスワードを知っている必要はありません。
BASH
# 管理者権限で mori のシェルを変更
sudo chsh -s /bin/tcsh mori
# 結果の確認
grep mori /etc/passwd
実行結果例
mori:x:1001:1001::/home/mori:/bin/tcsh
自分のシェルをコマンド一発で変更する
対話モードを使わず、引数で直接新しいシェルを指定します。ここでは開発環境に合わせて /bin/zsh に切り替えます。
BASH
# 自分のシェルを zsh に変更
chsh -s /bin/zsh
# 確認
grep mori /etc/passwd
利用可能なシェルの一覧を表示する
システムにインストールされており、安全なシェルとして登録されているパスの一覧を確認します。ここにないシェルを指定すると警告が出ることがあります。
BASH
# /etc/shells の内容を表示
chsh -l
実行結果例
/bin/sh
/bin/bash
/usr/bin/zsh
/usr/bin/git-shell
/bin/tcsh
カスタムポイント
- nologinシェルの設定セキュリティ上の理由で、ユーザー
moriにログインさせたくない場合、シェルを/sbin/nologinや/bin/falseに変更します。これにより、SSH接続やローカルログインを拒否できます。Bashsudo chsh -s /sbin/nologin mori
注意点
- フルパスでの指定シェルを指定する際は、単に
zshではなく/bin/zshや/usr/bin/zshのように絶対パスで記述する必要があります。パスが不明な場合はwhich zshコマンドで確認してください。 - 即時反映ではない変更内容は
/etc/passwdファイルに書き込まれますが、現在開いているターミナルには反映されません。一度ログアウトし、再ログインしたタイミングで新しいシェルが起動します。
まとめ
chshコマンドは、ユーザーの作業環境の基盤となるシェル定義を変更するためのツールです。
usermodコマンドでも同様の変更は可能ですが、chshは一般ユーザーが自分の環境を変更できる点で異なります。変更前には必ず -l オプションで利用可能なパスを確認し、存在しないパスを指定してログイン不能にならないよう注意して操作してください。
