复习(今日无答疑,笔记可以不写)


八、Linux shell基础知识


8.1 shell介绍

Linux学习笔记第八周七次课(4月3日)_sort

每个用户都有自己的shell;

Bourne人名,为了纪念他;

搜索zsh命令,#yum list | grep zsh

搜索ksh命令,#yum list | grep ksh

逻辑判断if,for等等;


8.2 命令历史

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_03

输入过的命令,会记录下来,上下键进行查看;

历史命令存在.bash_history里面,最大1000条;

查看变量HISTSIZE条数,#echo $HISTSIZE

查看目前的历史命令内容,#history;

设置记录历史命令和所运行时间,#HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S";

清空内存历史命令,#history -c ;.bash_history不会被清空,上下键也没有了历史命令,

环境变量修改,#vi /etc/profile;修改后生效命令,#source /etc/profile;

只能追加命令,#chattr +a ~/.bash_history;

#!!表示上一条历史命令;

#!n表示执行第n条历史命令;

#!word表示执行以关键词word开头的历史命令;


8.3 命令补全和别名

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_sort_05

tab键补全,敲一下补全,敲两下显示以关键字开头的所有命令;

参数补全安装,#yum install -y bash-completion

别名设置,#alias restartnet='systemctl restart network.service'

列出所有别名,#alias

别名存在的目录,家目录/.bashrc 和 /etc/profile.d/


8.4 通配符

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_07

*表示通配,前后都可以,不分字符和字符数目;

?表示一个任意的字符;

【0-9】表示范围内,任意一个数字;【0123456789】范围内任意一个数字;

{1,2}表示范围内,任意一个数字,比【】里面数字多了逗号划分开;


8.5 输入输出重定向

输出重定向

>表示执行前面命令得到的内容输出到后面文件,会覆盖;正确

>>表示追加内容;正确

2>表示前面命令执行产生的错误信息输入到文件中;

2>>表示追加执行的错误信息;

&>表示错误和正确的信息都输入进去;

&>>表示追加错误和正确的信息;

command >1.txt 2>a.txt表示正确的写入1.txt,错误的写入a.txt;

输入重定向

wc -l 查看文本文档行数

wc -l < 1.txt表示将后边的1.txt输入到前面命令里面去;


8.6 管道符和作业控制

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_09

管道符|,前面命令的结果给到后面命令处理;

fg把任务调到前台;bg丢到后台并运行;

#vmstat 1不停的显示系统的状态

sleep 1000暂停1000秒


8.7/8.8 shell变量

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_11

PATH环境变量;

#env获取到系统变量,系统内置;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_13

#set查看系统及用户变量

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_15

有特殊符号的要用单引号;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_sort_17

全局变量,其他连接的用户也可以查看到这个变量;其他用户看不到;

#w查看当前主机连接的用户信息;

pstree命令安装,#yum install psmisc

全局变量设置b=2,命令为#export b=2

取消变量,#unset 变量名


8.9 环境变量配置文件

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_19

系统层次

/etc/profile

/etc/bashrc

用户层次

~/.bashrc

~/.bash_profile

~/.bash_history历史命令

~/.bash_logout定义用户退出时做的操作

#source ~/.bash_profile,加载使生效;

PS1,定义执行路径;#vi /etc/bashrc配置文件;


扩展

bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719

【故若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用!

简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html

关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environment-variables.html


8.10 shell特殊符号cut命令

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_21

c='$a$b',c就等于$a$b字符,也相当于c=\$a\$b

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_23

cut,截取字符串;-d指定分隔符;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_25


8.11 sort_wc_uniq命令

sort排序;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_27

特殊符号排在最前,然后数字,然后字母顺序

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_29

-n的话,字母表示为0;

wc -l统计行数,-m统计全部字符数(含隐藏字符);-w word单词;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_31

uniq去重复;#uniq 2.txt;

需要先排序,再去重,命令为#sort 2.txt | uniq -c

以上操作,不会更改文件内容,只是处理显示结果;


8.12 tee_tr_split命令

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_33

tee 表示>;

tee -a 表示追加>>;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_35

tr 'a' 'A'将a替换为A;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_cut_37

split切割,大文件切割成小文件,比如日志文件;

-b指定大小切割,默认B字节为单位,100M就以兆为单位;

-l指定行数切割;

