我发现有像nologin
、false
、 和 之类的外壳true
。还有什么?
我不知道用于列出 shell 的正确关键字是什么。每当我使用关键字 进行搜索时,我都会在说明、、和其他关键字linux shell types
之间的差异的上下文中获得结果。bash
csh
zsh
用于查找有关该主题的更多信息的正确关键字是什么?
答案1
nologin、false 和 true 不是 shell,它们只是阻止登录的方法。这留下了以 . 结尾的内容sh
。因此,搜索/bin
、/usr/bin
等将有助于找到大多数已安装的内容。
那么就出现了“什么是shell?”的问题。 python、purl、tcl等是shell吗?或许不是,但是分界线在哪里?由于true
、false
、 和nologin
do 不是解释器(不接受用户输入,不是语言等),那么它们是确实在线的非外壳一侧。
然而,登录 shell 不一定是 shell,甚至不必是交互式的。
您可以使用您最喜欢的搜索引擎在互联网上搜索 Unix shell。
答案2
我发现shell有nologin、false、true之类的。还有什么?
这些不是贝壳,因为@ctrl-alt-delor 已经指出。
我不知道该输入什么来列出 shell。
您无法获得所有存在的 shell 的详尽列表。这就像要求提供所有现有软件的列表。
每当我使用 linux shell 类型(及类似类型)进行搜索时,我都会在说明 bash、csh、zsh 和您知道的其他 shell 类型之间差异的上下文中获得结果。
这真的很方便,因为这些是流行的贝壳你很可能会遇到。
使用什么关键字来了解有关该主题的更多信息?
“外壳”有时也称为“REPL”、“命令行解释器”或“命令语言解释器”。
答案3
这是一个答案很复杂的问题。大多数人所说的“外壳”是读取-求值-打印循环因此,即使是 python 解释器也是一个 shell,只要您以交互方式运行 python。然而,这意味着 nologin 不是真正的 shell!那么什么是壳呢?
从技术上讲,任何程序都可以用作外壳。事实上,这里有一些我使用不寻常的贝壳的照片:
- Python shell 作为登录 shell
- 纳米作为外壳(尽管你无法区分它是否正常运行,因为它是全屏的)
- 猫像贝壳一样奔跑
- 顶层作为shell运行(即使你再一次看不到它是一个外壳)
- 还有一个 Hello World 程序!
然而,这并不是您期望的作为 shell 运行的内容。通常,您需要运行/etc/shells
.例如,我的包含:
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
没有我之前提到的贝壳!那么他们为什么要跑呢?
简而言之,他们确实这样做,但仅限于本地。如果您查看 的shells
联机帮助页man shells
,您会发现它/etc/shells
主要由 FTP 守护程序等程序使用。这就是为什么您nologin
在 中看不到shell 的原因/etc/shells
:它通过不存在来阻止登录 FTP 和其他非登录守护进程,同时通过是一个简单的printf("This account is currently not available");
程序而不是 REPL 来阻止本地登录。
所以,回答你的问题:只有一种类型的 shell,那就是可执行的。如果你可以运行一个程序,那么它就是一个 shell。
答案4
任何你想要的。
shell 只是一个 TTY 应用程序。所以任何可以在 TTY 上运行的东西都可以是 shell。
非常规 shell 的一个例子是公告板服务:用户通过 ssh 或 telnet 登录并获得 BB,而不是命令行