1.什么是Linux Shell
Linux Shell是用户和Linux内核之间的接口程序,为用户提供使用操作系统的借口。当Shell向Linux传递命令时,内核会做出响应的反应。
Shell是一个用户程序,或是一个为用户和系统交互提供的环境。
它是一个执行从标准输入设备读入的命令的语言解释程序,他拥有自己內建的Shell命令集,Shell也能被系统中的其他命令所调用。
当登陆或打开控制台时Shell就会运行。
Shell不是系统内核的一部分,但是他可以使用内核系统执行命令、创建文件等。
Linux Shell自身就是一个解释性的程序设计语言。
可以使用如下按键组合来编辑和回调命令:
CTAL+W :删除光标位置前的单词。
CTAL+U :清空行
CTAL+R :搜索先前使用的命令。
CTAL+C :终止当前的命令。
CTAL+D :退出登陆shell。
ESC+T :调换光标前的两个单词。
Tab :自动补全文件名、目录名和命令名。
上下键:查看命令历史
定制自己的Bash登陆脚本
vim /etc/vimrc
```shell
"map <F9> ms:call WESTOS()<cr>'s
autocmd BufNewFile *.sh exec ":call WESTOS()" ##新的以.sh结尾的文件为shell的脚本文件
function WESTOS()
call append(0,"#################################################")
call append(1,"#Aythor: lee #")
call append(2,"# CreateTime:".strftime("%Y-%m-%d %H:%M:%S").("#"))
call append(3,"#Version: 1.0 #")
call append(4,"#Mail: lee@westos.org #")
call append(5,"#Description: #")
call append(6,"# #")
call append(7,"#################################################")
call append(8," ")
call append(9,"#!/bin/bash")
endfunction
```
vim hello.sh
脚本的调式
sh -x hello.sh
必须有X权限
cut命令的使用
被用于文本处理,可以用这个命令来提取文件中指定的列或者指定的字符的内容。
cut -d 指定分隔符
cut -f 1.7|1-7 指定截取的列
cut -c 指定借取的字符
diff命令
用来比较两个文件或目录的不同
diff 【options】 target1 target2
比较的结果读取方式
【num1,num2】【a|c|d】【num3,num4】
num1,num2表示在第一个文件中的行数
a表示添加
c表示更改
d表示删除
表示在第一个文件的第二行后添加linux才能匹配第二个文件的三行
删除第一个文件的第三行的linux才能匹配第二个文件的两行
diff中常用的参数
-b 或 ignore-space-change 不检查空个字符的不同
-B 或 --ignore-blank-lines 不检查空白行的不同
-c 显示全部内文,并标出不同之处
-i 或 --ignore-case 不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
补丁patch
下载patch yum install patch
将两个文件的不同放到补丁文件中
然后用patch将补丁文件打入原文件进行修改
grep命令的使用
全面搜索研究正则表达式并显示出来grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行由正则表达式或者字符及基本文本字符所编写的过滤条件。
grep 的格式
grep 匹配条件 处理文件
grep root passwd ##过滤passwd文件中含有root的信息
grep ^root passwd ##过滤以roo开头的信息
grep root$ passwd ##过滤以root结尾的信息
\< 关键字 不匹配开头
关键字 \> 不匹配结尾
\< 关键字 \> 只匹配关键字
grep -i 强制grep命令忽略关键字的大小写
-r/R 可以递归搜索指定目录下的文件
-w 默认情况下当搜索字符,grep命令也会匹配含有关键字的所有字符,使用-w选项,则强制匹配关键字的行
-c 可以报告文件或文本中模式被匹配的次数
-n 可以显示每一个匹配行的行号
-v 可以输出除匹配行以外的其他所有行
--color 输出中将匹配的字符串以彩色形式输出
grep 中字符的匹配次数设定
* 字符出现【0-任意次】
\? 字符出现【0-1次】
\+ 字符出现 【1-任意次】
\{n\} 字符出现【n次】
|{m,n\} 字符出现【最少出现 m 次,最多出现 n 次】
\{0,n\} 字符出现 [0-n 次 ]
\{m,\} 字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy 关键字出现 [n 次 ]
.* 关键字之间匹配任意字符
sed 行编译器
stream editor用来操作纯 ASCII 码的文本处理时 , 把当 前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行sed 符合模式条件的处理 不符合条件的不予处理处理完成之后把缓冲区的内容送往屏幕接着处理下一行 , 这样不断重复 , 直到文件末尾.
sed一次处理一行输入的优点时在读取非常庞大的文件时不会出现问题。一般的文件编辑器必须将整个文件读入内存,这将会产生内存溢出或者在处理庞大的文件系统是速度非常慢。它的优势在于你可以在一处(一个sed脚本中)指定所有的编辑命令,然后逐条执行他们.
常用选项
-e——他告诉sed将下一条参数解释为sed指令,只有在命令行给出多个sed指令时才需要使用-e
-f——指定由sed指令组成的脚本的名称,如果sed脚本的第一行为“#n”,则sed的行为与-n选项相同。
-i——直接修改读取内容,而不是输出到终端
-n——取消默认输出如果使用-n参数后,只有经过sed处理的行才会被显示。
p显示 模式操作
sed -n '/\:/p' /etc/fstab ##只显示fstab文件中含有“:” 的行
sed -n ‘/UUID$/p’ /etc/fstab ##只显示以UUID结尾的行
sed -n ‘2~6p’ /etc/fstab ##显示2~6行的内容
sed -n ‘2~6!p’ /etc/fstab ##显示除2~6行以外的内容
=显示在第几行
##d 删除模式操作
##a追加
##i插入
如果之追加不插入则只改变输出终端
a,i不影响模式空间的内容,提供的文本将不匹配脚本中后续命令i的任何地址
##c更改
可以处理一个范围内的行。他用一个文本备份取代所有被寻地址的行,但提供的文本植被输入一次。。它会清楚模式空间,他在模式空间内与删除命令有同样的效果i,所以在sed脚本中,变更命令被放在最后。
##s替换
n——1~512之间的数字,表示对文本模式pattern中指定模式第n次出现的情况进行替换
g——对模式空间的所有出现的情况进行全局更改,如果没有g时通常只有第一次出现的情况被更改
p——打印模式空间的内容
w——将空间模式的内容写入到文件file中
& 作为元字符,“&”符号表示模式匹配的范围,不是被匹配的行,可以使用‘&’符号匹配一个单词或一串字符
\n——匹配第n个子字符,这个子字符是先前在模式中使用的“\"指定的
\——用于转义符号“&”“\”等字符。它还可以用于转义换行符cut
test命令
Shell脚本可以使用逻辑,使用脚本可以根据参数、Shell变量或是其他条件的值采取不同的行动。test命令允许你做各种测试每当测试成功或失败时设置他的退出状态码为0或1.
test命令用于
文本属性测试、字符串测试、算术测试
-e <file> 如果file存在则为真
-f 存在且是一个常规文件为真
-d 存在是一个目录为真
-c 存在且是一个则特殊字符文件为真
-b 存在且是一个特色块文件为真
-p 存在且是一个命名管道为真
-S 存在且是一个套接字文件为真
-L /-h 存在且是一个符号连接则为真
-g 存在且是设置了sgid位则为真
-u 存在且时设置了suid位则为真
-r/-w/-x 存在且是可读可写可执行的则为真
-s 存在且不为空的文件则为真
<File1> -nt <File2> 如果1比2新则为真
-ot 1比2旧则为真
-ef 1有硬链接到2则为真
字符串测试的操作符
-z <STRING> 如果<STRING>为空则为真
-n <STRING> 如果<STRING>不为空则为真
<STRING1> = <STRING2> 如果相同则为真
<STRING1> != <STRING2> 如果不相同则为真
<STRING1> < <STRING2> 如果1排在2之前则为真(ASCII码)
<STRING1> > <STRING2> 如果1排在2之后则为真(ASCII码)
算术测试的操作符
<INTEGER1> [操作符]<INTEGER2>
-eq 相等则为真
-ne 不相等则为真
-le 小于等于则为真
-ge 大于等于则为真
-lt 小于则为真
-gt 大于则为真
sort名令
sort命令用于对文本文件的行进行排序,也可以通过管道符对其他命令的输出进行排序
多用于字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列
uniq
对重复字符做相应的处理
uniq -u显示唯一的行
uniq -d显示重复的行
uniq -c每行显示一次并统计重复次数
awk命令的用法
awk是被设计用于文本处理,并通常被用作数据提取和报告工具的解释性程序设计语言。
运行awk的方式有两种
awk 【OPTIND】【--】 program-text file
{ } 用于将代码块集和在一起
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果
awk '{print $0}' 变量$0表示当前的一整行
要是将参数改为固定的字符串如{print "hello"} 你的文集那有多少行,就会打印多少hello
使用awk打印指定的列
如 awk '{print $1}'
不指定分隔符的情况下默认空格作为分隔符
-F 用来指定分隔符;$1表示第一列字符
awk基本用法
awk '{print 第NR行,NF列}'
awk '/bash$/' 打印以bash结尾的行
awk -F : '/bash$/{print $1}' 打印以bash结尾的行的以:为分隔符的第一列
awk 的表达式和块
可以把任意类型的表达式放在代码块之前来控制特定的块什么时候执行,只有当表达式为真时,awk才会执行此代码块
比如输出文件/etc/passwd 文件中第一列等于root的所有行的第三列
&& 和 ||
&& 用来执行条件成立后执行的命令
|| 用来执行条件不成立后执行的命令
抓取eth0网卡的ip