「ハンマーだけだと、問題はすべて釘のように見える」という表現を聞いたことがあるかもしれません。これは、POSIXシェルのすばらしい世界には当てはまりません。初心者にとって、1つの輝く黒い画面の緑色のテキストは、他の輝く黒い画面の緑色のテキストと同じですが、多くのシステム管理者は、選択したシェルによって、コンピューターとの対話方法のあらゆる側面が変わる可能性があることを知っています。
通常はプレッシャーの下で、これを困難な方法で見つけることは珍しいことではありません。ただし、なじみのないシェルに誤った構文を入力することの無力さを経験すると、使い慣れたシェルへのアタッチメントをすぐに開発できます。それでも、最も人気のあるシェルには、さまざまなシステム管理者がデフォルトのインターフェイスとして設定するという長所があります。 。それぞれに少し時間を費やすと、新しいお気に入りを開発したり、少なくとも信頼できるバックアップシェルに落ち着いたりできることに気付くかもしれません。
最も人気のあるシェルのいくつかと、ユーザーがそれらについて気に入っている点を以下に示します。
Almquistシェルは、有名なBourneシェルのクローンとして開発されました(Bourne Again Shell、別名Bashと混同しないでください)。おそらくライン編集と履歴が最初に除外されたのと同じ理由で、意図的に軽量に保たれました。KennethAlmquistは、余分なUX機能がシェルの外部にあると感じました。数十年経った今でも、このシェルはお気に入りの小さくて基本的なシェルです。これはAndroidの初期リリースに同梱されており、長年にわたってLinuxディストリビューションの最小限のブート環境に共通のデフォルトシェルでした。
多くのPOSIXシェルと同様に、Ashの使用は、コンソールに慣れている人なら誰でも名目上馴染みがあります。コマンドを入力します。出力を取得します。いくつかの追加機能がありますが、他の機能はありません。たとえば、EmacsまたはVimスタイルのキーボードショートカットを使用することに慣れている場合は、Ashにはそれらが著しくないことに気付くでしょう。ただし、-E
を使用して、(コンパイル時に含まれている限り)それらを有効にすることができます。 (Emacsの場合)または-V
(Vimの場合)オプション。履歴(実際にはfc
Ashのコンパイル方法によっては、Ashの組み込みコマンドも指定されていません。配列はなく、trapbuiltinコマンドはオプションを受け入れません。
DashはAlmquistシェルであり、実際にはNetBSDからDebian LinuxへのAshの移植版であり、 Debian Almquist Shellの略です。 。
Ashの最大の機能は、その最大の制限でもあります。最小限のシェルなので、シンプルさを求めているなら、これがあなたにぴったりのシェルです。
Bourne-Again Shell(Bash)は、独自のBourneシェル(Ken Thompsonのシェルを置き換えるために作成されたもの)を置き換えるためにGNUプロジェクトによって作成されました。今日、Bashは単なるシェルではありません。それは、正当なプログラミング言語であり、機知に富んだシステム管理者の主要なツールの1つであり、迅速で汚い自動化を必要とする非プログラマーのためのほぼ文化的なアイコンです。 Linuxシェルで1日を過ごすことができる場合は、Bashスクリプトを開発して自分自身を置き換えることができます。配列、ディレクトリスタック、トラップ、部分文字列の解析、EmacsまたはVimのキーボードショートカットなどの機能を備えた、シンプルで直接的、そして驚くほど強力です。
に対する一般的な議論の1つ Bashはそのサイズであり、私のシステムでは約1 MBですが、Ashの場合は200KBです。もう1つは、その複雑さです。 Bashは非常に機能が豊富であるため、純粋なPOSIXで記述されたスクリプトはBashで実行されますが、純粋なPOSIXシェルで実行しようとするBashスクリプトには常に同じことが当てはまるとは限りません。 BashにはPOSIXモードがありますが、その余分な「Bashisms」は通常、無視できないほど魅力的です。幸いなことに、Bashはオープンソースであるため、簡単にインストールしてBash主義に満ちたスクリプトを実行できますが、それでも原則として反対するユーザーもいます。
Bashは柔軟で強力なシェルであり、多くのシステムのデフォルトとして他のシェルに取って代わりました。 Bashを学ぶと、開発が進むにつれて友好的になる兆候をすべて示す、モダンで機能豊富なシェルを体験できます。
[今すぐダウンロード:Bashスクリプトのシステム管理者ガイド。 ]
BusyBoxは、多くの一般的なPOSIXユーティリティを単一の実行可能ファイルに結合するマルチコールバイナリです。言い換えれば、これはPOSIXユーザーインターフェイスのコアオールインワンバイナリです。ソースコードからインストールすると、busybox
が配置されます システムのライブラリで実行可能ファイルであり、自分自身とユーザーのために個別のコマンドを作成するときに、そのライブラリにリンクする必要があります。例:
$ ln --symbolic /lib64/busybox/busybox gzip
$ gzip --help
BusyBox v1.28.1 (2020-07-13 11:42:31 NZST) multi-call binary.
Usage: gzip [-cfkdt123456789] [FILE]...
1 MB未満で、 lsを含む約400のコマンドを取得できます 、 cd 、 cp 、 mv 、 grep 、 ps 、 passwd 、電源オフ 、 printf 、 sed 、圧縮ユーティリティ、プロセス管理など。これらのコマンドのほとんどは、同等のGNUと比較して最小限ですが、ユースケースによっては十分である可能性があります。同様に、BusyboxのインタラクティブシェルはAshであるため、POSIX仕様を満たし、他にはほとんど何も提供しません。
CshまたはTcsh
Cシェル(csh
)、およびその後の化身、tcsh
、Cのような(または、これらに精通している場合はC ++またはJava)構文を使用します。たとえば、これがif
Bashでループする:
v=1
if [[ $v == 1 ]]
then
echo "verbose"
fi
そして、これはCshでも同じです:
set v=1
if ($v == 1) then
echo "verbose"
endif
違いは微妙ですが、Cや同様の言語の構文に慣れている人にとっては、経験を著しく改善するのに十分な小さな違いがあります。一部の組み込みコマンドもありません。たとえば、type
はありません またはhash
tcsh
のコマンド 、および独自の関数を定義することはできません。
csh
tcsh
という年齢に多少苦しんでいます は優れたアップデートであり、構文は時々異なりますが、Bashとほとんど同じ機能を備えています。
魚の殻は誇らしげに「90年代の現代の殻」と呼んでいます。 BashやZshなどの堅牢なシェルのすべての利点がありますが、構文の強調表示、fish_config
などの機能が追加されています。 コマンド、および大いに多く。その目的は、ユーザーに追加のコンテキストを提供し、単一の.bashrc
よりも優れた構成管理システムを提供することです。 。
あちこちで構文にわずかな違いがあります。たとえば、これはBashの関数定義です:
function sshrm() {
/usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
}
ただし、Fishでも同じです:
function sshrm
/usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
end
Fishのファンは、その簡単なテーマ設定機能と、デフォルトで.bashrc
ではなく構成ファイルのディレクトリに設定される方法を気に入っています。 せいぜい他のドットファイルをソースするファイル。
Kornシェル(ksh
)はDavid Kornによって開発され、1983年にリリースされました。Bashとtcsh
人気のあるPOSIXシステムのデフォルトシェルとして出荷されたKornシェルは、主に「代替」シェルのままです。しかし、代替シェルが進むにつれて、ksh
はそれ自体でうまくいっていて、Microsoftが技術会議でPowershellを発表したとき、彼らはKornシェルをその主な影響力として挙げました。
Kornシェルにはいくつかの異なるバージョン(mksh、ksh93、ksh93u +、ksh2020など)がありますが、公式のブランチはAT&TのGithubで管理されています。
Bashユーザーの場合、ksh
かなりなじみがあると感じる可能性があります。 Kornスクリプティングのチュートリアルを読むことは、Bashスクリプティングのチュートリアルを読むこととほぼ同じです。独自の関数を定義したり、エイリアスを作成したり、ループを書き込んだり、タブ付きの完了オプションをプログラムしたりすることもできます。 Emacsのキーバインドはデフォルトで有効になっていますが、vi
に切り替えることができます -o vi
を使用したキーバインド 起動時のオプション、またはset -o vi
を配置する ~/.environ.ksh
で 構成ファイル。
Kornshellに欠けているものは、おそらくすぐには気付かないでしょう。たとえば、組み込みコマンドを有効または無効にすることはできません。また、whence
という組み込みコマンドがあります。 which
と同じ仕事をします 実行可能。 typeset
はありません コマンドですが、Kornshellには、利用可能な最も重要なルックアップ機能を備えた配列があります。つまり、わずかな違いはありますが、ksh
Bash、Fish、Zshに慣れている人なら誰でも簡単に使用できます。
Zsh
Zシェル(zsh
)は、革新的な機能が豊富にあることで知られる、インタラクティブなBourneのようなPOSIXシェルです。 Z Shellのユーザーは、多くの場合、その多くの便利さを引用し、効率の向上と広範なカスタマイズを評価しています。 Zshは、最初に起動されたときに、履歴サイズ、キーバインディング(EmacsまたはVim)、必要な追加機能の数など、いくつかの構成オプションを提供します。たとえば、cd
を作成できます コマンドなしで実行不可能なパスを指定した場合に、Zshがディレクトリ変更を開始できるようにすることで暗黙的なコマンド。いくつかの追加機能があり、.zshrc
を編集して設定または設定解除できます。 構成ファイル。
BashとZshの構文には微妙な違いがいくつかありますが、スクリプト化されることが多いコマンドはほとんどないため、スクリプトを適応させる必要がある可能性は低くなります。たとえば、Bashの組み込みコマンドを無効にするには:
$ enable -n cd
Zshでは、コマンドはもう少し直感的です:
$ disable cd
Bashでキャッシュされたコマンドパスを再構築するには、既存のコマンドパスをクリアする必要がありますが、Zshにはそのオプションがあります:
$ hash -f
他のシェルから移行する人のための小さな恩恵もあります。たとえば、whence
を使用できます KornシェルのユーザーにはおなじみのZシェルのコマンド。
Zshは、新旧の機能を楽しくダイナミックに組み合わせたものであり、そのためのテーマとプラグインを開発する活気のあるコミュニティがあります。これらは簡単にインストールでき、シェルにさらに機能を追加できるため、ZShellは利用可能な最も柔軟なシェルの候補になります。
オープンソースではいつものように、実際に特定のツールを1つだけ選択する必要はありません。私は自宅で熱心なBashユーザーですが、デフォルトでtcsh
を使用することがよくあります。 視覚効果業界のスクリプトの多くはCシェル用に作成されているため、仕事の習慣から外れています。今日まで、私は強制的にGitフックをtcsh
で記述しています。 そのため。
必ずしもシェルの選択を正当化する必要はありません。あなたとあなたのチームに最適なものを使用してください。オープンソースである限り、あなたは素晴らしい選択をしました。
[無料のオンラインコース:Red HatEnterpriseLinuxの技術概要。 ]