什么是终端、控制台、Shell和命令行之间的区别?
/bin/sh
是Dash,一种ash变种(选择它是因为它比bash更快且使用内存更少)。\e[D
)。Shell将控制序列转换为命令(例如\e[D
→ backward-char
)。
行编辑、输入历史和自动补全由Shell提供。
M-x shell
。foo
”、“切换前景色为绿色”、“将光标移动到下一行”等指令。终端根据这些指令进行操作。
提示符纯粹是Shell的概念。
Shell从不看到其运行的命令的输出(除非重定向)。输出历史记录(回滚)纯粹是终端的概念。
应用程序间的复制粘贴由终端提供(通常使用鼠标或键盘序列,如Ctrl+Shift+V或Shift+Insert)。Shell也可能有自己的内部复制粘贴机制(例如Meta+W和Ctrl+Y)。
作业控制(在后台启动程序并管理它们)主要由Shell执行。然而,处理诸如Ctrl+C以终止前台作业和Ctrl+Z以挂起它的键组合是终端的责任。
从Unix & Linux回收
CONFIG_TTY
控制。对终端仿真器(更准确地称为伪终端 - “终端仿真器”并不总是包括telnetd、screen、expect等)的支持由CONFIG_UNIX98_PTYS
控制。对PC文本模式显示和键盘等的支持由CONFIG_VT
控制。请参阅内核源代码中的drivers/tty/Kconfig
。 - Gilles 'SO- stop being evil'scanf
函数(它封装了系统调用read
)时,我们是从键盘还是设备文件“终端”读取数据?如果是前者,为什么我们输入的字符也会被写入到控制台? - forumulatorcmd.exe
和powershell.exe
中,默认的shell叫什么名字?或者它们在这里紧密耦合到没有必要区分吗? - Minh Nghĩacmd.exe
和powershell.exe
是Windows的东西,在Ubuntu上找不到它们。(我记得现在有一个适用于Linux的PowerShell实现,但安装它并不常见。)这两者都是命令行壳程序。在Windows上,默认终端被称为CSRSS on Windows XP,我不知道在较新版本的Windows上是否有所改变。对于Windows的问题,这里不是合适的地方;你可以在[su]上提问。 - Gilles 'SO- stop being evil'一种可视化表达。
你可以坐下来并像老板一样工作的东西。
一些硬件,可以完成各种任务。
emacs -nw
这样的编辑器)。/bin/sh
POSIX shell功能,以提高可移植性)。在交互式shell中,也很容易编写一个快速的for i in *.something; do some_program "$i";done
。console=tty0 console=ttyS0,115200n8
来启动Linux,你将在屏幕上和串口上同时收到内核消息。/dev/tty1
到N)。你可以用Ctrl+Alt+FN切换物理屏幕/键盘控制的虚拟控制台。典型的Linux发行版创建了6个虚拟控制台,并在所有虚拟控制台上启动getty
,因此即使您不能或不想启动X11,您仍然可以登录6次,并在命令、man页和其他内容之间切换,而无需运行类似screen的程序。Linux(内核)包含了一个VT100风格的终端仿真器,通过虚拟控制台提供终端界面,让您通过屏幕和键盘进行操作。/dev/input/...
,而不是从/dev/tty7
获取您的按键信息。)/dev/console
中,它的意思是一样的。虽然“Console”并不特别含糊,但有时也会用于更一般的“终端”概念,不过这种用法相对较少见(比起“终端”专指控制台的用法来说)。 - Gilles 'SO- stop being evil'控制台有很多含义:
通常,操作系统允许在物理控制台(定义2中的控制台)上运行多个控制台。这些被称为虚拟控制台,也称为虚拟终端,可以通过Ctrl+Alt+Fx的组合键访问。例如,如果要打开第三个虚拟控制台,可以使用组合键Ctrl+Alt+F3。
控制台(定义3)可能对你来说是一个过时的东西,但专家应该习惯使用它们,因为有许多操作系统不支持图形用户界面。此外,如果图形用户界面停止响应,控制台仍然可以工作。命令行是指通过文本窗口交换输入和输出的方法。严格来说,您键入的行是当前的命令行。一般来说,该方法更正确地称为命令行界面或CLI。