文件全系管理&正则表达式
文件权限管理
r读4
w写2
x执行1
权限修改命令 chmod
u user
ggroup
oowner
aall
1、可以使用=来直接指定文件权限
2、可以使用+、来修改文件权限
3、可以使用数字的方法修改权限
拥有着权限修改 chown,chgrp
Chown可以同时对属主、属组进行修改,可以替代chgrp
文件遮罩码 umask
目录777-umask
文件666-umask(若减得的结果致使文件有执行权限,则权限自动加1)
修改后仅在当前shell进程生效
基本正则表达式
字符匹配:
. 任意单个字符
[] 中括号中,给出范围的单个字符
[^] 取反,中括号中范围之外的单个字符
[:upper:] 大写字母 A-Z
[:lower:] 小写字母 a-z
[:alpha:] 大、小写字母 a-zA-Z
[:digit:] 数字 0-9
[:alnum:] 数字和大、小写字母 0-9a-zA-Z
[:punct:] 各种标点符号 如‘"!?$等
[:space:] 空白字符,包括tab
次数匹配
* 匹配前面字符任意长度
.* 贪婪匹配,匹配任意长度的任意字符
\? 前面字符可有可无,出现0次或者1次
\+ 前面字符出现1次或者多次(至少1次)
\{n\} 前面字符出现n次
\{n,m\} 前面字符出现n-m次,至少n次至多m次
\{n,\} 前面字符出现至少n次,多则不限
\{0,m\} 前面字符出现最多m次,少则不限
位置锚定
^ 锚定行首 ^pattern
$ 锚定行尾 pattern$
^$ 空白行 ^[[:space:]]*$ 空白行,含空白字符、tab
\< 锚定词首 \<pattern
\> 锚定词尾 pattern\>
\<pattern\> 锚定整个单词 \<[0-9]\{2\}\> 意思是:整个2位数字的单词(单词不是指自然语言中的单词,而是一连串的字符,不含其他符号)
分组&后向引用
\(\) 把括号中的字符串当作一个整体看待
后向引用,是引用前面括号中的字符,而不是模式
\1 引用从左面数第一个"\("和与之对应的"\)"之间模式所匹配到的值
\2 引用从左面数第二个"\("和与之对应的"\)"之间模式所匹配到的值
…… 以此类推
如:amb test anb 使用: \(a.b\).*\1 则不能匹配,虽然a.b包括amb和anb,但是前面括号中匹配到的值为amb,所以后面\1引用过来的是amb,而不是a.b这个模式
\ 脱意字符
把一些有特殊含义的符号前加上"\",则把它看作一个普通的字符处理,而失去它原本的特殊含义和作用
扩展正则表达式
字符匹配跟基本正则表达式一样:
. 任意单个字符
[] 中括号中,给出范围的单个字符
[^] 取反,中括号中范围之外的单个字符
[:upper:] 大写字母 A-Z
[:lower:] 小写字母 a-z
[:alpha:] 大、小写字母 a-zA-Z
[:digit:] 数字 0-9
[:alnum:] 数字和大、小写字母 0-9a-zA-Z
[:punct:] 各种标点符号 如‘"!?$等
[:space:] 空白字符,包括tab
次数匹配,跟基本正则表达式略有不同,没有了“\”
* 匹配前面字符任意长度
.* 贪婪匹配,匹配任意长度的任意字符
? 前面字符可有可无,出现0次或者1次
+ 前面字符出现1次或者多次(至少1次)
{n} 前面字符出现n次
{n,m} 前面字符出现n-m次,至少n次至多m次
{n,} 前面字符出现至少n次
{0,m} 前面字符出现最多m次
位置锚定,跟基本正则表达式一样
^ 锚定行首 ^pattern
$ 锚定行尾 pattern$
^$ 空白行 ^[[:space:]]*$ 空白行,含空白字符、tab
\< 锚定词首 \<pattern
\> 锚定词尾 pattern\>
分组&后向引用,跟正则表达式略有不同,没有了"\"
() 把括号中的字符串当作一个整体看待
后向引用,是引用前面括号中的字符,而不是模式
\1 引用从左面数第一个“(”和与之对应的“)”之间模式所匹配到的值
\2 引用从左面数第二个“(”和与之对应的“)”之间模式所匹配到的值
…… 以此类推
\ 脱意字符,与基本正则表达式中相同
把一些有特殊含义的符号前加上“\”,则把它看作一个普通的字符处理,而失去它原本的特殊含义和作用
| 或者,基本正则表达式中没有的
A|B A或者B |整个左侧内容或者|右侧内容的意思
abc|Cba 是abc或者Cba的意思
ab(c|C)ba 是abcba或者abCba的意思
练习一
1、显示/etc/passwd文件中以bash结尾的行
grep‘bash$‘ /etc/passwd
2、显示/etc/passwd文件中的两位数或三位数;
grep‘\<[[:digit:]]\{2,3\}\>‘ /etc/passwd
3、显示‘netstat -tan‘命令结果中以‘LISTEN’后跟0个、1个或多个空白字符结尾的行;
netstat-tan | grep ‘LISTEN[[:space:]]*$‘
4、添加用户bash,testbash,basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
grep‘^\(\<[[:alnum:]]\+\>\).*\1$‘ /etc/passwd
练习二
1、显示当前系统上root、centos或user1用户的默认的shell和UID;
egrep‘^(root|nologin|test)‘ /etc/passwd |cut -d: -f3,7
2、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行;
egrep‘\<[[:alnum:]]+_?[[:alnum:]]+\>\(\)‘ /etc/rc.d/
3、使用echo输出一个路径,而后egrep找出其路径基名;进一步地:使用egrep取出其目录名;
基名: echo/etc/rc.d/init.d/functions/ | egrep ‘[[:alnum:]]+/?$‘ -o |cut -d/ -f1
路径名: ?
4、找出ifconfig命令执行结果中1-255之间的数字;
ifconfig | egrep‘\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>‘