さまざまなLinuxおよびUnixシェルについて

画像 ほぼすべてのHabrの読者はshとbashシェルを知っています。 私たちのほとんどは、zshとtcshについても聞いています。 ただし、既存のシェルのリストはこれで終わりではありません。 条件付きで3つのグループに分けることができます。


それらのうち最も興味深いものについて説明します。

この記事の目的は、既存のすべてのコマンドシェルを確認または分類することではありません。 この分野の興味深い製品についてお話しし、読者の視野を広げたいと思います。 嬉しいです。 トピックのより詳細な研究に誰かをプッシュしたり、別のトピックに切り替えたりする場合です。
まず、それが何であるかについて簡単に説明します。 シェルまたはシェルは、コマンドラインインターフェイスをユーザーに提供するアプリケーションです。ユーザーは、コマンドラインインターフェイスで、コマンドを個別に入力するか、コマンドのリストで構成されるスクリプトを実行します。 口頭および非公式のテキストでは、英語のシェル-シェルから「ウォーク」と呼ばれることがよくあります。

最も広く使用されているPOSIX互換シェルは、Bourneシェル(シェルボーン)の血統をリードしているため、これから始めます。

Bourneシェルとそのクローン


Bourneシェル 、実行可能ファイル: sh 作成者のStephen Bourneにちなんで名付けられたシェル。 ほとんどの演算子は、Algol 68から借用されました。これは、デフォルトのシェルであるUNIXオペレーティングシステムの第7版でリリースされました。 これまでのところ、Unixライクなシステムの大部分は/ bin / sh-sh互換シェルへのシンボリックリンクまたはハードリンクを持っています。

Bourne再びshell 、実行可能ファイル: bash 。 名前は「復活したボーンウォーク」と翻訳できます。 おそらくこれまでで最も人気のあるシェルです。 Linuxの事実上の標準。 私はそれにこだわらない インターネットには多くの良いbash記事があります。 たとえば、 here and there

Zシェル 、実行可能ファイル: zsh 無料の最新のsh互換シェル。 主にインタラクティブモードでの作業に関して、bashよりも多くの利点があります。 Habréのそれについてはここここに書い
さらに、 Kornシェル(ksh)Almquistシェル(ash)など、このグループに分類されるシェルがかなりありますが、それらについては詳しく説明しません。

Cシェル


Cシェル 、実行可能ファイル: csh vi著者Bill Joyによって開発されコマンドシェル。 スクリプト言語cshの基礎は、名前が示すように、言語Cです。 当時、1978年には、BSD UNIX開発者とユーザーの間で最も人気のあるプログラミング言語でした。 現在、より一般的な無料のcsh実装はtcshです。

TENEX Cシェル 、実行可能ファイル: tcsh 自動補完が初めて登場したのはtcshでした。 これは、FreeBSDのデフォルトのシェルです。 詳細はこちらをご覧ください
構文の違いを明確に示すために、cshとsh互換シェルで同じことを行うスクリプトの例をいくつか示します。

条件付き構築:
#!/bin/sh if [ $days -gt 365 ] then echo This is over a year. fi 
 #!/bin/csh if ( $days > 365 ) then echo This is over a year. endif 


複数の分岐(スイッチ、スイッチ/ケース):
 #!/bin/sh for i in d* do case $i in d?) echo $i is short ;; *) echo $i is long ;; esac done 
 #!/bin/csh foreach i ( d* ) switch ( $i ) case d?: echo $i is short breaksw default: echo $i is long endsw end 


2つの最初の10度を計算するサイクル:
 #!/bin/sh i=2 j=1 while [ $j -le 10 ]; do echo '2 **' $j = $i i=`expr $i '*' 2` j=`expr $j + 1` done 
 #!/bin/csh set i = 2 set j = 1 while ( $j <= 10 ) echo '2 **' $j = $i @ i *= 2 @ j++ end 


ただし、bash、zsh、およびtcshの最新バージョンでサポートされている機能のリストは非常に似ており、特定のシェルを選択することはほとんど好みの問題です。 あまり一般的ではないシェルでは、これは当てはまりません。 ここで、違いはより重要です。

一般的なプログラミング言語に基づいたコマンドシェル。