切割并指定前缀#split -b 100k a.txt abc

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_39

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_cut_41

查看切割后的每个文件大小#du -sh x*

删除所有小文件#rm -f x*


8.13 shell特殊符号下

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_43

||表示或;&&表示与,命令都执行;

相关测验题目:http://ask.apelearn.com/question/5437

扩展

1. source exec 区别 http://alsww.blog.51cto.com/2001924/1113112

2. Linux特殊符号大全http://ask.apelearn.com/question/7720

3. sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975


九、正则


9.1 正则介绍_grep上

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_45

egrep是grep的扩展,具有所有grep功能;

grep是用来过滤关键词的;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_cut_47

-r遍历所有子目录

-v取反,意思是除了关键词所在行,其他行显示出来;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_cut_49


9.2 grep中

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_51

'【0-9】'表示从0到9任意一个数字;

'【^0-9】'表示非0到9任意数字;

'^#'表示以#开头的行;

^放到中括号里面'[^关键词]',表示非;

^放到关键词前面‘^关键词’表示以关键词开头;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_53


9.3 grep下

‘r.o’中,字符“.”表示任意一个字符;

‘r*o’中,字符“*”表示任意N个字符;

‘.*’表示所有字符;

\脱意字符;

{}花括号表示前面字符的重复范围;

‘o\{2\}’表示两个o;

grep -E相当于egrep;

grep 'o\{2\}' passwd相当于egrep  'o{2}' passwd或grep -E 'o{2}' passwd;

+表示前面字符的1次或多次出现;

?表示前面字符的0次或1次;'o?t'就表示t或ot;

|表示或者;

()表示一个组合字符串;

扩展

把一个目录下,过滤所有*.php文档中含有eval的行

grep -r --include="*.php" 'eval' /data/


9.4/9.5 sed

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_cut_55

sed也能够实现grep功能,没有颜色显示,强项为替换功能;

sed '/关键词/'p 文件名;p为print打印显示;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_57

sed匹配的行,重复一遍显示出来,如果不需要显示其他行,加-n;#sed -n '/root/'p test.txt;

同时,也支持"."    "*"     "+"   "[]" "{}";

直接打印指定的行,#sed -n '2'p test.txt;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_shell_59

‘2,5’表示2到5行;

‘1,$’表示1到最尾行,就是全部行打印出来;

sed不区分大小写,加I,#sed -n '/bus/'Ip test.txt

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_61

sed删除过期日志内容,不显示1到100行内容,加d,命令为#sed '1,100'd test.txt,并没有删除内容,真正删除需再加-i,命令为#sed -i '1,100'd test.txt;

d为delete删除;

将1到2行,内ot替换为to,g表示global全局替换,命令为#sed '1,2s/ot/to/g' test.txt;


9.6/9.7 awk

Linux学习笔记第八周七次课(4月3日)_tee_62Linux学习笔记第八周七次课(4月3日)_grep_02

支持分段,passwd文件内容,很有规律,冒号分段;按段匹配;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_tee_65

-F指定分割符,‘{print $1}’表示打印第一段;不会更改文件内容;

‘{print $0}’表示打印所有段;

#awk '{jprint $0}' test.txt也可以打印所有段,相当于cat;

‘{print $1,$3,$4}’表示打印第一,第三,第四段;中间加逗号;

‘{print $1“#”$3“#”$4}’表示打印第一,第三,第四段,中间以#分隔;

查找oo的行并列出来,awk “/oo/”test.txt ;

第一段匹配oo的列出来,awk -F ':' '$1 ~/oo/' test.txt;

包含root或user的指定段列出来,awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt;

显示包含root或user的行,#grep -E 'root | user' test.txt;#awk -F ':' '/root | user/ {print $0}' test.txt;

 ‘$3==0’表示第三段等于数字0的;

‘$3=="0"’表示第三段等于ASCII的0,字符0;

Linux学习笔记第八周七次课(4月3日)_grep_02Linux学习笔记第八周七次课(4月3日)_grep_67

<表示小于;&&表示与;||表示或;==表示等于;

~表示匹配;

'{OFS="#"}'表示显示时用#分隔段; 写在print及条件前面;

NR表示行号,NF表示段数;

打印前10行,#awk -F ':' 'NR<=10' test.txt;

扩展

把这里面的所有练习题做一下

http://www.apelearn.com/study_v2/chapter14.html