Re: root の shell について

From: Tomoaki AOKI <junchoon_at_dec.sakura.ne.jp>
Date: Sat, 25 Oct 2025 01:44:29 UTC
On Sat, 25 Oct 2025 09:46:14 +0900
"Yamada,Kazuo" <yamada@yamarail.net> wrote:

> やまだ@越谷です。
> 
> 20年くらい前に、このMLに投稿して。
> 以後ROM専門でした。
> 
> Facebook の FreeBSDのグループでも質問したのですが。
> コメントが全くないので...
> 
> FreeBSD 13.x から 14.x にアップグレードしたのですが。
> root の シェル が標準では /bin/csh から /bin/sh に変更されているようです。
> 
> アップグレード中に、パスワードファイルの編集画面になり。
> 選択をする必要があったので、/bin/sh は基本使う事ないので。(使うなら bash 使
> う)
> /bin/csh の方にしたのですが。
> 
> どちらにするのが正解なんでしょうか?
> 
> -- 
> 0----+----1----+----2----+----3----+----4----+----5----+----6----+----7----#
>       山田  和雄     MailTo:yamada@yamarail.net
>       Yamada Kazuo

青木@名古屋です。

基本的に、正解は「baseにある(portsでない)ものならお好きなものを」
です。 ただ、今後Handbook等で操作例が掲載されるのはデフォルトの
/bin/shになっていく(または/bin/cshの例が消されていく)可能性が
高いと思いますので、内部コマンドの違いに混乱しそうなら/bin/shに
変えるのも「あり」ではあります。

問題としては、20年前と比べると飛躍的に改善されたとはいえ、/bin/shの
コマンドラインヒストリー周り等は未だ/bin/cshに及ばないので、一応
実用に近づいたとはいえストレスを感じる場面があるかと。

なお、釈迦に説法でしょうけれど、スクリプトを組む場合はPOSIXのshで
必須になって「いない」機能は使わないのが無難ですので、/bin/shの
方を使うのが正解(cshは文法からして違いますので...)ですから
csh自体の設定ファイル群にだけcshを使用しましょう。

また、先に「baseにある(portsでない)ものなら」という縛りを
入れたのは、私の知る限り(あれば)STATICオプションを付けて
ビルドしたとしても/usr/local/bin/以下にインストールされ、
STATICオプション無効(または存在しない)場合に至っては
/usr/local/lib以下のライブラリに依存する場合すらあるので、
仮に/usr/local/を独立したパーティションにしていると何らかの
原因でマウントに失敗したら詰んでしまうこと、base側での
何らかの変更でportsから入れたものに障害が出る場合、対象に
含まれてしまう恐れがある(portsにあるシェル全てがテストして
もらえるわけではありません)ため、これもまた詰むことがある
からです。

なお、私はrootのシェルをzshにしていますが、FreeBSD自体は
(t)cshだと思いこんでいます。 というのは、/etc/master.passwd
では/bin/cshにしてあって、/root/.tcshrc.mineに

if ( -X zsh && -f ~/.Use_zsh ) exec zsh

の1行を入れてあり、/root/.Use_zshという空のファイルを作っておく
ことで、パスの通ったところに実行可能な(attributeの付いた)zshが
存在し、なおかつ/root/.Use_zshが存在することでzshに乗っ取らせる
ようにしているのです。 portsで更新したzshに不備があった場合以外は
これでzshが見つからなくても(t)cshのまま使えます。

※zshに問題が出ている場合、シングルユーザに落ちて/root/.Use_zshを
 消してしまえばいいので、セーフティネットが効きます。

ご参考になれば。

-- 
青木 知明  [Tomoaki AOKI]    <junchoon@dec.sakura.ne.jp>