No FreeBSD, TrueOS/PC-BSD, DragonFly BSD, et al.

No FreeBSD, TrueOS/PC-BSD, DragonFly BSD, et al.

Como mostrartodoshell de linha de comando instalado, (ou seja bash, zsh,etc.), sem duplicatas e nada mais (ou seja, nenhum programa que não seja shell)? Este código quase funciona no meuLubuntusystem, (que tem dash, ksh, zshe csh) yash, mas imprime whiptaile não consegue imprimir 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

Responder1

No FreeBSD, TrueOS/PC-BSD, DragonFly BSD, et al.

A lista deaprovadoshells, ou seja, shells que o administrador permite que os usuários alterem seusshell de logincom o chshcomando, está no /etc/shellsarquivo convencional. Um simples

gato /etc/conchas
fornece a lista de shells aprovados.

No entanto, esta não é bem a lista deinstaladocartuchos. Embora muitos shells de terceiros (o próprio sistema operacional que vem com os shells Almquist e TENEX C) se instalem /etc/shellsquando instalados a partir de pacotes ou ports, isso não é garantido e é claro que o administrador pode ter mudado /etc/shellspara que haja um shell que foiinstaladomas isso não éaprovado.

A lista deinstaladoconchas não são difíceis de encontrar, no entanto. Conforme mencionado acima, os shells Almquist e TENEX C vêm com o sistema operacional, como /bin/she /bin/tcsh(também conhecido como /bin/csh), respectivamente. A eles adiciona-se a lista de shells que são instalados a partir de pacotes. No sistema de pacotes do FreeBSD, todos os shells estão na shells/área da hierarquia de pacotes, então basta usar a pkgferramenta para consultar o banco de dados de pacotes instalados:

consulta pacote "%o %n-%v %c" | awk '/^conchas\// {$1="";imprimir $0;}'

Isso capturará fish, rc, v7sh, heirloom-sh e similares, se alguém os tiver instalado, mas também produzirá um punhado de falsos positivos para pacotes que estão na shells/hierarquia, mas que não são shells per se, como bash-completion .

Leitura adicional

  • cartuchos/. Árvore de portas do FreeBSD. freebsd.org.
  • pkg-query. Manual do FreeBSD. 2015. freebsd.org.

No OpenBSD

OpenBSD é como FreeBSD, TrueOS et al. com algumas diferenças. Um ainda corre

gato /etc/conchas
para ver a lista de shells aprovados, e ainda há a diferença entre shells aprovados e instalados.

Porém, o OpenBSD possui um gerenciador de pacotes mais antigo e um conjunto diferente de shells que vêm no próprio sistema operacional.

No OpenBSD, o próprio sistema operacional vem com o shell Korn (pdksh, especificamente) e o shell C (não o shell TENEX C) como /bin/sh(também conhecido como /bin/ksh) e /bin/csh(not /bin/tcsh), respectivamente.

Novamente, os shells de terceiros adicionados a essa lista estão na shells/área da hierarquia de pacotes, e o comando para encontrar os instalados é, portanto

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

Se você tiver o pacote sqlports instalado, também poderá usá-lo sqlite3para fazer consultas SQL no /usr/local/share/sqlportsbanco de dados para localizar pacotes shell instalados.

Leitura adicional

  • cartuchos/. Árvore de portas OpenBSD. portos.su.
  • pkg_info. Manual do OpenBSD. 2016. openbsd.org.

No Debian, Ubuntu, e outros.

Novamente, a lista de projéteis aprovados pode ser obtida com

gato /etc/conchas
e novamente esta não é a mesma lista de shells instalados.

No Debian e Ubuntu,todoshell é gerenciado pelo gerenciador de pacotes. Não existem shells que "vêm com o sistema operacional".

Novamente, todos os pacotes shell são facilmente marcados. APT (a Advanced Packaging Tool) tem a noção de "seções" em vez de uma hierarquia como os mundos de ports/pacotes BSD têm, e os pacotes shell estão na Shellsseção.

Existem diversas ferramentas que podem consultar o banco de dados do gerenciador de pacotes. Eu escolho aptitudeaqui. Um corre

pesquisa de aptidão '~i~sshells'
que procura por pacotes instalados ( ~i) na seção ( ~s) chamada shells.

Esta é aptitudea sintaxe de pesquisa "abreviada". A sintaxe de pesquisa "verdadeira" seria '?installed ?section(shells)'qual é um pouco mais digitada. Além disso: você pode aptitudeimprimir mais informações sobre cada pacote com sua -Fopção de linha de comando. Considerar

pesquisa de aptidão -F '%p %v %t %d' '~i~sshells'
por exemplo.

Leitura adicional

Responder2

Você poderia usar o /etc/shellsarquivo. Deve conter uma lista de shells de login válidos.

informação relacionada