Console-terminal-tty-shell-kernel ゝ一纸荒年。 2021-11-04 12:02 261阅读 0赞 Console-terminal-tty-shell-kernel 1. 先看图表 1.1 简表 1.2 shell与内核的示意图 1.3 Console-terminal-tty-shell-kernel示意图 2. console控制台有2类 3. console及terminal操作 3.1 切换控制台 3.2 查看有那些用户登录,分别占用了那些tty\*? 3.3 发送文字到其他控制台终端 3.4 查看当前控制台终端 3.5 关闭一个虚拟终端 4. shell是运行在tty之上的命令行解释器。 4.1 查看可用shell 4.2 查看系统默认的shell 4.3 查找用户的默认shell 4.4 查看当前使用的shell 5. 小节 6. Q&A 6.1 还没看懂? 返回第一页重新看一边。 6.2 还没看懂? 写的太简单了,请看如下更详细的解释: 6.3 上文如有错误,还请不吝赐教,在评论区帮忙指正。 Linux世界,如何理解这几个关键字: Console, terminal, tty, shell, kernel**???** console和terminal在功能上没什么区别。 tty和terminal是同义词。 shell是内核kernel的外壳。 **Huh?** # 1. 先看图表 # ## 1.1 简表 ## <table> <tbody> <tr> <td style="text-align:left;"> <div style="text-align:center;"> <strong>关键字</strong> </div> </td> <td style="text-align:left;"> <div style="text-align:center;"> <strong>中文</strong> </div> </td> <td style="text-align:left;"> <div style="text-align:center;"> <strong>文件</strong> </div> </td> <td style="text-align:left;"> <div style="text-align:center;"> <strong>描述</strong> </div> </td> <td style="text-align:left;"> <div style="text-align:center;"> <strong>简单说是</strong> </div> </td> </tr> <tr> <td align="left">console</td> <td align="left">控制台</td> <td align="left">/dev/console</td> <td align="left">物理控制台,(显示器,键盘)</td> <td align="left">硬件设备</td> </tr> <tr> <td align="left"> </td> <td colspan="2" align="center">ctrl + alt [F2,F7] 切换</td> <td align="left">支持独立登录会话的虚拟控制台</td> <td align="left">虚拟终端</td> </tr> <tr> <td align="left">terminal</td> <td align="left">终端</td> <td align="left">/dev/pts/* <br> /dev/tty*</td> <td align="left">文本输入/输出会话</td> <td align="left">会话session</td> </tr> <tr> <td align="left">tty</td> <td align="left">TTY</td> <td align="left">特殊类型的设备文件,</td> <td align="left">伪设备</td> </tr> <tr> <td align="left">shell</td> <td align="left">外壳</td> <td align="left">/bin/bash</td> <td align="left">命令行解释器,</td> <td align="left">程序</td> </tr> <tr> <td align="left">Kernel</td> <td align="left">内核</td> <td align="left">/boot/vmlinuz*</td> <td align="left">Linux操作系统内核</td> <td align="left">内核</td> </tr> </tbody> </table> ## 1.2 shell与内核的示意图 ## ![1085375-20190726093801317-1332301724.png][] 古老的单用户单任务系统,大概就这个结构。 ## 1.3 Console-terminal-tty-shell-kernel示意图 ## 现代的系统都是多用户,多任务,图形界面的复杂结构,就需要多个控制台,多个终端同时登录。 ![1085375-20190726093814848-112164051.png][] 如上示意图,假设了4个用户同时登录,2个本机用户,2个远程用户 <table> <tbody> <tr> <td align="left">地点</td> <td align="left">界面</td> <td align="left">用户</td> <td align="left">console</td> <td align="left">terminal > tty</td> <td align="left">shell</td> </tr> <tr> <td align="left">本机</td> <td align="left">GUI</td> <td align="left">User01</td> <td align="left">本机GUI</td> <td align="left">tty7 (/dev/pts/0,1,2…)</td> <td align="left">/bin/sh;/bin/bash…</td> </tr> <tr> <td align="left">本机</td> <td align="left">ctl</td> <td align="left">User02</td> <td align="left">本机ctl</td> <td align="left">tty2 (ctrl + alt [F2|F7]切换)</td> <td align="left">/bin/sh</td> </tr> <tr> <td align="left">远程</td> <td align="left">ctl</td> <td align="left">User03</td> <td align="left">ssh</td> <td align="left">tty3</td> <td align="left">/usr//bin/fish</td> </tr> <tr> <td align="left">远程</td> <td align="left">ctl</td> <td align="left">User04</td> <td align="left">ssh</td> <td align="left">tty4</td> <td align="left">/usr//bin/zsh</td> </tr> </tbody> </table> # 2. console控制台有2类 # console,控制台(/dev/console),有2类, * 物理控制台: (比如键盘,显示器);也叫物理终端 * 虚拟控制台: 每个控制台都支持独立的登录会话 # 3. console及terminal操作 # ## 3.1 切换控制台 ## Ctrl + Alt + \[F2...F7\] 查看当前用户: $ whoami toma ## 3.2 查看有那些用户登录,分别占用了那些tty\*? ## **$ who** toma tty7 2019-07-20 20:20 (:0) root tty2 2019-07-25 23:22 **$ w** 23:22:26 up 5 days, 3:02, 2 users, load average: 0.48, 0.84, 1.14 USER TTY LOGIN@ IDLE JCPU PCPU WHAT toma tty7 Sat20 5days 5:49m 0.01s /bin/sh /etc/xdg/xfce4/xinitrc root tty2 23:22 18.00s 1.46s 1.31s cmatrix 注: tty7是当前用户登录的xfce4图像界面,其他是通过(Ctrl + Alt \[F2\])登录的命令行界面。 ## 3.3 发送文字到其他控制台终端 ## **$ echo "hello" > /dev/tty2** ## 3.4 查看当前控制台终端 ## **Ctrl + Alt \[F2\]** 切换到tty2,查看当前控制台终端 **$ tty** /dev/tty2 **Ctrl + Alt \[F7\]** 切换到tty7,查看当前控制台终端 **$ tty** /dev/pts/0 注: 这个tty不是直接在tty7的sh上运行的,是在tty7之上的图形界面之上,通过xfce4-terminal软件建立的虚拟终端会话。 多开一个xfce4-terminal软件界面,就多出一个这样的会话。 **$ tty** /dev/pts/1 ## 3.5 关闭一个虚拟终端 ## **$ ls /dev/pts/** 0 1 2 ptmx **exit**退出或关掉任意一个xfce4-terminal界面,这里也会少一个文件。 至于tty2,需要**切换**到tty2,再**exit**退出。 # 4. shell是运行在tty之上的命令行解释器。 # ## 4.1 查看可用shell ## **$ chsh -l** /bin/sh /bin/bash /usr/bin/git-shell /usr/bin/fish **$ cat /etc/shells** \# Pathnames of valid login shells. \# See shells(5) for details. /bin/sh /bin/bash /usr/bin/git-shell /usr/bin/fish ## 4.2 查看系统默认的shell ## **$ echo $SHELL** /usr/bin/fish 通过环境变量 **$ env | grep SHELL** SHELL=/usr/bin/fish ## 4.3 查找用户的默认shell ## **$ cat /etc/passwd | grep toma** toma:x:1001:985::/home/toma:/usr/bin/fish ## 4.4 查看当前使用的shell ## **$ ps** PID TTY TIME CMD 17333 pts/0 00:00:00 **fish** 28228 pts/0 00:00:00 **ps** **$ bash** **$ ps** PID TTY TIME CMD 17333 pts/0 00:00:00 fish 28235 pts/0 00:00:00 **bash** 28241 pts/0 00:00:00 **ps** // bash 可用如下方式,其他sh不一定有效。 $ ps -p $$ PID TTY TIME CMD 28235 pts/0 00:00:00 bash $ echo $0 bash # 5. 小节 # console主要指物理终端,硬件设备键盘等;terminal提供文本输入的会话,/dev/下的体现都是字符类设备文件。 GUI下创建虚拟终端terminal会话的程序比如:/usr/bin/xfce4-terminal。 terminal = tty 是文本输入/输出的会话。 terminal 是统称概念,每个terminal都有具体的tty编号对应,且在/dev/下以字符文件形式存在。 shell是运行在tty之上的程序。内核的外壳,用户的命令提示符。比如bash,zsh,fish等。 shell通过控制tty与用户交互,并向用户提供启动其他程序的方式。 # 6. Q&A # ## 6.1 还没看懂? 返回第一页重新看一边。 ## ## 6.2 还没看懂? 写的太简单了,请看如下更详细的解释: ## What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'? [https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con][https_unix.stackexchange.com_questions_4126_what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con] [https://www.zhihu.com/question/21711307][https_www.zhihu.com_question_21711307] The TTY demystified 解密TTY [http://www.linusakesson.net/programming/tty/][http_www.linusakesson.net_programming_tty] 中文翻译:[https://www.cnblogs.com/liqiuhao/p/9031803.html][https_www.cnblogs.com_liqiuhao_p_9031803.html] **还有疑问?console, terminal, tty的概念模糊不清,其实问题不大,这有历史的原因。** **普通用户只要知道命令在终端里输入,其实是终端的shell里输入。打开终端就会运行默认的shell。会用基本的shell命令即可。** ## 6.3 上文如有错误,还请不吝赐教,在评论区帮忙指正。 ## 转载于:https://www.cnblogs.com/sztom/p/11247883.html [1085375-20190726093801317-1332301724.png]: /images/20211104/041e7ea9d7234c0eac2d82feaa44cf6e.png [1085375-20190726093814848-112164051.png]: /images/20211104/7ee313ed4950455fa64285a514895106.png [https_unix.stackexchange.com_questions_4126_what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con]: https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con [https_www.zhihu.com_question_21711307]: https://www.zhihu.com/question/21711307 [http_www.linusakesson.net_programming_tty]: http://www.linusakesson.net/programming/tty/ [https_www.cnblogs.com_liqiuhao_p_9031803.html]: https://www.cnblogs.com/liqiuhao/p/9031803.html
还没有评论,来说两句吧...