Perlシェル実行可能ファイル: psh 前述のシェルの機能とPerlの機能を組み合わせたシェル。 なぜなら pshはperlで書かれており、Windowsでも実行できます。 pshの使用例:
  ls | s/y/k/ #  c    ls | { print ++$i, ": $_"; }q #  .      perl,  $_    . netstat | { $_[1]>2; }g # grep-.           true command >[=FOO] #      command >[2] file #  command 2> file  bash.        grep foo lib/**/*.pm #  **,        


scshscsh実行可能ファイル。 スクリプト言語としてScheme 48を使用するオープンソースのコマンドインタープリターは、他のシェルの標準機能(コマンド履歴、コマンドラインでのテキストの編集、パス/コマンドの追加)をサポートしません。 スクリプトを使用することをお勧めしますが、インタラクティブな作業にはお勧めしません。 関数型プログラミングの愛好家はそれを好むかもしれません。 以下は、PATH環境変数のディレクトリにあるすべての実行可能ファイルの名前を表示するスクリプトの例です
 #!/usr/local/bin/scsh -s !# (define (executables dir) (with-cwd dir (filter file-executable? (directory-files dir #t)))) (define (writeln x) (display x) (newline)) (for-each writeln (append-map executables ((infix-splitter ":") (getenv "PATH")))) 


IPython これは、Pythonプログラミング言語用の対話型シェルであり、多くの追加機能があります。 IPythonには、システムシェルとして機能する特別なプロファイルがあります。 このモードを開始する方法は、バージョンによって異なりますが、私のマシンでは次のようになります。
ipython3 --profile=pysh

ロシア語を含め、IPythonについてはすでにかなり多くのことが書かれています(記事の最後のリンク)。 コマンドシェルとして使用するという観点から、その主な機能をリストしてみます。

ご覧のとおり、IPythonはそのインタラクティブ機能において少なくともbashと同等です。 スクリプトに関しては、PythonはbashよりもPythonをよく知っている人にはIPythonが便利です。 実際、IPythonスクリプトは、システムコマンドの単純化された呼び出しのみが純粋なPythonと異なります。 Pythonコマンドとシステムコマンドを統合する例を次に示します。
 #         dpkg: In [58]: cd /var/log/ /var/log In [59]: log_files = !ls -l dpkg.log* In [60]: log_files[0] Out[60]: '-rw-r--r-- 1 root root 1824 . 3 16:41 dpkg.log' In [61]: for line in log_files: ....: size += int(line.split()[4]) ....: In [62]: size Out[62]: 1330009 # ...      In [67]: for i in range(100,110): ....: !ping -c 1 192.168.0.$i ....: 


残り

もちろん、これは一般的なシェルの完全なリストではありません。 上記のカテゴリーに加えて、まだshと互換性がなく、既存の言語をコピーしない独自の構文を使用しています。 例としては、 使いやすい対話型シェル(魚)があります。 しかし、最終的には、彼女についてではなく、より具体的なスリープシェルについてお話したいと思います。

Sleep Dummy Shell 、実行可能ファイル: sleepshell 厳密に言えば、sleepshellをシェルと呼ぶことはできません。 彼はコマンドの処理方法を知りません。 そして一般的に、彼は定期的に標準出力にアスタリスク「*」を書く以外に何もできません。 ただし、コマンドシェルとして正確に使用されます。そのために、LinuxまたはUnixを実行しているサーバーを介してsshトンネルを作成する機会を誰かに与えたいとします。 sshトンネリングの詳細については、 こちらをご覧ください 。 ただし、この誰かがサーバーのコマンドラインとファイルシステムにアクセスする必要はありません。 この場合、sleepshellも意図されています。 サーバー上にシェルとしてアカウントを作成し、sleepshellをインストールします。 アカウントの所有者はポートに接続して転送できますが、コマンドを実行することはできません。

それだけです おもしろかったです。 記事の本文に関するコメントやアドバイスを歓迎します。

関連リンク

www.faqs.org/faqs/unix-faq/shell/shell-differences-コマンドシェルの相違点と類似点の要約表
www.mariovaldez.net/software/sleepshell-スリープダミーシェル
ipython.org/ipython-doc/dev/interactive/shell.html-システムシェルとしてのIPython
www.opennet.ru/base/dev/ipython_sysadmin.txt.html-システム管理者ツールとしてのIPython Shell
www.focusresearch.com/gregor/document/psh-1.8.1.html-Perlシェルドキュメント
www.scsh.net -Scshホームページ

Source: https://habr.com/ru/post/J157283/


All Articles