目录
一、树形目录结构
1.根目录
所有分区、目录、文件等的位置起点
整个树形目录结构中,使用一个独立的“/”表示根(/)相当于一个入口,文件的总入口,也是唯一入口
重点语句
vim /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
2.常见子目录及作用
/root | 系统管理员root的上级目录 |
/home | 普通用户的家目录的上级目录 |
/boot | 系统内核、启动文件 |
/dev | 设备文件(黄色)硬件文件 |
/etc | 配置文件(Windows的注册表),一般是文本文件 |
/bin | 所有用户可执行的命令,默认使用较多所有用户软连接文件 |
/sbin | 管理员可执行的管理命令 |
/user | 应用程序 |
/var | 日志文件等 |
/run | 运行的内存中的文件 |
/tmp | 临时文件 |
/lib | 动态库文件,类似于windows的dll文件 |
/proc | 存放映射系统文件 |
media | 可移动设备 |
mnt | 默认挂载点 |
opt | 第三方应用程序安装所在目录 |
二、查找命令
查看及检索文件——cat命令
作用:显示并连接文件内容
基本格式:cat [选项] 文件名...
常用选项:
-n:对所有输出的行数编号
-b:对于空白行不编号
-s:将所有的连续的多个空行替换为一个空行
举例:
直接展示文本内容:
查找一个文件
cat /etc/sysconfig/network-scripts/ifcfg-ens33
查找多个文件
cat /etc/sysconfig/network-scripts/ifcfg-ens33 空格 /proc/version
使用-n对所有输出行数标号
cat -n /etc/sysconfig/network-scripts/ifcfg-ens33
使用-b对于空白行不编号(先创一个文件,写点内容)
cat -b 11.txt
使用-s将所有的连续的多个空行替换为一个空行
cat -s 11.txt
分页查看文件内容——more命令
作用:全屏方式显示分页内容
基本格式:more [选项] 文件名...
交互操作方法:
按Enter键向下逐行滚动
按空格键向下翻一屏
按b键向上翻一屏
按q键退出
下翻到最后一页后会自动退出
结合管道操作使用时(例如: Is -R /etc | more)无法向上翻页
举例:
more 11.txt
Is -R /etc| more无法向上翻页,也不会出现进度条
分页查看文件内容——less命令
作用:与more命令相同,但是扩展功能更多
基本格式:less [选项] 文件名...
交互操作方法:
Page Up向上翻页,Page Down向下翻页
按 "/"键查找内容, "n”下一个内容,"N”上一个内容
通过 ↑ 和 ↓ 方向键可以实现上下逐行滚动
其他功能与more命令基本类似
下翻到最后一页后不会自动退出
结合管道操作使用时可以向上翻页
举例:
less 11.txt
Is -R /etc| less 可以向上翻页,不会出现进度条
查看开头部分内容——head命令
作用:查看文件开头一部分内容,默认10行
head -n 文件名 #n为行数
举例: head -5 11.txt
查看结尾部分内容——tail命令
作用:查看文件结尾一部分内容,默认10行
基本格式:
tail -n 文件名
tail -f 文件名 #跟踪文件尾部内容的动态更新
举例:
tail -5 11.txt
tail -5f /var/log/messages (日志更新时,展示的内容也会更新)
统计文件内容——wc命令
基本格式:wc [选项]...目标文件...
常用选项
- l:统计行数
- w:统计单词
- c:统计字节数
注:不带任何选项的wc命令,默认同时使用-Iwc三个选项.
示例:
wc -l 11.txt 行数
wc -w 11.txt 单词数
wc -c 11.txt 字节数
wc -lwc 11.txt
检索、过滤文件内容——grep
作用:在文件中查找并显示包含指定字符串的行
格式:grep [选项]... 查找条件 目标文件
常用命令选项:
- n:显示匹配行及行号
- i:查找时不区分大小写
- e:实现可多个查找条件的匹配,逻辑or(或)关系
- v:显示不包含匹配文本的所有行(反向查询,反向匹配)
- o:只匹配想要找的内容
- f:比较两个文件查找条件设置
要查找的字符串以双引号括起来
“^……”表示以什么开头,“……$”表示以什么结尾
“^$”表示空行
举例:
grep -n "a" test.txt 查找包含“a”的,显示出符号的行数
grep -i "a" test.txt 不区分大小写查询包含“a”的
grep -c "a" test.txt 显示符号匹配的行数
grep -v "a" test.txt 显示没有匹配“a”的,反过来查询
grep -vi "a" test.txt 组合查询,显示不包括大小写的“a”的
grep -e "a" -e “b” test.txt 查询包含“a”的或包含“b”的
grep -ie "a" -ie “b” test.txt 查询不区分大小写包含“a”的或包含“b”的
grep -i "^a" test.txt 不区分大小写查询以“a”开头的
grep -i "d$" test.txt 不区分大小写查询以“d”结尾的
grep -v "^$" test.txt 查看文本中不包含空行的,适用于多行文本
使用管道符号实现逻辑与功能:
grep -ni “^b” test.txt | grep -i "d$" 不区分大小写查找以b开头的并且以d结尾的
压缩解压缩命令——gzip、bzip2
作用:制作压缩文件和解压缩文件
特点:
当使用gzip压缩一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。-9是压缩等级
gzip制作的压缩文件默认的扩展名为".gz" 原始文件不再保留
bzip2制作的压缩文件默认的扩展名为“.bz2”,原始文件不再保留
基本格式:
gzip [-9] 文件名 #制作压缩文件
bzip2 [-9] 文件名 #制作压缩文件gzip -d .gz格式的压缩文件 #解开压缩文件
bzip2 -d .gz格式的压缩文件 #解开压缩文件
常用命令选项:
- 9:指令的值可为1 (压缩速度最快,最低的压缩质量)至9 (最慢的压缩速度,压缩率最高)之间的整数,其默认值为6 (压缩速度和压缩质量较为平衡的值)
- d:用于解压缩已经压缩过的文件,相当于使用gunzip、bunzip2命令
举例:
gzip -9 test1.txt gzip进行压缩
gzip -d test1.txt.gz gzip进行解压缩
bzip2 -9 test1.txt bzip2 进行压缩
bzip2 -d test1.txt.bz2 bzip2 进行解压缩
压缩解压缩命令 —— gunzip、bunzip2
gunzip命令:等价于gzip -d
格式:
gunzip abc.txt =====>gzip -d abc.txt
bunzip2命令:bzip2和bunzip2命令的用法与gzip和gunzip命令基本相同
gzip、bzip、gunzip、bunzip
特点:无法对文件夹压缩和解压缩
压缩后文件夹消失
-k 源文件可以保留
归档命令 —— tar
作用:制作和释放归档文档
基本格式:
tar [jcvf]... 归档文件名 源文件或目录
tar [jxvf]... 归档文件名 [-C 目标目录]
常用命令选项:
- c:创建 .tar格式的包文件;
- x:解开 .tar格式的包文件;
- C:解压时指定释放的目标文件夹;
- f:表示使用归档文件;
- p:打包时保留文件及目录的权限;
- P:打包时保留文件及目录的绝对路径;
- t:列表查看包内的文件;
- v:输出详细信息(Verbose );
- j:调用bzip2程序进行压缩或解压;
- z:调用gzip程序进行压缩或解压。
三、Linux文本三剑客
正则表达式(Regular Expression)
元字符:
. 任意单个字符
表示字符个数的元字符:
* 匹配其前面的字符任意次
如:a*b 则b,ab aab aaab都可以 但acb不可以
.* 任意长度的任意字符
\? 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<或\b锚定词首,其后面的任意字符必须作为单词的首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
分组:
\(\)
\(ab\)*
匹配ip地址
ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.)
{3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
grep 文本过滤器
grep 'pattern' input_file ...
grep:根据模式搜索文本,并将符合模式的文本行显示出来。
grep 【option】 pattern 【file】
option:
-i 忽略匹配字符的大小写
--color 将匹配的字符以高亮颜色标记出来
-v 显示没有被匹配的行
-E 使用扩展正则表达式
grep -A 2 ‘cord id’ /proc/cpuinfo
-C 前后行也会显示
grep -E = egrep
sed 流编辑器
sed :模式空间
默认不编辑原文件,仅对模式空间中的数据做处理,而后,处理结束后,将模式空间打印出来
用法:
sed [option] 'AddressCommand' file ...
option:
-n 静默模式,不显示默认空间的行
-i 直接修改原文件
-e SCRIPF -e SCRIPT 可以
Address:
1.StartLine,Endline
比如:1,100
$:最后一行
2./RegExp/
/^root/
3./pattern1/,/pattern2/
第一次被pattern1匹配的行开始,至第二次被pattern2匹配到的行.结束
4.LineNumber
指定的行
5.StartLine,+N
从startLine开始,向后的N行
Command:
d:删除符合条件的行;
p:显示符合条件的行
a\string :在指定的行后面追加新行,内容为string
\n 可以用于换行
i\string 在指定的行前面
r FILE 将指定的文件的内容添加至符合条件的行处
w FILE 将地址指定范围内的行另存至指定的文件中
s/pattern/string/ 修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符
g: 全局替换
i: 忽略字符大小写
s///: s###, s@@@
\(\), \1, \2
例如:
l..e: like-->liker
love-->lover
like-->Like
love-->Love
&: 引用模式匹配整个串
awk:报告生成器,格式化以后显示
AWK a.k.a. Aho, Kernighan and Weinberger
版本:
1、new awk: nawk
2、gawk, awk
语法:
# awk [options] 'script' file1 file2, ...
# awk [options] 'PATTERN { action }' file1 file2, ...
awk的输出:
一、print
print的使用格式:
print item1, item2, ...
要点:
1、各项目之间使用逗号隔开,而输出时则以空白字符分隔;
2、输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;
3、print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print "";
例子:
# awk 'BEGIN { print "line one\nline two\nline three" }'
awk -F: '{ print $1, $3 }' /etc/passwd
二、awk变量
2.1 awk内置变量之记录变量:
FS: field separator,读取文件本时,所使用字段分隔符;
RS: Record separator,输入文本信息所使用的换行符;
OFS: Output Filed Separator:输出域分隔符,默认是空格键
ORS:Output Row Separator:输出记录分隔符,默认是换行符
awk -F:
OFS="#"
FS=":"
2.2 awk内置变量之数据变量:
NR: The number of input records,awk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数;
NF:Number of Field,当前记录的域的个数;
FNR: 与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;浏览文件的记录数
ARGV: 数组,保存命令行本身这个字符串,如awk '{print $0}' a.txt b.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;
ARGC: awk命令的参数的个数;
FILENAME: awk命令所处理的文件的名称;
ENVIRON:当前shell环境变量及其值的关联数组;
如:awk 'BEGIN{print ENVIRON["PATH"]}'
2.3 用户自定义变量
gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写。
2.3.1 在脚本中赋值变量
在gawk中给变量赋值使用赋值语句进行,例如:
awk 'BEGIN{var="variable testing";print var}'
2.3.2 在命令行中使用赋值变量
gawk命令也可以在“脚本”外为变量赋值,并在脚本中进行引用。例如,上述的例子还可以改写为:
awk -v var="variable testing" 'BEGIN{print var}'
三、printf
printf命令的使用格式:
printf format, item1, item2, ...
要点:
1、其与print命令的最大不同是,printf需要指定format;
2、format用于指定后面的每个item的输出格式;
3、printf语句不会自动打印换行符;\n
format格式的指示符都以%开头,后跟一个字符;如下:
%c: 显示字符的ASCII码;
%d, %i:十进制整数;
%e, %E:科学计数法显示数值;
%f: 显示浮点数;
%g, %G: 以科学计数法的格式或浮点数的格式显示数值;
%s: 显示字符串;
%u: 无符号整数;
%%: 显示%自身;
修饰符:
N: 显示宽度;
-: 左对齐;
+:显示数值符号;
例子:
# awk -F: '{printf "%-15s %i\n",$1,$3}' /etc/passwd
四、输出重定向
print items > output-file
print items >> output-file
print items | command
特殊文件描述符:
/dev/stdin:标准输入
/dev/sdtout: 标准输出
/dev/stderr: 错误输出
/dev/fd/N: 某特定文件描述符,如/dev/stdin就相当于/dev/fd/0;
例子:
# awk -F: '{printf "%-15s %i\n",$1,$3 > "/dev/stderr" }' /etc/passwd
六、awk的操作符:
6.1 算术操作符:
-x: 负值
+x: 转换为数值;
x^y:
x**y: 次方
x*y: 乘法
x/y:除法
x+y:
x-y:
x%y:
6.2 字符串操作符:
只有一个,而且不用写出来,用于实现字符串连接;
6.3 赋值操作符:
=
+=
-=
*=
/=
%=
^=
**=
++
--
需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;
6.4 布尔值
awk中,任何非0值或非空字符串都为真,反之就为假;
6.5 比较操作符:
x < y True if x is less than y.
x <= y True if x is less than or equal to y.
x > y True if x is greater than y.
x >= y True if x is greater than or equal to y.
x == y True if x is equal to y.
x != y True if x is not equal to y.
x ~ y True if the string x matches the regexp denoted by y.
x !~ y True if the string x does not match the regexp denoted by y.
subscript in array True if the array array has an element with the subscript subscript.
6.7 表达式间的逻辑关系符:
&&
||
6.8 条件表达式:
selector?if-true-exp:if-false-exp
if selector; then
if-true-exp
else
if-false-exp
fi
a=3
b=4
a>b?a is max:b ia max
6.9 函数调用:
function_name (para1,para2)
七 awk的模式:
awk 'program' input-file1 input-file2 ...
其中的program为:
pattern { action }
pattern { action }
...
7.1 常见的模式类型:
1、Regexp: 正则表达式,格式为/regular expression/
2、expresssion: 表达式,其值非0或为非空字符时满足条件,如:$1 ~ /foo/ 或 $1 == "magedu",用运算符~(匹配)和!~(不匹配)。
3、Ranges: 指定的匹配范围,格式为pat1,pat2
4、BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次
5、Empty(空模式):匹配任意输入行;
7.2 常见的Action
1、Expressions:
2、Control statements
3、Compound statements
4、Input statements
5、Output statements
/正则表达式/:使用通配符的扩展集。
关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
模式匹配表达式:
模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
END:让用户在最后一条输入记录被读取之后发生的动作。
八 控制语句:
8.1 if-else
语法:if (condition) {then-body} else {[ else-body ]}
例子:
awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd
awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd
awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd
8.2 while
语法: while (condition){statement1; statment2; ...}
awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd
awk -F: '{i=1;while (i<=NF) { if (length($i)>=4) {print $i}; i++ }}' /etc/passwd
8.3 do-while
语法: do {statement1, statement2, ...} while (condition)
awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd
8.4 for
语法: for ( variable assignment; condition; iteration process) { statement1, statement2, ...}
awk -F: '{for(i=1;i<=3;i++) print $i}' /etc/passwd
awk -F: '{for(i=1;i<=NF;i++) { if (length($i)>=4) {print $i}}}' /etc/passwd
for循环还可以用来遍历数组元素:
语法: for (i in array) {statement1, statement2, ...}
awk -F: '$NF!~/^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n",A,BASH[A]}}' /etc/passwd
8.5 case
语法:switch (expression) { case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}
8.6 break 和 continue
常用于循环或case语句中
8.7 next
提前结束对本行文本的处理,并接着处理下一行;例如,下面的命令将显示其ID号为奇数的用户:
# awk -F: '{if($3%2==0) next;print $1,$3}' /etc/passwd
九 awk中使用数组
9.1 数组
array[index-expression]
index-expression可以使用任意字符串;需要注意的是,如果某数据组元素事先不存在,那么在引用其时,awk会自动创建此元素并初始化为空串;因此,要判断某数据组中是否存在某元素,需要使用index in array的方式。
要遍历数组中的每一个元素,需要使用如下的特殊结构:
for (var in array) { statement1, ... }
其中,var用于引用数组下标,而不是元素值;
例子:
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
每出现一被/^tcp/模式匹配到的行,数组S[$NF]就加1,NF为当前匹配到的行的最后一个字段,此处用其值做为数组S的元素索引;
awk '{counts[$1]++}; END {for(url in counts) print counts[url], url}' /var/log/httpd/access_log
用法与上一个例子相同,用于统计某日志文件中IP地的访问量
9.2 删除数组变量
从关系数组中删除数组索引需要使用delete命令。使用格式为:
delete array[index]
十、awk的内置函数
split(string, array [, fieldsep [, seps ] ])
功能:将string表示的字符串以fieldsep为分隔符进行分隔,并将分隔后的结果保存至array为名的数组中;数组下标为从0开始的序列;
netstat -ant | awk '/:80\>/{split($5,clients,":");IP[clients[1]]++}END{for(i in IP){print IP[i],i}}' | sort -rn | head -50
length([string])
功能:返回string字符串中字符的个数;
substr(string, start [, length])
功能:取string字符串中的子串,从start开始,取length个;start从1开始计数;
system(command)
功能:执行系统command并将结果返回至awk命令
其他文本查看工具
查看文本(cat;more;less;head;tail)
* cat:把文本中所有内容显示到屏幕中(从首行到尾行) tac:(从尾行到首行显示)
[选项] [文件]..| 一次显示整个文件或从键盘创建一个文件或将几个文件合并成一个文件
-n 在文本每行前加编号
shift+pgup/pgdn(向上或向下翻屏)
* more:显示文本内容(空格键:向后翻一屏 b:向前翻一屏 回车键:向后走一行)
+n 从第n行开始显示
-n 每次查看n行数据
+/String 搜寻String字符串位置,从其前两行开始查看
-c 清屏再显示
-p 换页时清屏
* less:(较常用)
-m 显示类似于more命令的百分比
-N 显示行号
/ 字符串:向下搜索“字符串”的功能
? 字符串:向上搜索“字符串”的功能
n 重复前一个搜索(与 / 或 ? 有关)
N 反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
* head:查看前n行(不加n默认是10行)
-v 显示文件名
-c number 显示前number个字符,若number为负数,则显示除最后number个字符的所有内容
-number/n (+)number 显示前number行内容,
-n number 若number为负数,则显示除最后number行数据的所有内容* tail:查看后n行
tail [必要参数] [选择参数] [文件] | 显示文件结尾内容
tail -f :查看文件尾部,不退出,等待显示后续追加至此文件的新内容(当一个终端对文件进行改变时,另一个终端可同步看到)
-v 显示详细的处理信息
-q 不显示处理信息
-num/-n (-)num 显示最后num行内容
-n +num 从第num行开始显示后面的数据
-c 显示最后c个字符
-f 循环读取
文本处理(cut;sort;uniq)
* cut:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
* sort:文本排序(只是影响文本显示排序,并不改变文本原来的排序)(按ascll表排序)
-n 按数值排序
-r 逆序排序
-t:指定字段分隔符
-k:以哪个字段为关键进行排序
-u:排序后相同的行只显示一次
-f:忽略字符大小写
-o<输出文件> 将排序后的结果存入指定的文件。
* uniq:略过相邻重复的行
-d:只显示重复的行
-D:显示所有重复的行
-c:显示文件中重复的次数
文本统计命令(wc)
* wc:显示文件数目
-l 统计行数
-w 统计单词数
-m 统计字节数
-L 统计最长一行包含多少个字节数
字符处理命令 tr
* tr:转换或删除字符
例如:tr ‘abc’ ‘ABC’ </etc/passwd 把passwd文件中所有小写abc的字符换成大写ABC
-d:删除出现在字符集中的所有字符