《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
我们知道终端服务允许我们为用户自定义起始的程序,在终端服务配置中,我们覆盖用户的登陆脚本设置并指定tslog.bat为用户登录时需要打开的脚本,这样每个用户登录后都必须执行这个脚本,因为默认的脚本(相当于shell环境)是explorer(资源管理器),所以我在tslog.bat的最后一行加上了启动 explorer的命令start explorer,如果不加这一行命令,用户是没有办法进入桌面的。如果用户使用自动登录方式登录成功后,同一用户又在另外一个终端使用“用户名+密码”的登录方式,并勾选开通自动登录功能,再次进行登录,那么,前一用户将被系统自动下线,且前一用户的自动认证方式也将失效,需要重新设置。从以上输出可以看出,子 dtlogin 管理了显示 0 之后的桌面登录流程,当用户认证成功后,dtgreet 就退出了,子 dtlogin 紧接着启动了脚本程序/usr/dt/bin/xsession,在这个脚本里,将根据用户选择的桌面类型(cde 或 jds)来启动相应的脚本,从以上输出可以看到这里我们启动了 jds 桌面,从而调用了脚本 xsession2.jds,这个脚本里直接启动了 jds 的桌面管理程序gnome-session,从而我们会看到熟悉的 jds 桌面环境。
用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shelllinux命令大全,是一个父shell。在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell。
使用$ps --forest查看这种嵌套bash进程的关系。
在后台模式中运行命令可以在处理命令的同时让出CLI,以供他用。要想将命令置入后台模式,可以在命令末尾加上字符&。
除了ps命令,也可以使用jobs命令来显示后台作业信息。-l选项还可以显示PID。
在CLI中运用子shell的创造性方法之一就是将进程列表置于后台模式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。例如:$(tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&
协程可以同时做两件事。它的后台生成一个子shell,并在这个子shell中执行命令。使用coproc命令进行协程处理。例如:$coproc sleep 10。除了会创建子shell之外,协程基本上就是将命令置入后台模式。
协程与进程列表结合起来产生嵌套的子shell。例如:$coproc ( sleep 10 ; sleep 20)。
外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。外部命令程序通常位于/bin,/usr/bin,/sbin,/usr/sbin中。当外部命令执行时linux命令大全,会创建一个子进程。这种操作被称为衍生(forking)。
内建命令就是shell工具的一部分,不需要使用子进程来执行。$type cd cd和exit命令都内建于bash shell。可以用type命令来了解某个命令是否是内建的。$type -a pwd 有的命令有多种实现,可以用type命令的-a选项来查看多种实现。注意$shich pwd 只显示出了外部命令文件。
一个有用的内建命令是history命令。环境变量$HISTSIZE指定保存的历史命令数量。
$!! 显示并执行上次执行的那条命令。
命令历史记录被保存在隐藏文件.bash_history中。要注意的是,bash命令的历史记录是先存放在内存中,当shell退出时才被写入到历史文件中。
alias命令是另一个shell的内建命令。命令别名允许你为常用的命令及其参数创建另一个名称,从而将输入量减少到最低。Linux发行版可能已经为你设置好了一些常用命令的别名,使用$alias -p查看。$alias gs='git status' 创建别名。