2019.4.16
1.字符集:文字符号在计算机中标识的方法
(1)临时修改
[root@lsr7 ~]# export LANG='zh_CN.utf8' zh中文 CN中国 utf8或者UTF-8 万国码,通用的 en英语 US美国
[root@lsr7 ~]# vimtutor //随便使用一共命令,下面肯出现中文
[root@lsr7 ~]# echo $LANG
zh_CN.UTF-8
(2)永久修改
[root@lsr7 ~]# echo $LANG
zh_CN.UTF-8
[root@lsr7 ~]# ll /etc/locale.conf
-rw-r--r--. 1 root root 19 3月 8 16:32 /etc/locale.conf
[root@lsr7 ~]# cat /etc/locale.conf
LANG=en_US.utf8
[root@lsr7 ~]# source /etc/locate.conf
-bash: /etc/locate.conf: 没有那个文件或目录
[root@lsr7 ~]# source /etc/locale.conf
[root@lsr7 ~]# echo $LANG
en_US.UTF-8
(3)暂时加永久 (设置之后xshell断开再连接一下)
[root@lsr7 ~]# localectl set-locale LANG=en_US.utf8 //或者改中文是LANG=zh_CN.utf8
Echo $LANG和地球上面的字符(语言),输出命令容易出现乱码,所以他们俩必须一致
2.特殊符号系列
`` 等于$() :反引号 优先执行$()内部的命令,把结果留,()里面必须放命令
‘’ :单引号 所见即所得
“” :双引号 解析里面的特殊符号
:不加引号,可以使用{}
> :输出重定向
>> :追加输出重定向
2> :错误输出重定向
2>> :标准错误输出,追加重定向
2>&1 :标准错误重定向(不提示,错误正确都放在一个里面)
&& :前面命令执行成功再执行下一个命令
|| :前一个命令执行失败再执行下一个命令
3.通配符
* :所有
^ :匹配字符串开头
? :任意一个字符(??任意两个字符) 了解
4.[root@lsr7 ~]# echo "$LANG" //双引号
en_US.UTF-8
[root@lsr7 ~]# echo '$LANG ' //单引号
$LANG
[root@lsr7 ~]# echo "$LANG {1..5}"
en_US.UTF-8 {1..5}
[root@lsr7 ~]# echo '$LANG {1..5}'
$LANG {1..5}
[root@lsr7 ~]# echo $LANG {1..5} //不加引号
en_US.UTF-8 1 2 3 4 5
[root@lsr7 ~]# ll $(find /oldboy -type f -name '*.txt')
-rw-r--r-- 1 root root 0 Apr 16 11:02 /oldboy/huahua.txt
5.xargs //把管道传递内容从字符转换为文件名
[root@lsr7 ~]# find /oldboy -type f -name '*.txt'|xargs ls -l
-rw-r--r-- 1 root root 0 Apr 16 11:02 /oldboy/huahua.txt
6.-exec 执行
[root@lsr7 ame '*.txt'~]# find /oldboy -type f -exec ls -l {} \; //找出的文件放{} \是撬棍
-rw-r--r-- 1 root root 0 Apr 16 11:02 /oldboy/huahua.tx
7.查找/etc下所有以.conf为结尾的文件,大于1M,修改时间7天以内的文件,复制到/tmp下
[root@huahua ~]# find /etc -type f -size +1M -mtime -7 -name '*.conf' -exec cp -i {} /tmp \;
[root@huahua ~]# cp -a `find /etc/ -type f -size -2M -name '*.conf'` /tmp/old
[root@huahua ~]# find /etc -type f -size +1M -mtime -7 -name '*.conf' | xargs -i cp {} /tmp
[root@huahua ~]# find /etc -type f -size +1M -mtime -7 -name '*.conf' | xargs cp -t /tmp
8.查看历史命令
[root@lsr7 ~]# !ls //找出最近执行的以ls开头的命令
[root@lsr7 ~]# history |grep ls
9.以时间命名
(1)压缩/etc/到/tmp/etc下,并以时间命名
[root@lsr7 ~]# tar zcf /tmp/etc$(date +%F-%T).tar.gz /etc/ (注意date后面有空格)
[root@lsr7 ~]# ll /tmp/
-rw-r--r-- 1 root root 10190179 Apr 15 20:06 2019-04-15-20:06:48etc.tar.gz
(2)查找/目录下小于2M,七天内,以.conf为结尾的文件,并把它打包到/tmp下,以时间命名
[root@huahua ~]# find / -type f -mtime -7 -size -2M -iname '*.conf' | xargs tar zcf /tmp/$(date +%F).tar.gz
下面的是一些软链接不存在了,不是报错
[root@huahua ~]# tar zcf /tmp/$(date +%F)conf.tar.gz $(find / -type f -name "*.conf" -mtime +7 -size -2M)
2019.4.17三剑客set grep awk
1.
[root@huahua ~]# vim /etc/ssh/sshd_config
[root@huahua ~]# systemctl restart sshd
2.通配符和正则的区别
作用支持命令
通配符方便我们找文件Linux大部分命令都可用
正则方便我们过滤文件(在文件中找内容)Linux三剑客 开发语言Phython Go PHP JAVA
3.正则表达式(Regular Expression RE)
发明1套符号,不同符号有不同含义,方便我们再文件中查找/过滤内容
(1)基础正则(Basic RE BRE)
^ :以什么开头
$ :以什么结尾
^$ :查找空行(这一行什么都没有)
.* :所有任意字符
. :任意一个字符
* :匹配前一个字符 只能放字符后面,不允许放前面 前一个字符连续出现0次或0次以上
[] :匹配里面任意一个字符(综括号)
[^] :不要里面的任意字符
\ :转义字符
[root@huahua ~]# cat /etc/ssh/sshd_config > /tmp/test.txt //把/etc/ssh/sshd_config的内容放在/tmp/test.txt里面
[root@huahua ~]# grep '^#' /tmp/test.txt //筛选出/tmp/test.txt下以#开头的文件
[root@huahua ~]# grep 'no$' /tmp/test.txt //筛选出/tmp/test.txt下以$结尾的文件
[root@huahua ~]# grep -n '^$' /tmp/test.txt //筛选/tmp/test.txt下的空格 -n显示行号
[root@huahua ~]# grep 'n*' /tmp/test.txt //匹配带n的字符
[root@huahua ~]# grep -nv "^$" oldboy.txt //-v排除空行 -n显示行号
[root@huahua ~]# grep " " oldboy.txt //过滤出空格 (空格看不出来,拉黑就看到红色的空格)
[root@huahua ~]# grep -o "......" oldboy.txt //一次查看六个字符 (6个.代表一次查看6个字符 -o是显示过程)
①撬棍系列
加撬棍,是转移字符,作用,脱掉马甲,打回原型
\n 回车(换行)
\t tab(空格)
[root@huahua ~]# grep ".$" oldboy.txt //以任意字符为结尾
[root@huahua ~]# grep "\.$" oldboy.txt //查看oldboy.txt中以.为结尾
②echo
-n 不输出每行结尾的回车
-e 让echo支持转义符 \n \t
[root@huahua ~]# echo -e "\nhuahua\txixi\zhizhi" //可以看到huahua换行了,huahua和xixi之间有空格
追加123之后查看,可以看到有4个字符,加上-n追加可以看到有3个字符
[root@huahua ~]# grep "0*" oldboy.txt //连续(重复)出现的0
[root@huahua ~]# grep '[a-z]' /tmp/test.txt //匹配字母a-z的
[root@huahua ~]# grep " [a-zA-Z] " oldboy.txt //匹配a-z A-Z
[root@huahua ~]# grep " [0-Z] " oldboy.txt //匹配0-9 a-z A-Z
[root@huahua ~]# grep " [a-Z] " oldboy.txt //匹配a-z A-Z
[root@huahua ~]# grep "[0-9]" /tmp/test.txt //匹配带数字的
[root@huahua ~]# grep '^[mno]' oldboy.txt //显示以m或n或o开头的行
[root@huahua ~]# grep '[mn.]$' oldboy.txt //以m或n或点结尾的行
[root@huahua ~]# grep '^[mno].* [mn.]$' oldboy.txt //显示以m或n或o开头的并且以m或n或点结尾的行
[root@huahua ~]# grep "[^abc]" oldboy.txt //不要abc
(2)扩展正则(Extended RE ERE)
| 或者
+ 匹配前一个字符出现一次和一次以上(>=1)
() 后向引用
{} 前一个字符出现最少n次,最多m次
b{m,n} 前1字符连续出现至少m次和最多n次
b{m}前一个字符连续出现m次
b{m,}前1个字符连续至少出现m次
b{,n}前一个字符最多出现n次
? 前一个字符出现0次或1次
[root@huahua ~]# egrep '[a-Z]+' oldboy.txt //匹配a-Z出现1次或1次以上
[root@huahua ~]# egrep 'oldboy|linux' oldboy.txt //查找'oldboy或linux
[root@huahua ~]# egrep 'oldb[oe]y ' oldboy.txt //查找oldboy或者oldbey
[root@huahua ~]# egrep 'oldb(o|e)y ' oldboy.txt //查找oldboy或者oldbey
[root@huahua ~]# egrep '0{1,3}' oldboy.txt //查找0至少出现1次,最多出现3次
出现的5个0是因为grep具有贪婪性
[root@huahua ~]# egrep '0{2,4}' oldboy.txt
[root@huahua ~]# egrep '0{3}' oldboy.txt
[root@huahua ~]# egrep '[0-9]{17}[0-9X]$' id.txt //查找身份证号
[root@huahua ~]# egrep 'go?d' oldboy.txt //查找god或者go (oldboy.txt内必须有god和go)
4.括号表达式
[[:alnum]]:大小写字母或数字(也就是0-9)
[root@huahua ~]# egrep [[:alnum:]] oldboy.txt
5.man grep info grep //info比慢更详细
6. Cat -A 文件中所有隐藏符号,每行结尾加上$
[root@huahua ~]# cat -A oldboy.txt
7.
基础正则扩展正则
grep sed awkegrep sed -r awk