'' 所见即所得,吃啥吐啥 "" 特殊符号会被解析运行 `` ==== $() 先运行里面的命令 把结果留下 > 重定向符号 先清空文件的内容 而后追加文件的最后 >> 追加剧定向 追加文件的最后 2> 错误重定向 只有错误的信息 才会经过这个漏洞进入文件中 2>> 错误追加剧定向 ~ 当前用户的家目录 root ~ /root oldboy ~ /home/oldboy ! 查找并运行历史命令 !awk 包含awk的命令 最近的一条运行 history |grep awk # 注释 root用户的命令提示符 $ 取出变量的内容 awk $取某一列的内容 普通用户的命令提示符 * 全部 任何东西 \ 撬棍 转义字符 && 前一个命令执行成功而后在执行后一个命令 ifdown eth0 && ifup eth0 || 前一个命令支持失败了再执行后面的命令
通配符是用来查找文件的。如:‘*.txt’ 表示匹配全部以 . txt结尾的文件
##1. * 全部,任意 找出文件名包含oldboy的文件 mkdir -p /oldboy cd /oldboy touch oldboy.txt oldboy oldboyfile oldboy.awk eduoldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "oldboy" /oldboy/oldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy" /oldboy/oldboy /oldboy/eduoldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy*" /oldboy/oldboyfile /oldboy/oldboy.txt-hard /oldboy/oldboy.awk /oldboy/oldboy.txt /oldboy/oldboy /oldboy/eduoldboy ##2. {} 生成序列 [root@oldboyedu01-nb oldboy]# echo {1..6} 1 2 3 4 5 6 [root@oldboyedu01-nb oldboy]# echo {1..10} 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu01-nb oldboy]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@oldboyedu01-nb oldboy]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@oldboyedu01-nb oldboy]# echo {01..10} 01 02 03 04 05 06 07 08 09 10 [root@oldboyedu01-nb oldboy]# echo stu{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 [root@oldboyedu01-nb oldboy]# echo 20{01..10} 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 [root@oldboyedu01-nb oldboy]# [root@oldboyedu01-nb oldboy]# echo {1,9,20} 1 9 20 #经过{}进行备份 [root@oldboyedu01-nb oldboy]# echo A{B,C} AB AC [root@oldboyedu01-nb oldboy]# echo A{,C} A AC [root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak} oldboy.txt oldboy.txt.bak [root@oldboyedu01-nb oldboy]# touch oldboy.txt [root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# ls -l oldboy.txt* -rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt -rw-r--r-- 1 root root 29 Oct 18 07:42 oldboy.txt.bak -rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt-hard lrwxrwxrwx 1 root root 10 Oct 17 09:27 oldboy.txt-soft -> oldboy.txt [root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# #cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak} oldboy.txt oldboy.txt.bak [root@oldboyedu01-nb oldboy]# echo A{,B} A AB
1)什么是正则?为什么使用它? 经过符号表示文字内容。 提升效率,省事。 支持正则表达式:Linux三剑客 grep sed awk 2)使用正则的时候注意事项 #1] 正则表达式是按照行进行处理的 #2] 禁止使用中文符号 #3] 给grep和egrep配置别名 cat >>/etc/profile<<EOF alias grep='grep --color=auto' alias egrep='egrep --color=auto' EOF source /etc/profile
用途 匹配的内容 支持的命令 通配符---用来匹配查找文件名 *.txt *.log 以.txt .log结尾的文件 大部分命令均可以使用 正则-----在文件中匹配查找内容 包含oldboy的行 Linux三剑客
名称 符号 命令
基础正则(basic regular expression BRE) ^ $ . * [] [^] grep sed awk 扩展正则(extended regular expression ERE) | + {} () ? grep -E/egrep sed -r awk
准备测试环境
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY!
#1]. ^ 以....开头的行 [root@oldboyedu01-nb oldboy]# grep '^m' oldboy.txt my blog is http://oldboy.blog.51cto.com my qq num is 49000448. my god ,i am not oldbey,but OLDBOY! #2]. $ 以....结尾的行 [root@oldboyedu01-nb oldboy]# grep 'm$' oldboy.txt my blog is http://oldboy.blog.51cto.com #3]. ^$ 空行 这一行中没有任何的符号 [root@oldboyedu01-nb oldboy]# grep -n '^$' oldboy.txt 3: 8: 排除文件中的空行 [root@oldboyedu01-nb oldboy]# grep -v '^$' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #4]. .(点) 任意一个字符 不包含空行 #-o 表示grep的执行过程 正则每次匹配到了什么? 找出文件中以点结尾的行 [root@oldboyedu01-nb oldboy]# grep '.$' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! 由于 . 是正则符号,因此并无匹配出咱们须要的内容。咱们须要使用\将其转义 #5]. \(撬棍) 转义符号 脱掉马甲,打回原形
[root@oldboyedu01-nb oldboy]# grep '\.$' oldboy.txt I teach linux. my qq num is 49000448. # \n 表示回车换行 #6]. * 前一个字符连续出现了0次或1次以上 >=0 A AA AAA AAAA [root@oldboyedu01-nb oldboy]# grep '0' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# grep -o '0' oldboy.txt 0 0 0 0 0 0 0 0 [root@oldboyedu01-nb oldboy]# grep '0*' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! [root@oldboyedu01-nb oldboy]# [root@oldboyedu01-nb oldboy]# grep -o '0*' oldboy.txt 000 00000 Linux正则表达式之问题1.
为什么会取出000 而不是 00 和0 0 0 0 #由于正则在表示 连续出现的时候表现出贪婪性 有多少吃多少 有多少匹配多少 Linux正则表达式之问题2.
为什么使用'0*' 会把整个文件的内容都显示出来 #A*表示 # 连续出现了0次A ====>至关于什么也没有,就像是在匹配 ‘ ’ 。所以就会把整个文件的内容都显示出来 # A连续出现了1次以上 A # 小结: 什么是连续出现 -o的使用 #7]. .* 全部字符 全部符号 全部 #正则中表示连续出现 或 全部的时候 贪婪性 有多少匹配多少 找出文件中以m开头的行而且以m结尾的行 [root@oldboyedu01-nb oldboy]# grep '^m.*m$' oldboy.txt my blog is http://oldboy.blog.51cto.com #8]. [] 中括号 [abc] 至关因而一个字符 找出包含a或b或c的行 [root@oldboyedu01-nb oldboy]# grep '[abc]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my god ,i am not oldbey,but OLDBOY! [root@oldboyedu01-nb oldboy]# grep -on '[abc]' oldboy.txt 1:a 1:b 1:a 1:c 2:a 2:c grep '[a-z]' oldboy.txt grep '[A-Z]' oldboy.txt grep '[0-9]' oldboy.txt grep '[a-zA-Z0-9]' oldboy.txt 练习3:以 m或n或o开头的 而且以 m或g 结尾的行 [root@oldboyedu01-nb oldboy]# grep '^[mno].*[mg]$' oldboy.txt my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org [root@oldboyedu01-nb oldboy]# grep '[m,n,o]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #9]. [^] [^abc] 排除a或b或c的内容 [root@oldboyedu01-nb oldboy]# grep '[^abc]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #10].基础正则小结 ##1)) ^ $ ^$ . * .* [] [^] ##2)) grep grep -o
+ | () {} ?html
#1]. +前一个符号连续出现了1次或屡次 ,贪婪匹配,尽量多的匹配 [root@oldboyedu01-nb oldboy]# egrep '0' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0+' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0+' oldboy.txt -o 000 00000 [root@oldboyedu01-nb oldboy]# egrep '0' oldboy.txt -o 0 0 0 0 0 0 0 0
符号 + 的应用 #把文件中连续出现的小写字母取出来 #1.取出小写字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #2.连续出现的小写字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #3.只保留连续出现的小写字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt -o am oldboy teacher teach linux like badminton ball billiard ball and chinese chess my blog is http oldboy blog cto com our site is http www etiantian org my qq num is not my god i am not oldbey but 小结: 1.能够把连续的东西经过正则取出来 2.通常与[]配合 #2]. | 或者 [root@oldboyedu01-nb oldboy]# egrep 'oldboy|linux' oldboy.txt I am oldboy teacher! I teach linux. my blog is http://oldboy.blog.51cto.com Linux正则表达式之问题3:[] 与 | 区别 均可以表示或者 [abc] a|b|c 区别: 1.[]基础正则 |扩展正则 2.[]表示的是单个字符或者 |单个字符的或多个字符的均可 [a-z] oldboy|linux #3]. () 括号中的内容至关因而一个总体 后向引用(反向引用) [root@oldboyedu01-nb oldboy]# egrep 'oldb(o|e)y' oldboy.txt I am oldboy teacher! my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY! 先乘除再加减,有括号的先算括号里面的。 #后向引用,反向引用,通常是在sed命令中使用 sed,把你想要的内容先保护起来(经过小括号),而后再使用他。
实例:需求,我要把123456用<>包起来 [root@oldboyedu01-nb oldboy]# echo '<123456>' 固然不是这种玩赖的作法 <123456> [root@oldboyedu01-nb oldboy]# echo 123456|sed 's#(.*)#\1#g' 注意:\1 表示第一个小括号 sed: -e expression #1, char 11: invalid reference \1 on `s' command's RHS [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#\1#g' 123456 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1#g' <123456 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g' <123456> [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\1#g' 2 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\2#g' 5 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.).(.)(.).#\3#g' 5
#4]. o{n,m} 前一个字符连续出现了至少n次,最多m次。 o{n} 前一个字符连续出现了n次 o{n,} 前一个字符连续出现了至少n次 o{,m} 前一个字符连续出现了最多m次 [root@oldboyedu01-nb oldboy]# egrep '0{1,4}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep -o '0{1,4}' oldboy.txt 000 0000 0 [root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt -o 000 0000 [root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt -o 000 00000 [root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt -o 000 000 [root@oldboyedu01-nb oldboy]# egrep '[0-9]' oldboy.txt my blog is http://oldboy.blog.51cto.com my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt -o 49000448 4900000448 #5]. ? 表示前一个字符连续出现0次或1次 gd good god gooood [root@oldboyedu01-nb oldboy]# egrep 'gd|god' li.log gd god [root@oldboyedu01-nb oldboy]# egrep 'go?d' li.log gd god [root@oldboyedu01-nb oldboy]# egrep 'go*d' li.log gd good god gooood
# 一、正则符号 连续出现(重复) * >=0 0次或者屡次 + >=1 1次以上 ? 0 1 0次或者1次 {n,m} >=n <=m 至少n次,最多m次 {n} ==n 取n次 其余 . 任意一个字符 [abc] 一个总体 至关因而一个字符a或者b或者c [a-z] [0-9] [A-Z] [^abc] 排除 | 或者 () 后向引用 反向引用 先保护再使用 ^ 以什么什么开头 $ 以什么什么结尾 .* 全部 ^$ 空行 #二、基础正则与扩展正则区别: 支持基础正则 基础+扩展 grep egrep === grep -E sed sed -r awk awk 使用撬棍\ 也能够命令支持扩展正则(通常不用,遇到稍微复杂的会很麻烦) [root@luffy-01 oldboy]# grep 'god\|gd' alex.txt gd god #三、查询帮助: man grep(简单的帮助) 查看详细的帮助信息info grep
一、请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)node
思路 1.定位-取出第2行 2.取出你要的ip地址 方法1-awk方法+awk+awk [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}' addr:10.0.0.200 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'|awk -F":" '{print $2}' 10.0.0.200 方法2-awk+awk [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $4}' [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $11}' inet [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $13}' 10.0.0.200
#遇到空格便切,前面有10个空格,切了10刀才遇到第一个非空格,太费劲了
#下面使用不费劲的方法,用+匹配(一个或者多个) [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}' 10.0.0.200 ##理解连续出现 理解 [] + [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' -o # # # # # # @ @ @ @ @ @ @ @ [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+' -o ###### @@@@@@@@ [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $2}' 1 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $3}' 2 方法3-awk #预备姿式-经过awk取出 ifconfig eth0 结果中的 第二行的第二列 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}' addr:10.0.0.200 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2{print $2}' addr:10.0.0.200 [root@oldboyedu01-nb ~]# #awk '找谁{干啥}' #最终结果 [root@oldboyedu01-nb ~]# ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}' 10.0.0.200 方法4-sed+sed+sed [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*:##g' 255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g' 10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# Bc.*$##g' 10.0.0.200 方法5-sed命令的后向引用 ****** #原则-先把你想要的内容保护起来,而后在后面使用 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:##g' 10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*) Bc.*$#\1#g' 10.0.0.200 方法6-sed #预备姿式-ifconfig eth0第二行的inet替换为oldboy [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#inet#oldboy#g' oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2s#inet#oldboy#gp' oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 #最终结果- [root@oldboyedu01-nb ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp' 10.0.0.200 小结: 1.理解第2 3 5方法 2.了解6 3.awk指定多个连续的分隔符,sed的反向引用
二、如何取得/etc/hosts文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644或0644这样的数字。linux
#方法1-awk [root@oldboyedu01-nb ~]# stat /etc/hosts |awk 'NR==4' Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) [root@oldboyedu01-nb ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4{print $2}' 0644 #方法2-sed [root@oldboyedu01-nb ~]# stat /etc/hosts |sed -n '4p' Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) [root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(##gp' 0/ root) [root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\([0-9]+##gp' /-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) [root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(([0-9]+).*$#\1#gp' 0644 #方法3-stat命令的参数 [root@oldboyedu01-nb ~]# stat -c%a /etc/hosts 644 小结: 1.sed 反向引用 awk方法指定分隔符
三、已知/oldboy/test.txt 文件内容为:正则表达式
oldboyshell
youxiaodao数据库
pizzaexpress
请问如何把文件中的空行过滤掉(要求命令行实现)vim
#方法1-grep -v表示排除 [root@oldboyedu01-nb oldboy]# grep '^$' test.txt [root@oldboyedu01-nb oldboy]# grep -n '^$' test.txt 2: 4: [root@oldboyedu01-nb oldboy]# grep -v '^$' test.txt oldboy xizi xiaochao #方法2-awk
[root@oldboyedu01-nb oldboy]# awk '/^$/' test.txt
[root@oldboyedu01-nb oldboy]# awk '不要/^$/' test.txt awk: 不要/^$/ awk: ^ invalid char '⥠in expression
! 表示排除 [root@oldboyedu01-nb oldboy]# awk '!/^$/' test.txt oldboy xizi xiaochao [root@oldboyedu01-nb oldboy]## awk '不要/空行/' test.txt #方法3-sed-删除 [root@oldboyedu01-nb oldboy]# sed '/^$/d' test.txt oldboy xizi xiaochao 小结: 1.通awk sed表示排除 2.awk ! 3.sed d
四、已知/oldboy/ett.txt 文件内容为:api
oldboybash
pizzzzza
test
请使用grep或者egrep 正则匹配的方式过滤出前两行内容
#如何经过-sed awk 实现过滤 === grep/egrep [root@oldboyedu01-nb oldboy]# cat ett.txt oldboy olldboooy test [root@oldboyedu01-nb oldboy]# egrep 'oldboy' ett.txt oldboy [root@oldboyedu01-nb oldboy]# awk '/oldboy/' ett.txt oldboy [root@oldboyedu01-nb oldboy]# sed -n '/oldboy/p' ett.txt oldboy 题目答案: [root@oldboyedu01-nb oldboy]# egrep 'ol+dbo+y' ett.txt oldboy olldboooy [root@oldboyedu01-nb oldboy]# awk '/ol+dbo+y/' ett.txt oldboy olldboooy [root@oldboyedu01-nb oldboy]# sed -n '/ol+dbo+y/p' ett.txt [root@oldboyedu01-nb oldboy]# sed -nr '/ol+dbo+y/p' ett.txt oldboy olldboooy [root@oldboyedu01-nb oldb 小结: 1.sed awk如何实现过滤相似grep/egrep 2.awk定位的方法 awk 'NR==1' awk 'NR==1,NR==10' awk '//' 3.sed定位 sed -n '1p' sed -n '1,10p' sed -n '10,$p' sed -n '//p'
五、linux下经过mkdir命令建立一个新目录/alexdir,alexdir的硬连接数是多少,为何?
而后在alexdir下面又建立了一个目录 /alexdir/test,问alexdir的硬连接数量是多少?
[root@luffy-01 oldboy]# mkdir /alexdir [root@luffy-01 oldboy]# ll /|grep alex drwxr-xr-x 2 root root 4096 Jan 15 15:21 alexdir [root@luffy-01 oldboy]# mkdir /alexdir/test [root@luffy-01 oldboy]# ll /|grep alex drwxr-xr-x 3 root root 4096 Jan 15 15:21 alexdir
查看一下:
[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/. 143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/ 143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.
2个文件的inode是同样的。在当咱们使用 cd . 的时候,也是进入了这个文件夹
建立以后,查看,果真是3个同样的inode
[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/. /alexdir/test/.. 143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/ 143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/. 143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/test/..
六、请给出默认状况eth0网卡配置文件的路径及客户端DNS的路径。
/etc/sysconfig/network-scripts/ifcfg-eth0
/配置/系统配置/网络-脚本/if(c f g)-eth0
DNS的配置
1./etc/resolv.conf
2.网卡配置文件
3.网卡配置文件里面的DNS优先
七、查找当前目录下全部文件,并把文件中的www.etiantian.org字符串替换成www.oldboyedu.com
假设如今在/oldboy find /oldboy -type f -name "*.txt" #方法1 find /oldboy -type f -name "*.txt"|xargs sed 's#www.etiantian.org#www.oldboyedu.com#g' (管道|何时用xargs,何时不用呢?) #方法2 ##预备姿式 [root@oldboyedu01-nb ~]# #ls -l 此处存放着 which mkdir命令的结果 [root@oldboyedu01-nb ~]# #ls -l which mkdir [root@oldboyedu01-nb ~]# #ls -l $(which mkdir) [root@oldboyedu01-nb ~]# #ls -l `which mkdir` [root@oldboyedu01-nb ~]# ls -l `which mkdir` -rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir [root@oldboyedu01-nb ~]# ls -l $(which mkdir) -rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir ##最终结果 sed 's#www.etiantian.org#www.oldboyedu.com#g' 此处存放着find命令的结果 sed 's#www.etiantian.org#www.oldboyedu.com#g' $(find /oldboy -type f -name "*.txt") #方法3 find /oldboy -type f -name "*.txt" -exec ls -l {} \;
-exec 是 find的参数,{}接受前面find命令的结果
7.1有一个实际是这样的,状况是:一个lamp的服务器,站点目录下的全部文件军备植入了js代码,致使网站打开时就会调用这个地址,显示广告,形成很恶劣的影响,
解决方案: #一、运营、网站用户发现弹窗广告 #二、运营报告给开发,开发联系运维,共同解决 #三、开发发现的问题就是,站点的目录都被植入了js代码 #四、运维人员解决问题: ## 1)运维备份原始出问题的原始文件 ## 2)历史备份覆盖 ## 3)find+sed覆盖 #五、仔细查看日志,寻找问题发现根源 #六、提供盲羊补牢解决方案(站点目录严格权限规划方案,以及新上线发布规范思路)
八、请问在一个命令上加什么参数能够实现下面命令的内容在同一行输出。
echo "oldboy";echo "oldboy"
# ; ====>分号表示分隔多条命令 ls;pwd;hello [root@oldboyedu01-nb ~]# echo -n "oldboy";echo "oldboy" oldboyoldboy # -n 表示取消输出每一行结尾的换行符号 [root@oldboyedu01-nb ~]# echo -e "a\nb" a b # echo命令的-e参数,就是让echo支持\n \t [root@oldboyedu01-nb ~]# echo -e "a\nb\n\tc" >echo.txt [root@oldboyedu01-nb ~]# cat echo.txt a b c # -A显示文件中的特殊符号 [root@oldboyedu01-nb ~]# cat -A echo.txt a$ b$ ^Ic$
九、请给出以下格式的date命令,例:11-02-26。再给出实现按周输出 好比:周六输出为6,请分别给出命令。
date命令的使用
[root@oldboyedu01-nb ~]# date Fri Oct 20 05:20:30 CST 2017 [root@oldboyedu01-nb ~]# #2017-11-11 [root@oldboyedu01-nb ~]# #date +格式 [root@oldboyedu01-nb ~]# date +%F 2017-10-20 [root@oldboyedu01-nb ~]# date +%Y-%m-%d 2017-10-20 [root@oldboyedu01-nb ~]# date +%w 5 [root@oldboyedu01-nb ~]# #显示当前的日期以年-月-日_周几 [root@oldboyedu01-nb ~]# date +%F_%w 2017-10-20_5 [root@oldboyedu01-nb ~]# date +%F_%w 2017-10-20_5 [root@oldboyedu01-nb ~]# date +%T 05:25:33 [root@oldboyedu01-nb ~]# date +%H:%M:%S 05:25:51 date命令按照格式显示日期小结: 1.date +格式 2.%F ===> %Y-%m-%d 年-月-日 %T ===> %H:%M:%S 时:分:秒 %w ===> 周几
十、扩展问题:打印三天前的日期,格式如:2088-08-28
如何显示指定日期:使用-d参数
[root@oldboyedu01-nb ~]# date Fri Oct 20 05:28:44 CST 2017 [root@oldboyedu01-nb ~]# date -d "1day" 显示1天后的日期 Sat Oct 21 05:29:07 CST 2017 [root@oldboyedu01-nb ~]# date -d "+1day" 显示一天后 Sat Oct 21 05:29:18 CST 2017 [root@oldboyedu01-nb ~]# date -d "-1day" 显示前一天 Thu Oct 19 05:29:42 CST 2017 [root@oldboyedu01-nb ~]# date -d "-1day" +%F 也能够制定显示格式 2017-10-19 [root@oldboyedu01-nb ~]# date -d "1day" +%F 2017-10-21 [root@oldboyedu01-nb ~]# #year month day hour min sec 格式顺序 #显示7天前的时间按照格式年-月-日_周几 [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# date +%F_%w 2017-10-20_5 [root@oldboyedu01-nb ~]# date +%F_%w -d "-7day" 2017-10-13_5
修改系统日期:使用-s参数
[root@oldboyedu01-nb ~]# date -s "21111111 11:11:11" Wed Nov 11 11:11:11 CST 2111 [root@oldboyedu01-nb ~]# date -s "1hour" 把当前系统时间日后添加一个小时 Wed Nov 11 12:12:51 CST 2111 [root@oldboyedu01-nb ~]# date -s "-1hour" Wed Nov 11 11:12:56 CST 2111
利用时间服务器,自动修改系统时间
时间服务器 pool.ntp.org ntp1.aliyun.com [root@luffy-01 oldboy]# ntpdate pool.ntp.org
十一、【Centos 5.x】当从root用户切到普通用户pizza时,执行ifconfig会提示。command not found.
一、Linux运行命令过程 输入命令 linux会在PATH里面进行查找 运行 报错 二、PATH环境变量 修改PATH环境变量 ##临时 [root@oldboyedu01-nb ~]# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@oldboyedu01-nb ~]#[root@oldboyedu01-nb ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ##永久 把环境变量的配置命令追加到/etc/profile中 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ##生效 source /etc/profile 小结: 1.什么是PATH环境变量 2.如何修改PATH环境变量
十二、请描述下列路径的内容是作什么的?
/var/log/messages 系统默认的日志 /var/log/secure 用户的登陆信息 /etc/fstab 开机的时候自动挂载列表 在开机的时候每一个磁盘分区对应着什么入口的列表 /etc/profile 配置环境变量 别名 /var/spool/cron/root 定时任务的配置文件 /etc/hosts 解析主机名 /etc/hosts 主机名---->ip地址 DNS解析 域名---> ip过程
1三、如何快速查到ifconfig的全路径,请给出命令。
####方法1 which (在PATH环境变量) [root@oldboyedu01-nb ~]# which mkdir /bin/mkdir [root@oldboyedu01-nb ~]# which sed /bin/sed ####方法2 find [root@oldboyedu01-nb ~]# find / -type f -name "gawk" /bin/gawk [root@oldboyedu01-nb ~]# find / -type f -name "sed" /bin/sed [root@oldboyedu01-nb ~]# find / -type f -name "mkdir" /bin/mkdir ####方法3 whereis 找出命令相关的 帮助 man ,因此会不少 [root@oldboyedu01-nb ~]# whereis sed sed: /bin/sed /usr/share/man/man1p/sed.1p.gz /usr/share/man/man1/sed.1.gz [root@oldboyedu01-nb ~]# whereis awk awk: /bin/awk /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1p/awk.1p.gz /usr/share/man/man1/awk.1.gz [root@luffy-01 ~]# whereis -b sed 使用-b参数,获得的只是二进制文件
sed: /bin/sed
####方法4 locate 根据名字 找出文件的路径 根据文件名字与文件路径表格(数据库) 查找,通常不使用,由于使用它会去查询数据库,致使磁盘空间紧张 updatedb 跟新数据库 [root@oldboyedu01-nb ~]# touch oldboy-20171111.log [root@oldboyedu01-nb ~]# locate 20171111 刚刚创建的文件没有,跟新一下,才能查找到 [root@oldboyedu01-nb ~]# updatedb [root@oldboyedu01-nb ~]# locate 20171111 /root/oldboy-20171111.log
1四、请给出查看当前哪些用户在线的linux命令。
用户在线是什么意思呢 =====> 远程链接到服务器的用户
远程登陆的用户=====经过xshell或SecureCRT链接服务器
方式一:w
[root@luffy-01 ~]# w 17:40:11 up 8:58(累计已开机时间), 2 users, load average(平均负载): 0.00, 0.00, 0.00 load average(平均负载) USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT pizza tty1 -(表明本地) 08:44 08:53 0.09s 0.09s -bash root pts/0 10.0.0.1 11:31 0.00s 0.02s 0.00s w root pts/1 10.0.0.1 11:55 3:35 0.00s 0.00s -bash root pts/2 10.0.0.1 11:55 12.00s 0.01s 0.01s -bash 远程登陆的用户 从哪里登陆的 何时链接入系统 这个用户在作什么
系统的负载---系统繁忙程度
若是负载接近-服务cpu的核心总数
[root@luffy-01 ~]# cat /proc/cpuinfo 查看CPU信息 processor : 0 vendor_id : AuthenticAMD cpu family : 21 model : 16 model name : AMD Athlon(tm) X4 730 Quad Core Processor stepping : 1 cpu MHz : 2800.099 cache size : 2048 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc up rep_good tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw xop fma4 tbm bmi1 bogomips : 5600.19 TLB size : 1536 4K pages clflush size : 64 cache_alignment : 64 address sizes : 42 bits physical, 48 bits virtual power management:
[root@luffy-01 ~]# lscpu 查看cpu信息 Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: AuthenticAMD CPU family: 21 Model: 16 Model name: AMD Athlon(tm) X4 730 Quad Core Processor Stepping: 1 CPU MHz: 2800.099 BogoMIPS: 5600.19 Hypervisor vendor: VMware Virtualization type: full L1d cache: 16K L1i cache: 64K L2 cache: 2048K NUMA node0 CPU(s): 0
方式二:last
[root@luffy-01 ~]# last 谁在什么时间登录了系统,链接了多久 root pts/0 10.0.0.1 Tue Jan 15 08:47 still logged in pizza tty1 Tue Jan 15 08:44 still logged in
方式三:lastlog
显示系统中全部用户的最近一次的登陆信息
重启:
init 6 将启动级别改成重启
reboot 马上重启
shutdown -r 1 一分钟后重启系统
shutdown -c 把正在关机或者重启的命令取消掉,一台远程登陆重启,另外一台能够在时间内中止这条命令
shutdown -r now =====>至关于reboot
关机:
init 0
poweroff 会断电(物理机)
halt 须要手动关闭电源(物理机)
shutdown -h 1
shutdown -h now ======>至关于poweroff
Ctrl + a 把光标移动到《行首》 Ctrl + e 把光标移动到《行尾》 Ctrl + c 取消当前的操做 cancel Ctrl + d logout命令(当前行没有任何内容,退出当前用户) Ctrl + l (小写字母L) 清除屏幕内容 clear Ctrl + u 剪切光标所在位置到行首的内容 Ctrl + k 剪切光标所在位置到行尾的内容 ctrl + y 粘贴 ctrl + → 把光标向右移动一个单词 ctrl + ← 把光标向左移动一个单词 history |grep awk Ctrl + r search 搜索历史命令,没有找到,继续按快捷键,继续搜索,找到了按enter
移动光标: ↑k ←h →l ↓j 两边左右hl 中间是上下 移动到文件的第一行 gg :1 1G 移动到文件的最后一行 G :$ 快速到达文件的第100行 100gg 100G :100 移动光标到行首 0 ^ 移动光标到行尾 $ 编辑: 在当前行下一行插入一个空行并进入到编辑模式 o(小写字母O) 剪切光标所在位置到行尾的内容,而后进入编辑模式 C(大写字母C) 删除当前行的内容到行尾 dG 撤销上一次的操做 u 恢复上一次的操做 ctrl+r 复制粘贴剪切: 删除光标所在位置的内容到行尾 D 复制当前行 yy 剪切(删除)当前行 dd 粘贴 p 搜索: /你要找的内容 继续向下搜索n 继续向上搜索N vim查询帮助 :h :wq :h G
正则表达式练习题 取出网卡ip地址 取出权限 grep,sed,awk进行过滤 find命令与其余命令配置rm ls -l sed 三种方法 date显示或设置系统日期 按照你的说明显示指定的日期 以指定格式显示日期 自动修改系统时间 Linux下面快捷键 vi/vim快捷键