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 , , , dash
und ksh
hat ) , druckt aber und druckt nicht :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
Antwort1
Unter FreeBSD, TrueOS/PC-BSD, DragonFly BSD usw.
Die Liste dergenehmigtShells, also Shells, bei denen der Administrator den Benutzern erlaubt, ihreAnmeldeshellmit dem chsh
Befehl, ist in der herkömmlichen /etc/shells
Datei. Eine einfache
Katze /etc/shellsgibt 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/shells
wenn sie aus Paketen oder Ports installiert werden, ist dies nicht garantiert und natürlich kann der Administrator Änderungen vorgenommen haben, /etc/shells
sodass 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/sh
bzw. /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 pkg
Tool, 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
Unter OpenBSD
OpenBSD ist wie FreeBSD, TrueOS usw. mit einigen Unterschieden. Eines läuft immer noch
Katze /etc/shellsum 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 sqlite3
SQL-Abfragen an die /usr/local/share/sqlports
Datenbank durchführen, um installierte Shell-Pakete zu finden.
Weiterführende Literatur
Unter Debian, Ubuntu usw.
Die Liste der zugelassenen Schalen ist erhältlich bei
Katze /etc/shellsund 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 Shells
Abschnitt.
Es gibt mehrere Tools, die die Datenbank des Paketmanagers abfragen können. Ich wähle aptitude
dieses aus. Eines läuft
Eignungssuche '~i~sshells'welches nach installierten (
~i
) Paketen im Abschnitt ( ~s
) mit dem Namen sucht shells
.
Dies ist aptitude
die "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 aptitude
weitere Informationen zu jedem Paket ausdrucken . Bedenken Sie-F
Eignungssuche -F '%p %v %t %d' '~i~sshells'Zum Beispiel.
Weiterführende Literatur
- Muscheln. pakete.debian.org.
- Daniel Burrows und Manuel A. Fernandez Montecelo (2016).Aptitude-Benutzerhandbuch. Debian.
Antwort2
Sie könnten die Datei verwenden /etc/shells
. Sie sollte eine Liste gültiger Login-Shells enthalten.