|
-----------
Linux shell
-----------
1.chsh
功能:实用程序,改变用户默认的登录shell,提示用户输入新shell的完整路径名.
Bash /bin/bash(或/bin/sh)
Korn /bin/ksh
C /bin/tcsh(或/bin/csh)
2.echo
echo {arg}*
功能:shell命令,将所有参数显示到标准输出,默认在输出中追加一个换行符.
3.元字符
> 输出重定向:将标准输出写入文件
>> 输出重定向:将标准输出追加到文件
< 输入重定向:从文件读取标准输入
* 文件替换通配符:匹配零个或多个字符
? 文件替换通配符:匹配任意单个字符
[...] 文件替换通配符:匹配方括号之间的任何字符
`command` 命令替换:替换为command的输出
| 管道符号:把一个进程的输出发送给另一个进程的输入
; 用来组成命令序列
|| 条件执行:如果前一个命令失败,执行后一个命令
&& 条件执行:如果前一个命令成功,执行后一个命令
(...) 组合命令
& 在后台运行命令
# shell和程序忽略在#后面跟随的直到换行符之前的所有字符(即注释)
$ 扩展变量的值
\ 阻止shell对\后面的字符进行特殊解释
<<tok 输入重定向:从脚本读取标准输入,直到tok标记
4.重定向
4.1:>
command > fileName
功能:输出重定向,把command的标准输出写入文件fileName.
(如果该文件不存在,shell用fileName创建该文件;如果存在,它以前的内容被覆盖.如果文件存在,但没有写权限,则发生错误.)
(不带参数的cat将其标准输入复制到它的标准输出.)
4.2:>>
command >> fileName
功能:输出重定向,把command的标准输出追加到文件fileName.
(如果文件不存在,shell用fileName为文件名创建该文件.)
4.3:<
command < fileName
功能:输入重定向,把fileName的内容作为command的标准输入,执行命令.
(如果文件不存在或没有读权限,则发生错误.)
4.4:<<
command << word
功能:输入重定向,把标准输入中直到以word开始的那一行(这一行的第一个字为word)之前的内容(不包括这一行),复制到缓冲区中,然后用缓冲区的内容作为命令的标准输入执行命令.
(此功能几乎专门用来让shell程序(脚本)将其他命令的标准输入作为内联文本提供.)
5.文件名替换(通配符)
* 匹配任何字符串,包括空字符串.
? 匹配任何单个字符.
[...] 匹配方括号内的任意字符,可以在一对字符间使用连字符来指定一个字符范围.
(将字符串用单引号(撇号)或双引号括起来,可以阻止shell处理字符串中的通配符.)
(文件名中的/符号必须显式地匹配.)
6.管道
6.1:|
command1 | command2
shell能用管道(|)元字符把不同的进程连接在一起,将一个进程的标准输出作为另一个进程的标准输入.
6.2:tee
tee -ia {fileName}+
功能:实用程序,复制它的标准输入到指定文件和它的标准输出.
-a选项使输入追加到文件中,而不覆盖文件.
-i选项忽略中断.
7.`
功能:命令替换,用`(抑意)括起来的的命令执行后,它的标准输出插入它原来的地方,输出中的任何换行符都用空格替换.
(将管道和命令替换结合起来能够完成一些巧妙的操作.)
(命令替换的结果可以用做另一个命令的输入.)
8.序列
8.1:command1; command2; command3; ...
功能:序列,如果输入一系列的用分号隔开的简单命令或管道线,shell将从左至右依次执行,序列中的每个命令可以单独进行I/O重定向.
8.2:&&
功能:条件序列,如果指定用&&标记分隔的一系列命令,下一个命令只在前一个命令返回退出码0时才执行.
8.3:||
功能:条件序列,如果指定用||标记分隔的一系列命令,下一个命令只在前一个命令返回非0的退出码时才执行.
(&&和||元字符和C中的对应运算符功能相同.)
9.()
功能:组合命令,把命令放在圆括号中可以组合命令,执行它们的是一个子shell.
(这组命令共享同一个标准输入,标准输出和标准错误通道,可以重定向,可以使用管道,就像一个命令一样.)
10.后台处理
&
功能:后台处理,如果在单个命令,管道线,管道线序列或一组命令之后放置一个&元字符,则会创建一个子shell把这些命令作为后台进程执行.
(后台进程和父shell并发运行,不控制键盘.)
(在一行中能够指定几个后台命令,命令之间要用&隔开.)
11.command > fileName &
功能:重定向后台进程,要阻止后台进程的输出显示到终端,需要把输出重定向到文件.
12.shell程序(脚本)
包含shell命令的文件叫脚本,在运行脚本之前,必须使用chmod实用程序先给予它执行权限,然后运行时只需输入脚本的名称即可.系统确定脚本是为哪个shell编写的检查规则:
a.如果第一行只是一个#,那么你从哪个shell将这个脚本作为命令执行,脚本就由哪个shell解释.
b.如果第一行是#!pathName的形式,那么脚本由可执行程序pathName解释.
c.如果规则a和规则b都不适用,那么脚本由Bash解释.
(如果#出现在其他行,那么直到该行结束之间的所有字符都是注释.)
(使用".sh",".csh"和".ksh"扩展名的脚本只是为了清楚,事实上脚本可以叫任何名字,甚至可以不要扩展名.)
13.子shell
当前shell(父进程)会在几种情况下创建新的shell(子进程)来执行一些任务:
a.当执行组合命令时,如(ls; pwd; date),父shell创建一个子shell执行组合的命令.
(如果命令不是在后台执行,父shell一直休眠到子shell终止.)
b.当执行脚本时,父sehll创建一个子shell执行脚本中的命令.
(如果脚本不是在后台执行,父shell一直休眠到子shell终止.)
c.当执行后台作业时,父shell创建一个子shell执行后台命令.
(父shell和子shell并发运行.)
(子shell也叫"下级的shell",有自己的当前工作目录,在子shell中执行cd命令不会影响到父shell的工作目录.)
(每个shell都包含两个数据空间:一个环境空间和一个局部变量空间.子shell继承其父shell的环境空间的一个副本和一个干净的局部变量空间.)
14.变量
14.1:shell支持两种变量:局部变量和环境变量,两种变量都以字符串格式保存数据.
当shell调用子shell时,子shell获得父shell的环境变量的一个副本,但不获得局部变量的副本.所以,环境变量常用来在父shell和子shell之间传递有用的信息.
14.2:一些对所有shell通用的预定义的环境变量:
$HOME 主目录的完整路径名
$PATH shell搜索命令的路径
$MAIL 邮箱的完整路径名
$USER 用户名
$SHELL 登录shell的完整路径名
$TERM 终端的类型
14.3:不同的shell给变量赋值是语法不同,但访问变量的方法是相同的.如果在变量名前加一个$符号,shell将用命名变量的值替换这个标记序列.
要创建变量,只需给它赋一个值:变量不必声明.
变量赋值时,在等号两边不能有空格.如,variableName=value
14.4:几个常见的,含义特殊的内建变量:
$$ shell的进程ID
$0 shell脚本的名称(如果可用)
$1...$9 $n指向第n个命令行参数(如果可用)
$* 所有命令行参数的列表
15.引用
shell的引用机制可以禁止shell的通配符替换,变量替换和命令替换机制,其工作方式如下:
a.'(单引号)禁止通配符替换,变量替换和命令替换.
b."(双引号)只禁止通配符替换.
c.当引号嵌套时,只有外层引号生效.
(在文本周围使用单引号('),可以禁止所有的通配符,变量和命令替换;双引号只禁止通配符替换,但允许变量和命令替换.)
16.<<
command << word
功能:here文档,当shell遇到上述形式的序列时,将它的标准输入中直到但不包括word开始的行的内容,复制到一个shell缓冲区中,然后使用缓冲区的内容作为标准输入执行command.
(注意word是在结束行的开始,同时应该为word选择一个合理的值,这个值不应该是可能自然出现在随后的文本中的平常文本.)
(如果没有遇到以word开始的行,Bash和Korn shell一直复制到脚本结束,而C shell发出错误消息.)
(被复制文本中对shell变量的所有引用都被替换为变量的值.)
(使用<<元字符的脚本有时称为"here文档".)
17.ps
ps -efl
功能:实用程序,生成进程状态信息的列表,默认情况下,输出限制为当前的shell创建的进程.
-e选项指示ps包括所有正在运行的进程.
-f选项使ps生成完整的列表.
-l选项生成长列表.
ps输出中常见各栏的含义:
S 进程状态.
UID 进程的有效用户ID.
PID 进程ID.
PPID 父进程ID.
C 进程在上一分钟使用的CPU时间的比例.
PRI 进程的优先级.
SZ 进程的数据和堆栈的千字节大小.
STIME 进程创建的时间,如果进程在今天之前创建,则为创建的日期.
TTY 控制终端.
TIME 迄今为止使用的CPU时间(MM:SS).
CMD 命令的名称.
S域指示进程的状态:
O 正在处理器上运行
R 可运行的
S 休眠
T 挂起
Z 僵尸进程
18.sleep
sleep seconds
功能:实用程序,体眠指定的秒数,然后停止.
19.kill
kill [-signalId] {pid}+
kill -l
功能:实用程序/shell命令,向进程发送信号.
kill将代码为signalId的信号发送给指定PID的一个或多个进程,signalId可以是信号的名称或ID值.
kill默认发送TERM信号(信号ID为15),接收该信号的进程将会终止.
-l选项可以获得合法的信号名称的列表.
(只有进程的所有者或超级用户能发送信号给进程.)
进程能保护自不受所有信号的影响,只有KILL(信号ID是9)是个例外,因此,要确保终结一个进程,应发送信号ID 9给该进程.
(要注意的是,KILL信号不会让进程收到TERM信号时那样以正常方式释放资并终止.)
20.wait
wait [pid]
功能:shell命令,使shell挂起,直到指定进程ID的子进程终止,如果不使用参数,shell等待其所有的子进程终止.
21.查找命令
a.当shell执行命令时,首先查看是不是内建命令.如果是,shell直接执行命令.echo就是内建的shell命令.
b.如果不是内建命令,shell查看命令是否以/字符开始.如果是,它假定第一个标记是命令的绝对路径名,并执行所指明的文件.如果文件不存在,或者不是可执行文件,则发生错误.
c.如果浊内建命令或完整的路径名,则shell搜索PATH环境变量中列出的目录(从左至右).
d.用户可以在$PATH中添加或修改搜索目录.
22.终止和退出码
每个Linux进程都以一个退出码终止.按照约定,退出码0表示进程成功完成,非0的退出码表示失败.
a.所有的内建命令如果失败返回1.
b.Bash和Korn shell中,特殊的shell变量$?总是包含前一个命令的退出码值.
c.在C shell中,$status变量保存退出码.
23.exit
exit number
功能:shell命令,终止shell,将退出码number返回给它的父进程,如果省略number,则使用前一个命令的退出码.
(任何脚本都应显式地返回退出码.)
(结束脚本使用内建的exit命令.)
(如果shell不包含显式的exit语句,则默认返回上一个命令的退出码.)
24.通用的核心内建命令
24.1:eval
eval command
功能:shell命令,将command的输出作为普通的shell执行.
(可用于处理生成shell命令的实用程(如tset)的输出.)
24.2:exec
exec command
功能:实用程序,使得shell的映像在进程的内存空间中被command替换.
(如果command成功执行,执行exec的shell停止生存.如果此shell是登录shell,那么当command终止时登录会话也会结束.)
24.3:shift
功能:shell命令,使所有的位置参数$2...$n被重命名为$1...$(n-1),原来的$1被丢掉.
(可用于脚本中遍历命令行参数,如果没有要移动的位置参数,则显示错误消息.)
24.4:umask
umask [octalValue]
功能:shell命令,把shell的umask值设为指定的八进制数.如果省略参数,则显示目前的umask值.
(shell的umask值会一直保留到被改变,子进程从它们的父进程继承umask值.)
(每个Linux进程都包含一个特殊的量umask值,用来限制创建文件时所请求的权限设置,umask的设置位和请求的权限设置位进行异或运行.)
(如果文件在重定向前已经存在,原来文件的权限值保留,忽略umask值.) |
|