FreeBSD、TrueOS/PC-BSD、DragonFly BSD などの場合

FreeBSD、TrueOS/PC-BSD、DragonFly BSD などの場合

表示方法インストールされたコマンドラインシェル(つまりbash、、zsh)、重複がなく、他に何もない(つまりシェル以外のプログラムがない)?このコードは私のルブントゥシステム (、、、およびdash)kshですzshが、 を印刷しcsh、を印刷できません。yashwhiptailyash

apropos shell | grep sh | \
  sed 's/ .*//;s/.*/which &/e;/^\/bin\//!d;s/.*/realpath &/e;/^\/bin\//!d' | \
  sort -u | xargs whatis
bash (1)             - GNU Bourne-Again SHell
bsd-csh (1)          - a shell (command interpreter) with C-like syntax
dash (1)             - command interpreter (shell)
ksh93 (1)            - KornShell, a command and programming language
lksh (1)             - Legacy Korn shell built on mksh
mksh (1)             - MirBSD Korn shell
whiptail (1)         - display dialog boxes from shell scripts
zsh5 (1)             - the Z shell

答え1

FreeBSD、TrueOS/PC-BSD、DragonFly BSD などの場合

リスト承認されたシェル、つまり管理者がユーザーに変更を許可したシェルログインシェルコマンドを実行するにはchsh、従来の/etc/shellsファイルを使用します。単純な

/etc/shells を cat する
承認されたシェルのリストを提供します。

しかし、これはインストール済みシェル。多くのサードパーティのシェル(AlmquistおよびTENEX Cシェルに付属するオペレーティングシステム自体)は、/etc/shellsパッケージまたはポートからインストールされると自動的にインストールされますが、これは保証されておらず、もちろん管理者が変更して/etc/shellsインストール済みしかしそれは承認された

リストインストール済みただし、シェルを入手するのは難しくありません。前述のように、Almquist および TENEX C シェルは、それぞれ および (別名 ) としてオペレーティング システムに付属しています/bin/sh/bin/tcshこれら/bin/cshに、パッケージからインストールされるシェルのリストを追加します。FreeBSD パッケージ システムでは、すべてのシェルはshells/パッケージ階層の領域にあるため、pkgツールを使用してインストール済みパッケージ データベースを照会するだけです。

pkg クエリ "%o %n-%v %c" | awk '/^shells\// {$1="";print $0;}'

これにより、fish、rc、v7sh、heirloom-sh などがインストールされている場合はこれらが検出されますが、階層内にあるものの、shells/bash-completion など、それ自体はシェルではないパッケージについても、誤検出がいくつか発生します。

参考文献

  • 貝殻/FreeBSD ポートツリー。フリーBSD.org。
  • pkg-queryFreeBSD マニュアル。 2015. freebsd.org.

OpenBSDの場合

OpenBSDはFreeBSDやTrueOSなどに似ていますが、いくつかの違いがあります。

/etc/shells を cat する
承認されたシェルのリストを表示するには、承認されたシェルとインストールされたシェルの間にまだ違いがあります。

ただし、OpenBSD には古いパッケージ マネージャーがあり、オペレーティング システム自体に付属するシェルのセットも異なります。

OpenBSD では、オペレーティング システム自体に、Korn シェル (具体的には pdksh) と C シェル (TENEX C シェルではない) がそれぞれ/bin/sh(別名/bin/ksh) と/bin/csh(ではない/bin/tcsh) として付属しています。

繰り返しになりますが、そのリストに追加されるサードパーティのシェルはパッケージ階層の領域にありshells/、インストールされているものを見つけるコマンドは次のようになります。

pkg_info -P -A | grep '^shells/'

sqlite3sqlports パッケージがインストールされている場合は、データベースに対して SQL クエリを実行し、/usr/local/share/sqlportsインストールされているシェル パッケージを見つけることもできます。

参考文献

  • 貝殻/OpenBSD ポートツリー。ポート.su。
  • pkg_infoOpenBSD マニュアル。 2016年。openbsd.org。

Debian、Ubuntu などの場合

承認されたシェルのリストは、

/etc/shells を cat する
また、これはインストールされているシェルのリストと同じではありません。

DebianとUbuntuでは、シェルはパッケージ マネージャーによって管理されます。オペレーティング システムに付属するシェルは存在しません。

繰り返しになりますが、すべてのシェル パッケージはわかりやすくマークされています。APT (Advanced Packaging Tool) には、BSD ポート/パッケージの世界にあるような階層ではなく、「セクション」という概念があり、シェル パッケージはセクション内にありますShells

パッケージマネージャのデータベースを照会できるツールはいくつかあります。aptitudeここでは、1つを紹介します。

適性検索「~i~sshells」
~iセクション ( ~s)にインストールされている ( ) パッケージを検索しますshells

これはaptitudeの「省略形」検索構文です。「本当の」検索構文は で、'?installed ?section(shells)'入力する文字数は少し多くなります。さらに、コマンドライン オプションaptitudeを使用して、各パッケージに関する詳細情報を印刷できます。-F

aptitude 検索 -F '%p %v %t %d' '~i~sshells'
例えば。

参考文献

答え2

ファイルを使用できます/etc/shells。有効なログイン シェルのリストが含まれている必要があります。

関連情報