Unter FreeBSD, TrueOS/PC-BSD, DragonFly BSD usw.

Unter FreeBSD, TrueOS/PC-BSD, DragonFly BSD usw.

So zeigen Siejedeninstallierte Kommandozeilen-Shell, (also bash, zsh,usw.), ohne Duplikate und sonst nichts (also keine Programme, die keine Shells sind)? Dieser Code funktioniert fast auf meinemLubuntuSystem (das , , , dashund kshhat ) , druckt aber und druckt nicht :zshcshyashwhiptailyash

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

Antwort1

Unter FreeBSD, TrueOS/PC-BSD, DragonFly BSD usw.

Die Liste dergenehmigtShells, also Shells, bei denen der Administrator den Benutzern erlaubt, ihreAnmeldeshellmit dem chshBefehl, ist in der herkömmlichen /etc/shellsDatei. Eine einfache

Katze /etc/shells
gibt einem die Liste der zugelassenen Shells.

Dies ist jedoch nicht ganz die Liste derEingerichtetShells. Obwohl sich viele Shells von Drittanbietern (das Betriebssystem selbst wird mit den Almquist- und TENEX-C-Shells geliefert) selbst installieren, /etc/shellswenn sie aus Paketen oder Ports installiert werden, ist dies nicht garantiert und natürlich kann der Administrator Änderungen vorgenommen haben, /etc/shellssodass eine Shell vorhanden ist, dieEingerichtetaber das ist nichtgenehmigt.

Die Liste derEingerichtetShells sind jedoch nicht schwer zu bekommen. Wie bereits erwähnt, werden die C-Shells Almquist und TENEX mit dem Betriebssystem geliefert, als /bin/shbzw. /bin/tcsh(auch bekannt als /bin/csh). Dazu fügt man die Liste der Shells hinzu, die aus Paketen installiert werden. Im FreeBSD-Paketsystem befinden sich alle Shells im shells/Bereich der Pakethierarchie, daher verwendet man einfach das pkgTool, um die installierte Paketdatenbank abzufragen:

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

Dies erfasst Fish, RC, V7SH, Heirloom-SH und ähnliche Programme, wenn diese installiert sind, führt aber auch zu einigen Fehlalarmen für Pakete, die sich in der shells/Hierarchie befinden, aber nicht per se Shells sind, wie z. B. Bash-Completion.

Weiterführende Literatur

  • Muscheln/. FreeBSD-Ports-Struktur. freebsd.org.
  • pkg-query. FreeBSD-Handbuch. 2015. freebsd.org.

Unter OpenBSD

OpenBSD ist wie FreeBSD, TrueOS usw. mit einigen Unterschieden. Eines läuft immer noch

Katze /etc/shells
um die Liste der genehmigten Shells anzuzeigen. Es besteht weiterhin ein Unterschied zwischen genehmigten und installierten Shells.

OpenBSD verfügt allerdings über einen älteren Paketmanager und einen anderen Satz von Shells, die im Betriebssystem selbst enthalten sind.

Unter OpenBSD wird das Betriebssystem selbst mit der Korn-Shell (speziell pdksh) und der C-Shell (nicht der TENEX C-Shell) als /bin/sh(auch bekannt als /bin/ksh) bzw. /bin/csh(nicht /bin/tcsh) ausgeliefert.

Auch hier befinden sich Shells von Drittanbietern, die man zu dieser Liste hinzufügt, im shells/Bereich der Pakethierarchie, und der Befehl zum Auffinden der installierten Shells lautet daher

grep '^shells/'

Wenn Sie das Paket „sqlports“ installiert haben, können Sie damit auch sqlite3SQL-Abfragen an die /usr/local/share/sqlportsDatenbank durchführen, um installierte Shell-Pakete zu finden.

Weiterführende Literatur

  • Muscheln/. OpenBSD-Ports-Baum. ports.su.
  • pkg_info. OpenBSD-Handbuch. 2016. openbsd.org.

Unter Debian, Ubuntu usw.

Die Liste der zugelassenen Schalen ist erhältlich bei

Katze /etc/shells
und dies ist wiederum nicht dasselbe wie die Liste der installierten Shells.

Unter Debian und UbuntujedenShell wird vom Paketmanager verwaltet. Es gibt keine Shells, die „mit dem Betriebssystem mitgeliefert werden“.

Auch hier sind alle Shell-Pakete praktischerweise markiert. APT (Advanced Packaging Tool) verwendet das Konzept von „Abschnitten“ anstelle einer Hierarchie wie in den BSD-Ports/Paketwelten, und Shell-Pakete befinden sich im ShellsAbschnitt.

Es gibt mehrere Tools, die die Datenbank des Paketmanagers abfragen können. Ich wähle aptitudedieses aus. Eines läuft

Eignungssuche '~i~sshells'
welches nach installierten ( ~i) Paketen im Abschnitt ( ~s) mit dem Namen sucht shells.

Dies ist aptitudedie "Kurzform"-Suchsyntax von . Die "echte" Suchsyntax wäre , '?installed ?section(shells)'was etwas mehr zu tippen ist. Außerdem: Sie können mit der Befehlszeilenoption aptitudeweitere Informationen zu jedem Paket ausdrucken . Bedenken Sie-F

Eignungssuche -F '%p %v %t %d' '~i~sshells'
Zum Beispiel.

Weiterführende Literatur

Antwort2

Sie könnten die Datei verwenden /etc/shells. Sie sollte eine Liste gültiger Login-Shells enthalten.

verwandte Informationen