6.bash特性
GUI:gnome,KDE,xface
CLI:sh,csh,ksh,bash,tcsh,zsh
bash:兼具各种功能,开源,所以各种发行版默认使用。
如果两个用户同时登录,则有多个互不相干的进程。
在每个进程看来,当前主机只存在内核和当前进程,即使是父子进程。
linux特性之一:一个账户可以登陆多次,每个sh是单独的进程。
注意,程序只有一个,进程是程序的实例/副本。
type bash
显示为外部命令
bash是程序,所以可以多次启动,sh中再打开sh(子shell)
该测试可用pstree查看
bash特性:
- 命令历史、补全
- 管道,重定向
- 命令别名
- 命令行编辑
- 命令行展开
- 文件名通配
- 变量
- 编程(sh脚本)
命令行编辑
快捷键 | 功能 |
---|---|
ctrl+a | 到行首/尾 |
ctrl+e | 删除光标后面的一个字符 |
ctrl+d | 删除光标前面的所有内容 |
ctrl+u | 删除光标后面的所有内容 |
ctrl+l | 清屏 |
ctrl+左/右 | k跨单词移动 |
命令历史
$history
-c #清空历史
-d +OFFSET #删除
-w #保存
历史缓存大小存在~/.bashrc的HISTSIZE变量中。
echo \$HISTSIZE
!OFFSET
直接使用
!-OFFSET
倒数命令
!!
上一条命令
!字符串
最近以指定字符串开头的命令
!$
或者Esc-松开-.或者alt+. 引用前一个命令的最后一个参数
别名
alias ALIAS=CMD [options] [arguments]
仅在当前shell进程生命周期中有效
alias显示所有别名
撤销:unalias ALIAS
命令替换,使用美元$或反引号`(数字1左边的键位)
echo "the current dir is $(pwd)"
touch ./file-$(date +%F-%H-%M-%S).txt
关于三种引号
:命令替换
" ":弱引用,可以实现变量替换。
’ ':强引用,不完成变量替换。
通配符(Globbing)
shell的内置功能。man 7 glob
可以查询。
-
*:匹配任意长度任意字符
-
?:任意单个字符
-
[]:匹配指定范围内的任意单个字符
-
[^]:匹配指定范围外的任意单个字符
-
[0-9a-zA-Z]
-
[:space:]——空白字符
-
[:punct:]——标点符号
-
[:upper:]——大写字母
-
[:lower:]——小写字母
-
[:alpha:]——大小写字母
-
[:digit:]——数字
-
[:alnum:]——数字和大小写字母
7.grep
grep家族有egrep,fgrep,rgrep。
grep [options] PATTERN [file...]
-i #忽略大小写
--color #匹配串高亮
#可根据习惯设置别名:alias grep='grep --color'
-v #显示未被匹配的行,即反向匹配
-o #仅显示匹配的字符串
-E #extended re
手册中写着print lines matching a pattern
,即按行匹配.
RegExp
元字符 . :任意单个字符
[^] 匹配一个不在指定范围内的字符
关于次数匹配:
- *:匹配前面的字符任意次数。
- ?:匹配前面的字符1次或0次。
- {m,n}:匹配前面的字符至少m次,至多n次。
- ^:锚定行首,其后内容必须出现在行首。eg:grep ‘^r…t’ /etc/passwd
- $:锚定行尾,其前内容必须出现在行尾。eg:grep ‘b…h$’ /etc/passwd
- ^$:空白行
关于单词匹配:
\
<或\b
:其后面的任意字符必须作为单词首部出现。
\>
或\b
:其前面的任意字符必须作为单词尾部出现。
eg:\<root\>
,也可写为,\broot\b
关于分组:
\(\)
,eg,\(ab\)*
\N
:代表前面从左往右第N个匹配的左括号及对应右括号的分组内容,N最小为1。
1.txt内容如下
he likes his liker.
he loves his lover.
he likes her.
grep '\(l..e\)s.*\1' 1.txt
,则匹配:
likes his like
loves his love
注意用反斜线转义,防止花括号被shell解释。
egrep
re有两种:basic re和extended re
grep -E或者egrep:extended re
了解-A,-B,-C
,即显示after,before,context
的行
grep -C 2 '^core id' /proc/cpuinfo
可显示上两行和下两行physical id : 1
siblings : 2
core id : 1
cpu cores : 2
apicid : 3
关于extended re元字符:
字符匹配用法不变.
次数匹配:
*不变
? 不需反斜线
+: 相当于{1,}
{} 不需反斜线
位置匹配:
^ $ \<\>
分组匹配:
()不需反斜线
也支持\1,\2…
a|b:或
c|Cat:c或者Cat
(c|C)at:cat或Cat
EX:
匹配0-255
ifconfig | egrep ‘\<( [0-9] |[1-9][0-9] | 1[0-9][0-9] | 2[0-4][0-9] | 25[0-5] )\>’
即 ’ \<( 个位数 | 两位数 | 100-199 | 200-249 | 250-255 )\> ’
匹配ip
ifconfig | egrep -o ‘\<([0-9]|1-9|10-9|20-4|25[0-5])>\.\<([0-9]|1-9|10-9|20-4|25[0-5])>\.\<([0-9]|1-9|10-9|20-4|25[0-5])>\.\<([0-9]|1-9|10-9|20-4|25[0-5])\>’
或
ifconfig | egrep -o ‘(\<([0-9]|1-9|10-9|20-4|25[0-5])>\.){3}\<([0-9]|1-9|10-9|20-4|25[0-5])\>’
-o选项 : 只输出匹配部分