当前位置: 首页 > Linux

Linux_《Linux命令行与shell脚本编程大全》Chapter5学习总结

时间:2023-04-06 01:43:20 Linux

时间:2017-04-10注:本文部分内容摘自《Linux命令行与shell脚本编程大全》一书,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第5章学习总结第5章:理解shell本章内容:探究shell的种类理解shell的父子关系巧妙使用子shell探究内置的shell命令5.1What在shell类型系统中启动什么样的shell程序取决于你的个人用户ID配置。在/etc/passwd文件中,默认的shell程序列在用户ID记录的第七个字段中。默认的用户shell是bashshell,但是还有一个默认的shell,/bin/sh,作为启动时需要使用的系统shell脚本的默认系统shell。提示:对于bashshell脚本,这两种不同的shell(默认交互式shell和默认系统shell)可能会导致问题。请务必阅读第11章关于bashshell脚本第一行的语法要求以避免这些麻烦。5.2shell的父子关系输入命令bash,生成一个子shell。执行其他命令时,它们将在子shell中执行。进程的父子关系可以通过ps-f命令查看,即子进程的PPID就是父进程的PID。通过ps--forest命令,可以分层查看进程。输入exit命令返回子进程shell,返回父进程shell。exit也可以用来退出当前的虚拟控制台终端。base中可用的命令行参数:-cstring:从字符串中读取命令并处理它们-i:启动一个可以接受用户输入的交互式shell-l:作为登录shell启动-r:启动一个受限的shell,用户将是限于默认目录-s:从标准输入读取命令5.2.1进程列表可以在一行中指定一系列顺序运行的命令。用分号(;)分隔它们。使用方括号将命令列表转换为进程列表。命令列表:$pwd;ls;光盘/等;裁谈会;密码;ls进程列表:$(pwd;ls;cd/etc;cd;pwd;ls)要知道是否生成了子shell,你必须使用环境变量命令。(环境变量在第6章介绍。)这个命令是echo$BASH_SUBSHELL。如果命令返回0,则没有子shell。如果它返回1或其他更大的数字,则表明存在子shell。5.2.2巧妙的subshel??l用法在交互式shellCLI中有许多更高效的subshel??l用法。进程列表、协程和管道(在第11章中介绍)都使用子shell。在交互式shell中,一个有趣的子shell用法是使用后台模式。1.探索后台模式在后台模式下运行命令可以在处理命令时产生其他用途的CLI。使用sleep命令来演示。sleep命令接受一个参数,即您希望进程等待(休眠)的秒数。命令:sleep命令演示:sleep10演示描述:暂停会话10秒并返回到shellCLI提示符。要将命令置于后台模式,请在命令末尾添加字符&。当命令在后台运行时,在shellCLI提示符返回之前会出现两条消息。第一项代表方括号中的后台作业编号;第二个条目表示后台作业的进程ID。命令:jobs命令格式:jobs-l命令描述:显示后台作业信息。可以显示当前在后台运行的所有用户的进程。Tips:需要提醒的是,后台作业的结束状态可能要等到合适的时候才会出现。当屏幕上弹出作业结束状态时,请不要感到惊讶。2.将进程列表放入后台正如前面所说,进程列表是运行在子shell中的一条或多条命令。将进程列表置于后台模式会在命令输出中显示出一些差异。命令演示:$(sleep2;echo$BASH_SUBSHELL;sleep2)&demo描述:将进程列表置于后台模式。将进程列表置于后台模式会生成作业号和进程ID,并返回到提示符。按Enter获得另一个提示。3.协程协程可以同时做两件事。它在后台生成一个子shell并在此shell中执行命令。命令:coproc命令格式:coproc命令命令描述:在子shell中执行coproc命令。协程会创建一个子shell来执行命令,同时将命令置于后台模式。使用作业查看后台任务。命令格式:coproctaskname{command}命令说明:为后台任务指定任务名并执行。5.3了解shell的内置命令了解shell的内置命令和非内置(外部)命令非常重要。内置命令的运行方式与非内置命令完全不同。5.3.1外部命令外部命令,有时称为文件系统命令,是存在于bashshell之外的程序。它们不是shell程序的一部分。外部程序通常位于/bin、/usr/bin、/sbin或/usr/sbin。ps是一个外部命令。您可以使用which和type命令找到它。命令演示:swichpsdemo说明:查看ps命令程序所在路径。命令演示:type-apsdemo说明:查看ps命令程序所在路径。当执行外部命令时,会创建一个子进程。此操作称为分叉。作为一个外部命令,ps命令在执行时会创建一个子进程。5.3.2内置命令内置命令和外部命令的区别在于前者不需要使用子进程来执行。它们已作为shell工具的组成部分与shell一起编译。无需运行外部程序文件。cd和exit命令内置于bashshell。命令演示:typecddemo说明:使用type命令了解命令是否内置。命令演示:type-aechoDemo说明:部分命令有多种实现方式。使用type命令的-a选项可以查看命令的不同实现。命令演示:whichpwddemo说明:whichcommand只显示外部命令文件。提示:对于一个有多个实现的命令,如果要使用它的外部命令实现,可以直接指定对应的文件。例如,要使用外部命令pwd,请输入/bin/pwd。1、使用历史命令命令:history命令格式:history命令说明:查看最近使用过的命令列表。通常历史记录会保存最近的1000条命令。提示:您可以设置保存在bash历史记录中的命令数。为此,您需要修改名为HISTSIZE的环境变量(请参阅第6章)。命令格式:history-a命令描述:将历史命令写入.bash_history文件。命令演示:!!演示阀:执行最后一条命令,即刚刚执行的命令。命令演示:!20演示说明:执行历史列表中编号为20的命令。2、命令别名aliascommand是另一个shell的内置命令。命令别名允许您为常用命令(及其参数)创建另一个名称,从而将输入次数减少到最低限度。命令:alias命令格式:alias-p命令描述:查看当前可用的别名。命令格式:aliasli='ls-li'命令说明:创建一个命令别名为li的命令,由ls-li组成。命令别名仅在定义它的shell进程中有效。但是,环境变量可用于使别名在不同的shell中工作。5.4小结本章讨论了一个复杂的交互程序:GNUbashshell。其中包括了解shell进程及其关系、子shell的产生方式以及子shell与其父shell的关系。主要介绍bash、exit、&、sleep、jobs、coproc、which、type、history、!、alias命令。本章所学命令我个人总结如下:bash:创建子shell进程exit:退出子shell进程,直到退出CLI客户端&:将任务置于后台模式sleep:等待当前进程(休眠)jobs:查看所有后台作业信息coproc:创建子进程,使用子进程执行任务which:查看命令程序所在文件路径(只显示外部命令文件)type:查看命令程序所在文件路径located(通过-a选项,显示每个命令的两次执行)history:查看命令使用的历史记录(默认1000条,可以修改HISTSIZE环境变量来控制显示的条数)!:执行命令inthecommandhistory(!!执行上一条命令,!n执行命令历史列表中的编号为n的命令)alias:为命令创建一个别名(默认只在创建的shell中有效,环境变量可以进行修改以使其对所有shell进程都有效)