目录
1 linux相关介绍
早期程序安装:使用源码包编译安装
缺点:难度极高、自主解决依赖关系
依赖关系:
RPM(红帽软件包管理器)本质:源码包程序及安装规则,根据安装规则来安装源码包
个人理解:将一个大软件分为几个部分,每个部分是一个程序,例如:QQ主程序、QQ群视频功能、收费模块,需要自己解决依赖关系
Yum:软件仓库,可以根据使用者的需求来自动的安装程序,并且自动建立依赖关系。
初始化进程:从通电开始到开机画面出现的期间,对电脑进行初始化操作
控制硬件最基本的程序叫内核
Api调用接口
很多的api构成了服务程序
SHELL(壳):用于控制终端的系统
Shell的作用是:让用户与硬件沟通的翻译
Shell是统称,不是单独的程序
Shell当中包含的有:BASH(最常用)、SH、ZSH、CSH
可以把shell比作是职业,bash等比作人
在Linux当中完成一项工作敲的是linux命令,但是为了要更贴合当前的工作需要,需要增加参数
Linux命令 参数(可没有) 对象(可没有)
举例:ls -al /data/test.txt
参数分为:短格式:一个字母,长格式:一个单词
Linux命令与参数之间要有空格做间隔,参数之间的合并,只有短格式与短格式之间可以合并。
参数合并时只保留第一个参数的-即可,后面的参数直接跟在第一个后面,不需要空格
/dev/null是一个被称作linux黑洞的文件,把输出信息重定向到这个文件等于删除数据(类似于没有回收功能的垃圾箱)。用法 执行命令 &> /dev/null
在对变量赋值的时候使用变量名=“具体要赋予的值”,也可以使用变量名=$(要赋予的值)
2 常用命令
说明:Linux操作命令区分大小写
2.1 系统命令
2.1.1 man 命令
描述:查看命令的帮助文档
格式:man 要查询的命令
# 例 查看ls命令的用法
man ls
# 输出内容
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabeti‐
cally if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print C-style escapes for nongraphic characters
--block-size=SIZE
with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format
below
-B, --ignore-backups
do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last modification of file status informa‐
tion); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first
2.1.2 查看内核信息
使用:cat /etc/issue查询参数 根据需要执行 uname -(前一步查询到的参数)
2.1.3 echo命令
描述:输出命令,将需要输出的信息输出到屏幕上
格式:echo [参数] 字符串
参数:
-n: 不要在最后自动换行
-e:若字符串中出现以下转义字符,则特别处理,不会将其当做一般文字输出
转义字符 | 描述 |
---|---|
\ | 反斜杠进行转义 |
\a | 报警音 |
\b | 退格键 删除前一个字符 |
\c | 字符串后不加换行符 |
\f | 换行但光标仍旧停留在原来的位置 |
\n | 换行且光标移动至行首 |
\r | 光标移动至首行,但不换行 |
\t | 插入tab |
\v | 与\f相同 |
# 例 发出报警提示音,同时将输入的内容居中展示,并且不换行
echo -e -n "\a\thello world"
2.1.3.1 设置字符输出的颜色
格式:echo -e “\033[字体颜色及格式m字符串\033[0m”
说明:\033[0m:只变换该参数前面的字符串的颜色及格式,若不加该参数,则会使得其后面的文本输出都发生变换,连命令提示符都会变
若字符串需要有多种变化比如:字体颜色,背景颜色等 在每个编码后用分号间隔
# 例 将字符串已黄色并且闪烁的形式输出到终端
echo -e "\033[33;5mhello shell!\033[0m"
2.1.4 服务管理
Rhle 7 Systemd:接管了系统当中的很多命令,只能在linux系统下使用这个功能,速度更快一些,从7之后都会使用systemd
Systemctl 管理服务的格式
Systemctl start 服务名称:启动
Systemctl restart 服务名称:重启
Systemctl stop 服务名称:停止
Systemctl status 服务名称:查看
Systemctl enable 服务名称:开机启动
systemctl is-enabled 服务名称:检查服务是否是开机启动
Systemctl disable 服务名称:取消开机启动
2.1.5 日期时间
显示日期时间:date
日期格式化输出:
方式一:date “+%Y-%m-%d %H:%M:%S”
方式 二:date '+%F %T'
永久变更系统时间:hwclock --set --date '2017-08-31 16:56:00'
2.1.6 关机
关机:poweroff
重启:reboot
2.1.7 ps命令
描述 :命令用于显示当前进程的状态,类似于 windows 的任务管理器
说明:ps命令一般与grep命令连用
格式:ps [参数]
参数 | 描述 |
---|---|
-ef | 使用标准格式显示每个进程 |
-a | 列出所有的进程 |
-w | 显示加宽 可以显示较多的资讯 |
-au | 显示较详细的资讯 |
-aux | 显示所有包含其他使用者的进程 |
ps查看信息后的状态
状态标识 | 状态描述 |
---|---|
R(运行) | 进程正在运行 |
S(中断) | 进程处于休眠中 |
D(不可中断) | 进程不响应系统异步信号,不能将其中断 |
Z(僵死) | 进程已经终止,但是进程描述符依然存在 |
T(停止) | 进程收到信号后停止运行 |
2.1.7.1 查询某个进程的运行时间
格式:ps -p 进程id -o lstart
2.1.8 pidof命令
描述:用于查找指定名称进程的进程号,每个进程的pid值是唯一的
格式:pidof 进程名称
# 例 查看nginx的进程号
pidof nginx
2.1.9 kill命令
描述:杀死或停止某个指定pid的服务进程
格式:kill -9 进程id
说明:使用kill命令时,必须指定要杀死进程的pid值,不能使用进程名称,此时pkill、killall 则可以使用进程名称停止进程,其中killall表示终止某个服务的全部进程
pkill格式:pkill 进程名称
killall格式: killall 进程名称
# 扩展 以root身份踢掉某个正在登录系统的用户
pkill -kill -t 所踢用户的tty
2.1.10 uname命令
描述:显示系统信息
格式:uname [参数]
参数 | 描述 |
---|---|
-a | 显示全部的信息 |
-m | 显示电脑类型 |
-n | 显示主机名称,等同于hostname |
-r | 显示操作系统的发行编号 |
-s | 显示操作系统名称 |
2.1.11 partprobe命令
刷新当前系统状态
2.2 状态检测命令
2.2.1 网卡查看命令
格式:ifconfig | ip addr
配置网卡方式:
1、ip a add ip地址/掩码 dev 网卡名称:网卡添加地址 (该方式为临时添加 重启网卡后失效)
2、常规方式进入网卡配置文件中添加(地址永久生效)
2.2.2 ping命令
格式:ping -c num -i num -W num ip地址
说明:linux下的ping命令不同于在window下,不增加参数时会像windows下增加-t参数一样一直处于ping当中
参数 | 描述 |
---|---|
-c | ping地址的次数 |
-i | 每次ping的间隔时间 |
-W | 允许最大的超时时间 |
2.2.3 top命令
描述:用于实时显示 进程 的动态
格式:top [参数]
参数 | 描述 |
---|---|
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内 |
2.2.3.1 top命令回显的信息含义
字段 | 描述 |
---|---|
up | 开机时间 |
users | 终端个数 |
load average | 系统负载,最小是0 不超过1 分别代表最近1分钟、5分钟、15分钟负载压力值;如果出现5,则代表服务器出现了问题,只显示该条信息可使用命令:uptime |
Tasks | 总进程数 |
runningl | 正在运行的进程 |
sleeping | 休眠状态中的进程 |
stopped | 停止进程 |
zombie | 僵死进程,如果这里面有数量有问题,脱离了用户控制的进程,会一直占用系统的资源 |
%cpu(s): | cpu使用率,us:正在使用率,id:cpu空闲比 |
KIBMem: | 物理内存 |
KIB total | 总物理内存, |
KIB used | 使用内存 |
KIB free | 空闲内存 |
KIB Swap: | 交换分区 当物理内存不够的情况下才会使用交换分区(类似于虚拟内存) |
Pid | 进程的id号 |
PR NI | 代表优先级:数字越低,优先级越高 |
2.2.4 free命令
描述:用来查看内存的使用情况
格式:free [参数]
参数 | 描述 |
---|---|
-h | 已合适的单位显示内存的使用情况,自动计算对应的单位 |
-b | 已byte为单位显示内存的使用情况 |
-k | 已kb为单位显示内存的使用情况 |
-m | 已MB为单位显示内存的使用情况 |
-g | 已GB为单位显示内存的使用情况 |
-s<间隔时间> | 已间隔时间为周期,持续观察内存使用情况 |
# 例 查看内存的使用情况,间隔2秒刷新
free -h -s 2
2.2.5 who命令
描述:命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等
格式:who [参数]
参数 | 描述 |
---|---|
-H | 显示标题 |
-q | 只显示登入系统的账号名称和总人数 |
2.2.6 last命令
描述:用于显示用户最近登录信息
说明:由于last展示的信息可以被篡改,所以只作为参考,不能用于黑客攻击时的排查手段
登录记录存放位置:/var/log/messages
格式:last [参数]
参数 | 描述 |
---|---|
-R | 不显示hostname 列 |
-i | 显示ip地址 |
-n [数字] 或 -[数字] | 显示几行 |
-a | 在最后一列显示主机名 |
2.2.7 history命令
描述:显示历史执行过的命令
说明:默认情况下能够存储1000条历史记录,若需更改,可更改profile环境变量文件
格式:history [参数]
参数 | 描述 |
---|---|
-c | 清除所有的命令记录 |
!history[查看的数字]或![要执行的数字]:直接运行对应数字的命令
2.2.8 sosreport命令
描述:用于收集系统配置及架构信息并输出诊断文档
格式:sosreport
2.3 目录切换查看命令
2.3.1 pwd命令
描述:显示用户当前所在的工作
格式:pwd
2.3.2 cd命令
描述:切换工作路径
格式:cd [符号] [准备切换的路径]
符号含义:
符号 | 描述 |
---|---|
– | 返回上一个目录,与前一个目录相互切换 |
~ | 返回到家目录 |
/ | 返回到根目录 |
.. | 返回到上级目录 |
2.3.3 ls命令
描述:显示目录下正常的文件信息
格式:ls [参数] [要查看的文件所在路径] [文件]
参数 | 描述 |
---|---|
-a | 显示目录下所有的文件,包括隐藏文件,隐藏文件前面有“.” |
-al | 显示目录下所有的文件详细信息,包括隐藏文件 |
-l | 显示目录下的详细信息,不包括隐藏文件 |
2.3.4 nl命令
描述:以行号的方式显示文本内容
格式:nl 文件名称
2.4 文件操作命令
2.4.1 tee命令
作用:读取标准输入的数据,并将其内容输出成文件
说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存文件,该命令为交互方式输入,若想直接查看结果,则需要与echo 联合使用
格式:tee [参数] 文件名称
echo交互格式:echo "字符串" | tee 文件名称
参数 | 描述 |
---|---|
-a | 附加到既有文件的后面,追加模式 |
-i | 忽略终端信号 |
--version | 显示版本信息 |
# 例 将字符串“这是一条测试消息”输入到文件test1、test2中
echo "这是一条测试消息"|tee -a test1 test2
2.4.2 查看命令
2.4.2.1 cat命令
描述:查看小文件的详细信息
说明:文件的信息一个屏幕上能展示出来的,是小文件
格式:cat [参数] [文件名称]
参数 | 描述 |
---|---|
-n | 查看文件时显示文件行号 |
2.4.2.2 more命令
描述:文件的信息一个屏幕上不够展示出来的,是大文件
格式:more [选项] [文件名称]
2.4.2.3 head命令
描述:查看文本文件的前n行
格式:head -[num] 文件名称
参数 | 描述 |
---|---|
-n num | 查看文本文件的前n行 |
2.4.2.4 tail命令
描述:从后查看文档的行数
格式:tail [参数] 文本文档
参数 | 描述 |
---|---|
-n [num] | 查看文档的后几行 |
-f | 实时刷新文档最新一行的数据,用于查看日志 |
2.4.3 tr命令
描述:用于替换文本文件中的字符(说明:该方式只能与查看命令联合使用,并且若替换后的字符不二次重定向到指定文本,则原本要替换文本中的字符不会有变化,也就是说,只是输出时替换,并不替换实际的内容)
格式:more || cat 文本文档 | tr 原始字符 替换字符
# 例 将file中的123替换成234,输出到标准设备
cat file | tr 123 234
# 输出结果
234
hahah
# 例 将file文件中的小写字母转换成大写字母,输出到标准设备
cat file | tr [:lower:] [:upper:]
# 输出结果
123
HAHAH
2.4.4 sed命令
描述:sed是一个行编辑器,主要功能是替换、删除、打印和追加数据(实际使用时,已替换居多),使用该方式操作的数据可直接修改文本文档的内容
格式:sed [参数] '命令 输入内容 标志' [文件]
替换源文件格式: sed [参数] 's/目标字符/替换字符/g' 文本文档
扩展:可以在内部命令前增加匹配模式对指定行的内容进行处理,使用匹配模式的方式:'/要匹配的字段/'
说明:标志是对命令的补充
参数 | 描述 |
---|---|
-e script | 一次处理多条命令 |
-f script | 将文本中指定的命令添加到处理输入时执行的命令中 |
-n | 抑制内存输出 |
-i | 编辑文件内容 |
-i.xxx | 修改时同时创建.xxx备份文件 |
-r | 使用正则表达式 |
! | 取反(跟在模式条件后与shell有所区别) |
内部命令 | 描述 |
---|---|
a | 在匹配的后面添加 |
i | 在匹配的前面添加 |
p | 打印 |
d | 删除 |
s/ 查找/替换/ | 查找替换(只替换第一次匹配到的内容) |
c | 更改 |
y | 转换 N D P |
标志 | 描述 |
---|---|
数字 | 表示新文本替换的模式 |
g | 表示用新文本替换现有文本的全部实例,即匹配到的字符全部进行替换 |
p | 表示打印原始的内容 |
w filename | 将替换的结果写入到另一个文件中 |
# 例1(不改变源文件) 在每行的后面添加一句话
sed 'a\hello world' file
# 输出结果
1 this is test
hello world
2 this is test
hello world
3 this is test
hello world
# 例2(不改变源文件) 使用匹配将匹配到的行后面增加一句话
sed '/3 this/a\hello world'
# 输出结果
1 this is test
2 this is test
3 this is test
hello world
# 例3(不改变源文件) 将2-4行后面增加一句话
sed '2,4a\hello world'
# 输出结果
1 this is test
2 this is test
hello world
3 this is test
hello world
4 this is test
hello world
5 this is test
# 例4(不改变源文件) 将匹配的位置信息进行更改
sed '/3 this/s/test/TEST/' file
# 输出结果
1 this is test
2 this is test
3 this is TEST
4 this is test
5 this is test
# 例5(不改变源文件) 使用正则表达式删除#或空行
sed -r '/(#|^$)/d' nginx.conf
# 输出结果
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
client_max_body_size 20m;
sendfile on;
keepalive_timeout 65;
# 例6(不改变源文件) 将文本中出现的字符替换成给定的字符
sed 'y/abcdefg/AHIKLJH/' file
# 输出结果
1 this is tJst
2 this is tJst
3 this is tJst
4 this is tJst
5 this is tJst
# 例7(不改变源文件) 将文本中的test替换成TEST,文本中的this替换成THIS
sed -e 's/this/THIS/g;s/test/TEST/g' file
# 输出结果
1 THIS is TEST
2 THIS is TEST
3 THIS is TEST
4 THIS is TEST
5 THIS is TEST
# 例8(不改变源文件)将命令写入到文本order中,通过sed执行
# order文本中的内容
s/THIS/this/g
s/TEST/test/g
# 执行sed
sed -f order file
# 输出结果
1 this is test
2 this is test
3 this is test
4 this is test
5 this is test
# 例9(改变源文件) 将文本testfile中的567替换成hello world
sed -i 's/567/hello world/g' testfile
2.4.5 wc命令
描述:用于统计指定文本的行数、字数、字节数
格式:wc [参数] 文本
参数 | 描述 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
# 例 查看txt文本当中共有多少行、多少个单词、多少个字节
wc -lcw test.txt
# 输出结果 2行 3个单词 18个字节
2 3 18 testfile.txt
# txt内容
[root@test06 test_order]# more testfile.txt
hello world
hahah
2.4.6 stat命令
描述: 查看文件的时间和具体存储信息
格式:stat “文件名称”
说明:
access (访问时间)最后一次访问时间
modify (修改时间)最后一次修改文件内容的时间
change (更改时间) 最后一次更改文件的名称、属性、权限的时间,不是更改文件内容
2.4.7 cut命令
描述:用于按列提取文本字符
格式:cut [参数] 文件名称
参数 | 描述 |
---|---|
-f | 设置要看的列数 |
-d | 用来设置间隔符 |
# 例 查看passwd文件中的第一列,以“:”为分隔符
cut –d : -f 1 /etc/passwd
2.4.8 diff命令
描述:比对文件的差异
格式:diff [参数] 文件名称1 文件名称2
参数 | 描述 |
---|---|
--brief | 只在文件不同时输出提示 |
-c | 两个文件的具体不同之处 |
-y | 已并列的方式显示文件的不同之处 |
# 例 比对两个文件是否不同
[root@test06 test_order]# diff --brief *
Files testfile2.txt and testfile.txt differ
# 例 显示两个文本具体的不同之处
[root@test06 test_order]# diff -c *
*** testfile1.txt 2021-11-01 09:45:09.869119523 +0800
--- testfile2.txt 2021-11-01 09:40:48.753105799 +0800
***************
*** 2,5 ****
hahah
test
test2
- this is a test txt
--- 2,4 ----
# 例 已并列的方式显示文本的不同之处
[root@test06 test_order]# diff -y *
hello world hello world
hahah hahah
test test
test2 test2
this is a test txt <
2.4.9 read命令
描述:接收键盘的输入,回车代表结束
说明:read也可以与echo联合使用,格式化输入
格式:read [ 参数 ] [提示字符串] 变量名称
参数 | 描述 |
---|---|
-p | 增加提示语句,维护提示字符串当中的信息 |
-n | 输入字符个数 |
-t | 限定输入的时间 |
-s | 不回显 |
# 例1 键入商品的价格并保存为变量
read -p “请输入商品价格:” PRICE
# 例2 输入密码时不显示输入的字符,字符的长度限制为8个字符,输入时间限制为30s
echo "Password:";read -s -n 8 -t 30;echo
2.4.10 Stdin 作用
作用:把管道符前输入的内容传递到文件当中去
# 例 建立密码
echo "密码信息" |password --stdin 用户名
2.4.11 mail命令
描述:发送邮件给指定的用户(目前经过测试,只是相当于给登录系统的其他用户发送消息,跟真实的邮件发送不一样)
格式:mail [用户名称] 发送邮件到 哪个用户
编辑邮件后,点击单个句号“.”结束邮件编辑并发送
# 扩展用法:使用管道符发送邮件
echo "邮件内容" | mail -s "邮件标题" 接收用户名称
2.4.12 sort命令
描述:用于将文本文件内容加以排序,sort可针对文本文件的内容,以 行 为单位来排序
排序规则:默认的排序规则为字符集排序规则,通常几种常见字符的顺序为:"空字符串<空白字符<数值<a<A<b<B<...<z<Z",字典排序规则也如此。
说明:
1、可与管道符结合使用
格式:sort [参数] 文件
参数 | 描述 |
---|---|
-c | 检测给定的文件是否已经已经排序。如未排序,则会输出诊断信息,提示从哪一行开始乱序 |
-C | 类似于"-c",只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序 |
-m | 对给定的多个已排序文件进行合并。在合并过程中不做任何排序动作。 |
-b | 忽略每行前面开始出的空格字符,"-n"选项隐含该选项。 |
-d | 排序时,处理英文字母、数字及空格字符外,忽略其他的字符 |
--debug | 将显示排序的过程以及每次排序所使用的字段、字符。同时还会在最前几行显示额外的信息 |
-f | 1、将所有小写字母当成大写字母。例如,"b"和"B"是相同的。 2、在和"-u"选项一起使用时,如果排序字段的比较结果相等,则丢弃小写字母行。 |
-k | 指定要排序的key,key由字段组成。key格式为"POS1[,POS2]",POS1为key起始位置,POS2为key结束位置。 |
-n | 1、按数值排序。空字符串""或"\0"被当作空。该选项除了能识别负号"-",其他所有非数字字符都不识别。 2、当按数值排序时,遇到不识别的字符时将立即结束该key的排序。 |
-M | 按字符串格式的月份排序。会自动转换成大写,并取缩写值。规则:unknown<JAN<FEB<...<NOV<DEC。 |
-o | 将结果输出到指定文件中 |
-r | 1、默认是升序排序,使用该选项将得到降序排序的结果。 2、注意:"-r"不参与排序动作,只是操作排序完成后的结果。 |
-s | 禁止sort做“最后的排序” |
-t | 1、指定字段分隔符 2、对于特殊符号(如制表符),可使用类似于-t$'\t'或-t'ctrl+v,tab'(先按ctrl+v,然后按tab键)的方法实现。 |
-u | 只输出重复行的第一行。结合“-f”使用,重复的小写行被丢弃 |
2.5 文件目录管理
2.5.1 touch命令
描述:创建空白文件或设置文件时间
格式:touch [参数] [文件名称]
参数 | 描述 |
---|---|
-a | 仅修改最后访问时间 |
-m | 仅修改修改文件内容时间 |
-d | 同时修改atime(访问时间)与mtime(修改内容时间) |
# 例1 修改文件test.txt的访问时间
touch -a '2021-11-1 13:32' test.txt
# 例2 新增文件test.txt
touch test.txt
2.5.2 mkdir命令
描述:创建目录
格式:mkdir [参数] 目录名称
参数 | 描述 |
---|---|
-p | 创建层级关系的目录 |
2.5.3 cp命令
描述:复制文件
格式:cp [参数] 源文件 目标路径
参数 | 描述 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 含有层级关系的目录持续复制,即复制递归目录 |
-i | 若目标文件存在则在询问是否覆盖 |
-a | 相当于-pdr |
# 例 复制文件到其他目录下
cp abc /usr/abc
2.5.4 mv命令
描述:移动文件到指定路径或将文件重命名
格式:mv 源文件 目标路径或新名称
2.5.5 rm命令
描述:删除文件路径或目录
格式:rm [参数] 删除文件或目录
参数 | 描述 |
---|---|
-f | 强制删除文件不弹出确认信息 |
-r | 删除目录 |
-rf | 强制删除目录不弹出确认信息 |
2.5.6 dd命令
描述:用于备份或者是建立系统镜像
格式:dd [参数] 可以按照指定大小和个数来复制文件或转换文件
参数 | 描述 |
---|---|
if= | 输入文件的名称 |
of= | 输出文件的名称 |
bs | 设置每个数据的大小 |
count | 设置要复制文件的个数 |
# 例1 本地的整盘备份的另一个位置
dd if=/dev/hdb of=/dev/hdb
# 例2 制作光驱镜像
dd if=/dev/cdrom of=centos-server-7.iso
# 例3 取一个指定大小的文件并输出
dd if=/dev/zero of=800_file count=1 bs=1G
2.5.7 file命令
描述:查询目标是文件还是目录,查询文件类型
格式:file [文件名称]
2.5.8 du 命令
描述:查看文件占用大小的情况
格式:du [参数] 要查看的文件名称
# 例 查看newFS目录的使用情况
du -sh /newFS
2.6 文件查找与筛选
2.6.1 awk命令
描述:行编辑器,awk把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理,awk是行处理器,通常用来格式化文本信息
格式:awk [参数]‘[BEGIN{...}]{PROGRAM:如何处理数据流}[END{...}]’ 处理的文件
说明:
优先级
BEGIN:优先级最高,指的是在处理数据流之前执行的操作,不依赖数据流,可选项
{......}:处理数据流,必选项
END:优先级最低,指的是处理完数据流后执行的操作,依赖数据流,可选项
特殊字符
在awk的数据流处理当中$0代表的是打印全部内容,而不是脚本名称
参数 | 描述 |
---|---|
-F | 定义分隔符,表示读入文件以制定的分隔符分割,默认为空格 |
-f | 调用脚本 |
-v | 进入变量模式,可以进行变量的赋值和调用(调用不需要加$符号) |
# 例1 和grep命令连用,取出当前剩余内存的值
free -h | grep Mem | awk'{print $4}'
# 例2 单独使用,取出当前剩余内存的值
free -h | awk '/Mem/{print $4}'
# 例3 单独使用,调取文本test.txt 第一行的最后一个单词
awk 'NR==1{print $NF}NR==2{print $NF}' test.txt
# 例4 定义输出格式
awk -F ":" 'NR==1{print $1 "-" $2 "-" $3}' test.txt
2.6.1.1 高级用法
说明:awk可以看做是一门语言,其当中的赋值运算符或语法等与shell有一定的差别
awk定义数组、变量
数组定义方式:数组名称[索引]=值
# 例 定义数组,有两个元素100,200 打印数组元素
awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1] }'
awk运算
赋值运算:=
比较运算:> >= == <= < !=
数学运算:+ - * / % ** ++ --
逻辑运算:&& ||
匹配运算:~ !~
1、赋值运算:主要是对变量或者数组赋值,如:name='tom' age=18 array[0]=boy
# 例 定义变量,将变量进行数学计算
awk 'BEGIN{t=3;a=5;print t/a}'
# 例 定义数组,有两个元素100,200 打印数组元素
awk 'BEGIN{array[0]=100;array[1]=200;print array[0],array[1] }'
2、比较运算:如果比较的是字符串则按照ascii码顺序表进行比较,真为1 假为0(与shell的真假返回值相反)
# 例
awk 'BEGIN{print "a" >= "b"}'
awk 'BEGIN{print 2 < 5 }'
# 例2 输出文本num中大于5的数字
awk '$1>5{print $0}'
3、数学运算
# 例
awk 'BEGIN{print 100/3}'
4、逻辑运算
# 例
awk 'BEGIN{print 100/3>2 && 1>=100}'
5、匹配运算
# 例 匹配限定的字符条件
awk -F: '$1 ~ "ro"{print $0}' passwd
# 不匹配限定的字符条件
awk -F: '$1 !~ "ro"{print $0}' passwd
2.6.1.2 流程控制
# if判断语句语法格式
awk '{if($1>5)print $0;else print $1 }' nums
# for条件循环语句语法格式
awk '{sum=0;for(i=1;i<4;i++){sum+=$i}print sum}' nums(文本文件)
# while循环语句语法格式
awk '{sum=0;i=1;while(sum<150){sum+=$i;i++}print sum}' muns(文本文件)
2.6.1.3 awk环境变量
变量 | 描述 |
---|---|
FIELDWIDTHS | 以空格分割的数字列表,用空格定义每个数据字段的精确宽度 |
FS | 指定数据源中字段分隔符号,等同于awk的参数F |
OFS | 输出字段分隔符号 |
RS | 输入记录分隔符即数据源中行与行的分隔符 |
ORS | 输出记录分隔符号即输出按照怎样做区分 |
# 例 以指定的格式及分隔符输出passwd
awk 'BEGIN{FS=":";OFS="-"}NR==1{print $1,$3,$5}' /etc/passwd
# 例 以指定的行与行的分隔符输出nums文本
awk 'BEGIN{RS="";ORS="\n"}{print $1,$2,$3}' nums
2.6.2 grep 命令
描述:在文本中执行关键词搜索
格式:grep [参数] [关键字] [文件]
说明:grep当中可以使用正则表达式
参数 | 描述 |
---|---|
-b | 将可执行文件当做文本文件搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |