表示方法毎インストールされたコマンドラインシェル(つまりbash
、、zsh
等)、重複がなく、他に何もない(つまりシェル以外のプログラムがない)?このコードは私のルブントゥシステム (、、、およびdash
)ksh
ですzsh
が、 を印刷しcsh
、を印刷できません。yash
whiptail
yash
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 など、それ自体はシェルではないパッケージについても、誤検出がいくつか発生します。
参考文献
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/'
sqlite3
sqlports パッケージがインストールされている場合は、データベースに対して SQL クエリを実行し、/usr/local/share/sqlports
インストールされているシェル パッケージを見つけることもできます。
参考文献
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'例えば。
参考文献
- シェル。パッケージ.debian.org。
- ダニエル・バロウズとマヌエル・A・フェルナンデス・モンテセロ(2016年)。適性ユーザーマニュアル. デビアン。
答え2
ファイルを使用できます/etc/shells
。有効なログイン シェルのリストが含まれている必要があります。