作业一:正则表达式
在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的
- 正则表达式分类
- 基本正则表达式
- 扩展的正则表达式
- Perl正则表达式
- 基本组成部分
grep命令
- 选项
-a 不要忽略二进制数据。 -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。 -c 计算符合范本样式的列数。 -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 -e<范本样式> 指定字符串作为查找文件内容的范本样式。 -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 -F 将范本样式视为固定字符串的列表。 -G 将范本样式视为普通的表示法来使用。 -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 -H 在显示符合范本样式的那一列之前,标示该列的文件名称。 -i 忽略字符大小写的差别。 -l 列出文件内容符合指定的范本样式的文件名称。 -L 列出文件内容不符合指定的范本样式的文件名称。 -n 在显示符合范本样式的那一列之前,标示出该列的编号。 -q 不显示任何信息。 -R/-r 此参数的效果和指定“-d recurse”参数相同。 -s 不显示错误信息。 -v 反转查找。 -w 只显示全字符合的列。 -x 只显示全列符合的列。 -y 此参数效果跟“-i”相同。 -o 只输出文件中匹配到的部分。
- grep命令常见用法
文件中查找一个单词:
grep match_pattern file_name grep "match_pattern" file_name
多个文件中查找:
grep "match_pattern" file_1 file_2 file_3 ...
输出除之外的所有行 -v 选项:
grep -v "match_pattern" file_name
使用正则表达式 -E 选项:
grep -E "[1-9]+" egrep "[1-9]+"
只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+\." line. echo this is a test line. | egrep -o "[a-z]+\." line.
统计文件或者文本中包含匹配字符串的行数 -c 选项:
grep -c "text" file_name
在多级目录中对文本进行递归搜索:
grep "text" . -r -n
选项 -e 制动多个匹配样式:
echo this is a text line | grep -e "is" -e "line" -o is line
作业二:grep作业
- 显示出所有含有root的行:
cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash
- 输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
[[email protected] ~]# grep -C ‘2‘ bash /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- chrony:x:996:994::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin ads247admin:x:1000:1000::/home/ads247admin:/bin/bash cx2c:x:1001:1001::/home/cx2c:/bin/bash
- 显示出有多少行含有nologin。
[[email protected] ~]# grep -c ‘nologin‘ /etc/passwd 22
- 显示出那些行含有root,并将行号一块输出。
[[email protected] ~]# grep -n ‘root‘ /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin
- 显示出文件中
- 新建用户 abominable
abominate
anomie
atomize
编写正则表达式,将他们匹配出来
[[email protected] ~]# adduser abominable [[email protected] ~]# adduser abominate [[email protected] ~]# adduser anomie [[email protected] ~]# adduser atomize [[email protected] ~]# egrep ‘^a[a-z]omi[a-z]*‘ /etc/passwd abominable:x:1002:1002::/home/abominable:/bin/bash abominate:x:1003:1003::/home/abominate:/bin/bash anomie:x:1004:1004::/home/anomie:/bin/bash atomize:x:1005:1005::/home/atomize:/bin/bash
- 建四个用户 Alex213sb
Wpq2222b
yH438PIG
egon666 egon
过滤出用户名组成是字母+数字+字母的行[[email protected] ~]# adduser Alex213sb [[email protected] ~]# adduser Wpq2222b [[email protected] ~]# adduser yH438PIG [[email protected] ~]# adduser egon666egon [[email protected] ~]# egrep ‘([a-Z]+)([0-9]+)([a-Z]+)‘ /etc/passwd ads247admin:x:1000:1000::/home/ads247admin:/bin/bash cx2c:x:1001:1001::/home/cx2c:/bin/bash Alex213sb:x:1006:1006::/home/Alex213sb:/bin/bash Wpq2222b:x:1007:1007::/home/Wpq2222b:/bin/bash yH438PIG:x:1008:1008::/home/yH438PIG:/bin/bash egon666egon:x:1009:1009::/home/egon666egon:/bin/bash
- 显示出/etc目录下所有包含root的文件名
grep -rl
[[email protected] ~]# grep -rln "root" /etc/ /etc/pki/ca-trust/ca-legacy.conf /etc/pki/ca-trust/extracted/README /etc/pki/ca-trust/extracted/java/README /etc/pki/ca-trust/extracted/java/cacerts /etc/pki/ca-trust/extracted/openssl/README /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/pki/ca-trust/extracted/pem/README /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem ...
- 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
egrep -v "^$|^#" /etc/ssh/sshd_config | sed ‘s/#.*.//g‘
作业三:
- Linux下源码安装Python并设置PATH
// readline-devel python shell里 方向键可用 // 机器默认是2.7,安装完之后需要把python命令链接到3.6 yum -y install zlib zlib-devel gcc readline-devel wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz xz -d Python-3.6.1.tar.xz tar -xvf Python-3.6.1.tar cd Python-3.6.1/ ./configure make all make install rm /bin/python ln -s /usr/local/bin/python3.6 /bin/python //设置默认python3.6为默认python
- windows下安装python,并设置PATH
选做题:
- 一键是部署nginx、nfs
- 编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件
- 编写计划任务,定时运行监控脚本,完成监控操作
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { margin: 0; padding: 0; border: 0 }
body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto }
body>*:first-child { margin-top: 0 !important }
body>*:last-child { margin-bottom: 0 !important }
p,blockquote,ul,ol,dl,table,pre { margin: 15px 0 }
h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold }
h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 code { font-size: inherit }
h1 { font-size: 28px; color: #000 }
h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000 }
h3 { font-size: 18px }
h4 { font-size: 16px }
h5 { font-size: 14px }
h6 { color: #777; font-size: 14px }
body>h2:first-child,body>h1:first-child,body>h1:first-child+h2,body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 }
a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 }
h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { margin-top: 10px }
a { color: #4183C4; text-decoration: none }
a:hover { text-decoration: underline }
ul,ol { padding-left: 30px }
ul li>:first-child,ol li>:first-child,ul li ul:first-of-type,ol li ol:first-of-type,ul li ol:first-of-type,ol li ul:first-of-type { margin-top: 0px }
ul ul,ul ol,ol ol,ol ul { margin-bottom: 0 }
dl { padding: 0 }
dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px }
dl dt:first-child { padding: 0 }
dl dt>:first-child { margin-top: 0px }
dl dt>:last-child { margin-bottom: 0px }
dl dd { margin: 0 0 15px; padding: 0 15px }
dl dd>:first-child { margin-top: 0px }
dl dd>:last-child { margin-bottom: 0px }
pre,code,tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace }
code,tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 }
pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent }
pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre code,pre tt { background-color: transparent; border: none }
kbd { background-color: #DDDDDD; background-image: linear-gradient(#F1F1F1, #DDDDDD); background-repeat: repeat-x; border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD; border-style: solid; border-width: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 10px; padding: 1px 4px }
blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777 }
blockquote>:first-child { margin-top: 0px }
blockquote>:last-child { margin-bottom: 0px }
hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0 }
table th { font-weight: bold }
table th,table td { border: 1px solid #ccc; padding: 6px 13px }
table tr { border-top: 1px solid #ccc; background-color: #fff }
table tr:nth-child(2n) { background-color: #f8f8f8 }
img { max-width: 100% }