二、服务器硬件
1.cpu——中央处理器
作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。
- inter系列 —— 酷睿 、赛扬、至强
- 酷睿 : 一般用于笔记本和台式机
- 赛扬:低端处理器,现在基本已经淘汰
- 至强:服务器处理器,提供强大的多任务处理能力、高可靠性和可扩展性。
- AMD 系列 —— Ryzen系列、Athlon系列、FX系列、EPYC系列、Sempron系列
2.内存——运行进程的临时缓存空间称为内存
- 笔记本内存一般为:8G、16G、32G
- 服务器内存一般为:32G、64G 、128G、 256G、 512G、 1T
将数据写入到内存中,这个存放数据的内存空间在linux系统中一般被称为缓冲区(buffer),例如:写入到内存缓冲区,即写缓冲。
从内存里读取数据,这个存放数据的内存空间在linux系统中一般被称为缓存区(cache),例如:从内存读取,即读缓存
3.磁盘——是指利用磁记录技术存储数据的存储器
- 笔记本:一般为100G+1T 100G固态硬盘 1T机械硬盘 500G 1T固态 2T固态 通常采用SATA接口
- 服务器:一般为300G 600G 900G*8|12块 1T 2T 存储约大速度越慢 通常采用 SAS接口
4.RAID卡——磁盘阵列
可以将磁盘逻辑的组合在一起组合成大容量的磁盘
5.远程管理卡——用于远程监控和管理服务器的运行状态和硬件设备
自带不是特别好用,需单独购买
作用: 服务器在机房 关机了 想运行服务器。
远程开机 远程关机 远程安装操作系统
6.服务器上可以插几根网线
笔记本: 1根
服务器: 4根
三、Linux发展史
蛋 | 人 | 人 | 人 |
---|---|---|---|
Unix贝尔实验室 | 谭宁邦 教学 | 斯托曼 | 托瓦兹 |
Mint(miniunix) | 规则、协议:GPL 公共通用许可(开源软件规则之一) | 开发出了Linux内核 | |
要求01:所有软件开源,可以随意修改。 要求02:改完之后的内容,也要开源 | |||
项目:GNU项目 弄出个系统。 GNU=GNU is not unix. 这个项目目前缺少Linux内核,不是完整的系统. 但是GNU项目中优秀软件(命令) |
1.常见操作系统
- Kylinv10sp3
- Ubuntu22.04.4
- centos7.6 centos7.9
笔记本: xp win7 win10 win11
win2003 win server 2008
服务器: Linux操作系统 使用命令行操作系统
2.kylin 系统安装
03——远程连接及故障排查
一、VMware的使用操作
1.一个VMware只能打开一次,重复开启的话,会出现以下提示:
解决方法——关闭刚刚打开的VMware
2.关闭
使用挂起功能(不会占用系统资源)
优势: 在使用直接开启,不需要走开机流程。
3.删除虚拟机
在关机或者是挂起状态下进行删除
选中虚拟机-->右键-->管理-->从磁盘中删除。
4.快照
类似月光宝盒,在把操作系统玩坏了情况下,使用快照进行恢复——右键虚拟机-->快照-->拍摄快照 : 给快照命令
恢复快照——右键虚拟机-->快照-->恢复快照
二、远程连接Xshell
为什么要远程连接
服务器一般不会存放在公司,托管在IDC机房,使用远程连接工具可以远程连接
远程连接所需信息
- IP
- 用户名
- 密码
- 端口号
- ssh协议
三、无法远程连接Xshell故障排查思路
打开xshell按+号或者cmd
ping的通显示结果
[c:\~]$ ping 10.0.0.200
正在 Ping 10.0.0.200 具有 32 字节的数据:
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
ping不通显示结果:
[c:\~]$ ping 10.0.0.201
正在 Ping 10.0.0.201 具有 32 字节的数据:
来自 10.0.0.1 的回复: 无法访问目标主机。
请求超时。
请求超时。
1.检查虚拟机ip地址 是否正确
[root@oldbay-zkl ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:33:0e:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::8920:ca08:95db:6412/64 scope link noprefixroute
valid_lft forever preferred_lft forever
网络是否连接
2.检查windows下的vmen8网卡是否生成且配置ipv4网段配置是否为10.0.0网段
如果系统中没有vmnet8
1.尝试恢复网络配置,如果还原后出现了vmnet8,则需要重新配置下虚拟网络交换机
2.如果还原还没有vmnet8,则群文件下载cc清理工具
群文件搜索: ccleane,下载到windows后安装
第一步: 卸载vmware
第二步: 使用cc工具清理注册表
第三步: 重启系统重新安装vmware17.5
3.还不行最终只能重装系统,安装win专业版
3.检查vmwa虚拟交换机网段配置是否正确
四、无法连接外网排查思路——ping www.baidu.com
- Windows 上网本地连接通过连接交换机,交换机连接到路由器上,路由器进行NAT转换成一个公网IP地址,出去访问外网
- 虚拟机上网通过虚拟交换机连接到一个虚拟的路由器,进行NAT网络地址转换为本地连接,通过本地连接出去访问外网
1.检查麒麟系统网卡配置的网关
使用 route -n命令查看网关
[root@oldbay-zkl ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=68ae8546-ad9a-4bd2-9ed8-2f1ec5b73ea9
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=223.6.6.6
IPV6_PRIVACY=no
2.检查路由器网关
3.检查windows的NAT服务
此电脑-->右键管理-->服务
4.检查DNS配置
[root@oldbay-zkl ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6
linux和windows使用哪个DNS服务器解析的域名nslookup命令
[root@oldbay-zkl ~]# nslookup www.baidu.com
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.4
Name: www.a.shifen.com
Address: 110.242.68.3
Name: www.a.shifen.com
Address: 2408:871a:2100:2:0:ff:b09f:237
Name: www.a.shifen.com
Address: 2408:871a:2100:3:0:ff:b025:348d
windows 查看ip地址
cmd
C:\Users\PC>ipconfig
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::b6fc:3a67:447c:1cf8%2
IPv4 地址 . . . . . . . . . . . . : 192.168.16.93
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.16.1
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 1:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 2:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::1b94:6737:cac8:a580%12
IPv4 地址 . . . . . . . . . . . . : 192.168.109.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::c895:99dc:6661:837e%15
IPv4 地址 . . . . . . . . . . . . : 10.0.0.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 蓝牙网络连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
五、Linux命令提示符
[root@oldboyedu ~]# # 可以在后面输入Linux系统命
令称为命令提示符
root # 当前登录的系统用户 root管理员
@ # 分隔符
oldboyedu # 主机名称
~ # 当前所在的路径 ~表示家目录 /root
# # 表示当前用户是管理员 $表示普通账号
04——Liunx系统操作命令
1.Liunx目录结构
windows目录结构
C:\windows\
D:\Typora
E:\学习资料\老男孩Linux\
F:\棱镜门\大片
Linux目录结构: 类似windows只有一个C盘 使用/来表示 /是一个目录
/etc/hosts
/tmp/
/root/
相对路径: 当前的位置称为相对路径 文件的前面没有/
1.txt
oldboy.txt
老男孩教室5的位置想要进去: 出门右拐
绝对路径: 一切从/开始的位置
/root/1.txt
/root/oldboy.txt
老男孩教室5的位置想要进去: 银河系-->太阳系-->地球-->亚洲-->中国-->北京-->昌平沙河-->老男孩教室5
2.Liunx系统命令
1.pwd
pwd 命令 #查看当前所在路径
语法结构: pwd #直接回车查看
案例: 查看当前所在路径
[root@oldbay-zkl ~]# pwd
/root
2.cd
cd 命令 #切换目录
语法结构:
cd # 直接回车
cd [参数选项] # 可选择项 不同的参数表示不同的功能
cd 目录/路径的目录 # 进入到其他目录
案例1:切换到/opt目录
[root@oldbay-zkl ~]# cd /opt #绝对路径
[root@oldbay-zkl opt]# pwd
/opt
[root@oldbay-zkl opt]#
[root@oldbay-zkl ~]# cd / #相对路径
[root@oldbay-zkl /]# cd opt
[root@oldbay-zkl opt]# pwd
/opt
案例2:回到家目录
快速回到家目录
[root@oldbay-zkl opt]# cd
[root@oldbay-zkl ~]# pwd
/root
[root@oldbay-zkl opt]# cd / #相对路径
[root@oldbay-zkl /]# cd root
[root@oldbay-zkl opt]# cd /root #绝对路径
[root@oldbay-zkl opt]# cd ~ #cd参数 ~
案例3:返回上一级目录
. #代表当前目录
.. #代表上一级目录
[root@oldbay-zkl ~]# cd .. #返回上一级目录
[root@oldbay-zkl /]# pwd
/
[root@oldbay-zkl /]# cd /etc/sysconfig/network-scripts/
[root@oldbay-zkl network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@oldbay-zkl network-scripts]# cd ..
[root@oldbay-zkl sysconfig]# pwd
/etc/sysconfig
一次返回上两级目录
[root@oldbay-zkl sysconfig]# cd /etc/sysconfig/network-scripts/
[root@oldbay-zkl network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@oldbay-zkl network-scripts]# cd ../..
[root@oldbay-zkl etc]# pwd
/etc
案例4:返回到上一次所在的位置
[root@oldbay-zkl etc]# pwd
/etc
[root@oldbay-zkl etc]# cd -
/etc/sysconfig/network-scripts
[root@oldbay-zkl network-scripts]#
cd命令小结:
cd # 直接回车 快速回家
cd ~ # 快速回家
cd /root # 快速回家
cd - # 返回上一次所在的目录
cd /opt/ # 使用绝对路径切换目录
cd /
cd opt # 使用相对路径切换目录
3.ls
ls命令 #显示目录下内容
语法结构
ls # 直接回车
ls 目录 # 查看目录下的文件
ls /etc/sysconfig/
ls 参数
ls 参数 目录/路径目录
ls 文件 # 查看文件是否存在
参数选项:
-l 显示文件的详细信息
案例1. 查看当前目录下有哪些文件
[root@oldboyedu ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
案例2.查看文件的详细信息
[root@oldboyedu ~]# ls -l
总用量 8
-rw------- 1 root root 2708 10月 25 00:46 anaconda-ks.cfg
-rw-r--r-- 1 root root 3118 10月 24 16:50 initial-setup-ks.cfg
案例3.查看/opt/目录下有哪些文件
[root@oldbay-zkl network-scripts]# ls -l /opt #绝对路径
total 0
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
[root@oldbay-zkl network-scripts]# cd /opt #相对路径
[root@oldbay-zkl opt]# ls -l
total 0
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
案例4.查看文件是否存在
[root@oldbay-zkl ~]# ls zkl.txt
ls: cannot access 'zkl.txt': No such file or directory
[root@oldbay-zkl ~]# ls /opt/zkl.txt
ls: cannot access '/opt/zkl.txt': No such file or directory
[root@oldbay-zkl ~]# ls /etc/sysconfig
anaconda iptables packagekit-background
atd iptables-config quota_nld
chronyd irqbalance rpcbind
console kdump rpc-rquotad
cpupower kernel rsyncd
crond lm_sensors rsyslog
dhcpd man-db run-parts
ebtables-config modules samba
firewalld named selinux
grub network smartmontools
htcacheclean network-scripts sntp
init nftables.conf sshd
ip6tables ntpd sysstat
ip6tables-config ntpdate sysstat.ioconf
[root@oldbay-zkl ~]# ls /etc/hosts
/etc/hosts
案例5.ls -l简写成ll
在linux中执行ll 相当于执行的是ls -l命令
[root@oldbay-zkl ~]# ll /opt
total 0
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
ls小结:
ls # 查看当前目录下有哪些文件
ls -l # 查看文件的详细信息
ll # 相当于执行ls -l
ll oldboy.txt # 查看oldboy.txt的详细信息
ll /opt/ # /opt目录下文件的详细信息
ll /etc/sysconfig/network-scripts/
文件类型:
windows .txt .wps .exe
Linux .txt .mp3 .avi .log
4.touch
touch 命令 #创建普通文件 如果文件存在则修改时间不影响文件的内容
语法结构:
touch 文件名称
touch /目录/文件名称 # 目录必须存在
touch file1 file # 创建多个文件
touch file1 /目录/file2 # 在不同的目录下创建不同的文件
案例1:在当前目录创建oldboy.txt
[root@oldbay-zkl ~]# touch oldboy.txt
[root@oldbay-zkl ~]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:28 oldboy.txt
案例2.在当前目录下创建多个文件 1.txt 2.txt
[root@oldbay-zkl ~]# touch 1.txt 2.txt
[root@oldbay-zkl ~]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:32 1.txt
-rw-r--r-- 1 root root 0 Oct 26 04:32 2.txt
-rw-r--r-- 1 root root 0 Oct 26 04:28 oldboy.txt
案例3.如果文件存在只修改文件的时间 不会影响文件的内容
[root@oldbay-zkl ~]# touch oldboy.txt
[root@oldbay-zkl ~]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:32 1.txt
-rw-r--r-- 1 root root 0 Oct 26 04:32 2.txt
-rw-r--r-- 1 root root 0 Oct 26 04:33 oldboy.txt #只修改时间
案例4.在/opt目录下创建a.txt
相对路径:
[root@oldbay-zkl etc]# cd /opt
[root@oldbay-zkl opt]# touch a.txt
[root@oldbay-zkl opt]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:36 a.txt
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
绝对路径:
[root@oldbay-zkl ~]# touch /opt/a.txt
[root@oldbay-zkl ~]# ll /opt
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:37 a.txt
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
案例5.在当前目录创建oldgirl.txt文件 在/tmp目录下创建oldboy.txt
使用绝对路径表示:
oldgirl.txt
/tmp/oldboy.txt
[root@oldbay-zkl ~]# touch oldgirl.txt /tmp/oldboy.txt
[root@oldbay-zkl ~]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 04:32 1.txt
-rw-r--r-- 1 root root 0 Oct 26 04:32 2.txt
-rw-r--r-- 1 root root 0 Oct 26 04:33 oldboy.txt
-rw-r--r-- 1 root root 0 Oct 26 04:39 oldgirl.txt
[root@oldbay-zkl ~]# ll oldgirl.txt /tmp/oldboy.txt
-rw-r--r-- 1 root root 0 Oct 26 04:39 oldgirl.txt
-rw-r--r-- 1 root root 0 Oct 26 04:39 /tmp/oldboy.txt
touch小结
touch 1.txt # 在当前创建1.txt
touch a.txt b.txt # 在当前创建多个文件
touch /opt/1.txt # 指定在/opt目录下创建1.txt
touch /opt/1.txt /tmp/2.txt # 在不同的路径下创建文件
5.cat
cat 命令 #查看文件内容
语法结构:
cat file #查看文件内容
参数选择
-n #显示行号
案例1.查看/etc/hosts文件
[root@oldbay-zkl ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
案例2.查看当前oldboy.txt中的内容
[root@oldbay-zkl ~]# echo zhoukailun > old
oldboy.txt oldgirl.txt
[root@oldbay-zkl ~]# echo zhoukailun > oldboy.txt
[root@oldbay-zkl ~]# cat oldboy.txt
zhoukailun
案例3.查看多个文件的内容
[root@oldbay-zkl ~]# cat oldboy.txt /etc/hosts
zhoukailun
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
案例4.显示行号 -n
[root@oldboyedu ~]# cat -n /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6.mkdir
mkdir 命令 #创建目录 make directory 如果目录存在提示目录已存在
语法结构:
mkdir 目录的名称
mkdir dir1 dir2 dir3
mkdir dir1/test /tmp/oldboy
参数选项:
-p #递归创建目录 目录存在不提示
案例1.在当前创建oldboy目录
[root@oldbay-zkl ~]# mkdir oldboy
[root@oldbay-zkl ~]# ll
total 4
-rw-r--r-- 1 root root 0 Oct 26 04:32 1.txt
-rw-r--r-- 1 root root 0 Oct 26 04:32 2.txt
drwxr-xr-x 2 root root 6 Oct 26 05:06 oldboy
-rw-r--r-- 1 root root 11 Oct 26 04:58 oldboy.txt
-rw-r--r-- 1 root root 0 Oct 26 04:39 oldgirl.txt
案例2.在当前创建test1 和test2目录
root@oldbay-zkl ~]# mkdir test1 test2
[root@oldbay-zkl ~]# ll
total 4
-rw-r--r-- 1 root root 0 Oct 26 04:32 1.txt
-rw-r--r-- 1 root root 0 Oct 26 04:32 2.txt
drwxr-xr-x 2 root root 6 Oct 26 05:06 oldboy
-rw-r--r-- 1 root root 11 Oct 26 04:58 oldboy.txt
-rw-r--r-- 1 root root 0 Oct 26 04:39 oldgirl.txt
drwxr-xr-x 2 root root 6 Oct 26 05:07 test1
drwxr-xr-x 2 root root 6 Oct 26 05:07 test2
案例3.在不同的路径下创建目录 /opt/a /tmp/b
[root@oldbay-zkl ~]# mkdir /opt/a /tmp/b
[root@oldbay-zkl ~]# ll /opt /tmp
/opt:
total 0
drwxr-xr-x 2 root root 6 Oct 26 05:07 a
-rw-r--r-- 1 root root 0 Oct 26 04:37 a.txt
dr-xr-xr-x 5 root root 79 Mar 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 Oct 24 17:28 patch_workspace
/tmp:
total 0
drwxr-xr-x 2 root root 40 Oct 26 05:07 b
-rw-r--r-- 1 root root 0 Oct 26 04:39 oldboy.txt
drwx------ 3 root root 60 Oct 25 07:58 systemd-private-7f10c7666ffe4a3186658e7030935e60-bluetooth.service-rD54Sw
drwx------ 3 root root 60 Oct 25 14:58 systemd-private-7f10c7666ffe4a3186658e7030935e60-chronyd.service-J1JrV4
drwx------ 3 root root 60 Oct 25 07:58 systemd-private-7f10c7666ffe4a3186658e7030935e60-systemd-logind.service-ux0FaL
案例4.递归创建目录 当前test1/test2/oldboy
[root@oldbay-zkl ~]# mkdir -p test1/test2/oldboy
[root@oldbay-zkl ~]# ll test1/test2/
total 0
drwxr-xr-x 2 root root 6 Oct 26 05:09 oldboy
mkdir小结:
mkdir oldboy #在当前创建oldboy目录
mkdir oldboy oldgirl # 创建多个目录
mkdir /opt/a /tmp/b # 在不同的目录下创建目录
mkdir -p a/b/c # 递归创建目录
7.tree
tree 命令 #树形结构显示目录
tree -L 1 # 显示1级目录下所有的文件
[root@oldbay-zkl ~]# tree test1
test1
└── test2
└── oldboy
2 directories, 0 files
[root@oldbay-zkl ~]# touch test1/a.txt
[root@oldbay-zkl ~]# tree test1
test1
├── a.txt
└── test2
└── oldboy
2 directories, 1 file
[root@oldboyedu ~]# tree -L 1 test1/
test1/
├── a.txt
└── test2
1 directory, 1 file
知识点小结
1.linux路径
相对路径 从当前开始的路径
绝对路径 从/开始的路径
2.pwd 查看当前路径
3.cd 切换目录
cd ~ 回家
cd /root/ 回家
cd - 回到上一次所在的目录
cd .. 回到上一级目录
cd ../../上2级
4.ls 显示文件
ll ====== ls -l
ll 显示当前所有的文件详细信息
ll /opt/ 显示/opt目录下所有文件详细信息
5.touch 创建普通文件
touch 1.txt
touch 1.txt 2.txt
touch /opt/1.txt
touch /opt/1.txt /opt/2.txt
6.cat 查看文件的内容
-n 显示行号
cat oldboy.txt
cat /etc/hosts
7.mkdir 创建目录
参数 -p 递归创建
mkdir oldboy
mkdir a b
mkdir /opt/a /tmp/b
mkdir -p test/test1/test2/oldboy
8.tree命令 树形结构显示目录
tree test
-L 1
05——命令补充
一.核心命令
1.echo
echo 命令 #输出指定内容到屏幕
语法结构:
echo oldboy
echo 与> ,>>
#创建/oldboy/目录
[root@oldboyedu ~]# mkdir -p /oldboy/
#检查目录内容
[root@oldboyedu ~]# ls -l /oldboy/
total 0
#重定向写入内容
[root@oldboyedu ~]# echo oldboy >/oldboy/lidao.txt
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat /oldboy/lidao.txt
oldboy
#测试> >> 区别
[root@oldboyedu ~]# echo lidao >/oldboy/lidao.txt
[root@oldboyedu ~]# cat /oldboy/lidao.txt
lidao
[root@oldboyedu ~]# echo lidao >> /oldboy/lidao.txt
[root@oldboyedu ~]# echo lidao >> /oldboy/lidao.txt
[root@oldboyedu ~]# cat /oldboy/lidao.txt
lidao
lidao
lidao
echo与重定向小结
- echo一般与>,>>搭配。
- > ,>> 重定向符号
2.{}花括号
- touch创建文件,mkdir创建目录
- {} 生成序列(数字,字母)
- {}基本用法
[root@oldboyedu ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu ~]# echo oldboy{1..10}
oldboy1 oldboy2 oldboy3 oldboy4 oldboy5 oldboy6 oldboy7 oldboy8 oldboy9 oldboy10
[root@oldboyedu ~]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu ~]# echo {01..100}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100
[root@oldboyedu ~]# echo {999999..1000000}
999999 1000000
[root@oldboyedu ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
- touch批量创建文件
[root@oldboyedu ~]# echo lidao{01..10}
lidao01 lidao02 lidao03 lidao04 lidao05 lidao06 lidao07 lidao08 lidao09 lidao10
[root@oldboyedu ~]# echo lidao{01..10}.txt
lidao01.txt lidao02.txt lidao03.txt lidao04.txt lidao05.txt lidao06.txt lidao07.txt lidao08.txt lidao09.txt lidao10.txt
[root@oldboyedu ~]# touch lidao{01..10}.txt
[root@oldboyedu ~]# ls -l
total 0
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao01.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao02.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao03.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao04.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao05.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao06.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao07.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao08.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao09.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao10.txt
drwxr-xr-x 3 root root 32 oct 25 19:44 test1
- mkdir 批量创建目录 (文件名与目录名不同)
[root@oldboyedu ~]# echo oldboydir{10..20}
oldboydir10 oldboydir11 oldboydir12 oldboydir13 oldboydir14 oldboydir15 oldboydir16 oldboydir17 oldboydir18 oldboydir19 oldboydir20
[root@oldboyedu ~]# mkdir oldboydir{10..20}
[root@oldboyedu ~]# ls -l
total 0
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao01.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao02.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao03.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao04.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao05.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao06.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao07.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao08.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao09.txt
-rw-r--r-- 1 root root 0 oct 26 18:48 lidao10.txt
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir10
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir11
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir12
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir13
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir14
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir15
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir16
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir17
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir18
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir19
drwxr-xr-x 2 root root 6 oct 26 18:49 oldboydir20
drwxr-xr-x 3 root root 32 oct 25 19:44 test1
- {}小结:
- 生成序列,与一些命令搭配实现批量操作。
- echo看效果,touch创建文件,mkdir创建目录。
3.cp
cp 命令 #复制
语法结构:
cp 选项 复制内容(文件、目录)目标
参数选项:
-r 递归复制
-p 保持属性不变
-d 软连接相关
-a -pdr
- 复制文件:cp复制文件麒麟系统的网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)到/root/下
[root@oldboyedu ~]# mkdir -p /backup/
[root@oldboyedu ~]# cp -r /etc/ /backup/
[root@oldboyedu ~]# ls -l /backup/
total 12
drwxr-xr-x 121 root root 8192 oct 26 19:08 etc
- 复制文件或目录的时候保持文件,目录的属性不变(修改时间)
#cp -rp
#cp -a
[root@oldboyedu ~]# cp /etc/hosts ~
[root@oldboyedu ~]# ls -l hosts
-rw-r--r-- 1 root root 158 oct 26 19:31 hosts
[root@oldboyedu ~]# cp -rp /etc/hosts ~
[root@oldboyedu ~]# ll hosts
-rw-r--r-- 1 root root 158 jun 23 2020 hosts
[root@oldboyedu ~]#
[root@oldboyedu ~]#
[root@oldboyedu ~]# cp -a /etc/hosts ~
[root@oldboyedu ~]# ll hosts
-rw-r--r-- 1 root root 158 jun 23 2020 hosts
- cp小结
- 复制文件、目录
4.mv
mv 命令 #移动(剪切+复制)
语法结构:
mv[选项]源文件或目录 目标文件或目录
- 移动:把/oldboy/lidao.txt文件(如果没有创建下) 移动到/mnt/
[root@oldboyedu ~]# ll /oldboy/lidao.txt
-rw-r--r-- 1 root root 0 10月 26 18:31 /oldboy/lidao.txt
[root@oldboyedu ~]# mv /oldboy/lidao.txt /mnt/
[root@oldboyedu ~]# ll /oldboy/lidao.txt
ls: 无法访问 '/oldboy/lidao.txt': 没有那个文件或目录
[root@oldboyedu ~]#
[root@oldboyedu ~]# ll /mnt/
总用量 0
-rw-r--r-- 1 root root 0 10月 26 18:31 lidao.txt
- 改名:把网卡配置文件复制到/opt/,然后修改/opt/网卡配置文件名字为ifcfg-eth0
[root@oldboyedu ~]# cp -a /etc/sysconfig/network-scripts/ifcfg-ens33 /opt/
[root@oldboyedu ~]# ll /opt/
总用量 4
drwxr-xr-x 2 root root 6 10月 25 19:34 a
-rw-r--r-- 1 root root 0 10月 25 19:09 a.txt
-rw-r--r-- 1 root root 0 10月 25 19:10 b.txt
-rw-r--r-- 1 root root 356 10月 25 00:45 ifcfg-ens33
dr-xr-xr-x 5 root root 79 3月 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 10月 25 00:43 patch_workspace
[root@oldboyedu ~]# mv /opt/ifcfg-ens33 /opt/ifcfg-eth0
[root@oldboyedu ~]# ll /opt/
总用量 4
drwxr-xr-x 2 root root 6 10月 25 19:34 a
-rw-r--r-- 1 root root 0 10月 25 19:09 a.txt
-rw-r--r-- 1 root root 0 10月 25 19:10 b.txt
-rw-r--r-- 1 root root 356 10月 25 00:45 ifcfg-eth0
dr-xr-xr-x 5 root root 79 3月 24 2023 kylin-sm-package
drwxr-xr-x 4 root root 58 10月 25 00:43 patch_workspace
- mv小结
- 移动,文件,目录。
- 重命名。
5.rm
rm 命令 #删除文件或目录
语法结构:
rm [选项] 文件或目录
选项参数
-r 递归删除
-f 强制删除
- 删除文件/oldboy/lidao.txt
touch /oldboy/lidao{01..10}.txt
rm -f /oldboy/lidao01.txt
- 删除/oldboy/目录
rm -rf /oldboy/
- 替代rm方案使用mv或书写脚本(回收站脚本)
- 这个后面未来shell部分解决。
- rm小结:
- 删除文件或目录。
- 使用mv替代。
6.vi/vim
vi/vim 命令 #liunx编辑器
1)编辑文件全流程
- 1️⃣复制网卡配置文件到当前目录
cp /etc/sysconfig/network-scripts/ifcfg-ens33 .
- 2️⃣vim打开文件
vim ifcfg-ens33
- 3️⃣进入编辑模式
按i (insert插入,编辑模式)
- 4️⃣ 退出编辑模式
esc
- 5️⃣ 保存并退出
:wq #write 保存 quit 退出、
:q 退出不保存
:q! 强制退出不保存
- 6️⃣ 查看文件内容
cat ifcfg-ens33
2)vi/vim快捷键
- 加速我们操作。
- 测试快捷键的环境:
cat /etc/services /etc/sysconfig/network-scripts/ifcfg-ens33 > vim.txt
- 不要进入编辑模式。
- 快速到达文件最后一行: G
- 快速到达文件的第1行: gg
- 快速到达文件的某一行:第100行 100gg
- 搜索 /ssh 搜索包含ssh的行 继续查找(向下)n, N(向上)
- 复制 yy
- 粘贴 p
- 删除(剪切) dd
- 撤销 u
- 显示行号 :set nu :set nonu #number行号
06——日志分析
一、什么是日志
- 日志log
- 分析、检查系统、服务是否正常运行、需查看日志文件,后面学习的软件服务,遇到故障的时候需查看日志文件。
- Liunx日志一般放在/var/log目录下
二、核心日志
Liunx默认核心日志 | 说明 |
---|---|
/var/log/secure(麒麟、红帽系统)、/var/log/auth.log(Debian、ubuntu) | 用户登录情况、分析错误登录情况、分析正确情况 |
/var/log/messages(麒麟,红帽系统) /var/log/syslog(debian,ubt) | 通用日志(服务) 服务如果没有单独的日志,一般就会记录到这里面。 |
- 分析secure(auth.log)日志:
- failure
- failed ( Failed password)
三、故障案例:某开发人员vim编辑2g日志导致系统内存不足。
背景: 突然发现测试环境某个机器,提示内存不足。我们去查看。
步骤:定位出是vim命令占用的。发现vim编辑日志。
解决:结束进程
预防:1. 发现开发人员操作,查看日志,vim查看。 2.培训开发人员使用tail,head,less,more,grep查看不要用cat,vim.
四、日志查看指令
tail,head,less,more,grep
4.1 tail
tail命令 #查看文件结尾内容 默认10行
选项参数:
-n20 #查看文件结尾20行
-20 #查看文件结尾20行
-f #试试查看文件更新内容
4.2 head
head命令 #查看文件开头内容 默认10行
选项参数:
-n20 #查看文件开头20行
-20 #查看文件开头20行
4.3 less,more
less命令 #按页查看文件内容
快捷键:
下一页: 空格或ctrl + f
上一页: ctrl + b
第1行: g
最后一行: G
某一行: 100回车
/搜索
q 退出
more命令 #按页查看文件内容
#快捷键没有那么多,到文件末尾自动退出。
4.4 grep过滤 在文件中查找内容
- 四剑客find,sed,grep,awk
- grep
grepm命令 #过滤 选项参数: --color #加颜色高亮显示 -i #不区分大小写 -n #显示行号 -v #取反,排除
- 在/etc/passwd文件中过滤出root的行
[root@oldbay-zkl ~]# grep --color 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
- 在/var/log/secure文件中过滤出failure行。
[root@oldbay-zkl ~]# grep --color 'failure' /var/log/secure Oct 24 17:48:53 oldbay-zkl sshd[7485]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=root Oct 30 07:45:12 oldbay-zkl sshd[5919]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=root Oct 30 07:45:22 oldbay-zkl sshd[5919]: pam_faillock(sshd:auth): Consecutive login failures for user root account temporarily locked Oct 30 07:45:26 oldbay-zkl sshd[5919]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=root
- /var/log/auth.log中过滤出failed password
root@oldboy-zkl:~# grep -i 'failed password' /var/log/auth.log Oct 30 06:55:41 oldboy-zkl sshd[82435]: Failed password for oldboy-zkl from 10.0.0.1 port 61536 ssh2 Oct 30 06:55:47 oldboy-zkl sshd[82435]: Failed password for oldboy-zkl from 10.0.0.1 port 61536 ssh2
- 不区分大小写过滤出 /etc/ssh/sshd_config 文件中包含
port 22
的行并输出行号[root@oldbay-zkl ~]# grep -in 'port 22' /etc/ssh/sshd_config 17:#Port 22
- 排除(取反)/etc/ssh/sshd_config文件中的#(井号)
[root@oldbay-zkl ~]# grep -v '#' /etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTH PermitRootLogin yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding no PrintMotd no AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH Protocol 2 LogLevel VERBOSE PubkeyAuthentication yes RSAAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no PermitUserEnvironment no Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com ClientAliveCountMax 0 Banner /etc/issue.net MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com StrictModes yes AllowTcpForwarding no AllowAgentForwarding no GatewayPorts no PermitTunnel no KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
4.5 wc
wd命令 #统计文件行数
[root@oldbay-zkl ~]# wc -l /etc/services
11473 /etc/services
- wc一般搭配管道使用,其他命令使用。
- 初步统计功能。
五、日志统计
5.1管道—— |
管道: 符号 | ,前1个命令执行后输出,通过管道符号,传递给下一个命令使用。
- 过滤/etc/passwd中包含/bin/bash的行,行数。
[root@oldbay-zkl ~]# grep '/bin/bash' /etc/passwd root:x:0:0:root:/root:/bin/bash [root@oldbay-zkl ~]# grep '/bin/bash' /etc/passwd | wc -l 1
- ps -ef 显示linux进程的命令,linux进程数量
[root@oldbay-zkl ~]# ps -ef | wc -l 149
- ps -ef 显示linux进程的命令,统计/sbin/sshd进程数量(远程连接服务的进程)
[root@oldbay-zkl ~]# ps -ef | grep '/sbin/sshd' | wc -l 2
5.2 日志
- 上传文件到linux
安装lrzsz
yum install -y lrzsz #麒麟
#ubt,debian 使用root用户
sudo su -
apt update
apt install -y lrzsz
#命令说明
rz 上传 rz回车即可或拖拽
sz 下载 sz /etc/hostname 下载指定的文件。
- 解压缩
unzip secure-20161219.zip #解压到当前目录。
#如果提示命令找不到 command not found
检查:
[root@oldboyedu ~]# ll -h secure-20161219
-rw-r--r-- 1 root root 49M 2月 15 2017 secure-20161219
#字节,
#KB
#MB
#GB
#TB
#PB
#EB
- 分析。
5.3 日志分析搭档 sort,uniq
sort 命令 #排序
选项参数:
-r #逆序排列
-n #按照数字形式排序
-k #指定列
[root@oldbay-zkl ~]# sort -rnk2 zkl.txt
zhou 214
zkl 123
zkl 111
zh 15
uniq命令 #去重
[root@oldbay-zkl ~]# uniq zkl.txt
zkl 123
zkl 111
zhou 214
zh 15
123
124511
123
#搭配sort使用
[root@oldbay-zkl ~]# sort -nk2 zkl.txt| uniq
123
124511
zh 15
zkl 111
zkl 123
zhou 214
参数选项:
-c #显示重复次数
[root@oldbay-zkl ~]# sort -nk2 zkl.txt| uniq -c
5 123
1 124511
1 zh 15
1 zkl 111
1 zkl 123
1 zhou 214
07——日志分析后续
一、uniq
uniq命令 #去重 一般搭配sort使用
选项参数:
-c #统计次数
[root@oldbay-zkl ~]# uniq -c uniq.txt
1 dao
1 oldboy
9 lidao
5 oldboy
二、awk
awk命令 #四剑客老大 取列
语法形式: awk ‘{print $1}’ file.txt
[root@oldbay-zkl ~]# awk '{print $1}' awk.txt
oldboy
oldboy1
oldboy2
oldboy3
oldboy4
oldboy5
oldboy6
oldboy7
[root@oldbay-zkl ~]# [root@oldbay-zkl ~]# awk '{print $NF}' awk.txt
www.zkl98.cn
192.168.1.2
192.168.1.3
192.168.1.3
192.168.1.3
192.168.1.3
192.168.1.3
192.168.1.3
三、日志分析实战
3.1secure 日志分析
#1. 过滤出failed password,失败登录。 取行
#2. 提取出这行中的ip的列。 取列
#3. 对ip进行排序 相同ip放在一起
#4. 去重并统计出现次数
#5. 对出现次数进行排序 并取出前20个
[root@oldbay-zkl ~]# grep -i 'failed password' secure-20161219 | head -
10
Dec 11 03:49:25 localhost sshd[27087]: Failed password for invalid user support from 123.31.34.190 port 55493 ssh2
Dec 11 03:49:27 localhost sshd[27092]: Failed password for invalid user admin from 123.31.34.190 port 56193 ssh2
Dec 11 03:49:30 localhost sshd[27094]: Failed password for invalid user uucp from 123.31.34.190 port 56223 ssh2
Dec 11 04:37:36 localhost sshd[28081]: Failed password for invalid user business from 221.126.233.134 port 3290 ssh2
Dec 11 04:37:36 localhost sshd[28081]: Failed password for invalid user business from 221.126.233.134 port 3290 ssh2
Dec 11 04:37:36 localhost sshd[28081]: Failed password for invalid user business from 221.126.233.134 port 3290 ssh2
Dec 11 05:17:16 localhost sshd[28904]: Failed password for ftp from 110.45.145.222 port 50696 ssh2
Dec 11 05:17:16 localhost sshd[28904]: Failed password for ftp from 110.45.145.222 port 50696 ssh2
Dec 11 05:17:16 localhost sshd[28904]: Failed password for ftp from 110.45.145.222 port 50696 ssh2
Dec 11 05:19:54 localhost sshd[28947]: Failed password for root from 112.85.42.103 port 52991 ssh2
[root@oldbay-zkl ~]# grep -i 'failed password' secure-20161219 | awk '{print $(NF-3)}' |head -10
123.31.34.190
123.31.34.190
123.31.34.190
221.126.233.134
221.126.233.134
221.126.233.134
110.45.145.222
110.45.145.222
110.45.145.222
112.85.42.103
[root@oldbay-zkl ~]# grep -i 'failed password' secure-20161219 | awk '{print $(NF-3)}' |sort | head -10
103.237.144.68
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
103.27.238.252
[root@oldbay-zkl ~]# grep -i 'failed password' secure-20161219 | awk '{print $(NF-3)}' |sort | uniq -c | head -10
1 103.237.144.68
12 103.27.238.252
9 110.45.145.222
3206 111.73.46.156
21 111.73.46.162
15 111.73.46.36
18065 112.85.42.103
17163 112.85.42.107
17163 112.85.42.124
17164 112.85.42.99
[root@oldbay-zkl ~]# grep -i 'failed password' secure-20161219 | awk '{print $(NF-3)}' |sort | uniq -c | sort -rn | head -10
68652 218.65.30.25
34326 218.65.30.53
21201 218.87.109.154
18065 112.85.42.103
17164 112.85.42.99
17163 218.87.109.151
17163 218.87.109.150
17163 218.65.30.61
17163 218.65.30.126
17163 218.65.30.124
3.2access日志分析
#1. 提取文件中ip的列 取列
#2. 对ip进行排序 相同放在一起
#3. 去重并统计次数
#4. 排序 并取出前20
[root@oldbay-zkl ~]# awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
12049 58.220.223.62
10856 112.64.171.98
1982 114.83.184.139
1662 117.136.66.10
1318 115.29.245.13
961 223.104.5.197
957 116.216.0.60
939 180.111.48.14
871 223.104.5.202
869 223.104.4.139
四、打包压缩
压缩工具 | 说明 |
---|---|
tar命令 | 使用最多 |
gzip | 一般与命令搭配,管道。 |
zip /unzip | Windows和linux 之间传输(linux,windows默认都支持的格式) |
4.1tar
tar 命令 #打包压缩
选项参数
zcvf简写 zcf c create打包 z gzip压缩 v verbose显示过程 f 指定压缩包(f放最后)
ztvf简写 tf t list 显示压缩包内容
zxvf简写 xf x extract解压
-C 解压到指定目录
#创建压缩包压缩/etc/目录 存放到/backup/下
#检查/backup/是否存在,存在后再去创建
tar zcvf /backup/etc.tar.gz
#查看压缩包内容
tar ztvf /backup/etc.tar.gz
#解压压缩包(当前目录)
tar xf /backup/etc.tar.gz
#解压到/backup-new/
tar xf -C /backup/etc.tar.gz /backup-now/
[root@oldboyedu ~]# tar zcf /backup/etc.tar.gz /etc/
tar: 从成员名中删除开头的“/”
/etc/
/etc/hosts
/etc/hostname
....
开头的“/”
etc/
etc/hosts
etc/hostname
....
tar命令安全机制,把绝对路径转换为相对路径。解压的时候当前目录。
避免解压也是绝对路径,覆盖对应的文件目录。
4.2gzip
- 原地压缩
- 目前不常用。
4.3zip/unzip
# 主要掌握解压即可-unzip
zip -rq /backup/etc.zip /etc/
# unzip解压
unzip etc.zip
五、Linux常见核心文件
文件 | 说明 |
---|---|
/etc/hostname | 主机名 |
/etc/os-release | 系统版本信息 |
5.1查看Linux基本信息
- 面试题:你拿到一个linux后一般做什么? 检查,优化
- 主机名
[root@oldbay-zkl ~]# hostname oldbay-zkl [root@oldbay-zkl ~]# hostnamectl set-hostname oldboy-zkl
- ip
[root@oldboy-zkl ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:33:0e:c8 brd ff:ff:ff:ff:ff:ff inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::8920:ca08:95db:6412/64 scope link noprefixroute valid_lft forever preferred_lft forever
- 系统版本
[root@oldboy-zkl ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Lance)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)" ANSI_COLOR="0;31"
- 内核版本
[root@oldboy-zkl ~]# uname -a Linux oldboy-zkl 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux [root@oldboy-zkl ~]# uname -r 4.19.90-52.22.v2207.ky10.x86_64
8——核心目录文件补充
一、核心文件目录
1.1/etc/
/etc/下 | ||
---|---|---|
/etc/sysconfig/network-scripts/ifcfg-ens33 | 红帽系列网卡配置文件 ip地址,DNS,网关 | |
/etc/resolv.conf | DNS | |
/etc/hosts | 第2阶段搭建网站必会 ip与域名关系 | |
/etc/profile | 配置别名,环境变量 | |
/etc/motd /etc/issue | 欢迎信息 | |
/etc/rc.local | 开机自动运行命令 |
1.2 网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-enss33
[root@oldboy-zkl ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=68ae8546-ad9a-4bd2-9ed8-2f1ec5b73ea9
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=223.6.6.6
IPV6_PRIVACY=no
关键配置:
0. 获取IP方式 自动获取还是固定
BOOTPROTO=none 或static 固定IP
BOOTPROTO=dhcp自动获取IP
1. IP地址 IPADDR 指定IP地址 固定的
2. GATEWAY 网关 网络出入口 大楼的大门。 10.0.0.2 vmware虚拟路由器
3. DNS 域名解析服务 域名-->ip
DNS1=223.5.5.5
DNS2=223.6.6.6
1.3配置DNS
/etc/resolv.conf
dns配置 | 网卡 | resolv.conf |
---|---|---|
共同点 | 配置DNS | 配置DNS |
区别 | 网卡DNS重启网卡生效 | 实时生效,会被网卡配置文件覆盖(网卡重启) |
1.4域名(名字) 与ip对应关系 ,本地DNS(当前机器)通过主机名访问对应的主机。
/etc/hosts
1.5用户登录后输出信息
/etc/motd 用户登录后输出信息
1.6用户登录之前输出信息 清空即可
/etc/issue
二、 工作环境
环境 | 说明 | |
---|---|---|
物理服务器 | 比较稳定,前期投入大(硬件设备,租机房) 200-2000 MB/月 500*1000 | |
云服务器(公有云) | 前期投入低,可扩展性更强,使用方便,中小型公司首选 | |
私有云(虚拟机) | 私有,本质上是物理机 |
09——核心文件补充
工作项目 | 工作内容 |
---|---|
应急响应 | 紧急故障案例网站入侵故障安全威胁负载高/cpu,内存使用率高 |
日常项目维护 | 备份安全加固入侵检测监控集群容器化服务上云(阿里云) |
架构巡检 | 业务指标系统架构监控是否正常 |
DevSecOps代码发布 | 手动自动化上线DevOpsDevSecOps自动化脚本 |
临时任务 | 扩容环境,上线机器等等 |
核心文件
1/etc/目录
/etc/ | 说明 |
---|---|
/etc/profile | 配置系统环境变量,别名 |
/etc/rc.local | 开机自启动,开机后自动运行服务,命令。 |
1.1/etc/profile
- 环境变量:系统定义好,供我们使用。
- PATH环境变量:系统中命令的位置。
echo $PATH
[root@oldboy-zkl ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
- 故障案例:
- 一不小心,清空了PATH变量内容
- 解决方案:
- 方案🅰️运行
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
,继续操作即可 - 方案🅱️ 使用命令的绝对路径 比如 /bin/ls , /bin/vi , /bin/vim
- 方案🅰️运行
小结:
- /etc/profile配置环境变量
- PATH作用,存放命令的位置.
1.2/etc/rc.local
- 配置开机自启动
- 这是个软链接,对应的原始文件叫:/etc/rc.d/rc.local
- ubt/debian中这个文件不存在,手动创建 /etc/rc.local
- 这个文件使用前对源文件 增加执行权限
chmod +x /etc/rc.d/rc.local /etc/rc.local
(讲解权限专题再说)
2./proc
- process 进程,存放系统的进程信息,内核信息,系统信息。
- 不占用磁盘空间.
/proc/ | 说明 |
---|---|
/proc/cpuinfo | cpu信息 |
/proc/meminfo | mem内存(memory) 运行内存 |
/proc/loadavg | 系统负载信息(衡量系统繁忙程度指标) |
/proc/mounts | 系统磁盘挂载信息(磁盘专题) |
..... |
2.1 cpu信息
- cpu与核心
- cpuinfo文件内容
processor : 0 #第1个核心
physical id: 0 #第1个cpu
- lscpu
#临时改为英文
export LANG=en_US.UTF-8
#
lscpu
2.5内存信息
[root@oldboyedu-hard-stone ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 224Mi 547Mi 8.0Mi 1.2Gi 1.5Gi
Swap: 2.0Gi 0B 2.0Gi
#linux特点 把文件缓存到内存中,加速下次使用.
#缓存到buff/cache 内存中的区域
- Swap: 交换分区(windows虚拟内存)
- 内存不足的时候临时充当内存.
- 磁盘上的空间。
- (麒麟系统) kdump功能:系统异常宕机,系统进程信息导出保存到文件中。
#1.关闭
systemctl disable --now kdump
#2.检查
systemctl status kdump
#3.修改文件
vim /boot/grub2/grub.cfg
搜索: crashkernel=1024M,high 行
crashkernel=1024M,high 删除即可
#4.保存退出后检查结果
grep 'crashkernel=' /boot/grub2/grub.cfg #没有输出就OK了。
#5.重启linux
reboot
10——文件属性专题
一、文件属性
1ls -lhi 每一列的含义
[root@oldboy-zkl ~]# ls -hli
总用量 108M
67161400 -rw-r--r-- 1 root root 0 11月 5 00:31 1.txt
67460140 -rw-r--r-- 1 root root 57M 9月 21 2017 access.log
67460129 -rw-r--r-- 1 root root 29 10月 30 20:53 errors.log
101195739 drwxr-xr-x 8 1001 1001 158 4月 11 2023 nginx-1.24.0
67460118 -rw-r--r-- 1 root root 1.1M 4月 12 2023 nginx-1.24.0.tar.gz
101195534 drwxr-xr-x 9 502 games 186 11月 2 22:29 nginx-1.26.2
67460112 -rw-r--r-- 1 root root 1.2M 8月 13 00:39 nginx-1.26.2.tar.gz
67460135 -rw-r--r-- 1 root root 49M 2月 15 2017 secure-20161219
2.inode 、block
- inode index node 索引节点 ,类似于每个人的身份证
- inode 号码是身份证号
- inode空间是类似于身份证存放个人信息
- inode空间存放文件属性
- block数据块,存放数据(文件内容)
- 访问cat oldboy.txt 文件 inode和block的关系
- cat 文件内容 > 通过文件名找到对应的inode信息 > inode 空间存放着文件属性 > block位置(指向数据实体指针) > 找到block块
- 特点:
- 每创建1个文件,需要1个inode,block(非空)
- inode 256字节一般。
- block 一般是4k.
- 创建1个非空文件,占1个block, 文件小没有占满block,剩余的空间就空着。
- inode大小,block大小,数量都是在格式化的时候诞生的。
- 命令
- 文件 inode 号码(不太重要),block(文件大小 重要)
ls -lhi
- 目录 查看目录所占的空间
查看目录大小 du -sh /etc/ [root@oldboy-zkl ~]# du -sh /etc 25M /etc #对指定目录内容统计大小并排序 [root@oldboy-zkl ~]# du -sh /var/log/* |sort -rnk1
3.文件类型
- ls -l
常见Linux文件类型 | |
---|---|
-(文件) | |
d(目录) | |
l(软链接) | |
c(字符设备) 后面使用 | 不断输出(白洞),不断吸收(黑洞) /dev/null (黑洞) /dev/urandom (白洞) /dev/zero(白洞) |
b(块设备) | 硬盘,光盘 (磁盘专题) |
s(socket文件 套接字文件) | 网络传输相关 |
...... |
- file查看文件类型。
[root@oldboy-zkl ~]# file /etc
/etc: directory
4. 权限
5.软连接与硬链接
1)软连接
- 软连接类似于Windows快捷方式,存放与源文件的位置。
- 符号链接(symbolic link或symlink),软链接
- 创建软链接 给/etc/sysconfig/network-scripts/ifcfg-ens33 创建软链接/oldboy/ifcfg-ens33
ln -s #link mkdir -p /oldboy/ ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 /oldboy/ifcfg-ens33.soft
2)硬链接
- 在同一分区下,inode号码相同的互为硬链接。
3)软链接vs硬链接区别
- 软连接 相当于Windows的快捷方式 ln -s 创建 可以给文件或者目录创建
- 硬链接 同一分区下inode号相同的文件 ln创建 只能给文件创建 用于防止误删除
- 删除软连接 没有影响
- 删除源文件 软连接失效 硬链接还可以使用
- 源文件和硬链接都删除相当于文件删除了 无法访问
6.用户
- 用户专题
7.时间
时间 | |
---|---|
修改时间 mtime | 修改时间,最常用的。 |
访问时间 atime | 看一次文件,时间就会改变。限制mtime有关。 |
属性改变时间 ctime | 属性信息修改这个时间就变化。 |
创建时间 btime | 文件创建时间。 |
stat /etc/hosts
11——用户管理专题
一、用户管理
1.用户分类
- 一般看用户名,本质上需要查看用户的Uid和Gid
- UID user id 用户id 相当于身份证号
- GID group id 组id 相当于户口本
用户分类 | UID | 说明 |
---|---|---|
root | 0 | 权限号 家目录是/root |
普通用户 | 一般>= 1000 | 权限低,只能管理自己的家目录 /home/xxx |
虚拟用户(傀儡用户) | 一般1-999之间,可以修改 | 无法登录,让服务、进程正常运行 |
用户的分类本质上看UID和命令解释器
2.用户相关文件
- /etc/passwd用户信息
- /etc/shadow密码信息
第1列 | 第2列 | 第3-4列 | 第5列 | 第6列 | 第7列 |
---|---|---|---|---|---|
用户名 | x 密码标记 | UID:GID | 说明信息(可以为空) | 用户家目录(root,普通用户即可) | 命令解释器 /bin/bash 可以登录系统 /sbin/nologin 虚拟用户 |
- 常用的命令解释器
- /bin/bash
- /bin/sh
- /bin/dash #ubt、debian 命令解释器
- /sbin/nologin 虚拟用户
- ..... /bin/csh /bin/tcsh /bin/xxxx
3.用户的增删改查
3.1增加
- 添加用户——useradd
- 设置密码——passwd
- 切换用户——su -
- 检查——whoami
- 麒麟,红帽
root@aliyun-zkl:~# useradd zhou
root@aliyun-zkl:~# passwd zhou
[root@oldboy-zkl ~]# su - zhou
[zhou@oldboy-zkl ~]$ whoami
zhou
- ubt/debian
root@oldboy-root@oldboy-zkl:~# su - zhou
zhou@oldboy-zkl:~$ whoami
zhou
zkl:~# useradd -s /bin/bash -m zhou
root@oldboy-zkl:~# su - zhou
zhou@oldboy-zkl:~$ whoami
zhou
- useradd
useradd | 说明 |
---|---|
-s | 指定命令解释器 |
-m | 创建家目录 |
-M | 不创建家目录 |
-u | 指定UID |
-c | 添加用户的增加说明 |
- 添加虚拟用户(命令解释器/sbin/nologin,不创建家目录),uid 12306 nginx
[root@oldboy-zkl ~]# useradd -s /sbin/nologin -u 12306 -M nginx
- su 与 su - 的区别
su命令切换用户,一些环境变量没有更新
su - 的时候环境变量就更新。
- 非交互修改密码(红帽,麒麟)
[root@oldboy-zkl ~]# echo 'zkl@1998' | passwd --stdin zhou
更改用户 zhou 的密码 。
passwd:所有的身份验证令牌已经成功更新。
- 非交互修改密码(ubt,debian)——passwd命令没有-- stdin 需要使用chpasswd命令
root@oldboy-zkl:~# cat passwd.txt
zhou:zhou
root@oldboy-zkl:~# cat passwd.txt | chpasswd zhou
root@oldboy-zkl:~# echo 'zkl:zkl' | chpasswd zkl
3.2删除
- userdel 删除用户,默认不删除家目录
- userdel -r 删除用户和家目录
- 工作中删除用户一般在/etc/passwd文化中注释掉用户
3.3查看
- whoami
- id 查看用户的UID、gid,查看用户是否存在,用户属于那个组
- w 查看谁登录了,正在干啥,负载信息。。。。
- last 查看所有用户登录情况
- lastlog 查看所有用户最后一次的登录情况
3.4修改
- usermod修改。
选项参数
-u #修改用户的uid
-s #修改用户命令解释器
-g #修改用户所属组
12——用户管理专题
一、sudo
sudo #有其他身份来执行命令
语法结构
sudo 选项 参数
提权,普通用户使用
让普通用户可以临时成为root,去运行对应的命令
类似于皇帝给大臣发尚方大宝剑
root用户去配置, 普通用户去进行使用
- 授权oldboy用户,以root权限运行cat、tail、less、more、grep
echo 'Lidao996' |passwd --stdin oldboy
- root 授权 ,visudo 相当于运行vi /etc/sudoers
visudo
写入
oldboy ALL=(ALL) /bin/cat, /bin/tail, /bin/less, /bin/grep, /bin/more
- oldboy 测试
sudo -l#查看授权
sudo 命令 #以root权限运行命令
小结:
- 给普通用户配置sudo权限。
- root用户通过visudo进行授权,vi/vim /etc/sudoers
- 普通用户:sudo + 命令
ubt配置visudo 默认使用的是nano编辑器
vim /etc/sudoers
在Defaults开头添加一行即可
Defaults env_editor,editor=/bin/vim
保存退出
:wq! 强制保存退出
- 授权oldboy所有命令并不需要输入密码
oldboy ALL=(ALL) NOPASSWD: ALL
ALL=(ALL)
所有主机=(任何用户)
二、别名
- 给命令设置。alias命令配置别名或查看
- 给rm命令配置别名,运行rm执行echo输出pls do not use rm
alias #定义或显示别名。
#1. 命令行配置(临时)
alias 别名='命令或脚本'
alias rm='echo pls do not use rm'
[root@oldboy-zkl ~]# alias rm='echo pls do not use rm'
[root@oldboy-zkl ~]# alias rm
alias rm='echo pls do not use rm'
[root@oldboy-zkl ~]# rm
pls do not use rm
[root@oldboy-zkl ~]# rm 12.txt
pls do not use rm 12.txt
[root@oldboy-zkl ~]# \rm 12.txt
#2.修改/etc/profile
写入到文件的末尾
alias rm='echo pls do not use rm'
[root@oldboyedu-hard-stone ~]# source /etc/profile
[root@oldboyedu-hard-stone ~]# alias rm
alias rm='echo pls do not use rm'
#3.排坑(仅限于rm,cp,mv的别名)
vim ~/.bashrc
找到alias rm的行,开头加上#注释掉
#4.重新登录linux测试
alias rm
- 给grep,egrep配置颜色
alias grep='grep --color'
alias egrep='egrep --color'
三、md5,aide
- MD5,校验文件是否发生了变化。
[root@oldboyedu-hard-stone ~]# md5sum oldboy.txt
3fe396c01f03425cb5e2da8186eb090d oldboy.txt
[root@oldboyedu-hard-stone ~]# md5sum oldboy.txt >zhiwen.md5
[root@oldboyedu-hard-stone ~]# md5sum --check zhiwen.md5
oldboy.txt: 成功
[root@oldboyedu-hard-stone ~]# echo lidao >oldboy.txt
[root@oldboyedu-hard-stone ~]# md5sum --check zhiwen.md5 #-c 相当于--check
oldboy.txt: 失败
md5sum: 警告:1 个校验和不匹配
- aide 有配置文件指定监控哪些文件,目录
#1安装
yum install -y aide
#2修改配置文件
修改/etc/aide.conf
原始内容: database_out=file:@@{DBDIR}/aide.db.new.gz
修改后: database_out=file:@@{DBDIR}/aide.db.gz
从有目录开始的行一直删除到末尾
添加上
47 /bin/ FIPSR
48 /sbin/ FIPSR
49 /etc/ FIPSR
#3.aide --init根据目录创建指纹信息
aide --init
#4.进行检查
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
做校验的时候,收集的信息
核心: sha256 内容
p 权限
i inode
n 硬链接数
u uid
g gid
s 大小
m 修改时间
c 属性改变时间
acl+selinux+xattrs 特殊权限属性
4.堡垒机
安全防护: 审计功能,操作记录检查。
堡垒机(理解)
demo.jumpserver.org
13——安全补充
一、ssh服务
- 远程连接服务:ssh
- 远程连接端口号:22 修改端口
- 禁止root远程登录: ubt 普通用户登录 sudo su - 切换到ropot用户
- 配置文件 /etc/ssh/sshd_config
1.修改远程连接端口号为 11314
#检查系统现在正在使用的端口号
ss -lnutp
[root@oldboy-zkl ~]# ss -lnutp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=759,fd=6))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=759,fd=7))
tcp LISTEN 0 128 0.0.0.0:11314 0.0.0.0:* users:(("sshd",pid=9661,fd=5))
tcp LISTEN 0 128 [::]:11314 [::]:* users:(("sshd",pid=9661,fd=6))
#检查平配置文件中的端口配置
[root@oldboy-zkl ~]# vim /etc/ssh/sshd_config
找到 #Port 22
修改 端口号为11314
#检查
[root@oldboy-zkl ~]# grep 'Port' /etc/ssh/sshd_config
Port 11314
#GatewayPorts no
GatewayPorts no
#重启ssh服务
[root@oldboy-zkl ~]# systemctl restart sshd
#关闭防火墙
systemctl disable --now firewalld #红帽
systemctl disable --now ufw #ubunut
#xshell连接
2.禁用root连接
#事先添加好普通用户并配置好sudo
#ubuntu 允许root登录
[root@oldboy-zkl ~]# vim /etc/ssh/sshd_config
/ PermitRootLogin
#PermitRootLogin yes 开启后允许root登录
#重启服务
systemctl reestart sshd
14——权限管理
一、rwx的含义
r read #读 cat less more vim
w write #写 vim echo
x excuter #可执行
- #没有权限
如何查看我对某个文件或目录有什么权限?
[root@oldboy-zkl ~]# ll
总用量 109620
-rw-r--r-- 1 root root 19 11月 8 09:39 1.txt
- # 文件类型
文件权限三位为一组
rw- # 第一列 文件的属主 文件属于哪个用户 手机是属于谁的
r-- # 第二列 文件的属组 文件对于小组的权限 手机对于组内的权限
r-- # 第三列 文件的其他权限 文件对于陌生人的权限 和小组一样 都是只能看的权限
zhou用户 默认创建zhou组
1.查看当前用户
[root@oldboy-zkl ~]# whoami
root
2.找出用户与文件之间的关系,root对于1.txt是主人
3.根据对应的关系找出权限
root对应的1.txt的权限是前三位 rw- 可读写。
文件的最高权限是 644
目录的最高权限是755
二、rwx对应的数字
r #4
w #2
x #1
-rw-r--r-- 1 root root 19 11月 8 09:39 1.txt
数字对应的1.txt的权限是 加法
rw- # 属主位相加 r(4)+w(2)+-(0)=6
r-- # 属组位相加 r-- 4+0+0=4
r-- # 陌生位相加 r-- 4+0+0=4
文件的权限用数字表示 644
通过数字得出文件使用字符表示权限 减法
755
-rwxr-xr-x
三、修改文件权限
chown #修改文件的属主和属组
语法结构
chown zhou file #只修改文件的属主
chown zhou.zhou file #修改文件的属主和属组
参数选项
-R #递归修改
[root@oldboy-zkl /tmp]# chown oldboy zhou.txt #只修改文件的属主
[root@oldboy-zkl /tmp]# ll
总用量 0
-rw-r--r-- 1 oldboy root 0 11月 8 16:03 zhou.txt
[root@oldboy-zkl /tmp]# chown oldboy.oldboy zhou.txt #修改文件的属主和属组
[root@oldboy-zkl /tmp]# ll
总用量 0
-rw-r--r-- 1 oldboy oldboy 0 11月 8 16:03 zhou.txt
[root@oldboy-zkl /tmp]# chown -R oldboy.oldboy oldboy/ #递归修改文件的属主和属组
[root@oldboy-zkl /tmp]# ll
总用量 0
drwxr-xr-x 2 oldboy oldboy 100 11月 8 16:06 oldboy
-rw-r--r-- 1 oldboy oldboy 0 11月 8 16:03 zhou.txt
[root@oldboy-zkl /tmp]# ll oldboy/
总用量 0
-rw-r--r-- 1 oldboy oldboy 0 11月 8 16:06 1.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 16:06 2.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 16:06 3.txt
chmod #修改文件权限
语法结构
chmod +w file #增加w权限
chmod -w file #减少w权限
chmod g+w file #授权属组位添加w权限
属主 使用 u表示 user
属组 使用 g表示 group
陌生 使用 o表示 other
1.使用ugo方式授权
案例一 给1.txt 属主位增加x权限
[root@oldboy-zkl ~]# chmod u+x 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwxr--r-- 1 root root 0 11月 8 16:17 1.txt
案例2.给1.txt 减去w权限
[root@oldboy-zkl ~]# chmod u-w 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-r-xr--r-- 1 root root 0 11月 8 16:17 1.txt
案例3.给1.txt设置rwx权限
[root@oldboy-zkl ~]# chmod u+rwx 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwxr--r-- 1 root root 0 11月 8 16:17 1.txt\
陌生人增加wx权限
[root@oldboy-zkl ~]# chmod o+wx 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwxr--rwx 1 root root 0 11月 8 16:17 1.txt
案例4.同时去掉陌生人的wx权限
[root@oldboy-zkl ~]# chmod o-wx 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwxr--r-- 1 root root 0 11月 8 16:17 1.txt
案例5.使用等号来重新赋值权限位
授权属组位为wx权限
[root@oldboy-zkl ~]# chmod g=wx 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwx-wxr-- 1 root root 0 11月 8 16:17 1.txt
案例6.修改所有位置增加x权限
[root@oldboy-zkl ~]# chmod +x 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rwx-wxr-x 1 root root 0 11月 8 16:17 1.txt
案例7.所有位置减去x权限
[root@oldboy-zkl ~]# chmod -x 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rw--w-r-- 1 root root 0 11月 8 16:17 1.txt
案例8.对所有位置增加w权限
[root@oldboy-zkl ~]# chmod +w 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rw--w-r-- 1 root root 0 11月 8 16:17 1.txt
案例9.对所有的位置减少w权限使用a
[root@oldboy-zkl ~]# chmod a-w 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-r-----r-- 1 root root 0 11月 8 16:17 1.txt
小结: 使用ugo方式来对文件进行授权
chmod u+w # 授权属主位w权限
chmod u-w # 属主位减少w权限
chmod ug+x # 属主和属组增加x权限
chmod ugo+x # 所有位增加x权限
chmod +x 所有位增加x权限
chmod a+x 所有位增加x权限
chmod g=w 去掉原来的权限,重新增加w权限
2.使用数字的方式进行授权
r # 4
w # 2
x # 1
语法结构
chmod 644 file # 授权文件为644权限
案例1.授权文件权限为rw-r-xr-- 权限
[root@oldboy-zkl ~]# chmod 654 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rw-r-xr-- 1 root root 0 11月 8 16:17 1.txt
案例2.授权文件权限为rw------- 权限
[root@oldboy-zkl ~]# chmod 600 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
-rw------- 1 root root 0 11月 8 16:17 1.txt
案例3.授权文件权限为 rw-r--r-- 权限
[root@oldboy-zkl ~]# ll
总用量 0
-rw-r--r-- 1 root root 0 11月 8 16:17 1.txt
案例4.授权文件权限为---------权限
[root@oldboy-zkl ~]# chmod 000 1.txt
[root@oldboy-zkl ~]# ll
总用量 0
---------- 1 root root 0 11月 8 16:17 1.txt
# 经常使用到的授权数字
644 rw-r--r--
755 rwxr-xr-x
600 rw-------
chmod # 递归授权文件的属主属组为600权限
参数选项:
-R # 递归授权 比较危险 别用来修改目录
[root@oldboyedu ~]# chmod 644 oldboy/*
[root@oldboyedu ~]#
[root@oldboyedu ~]# ll oldboy
总用量 0
-rw-r--r-- 1 oldboy oldboy 0 11月 11 10:13 1.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 11 10:13 2.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 11 10:13 3.txt
四、rwx对于文件的作用
使用root账号执行命令
使用root账号执行命令
[root@oldboyedu ~]# mkdir /oldboy/
[root@oldboyedu ~]# touch /oldboy/{1..3}.txt
[root@oldboyedu ~]# ll /oldboy/
[root@oldboy-zkl ~]# ll /oldboy/
总用量 0
-rw-r--r-- 1 root root 0 11月 8 17:10 1.txt
-rw-r--r-- 1 root root 0 11月 8 17:10 2.txt
-rw-r--r-- 1 root root 0 11月 8 17:10 3.txt
[root@oldboy-zkl ~]# chown oldboy.oldboy /oldboy/*
[root@oldboy-zkl /oldboy]# ll
总用量 0
-rw-r--r-- 1 oldboy oldboy 0 11月 8 17:10 1.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 17:10 2.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 17:10 3.txt
[root@oldboy-zkl /oldboy]# echo pwd > 1.txt
[root@oldboy-zkl /oldboy]# cat 1.txt
pwd
开始测试r对于文件的作用
[root@oldboy-zkl /oldboy]# chmod u=r 1.txt
[root@oldboy-zkl /oldboy]# ll
总用量 4
-r--r--r-- 1 oldboy oldboy 4 11月 8 18:20 1.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 17:10 2.txt
-rw-r--r-- 1 oldboy oldboy 0 11月 8 17:10 3.txt
[root@oldboy-zkl /oldboy]# cat 1.txt
pwd
r对于文件的作用:
1.可读
2.不可写 但是可以强制写入
3.不能执行
4.不能删除 因为删除是由目录的权限控制的
[oldboy@oldboyedu oldboy]$ cp /etc/passwd . # 是因为啥没有啥权限?
[oldboy@oldboy-zkl /oldboy]$ ll /etc/passwd
-rw-r--r-- 1 root root 1977 11月 8 09:54 /etc/passwd
[oldboy@oldboy-zkl /oldboy]$ cp /etc/passwd .
cp: 无法创建普通文件'./passwd': 权限不够
[oldboy@oldboy-zkl /oldboy]$ ll -d /oldboy/
drwxr-xr-x 2 root root 60 11月 8 17:10 /oldboy/ #oldboy对于目录/oldboy/没有w权限 不能创建文文件
w对于文件的作用
[oldboy@oldboy-zkl /oldboy]$ chmod u=w 1.txt
1.不能查看文件内容
2.不能使用vim方式写入 只能使用echo 追加内容
3.不能执行
x对于文件的作用:
[root@oldboyedu oldboy]# chmod u=x 1.txt
[root@oldboyedu oldboy]# ll 1.txt
---xr--r-- 1 oldboy oldboy 7 11月 11 11:09 1.txt
文件只有一个x啥都不能干
文件可以正常查看写入必须有rw权限
[oldboy@oldboyedu oldboy]$ll 1.txt
-rw-r--r-- 1 oldboy oldboy 7 11月 11 10:57 1.txt
文件可以正常执行必须有r-x权限
[root@oldboyedu oldboy]# chmod u=rx 1.txt
[root@oldboyedu oldboy]# ll 1.txt
-r-xr--r-- 1 oldboy oldboy 7 11月 11 11:09 1.txt
总结:
1. 1个r对于文件有作用,只读
2. rw对于文件是最高权限可读写
3. r和x对于文件是有执行的权限
4. rwx脚本拥有最高的权限
对于文件来讲最高权限为666 所有位置都可读写
五、rwx对于目录的作用
修改/oldboy目录属主属组为oldboy用户
[oldboy@oldboy-zkl /oldboy]$ ll -d /oldboy/
drwxr-xr-x 2 oldboy oldboy 60 11月 8 17:10 /oldboy/
r权限对于目录的作用
[oldboy@oldboy-zkl /oldboy]$ chmod u=r /oldboy/
[oldboy@oldboy-zkl /oldboy]$ ll -d /oldboy/
dr--r-xr-x 2 oldboy oldboy 60 11月 8 17:10 /oldboy/
1.目录只有r权限 啥都不能干。
w对于目录的作用:
[oldboy@oldboy-zkl ~]$ chmod u=w /oldboy/
1.目录只有w权限 啥都不能干。
x对于目录的作用:
[oldboy@oldboy-zkl ~]$ chmod u=x /oldboy/
1.x控制是否可以cd到目录下
2.没有其他任何权限
目录权限的常用组合方式:
1.r-x组合作用 可以进入到目录可以查看目录下所有的文件信息 能不能看文件内容具体看文件的权限
2.r-x组合不能在目录下删除 创建 改名等动作
3.rwx组合目录的最高权限可以进入可以增删改查
六、umask值
masku 作用决定文件或目录默认创建时的权限
默认文件的权限:644
默认目录的权限:755
[oldboy@oldboy-zkl /oldboy]$ umask
0022
文件默认权限: 是由文件的最高权限666减去umask值得到的
666
-022
=644
目录默认权限: 是由目录的最高权限777减去umask默认的值
777
-022
=755
案例1.umask值修改为044
案例1.umask值修改为044
文件权限: 666-044=622
目录权限: 777-044=733
[root@oldboyedu ~]# umask 044
[root@oldboyedu ~]# umask
0044
案例2.umask值修改为032
如果umask值存在奇数位,文件相减后再奇数位置+1,目录正常相减
[root@oldboyedu ~]# umask 032
[root@oldboyedu ~]# umask
0032
文件权限: 666-032=634+010=644
目录权限: 777-032=745
七、隐藏权限位
#查看隐藏权限位
[oldboy@oldboy-zkl /oldboy]$ lsattr 1.txt
-------------------- 1.txt
#增加a隐藏权限 作用只能追加内容到文件中
[root@oldboy-zkl /oldboy]# chattr +a 1.txt
[root@oldboy-zkl /oldboy]# lsattr 1.txt
-----a-------------- 1.txt
# 去掉a隐藏权限
[root@oldboy-zkl /oldboy]# chattr -a 1.txt
[root@oldboy-zkl /oldboy]# lsattr 1.txt
-------------------- 1.txt
i 无敌的 除了查看啥都不能干
[root@oldboyedu ~]# chattr +i a.txt
[root@oldboyedu ~]# lsattr a.txt
-------------------- a.txt
在企业中发现文件可能没有隐藏权限,但是还是无法操作,因为第三方安全软件对文件做了保护措施。
八、特殊权限位
suid set uid 4# 作用 在用户执行命令的时候相当于属主的权限去执行。
chmod u+s /usr/bin/rm
[root@oldboy-zkl /etc]# stat /usr/bin/rm
文件:“/usr/bin/rm”
大小:67840 块:136 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67373557 硬链接:1
权限:(4755/-rwsr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-11-08 03:36:02.321641043 +0800
最近更改:2022-04-21 15:20:32.000000000 +0800
最近改动:2024-11-08 18:54:34.341304626 +0800
创建时间:-
需要我们给属主的位置增加s权限。任何人使用命令的时候相当于命令的属主的权限。
sgid 2 # 执行命令的时候相当于命令属组的权限运行。
sticky粘滞位 1 #
创建共享目录 所有人都可以在改目录下创建文件,但只能管理自己创建的文件
重点小结:
1.rwx含义
2.rwx对应的数字
3.rwx对应文件的权限
4.rwx对应目录的权限
5.umask 了解
6.隐藏权限位 了解
7.特殊权限位 了解
都可以解决权限拒绝的提示。都会呈现到二阶段的服务日志中。
15——正则表达式
一、什么是正则表达式
- 正则表达式是为了处理大量的文字|文本|字符串而定义的一套规则和方法。
- 通过定义的这些特殊符号进行辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
- Linux正则表达式一般行为单位进行处理的。
- 简单说就是:
- 为处理大量文本|字符串而定义的一套规则和方法。
- 以行为单位出来,一次处理一行。
二、为什么要使用正则表达式
- linux运维工作 大量过滤(找东西)**日志工作。化繁为简。
- 简单,高效,易用。
- 正则表达式高级工具:三剑客 都支持。
注意事项:
- 正则表达式应用非常广泛,存在于各种语言中,php perl python grep sed awk 支持。
- 但现在学的是Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep)、sed、awk。-->正则表达式通常只有awk、sed、grep能使用
- 正则表达式和通配符有本质区别
三、正则表达式的分类
POSIX规范将正则表达式的分为了两种
1) 基本正则表达式(BRE,basic regular expression)
2)高级功能:扩展正则表达式(ERE,extended regular expression)
四、基本正则表达式常用符号
^ #以什么开头;"^my" 表示以my单词开头的行
$ #以什么结尾;"m$" 表示以m结尾的行
^$ #组合符号,表示空行,^$之间为空表示空行
. #匹配任意的单个字符,匹配空格,不匹配空行
\ #转义字符,让后面的一个特殊字符失效
* #匹配前一个字符(连续出现)0次或0次以上
.* #组合符号,匹配所有字符
[abc] #匹配[]内包含的任意一个字符a或b或c
[a-z] #配置[]内包含的a-z的任意一个字符
[0-9] #匹配[]内包含的0-9的任意一个数字
[^abc] #取反,表示匹配除了a b c这三个字符以外的其他字符
五、基本正则表达式
5.1 ^ Word 找以Word开头的行
[root@zkl ~]# grep '^my' zkl.txt
my qq is 123456.
my phone is 11111111111.
5.2m$ 查找文件内以m结尾的行
[root@zkl ~]# grep 'm$' zkl.txt
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
5.3查找文件的空格' '
[root@zkl ~]# cat -A zkl.txt #使用cat -A 在文件的末尾显示$
I am zkl!$
I teach linux.$
test123456789asd123456789$
$
I like play games,basketball,football.$
#I like Vegetables Milk$
$my blog is https:#www.zkl.com$
#baidu site is https:#www.baidu.com$
my qq is 123456.$
my phone is 11111111111.$
5.4^$ 查找并排除空行
[root@zkl ~]# grep -v '^$' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.5 . 匹配任意一个字符 不会匹配到空行
[root@zkl ~]# grep '.' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep '.' zkl.txt -o #加上 -o 查看每次匹配到什么
I
a
m
z
k
l
!
5.6 * 前一个字符连续出现了0次或0次以上
[root@zkl ~]# grep '1*' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.7.* 匹配所有字符
[root@zkl ~]# grep '.*' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
#贪婪匹配
[root@zkl ~]# grep '^.*m' zkl.txt
I am zkl!
I like play games,basketball,football.
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep 'm.*$' zkl.txt
I am zkl!
I like play games,basketball,football.
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.8 \ 撬棍 转义字符
[root@zkl ~]# grep '\.$' zkl.txt
I teach linux.
I like play games,basketball,football.
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep '.$' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.9[] 匹配[]内包含的任意一个字符、对特殊符号还原本意
[root@zkl ~]# grep [abc$] zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
5.10[^] 取反 匹配除了[]内的任意其他字符
[root@zkl ~]# grep [^abc] zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
六、扩展正则表达式常用符号
+ #匹配前面一个字符出现1次或多次
[:/]+ #匹配前面括号内的":"或"/"字符1次或多次
? #匹配前面一个字符出现0次或1次
| #表示或者
() #分组过滤,被括起来的内容表示一个整体,另外()中的内容可以被后面的\n引用,n为数字,表示引用第几个括号中的内容
\n #n代表数字,表示引用前面第几个()中的内容,例如(abc)\1 表示匹配abcabc
a{n,m} #匹配前面一个字符最少n次,最多m次
a{n,} #匹配前面一个字符最少n次
a{,m} #匹配前面一个字符最多m次
a{n} #匹配前面一个字符刚好n次
七、扩展正则表达式
7.1 + 匹配前面一个字符出现1次或多次
[root@zkl ~]# egrep '1+' zkl.txt
test123456789asd123456789
my qq is 123456.
my phone is 11111111111.
7.2 ?匹配前面一个字符出现0次或1次
[root@zkl ~]# egrep 'a?' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
my qq is 123456.
my phone is 11111111111.
7.3 | 或者
[root@zkl ~]# egrep 'a|b' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
[root@zkl ~]# egrep '^$|^#' zkl.txt # 匹配文件的空行和以井号开头的 经常用来过滤文件生效的行需要-v取反
#I like Vegetables Milk
#baidu site is https://www.baidu.com
7.4 {} 匹配前面一个字符最少n次,最多m次
[root@zkl ~]# egrep '1{2,3}' zkl.txt
my phone is 11111111111.
7.5() 分组过滤
[root@zkl ~]# egrep '(w)\1' zkl.txt
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
[root@zkl ~]# egrep '(123).*\1' zkl.txt
test123456789asd123456789
16——三剑客——sed
一、grep
参数选项
-i #不区分大小
-v #取反
-w #精确过滤
-r #递归过滤目录下所有目录和文件
-E #egrep
-o #匹配过程
-c #统计单词出现行数
-n #过滤并显示行号
-A # 过滤到内容往下2行
-B # 过滤到内容往上2行
-C # 过滤到内容上下各2行
二、sed
1.取行
语法结构
sed '模式+动作' file #直接处理文本,效率较高
cat file | sed '模式+动作' #效率较低
其他命令的结果|sed 对显示到屏幕的内容进行处理
模式 : 找谁,按照行 模糊过滤查找文件内容
动作 : 找到后干啥 显示 删除 替换 增加内容
sed按照指定行查找
语法结构
sed -n ‘np’ file #n为数字 p为print输出结果 有p就有n
参数选项
-n #取消默认输出
-r #支持扩展正则
-i #修改源文件
案例一:只显示文件中的第3行
[root@zkl ~]# sed -n '3p' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
案例2.显示文件中的最后一行
[root@zkl ~]# sed -n '$p' passwd
operator:x:11:0:operator:/root:/sbin/nologin
案例3.显示文件中的第3到第5行使用逗号分隔
[root@zkl ~]# sed -n '3,5p' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例4.显示文件中第6行到文件的最后一行
[root@zkl ~]# sed -n '6,$p' passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例五:取出指定的第2行和第5行
[root@zkl ~]# sed -n '2p;5p' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sed 模糊过滤查找内容
语法格式
sed -n '/root/p' #过滤包含root的行
sed -n '//,//' #过滤区间范围的字符串,经常用来过滤日志中的时间范围
案例1.查找包含root的行
[root@zkl ~]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
案例2.查找包含adm的行
[root@zkl ~]# sed -n '/adm/p' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
sed中使用正则
案例3.查找以r开头的行
[root@zkl ~]# sed -n '/^r/p' passwd
root:x:0:0:root:/root:/bin/bash
案例4.查找以h结尾的行
[root@zkl ~]# sed -n '/h$/p' passwd
root:x:0:0:root:/root:/bin/bash
案例5.查找文件中以r开头或者以a开头的行
[root@zkl ~]# sed -rn '/^r|^a/p' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@zkl ~]# sed -rn '/^[ra]/p' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例6.查找出bin和adm之间的行
[root@zkl ~]# sed -rn '/^bin/,/^adm/p' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
注意: 如果有两个结尾则只匹配到第一个
[root@zkl ~]# sed -n '/root/,/adm/p' 1.txt
root xxxxxxxxxxx
123
adm qqqqqqqqq
[root@zkl ~]# cat 1.txt
root xxxxxxxxxxx
123
adm qqqqqqqqq
old ccccccccc
test uuuuuuuu
adm oooooooo
2222222
#如果找不到结尾则输出文件的全部
[root@zkl ~]# sed -n '/root/,/help/p' 1.txt
root xxxxxxxxxxx
123
adm qqqqqqqqq
old ccccccccc
test uuuuuuuu
adm oooooooo
2222222
# 成对出现 则会匹配输出两次
[root@zkl ~]# sed -n '/root/,/adm/p' 1.txt
root xxxxxxxxxxx
123
adm qqqqqqqqq
root xxxxxxxxxxx
test uuuuuuuu
adm oooooooo
笔试题: 查找日志中的时间范围
[root@zkl ~]# cat /var/log/secure |sed -n '/^Nov 9 10:20:22/,/^Nov 9 11:45:09/p'
Nov 9 10:20:22 oldboy-zkl su[19906]: pam_unix(su-l:session): session closed for user root
Nov 9 10:20:23 oldboy-zkl sshd[20788]: pam_unix(sshd:session): session opened for user zhou(uid=1000) by (uid=0)
Nov 9 10:20:26 oldboy-zkl sudo[20851]: pam_unix(sudo:session): session opened for user root(uid=0) by zhou(uid=0)
Nov 9 10:20:31 oldboy-zkl su[20856]: pam_unix(su-l:session): session closed for user oldboy
Nov 9 10:20:34 oldboy-zkl sudo[20914]: zhou : TTY=pts/2 ; PWD=/home/zhou ; USER=root ; COMMAND=/usr/bin/su -
Nov 9 10:22:30 oldboy-zkl su[20919]: pam_unix(su-l:session): session closed for user root
Nov 9 10:22:30 oldboy-zkl sudo[20914]: pam_unix(sudo:session): session closed for user root
Nov 9 10:22:30 oldboy-zkl sshd[20788]: pam_unix(sshd:session): session closed for user zhou
Nov 9 10:22:32 oldboy-zkl sshd[21053]: pam_unix(sshd:session): session opened for user zhou(uid=1000) by (uid=0)
Nov 9 10:22:34 oldboy-zkl sudo[21117]: zhou : TTY=pts/2 ; PWD=/home/zhou ; USER=root ; COMMAND=/usr/bin/su -
Nov 9 10:22:34 oldboy-zkl sudo[21117]: pam_unix(sudo:session): session opened for user root(uid=0) by zhou(uid=0)
Nov 9 10:22:34 oldboy-zkl su[21122]: pam_unix(su-l:session): session opened for user root(uid=0) by zhou(uid=0)
Nov 9 11:45:01 oldboy-zkl sshd[21532]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=root
Nov 9 11:45:09 oldboy-zkl sshd[21551]: pam_unix(sshd:session): session opened for user zhou(uid=1000) by (uid=0)
2.删除行
sed 删除 默认临时输出到屏幕上不修改源文件
需修改源文件 加-i
语法结构
sed '3d' #删除指定行
sed '3,5d' #删除第3到5行
sed '/root/d' #删除包含root的行
sed '/$n/d' #正则 删除以n结尾的行
[root@zkl ~]# cat > 2.txt << EOF
> 1111111
> 2222222
> 3333333
> 4444444
> 5555555
> EOF
案例1.删除第3行
[root@zkl ~]# sed '3d' 2.txt
1111111
2222222
4444444
5555555
案例2. 删除源文件的第3行
[root@zkl ~]# sed -i '3d' 2.txt
[root@zkl ~]# cat 2.txt
1111111
2222222
4444444
5555555
案例3.删除文件的第2-4行
[root@zkl ~]# sed '2,4d' 2.txt
1111111
5555555
案例4.删除包含root的行 使用passwd前10行的内容练习
[root@zkl ~]# sed '/root/d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
案例5.删除以a开头的行
[root@zkl ~]# sed '/^a/d' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例6.删除以n结尾的行
[root@zkl ~]# sed '/n$/d' passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
案例7.删除从root开始到adm之间的行
[root@zkl ~]# sed '/root/,/adm/d' passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
3.增加内容
sed之增加替换内容
sed '3a' # 在第3行下追加内容
sed '3i' # 在第3行插入内容
sed '3c' # 将第3行完全替换
sed '3w w.txt' # 将第3行保存到新文件中
案例1.在第3行的下面插入test
[root@zkl ~]# sed '3a test' 2.txt
1111111
2222222
3333333
test
4444444
5555555
案例2.在第3行插入test字符
[root@zkl ~]# sed '3i test' 2.txt
1111111
2222222
test
3333333
4444444
5555555
案例3.将第3行完全替换成test字符
[root@zkl ~]# sed '3c test' 2.txt
1111111
2222222
test
4444444
5555555
案例4.将第17行进行替换
sed '17c Port 22' /etc/ssh/sshd_config
案例5.将文件的第3行保存到新文件中
[root@zkl ~]# sed '3w w.txt' 2.txt
1111111
2222222
3333333
4444444
5555555
[root@zkl ~]# cat w.txt
3333333
[root@zkl ~]# sed '3,5w w.txt' 2.txt
1111111
2222222
3333333
4444444
5555555
[root@zkl ~]# cat w.txt
3333333
4444444
5555555
# 模糊查找到的内容保存到w.txt
[root@zkl ~]# sed -n '/root/,/adm/p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@zkl ~]# sed -n '/root/,/adm/p' passwd > 3.txt
[root@zkl ~]# cat 3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
4.替换内容
sed 替换
语法结构:
sed 's#替换谁#替换成谁#g'
sed 's///g'
sed 's@@@g'
案例1.将root替换成oldboy
[root@zkl ~]# sed 's#root#oldboy#g' passwd
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
案例2.替换每行出现的第一个单词
[root@oldboyedu ~]# sed 's#root#oldboy#' passwd
oldboy:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
oldboy:x:11:0:operator:/root:/sbin/nologin
案例3.替换文件中的: 为-
[root@zkl ~]# sed 's#:#-#g' passwd
root-x-0-0-root-/root-/bin/bash
bin-x-1-1-bin-/bin-/sbin/nologin
daemon-x-2-2-daemon-/sbin-/sbin/nologin
adm-x-3-4-adm-/var/adm-/sbin/nologin
lp-x-4-7-lp-/var/spool/lpd-/sbin/nologin
sync-x-5-0-sync-/sbin-/bin/sync
shutdown-x-6-0-shutdown-/sbin-/sbin/shutdown
halt-x-7-0-halt-/sbin-/sbin/halt
mail-x-8-12-mail-/var/spool/mail-/sbin/nologin
operator-x-11-0-operator-/root-/sbin/nologin
案例4.替换文件中的:为空格
[root@zkl ~]# sed 's#:# #g' passwd
root x 0 0 root /root /bin/bash
bin x 1 1 bin /bin /sbin/nologin
daemon x 2 2 daemon /sbin /sbin/nologin
案例5.替换文件中的:或者/ 为空格
[root@zkl ~]# sed 's#[:/]# #g' passwd
root x 0 0 root root bin bash
bin x 1 1 bin bin sbin nologin
daemon x 2 2 daemon sbin sbin nologin
[root@zkl ~]# sed -r 's#:|/# #g' passwd
root x 0 0 root root bin bash
bin x 1 1 bin bin sbin nologin
案例6.替换:/为空格
[root@zkl ~]# sed -r 's#:/# #g' passwd
root:x:0:0:root root bin/bash
bin:x:1:1:bin bin sbin/nologin
daemon:x:2:2:daemon sbin sbin/nologin
案例7.删除文件中的a-z
[root@zkl ~]# sed -r 's#[a-z]##g' passwd
::0:0::/://
::1:1::/://
::2:2::/://
案例8.删除a-z之外的所有内容
[root@zkl ~]# sed -r 's#[^a-z]##g' passwd
rootxrootrootbinbash
binxbinbinsbinnologin
[root@zkl ~]# sed -r 's#[^a-z]##g' passwd |grep . -o|sort|uniq -c |sort -rn
37 n
33 o
26 i
21 s
18 b
17 l
17 a
12 t
11 r
[root@zkl ~]# sed -r 's#[:/0-9x]# #g' passwd |xargs -n1|sort |uniq -c |sort -rn
12 sbin
6 nologin
5 bin
4 root
3 var
3 sync
3 shutdown
模式+动作进行替换
先查找 后替换
案例1.将第4行的nologin替换为bash
[root@zkl ~]# sed '4s#nologin#bash#g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例2.将第3行-6行的x替换成A
[root@zkl ~]# sed '3,6s#x#A#g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:A:2:2:daemon:/sbin:/sbin/nologin
adm:A:3:4:adm:/var/adm:/sbin/nologin
lp:A:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:A:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例3.查找到包含root的行将x替换成X
[root@zkl ~]# sed '/root/s#x#X#g' passwd
root:X:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:X:11:0:operator:/root:/sbin/nologin
面试题+笔试题: 文件中test 替换成oldboy
sed 's#test#oldboy#g' file # 修改源文件需要加-i参数
笔试题: 将3-5行进行注释
[root@zkl ~]# sed '3,5s/^/#/g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
指定注释某行
[root@zkl ~]# sed '/^adm/s/^/#/g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
vim批量注释:
ctrl+v 进入可视块模式
然后键盘上下键选择
选择后按大写的I 进入编辑模式
然后输入内容
完成后按两次ESC键即可
vim中替换动作
:s/root/oldboy/g # 只替换光标所在行的所有root
:%s/root/oldboy/g # 将文件中所有的root替换成oldboy
5.后向引用
sed后向引用
语法结构:
sed -r 's#(正则)#\1#g' # \1获取第一个括号中的内容 \2获取第2个括号中的内容
[root@zkl ~]# echo test oldboy |sed -r 's#(test) (oldboy)#\1#g'
test
案例2.获取ip地址
[root@zkl ~]# ifconfig ens33 | sed -rn '2s#^.*inet (.*) netmask.*#\1#gp'
10.0.0.200
案例3.创建用户
[root@zkl ~]# echo test{1..3}|xargs -n1|sed -r 's#(.*)#useradd \1;echo oldboy123.com|passwd --stdin \1 #g'
useradd test1;echo oldboy123.com|passwd --stdin test1
useradd test2;echo oldboy123.com|passwd --stdin test2
useradd test3;echo oldboy123.com|passwd --stdin test3
17——三剑客老大——awk
一、awk作用 GNU/AWK——编程语言
语法结构:
awk '模式' file #默认就是输出 不需要加动作
awk '模式+动作' file
1.取行
语法结构:
sed -n '3p' file
awk 'NR==3' file
符号
== 等于第几行
> 大于第几行
>= 大于等于第几行
< 小于第几行
<= 小于等于第几行
!= 不等
&& 并且 类似sed的 1,3
|| 或者
案例1.awk取出文件的第3行
[root@zkl ~]# awk 'NR==3' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
案例2.awk取出文件大于7的行
[root@zkl ~]# awk 'NR>7' passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例3.awk取出文件中小于3的行
[root@zkl ~]# awk 'NR<3' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
案例4.awk取出不等于1的行
[root@zkl ~]# awk 'NR!=1' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例5.查找出大于3并且小于5的行
[root@zkl ~]# awk 'NR>3&&NR<5' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例6.输出文件中的第1行或者第5行
[root@zkl ~]# awk 'NR==1||NR==5' passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2.模糊过滤
语法结构:支持正则
sed -n '//p' file
awk '//' file #模糊查找文件中的字符串
awk '//,//' file #区间范围
案例1.找出包含root的行
[root@zkl ~]# awk '/root/' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
案例2.找出包含bash的行
[root@zkl ~]# awk '/bash/' passwd
root:x:0:0:root:/root:/bin/bash
案例3.找出以a开头的行
[root@zkl ~]# awk '/^a/' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例4.找出文件中包含root或者adm的行
[root@zkl ~]# awk '/root|adm/' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例5.查找出以s或者b开头的行
[root@zkl ~]# awk '/^s|^b/' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
案例6.按照区间过滤 过滤日志中的时间范围
[root@zkl ~]# awk '/adm/,/halt/' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
3.取列
语法结构:
awk '{print $1}' file
默认按照空格或者tab键分隔成列
如果没有空格或tab键,awk会将整行看成一列
在awk中一切在动作中的字符串都被看做是变量,加上双引号则视为普通的字符串
awk 的内置变量
$0 # 表示整行
$1 # 表示文件的第1列
$2 # 表示文件的第2列
, # 逗号表示空格
NF # 表示每一行最后一列的列号
案例1.取出文件中的第一列
awk '{print $1}' file
案例2.取出文件中的第3列和第1列
awk '{print $1,$3}' file
取出文件中的最后1列
awk '{print $NF}'
awk '{print $(NF-1)}' #倒数第二列
awk指定分隔符 #注意如果指定了分隔符 默认的空格和tab键分隔符失效
语法结构:
awk -F: ‘{print $1}’
awk -F ":" ‘{print $1}’
案例1.取出passwd中的用户名称 以冒号分隔
[root@zkl ~]# awk -F: '{print $1}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
案例3.取出passwd中的第一个和最后一列 用户名和bash解释器
[root@zkl ~]# awk -F ":" '{print $1,$NF}' passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
案例4.指定多个字符为分隔符
[root@zkl ~]# awk -F ":/" '{print $2}' passwd
root
bin
sbin
var/adm
var/spool/lpd
sbin
sbin
sbin
var/spool/mail
root
案例5.指定冒号或者/分隔符
[root@zkl ~]# awk -F "[:/]" '{print $2}' passwd
[root@zkl ~]# awk -F ":|/" '{print $2}' passwd
案例6.使用正则+号
[root@zkl ~]# awk -F "[:/]+" '{print $2}' passwd
awk模式+动作
模式: 通过NR找出指定的行 awk 'NR==5'
通过模糊过滤的方式找出行 awk '/root/'
awk 'NR==5{print $1}'
案例1.输出文件中第2行的第2列
[root@zkl ~]# awk 'NR==2{print $2}' 1.txt
b
案例2.输出文件中的第大于第2行的最后一列内容
[root@zkl ~]# awk 'NR>2{print $NF}' 1.txt
d
c
案例3.指定分隔符输出第1行的第一列
[root@zkl ~]# awk -F: 'NR==1{print $1}' 1.txt
a
案例4.输出包含adm的行的 第3列
[root@oldboyedu ~]# awk -F: '/adm/{print $3}' passwd
4.判断比较
比较表达式
按照字符比对查找行
案例1.查找文件中第1列等于root的行
[root@oldboyedu ~]# awk -F: '$1=="root"' passwd
root:x:0:0:root:/root:/bin/bash
案例2.使用正则匹配字符串
[root@oldboyedu ~]# awk -F: '$1 ~ "^r"' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# awk -F: '$1 ~ "n$"' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
案例3.匹配最后一列以n结尾的行
[root@oldboyedu ~]# awk -F: '$NF ~ "n$"' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:99:4:adm:/var/adm:/sbin/nologin
案例4.对root的行进行取反
[root@oldboyedu ~]# awk -F: '$1!="root"' passwd
案例5.对开头是r的行进行取反
[root@oldboyedu ~]# awk -F: '$1 !~ "^r"' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:99:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
数字比对
案例1.第3列等于0的行
[root@oldboyedu ~]# awk -F: '$3==0' passwd
root:x:0:0:root:/root:/bin/bash
案例2.第3列大于5的行
[root@oldboyedu ~]# awk -F: '$3>5' passwd
adm:x:99:4:adm:/var/adm:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
adm:x:30:4:adm:/var/adm:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例3.考试成绩取出大于90分的
[root@oldboyedu ~]# cat count.txt
张三 Linux96 100
李四 Linux96 22
老王 Linux96 33
张赛 Linux96 44
[root@oldboyedu ~]# awk '$3>=90' count.txt
张三 Linux96 100
统计不及格的同学
[root@oldboyedu ~]# awk '$3<60' count.txt
李四 Linux96 22
老王 Linux96 33
张赛 Linux96 44
[root@oldboyedu ~]# awk '$3>=90' count.txt |wc -l
1
[root@oldboyedu ~]# awk '$3<60' count.txt |wc -l
3
[root@oldboyedu ~]# cat count.txt
张三 Linux96 100
李四 Linux96 22
老王 Linux96 33
张赛 Linux96 44
张马 Linux96 77
[root@oldboyedu ~]# awk '$3>60&&$3<90' count.txt
张马 Linux96 77
了解:
[root@oldboyedu ~]# awk -F: 'BEGIN{print "用户名称"}{print $1}' passwd
用户名称
root
bin
daemon
adm
lp
[root@oldboyedu ~]# awk -F: 'BEGIN{print "用户名称"}{print $1}END{print "ok..."}' passwd
用户名称
root
bin
operator
ok...
[root@oldboyedu ~]# awk 'BEGIN{print 10+10}'
20
[root@oldboyedu ~]# awk 'BEGIN{print 10-10}'
0
[root@oldboyedu ~]# awk 'BEGIN{print 10*10}'
100
小结
1.awk取行 ****
awk 'NR==3' file
df -h|awk 'NR==5'
NR==3
NR!=3
NR>3
NR>=3
NR<3
NR<=3
&&
awk 'NR>3&&NR<6' file
||
awk 'NR==5||NR>8' file
2.awk模糊过滤 ****
awk '//' file
awk '//,//' file # 区间范围
awk '/^/' file # 支持正则 ^ $ | []
3.awk取列 ****
默认空格tab键为分隔符
$1 $2
awk '{print $1}' file
awk '{print $1,$2}' file
awk '{print $NF}' file # 取出文件中最后一列
awk '{print $(NF-1)}' file # 取出文件中倒数第2列
4.awk指定分隔符 ****
awk -F
awk -F:
awk -F ":" '{print $1}' file
awk -F "[:/]" 指定任意单个
awk -F "[:/]+" 前字符出现连续1一次及以上作为1个字符串
awk -Fa # 指定a为分隔符
5.awk模式+动作 ****
awk 'NR==3{print $1}' # 第3行的第1列
awk 'NR>3&&NR<6{print $NF}' # 取出文件中大于3小于6行的最后一列
awk '/root/{print $1,$NF}' # 将包含root行的第1列和最后一列
awk '$3>3{print $3}' # 大于3的行的第3列
6.awk数值比对 字符串比对 ****
awk '$3==0'
awk '$3>0'
awk '$3>80'
awk '$3<60' #统计不及格的
awk -F: '$1=="root"'
awk -F: '$1 ~ /^r/'
awk -F: '$NF ~ /n$/'
[root@oldboyedu ~]# df -h|awk '/\/$/'
/dev/mapper/klas-root 47G 3.9G 44G 9% /
[root@oldboyedu ~]# df -h|awk '/\/$/{print $(NF-1)}'
9%
5.支持if for while 数组
6.格式化输出
18——软件安装及find的使用
一、软件安装
1.kylin系统
1.yum 安装——网络环境自动安装、自动解决依赖
语法结构
yum -y install packname #安装软件
安装wget
[root@zkl ~]# yum install -y wget
yum -y remove packname #卸载软件
卸载wget
[root@zkl ~]# yum -y remove wget
如果是centos需要将默认的仓库地址更改成国内的仓库地址,麒麟系统不需要修改。 #阿里云镜像站
1.备份默认的仓库
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.下载新的仓库到配置目录下
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
注意: 有些命令的安装时其他的包名
案例1.安装ifconfig命令 ifconfig在net-tools网络工具包中。
安装ifcongfig
[root@zkl ~]# yum -y install net-tools
案例2.安装sl命令
默认的仓库中没有sl命令,需要配置额外的扩展仓库 epel仓库
1. 备份(如有配置其他epel源)
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
2. 下载新repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
3.安装sl命令
[root@zkl ~]# yum -y install sl
4.安装cowsy命令
[root@zkl ~]# yum -y install cowsay
[root@zkl ~]# animalsay "呵呵哒"
案例3.卸载正确的软件包的名称
[root@zkl ~]# yum -y remove ifconfig #使用ifconfig名无法正确卸载
未找到匹配的参数: ifconfig
没有软件包需要移除。
依赖关系解决。
无需任何处理。
完毕!
[root@zkl ~]# yum -y remove net-tools
[root@zkl ~]# ifconfig
-bash: /usr/sbin/ifconfig: 没有那个文件或目录
案例4.查看软件仓库中可用的软件包
查看yum仓库中可以使用的软件包
[root@zkl ~]# yum list
案例5.yum update # 更新仓库 需要的时候在使用。
案例6.yum -y reinstall # 重新安装 类似windows的覆盖安装。遇到命令无法正常使用又无法卸载情况
案例7.yum clean all # 清理仓库的缓存 无法正常下载软件的时候尝试清理缓存
[root@zkl ~]# yum clean all
21 文件已删除
2.rmp安装
无网络环境基于rmp包安装,手动解决依赖问题
语法结构
rpm -ivh xx.rpm # 使用rpm安装rpm包 类似windows下载.exe的安装文件 手动安装
-i # install 安装
-v # verbose 显示过程
-h # 显示进度
rpm -e xx # 卸载软件
-qa # 查看系统已经安装了哪些软件 rpm -qa
-qa wget # 查看wget是否安装
案例1.一台没有网络的服务器安装wget
1.通过有网络的服务器下载wget命令包和依赖
# --downloadonly 只下载不安装
# --downloaddir=./ 将下载的包存放到指定的目录下
[root@zkl ~]# yum -y install --downloadonly --downloaddir=./ wget
2.将下载的软件包上传到没有网络的服务器上 lrzsz
[root@zkl ~]# ll
总用量 672
-rw-r--r-- 1 root root 27188 11月 17 18:53 libmetalink-0.1.3-8.ky10.x86_64.rpm
-rw-r--r-- 1 root root 658908 11月 17 18:53 wget-1.20.3-5.ky10.x86_64.rpm
3.安装wget之前需要先安装依赖
[root@zkl ~]# rpm -ivh libmetalink-0.1.3-8.ky10.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:libmetalink-0.1.3-8.ky10 ################################# [100%]
[root@zkl ~]# rpm -ivh wget-1.20.3-5.ky10.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:wget-1.20.3-5.ky10 ################################# [100%]
[root@zkl ~]# wget
wget:未指定 URL
用法: wget [选项]... [URL]...
请尝试使用“wget --help”查看更多的选项。
4.卸载wget命令
[root@zkl ~]# rpm -e wget-1.20.3-5.ky10.x86_64
[root@zkl ~]# wget
-bash: /usr/bin/wget: 没有那个文件或目录
案例2.查看软件是否安装 -qa
[root@zkl ~]# rpm -qa wget
wget-1.20.3-5.ky10.x86_64
[root@zkl ~]# rpm -qa lrzsz
lrzsz-0.12.20-46.ky10.x86_64
案例3.查看软件安装了哪些文件
[root@zkl ~]# rpm -ql lrzsz
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/lib/.build-id
/usr/lib/.build-id/20
/usr/lib/.build-id/20/325ee392d68bb002c7dbf63d66c55125b67e51
/usr/lib/.build-id/20/325ee392d68bb002c7dbf63d66c55125b67e51.1
/usr/lib/.build-id/20/325ee392d68bb002c7dbf63d66c55125b67e51.2
/usr/lib/.build-id/79
/usr/lib/.build-id/79/6e612f4c0a579446c5505d548f5f287ac882d9
/usr/lib/.build-id/79/6e612f4c0a579446c5505d548f5f287ac882d9.1
/usr/lib/.build-id/79/6e612f4c0a579446c5505d548f5f287ac882d9.2
/usr/share/doc/lrzsz
/usr/share/doc/lrzsz/COPYING
/usr/share/doc/lrzsz/README
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz
案例4.查看软件的配置文件位置
[root@zkl ~]# rpm -qc wget
/etc/wgetrc
案例5.查看软件是否安装的时候 忘记了软件叫啥模糊的记得一点
[root@zkl ~]# rpm -qa |grep '^net-to'
net-tools-help-2.0-0.54.ky10.noarch
net-tools-2.0-0.54.ky10.x86_64
3.编译安装
小结
软件安装
- yum -y install packname #安装软件
- yum -y remove packname #卸载软件
- rpm -ivh xxx.rpm #使用rpm包安装软件
- rpm -e xxx #卸载软件时 不要加.rpm后缀
- rpm -qa #显示所有已经安装的软件
- rpm -qa wget lrzsz #查看 wget lrzsz是否已经安装
- 只下载软件不安装 yum -y install --downloadonly --downloaddir=xx wget
ubuntu系统
1.将默认的仓库修改为国内阿里云的地址
root@oldboy-zkl:~# mv /etc/apt/sources.list /opt/
root@oldboy-zkl:~# vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
2. 执行更新操作
root@oldboy-zkl:~# apt update
命令语法:
apt -y install wget
dpkg -i xx.deb # ubt安装类似centos的rpm包
dpkg -l wget # 查看wget是否安装
apt -y remove xx # 卸载
案例1.安装wget命令
root@oldboy-zkl:~# apt -y install wget
案例2.卸载wget命令
root@oldboy-zkl:~# apt -y remove wget
案例3.查看wget命令是否安装
root@oldboy-zkl:~# dpkg -l sl wget
案例4.本地安装.deb的包 类似kylin和centos的.rpm包
root@oldboy:~# apt-get -y install --download-only net-tools
root@oldboy-zkl:~# ll /var/cache/apt/archives/
total 592
drwxr-xr-x 3 root root 12288 Nov 17 11:33 ./
drwxr-xr-x 3 root root 4096 Nov 17 11:33 ../
-rw-r--r-- 1 root root 17120 Jan 13 2021 cmatrix_2.0-3_amd64.deb
-rw-r----- 1 root root 0 Feb 16 2024 lock
-rw-r--r-- 1 root root 204308 Mar 25 2022 net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb
drwx------ 2 _apt root 4096 Nov 17 11:33 partial/
-rw-r--r-- 1 root root 12708 Feb 2 2019 sl_5.02-1_amd64.deb
-rw-r--r-- 1 root root 2798 Sep 17 10:21 ubuntu-server-minimal_1.481.4_amd64.deb
-rw-r--r-- 1 root root 338506 Jun 26 13:27 wget_1.21.2-2ubuntu1.1_amd64.deb
安装deb的包
root@oldboy:~# dpkg -i /var/cache/apt/archives/net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb
root@oldboy-zkl:~# dpkg -i /var/cache/apt/archives/
dpkg: error: archive '/var/cache/apt/archives/' is not a regular file
root@oldboy-zkl:~# dpkg -i /var/cache/apt/archives/net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb
Selecting previously unselected package net-tools.
(Reading database ... 110716 files and directories currently installed.)
Preparing to unpack .../net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb ...
Unpacking net-tools (1.60+git20181103.0eebece-1ubuntu5) ...
Setting up net-tools (1.60+git20181103.0eebece-1ubuntu5) ...
Processing triggers for man-db (2.10.2-1) ...
二、find——查找文件
语法结构
find 在哪里找 找什么类型的 # 格式1
find /data f
find /data 按照名称查找 # 格式2
文件类型
f # 表示普通文件
d # 表示目录
l # 表示链接文件
c # 表示字节设备
b # 表示块设备 /dev/sda 磁盘 光驱
字节设备 —— c
urandom #作用 不停的往外吐 没啥用
[root@zkl ~]# ll /dev/urandom
crw-rw-rw- 1 root root 1, 9 11月 17 08:23 /dev/urandom
/dev/null #黑洞 可以将命令的结果定向到此文件 空
作用: 写脚本执行命令的时候,会根据自己想要输出的内容来定义输出格式。
[root@zkl ~]# ping -c1 -w1 www.baidu.com &> /dev/null
[root@zkl ~]# echo $?
0
[root@zkl ~]# ping -c1 -w1 www.baid333u.com &> /dev/null
[root@zkl ~]# echo $?
2
扩展理解:
[root@oldboyedu ~]# cat for.sh
ping -c1 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 在线..."
else
echo "$1 不在线..."
fi
$? 返回上一条命令的执行结果,0为成功 非0失败。
常用字节文件
/dev/zero
[root@zkl ~]# dd if=/dev/zero of=./1.txt bs=1M count=1000
[root@zkl ~]# ll -h
总用量 1000M
-rw-r--r-- 1 root root 1000M 11月 17 20:00 1.txt
dd # 命令
if # input file 输入文件 /dev/zero输入内容
of # ouput file 输出到哪个文件 1.txt 中
bs # 每次读取的大小 bs=1M 每次在/dev/zero中读取1M的数据
count # 总共读多少次
#通过dd生成一个10M的文件
[root@zkl ~]# dd if=/dev/zero of=./test.txt bs=1M count=10
重点:
/dev/null
/dev/zero
1.find按照文件类型查找
find:
find ./ -type f # 按照文件类型查找
find ./ -type f -o -type d # 使用或者关系查找
-o or # 或者
-a and# 并且 默认就是并且关系
案例1.find按照文件类型查找出所有的普通文件
# 查找出当前目录所有的普通文件 默认为递归查找
[root@zkl /oldboy]# find ./ -type f
./1.txt
./2.txt
./3.txt
./test1/1.log
./test1/2.log
./test1/3.log
./test2/1.log
./test2/2.log
./test2/3.log
./1.TXT
./2.TXT
./3.TXT
./passwd.tar.gz
./test.txt
./gperftools-libs-2.8-1.ky10.x86_64.rpm
./libunwind-1.3.1-3.ky10.x86_64.rpm
案例2.查找出所有的目录文件
[root@zkl /oldboy]# find ./ -type d
./
./test1
./test2
[root@oldboyedu oldboy]# find / -type l
[root@oldboyedu oldboy]# find / -type b
[root@oldboyedu oldboy]# find / -type c
案例3.查找出文件或者是目录的
[root@zkl /oldboy]# find ./ -type f -o -type d
./
./1.txt
./2.txt
./3.txt
./test1
./test1/1.log
./test1/2.log
./test1/3.log
./test2
./test2/1.log
./test2/2.log
./test2/3.log
./1.TXT
./2.TXT
./3.TXT
./passwd.tar.gz
./test.txt
./gperftools-libs-2.8-1.ky10.x86_64.rpm
./libunwind-1.3.1-3.ky10.x86_64.rpm
# 查找出普通文件并且名称为1.txt的
[root@zkl /oldboy]# find ./ -type f -a -name "1.txt"
./1.txt
#查找出目录并且名称是test1
[root@zkl /oldboy]# find ./ -type d -a -name "test1"
./test1
#查找出文件名称*.txt 或者 *.log
[root@zkl /oldboy]# find ./ -name "*.txt" -o -name "*.log"
./1.txt
./2.txt
./3.txt
./test1/1.log
./test1/2.log
./test1/3.log
./test2/1.log
./test2/2.log
./test2/3.log
./test.txt
#按照深度等级查找
[root@zkl /oldboy]# find ./ -maxdepth 1 -name "*.txt" -o -name "*.log"
./1.txt
./2.txt
./3.txt
./test.txt
2.find按照名称查找文件
案例1.查找出文件名称1.txt的
[root@zkl /oldboy]# find ./ -name "1.txt"
./1.txt
案例2.不区分大小写使用 -iname
[root@zkl /oldboy]# find ./ -iname "1.txt"
./1.txt
./1.TXT
[root@zkl /oldboy]# find ./ -iname "[0-9a-z].txt"
./1.txt
./2.txt
./3.txt
./1.TXT
./2.TXT
./3.TXT
* 、[] 在find中代表通配符
3.find按照inode号码查找 (了解)
[root@zkl /oldboy]# ll -i
总用量 1034568
67167382 -rw-r--r-- 1 root root 1048576000 11月 17 20:00 1.txt
69210235 -rw-r--r-- 1 root root 0 11月 17 20:12 1.TXT
68987679 -rw-r--r-- 1 root root 0 11月 17 20:12 2.txt
69210236 -rw-r--r-- 1 root root 0 11月 17 20:12 2.TXT
34166010 -rw-r--r-- 1 oldboy oldboy 0 11月 17 14:28 3.txt
34528056 -rw-r--r-- 1 root root 0 11月 17 14:15 3.TXT
67160186 -rw-r--r-- 1 root root 271828 11月 17 20:12 gperftools-libs-2.8-1.ky10.x86_64.rpm
69210234 -rw-r--r-- 1 root root 56364 11月 17 20:12 libunwind-1.3.1-3.ky10.x86_64.rpm
67402504 -rw-r--r-- 1 root root 283 11月 10 13:17 passwd.tar.gz
1314140 drwxr-xr-x 2 root root 45 11月 17 14:16 test1
34166956 drwxr-xr-x 2 root root 45 11月 17 14:16 test2
67167389 -rw-r--r-- 1 root root 10485760 11月 17 20:03 test.txt
[root@zkl /oldboy]# find ./ -inum 67160186
./gperftools-libs-2.8-1.ky10.x86_64.rpm
4.find按照大小查找文件
语法格式:
find ./ -size 10M # 查找出等于10M的文件
find ./ -size +10M # 查找出大于10M的文件
find ./ -size -10M # 查找出小于10M的文件
案例1.查找出大于10M的文件
[root@zkl /oldboy]# find ./ -size +10M
./1.txt
案例2.查找出等于10M的文件
[root@zkl /oldboy]# find ./ -size 10M
./test.txt
案例3.查找出小于10M的文件
[root@zkl /oldboy]# find ./ -size -10M
./
./2.txt
./3.txt
./test1
./test1/1.log
./test1/2.log
./test1/3.log
./test2
./test2/1.log
./test2/2.log
./test2/3.log
./1.TXT
./2.TXT
./3.TXT
./passwd.tar.gz
./gperftools-libs-2.8-1.ky10.x86_64.rpm
./libunwind-1.3.1-3.ky10.x86_64.rpm
案例4.查找出等于10M或者大于10M的文件
[root@zkl /oldboy]# find ./ -size 10M -o -size +10M
./1.txt
./test.txt
案例5.查找出普通文件并且大于10M的文件
[root@zkl /oldboy]# find ./ -type f -a -size +10M
./1.txt
案例6.查找出文件大于5M 并且小于15M的
[root@zkl /oldboy]# find ./ -size +5M -a -size -15M
./test.txt
# 注意默认就是并且关系可以省略 -a -o不能省略
案例7.查找出大于1M的目录 如果目录大于1M 说明下面已经存在5万+的小文件
[root@zkl /oldboy]# find ./ -type d -a -size +1M
5.find 按照时间查找
语法格式:
三种时间:
atime: 访问时间
mtime: 文件修改时间
ctime: 文件属性修改时间
find ./ -mtime +7 # 7天前修改过的文件
find ./ -mtime -7 # 7天内修改过的文件
find ./ -mtime 0 # 24小时内被修改过的文件
案例1.查找24小时内被修改过的文件
[root@zkl /oldboy]# find ./ -mtime 0
./
./1.txt
./2.txt
./3.txt
./test1
./test1/1.log
./test1/2.log
./test1/3.log
./test2
./test2/1.log
./test2/2.log
./test2/3.log
./1.TXT
./2.TXT
./3.TXT
./test.txt
./gperftools-libs-2.8-1.ky10.x86_64.rpm
./libunwind-1.3.1-3.ky10.x86_64.rpm
案例2.查找出修改时间大于30天前的文件
[root@oldboyedu oldboy]# find ./ -type f -mtime +30
./20081.log
./20082.log
./20083.log
案例3.查找出修改时间大于30天前所有的文件
[root@oldboyedu oldboy]# find ./ -mtime +30
./
./20081.log
./20082.log
./20083.log
./20081
./20082
./20083
时间查找的作用:
1.大于7天或者30天前的文件不用了需要备份或者删除
2.系统中毒 文件被篡改。
笔试题: 查找/data目录下所有的普通文件修改时间大于30天前的然后删除
6.将find的结果交给其他命令
三种执行方式:
第一种: find找到的文件交给 cat rm cp mv 命令
案例1.找出文件名称3.txt的然后查看里面的内容
[root@zkl /oldboy]# find -name "3.txt" |xargs cat
aaa
[root@zkl /oldboy]# find -name "3.txt" |xargs ll
xargs: ll: 没有那个文件或目录
[root@zkl /oldboy]# find -name "3.txt" |xargs ls -l
-rw-r--r-- 1 oldboy oldboy 4 11月 17 21:15 ./3.txt
#为什么不用ll 因为xargs后面所有的别名失效。
xargs: 将前面命令执行的结果 甩到所有命令的最后面、
xargs可以格式化输出 按n列的方式 默认以空格分隔
|xargs -n1 # 按找1列的方式输出内容
案例2.查找名称3.txt的文件然后删除
[root@zkl /oldboy]# find -name "3.txt" |xargs rm
案例3.查找名称4.txt的文件然后复制到/opt目录
[root@zkl /oldboy]# find -name "4.txt" |xargs -i cp {} /opt
[root@zkl /oldboy]# ll /opt
总用量 8
-rw-r--r-- 1 root root 4 11月 17 21:19 4.txt
-rw-r--r-- 1 root root 1003 11月 10 00:19 all.tar.gz
drwxr-xr-x 2 root root 33 11月 10 00:17 etc
案例4.查找名称4.txt 然后移动到/tmp目录
[root@zkl /oldboy]# find -name "4.txt" |xargs -i mv {} /tmp
案例5.拷贝多个文件到/opt目录
[root@zkl /oldboy]# find -name "*.txt" |xargs -i cp {} /opt
第二种方式:find找到的文件交给 cat rm cp mv 命令
案例1.交给cat命令
[root@zkl /oldboy]# find ./ -name "4.txt" -exec cat {} \;
bbb
[root@zkl /oldboy]# find ./ -name "4.txt" -exec ls -l {} \;
-rw-r--r-- 1 root root 4 11月 17 21:15 ./4.txt
案例2.交给cp动作
[root@zkl /oldboy]# find ./ -name "4.txt" -exec cp {} /opt \;
案例3.交给rm动作
[root@zkl /oldboy]# find ./ -name "4.txt" -exec rm {} \;
案例4.查找出所有大写的.TXT结尾的文件 然后打包成test.tar.gz
[root@zkl /oldboy]# find ./ -name "*.TXT" -exec tar zcvf test.tar.gz {} \;
./1.TXT
./2.TXT
./3.TXT
第三种方式: find找到的文件交给 cat rm cp mv 命令
反引号或者$()
案例1.将查找到的文件交给cat命令
[root@zkl /oldboy]# cat `find -name "4.txt"`
bbb
案例2.将查找到的文件交给ll命令
[root@zkl /oldboy]# ll `find -name "4.txt"`
-rw-r--r-- 1 root root 4 11月 17 21:15 ./4.txt
案例3.交给cp命令
[root@zkl /oldboy]# cp `find -name "4.txt"` /mnt
[root@zkl /oldboy]# ll /mnt
总用量 4
-rw-r--r-- 1 root root 4 11月 17 21:24 4.txt
案例4.拷贝查找到的所有文件到/root
cp `find ./ -iname "2.txt"` /root/
案例5.查找到的文件交给rm命令
[root@zkl /oldboy]# rm -rf `find ./ -name "*.txt"`
总结
1.软件安装
yum安装
yum -y install pkg.name
yum -y remove pkg.name
yum clean all # 清理仓库缓存
yum list # 查看仓库中所有的软件
yum -y reinstall # 覆盖安装
yum -y install --downloadonly --downloaddir=xx wget
rpm安装
先有xx.rpm结尾的包
rpm -ivh xx.rpm
rpm -e xx
rpm -qa wget # 查看wget是否安装
rpm -ql wget # 装了哪些内容
rpm -qc wget # 配置文件
ubuntu安装
apt update # 如果不让安装先执行
apt -y install pkg.name
apt -y remove pkg.name
dpkg -i xx.deb # .deb的文件必须存在
dpkg -r xx # 卸载
dpkg -l wget # 查看软件是否安装
字节设备:
/dev/null # 空
/dev/zero # 使用dd命令
$? 上一条命令返回结果
仓库的配置:
centos修改默认的仓库为阿里云
麒麟系统安装扩展的仓库 epel仓库
ubt系统修改默认的仓库为阿里云
2.find查找
按类型查找
find /data -type f
find /data -type d
按名称查找
find /data -name "1.txt"
不区分大小写
find /data -iname "1.log"
或者和并且
-o
-a # 默认可以不加
find /data -type f -name "test.txt"
find /data -type f -o name "test"
按照大小查找
find /data -size 10M 等于10M +10 大于10M -10M 小于10M
find / -type f -size +1G
find / -type d -size +1M # 查找系统中小文件比较多的目录
按照深度等级查找
find /data -maxdepth 1 -type f
按照时间查找data -mtime +
笔试题: 查找出大于30天前的文件并且删除
find /data -mtime +30|xargs rm -rf
xargs 使用方法
ntpdate 时间同步
19——系统优化
一、修改默认的yum仓库
默认的仓库都是国外,下载软件的速度慢。
CentOS默认仓库是随机的
阿里云
清华大学
重庆大学
北电
个人也可以搭建YUM仓库(软件的仓库)
第一步: 找到阿里云的仓库链接
https://opsx.alibaba.com/
第二步: 备份默认的仓库
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第三步: 下载新的仓库到/etc/yum.repos.d/CentOS-Base.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
Kylin系统默认不需要修改仓库
麒麟系统可以安装一个扩展的epel仓库,因为默认的仓库里有一些软件没有。
[root@oldboyedu ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
ubuntu系统默认需要修改为国内仓库
需不要安装扩展的仓库。
1.备份默认的仓库
cp /etc/apt/sources.list /tmp/sources.list
2.编辑配置文件将国内的链接粘贴进去
vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
3.修改成功后查看默认的下载链接地址
root@oldboy:~# apt-cache policy
root@oldboy:~# apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
100 https://mirrors.aliyun.com/ubuntu focal-backports/universe amd64 Packages
release v=20.04,o=Ubuntu,a=focal-backports,n=focal,l=Ubuntu,c=universe,b=amd64
origin mirrors.aliyun.com
使用apt安装可以在过程中看到下载的链接地址
root@oldboy:~# apt -y install wget
yum clean all # 清理YUM仓库缓存
二. 优化SSH
修改默认的SSH端口,不使用默认的22端口
禁止root登录,使用普通用户登录
[root@oldboyedu ~]# egrep '^Port|^Permit' /etc/ssh/sshd_config
Port 22
PermitRootLogin yes # 会修改为no选项
什么情况下不需要调整SSH端口 禁止root登录?
前端有跳板机或者堡垒机的情况下不需要以上操作。大部分服务器都在局域网内。
三、关闭Selinux
Centos: 默认是开启的,所以需要关闭
[root@linuxnc ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@linuxnc ~]# setenforce Permissive # 系统中临时关闭
[root@linuxnc ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled # 必须将这个配置修改为disabled
kylin系统默认是关闭的,所以不需要额外配置
[root@oldboyedu ~]# getenforce
Disabled
ubuntu不需要关闭,默认也是关闭的状态
四. 优化防火墙
作用: 过滤数据,对数据源或者目标进行流程控制。
阻挡一些非法流量
对内 可以实现当路由器使用(共享上网)
在什么情况下服务器需要开启防火墙
只要用户可以访问的服务器都需要开启。
在企业中什么情况下服务器需要关闭的
所有的服务器在内网
公司内部测试服务器
当很多很多的人访问我们网站的时候(大量) 防火墙类似做过车检票员。必须使用硬件防火墙。
centos和kylin系统 默认的软件防火墙: firewalld防火墙
第一步: 查看防火墙状态,默认是开启的
[root@oldboyedu ~]#
[root@oldboyedu ~]# systemctl status firewalld
第二步: 临时关闭防火墙,系统重启后会自动运行
[root@oldboyedu ~]# systemctl stop firewalld
第三步: 永久关闭禁止开机自动运行
[root@oldboyedu ~]# systemctl disable firewalld
systemctl 动作 服务名称
动作:
start # 启动 运行
stop # 停止
restart # 重启
status # 查看服务的状态
enable # 开机自动运行此服务
disable # 开机禁止启动此服务
reload # 重新加载配置
ubuntu系统默认的软件防火墙: ufw
root@oldboy:~# systemctl stop ufw
root@oldboy:~# systemctl disable ufw
五. 字符集优化
常用字符集: 我们输入的文字可以在系统中正常显示
UTF-8 # 万国码 默认使用的字符集
GBK # 国标
查看默认的语言字符集
[root@oldboyedu ~]# echo $LANG
zh_CN.UTF-8
# zh_CN在系统中的语言 .UTF-8字符集
# en_US表示英语
临时修改语言为英文 kylin系统默认的是中文,重启系统或者退出重连接都失效
[root@oldboyedu ~]# LANG=en_US.UTF-8
[root@oldboyedu ~]# echo $LANG
en_US.UTF-8
[root@oldboyedu ~]# lllllll
-bash: lllllll: command not found
永久生效.重启或者重新连接都是生效的。
第一步: 编辑配置文件
[root@oldboyedu ~]# cat /etc/locale.conf
LANG="zh_CN.UTF-8"
修改为英文
[root@oldboyedu ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"
第二步: 让配置文件生效使用 source 或者 . 或者重新连接shell 或者 重启系统
# 注意source的是文件中必须为变量
[root@oldboyedu ~]# echo $LANG
zh_CN.UTF-8
[root@oldboyedu ~]# vim /etc/locale.conf
LANG="en_US.UTF-8"
[root@oldboyedu ~]# source /etc/locale.conf
[root@oldboyedu ~]# echo $LANG
en_US.UTF-8
或者使用.后面是空格
[root@oldboyedu ~]# . /etc/locale.conf
或者使用命令直接修改配置文件:
localectl 会直接修改配置文件/etc/locale.conf
[root@oldboyedu ~]# localectl set-locale LANG=zh_CN.UTF-8
[root@oldboyedu ~]# cat /etc/locale.conf
LANG=zh_CN.UTF-8
当前生效需要source 或者重新连接
[root@oldboyedu ~]# source /etc/locale.conf
[root@oldboyedu ~]# echo $LANG
zh_CN.UTF-8
六. 时间同步
作用: 让我们服务器系统时间正确运行。如果时间快了或者慢了会影响业务(特别交易性质的业务)
系统时间
硬件时间
时间: 我们可以看懂的时间
时间戳: 看不懂的
查看系统时间
[root@oldboyedu ~]# date
2024年 11月 18日 星期一 10:30:29 CST
[root@oldboyedu ~]#
[root@oldboyedu ~]# clock
2024-11-18 10:30:31.550904+08:00
修改系统时间: 个人测试练习使用
[root@oldboyedu ~]# date -s 20081010
2008年 10月 10日 星期五 00:00:00 CST
格式化查看时间
[root@oldboyedu ~]# date +%F-%H-%M-%S
2024-11-18-10-37-28
同步时间:
第一步: 先安装ntpdate命令
[root@oldboyedu ~]# yum -y install ntpdate
第二步: 同步系统时间以ntp2.aliyun.com时间服务器为准
[root@oldboyedu ~]# ntpdate ntp1.aliyun.com
同步硬件时间:
1.确保系统时间正确,先同步系统时间
[root@oldboyedu ~]# ntpdate ntp1.aliyun.com
2.将系统时间同步给硬件时间
------------个人测试先修改系统时间
[root@oldboyedu ~]# date -s 20081010
2008年 10月 10日 星期五 00:00:00 CST
然后再将系统时间同步给硬件时间
[root@oldboyedu ~]# clock -w
[root@oldboyedu ~]# clock
2008-10-10 00:01:21.789094+08:00
ubuntu系统: 默认服务自动同步时间
修改默认的时区: 亚洲/上海
root@oldboy:~# timedatectl set-timezone Asia/Shanghai
需要想要修改为国内时间服务器
第一步: 修改配置文件
vim /etc/systemd/timesyncd.conf
NTP=ntp2.aliyun.com
第二步:重启时间服务生效
systemctl restart systemd-timesyncd.service
七.加大文件描述符
八.内核参数优化 先扩展一下
九.安装常用软件
yum -y install tree lrsz wget net-tools unzip
面试题: 请问系统优化过什么?
1.修改默认YUM仓库为国内的
2.优化SSH服务修改默认的端口号,禁止root登录使用普通用户登录。
3.关闭selinux
4.优化防火墙 开放需要开放的端口 80 443 ssh端口
5.时间同步
6.加大文件描述符
7.内核参数优化 网络
8.安装常用系统命令
20——定时任务
1.什么是定时任务
闹钟/每天定时
在固定的时间做什么事情
2.定时任务的作用
固定时间同步时间
数据备份(备份到存放备份数据服务器)
先打包 然后再备份(代码文件 成千上百个) 占用磁盘IO 降低传输速度
日常工作需要
日志切割 防止日志太大
/var/log/nginx.log
mv /var/log/nginx /var/log/nginx-2024-11-18.log
监控取值+监控
定时执行脚本
辅助程序运行
.....
一、系统定时任务
配置文件:/etc/crontab
语法结构:* * * * * root 可执行的命令;命令 #星号之间必须有空格
* 分 0-59 01或1 代表1分钟 0代表整点
* 时 0-23 00或0 代表凌晨12点
* 天 1-31
* 月 1-12
* 周 0-6 0代表周日
特殊符号表示时间:
* 表示每的意思 如果是五颗星则代表每分钟都需要执行一次
/ 表示间隔 */5或*/05表示每间隔5分钟执行一次
- 表示区间 7-11 表示上午7点到上午11点
, 表示间隔 7-11,13-15 上午7点到11点和下午的1点到3点执行
案例1.每5分钟执行一个echo oldboy >> oldboy.txt # 默认文件不写路径 则会在家目录生成/root/
*/05 * * * * root echo oldboy >> oldboy.txt
案例2.每小时的第5分钟执行一次定时任务
05 * * * * root test > /dev/null
案例3.每分钟执行一次定时任务
* * * * * root echo oldboy >> oldboy.txt
案例4. 上午的7-11点执行任务
* 7-11 * * * root pwd #表示7-11点 每一分钟都执行一次
00 7—11 * * * root pwd #表示7-11点 每个整点执行一次
案例5.凌晨12点执行一个命令 笔试题
00 00 * * * root 命令 #表示凌晨12点
案例6.7-11,13-15 时间间隔使用,
00 7-11,13-15 * * *
案例7.每分钟打包/etc/hosts /etc/passwd 名称为etc.tar.gz 放到/opt目录
* * * * * root tar zcf /opt/etc.tar.gz /etc/hsots /etc/passwd
# 注意定时任务不识别% 需要加\ 或者将命令写入到脚本中,定时任务执行脚本
案例8.每分钟打包/etc/hosts /etc/passwd 名称为时间+etc.tar.gz放到/opt目录
* * * * * root tar zcf /opt/`date +\%F`etc.tar.gz /etc/hsots /etc/passwd
1)创建存放脚本的目录
mkdir /server/scripts
2)将脚本写入到定时任务
* * * * * root sh /server/scripts/etc.sh
定时任务的日志文件:
centos和kylin: /var/log/cron
ubuntu: /var/log/syslog
#系统定时任务中PATH=/sbin:/bin:/usr/sbin:/usr/bin
案例9.每间隔5分钟执行1次时间同步。
*/05 * * * * root ntpdate ntp2.aliyun.com
二、用户定时任务使用
用户定时任务配置 root权限
配置文件:
/var/spool/caron/root #root就是root用户做定时任务的配置文件 默认是没有的
配置用户定时任务有两种方法:
第一种方法:有语法检查的功能
crontab -e 直接回车 就是编辑的/var/spool/cron/root visudo ——>/etc/sudoers
第二种方法: 直接vim配置文件
vim /var/spool/cron/root
案例1.用户定时任务创建每分钟执行一个echo的动作
* * * * * echo test >> test.log
查看用户定时任务方法1:
cat /var/spool/cron/root
* * * * * echo test >> test.log
查看用户定时任务方法2:
crontab -l
* * * * * echo test >> test.log
#用户定时任务默认识别的PATH是/bin /usr/bin 需要重新配置PATH变量
案例2.每5分钟执行一次时间同步
PATH=/app/tools/cmd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
*/5 * * * * ntpdate ntp2.aliyun.com &>> /root/cron.log
注意:想要保留定时任务的结果定向到文件中
crontab -e
*/5 * * * * ntpdate ntp2.aliyun.com &>>/root/cron.log
如果不想保留结果
*/5 * * * * ntpdate ntp2.aliyun.com &>/dev/null
注意: 使用centos,如果关闭了邮件服务,每执行一次定时任务,会自动生成一个小文件,小文件会占用inode号码
[root@linuxnc ~]# systemctl stop postfix
定时清理下面目录:
/var/spool/postfix/maildrop/
将定时任务执行的结果定向到文件或者空。
三、定时任务注意事项
1.避免一些不必要的输出 类似tar -zcf 去掉v 类似打包进入相对路径
2.多条命令使用脚本
3.直接写到定时任务配置文件中不识别% 需要加\ 或者写入脚本。
4.用户定时任务识别的路径只有/usr/bin和/bin目录 需要重新定义PATH变量
定时任务重点:
1.定时任务配置方式
系统定时任务
配置文件: /etc/crontab
系统定时任务 直接vim编辑
查看定时任务 cat /etc/crontab
用户定时任务
配置文件: /var/spool/cron/root
用户定时任务 crontab -e编辑 有语法检查的功能
查看定时任务 crontab -l
语法配置:
系统定时任务: * * * * * root 可执行命令
用户定时任务: * * * * * 可执行命令
* * * * *
分 时 日 月 周
* # 表示每
*/05 # 表示每5分钟
05 * * * * # 表示第5分钟 */30 30 * * * *
- # 表示区间 3-5
, # 表示间隔 3-5,10-15
凌晨12点
00 00 * * * 可执行命令
日志文件
/var/log/cron
1.避免一些不必要的输出 类似tar -zcf 去掉v 类似打包进入相对路径
2.多条命令使用脚本
3.直接写到定时任务配置文件中不识别% 需要加\ 或者写入脚本。
4.用户定时任务识别的路径只有/usr/bin和/bin目录 需要重新定义PATH变量
5.将定时任务结果定向到文件中可以排查问题
21——磁盘管理
一、磁盘外部结构
分类:
固态硬盘
机械硬盘
Mvme硬盘
大小分类:
2.5英寸
3.5英寸
接口类型
IDE接口 # 淘汰
SCSI接口 # 淘汰
SATA接口 # 台式机 笔记本
SAS接口 #企业服务器标配
固态磁盘价格高,存储少。有寿命。
机械磁盘价格低,存储大。老不死。
固态速度比机械磁盘速度快
磁盘储存大小和转速:
企业标配SAS接口:300G 600G 900G 转速 每分钟转多少圈 5400转 7200转 10k 15k
转速越快性能越好
存储越大转速越慢 1T 转速最高10K 2T 4T 8T 20T
二、磁盘阵列
磁盘RAID、磁盘阵列、阵列卡/RAID卡
作用:
获得更大的容量 #将多块磁盘逻辑的组合成一块磁盘
获得更高的性能 #写入服务器 写两块比写一块磁盘的虚度块
获得更好的安全性 #可以将数据同时写入两块盘 一块当做备份盘
RAID级别 硬盘数量 可用容量 安全性 性能 使用场景
0 至少1块 磁盘总=和 不安全 读写速度最快 要求速度不要求安全
1 只能2块 一半 可以坏一块 写慢,读取凑合 要求安全,速度一般的场景
5 至少3块 n-1 可以坏一块 0-1的折中 业务流量较为稳定的场景
10/01 至少4块 一半 可以坏一半 读写速度快 高并发的场景
三、磁盘分区
- windows磁盘默认是MBR格式
- MBR格式最多支持4个主分区 C D E F
- MBR格式支持3个主分支+1个扩展分区
1.Linux磁盘表示方法
sda # 表示第一块磁盘
sda1 # 表示第一块磁盘的第一个分区
sda2 # 表示第一块磁盘的第二个分区
sdb # 表示第二块磁盘
sdb1 # 表示第2块磁盘的第1个分区
sdb2 # 表示第2块磁盘的第2个分区
。。。
sdb5 # 表示第2块磁盘的第1个逻辑分区
2.Linux磁盘分区
2.1小于2T的磁盘分区使用fdisk命令
第一种分区: 标准分区 300G磁盘
/boot 200M #存放系统内核的位置,引导程序所在的位置
/ 剩余空间 #存放系统
第二种分区:swap分区
/boot 200M
swap 2G # 当内存空间不够用时,临时使用磁盘空间充当内存来使用 速度慢 解决OOM问题 内存溢出。
# linux内存如果达到最大限制,则自动杀死占用最高内存的进程来让系统正常运行
# swap 对用户的服务器需要增加物理内存
# 比较着急,或者公司内部测试服务器 自己使用的。
/ 剩余空间
第三种分区: 比较少
/boot 200M
swap 2G
/ 50G # 系统
/data 1.8T # 数据分区
2.磁盘分区 类似房间打隔断
MBR格式 小于2T的磁盘使用fdisk命令
GPt格式 大于2T的磁盘使用parted命令
第一步: 插入一块20G硬盘
右键虚拟机-->设置-->添加磁盘
第二步: 重启系统(虚拟机需要重启,如果是物理机不需要重启 云服务器)
[root@oldboyedu ~]# reboot
重启完成后检查添加的第二块磁盘
[root@zkl ~]# fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
第三步: 磁盘分区 使用fdisk
Command (m for help): m # 查看菜单
Help:
d delete a partition # 删除一个分区
l list known partition types # 显示分区类型
n add a new partition # 创建新的分区
p print the partition table # 输出分好的分区表
m print this menu # 打印菜单
w write table to disk and exit #保存并且推出
q quit without saving changes # 退出不保存
Command (m for help): p #查看分区
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x81f81a65
Command (m for help): n #添加分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): #分区默认是P主分区 直接回车
Using default response p.
Partition number (1-4, default 1): # 分区的编号 默认从1开始
First sector (2048-41943039, default 2048): # 开始的大小 默认 直接回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +5G #分区大小
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x81f81a65
》》》》》》》》》》》 创建分区
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 31459327 20971520 10G 83 Linux
/dev/sdb3 31459328 33556479 2097152 1G 83 Linux
/dev/sdb4 33556480 41943039 8386560 4G 5 Extended #扩展分区
/dev/sdb5 33558528 35655679 2097152 1G 83 Linux
/dev/sdb6 35657728 41943039 6285312 3G 83 Linux
Command (m for help): w #保存并退出
第三步: 格式化分区 类似打扫卫生 装修不同的风格
[root@zkl ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 格式化成功
第四步: 挂载磁盘 mount
1)创建一个挂载点 类似创建门,通过门才可以进入磁盘空间
mkdir /data
2)将sdb1挂载到/data目录
----->/data/----->sdb1第二块磁盘的第1个分区
[root@zkl ~]# mount /dev/sdb1 /data
[root@zkl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.9G 44G 9% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
/dev/sdb1 5.0G 68M 5.0G 2% /data
测试是否可以正常写入内容
[root@zkl ~]# cd /data
[root@zkl /data]# touch test.txt
[root@zkl /data]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 20 16:56 test.txt
卸载磁盘:
[root@zkl /data]# umount /data # 退出挂载点然后卸载
umount: /data: target is busy.
[root@zkl ~]# umount /data
[root@zkl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.9G 44G 9% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
第五步: 写入开机自动挂载
[root@zkl ~]# vim /etc/fstab #开机自启动文件
/dev/mapper/klas-root / xfs defaults 0 0
UUID=0c8491ff-cce0-49f3-adf5-0315c0c6b310 /boot xfs defaults 0 0
/dev/mapper/klas-swap none swap defaults 0 0
需要挂载的设备名或者UUID 挂载点 类型 挂载参数选默认 dump备份设置 fsck检查顺序 0不需要 1需要 默认不需要
/dev/sdb1 /data xfs defaults 0 0 #开机自动将/dev/sdb1挂载到/data上
2.2大于2T的磁盘分区使用parted命令
可以分128个主分区
分区后直接写入磁盘,直接生效,不需要保存
第一步: 虚拟机插入大于2T的磁盘
第二步: 添加后重启系统
[root@zkl ~]# fdisk -l
Disk /dev/sdc: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
第三步:分区
[root@zkl ~]# parted /dev/sdc
help [COMMAND] # 打印菜单帮助
mklabel,mktable LABEL-TYPE # 创建分区表类型
mkpart PART-TYPE [FS-TYPE] START END # 创建分区
print [devices|free|list,all|NUMBER] # 查看分区表
quit # 退出
rm NUMBER # 删除分区
(parted) mklabel gpt # 将磁盘类型修改为gpt格式
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
(parted) mkpart #创建分区
Partition name? []? primary #分区的名称 自定义
File system type? [ext2]? xfs #文件系统类型
Start? 0
End? 500G
Warning: The resulting partition is not properly aligned for best
performance: 34s % 2048s != 0s
Ignore/Cancel? I
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB xfs primary
(parted) mkpart
Partition name? []? primary
File system type? [ext2]? xfs
Start? 500G
End? 1000G
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB primary
2 500GB 1000GB 500GB xfs primary
(parted) mkpart primary xfs 1000G 4000G #非交互式分区
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB primary
2 500GB 1000GB 500GB primary
3 1000GB 4000GB 3000GB xfs primary
(parted) quit # 退出parted分区
第三步: 格式化分区
[root@zkl ~]# mkfs.xfs -f /dev/sdc
extsz=4096 blocks=0, rtextents=0
第四步: 挂载使用分区
[root@zkl ~]# mount /dev/sdc /data
[root@zkl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.9G 44G 9% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
/dev/sdc 4.0T 28G 3.9T 1% /data
第五步: 写入开机自动挂载fstab
vim /etc/fstab
/dev/sdc /data xfs defaults 0 0
企业中常用的方式:
1.插入磁盘
2.格式化
[root@oldboyedu ~]# mkfs.xfs -f /dev/sdc
meta-data=/dev/sdc isize=512 agcount=4, agsize=262144000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1048576000, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=512000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.挂载使用写入开机自启
[root@oldboyedu ~]# mount /dev/sdc /data
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 4.8G 43G 11% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/0
/dev/sdc 4.0T 28G 3.9T 1% /data
partprobe:通知系统磁盘的分区信息变化 更新内核的硬盘分区表信息
四、工作中公司使用新的磁盘
添加磁盘后
格式化磁盘
[root@zkl ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@zkl ~]# mount /dev/sdb /tmp
[root@zkl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.9G 44G 9% /
/dev/sdb 20G 175M 20G 1% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
五、磁盘相关案例
5.1案例一:java环境内存不够用,大量占用swap
swap磁盘分区: 大小是内存的1-1.5倍 如果内存大于8G,则最多swap给8G即可。
使用swap分区的情况:
测试服务器
内部服务器
自己用的虚拟机
流量波动的业务
线上服务器,业务服务器禁止使用swap,通过增加内存的方式解决OOM问题。
创建swap分区的方式:
方法1: 安装操作系统的时候
方法2: 安装完成操作系统# 测试服务器上测试软件内存不够用,也无法添加内存,为了正常让测试业务正常运行,临时创建swap分区。
第一步:生成一个1G的设备文件
[root@zkl ~]# dd if=/dev/zero of=/opt/1g bs=1M count=1000
第二步: 格式化成swap类型 # 磁盘是使用 mkfs.xfs /dev/sdb1
[root@zkl ~]# mkswap /opt/1g
mkswap: /opt/1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1000 MiB (1048571904 bytes)
no label, UUID=27dbce18-933a-4deb-a7a5-ac3225225c2f
第三步: 挂载使用swap 直接增加到原有的swap空间上。
[root@zkl ~]# swapon /opt/1g
swapon: /opt/1g: insecure permissions 0644, 0600 suggested.
查看swap大小
[root@zkl ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 281Mi 96Mi 8.0Mi 1.5Gi 1.4Gi
Swap: 3.0Gi 0.0Ki 3.0Gi
查看swap分区的组成
[root@zkl ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2138108 268 -2
/opt/1g
第四步:写入开机自动挂载
vim /etc/fstab
/opt/1g none swap defaults 0 0
5.2案例二:无法写入文件到磁盘
第一种情况:磁盘空间满
需要查找系统中的大文件,找出磁盘中大于1G的文件。
# 注意mount 会隐藏原来目录下的文件
[root@oldboyedu ~]# dd if=/dev/zero of=/data/2g bs=1M count=2000
[root@oldboyedu ~]# find / -type f -size +1G
[root@oldboyedu ~]# find / -type f -size +1G
/data/2g
第二种情况: inode号满
# 需要找出磁盘中大量的小文件
[root@oldboyedu ~]# find / -type d -size +1M
5.3案例三:解决磁盘不够用的问题
需求: 目前磁盘不够用
1.业务会持续输出日志内容到 /var/log/nginx.log文件中 10G
[root@zkl ~]# dd if=/dev/zero of=/var/log/10g bs=1M count=10000
[root@zkl ~]# ll /var/log/10g
-rw-r--r-- 1 root root 10485760000 Nov 21 16:03 /var/log/10g
2.日志的路径不能变,解决磁盘不够用的问题。
解决方法:
1增加一块大容量的磁盘
添加一块4T磁盘
2.将磁盘挂载到/data目录
[root@zkl ~]# mount /dev/sdc /data
[root@zkl ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 15G 33G 32% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
/dev/sdc 4.0T 28G 3.9T 1% /data
3.将10g文件移动到/data目录
[root@zkl ~]# mv /var/log/10g /data
4.软链接到/var/log/10g
[root@zkl ~]# ln -s /data/10g /var/log/10g
[root@zkl ~]# ll /var/log/10g
lrwxrwxrwx 1 root root 9 Nov 21 16:08 /var/log/10g -> /data/10g
5.4案例四:删除文件
磁盘上有个一10G的文件,删除后发现磁盘没有释放。
文件如果被进程所占用,会出现删除文件磁盘没有释放的问题。
查看当前的文件被哪个进程所占用:
[root@zkl ~]# rm -rf /data/10g
[root@zkl ~]# ll /data
total 0
[root@zkl ~]# df -h #已经删除但是磁盘没有释放
/dev/sdc 4.0T 38G 3.9T 1% /data
[root@zkl ~]# lsof|grep 10g #文件被tail命令占用
tail 4191 root 3r REG 8,32 10485760000 131 /data/10g (deleted)
杀死进程或者重启或者重新加载 #磁盘空间释放
[root@zkl ~]# kill -9 4191
/dev/sdc 4.0T 28G 3.9T 1% /data
小结:
重点:
机械硬盘
固态磁盘
接口:
SATA #笔记本和台式 服务器
SAS #企业级服务器标配
PIC-E #缓存的业务场景
转速: 企业中使用SAS接口 容量300G 600G 900G 转速 15k
RAID级别
0 1 5 10的区别
磁盘分区的命令
2T以下分区使用fdisk命令
2T以上分区使用parted命令
22——系统重要的文件
一、/etc
1.网卡配置文件
[root@zkl ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet # 网卡类型 以太网
BOOTPROTO=none # IP地址的配置方式 none或者static表示手动高配置IP地址 DHCP自动获取IP地址
NAME=ens33 # 网卡系统显示的名称
UUID=cbf46e75-ff6d-4d92-96d8-795522a2652f # 设备的唯一标识 类似每个设备都有一个身份证,可以删除 nmcli con show查看
DEVICE=ens33 # 网卡硬件的名称
ONBOOT=yes # 开机自动启动网卡
IPADDR=10.0.0.200 #IP地址
PREFIX=24 #子网掩码 决定了局域网内可用的IP地址数量 10.0.0.1-10.0.0.254
GATEWAY=10.0.0.2 # 网关 去往不同网段的必经之路
DNS1=223.5.5.5 # 域名解析 将域名解析成IP地址过程
DNS2=223.6.6.6
DNS解析流程: www.baidu.com ---->DNS223.5.5.5返回www.baidu.com对应的IP地址
浏览器--->百度服务器的IP地址建立连接。
重启网卡生效:
1. ifdown&&ifup
2. systemctl restart NetworkManager
3. systemctl restart network !#默认不支持 yum -y install network-scripts
查看网卡是否正常:
[root@zkl ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:33:0e:c8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe33:ec8/64 scope link
valid_lft forever preferred_lft forever
[root@zkl ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6
注意:如果网卡配置了DNS,重启网卡会覆盖/etc/resolv.conf配置文件
如果手动配置resolv.conf则不会覆盖,前提网卡中没有DNS配置。
企业中配置: 网卡中配置多DNS即可。
2./etc/resolv.conf
作用: DNS配置文件 配置完成即可生效
[root@zkl ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6
3./etc/hosts
作用:本地域名解析
[root@zkl ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
4./etc/hostname
作用:主机名的配置文件
临时修改主机名称,重启失效,重连xshell生效
[root@zkl ~]# hostname 123
永久修改,修改配置文件
方法1.直接修改/etc/hostname 重启生效
#临时生效并写入配置文件
[root@zkl ~]# hostnamectl set-hostname zkl
5./etc/rc.local
作用:开机自动执行此脚本 给源文件执行权限,是一个软链接
系统执行此脚本的方式按照路径执行: sh /etc/rc.local
/etc/rc.local 是一个软链接 指向的是源文件
lrwxrwxrwx 1 root root 13 Apr 20 2022 /etc/rc.local -> rc.d/rc.local
[root@zkl /server/scripts]# ll /etc/rc.d/rc.local #默认没有执行权限 ./ 执行方式不能执行
-rw-r--r-- 1 root root 473 Nov 10 14:20 /etc/rc.d/rc.local
6./etc/fstab
作用:开机自动挂载
[root@zkl /server/scripts]# cat /etc/fstab
/dev/mapper/klas-root / xfs defaults 0 0
UUID=0c8491ff-cce0-49f3-adf5-0315c0c6b310 /boot xfs defaults 0 0
/dev/mapper/klas-swap none swap defaults 0 0
7./etc/inittab
作用: 没用 开机设置默认运行级别的配置文件
运行级别: 7个运行级别 每个级别表示不同的功能 面试题或者笔试题
0 # 表示关机
1 # 表示单用户模式,忘记root密码 可以修改root密码
2 # 表示多用户模式,缺少很多功能比如NFS
3 # 表示完全多用户 默认的级别
4 # 保留待开发
5 # 桌面模式 需要安装DESKTOP包
6 # 重启
init 0 关机
init 6 重启
# 扩展忘记linux密码 修改root密码 通过init 1 进入单用户模式 修改root密码
查看当前的运行级别:
[root@zkl ~]# runlevel
N 3
8./etc/profile
作用: 存放环境变量,每次重启系统或者远程连接系统 都会执行此文件中所有的变量
[root@zkl ~]$tail -1 /etc/profile
export PS1="[\[\e[35;1m\]\u@\[\e[0m\]\[\e[36;1m\]\H\[\e[0m\]\[\e[33;1m\] \w\[\e[0m\]]\$"
9. /etc/os-release
作用:查看系统版本
[root@zkl /server/scripts]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"
10./etc/passwd
用户信息
11./etc/crontab
定时任务
12./etc/sudoers
sudo 权限
13./etc/motd # 开机显示里面的字符串
二、/var/
1./var/log/messages # 系统日志
2./var/log/secure # 系统登录和退出日志
三、/proc
1./proc/cpuinfo # cpu信息 笔记
[root@zkl /server/scripts]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 45 bits physical, 48 bits virtual
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
2./proc/meminfo # 内存信息
[root@zkl /server/scripts]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 184Mi 1.4Gi 40Mi 298Mi 1.5Gi
Swap: 2.0Gi 0B 2.0Gi
3./proc/loadavg # 负载信息
[root@zkl /server/scripts]# w
19:37:28 up 55 min, 1 user, load average: 0.00, 0.00, 0.00
平均负载: 1分钟 5分钟 15分钟
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
zhou pts/0 18:42 0.00s 0.54s 0.04s sshd: zhou [priv]
4./proce/mounts # 挂载信息
[root@zkl /server/scripts]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 73M 906M 8% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.9G 44G 9% /
tmpfs 979M 0 979M 0% /tmp
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 196M 0 196M 0% /run/user/1000
四、查看主机路由
1.Windows
- 百度 ip
- https://ip138.com/
2.linux
curl cip.cc
curl ifconfig.me
23.进程管理
一、进程
1.什么是进程
当我们运行一个程序,那么我们将运行的程序叫进程
2.程序和进程的区别
- 进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,进程会随着程序的终止而销毁,不会永久存在系统中
- 程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中
3.程序的 生命周期
一个对象从无到有、从有到无的过程称为生命周期
二、查看进程状态
1.使用ps命令查看进程状态(静态)
ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
-a显示所有终端机下执行的进程,除了阶段作业领导者之外
-u以用户为主的格式来显示进程状况
-x显示所有进程,不以终端机来区分
-f用ASCII字符显示树状结构,表达进程间的相互关系
[root@zkl ~]# ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Nov24 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Nov24 0:00 \_ [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Nov24 0:00 \_ [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Nov24 0:00 \_ [kworker/0:0H-events_highpri]
root 8 0.0 0.0 0 0 ? I< Nov24 0:00 \_ [kworker/0:1H-events_highpri]
root 9 0.0 0.0 0 0 ? I< Nov24 0:00 \_ [mm_percpu_wq]
user: 该 process 属于那个使用者账号的
PID: 该 process 的号码
%CPU: 该 process 使用掉的 CPU 资源百分比
%MEM: 该 process 所占用的物理内存百分比
VSZ: 该 process 使用掉的虚拟内存量 (Kbytes)
RSS: 该 process 占用的固定的内存量 (Kbytes)
TTY: 该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT: 该程序目前的状态
START: 该 process 被触发启动的时间
TIME: 该 process 实际使用 CPU 运作的时间
COMMAND: 该程序的实际指令[]内核态进程 无[] 用户进程
STAT基本状态 | 描述 | STAT状态+符号 | 描述 |
---|---|---|---|
R | 进程运行 | s | 进程是控制进程, Ss进程的领导者,父进程 |
S | 可中断睡眠 | < | 进程运行在高优先级上,S<优先级较高的进程 |
T | 进程被暂停 | N | 进程运行在低优先级上,SN优先级较低的进程 |
D | 不可中断睡眠 | + | 当前进程运行在前台,R+该表示进程在前台运行 |
Z | 僵尸进程 | l | 进程是多线程的,Sl表示进程是以线程方式运行 |
案例一:
1)在终端1上运行vim
[zhou@zkl ~]# vim text
2)终端2上ps auxf|grep text
[root@zkl ~]# ps axuf|grep text
root 8897 0.0 0.0 213140 820 pts/0 S+ 17:16 0:00 | \_ grep --color text
zhou 8886 0.0 0.4 228960 8432 pts/2 S+ 17:16 0:00 \_ vim text
3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态
[root@zkl ~]# ps axuf|grep text # T表示停止状态
root 8966 0.0 0.0 213140 880 pts/0 S+ 17:19 0:00 | \_ grep --color text
root 8959 0.0 0.4 229088 8436 pts/2 T 17:18 0:00 \_ vim text
案例二:
PS命令查看不可中断状态进程
使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.6 0.1 124268 1888 pts/2 S+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.7 0.2 124380 2240 pts/2 R+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.9 0.2 124916 2724 pts/2 D+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
2.使用top命令查看当前的进程状态(动态)
top - 17:47:41 up 1 day, 2:31, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 164 total, 1 running, 162 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1956.2 total, 869.0 free, 274.2 used, 812.9 buff/cache
MiB Swap: 2088.0 total, 2088.0 free, 0.0 used. 1394.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9009 root 20 0 0 0 0 I 0.3 0.0 0:00.63 kworker/0:3-events_power_efficient
1 root 20 0 169296 11732 8868 S 0.0 0.6 0:07.22 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.33 kworker/0:1H-events_highpri
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
任务 | 含义 |
---|---|
Tasks: 164 total | 当前进程的总数 |
1 running | 正在运行的进程数 |
162 sleeping | 睡眠的进程数 |
1 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
%Cpu(s): 0.0 us | 系统用户进程使用CPU百分比 |
0.0 sy | 内核进程占用CPU百分比,内核是于硬件进行交互 |
ni | 调整过优先级进程占用百分比 |
99.8 id | 空闲CPU的百分比 |
0.0 wa | CPU等待IO完成的时间 |
0.2 hi | 硬中断,占的CPU百分比 |
0.0 si | 软中断,占的CPU百分比 |
0.0 st | 比如虚拟机占用物理CPU的时间 |
3.什么是中断
中断就是终止当前在做的事情 去执行另一段程序,会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分
- 硬中断:
来源: 硬中断是由硬件设备产生的,比如键盘、鼠标、定时器、网络接口卡等。 优先级: 硬中断通常具有较高的优先级,因为它们通常与外部事件或紧急情况相关。 处理: 硬中断的处理通常涉及直接与硬件交互,比如读取设备状态、处理输入/输出操作等。 响应时间: 硬中断需要快速响应,因为它们可能涉及到实时数据处理或系统稳定性。 触发方式: 硬中断是由硬件设备通过中断请求线(IRQ)直接发送给CPU的
- 软中断:
来源:软中断是由软件产生的,通常是操作系统或应用程序中的特定指令或异常条件触发的。 优先级:软中断的优先级通常低于硬中断,因为它们更多地涉及到程序的控制流。 处理:软中断的处理通常涉及软件层面的操作,比如系统调用、异常处理等。 响应时间:软中断的响应时间可以相对灵活,因为它们不直接与硬件事件相关。 触发方式:软中断可以通过软件指令(如int指令在x86架构中)来触发,或者在执行某些操作时由操作系统自动触发。
- 硬中断和软中断的区别软中断硬中断是否有随机性 突发性否是是否有中断响应周期无是中断类型号的提供方法固定或由指令提供由中断控制器提供
三、管理进程状态
1.kill
#发送信号到进程
# 列出所有信号名称:
[zhou@zkl ~]$ kill -l
HUP 1 终端挂断 #重新加载配置文件 不停机维护
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
KILL 9 强制终止 #强制杀死进程
TERM 15 终止 # 终止进程,默认kill使用该信号
CONT 18 继续(与STOP相反,fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
2.killall
直接杀死进程 不需要Pid
1.安装killall
[root@zkl ~]# yum install psmisc -y
[root@zkl ~]# killall nginx
3.pklii
使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@zkl ~]# pkill -9 -t pts/1
四、管理后台进程
1.什么是后台进程
运行的进程默认在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行
2.如何吧程序放在后台
- 使用 &
[root@zkl ~]# sleep 3000 & #显示在后台运行的程序 [root@zkl ~]# jobs [1]+ Running sleep 3000 & # 把进程挂起放在后台 [root@zkl ~]# sleep 4000 ^Z [2]+ Stopped sleep 4000 #CTRL + Z [root@zkl ~]# jobs [1]- Running sleep 3000 & [2]+ Stopped sleep 4000 #让后台进程2放在后台运行 [root@zkl ~]# bg %2 [2]+ sleep 4000 & [root@zkl ~]# jobs [1]- Running sleep 3000 & [2]+ Running sleep 4000 & #将进程1掉回到前台运行 [root@zkl ~]# fg %1 sleep 3000 #终结后台PID为2的进程 [root@zkl ~]# kill %2 [root@zkl ~]# jobs [1]+ Stopped sleep 3000 [2]- Terminated sleep 4000
- screen #常用
1.安装screen [root@zkl ~]# yum -y install screen 2.使用 #指定一个任务名称后进入到一个新bash中 [root@zkl ~]# screen -S wget_jenkins # 创新子bash #在新的子bash中执行一条下载命令 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate # 平滑退出screen 不会终止任务,如果使用exit则退出 ctrl+a+d # 平滑退出screen任务 # 查看正在运行的screen有哪些任务 [root@zkl ~]# screen -list There are screens on: 10373.wget_jenkins (Attached) 10322.wget_jenkins (Detached) 2 Sockets in /run/screen/S-root. #查看进程 root 10323 0.0 0.2 223704 5360 pts/2 Ss 19:43 0:00 \_ /bin/bash root 10366 2.0 0.6 227272 12576 pts/2 S+ 19:43 0:00 \_ wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.r # 进入正在执行的screen任务中 或者使用PID即可进入 [root@zkl ~]# screen -r wget_jenkins
- Nohup
[root@zkl ~]# nohup sleep 600 & [1] 10755 [root@zkl ~]# nohup: ignoring input and appending output to 'nohup.out' #nohup在运行过程中会在当前的目录生成一个nohup.out的临时文件 [root@zkl ~]# ll total 76228 -rw-r--r-- 1 root root 78055160 Sep 25 2019 jenkins-2.190.1-1.1.noarch.rpm -rw------- 1 root root 0 Nov 25 19:55 nohup.out
面试题:
让一个进程在后台持续运行的方式
1.Screen
```
Screen -S wget_test
输入在后台一直运行的命令
Ctrl+a+d 退出screen空间 # exit摧毁此空间
Screen -r wget_test # 进入到screen空间
Screen -list # 查看空间戒指
```
2.Nohup
Nohup 后台持续运行的命令 &
Ps axu|grep 进程名称
五、进程的优先级
1. 在启动进程时,为不同的进程使用不同的调度策略
- nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
- nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU
使用top或ps敏玲查看进程的优先级
# 使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源
PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR -20映射到0, +19映射到39
使用ps查看进程优先级
2)nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称
# 开启vim并指定程序优先级为-5 并查看进程优先级
# renice命令修改一个正在运行的进程优先级,语法格式 renice –n 优先级数字 进程 pid
1)查看sshd进程当前的优先级状态
[root@lzy ~]# ps axo pid,command,nice|grep sshd
1114 /usr/sbin/sshd -D 0
30865 sshd: root@pts/0 0
- 调整sshd主进程的优先级
[root@lzy ~]# renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash
登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级
[root@lzy ~]# ps axo pid,command,nice|grep sshd
1114 /usr/sbin/sshd -D -20
43747 sshd: root@pts/0 -20
43770 grep --color=auto sshd -20
24.运维网络基础
1.什么是网络
所谓网络,就是通过一定的形式连接起来的物体,物体与物体之间可以实现通信。
用什么连接:
网线
网线分类: 五类线 超五类 六类线(千兆) 按箱子305米
水晶头 橙白 橙 绿白 蓝 蓝白 绿 棕白 棕 568B线序(568A线序)
8芯线: 4芯 1236芯 用来传输数据 其他4芯没用(额外供电 反向供电 POE供电)
传输距离100米(超过100米需要加信号放大器 交换机 HUB)
光纤 千兆万兆
多模光纤 传输距离近 2公里
单模光纤 传输距离远 120公里
wifi
物体于物体:
计算机-计算机
计算机-服务器
服务器-服务器
计算机-交换机
计算机-路由器
交换机-交换机
路由器-路由器
物联网: 所有的物体都是由网络进行互通互联
ip不够用
#网络的重要性
所有的系统都有网络!
我们的生活已经离不开网络。
运维生涯50%的生产故障都是网络故障!
1.1如何通过网络实现多台主机之前的通讯
1.在两台主机之间需要有传输介质(网线、光纤、无线等)
2.在两台主机上面需要有网卡设备 #网卡: 全球唯一的地址(MAC) 类似家的位置
在发送信息时:将二进制(数字信号)信息转换为高低电压(电信号) #调至过程
在接收信息时:将高低电压(电信号)信息转换为二进制数(数字信号) #解调过程
3.在进行数据传输之前,需要协商网络传输速率。
真实的运营商下载带宽: ADSL拨号 用户名和密码 非对称式网络 上传和下载带宽不一样 家用
重启路由器重新获取新的公网IP地址
2M 4M
6M 8M
企业专线: 对称式网络 配置公网IP地址 上传和下载相同 价格翻好几倍 10MB 4-8万 运营商不同
2.网络设备说明
2.1什么是交换机
作用:实现了同网段内多台主机的通讯
#如何利用交换机实现通讯
1.在数据前面设置目标地址和源地址,目标地址和源地址用mac地址进行标识
mac称为物理地址,每块网卡上都有的一个标识身份信息的
mac地址全球唯一,不能进行修改,mac地址用16进制标识
2. 在网络通讯初期,会利用广播方式进行发送数据包,在通讯的过程,数据包的发送一定是有去有回的。在一个交换网路中,如果产生了大量广播数据包时会产生广播风暴,影响主机性能,这样的问题称为广播风暴问题
#解决广播风暴问题思路:
减少广播产生数量,将一个大的交换网络切割为几个小的交换网络(局域网,广播域)
#交换机的种类
傻瓜交换机(TP-link/Dlink/水星...)
4口 8口 12口 16口 24口 48口
程控交换机(存储程序控制交换机,配置管理,思科、华为、华三、锐捷、中兴、瑞斯康达)
二层交换 支持数据转发 vlan隔离端口
三层交换 功能比较多 DHCP ACL访问控制列表 支持路由器功能
2.2什么是路由器
查看公网ip的方法
windows:
1.百度搜素ip
2.www.ip138.com
linux:
curl ifconfig.me
[root@zkl ~]# curl ifconfig.me
221.218.209.136
作用:实现不同局域网之间主机通讯,可以隔离广播风暴(路由不同的接口连接不同广播域)
#路由类似于现实生活中从A地去往B地可能需要先步行,在坐车,在做飞机才能到达B地,这样的整个过程在网络中对应数据的传递过程就称为路由。因此一个数据信息跨越不同的网段传递到目的地址,就可以把传递数据的过程称为路由,也可以看做每条传递数据的路径。
1.需要有身标识:ip地址
IP地址由两部分组成: 交换网络标识信息+主机地址标识信息===网段地址+主机地址
10.0.0 网段 1-254 主机地址
内网卡---交换机 192.168.11.0/24(192.168.11.1~192.168.11.254) #NAT技术
外网卡---运营商 IP : 221.218.210.53
高级路由器还有上网行为管理器和防火墙功能
2.路由实现数据传输通讯时,会根据路由表信息进行数据包路由实现不同网段之间通讯需要经过一条必经之路,这条路称为网关
3. 查看路由条目信息方法
[root@zkl ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@zkl ~]# netstat -rn
Kernel IP routing table
#所能去的网段 网关 子网掩码 出去的接口
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
2.3静态路由配置和动态路由配置
静态路由配置
Router> ---> 用户模式
Router> enable # 进入特权模式
Router# --- >特权模式
Router# config t # 进入全局配置模式
Router# config terminal # 简写 conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#int fa0/0 # 进入到fa0/0第一个接口
Router(config-if)#
Router(config-if)#ip address 10.0.0.1 255.255.255.0 # 配置接口的IP地址
Router(config-if)#no shut # 开启接口
Router(config-if)#int fa0/1 # 直接切换到fa0/1接口进行配置IP
Router(config-if)#ip ad
Router(config-if)#ip address 11.22.33.1 255.255.255.0
Router(config-if)#no shut
查看路由表信息:
Router#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 1 subnets
C 10.0.0.0 is directly connected, FastEthernet0/0
11.0.0.0/24 is subnetted, 1 subnets
C 11.22.33.0 is directly connected, FastEthernet0/1
静态路由: 手动指定路由表信息
R1先配置接口地址:
Router>enable
Router#config t
Router(config)#hostname R1
R1(config)#
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int fa0/0
R1(config-if)#ip add 10.0.0.1 255.255.255.0
R1(config-if)#no shut
R1(config-if)#int fa0/1
R1(config-if)#ip add 1.1.1.1 255.255.255.0
R1(config-if)# no shut
R2路由器:
Router>enable
Router#config t
Router(config)#hostname R2
R2(config)#
R2(config)#
R2(config)#int fa0/0
R2(config-if)#ip add 1.1.1.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#int fa0/1
R2(config-if)#ip add 2.2.2.1 255.255.255.0
R2(config-if)#no shut
R3路由器:
Router#config t
Router(config)#hostname R3
R3(config)#
R3(config)#int fa0/0
R3(config-if)#ip add 2.2.2.2 255.255.255.0
R3(config-if)#no shut
R3(config-if)#int fa0/1
R3(config-if)#ip add 11.22.33.1 255.255.255.0
R3(config-if)#no shut
R1配置静态路由:
R1(config)#ip route 11.22.33.0 255.255.255.0 1.1.1.2
R2配置静态路由:
R2(config)#ip route 11.22.33.0 255.255.255.0 2.2.2.2
R2(config)#ip route 10.0.0.0 255.255.255.0 1.1.1.1
R3配置静态路由:
R3(config)#ip route 10.0.0.0 255.255.255.0 2.2.2.1
动态路由:
R1:
Router>enable
Router#config t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa0/0
Router(config-if)#ip add 10.0.0.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#int fa0/1
Router(config-if)#ip add 1.1.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#hostname R1
R1(config)#
R1(config)#
R1(config)#router rip # 开启rip协议
R1(config-router)#network 1.1.1.0 # 宣告1网段
R1(config-router)#network 10.0.0.0 # 宣告10网段
路由表:
C 1.1.1.0 is directly connected, FastEthernet0/1
R 2.0.0.0/8 [120/1] via 1.1.1.2, 00:00:05, FastEthernet0/1
10.0.0.0/24 is subnetted, 1 subnets
C 10.0.0.0 is directly connected, FastEthernet0/0
R 11.0.0.0/8 [120/2] via 1.1.1.2, 00:00:05, FastEthernet0/1
R2:
Router#config t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#
Router(config)#int fa0/0
Router(config-if)#ip add 1.1.1.2 255.255.255.0
Router(config-if)#no shut
Router(config-if)#
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
Router(config-if)#int fa0/1
Router(config-if)#ip add 2.2.2.1 255.255.255.0
Router(config-if)#no shut
Router(config)#hostname R2
R2(config)#
R2(config)#
R2(config)#route rip
R2(config-router)#network 1.1.1.0
R2(config-router)#network 2.2.2.0
路由表:
C 1.1.1.0 is directly connected, FastEthernet0/0
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, FastEthernet0/1
R 10.0.0.0/8 [120/1] via 1.1.1.1, 00:00:17, FastEthernet0/0
R 11.0.0.0/8 [120/1] via 2.2.2.2, 00:00:02, FastEthernet0/1
R3:
Router>enable
Router#config t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#
Router(config)#int fa0/0
Router(config-if)#ip add 2.2.2.2 255.255.255.0
Router(config-if)#no shut
Router(config-if)#int fa0/1
Router(config-if)#ip add 11.22.33.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#
Router(config-if)#exit
Router(config)#hostname R3
R3(config)#
R3(config)#route rip
R3(config-router)#network 11.22.33.0
R3(config-router)#network 2.2.2.0
路由表:
R 1.0.0.0/8 [120/1] via 2.2.2.1, 00:00:23, FastEthernet0/0
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, FastEthernet0/0
R 10.0.0.0/8 [120/2] via 2.2.2.1, 00:00:23, FastEthernet0/0
11.0.0.0/24 is subnetted, 1 subnets
C 11.22.33.0 is directly connected, FastEthernet0/1
3.网络层次结构
3.1网络拓扑
网络层次结构
核心层:主要部署路由器设备,用于连接外网线路,还要具备冗余能力
汇聚层:主要部署三层交换设备,用于相应安全访问控制 进行链路汇聚
接入层:主要部署二层交换设备,用于终端设备接入
一层交换机:只支持物理层协议。
二层交换机:支持物理层和数据链路层协议。
三层交换机:支持物理层,数据链路层及网络层协议。
3.2网络类型
1.局域网:本地私有的一个网络范围。规模较大的局域网,也会称为园区网。
教室 家庭 公司内 校园
2.公网: 全球任意一个可以上网的地方都可以直接访问到
3.城域网:网络的覆盖面积达到了一个城市,就可以称为城域网。
4.广域网:覆盖面积 达到了全国或全球,就称为广域网,全球最大的广域网就是Internet互联网。
3.3网络层次模型(OSI7层模型)
3,4TCP/IP模型(4层模型)
3.5应用层协议介绍 (面试题)
面试题: 面试官问 ssh默认端口 http默认端口?
FTP 21 明文协议,文件传输协议,基于TCP
TFTP 69 简单文件传输协议,基于UDP
SSH 22 安全外壳协议,远程连接,加密
Telnet 23 明文协议,远程连接 # 连接路由器交换机常用
SNMP 161/162 简单网络管理协议,基于UDP
SMTP 25 简单邮件传输协议,基于TCP
HTTP 80 超文本传输协议
HTTPS 443 超文本传输安全协议
DHCP 67/68/546 动态主机设置协议,C(67),S(68),546(V6)
3.6数据包封装与解封装
封装过程:由上至下进行封装
应用层、表示层、会话层 PDU 数据
传输层:分段 TCP协议
网络层:打包 TCP协议+IP地址
数据链路层:成帧 TCP协议+IP地址+MAC地址
物理层:位 数据成为比特
拆包过程:由下至上进行拆包
物理层:位 比特
数据链路层:查看MAC地址
网络层:查看IP地址
传输层:查看TCP协议
前三层:数据内容
4.TCP 三次握手和四次挥手
4.1TCP的三次握手
1.客户端向服务端发送一个报文SYN=1,ACk=0,请求建立连接,选择了一个初始序号:seq=x
客户端进入SYN-SEND状态
2.服务端接收到SYN=1,ACK=0的请求报文后,返回一个SYN=1,ACK=1的确认报文,同时确认号seq=x+1,为自己选择一个初始序号seq=y
服务器进入SYN-REVD状态
3.客户端收到服务端的返回信息后,给服务端返回一条确认信息,ACK=1,确认号为seq=y+1
客户端进入ESTABLISHED状态
#为什么要三次握手
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。防止服务器的资源被浪费
确认双方的发送和接受能力
同步初始序列号
“已失效的连接请求报文段”的产生在这样一种情况下:客户端发出的请求连接的报文没有丢失,而是在某个网络节点长时间滞留,当延误得到释放后达到服务器,这本来应该是一个失效的报文,但服务端收到此失效的连接请求报文段后,就误认为是客户端再次发出的一个新的连接请求,于是就向客户端发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要服务端发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理睬服务端的确认,也不会向服务端发送数据。但服务端却以为新的运输连接已经建立,并一直等待客户端发来数据。这样,服务端的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,客户端不会向服务端的确认发出确认。服务端由于收不到确认,就知道客户端并没有要求建立连接。”
4.2 TCP四次挥手
1.客户端向服务端发送FIN=1,seq=z的断开连接请求 z是之前传输过来的最后一个字节的序号+1
客户端进入FIN-WAIT-1状态,等着服务器返回确认;
2.服务端收到客户端发送到断开连接请求后,发送确认信息ACK=1,seq=v ack=u+1
服务器进入CLOSE-WAIT状态。
3.当服务器也没有了可以传的信息之后,给客户端发送请求结束的报文。FIN=1,ACK=1,ack=u+1,seq=w。
这个时候的状态:服务器进入LAST-ACK状态。
4.客户端接收到FIN=1的报文之后,返回确认报文,ACK=1,seq=u+1,ack=w+1。
发送完毕之后,客户端进入等待状态,等待两个时间周期。关闭
#为什么要四次挥手
优雅地结束通信,释放双方占用的网络资源,确保数据传输的完整性和可靠。
# 为什么最后还要等待两个时间周期呢?
1、客户端的最后一个ACK报文在传输的时候丢失,服务器并没有接收到这个报文。这个候。服务器就会超时重传这个FIN消息,然后客户端就会重新返回最后一个ACK报文,等待两个时间周期,完成关闭。如果不等待这两个时间周期,服务器重传的那条消息就不会收到。服务器就因为接收不到客户端的信息而无法正常关闭。
2、预防上一次在三次握手中提到的失效的报文干扰。两个时间周期过去之后,所有的报文都会在网络中消失,保证下一次重新连接的时候有乱七八糟的报文影响。
4.3TCP11种状态集表示含义
1.CLOSED:
初始状态,表示TCP连接是“关闭着的”或“未打开的”。
2.LISTEN:
表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
3.SYN_RCVD:
表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
4.SYN_SENT:
这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
5.ESTABLISHED:
表示TCP连接已经成功建立; 表示两台机器正在传输数据
6.FIN_WAIT_1 :
这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到
fin_wait1状态是在server端主动要求关闭tcp连接,并且主动发送fin以后,等待client端回复ack时候的状态
7.FIN_WAIT_2:
上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。
8.TIME_WAIT:
表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)
9.CLOSING :
这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。
10.CLOSE_WAIT :
表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
11.LAST_ACK:
当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。
4.4因特网层协议介绍
ICMP Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
RARP 反向地址转换协议
ARP 地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。作用:有效的避免广播风暴的产生
动态ARP:自动完善ARP表信息,会定时更新ARP条目,自动更新ARP表时会消耗服务器性能,适用于主机更换频繁网络。
静态ARP:手工配置ARP表信息,不会实时更新ARP条目,节省服务器性能,适用于主机更换不频繁网络。
4.5网络接入层介绍
Ethernet 以太网(Ethernet)是一种计算机局域网技术。
FastEth 快速以太网(Fast Ethernet)是一类新型的局域网,其名称中的“快速”是指数据速率可以达到100Mbps,是标准以太网的数据速率的十倍。
Token Ring 令牌环网(Token Ring)是一种LAN协议,其中所有的工作站都连接到一个环上,每个工作站只能同直接相邻的工作站传输数据。
FDDI 光纤分布式数据接口,在光缆网络上发送数字和音频信号的一组协议。
5.ip地址
5.1IP地址基本概念
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP地址在网络层将不同的物理网络地址统一到了全球唯一的IP地址上(屏蔽物理网络差异),是唯一标识互联网上计算机的逻辑地址(相当于手机号码,可以通过唯一的手机号码找到手机),所以IP地址也被称为互联网地址(可见其重要性)。
5.2ip地址格式
我们目前常用的IPv4中规定,IP地址长度为32位二进制,在表示时,一般将32位地址拆分为4个8位二进制,再转为4个十进制数表示,每个数字之间用点隔开,如127.0.0.1(localhost),这种描述方式被称为“点-数表示法” 点分十进制。
11111111 11111111 11111111 11111111
255.255.255.255
IP地址层次:分为网络号和主机号两个层次。网络号表示主机所属网络,主机号表示主机本身。网络号与主机号的位数与IP地址分类有关。
5.3ip地址分配
IP地址分配的基本原则是:要为同一网络(子网、网段)内不同主机分配相同的网络号,不同的主机号。
5.4ip地址类型
#公有地址
公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。全球唯一,不能出现重复.
#私有地址
私有地址(Private address)属于非注册地址,专门为组织机构内部使用。缓解了地址枯竭 是可以重复使用的(不同局域网内)
#以下列出留用的内部私有地址
A类 10.0.0.0--10.255.255.255
10.0.0.1-10.0.0.254
10.0.1.1=10.0.1.254
10.0.2.1=10.0.2.254
10.1.0.1=10.1.0.1=10.1.0.254
B类 172.16.0.0--172.31.255.255
172.16.0.1-172.16.0.254
172.16.1.1-172.16.1.254
11111111=255
C类 192.168.0.0--192.168.255.255
192.168.0.1-192.168.0.254
www.zkl98.cn-192.168.1.254
192.168.2.1-192.168.2.254
5.5ip地址常见分类
#A类IP地址
一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,有126个网络,每个网络可以容纳主机数达1600多万台。
A类IP地址 地址范围1.0.0.1到127.255.255.254 (二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。
A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777212台。
#B类IP地址
一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,有16384个网络,每个网络所能容纳的计算机数为6万多台。
B类IP地址地址范围128.0.0.1-191.255.255.254 (二进制表示为:10000000 00000000 00000000 00000001----10111111 11111111 11111111 11111110)。 最后一个是广播地址。
B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台。
#C类IP地址
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,有209万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台计算机。
C类IP地址范围192.0.0.1-223.255.255.254 (二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。
C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台
#D类地址用于多点广播(Multicast)。
D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。
#E类IP地址
以“llll0”开始,为将来使用保留。
5.6特殊的ip地址
1.每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
2.IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;
3.IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用。
4.IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。
5.169.254.0.0~169.254.255.255,是开启了dhcp服务的设备但又无法获取到dhcp的会随机使用这个网段的ip
总结: 3类
A类 前1位网络位置 后三位主机位
127.0.0.1 127.255.255.254
B类: 前2位网络位置 后2位主机位
130.0.0.1 130.0.255.254
C类: 前3位网络位置 后1位为主机位
192.168.13.1 192.168.13.254
5.7子网掩码
子网掩码又叫网络掩码、地址掩码
用于计算当前网段有多少个可用ip
上面我们说到IP地址分为网络号与主机号,但是路由如何区分网络号与主机号呢?就需要通过子网掩码。子网掩码必须与IP地址结合使用,A、B、C类的子网掩码分别为255.0.0.0,255.255.0.0与255.255.255.0(网络号字节为255,主机号字节为0)。
也就是说给你一个IP地址,那么怎么知道它的网络号和主机号各是多少位呢?
如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现
子网掩码的重要作用:就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码的位数就是网络的位数。A类网络的网络位数是8位,子网掩码就是255.0.0.0,B类网络的网络位数是16位,子网掩码是255.255.0.0,C类是24位,255.255.255.0。
5.8网关
网关(Gateway)又称网间连接器,就是一个网络连接到另一个网络的“关口”。
网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“www.zkl98.cn~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
6.抓包方式
- Windows 使用wireshark抓包软件
- Linux 使用抓包命令tcpdump
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具 tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息 安装tcpdump [root@zkl ~]# yum -y install tcpdump #常用选项 -i #监听哪一个网卡 -n #不把ip解析成主机名 -nn #不把端口解析成应用层协议 -c #指定抓包的数量 -S #不把随机序列和确认序列解析成绝对值 -w #将流量保存到文件中,文件中的信息是无法直接查看的 -r #读取文件中的内容 -v #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 -vv #输出详细的报文信息。 -nnvvi ens33
1.默认启动
tcpdump -vv
#普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
2.过滤主机
[root@zkl ~]# ping www.zkl98.cn
[root@zkl ~]# tcpdump -i ens33 host www.zkl98.cn 抓取所有经过ens33,目的或源地址是www.zkl98.cn的网络数据
tcpdump -i ens33 src host www.zkl98.cn #指定源地址,www.zkl98.cn
[root@zkl ~]# tcpdump -i ens33 src host www.zkl98.cn
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
16:33:27.328139 IP 60.205.235.116 > zkl: ICMP echo reply, id 8833, seq 3, length 64
16:33:28.363340 IP 60.205.235.116 > zkl: ICMP echo reply, id 8833, seq 4, length 64
16:33:29.314908 IP 60.205.235.116 > zkl: ICMP echo reply, id 8833, seq 5, length 64
16:33:30.327824 IP 60.205.235.116 > zkl: ICMP echo reply, id 8833, seq 6, length 64
tcpdump -i ens33 dst host www.zkl98.cn #指定目的地址,www.zkl98.cn
[root@zkl ~]# tcpdump -i ens33 dst host www.zkl98.cn
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
16:34:04.161090 IP zkl > 60.205.235.116: ICMP echo request, id 8837, seq 3, length 64
16:34:05.167998 IP zkl > 60.205.235.116: ICMP echo request, id 8837, seq 4, length 64
16:34:06.175584 IP zkl > 60.205.235.116: ICMP echo request, id 8837, seq 5, length 64
16:34:07.218220 IP zkl > 60.205.235.116: ICMP echo request, id 8837, seq 6, length 64
3.过滤端口
[root@zkl ~]# tcpdump -nnvvi ens33 port 80 #抓取所有经过ens33,目的或源端口是80的网络数据
tcpdump -i ens33 src port 80 #指定源端口
tcpdump -i ens33 dst port 80 #指定目的端口
4.协议过滤
tcpdump -i ens33 arp
tcpdump -i ens33 ip
tcpdump -i ens33 tcp
tcpdump -i ens33 udp
tcpdump -i ens33 icmp
#抓tcp某端口的数据包
tcpdump -i ens33 tcp port 80 -nn
7.Linux常用的网络命令
1.ping
ping命令主要的功能是用来检测网络的连通情况和分析网络速度。
参数选项
Windows
-t #持续ping,不中断。不加该选项只ping4个包。
-n #ping的包数,默认是4个。
Linux
-c #ping包的个数,默认持续ping
-W #多长时间ping一次。linux 延时1s
-f #极速ping
[root@zkl ~]# ping -c1 -w1 www.zkl98.cn
PING www.zkl98.cn (60.205.235.116) 56(84) bytes of data.
64 bytes from 60.205.235.116 (60.205.235.116): icmp_seq=1 ttl=128 time=7.91 ms
--- www.zkl98.cn ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.906/7.906/7.906/0.000 ms
2.nc
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
#常用选项
-l #用于指定nc将处于侦听模式。
-u #指定nc使用UDP协议,默认为TCP
-v #输出交互或出错信息,新手调试时尤为有用
-w #超时秒数,后面跟数字
-z #表示zero,表示扫描时不发送任何数据
3.nmap
Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具。Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。
[root@zkl ~]# nmap www.zkl98.cn
Starting Nmap 7.92 ( https://nmap.org ) at 2024-11-29 16:59 CST
Nmap scan report for www.zkl98.cn (60.205.235.116)
Host is up (0.048s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 54.03 seconds
#常用选项
-p #指定端口号
-p22 #单个端口
-p22,80 #多个端口
-p1-1000 #1到1000之间的端口
4.telnet
一种远程登录的工具。同样可以检查某个主机是否开启某个端口 默认端口23
#用法 主要功能链接路由器、交换机 telnet 192.168.13.1
[root@zkl ~]# telnet www.zkl98.cn 22
Trying 60.205.235.116...
Connected to www.zkl98.cn.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.10
5.netstat
打印网络连接、路由表、tcp11种状态。查看当前系统中运行了哪些服务端口
#常用选项
-l #只显示监听套接字。
-n #不做名字解析
-t #显示tcp端口
-u #显示udp端口
-p #显示pid和程序名字
-r #显示路由表
-a #显示所有的套接字
[root@zkl ~]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3809/nginx: master
tcp 0 0 0.0.0.0:11314 0.0.0.0:* LISTEN 1059/sshd: /usr/sbi
tcp6 0 0 :::80 :::* LISTEN 3809/nginx: master
tcp6 0 0 :::11314 :::* LISTEN 1059/sshd: /usr/sbi
udp 0 0 127.0.0.1:323 0.0.0.0:* 770/chronyd
udp6 0 0 ::1:323 :::* 770/chronyd
6.ss
跟netstat命令差不多。
#常用选项
-l #只显示监听套接字。
-n #不做名字解析
-t #显示tcp端口
-u #显示udp端口
-p #显示pid和程序名字
-r #解析主机名
-a #显示所有的套接字
[root@zkl ~]# ss -lnutp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=770,fd=6))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=770,fd=7))
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3811,fd=8),("nginx",pid=3810,fd=8),("nginx",pid=3809,fd=8))
tcp LISTEN 0 128 0.0.0.0:11314 0.0.0.0:* users:(("sshd",pid=1059,fd=5))
tcp LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=3811,fd=9),("nginx",pid=3810,fd=9),("nginx",pid=3809,fd=9))
tcp LISTEN 0 128 [::]:11314 [::]:* users:(("sshd",pid=1059,fd=6))
7.traceroute
路由跟踪(检查你与目标之间每个路口是否畅通)
#常用选项
-n 禁止把IP解析为对应的域名(主机名)
在Linux系统中使用:
[root@zkl ~]# traceroute -n -I www.zkl98.cn
traceroute to www.zkl98.cn (60.205.235.116), 30 hops max, 60 byte packets
1 10.0.0.2 0.088 ms 0.212 ms 0.178 ms
2 192.168.31.1 2.824 ms 3.572 ms 3.561 ms
3 192.168.10.1 3.533 ms 3.511 ms 3.483 ms
4 192.168.1.1 3.455 ms 4.101 ms 4.092 ms
5 221.218.208.1 5.456 ms 6.320 ms 6.165 ms
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 60.205.235.116 8.347 ms 8.371 ms 8.347 ms
8.iftop
iftop界面说明:
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
#常用选项
-i #设定监测的网卡
-B #以bytes为单位显示流量(默认是bits)
-n #使host信息默认直接都显示IP
-P #使host信息及端口信息默认就都显示
-m #设置界面最上边的刻度的最大值,刻度分五个大段显示
按q退出监控。
Comments NOTHING