표시 방법모든명령줄 셸이 설치되었습니다(예 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
. 간단한
고양이/등/쉘승인된 쉘 목록이 제공됩니다.
그러나 이는 전체 목록이 아닙니다.설치됨껍데기. 많은 타사 셸(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;}'
shells/
Fish, rc, v7sh, heirloom-sh 등이 설치된 경우 이를 포착하지만, bash-completion과 같이 계층 구조에 있지만 그 자체로는 쉘이 아닌 패키지에 대해 일부 오탐지를 생성합니다.
추가 읽기
OpenBSD에서
OpenBSD는 FreeBSD, TrueOS 등과 같습니다. 몇 가지 차이점이 있습니다. 한 명은 아직도 달리고 있어요
고양이/등/쉘승인된 쉘 목록을 보면 여전히 승인된 쉘과 설치된 쉘 사이에 차이가 있습니다.
그러나 OpenBSD에는 이전 패키지 관리자와 운영 체제 자체와 함께 제공되는 다른 쉘 세트가 있습니다.
OpenBSD에서 운영 체제 자체에는 Korn 쉘(구체적으로 pdksh) 및 C 쉘(TENEX C 쉘 아님)이 각각 /bin/sh
(일명 /bin/ksh
) 및 /bin/csh
( 아님 /bin/tcsh
)과 함께 제공됩니다.
마찬가지로 목록에 추가된 타사 쉘은 shells/
패키지 계층 구조 영역에 있으므로 설치된 쉘을 찾는 명령은 다음과 같습니다.
pkg_info -P -A | pkg_info -P -A | grep '^쉘/'
sqlports 패키지가 설치된 경우 sqlite3
SQL을 사용하여 /usr/local/share/sqlports
데이터베이스를 쿼리하여 설치된 셸 패키지를 찾을 수도 있습니다.
추가 읽기
데비안, 우분투 등에서
마찬가지로 승인된 쉘 목록은 다음을 통해 얻을 수 있습니다.
고양이/등/쉘다시 말하지만 이는 설치된 쉘 목록과 다릅니다.
데비안과 우분투에서는모든쉘은 패키지 관리자에 의해 관리됩니다. "운영 체제와 함께 제공되는" 쉘은 없습니다.
마찬가지로 모든 쉘 패키지에는 쉽게 태그가 지정됩니다. APT(Advanced Packaging Tool)는 BSD 포트/패키지 세계와 같은 계층 구조가 아닌 "섹션" 개념을 가지며 셸 패키지는 섹션에 있습니다 Shells
.
패키지 관리자의 데이터베이스를 쿼리하기 위한 다양한 도구가 있습니다. 저는 aptitude
여기를 선택합니다. 달리기
능력 검색 "~i~sshells"
~i
( ) 섹션 ~s
에서 설치된 ( ) 패키지를 검색합니다 shells
.
이는 aptitude
에 대한 "간략형" 검색 구문입니다. "실제" 검색 구문은 '?installed ?section(shells)'
더 많은 입력이 필요한 구문입니다. 추가적으로 명령줄 옵션을 사용하여 aptitude
각 패키지에 대한 추가 정보를 인쇄할 수 있습니다. -F
고려하다
능력 검색 -F '%p %v %t %d' '~i~sshells'예를 들어.
추가 읽기
답변2
이 파일을 사용할 수 있습니다 /etc/shells
. 여기에는 유효한 로그인 셸 목록이 포함되어야 합니다.