在 FreeBSD、TrueOS/PC-BSD、DragonFly BSD 等。

在 FreeBSD、TrueOS/PC-BSD、DragonFly BSD 等。

如何展示每一個安裝了命令列 shell,(即bash,,zshETC。),沒有重複項,也沒有其他內容(即沒有不是 shell 的程式)?這段程式碼幾乎適用於我的盧本圖系統,(有dashkshzshcshyash,但列印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 等。

名單得到正式認可的shell,即管理員允許使用者更改其權限的 shell登入外殼to 與chsh指令一起,位於常規/etc/shells文件中。一個簡單的

貓 /etc/shell
給出了批准的 shell 的清單。

然而,這並不是完整的列表已安裝貝殼。儘管許多第三方 shell(作業系統本身附帶 Almquist 和 TENEX C shell)/etc/shells在從軟體包或連接埠安裝時會自行安裝,但這並不能保證,當然管理員可能已更改,/etc/shells因此有一個 shell已安裝但這不是得到正式認可的

名單已安裝不過,貝殼並不難取得。如前所述,Almquist 和 TENEX C shell 附帶作業系統,分別為/bin/sh/bin/tcsh(又稱/bin/csh)。在其中新增從軟體包安裝的 shell 清單。在 FreeBSD 軟體包系統中,所有 shell 都位於shells/軟體包層次結構區域中,因此只需使用該pkg工具來查詢已安裝軟體包資料庫:

pkg 查詢「%o %n-%v %c」| awk '/^shells\// {$1="";print $0;}'

shells/如果安裝了 Fish、rc、v7sh、heirloom-sh 等,這將捕獲它們,但也會對層次結構中但本身不是 shell 的套件產生一些誤報

進一步閱讀

  • 貝殼/FreeBSD 連接埠樹。 freebsd.org。
  • pkg-queryFreeBSD手冊。 2015.freebsd.org。

在 OpenBSD 上

OpenBSD 就像 FreeBSD、TrueOS 等。有一些差異。一個還在運行

貓 /etc/shell
查看已核准的 shell 列表,已核准的 shell 和已安裝的 shell 之間仍存在差異。

不過,OpenBSD 有一個較舊的套件管理器,以及作業系統本身附帶的一組不同的 shell。

在 OpenBSD 上,作業系統本身附帶 Korn shell(特別是 pdksh)和 C shell(不是 TENEX C shell),分別作為/bin/sh(aka /bin/ksh)和/bin/csh(not /bin/tcsh)。

同樣,新增至該清單中的第三方 shell 位於shells/套件層次結構區域中,因此尋找已安裝 shell 的命令是

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

如果安裝了 sqlports 軟體包,您也可以使用sqlite3SQL 查詢/usr/local/share/sqlports資料庫來尋找已安裝的 shell 軟體包。

進一步閱讀

  • 貝殼/OpenBSD 連接埠樹。 ports.su。
  • pkg_infoOpenBSD 手冊。 2016.openbsd.org。

在 Debian、Ubuntu 等。

同樣,可以透過以下方式獲得批准的 shell 列表

貓 /etc/shell
同樣,這與已安裝的 shell 清單不同。

在 Debian 和 Ubuntu 上,每一個shell 由套件管理器管理。沒有「作業系統附帶」的 shell。

同樣,所有 shell 套件都已輕鬆標記。 APT(進階打包工具)具有「部分」的概念,而不是像 BSD 連接埠/套件世界那樣具有層次結構,而 shell 套件位於部分中Shells

有多種工具可以查詢套件管理器的資料庫。我選擇aptitude這裡。一跑

資質搜尋 '~i~sshells'
~i它在名為 的部分 ( ~s)中搜尋已安裝的 ( ) 軟體包shells

這是aptitude的「簡寫」搜尋語法。 「真正的」搜尋語法是需要'?installed ?section(shells)'輸入更多內容的語法。此外:您可以使用命令列選項aptitude列印有關每個套件的更多資訊。-F考慮

能力搜尋 -F '%p %v %t %d' '~i~sshells'
例如。

進一步閱讀

  • 貝殼。 packages.debian.org。
  • 丹尼爾·伯羅斯和曼努埃爾·費爾南德斯·蒙特塞洛 (2016)。aptitude 使用手冊。德班。

答案2

你可以使用該/etc/shells文件。它應該包含有效登入 shell 的清單。

相關內容