shell:人机交互的接口,将相关命令处理后递交给内核,内核再通过系统调用驱动硬件执行。
shell的分类:
GUI:Gnome,KDE,Xfce
CLI:sh,csh,ksh,bash,tcsh,zsh
程序的概念:
程序是经编译后形成的二进制可执行文件
进程的概念:
进程是程序的副本,是程序执行实例,在每个进程看来,当前主机上只存在内核和当前进程
bash的特性(或者说功能):
1.命令行历史、命令行补全
2.命令行编辑
3.命令别名
4.命令替换
5.文件名通配
6.管道,I/O重定向
7.变量
8.shell编程
1.命令行历史、命令行补全
history:查看命令行历史(记录暂时保存在内存缓冲区)
-c:清除命令历史
-d 数字:删除指定位置的命令
-w:保存命令历史至家目录历史文件(.bash_history)退出登陆时会将内存缓冲区中的命令 行历史写入.bash_history中
命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!:执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令;
!$:引用前一个命令的最后一个参数;
按Esc键松开后按.和Alt+.:引用前一个命令的最后一个参数
Ctrl+r键:在命令行中搜索命令历史并可按Enter键快速执行
历史命令相关的环境变量:
HISTFILESIZE定义了.bash_history文件中保存的命令条目
HISTSIZE定义了history命令能够显示的最多条目
HISTTIMEFORMAT定义了history命令的时间格式,典型配置是HISTTIMEFORMAT=‘ %F %T ’
命令行补全:
命令补全:搜索PATH环境所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个, 按两次Tab键可以给出列表,否则将直接补全唯一命令。
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全。
2.命令行编辑
常用的组合键:
Ctrl+p:相当于↑键
Ctrl+n:相当与↓键
Ctrl+b:相当于←键
Ctrl+f:相当于→键
Ctrl+e:跳到行尾
Ctrl+a:跳到行首
Ctrl+u:一行中删除光标左边的全部内容
Ctrl+k:一行中删除光标右边(包含光标指定的字符)的全部内容
3.命令别名
alias:直接键入alias显示当前shell下可用的别名
alias STRING=‘CMD [options] [arguments]’
在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围仅为当前shell进程
ualias STRING:删除别名
若STRING原本为命令, \STRING 表示忽略别名,直接执行原有的STRING
4.命令替换
命令替换是在一个命令中使用另一个命令的输出结果,如COMMAND1 `COMMAND2`
或COMMAND1 $(COMMAND2)
bash支持的引号:
``:反引号,用于命令替换
"":双引号,弱引用,可以实现变量替换,把变量替换成变量的值
'':单引号,强引用,不能实现变量替换
5.文件名通配(globbing)
*:任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z]
[[:space:]]:空白字符
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:alpha:]]:大小写字母
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
[^]:匹配指定范围外的任意单个字符
6.I/O重定向、管道
常见INPUT设备:键盘、鼠标、硬盘等
常见OUTPUT设备:显示器、音响、硬盘等
系统设定:
默认输出设备:标准输出,STDOUT,1
默认输入设备:标准输入,STDIN,0
标准错误输出:STDERR,2
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:
>:覆盖输出,将输出转到指定其他地方
>>:追加输出
set -C:禁止对已经存在文件使用覆盖重定向;
强制覆盖输出,则使用>|
set -C:关闭上述功能
2>:重定向错误输出
2>>:追加方式
&>:重定向标准输出或错误输出至同一个文件
> file_name 2>&1 等价于 &> file_name
<:输入重定向,将原本需要由键盘输入的数据,改由文件内容来替代
例子: cat>catfile<etc/profile
<<:结束的输入符号
管道(pipe):前一个命令的输出,作为后一个命令的输入
COMMAND1 | COMMAND2 | COMMAND3...
例子:cut -d: -f1 | head -1 | id
7.变量
变量:可以理解为命名的内存空间
内存:编址的存储单元
变量类型:事先确定数据的存储格式和长度
字符
数值型
整型
浮点型
布尔型
bash变量分类:
环境变量:作用域为当前shell进程及其子进程
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
本地变量:作用域为整个bash进程
set VARNAME=VALUE
局部变量:作用域为当前代码段
local VARNAME=VALUE
位置变量:shell编程时,传递的参数,在.sh文件中第一个参数可表示为$1,第二个为$2...
特殊变量:
$?:上一个命令的执行状态返代码(0-255)
0:正确执行
1-255:错误执行,1、2、127系统预留
变量操作
撤销标量:unset VARNAME
查看当前shell中的所有变量:set
查看当前shell中的环境变量:
printenv
env
export