Linux基础--基础命令
系统操作命令
系统关机
shutdown
[root@oldboyedu oldboy04]# shutdown
Shutdown scheduled for Fri 2019-03-29 11:36:45 CST, use 'shutdown -c' to cancel.
定义一个关机方案=定义什么时间进行关机,使用shutdown -c 取消关机计划
[root@oldboyedu oldboy04]#
Broadcast message from root@oldboyedu.com (Fri 2019-03-29 11:35:45 CST):
会将关机信息广播给所有关机主机的用户
The system is going down for power-off at Fri 2019-03-29 11:36:45 CST!
准备什么时间真正进行关机
shutdown -h 5 -----------指定五分钟后关机
系统重启
-
shutdown -r 5
[root@oldboyedu ~]# shutdown -r 5 Shutdown scheduled for Fri 2019-03-29 12:02:41 CST, use 'shutdown -c' to cancel. [root@oldboyedu ~]# Broadcast message from root@oldboyedu.com (Fri 2019-03-29 11:57:41 CST): The system is going down for reboot at Fri 2019-03-29 12:02:41 CST!
-
reboot
立即重启
常用的系统命令
-
ip address show/ip a 检查网卡地址配置
-
ping 测试网络连通性
-
nmtui 图形界面修改网卡地址信息
-
exit 注销
-
shutdown 关机命令
shutdown -h 5 指定关机时间 (推荐)
shutdown -r 5 重启主机时间 (推荐)
shutdown -c 取消关机或重启计划
shutdown -h now/0 立即关机
shutdown -r now/0 立即重启
halt 直接关机
poweroff 直接关机
reboot 直接重启 -
list=ls 查看文件或目录是否存在
ls 文件或目录路径信息
ls -d 目录信息
ls -l 文件或目录信息 查看数据的属性信息
ls -la 目录信息 查看目录中隐藏文件
ls -lt 目录信息 将目录中的信息按照时间进行排序显示
ls -ltr 目录信息 按照时间信息,进行反向排序
ls -lh 数据信息 显示的数据信息大小,以人类可读方式显示 -
make directory=mkdir 创建目录
mkdir -p 多级目录 创建多级目录/忽略错误提示 -
manual=man 查看命令手册信息
man 查看的命令
NAME 命令作用说明
mkdir - make directories
SYNOPSIS 命令使用方法
mkdir [OPTION]... DIRECTORY...
DESCRIPTION 命令的参数解释
-p, --parents
no error if existing, make parent directories as needed -
change directory==cd 切换目录命令
cd /xxx 绝对
cd xxx 相对
cd .. 上一级
cd ../../ 上多级
cd - 返回上一次所在路径
cd/cd ~ 返回到用户家目录 -
vi 编辑文件内容
vi 文件信息
i --- 进入编辑模式
esc --- 退出编辑模式
:wq --- 保存并退出
:w
:q
:wq!--- 强制保存退出
:q! --- 强制退出命令模式-->插入模式
i --- 表示从光标所在位置进入编辑状态
I --- 表示将光标移动到一行的行首,再进入编辑状态
o --- 在光标所在行的下面,新起一行进行编辑
O --- 在光变所在行的上面,新起一行进行编辑
a --- 将光标移动到右边的下一个字符,进行编辑
A --- 将光标移动到一行的行尾,进入到编辑状态
C --- 将光标到行尾内容进行删除,并进入编辑状态
cc --- 将整行内容进行删除并进入编辑状态
总结:移动光标位置,并进入编辑状态方法只移动光标,不进入编辑状态
大写字母G 将光标快速切换尾部
小写字母gg 将光标快速切换首部
ngg n表示移动到第几行
$ 将光标移动到一行的结尾
0/^ 将光标移动到一行的行首- 命令模式--底行模式
-
输入一些命令
/ 进入搜索状态(向下搜索 n依次向下)
? 进入搜索状态(向上搜索 n依次向上)特殊使用技巧:
将一行内容进行删除(剪切) deletedelete=dd
将多行内容进行删除(剪切) 3dd
将内容进行粘贴 p
粘贴多次内容 3p
复制一行内容 yy
复制多行内容 3yy
操作错误如何还原 小写字母u undo -
echo 将信息输出到屏幕上
echo "oldboy 深圳" -
cat 查看文件内容信息
cat -n 文件信息 显示文件内容行号信息 -
cp 复制文件或目录数据到其他目录中
cp -r 递归复制目录数据
\cp 强行覆盖数据 -
rm 删除数据命令
rm -r 递归删除数据
rm -f/\rm 强制删除数据,不需要进行确认 -
mv 移动剪切数据信息
-
mount 对存储设备进行挂载
mount 存储设备文件 挂载点
umount 对存储设备进行卸载
umount 挂载点 -
hostname 查看修改主机名称
-
hostnamectl 直接修改主机名称(centos7)
hostnamectl set-hostname 主机名称 -
df 查看磁盘挂载情况/查看磁盘使用情况
df -h 以人类可读方式查看磁盘使用情况 -
source 立即加载文件配置信息
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
/etc/sysconfig/i18n --- centos6字符集配置文件
/etc/locale.conf --- centos7字符集配置文件 -
which 显示命令文件所在路径位置
which 命令 -
export 定义环境变量
export 环境变量=xxx -
alias 设置系统别名命令
alias 别名='命令信息' -
unalias 取消系统别名命令
unalias 别名 -
head 查看文件前几行内容(默认前10行)
head -5 查看前5行 -
tail 查看文件后几行内容(默认后10行)
tail -5 查看后5行
tail -f 一直追踪一个文件内容变化 -
yum 下载并安装软件命令
yum install -y 名称 直接安装软件
yum groupinstall -y 包组名称 直接安装软件包组
yum repolist 查看yum源信息
yum list 查看哪些软件可以安装/查看所有系统已安装的软件
yum grouplist 查看哪些软件包组可以安装/查看所有系统已安装的软件包组
yum --help help参数可以只显示命令的参数帮助信息
yum provides locate 获取命令属于哪个软件大礼包 -
ps 查看系统进程信息
ps -ef 查看所有详细的进程信息 -
kill 删除指定进程
kill pid 删除指定pid号码的进程
kill -9 pid 强制删除指定pid号码的进程 -
free 查看内存命令
free -h 人类可读方式查看 -
lscpu 查看CPU信息
-
w 查看负载信息/查看系统用户登录信息
-
useradd 创建用户(用户管理)
useradd 用户名 -
passwd 设置用户密码命令
passwd 用户名 指定修改哪个用户的密码
passwd 修改当前用户密码 -
su 切换用户命令
su - 用户名称 -
id 检查创建的用户是否存在
id 用户名 -
whoami 确认用户身份
-
rpm 管理软件程序包的
rpm -qa 软件名称 查看软件大礼包是否安装成功
rpm -ql 软件名称 查看软件大礼包中都有什么
rpm -qf 文件名称(绝对路径) 查看文件属于哪个软件大礼包 -
systemctl 管理服务程序的运行状态
systemctl start 服务名称 --- 启动服务
systemctl stop 服务名称 --- 停止服务
systemctl restart 服务名称 --- 重启服务
systemctl status 服务名称 --- 查看服务详细的运行状态
systemctl disable 服务名称 --- 让服务开机不要运行
systemctl enable 服务名称 --- 让服务开机运行
systemctl is-active 服务名称 --- 检查确认服务是否运行
systemctl is-enabled 服务名称 --- 检查确认服务是否开机运行 -
localectl set-locale LANG=zh_CN.UTF-8 --- centos7修改字符集信息
-
less/more 逐行或逐页查看文件信息内容
-
whereis 查看命令所在路径以及命令相关手册文件所在路径
-
locate 查看文件所在路径信息
updatedb 更新文件所在路径的索引数据库表 -
file 查看文件的类型
file 文件信息 -
stat 查看数据详细属性信息
stat file.txt 看到文件的三个时间信息 -
tar 压缩数据命令
-z 压缩类型
-c 创建压缩包
-v 显示过程
-f 指定压缩文件路径
-x 解压文件
-t 查看压缩文件内容
--exclude 排除指定文件不被压缩处理
--exclude-from -
xargs 分组命令 按照分组显示
xargs -n1 <文件总结: <
tr xxx <
xargs < -
tree 显示目录结构树
tree -L 1 查看下几级目录机构
tree -d 目录结构中目录信息 -
date 查看时间信息和修改时间信息
date "+%F_%T"
date -s 设置系统时间
date -d 显示未来或过去的时间信息 -
ln 创建链接文件
ln 源文件 链接文件 创建硬链接
ln -s 创建软链接 -
wc 统计命令
wc -l 统计有多少行 -
chmod 修改文件目录数据权限信息
chmod u/g/o
chmod a -
useradd 创建用户命令
-s /sbin/nologin 指定用户shell登录方式
-M 不创建家目录
-u 指定用户uid信息
-g 指定用户所属主要组信息
-G 指定用户所属附属组信息
-c 指定用户注释信息 -
usermod 修改用户信息
-s /sbin/nologin 指定用户shell登录方式
-u 指定用户uid信息
-g 指定用户所属主要组信息
-G 指定用户所属附属组信息
-c 指定用户注释信息 -
userdel 删除用户信息
userdel -r 彻底删除用户和家目录信息 -
groupadd 创建用户组
groupmod 修改用户组
groupdel 删除用户组 -
chown 修改用户属主和属组的信息
chown -R 递归修改用户属主和属组信息 -
sort 排序命令
sort -n 按照数值进行排序
sort -k1 按照指定列进行排序 -
dd 模拟创建出指定大小的文件
dd if=/dev/zero of=/tmp/oldboy.txt bs=10M count=100
从哪取出数据 放到哪 占用1个block多少空间 总共使用多少个block -
du 查看目录的大小
du -sh 汇总查看目录大小,以人类可读方式
高级命令:
老四 find 查询文件所在路径
find /oldboy -type 文件类型 -name "文件名称"
find /oldboy -type f -mtime +10 -delete --- 删除历史数据信息
find /oldboy -type f -size +10 -delete --- 删除大于10k文件
-maxdepth 查找目录层级的深度
-inum 根据文件inode信息查找
-exec 对查找出的数据进行相应处理
-perm 根据权限查找数据信息
-iname 忽略名称大小写
老三 grep 文件 对信息进行过滤筛选
grep -B n 显示指定信息前几行内容
grep -A n 显示指定信息后几行内容
grep -C n 显示指定信息前后几行内容
grep -c 显示指定信息在文件中有多少行出现
grep -v 进行取反或者排除
grep -E/egrep 识别扩展正则符号
grep -o 显示过滤过程信息
grep -n 过滤信息并显示信息行号
grep -i 过滤信息忽略大小写
编辑一个测试文件
[root@oldboyedu ~]# cat >> /oldboy/test.txt <<EOF
> oldboy01
> oldgirl01
> olddog01
> oldboy02
> oldgirl02
> olddog02
> EOF
[root@oldboyedu ~]# cat /oldboy/test.txt
oldboy01
oldgirl01
olddog01
oldboy02
oldgirl02
olddog02
需求01: 请筛选出有oldboy的信息
[root@oldboyedu ~]# grep "oldboy" /oldboy/test.txt
oldboy01
oldboy02
需求02: 筛选有oldgirl的信息,但是要有oldgirl信息的上一行信息也显示
[root@oldboyedu ~]# grep -B 1 "oldgirl" /oldboy/test.txt
oldboy01
oldgirl01
--
oldboy02
oldgirl02
需求03: 筛选有oldgirl的信息,但是要有oldgirl信息的下一行信息也显示
[root@oldboyedu ~]# grep -A 1 "oldgirl" /oldboy/test.txt
oldgirl01
olddog01
--
oldgirl02
olddog02
需求04.筛选有oldgirl的信, 但是要有oldgirl信息的下一行和下一行信息也显示
[root@oldboyedu ~]# grep -C 1 "oldgirl" /oldboy/test.txt
oldboy01
oldgirl01
olddog01
oldboy02
oldgirl02
olddog02
需求05. 统计oldgirl信息在文件中出现了几次
[root@oldboyedu ~]# grep -c "oldgirl" /oldboy/test.txt
sed命令 字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
sed命令作用说明:
-
擅长对行进行操作处理
-
擅长将文件的内容信息进行修改调整、删除
自动修改网卡地址脚本:
第一个步骤: 修改地址
sed -i "s#10.0.0.200#10.0.0.201#g" ifcfg-eth0 第二个步骤: 重启网络服务
systemctl restart network 第三个步骤: 过滤ip a s eth0 网卡地址信息存储到一个文件中 共享存储
具体功能作用:
1) 文件中添加信息的能力 (增) ok
2) 文件中删除信息的能力 (删) ok
3) 文件中修改信息的能力 (改)
4) 文件中查询信息的能力 (查) OK
sed语法信息
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
命令 参数 条件+处理= (指令) 处理文件信息
显示出文件中有oldboy行的信息
sed -n '/oldboy/p' oldboy.txt
sed命令实践操作
创建测试环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
a sed命令查询信息方法
根据文件内容的行号进行查询:
测试1: 显示单行信息
[root@oldboyedu ~]# sed -n '3p' person.txt
103,Alex,COO
测试2: 根据行号信息,输出多行内容(连续)
[root@oldboyedu ~]# sed -n '1,3p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
测试3: 根据行号信息,输出多行内容(不连续)
[root@oldboyedu ~]# sed -n '1p;3p' person.txt
101,oldboy,CEO
103,Alex,COO
根据文件内容的信息进行查询:
测试1: 根据内容信息,输出单行内容
#将有oldboy行的信息找出来
[root@oldboyedu ~]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
测试2: 根据内容信息,输出多行内容(连续)
#将有oldboy到alex行的信息都输出出来
[root@oldboyedu ~]# sed -n '/oldboy/,/Alex/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
测试3: 根据内容信息,输出多行内容(不连续)
#将有oldboy和alex行的信息都输出出来
[root@oldboyedu ~]# sed -n '/oldboy/p;/Alex/p' person.txt
101,oldboy,CEO
103,Alex,COO
106,oldboy,CIO
b sed命令添加信息方法
在文件第一行添加信息:
100,oldgirl,UFO
[root@oldboyedu ~]# sed '1i100,oldgirl,UFO' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
在文件最后一行添加信息:
[root@oldboyedu ~]# sed '$a108,oldgirl,UFO' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
108,oldgirl,UFO
测试练习
01. 在第三行后面添加oldboy.txt信息
sed '3aoldboy.txt' person.txt
02. 在第二行前面添加oldboy.txt信息
sed '2ioldboy.txt' person.txt
03. 在有oldboy行的前面添加oldgirl 后面添加olddog信息
sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
[root@oldboyedu ~]# sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
100,oldgirl,UFO
oldgirl
101,oldboy,CEO
olddog
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
oldgirl
106,oldboy,CIO
olddog
sed '$a100\n101' person.txt 添加多行信息
企业中编写配置文件:
IPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254
sed '$aIPaddress=10.10.10.1\nmask=255.255.255.0\ngateway=10.10.10.254' 文件名称
c sed命令删除信息方法
练习:
01. 删除单行信息
[root@oldboyedu ~]# #删除文件中第三行信息
[root@oldboyedu ~]# sed '3d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
02. 删除多行信息
[root@oldboyedu ~]# #删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed '2,6d' person.txt
100,oldgirl,UFO
106,oldboy,CIO
测试:
01. 删除有oldboy信息的行
sed '/oldboy/d' person.txt
02. 删除第三行和第六行
[root@oldboyedu ~]# #删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed '2,6d' person.txt
100,oldgirl,UFO
106,oldboy,CIO
[root@oldboyedu ~]# sed '3d;6d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
106,oldboy,CIO
问题: 如何利用sed命令取消空行显示
[root@oldboyedu ~]# sed -n '/./p' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@oldboyedu ~]# sed '/^$/d' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@oldboyedu ~]# sed -n '/^$/!p' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
d sed命令修改信息方法
sed 's#原有内容#修改后内容#g' 文件信息
[root@oldboyedu ~]# sed 's##oldgirl#old#g' person.txt
sed: -e expression #1, char 12: unknown option to `s'
[root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt
100,old,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
sed 's#()#\n#g' 文件信息 后项引用前项进行替换修改
利用sed命令取出IP地址信息:
第一个历程: 取出有IP地址的行
[root@oldboyedu ~]# ip a s eth0|sed -n '3p'
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
第二个历程: 取出IP地址
[root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#\1#g'
10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#\1#g'|sed -r 's#(.*)/24.*#\1#g'
10.0.0.200
sed -r 's#^.*net (.*)#\1#g'|sed -r 's#(.*)/24.*#\1#g' 进行整合
ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)/24.*#\1#g'
sed -n '3p'|sed -r 's#^.*net (.*)/24.*#\1#g' 进行整合
sed -n '3 p'
sed -r 's#^.*net (.*)/24.*#\1#g'
sed -rn '3s#^.*net (.*)/24.*#\1#gp'
最终取IP地址方法
[root@oldboyedu ~]# ip a s eth0|sed -rn '3s#^.*net (.*)/24.*#\1#gp'
10.0.0.200
补充01: 修改文件内容直接进行自动备份
[root@oldboyedu ~]# sed -i.bak 's#oldboy#oldold#g' person.txt
[root@oldboyedu ~]# ll person.txt.bak
-rw-r--r--. 1 root root 104 Oct 10 11:40 person.txt.bak
[root@oldboyedu ~]# cat person.txt.bak
100,#oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
补充02: 在真实替换文件内容时候,一定不能让n和i参数同时出现
[root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
103,aaaa,COO
[root@oldboyedu ~]# cat person.txt
103,aaaa,COO
说明: ni和参数同时使用,会将文件内容进行清空
测验替换功能:
创建测试环境:
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy01.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy02.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy03.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy04.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy05.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy06.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy07.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy08.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy09.txt
-rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy10.txt
批量修改文件的扩展名称 将oldboyxx.txt扩展名修改为oldboyxx.jpg
[root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & \1jpg#g'
mv oldboy01.txt oldboy01.jpg
mv oldboy02.txt oldboy02.jpg
mv oldboy03.txt oldboy03.jpg
mv oldboy04.txt oldboy04.jpg
mv oldboy05.txt oldboy05.jpg
mv oldboy06.txt oldboy06.jpg
mv oldboy07.txt oldboy07.jpg
mv oldboy08.txt oldboy08.jpg
mv oldboy09.txt oldboy09.jpg
mv oldboy10.txt oldboy10.jpg
mv oldboy.txt oldboy.jpg
[root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & \1jpg#g'|bash
批量重命名专业命令: rename
rename .txt .jpg oldboy*.txt
命令 文件名称需要修改的部分信息 修改成什么信息 将什么样的文件进行修改
[root@oldboyedu ~]# cat person.txt|sed -i 's#COO#CEO#g'
sed: no input files
[root@oldboyedu ~]# sed -i 's#COO#CEO#g' person.txt
文件中添加内容方法:
01. vim/vi
02. cat >>xxx<EOF .. EOF
03. echo -e "xxx\nxxx"
04. sed 'na/i xxxx\nxxxx\nsxxxx'
sed命令总结
p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换信息 s###g(全局替换)
c 替换修改指定的一整行信息
[root@oldboyedu ~]# sed '2coldboyedu-sz-01' person.txt
103,aaaa,CEO
oldboyedu-sz-01
总结: sed命令的参数信息
-n 取消默认输出
-r 识别扩展正则
-i 真实编辑文件(将内存中的信息覆盖到磁盘中)
-e 识别sed命令多个操作指令
awk命令
特点作用
- 排除信息
- 查询信息
- 统计信息
- 替换信息
语法格式
sed [参数] '条件-处理方式' 文件
awk [参数] '模式-动作' 文件
awk实际操作
-
准备测试环境
[root@oldboyedu ~]# cat awk_test.txt Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 Liu Bingbing 41117483 :250:100:175 Wang Xiaoai 3515064655 :50:95:135 Zi Gege 1986787350 :250:168:200 Li Youjiu 918391635 :175:75:300 Lao Nanhai 918391635 :250:100:175
-
命令查询信息方法:
按照行号查询信息:awk 'NR=2' awk_test.txt [root@oldboyedu ~]# awk 'NR=2' awk_test.txt Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 Liu Bingbing 41117483 :250:100:175 Wang Xiaoai 3515064655 :50:95:135 Zi Gege 1986787350 :250:168:200 Li Youjiu 918391635 :175:75:300 Lao Nanhai 918391635 :250:100:175 [root@oldboyedu ~]# awk 'NR==2' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 [root@oldboyedu ~]# awk 'NR==2,NR==4' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 [root@oldboyedu ~]# awk 'NR==2;NR==4' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 Wu Waiwai 70271111 :250:80:75 ps: 在linux系统中 oldboy=10 赋值变量信息 oldboy==2 真正oldboy等于数值2 按照字符查询信息: [root@oldboyedu ~]# awk '/Xiaoyu/' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 [root@oldboyedu ~]# awk '/Xiaoyu/,/Waiwai/' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 [root@oldboyedu ~]# awk '/Xiaoyu/;/Waiwai/' awk_test.txt Zhang Xiaoyu 390320151 :155:90:201 Wu Waiwai 70271111 :250:80:75 测验: 01. 显示xiaoyu的姓氏和ID号码(???) [root@oldboyedu ~]# awk '/Xiaoyu/{print $1","$3}' awk_test.txt Zhang,390320151 [root@oldboyedu ~]# awk '/Xiaoyu/{print $1,$3}' awk_test.txt Zhang 390320151 02. 姓氏是zhang的人,显示他的第二次捐款金额及他的名字 [root@oldboyedu ~]# awk '/Zhang/{print $4}' awk_test.txt :250:100:175 :155:90:201 [root@oldboyedu ~]# awk '/Zhang/{print $NF}' awk_test.txt :250:100:175 :155:90:201 [root@oldboyedu ~]# awk '/Zhang/{print $NF}' awk_test.txt|awk -F ":" '{print $3}' 100 90 awk '/Zhang/{print $NF}' awk -F ":" '{print $3}' [root@oldboyedu ~]# awk -F ":" '/^Zhang/{print $3}' awk_test.txt 100 90 [root@oldboyedu ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$5}' awk_test.txt Zhang Dandan 100 Zhang Xiaoyu 90 [root@oldboyedu ~]# awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' awk_test.txt Zhang Dandan 100 Zhang Xiaoyu 90 03. 显示所有以41开头的ID号码的人的全名和ID号码 [root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' awk_test.txt Zhang Dandan 41117397 Liu Bingbing 41117483 04. 显示所有ID号码最后一位数字是1或5的人的全名 方法一: awk '$3~/1$|5$/{print $1,$2}' awk_test.txt [root@oldboyedu ~]# awk '$3~/1$|5$/{print $1,$2}' awk_test.txt|column -t Zhang Xiaoyu Wu Waiwai Wang Xiaoai Li Youjiu Lao Nanhai Lao Nanhai 方法二: [root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t 方法三: [root@oldboyedu ~]# awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt|column -t 05. 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330 [root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $NF}' awk_test.txt :155:90:201 [root@oldboyedu ~]# #gsub(/需要替换的信息/,"修改成什么信息",将哪列信息进行修改) [root@oldboyedu ~]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt $155$90$201 文件中空行进行排除/文件中注释信息进行排除 grep -Ev "^#|^$" 文件信息 sed -n '/^#|^$/!p' 文件信息 awk '/^#|^$/' [root@oldboyedu ~]# awk '$0~/^#|^$/' awk_test.txt #Liu Bingbing 41117483 :250:100:175 [root@oldboyedu ~]# awk '$0!~/^#|^$/' awk_test.txt Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 Wang Xiaoai 3515064655 :50:95:135 Zi Gege 1986787350 :250:168:200 Li Youjiu 918391635 :175:75:300 Lao Nanhai 918391635 :250:100:175 Lao Nanhai 918394135 :250:100:175
总结:awk命令中$符号用法
$1 $2 $3 : 取第几列信息
$NF : 取最后一列
$(NF-n) : 取倒数第几列
$0 : 取所有列的信息如何利用awk取出IP地址信息
ip a s eth0|awk -F "[ /]+" 'NR==3{print $5}'
hostname -i
awk高级功能
a.对日志信息进行统计(计数)
b. 对日志信息数值进行求和 客户端-下载 服务端-上传 消耗网络流量
c . (数组)进行排序分析
排序
01 192.168.2.1 600 192 深圳 10万
02 192.168.1.10 500 18 上海
03 192.168.3.10 200 20 广州
30 东北 2千
运维总监---运营(推广)总监
d. 可以进行脚本编写(循环语句 判断语句) sh awk_nginx.log
awk模式概念说明: 匹配的条件信息
-
普通的模式:
a. 正则表达式作为模式
awk '/^oldboy/{print xx}'
-
利用比较匹配信息
NR==2 NR>=2 NR<=2 NR==2,NR==10
-
特殊模式
BEGIN{} 在awk执行命令前做什么事情: [root@oldboyedu ~]# awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}' awk_test.txt |column -t 姓 名 QQ号 捐款记录 Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 Liu Bingbing 41117483 :250:100:175 Wang Xiaoai 3515064655 :50:95:135 Zi Gege 1986787350 :250:168:200 Li Youjiu 918391635 :175:75:300 Lao Nanhai 918391635 :250:100:175 Lao Nanhai 918394135 :250:100:175 修改内置分隔符变量 awk -F ":" '{print $2}' awk_test.txt [root@oldboyedu ~]# awk 'BEGIN{FS=":"}{print $2}' awk_test.txt END{} 在awk执行命令结束之后做的操作 [root@oldboyedu ~]# awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' awk_test.txt |column -t 姓 名 QQ号 捐款记录 Zhang Dandan 41117397 :250:100:175 Zhang Xiaoyu 390320151 :155:90:201 Meng Feixue 80042789 :250:60:50 Wu Waiwai 70271111 :250:80:75 Liu Bingbing 41117483 :250:100:175 Wang Xiaoai 3515064655 :50:95:135 Zi Gege 1986787350 :250:168:200 Li Youjiu 918391635 :175:75:300 Lao Nanhai 918391635 :250:100:175 Lao Nanhai 918394135 :250:100:175 操作结束 统计累加运算测试: 01. 统计/etc/services文件中空行数量 利用awk公式进行累加运算 [root@oldboyedu ~]# i=0 [root@oldboyedu ~]# echo $((i=i+1)) 1 [root@oldboyedu ~]# echo $((i=i+1)) 2 [root@oldboyedu ~]# echo $((i=i+1)) 3 awk '/^$/' /etc/service [root@oldboyedu ~]# awk '/^$/{i=i+1;print i}' /etc/services 空行 i=i+1 0+1 i=1 空行 i=i+1 1+1 i=2 空行 3 空行 4 空行 5 空行 6 空行 7 空行 8 空行 9 空行 10 空行 11 空行 12 空行 13 空行 14 空行 15 空行 16 空行 i=i+1 16+1 i=17 [root@oldboyedu ~]# awk '/^$/{i=i+1}END{print i}' /etc/services 17 02. 统计/etc/services文件中有井号开头的行 awk '/^#/{i++}END{print i}' /etc/services 03. 统计系统中有多少个虚拟用户 普通用户 第一个历程: 用户信息都保存在什么文件中了 用户信息保存文件: /etc/passwd 第二个历程: 从文件中匹配出虚拟用户 普通用户 匹配普通用户 awk '$NF~/bash/' /etc/passwd awk '$NF~/\/bin\/bash/' /etc/passwd 第三个历程: 进行统计 普通用户数量 [root@oldboyedu ~]# awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd 63 虚拟用户数量 [root@oldboyedu ~]# awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd 22 求和运算: sum=sum+$n(需要进行数值求和的列) [root@oldboyedu ~]# seq 10|awk '{sum=sum+$1;print sum}' 1 sum=sum+$1 0+1 sum=1 2 sum=sum+$1 1+2 sum=3 3 sum=sum+$1 3+3 sum=6 4 6+4 sum=10 5 10+5 sum=15 6 15+6 sum=21 7 28 8 36 9 45 10 45+10 sum=55