程序与进程
进程:在每个进程看来,当前主机只存在内核和当前进程
进程是程序的副本,进程是程序执行的实例;
用户的工作环境:
bash:
# 管理员
$ 普通用户
shell, 子shell
bash:
1、命令历史
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程(脚本)
命令行编辑:
光标跳转:
Ctrl+a:光标跳到命令行首
Ctrl+e:光标跳到命令行未
Ctrl+左右箭头:光标向左向右跳过一个单词
Ctrl+u:删除光标至命令行首的内容
Ctrl+k:删除光标至命令行未的内容
Crrl+l:清屏
命令历史:
查看命令历史:history
-c: 清空命令历史
-d: 删除指定位置
-w: 保存命令至历史文件
环境变量
PATH:命令搜索路径
HISTSIZE:命令的历史大小
命令历史的使用技巧(重要):
!n: 执行命令的第n条命令
!-n:执行命令的倒数第n条命令
!!:执行上一条命令
!sring:执行命令历史中最近一个以指定字符串开头的命令(如!man:意思是执行最近一个以man开头的命令)
!$和Esc,.: 引用前一个命令的最后一个参数
比如:前一个命令为:cat dch-test
现命令:more !$ 则执行命令为:more dch-test
tab:命令补齐,路径补齐
命令补全:搜索PATH环境变量所指定的每个路径下以为我们给出字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表,否则将直接补齐。
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补齐;
命令别名:
alias CMDALIAS='COMMAND [options] [arguments]' 有空格加引号
alias:查看当前所有命令别名
unalias CMDALIAS:撤销别名
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;若想始终有效,需要在shell的配置文件中更改;
命令替换:把命令中某个子命令替换为其执行结果的过程
$(COMMAND), 反引号;`COMMAND`
eg: echo "the current directory is $(pwd)" =echo "the current directory is `pwd`"
touch file-$(date +%F-%H-%M-%S).txt
bash支持的引号:
反引号`` : 命令替换
双引号“” :弱引用,可以实现变量替换
单引号‘’ :强引用,不完成变量替换
文件名通配,globbing
* :匹配任意长度的任意字符
?:匹配任意单个字符
[]:匹配指定范围内的任意单个字符 [abc],[a-m],[a-z],[A-Z],[0-9],[0-9a-zA-Z],
[^]:匹配指定范围之外的任意单个字符 [^0-9]*
[:space:] :空白字符
[:punct:] :标点符号
[:lower:] :小写字母
[:upper:] :大写字母
[:alpha:] :大小写字母
[:digit:] :数字
[:alnum:] :数字和大小写字母
eg: ls [[:alpha:]]* 列出以字母开头的文件
ls [[:alpha:]]*[[:alpha:]] 列出以字母开头和结尾的文件
ls [^[:alpha:]]* 列出以非字母开头的文件
#以上内容可通过 man 7 glob 查看
练习:
1、创建a123,cd6, c78m, my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其他符号都是文件名的组成部分;
2、显示所有以a或m开头的文件
ls [am]*
3、显示所有文件名中包含了数字的文件;
ls *[0-9]*
ls *[[:digit:]]*
4、显示所有以数字结尾且文件名中不包含空白的文件
ls *[^[:space:]]*[[:digit:]]
注:该公式未成功显示
5、显示文件名中包含了非字母或数字的特殊符号的文件
ls *[^[:alnum:]]*
ls *[^a-zA-Z0-9]*