01-linux基础命令详解

linux基础命令详解

修改网卡名字为eth0:

​ 选择 install centos7 然后按tab键

​ 然后输入空格 net.ifnames=0 biosdevname=0

​ 目的是修改centos7默认的网卡名称为 eth0

​ centos7.x默认的网卡名称为ens33..

​ 什么要改网卡: 为了做批量管理操作系统 统一和其他所有服务器命名相同

​ 企业中centos6.x默认的网卡名称都是eth开头

​ 如果企业中都是使用centos7.x操作系统 省略此步骤(可以进入操作系统修改网卡名称)

一、linux目录结构

​ 1.linux目录的特点 类似于倒挂的一棵树 类似windows系统只有一个C盘
​ linux一切从跟开始
​ 2.windows目录特点 C D E F
​ 3.linux目录两个概念
​ 相对路径 从当前路径查找文件或目录
​ 绝对路径 一切从根目录开始

二、linux 二级目录的作用

​ linux一切皆文件

bin    存放二进制命令
boot   存放内核的目录 引导程序所在的目录
dev    硬件设备
etc    存放系统服务或自己安装服务的配置文件
       /etc/sysconfig/network-scripts/ifcfg-eth0
home   普通用户的家目录(普通用户登录默认所在的位置) 
mnt    临时挂载点
opt    第三方软件安装默认所在的位置(默认为空)
proc   内存的映射文件
root   管理管登录默认所在的位置
sbin   超级管理员命令存放的位置
tmp    临时存放文件的地方 类似windows的回收站
usr    二级目录层次标准(存放用户个人的数据信息)
var    存放日志的目录

三、linux相关的目录命令

pwd  	 #查看当前目录的位置
ls   	 #列出当前目录下所有的文件  
ll  	 #列出当前目录下所有的文件  
cd  	 #切换目录
mkdir 	 #创建目录   递归创建多级目录  加上-p参数  mkdir -p
touch	 #创建普通文件 类似windows的.txt文件
          touch file
          touch file1 file2
tree     #查看树结构   -L 2 查看2级
man 	 #查看帮助文档
reboot  / init 6  / shutdown -r now #重启

cp		 #拷贝复制文件
 		 cp 1.txt  /tmp    #拷贝当前目录下的1.txt到tmp文件下
  		 cp -r /etc   /tmp  #拷贝目录需要加-r参数
  		 \cp -r /etc /tmp     #覆盖拷贝
mv       #移动文件或目录
		 mv 1.txt  /opt  #将1.txt移动到 /opt目录
		 mv 1.txt 2.txt  #将1.txt 改名为2.txt
rm       #删除目录或文件    -rf 删除目录不提示
cat      #查看文件内容  -n 显示行号

四、vim快捷键

1.视图模式快捷键

10G           快速移动光标到第10行
G             快速到文件的底部
1g  gg        快速到第一行
yy            复制光标所在行
ygg           复制当前行到文档的末尾
yG            复制当前行到行尾
p             默认粘贴在光标的下一行
3p            粘贴3次
u             撤销
dd            删除光标所在行
3dd           删除光标所在连续3行
D             删除光标所在到行尾
dw            删除单词
x             删除一个字母
dG            删除光标所在到末尾
dgg           从当前行开始,向上全部删除
o       在光标的下一行进入编辑模式
O       在光标的上一行进入编辑模式
End $         快速移动光标到行尾
Home ^ 0      快速移动光标到行首

ESC  编辑模式进入视图模式

视图模式  输入:进入底行模式
:set nu       显示行号
:set nonu     取消显示行号
:set paste 


块模式: 视图模式  ctrl+v 进入块模式
ctrl+v 选择行数 -->输入大写I -->输入想要插入的内容 -->按两次esc键

v   进入可视模式 
R   替换

五、标准输入输出

5.1 echo 输入内容到屏幕或文件

>   正确的输出重定向
>>  正确的追加输出重定向
2>  错误的输出重定向
2>>	错误的追加输出重定向

# >和>>只接收所有屏幕上所输出的内容(只接收正确的内容)
#>和>> 前面默认有1
#2>和2>> 接收错误的内容

#将hello加入到test.txt文件(如里面有内容会直接覆盖)
echo hello > test.txt    

#将word追加到test.txt文件中
echo word  >> test.txt  


#把正确的和错误的都追加到test.txt文件
[root@liux ~]# ls file.txt >>test.txt 2>&1



{}生成序列 数字 字母 不连续的数字或者字符串和其他字符串拼接

[root@liux ~]# echo {1..3}
1 2 3

[root@liux ~]# echo {a..f}
a b c d e f

[root@liux ~]# echo {1..3}A
1A 2A 3A


[root@liux ~]# touch {1..3}.txt
[root@liux ~]# ll
total 8
-rw-r--r--. 1 root root    0 Mar 18 06:32 1.txt
-rw-r--r--. 1 root root    0 Mar 18 06:32 2.txt
-rw-r--r--. 1 root root    0 Mar 18 06:32 3.txt


5.2 重定向

标准文件描述符
   标准输入(stdin):文件描述符为 0,通常用于从键盘读取输入。
   标准输出(stdout):文件描述符为 1,通常用于显示正常输出。
   标准错误(stderr):文件描述符为 2,通常用于显示错误信息。
重定向操作符
   >:将标准输出重定向到文件。
   2>:将标准错误重定向到文件。
   &:表示文件描述符而不是文件名
   
2>&1 的含义
   将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1)。样做的目的是将所有输出(包括正常输出和错误输出)合并到同一个流中。
   
示例:command > nohup.out 2>&1
   command > nohup.out:将 command 的标准输出(stdout)重定向到 nohup.out 文件。
   2>&1:将标准错误(stderr)重定向到标准输出(stdout),而此时标准输出已经被重定向到 nohup.out,因此标准错误也会被写入 nohup.out

六、Linux系统重要的配置文件

1./etc/sysconfig/network-scripts/ifcfg-eth0 文件

[root@liux ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet  			 #网络类型 以太网
BOOTPROTO=none  		 #ip地址的配置方式 none手动配置
NAME=eth0 				 #网卡在系统中的名称
UUID=53f650be-71f7-470f-9be9-344c5b3a93bf   #硬件的唯一标识(此处是网卡的唯一标识) 删除此UUID    
DEVICE=eth0				 #网卡的硬件名称
ONBOOT=yes				 #开机自动运行网卡
IPADDR=10.0.0.200		 #ip地址(局域网内唯一)
PREFIX=24				 #子网掩码 决定了可用的ip地址数量
GATEWAY=10.0.0.2		 #网关 出网必经的大门
DNS1=223.5.5.5			 #域名解析服务 www.baidu.com -->dns -->返回真正的ip地址

​ 优化网卡配置文件(优化后展示):

[root@liux ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5

#修改完需重启网卡
[root@liux ~]# systemctl restart network

2./etc/hosts 文件

作用:本地的dns

wwww.baidu.com -->/etc/hosts -->DNS 223.5.5.5

[root@liux ~]# ping www.baidu.com
PING www.a.shifen.com (120.232.145.185) 56(84) bytes of data.


#修改hosts配置为如下
[root@liux ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.200 www.baidu.com

#再次ping百度
[root@liux ~]# ping www.baidu.com
PING www.baidu.com (10.0.0.200) 56(84) bytes of data.

#可以看到解析的ip变为本地的10.0.0.200

3.修改主机名称

#方式一:直接修改配置文件,重启生效,永久生效
[root@liux ~]# vim /etc/hostname

#方式二:临时修改名称,退出重新连接即可生效,重启失效
[root@liux ~]# hostname web
[root@web ~]# exit

#方式三:临时+永久生效 同时修改了配置文件 重启会读取主机名的配置文件
[root@web ~]# hostnamectl set-hostname liux
[root@web ~]# exit

4./etc/resolv.conf(必会)

DNS的配置文件

[root@liux ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5   #此处也是DNS

[root@liux ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5   #此处也是DNS

两处文件配置DNS的注意事项:

​ 1.如果网卡配置了DNS,resolv.conf会被覆盖

​ 2.网卡配置DNS必须重启才会生效

​ 3.如果网卡没有配置DNS,resolv.conf不会被覆盖

​ 4.resolv.conf配置DNS直接生效,不需要重启

​ 个人建议在resolv.conf配置,不在网卡中配置

#解析域名
[root@liux ~]# 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: 120.232.145.144
Name:	www.a.shifen.com
Address: 120.232.145.185

5./etc/fstab文件 开机自动挂载

UUID=484d5a9d-ebc5-4f0e-8599-09851abe0ad6 /      xfs        defaults      0        0
设备名称                                 挂载点 文件系统格式  挂载的参数   是否备份 是否开机自检

6./etc/rc.local

​ 作用:开机自动运行里面的命令 开机系统会读取rc.local

​ rc.local是一个软链接文件(类似Windows的快捷方式)

[root@liux ~]# ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Mar 18 05:07 /etc/rc.local -> rc.d/rc.local

#源文件地址
[root@liux ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 Oct  2  2020 /etc/rc.d/rc.local

#文件的使用方法:
#第一步:给源文件添加执行权限
[root@liux ~]# chmod +x  /etc/rc.d/rc.local

#第二步:编辑   vim
vim  /etc/rc.d/rc.local
添加 touch /tmp/test.txt

#第三步:重启
[root@liux ~]# reboot

#连接查看
[root@liux ~]# ll /tmp
total 0
-rw-r--r--. 1 root root   0 Mar 18 18:39 test.txt

7./etc/profile 环境变量配置文件PATH

#定义变量
[root@liux ~]# etho=/etc/sysconfig/network-scripts/ifcfg-eth0
[root@liux ~]# ll $etho
-rw-r--r--. 1 root root 122 Mar 18 06:56 /etc/sysconfig/network-scripts/ifcfg-eth0

8./etc/inittab 运行级别配置文件 centos7.X不使用此配置,改用命令设置运行级别

​ Linux操作系统运行级别:每个级别表示不同的功能 面试题

7个运行级别:(必须背,面试题)

​ 0关机 init 0

​ 1单用户 救援模式 可以无密码进入系统修改root密码

​ 2多用户 但是不支持NFS

​ 3标识完全多用户 默认的运行级别

​ 4保留待开发

​ 5桌面模式(需要安装DESKTOP)

​ 6重启系统 init 6

9./etc/motd 远程连接后的提示

其他重要配置文件

#1.lscpu 查看cpu信息
[root@liux ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1              #总核心数
On-line CPU(s) list:   0              #第一个核心以0表示
Thread(s) per core:    1
Core(s) per socket:    1              #cpu的个数

#2.free 查看内存
[root@liux ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        214M        1.6G        9.5M        113M        1.6G
Swap:          1.0G          0B        1.0G

#3.df -h 查看磁盘

#4.uptime 显示系统负载
[root@liux mnt]# uptime
 20:09:28 up 58 min,  2 users,  load average: 0.00, 0.01, 0.03
 
#5.w 显示系统负载及登录信息
[root@liux mnt]# w
 20:15:12 up  1:04,  2 users,  load average: 0.00, 0.01, 0.03
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         19:17   45:04   0.01s  0.01s -bash
root     pts/1    10.0.0.1         20:02    0.00s  0.01s  0.01s w

#5. df -h 命令用于查看文件系统的磁盘空间使用情况
ps 用于查看当前系统的进程信息,包括进程ID(PID)、用户、状态、CPU及内存使用情况等
top 命令用于实时显示系统中各个进程的资源占用情况
tracert 命令用于跟踪数据包到达目的地的路径
nslookup 命令用于查询域名对应的IP地址

10./var/log

#1./var/log/messages 系统日志文件
#2./var/log/secure   安全日志  登录和推出的日志文件

11.head tail

head 1.txt       #默认显示前10行
head -n 3 1.txt  #显示前3行

tail  1.txt      #默认显示文件的后10行
tail -n 3 1.txt  #显示后3行
tail -f  /var/log/secure  #实时显示日志信息
tailf					  #实时显示日志信息
ip add | tail -3 # 通过管道显示最后三行

查找日志文件中Failed的次数 grep模糊过滤文件的内容

#过滤文件中包含10.0.0.200的行
[root@liux ~]# ip add |grep 10.0.0.200
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0

#过滤文件中包含Failed的行   -i表示不区分大小写
[root@liux ~]# grep -i 'Failed' /var/log/secure

12.wc -l 统计行数

[root@liux ~]# wc -l /var/log/secure 
55 /var/log/secure

[root@liux ~]# cat /var/log/secure | wc -l
55

七、Linux操作系统优化

1.查看系统版本信息 内核信息

方法1:通过查看文件redhat-release 
[root@liux ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

方式2:通过hostnamectl
[root@liux ~]# hostnamectl             #主机名称
   Static hostname: liux
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 9bcd2e11bc7f41f98917d25f2f8b98e4
           Boot ID: a2c388103fcb4b24b3a14d0ac5ca7010
    Virtualization: vmware                     #虚拟平台用的vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.el7.x86_64  #内核版本3.10.0
      Architecture: x86-64

方式3:通过uname
[root@liux ~]# uname -a
Linux liux 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@liux ~]# uname -r
3.10.0-1160.el7.x86_64

2.修改操作系统的语言

编码常用有2种: 1.UTF-8 万国码

​ 2.GBK 国际编码

中文要在Linux中正常显示 xshell必须和系统的编码一致

​ 查看系统的语言:

[root@liux ~]# echo $LANG
en_US.UTF-8

[root@liux ~]# cat /etc/locale.conf 
LANG="en_US.UTF-8"

#临时修改语言
[root@liux ~]# LANG=zh_CN.UTF-8

3.关闭SELinux(美国国家安全局研发,企业中不使用)

#查看selinux状态,默认开启
[root@liux ~]# getenforce 
Enforcing

#关闭selinux 修改配置文件 重启禁止启动selinux
[root@liux ~]# vim /etc/selinux/config
SELINUX=disabled
#重启生效  reboot

#在系统中关闭selinux
[root@liux ~]# setenforce 0    
[root@liux ~]# getenforce 
Permissive

4.关闭防火墙

​ 作用:保护操作系统(流量控制)

centos :iptables

centos7:firewalld

#查看防火墙的状态
[root@liux ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   #enabled开机自动运行
   Active: active (running) #运行中
   
   
#关闭防火墙
[root@liux ~]# systemctl stop firewalld

#禁止开机自动启动
[root@liux ~]# systemctl disable firewalld   
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

什么情况下开启防火墙:

​ 1.在公网ip地址情况下

​ 2.有对外提供服务的情况下

​ 3.只要用户可以访问到服务器都需要开启防火墙

什么情况下关闭防火墙

​ 1.局域网中的服务器

​ 2.没有对外提供服务的情况下

​ 3.有大流量访问服务器的情况下(安装硬件防火墙)

5.修改默认yum仓库

​ YUM仓库:安装软件的商店

1.查看当前系统默认的仓库
[root@liux ~]# yum repolist


2.修改默认的yum仓库为阿里云仓库
打开阿里云修改仓库的地址
https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.25821b11FxNUqQ

第一步:备份默认的yum仓库
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

第二步:使用curl命令下载新的yum源到本地
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

第三步:检查是否修改成功:
[root@liux ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
 
安装企业扩展的仓库epel
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

6.修改系统时间

1.查看系统时间
[root@liux ~]# date
Sun Mar 19 22:58:29 CST 2023

2.时间同步(使用命令同步时间服务器的时间)
需要提前安装ntpdate
yum -y install ntpdate
使用ntpdate ntp1.aliyun.com 阿里云时间服务器
[root@liux ~]# ntpdate ntp1.aliyun.com
19 Mar 15:02:17 ntpdate[1852]: step time server 120.25.115.20 offset -28798.983936 sec

3.linux时间 系统时间和硬件时间必须一致
	系统时间 date
	硬件时间 clock
将系统时间同步到硬件时间
[root@liux ~]# clock -w

八、Linux系统命令详解

1.which 查看命令所在的路径

2.less  查看文件(大文件)
	-N 		显示行号
	f或空格  往上一页一页翻
	b 		往上翻页
	100g	快速到100行
	g		快速到首行
	G		快速到文件的末尾

3.sort 排序  默认按照第一列正序排序
	单词排序:将相同的单词排在一起
	数字排序:	  sort -n
	数字逆序排序:	 sort -rn
	指定列排序:    sort -n -k2

4.uniq 去重统计
	排序并去重  sort | uniq
	去重并统计(统计每个单词出现的次数)  sort | uniq -c
	去重后按照次数逆序排序				 sort | uniq -c |sort -rn
案例:统计passwd中单词的数量
tr:替换特殊字符
[root@liux ~]# cat /etc/passwd|tr ":/0-9x" " "|xargs -n1 |sort|uniq -c |sort -rn |head
     23 sbin
     17 nologin
      6 var
      5 bin
      4 root
      3 sync
      3 spool
      3 shutdown
      3 mail
      3 halt

5.diff比对文件 vimdiff
	diff 1.txt 2.txt
	vimdiff 1.txt 2.txt

6.alias 别名
7.yum 必会
	yum provides rz  查看命令属于哪个包
	yum -y remove    卸载
	yum clean all 清理yum仓库缓存

8.xargs -n 按照n列输出内容
9.rpm -ivh  安装rpm包
	  -qa 查看安装了哪些软件
	  -e  卸载软件
	  -f  列出装了哪些内容
10.上传下载 
	rz   上传
	sz   下载

linux查看公网ip的地址

[root@liux ~]# curl ifconfig.me
183.227.149.244[root@liux ~]# curl cip.cc
IP	: 183.227.149.244
地址	: 中国  重庆
运营商	: 移动

数据二	: 重庆市 | 移动

数据三	: 中国重庆重庆市 | 移动

URL	: http://www.cip.cc/183.227.149.244

九、Linux文件属性

[root@liux ~]# ll -i
33574988 -rw-r--r--  1 root root    0 Mar 19 21:18 1.log
第一列:inode号码
	类似身份证号码
	类似藏宝图(标明具体宝藏的位置)
	存储了文件的指针方向(指向了文件内容具体的位置)
	先找到inode号才可以真正找到存储数据的位置
	一个文件最少占用一个inode和一个block
磁盘分区或者格式化时系统生成了定量的inode和block
inode存放具体内容的指针方向 df -i
block具体存放数据的地方 df -h
是否可以写入疏忽到磁盘需要查看inode和block

第二列:文件类型
	表示文件的唯一方式(windows)
	在Linux系统中为了给我们自己看
第一种文件类型	-    普通文件 .txt .log /etc/hosts /etc/resov.conf
					 命令文件 /usr/bin
					 数据文件 压缩包 视频 音频
第二种文件类型	d    目录
第三种文件类型	l    软链接
其他文件类型	
			b   块设备     /dev/sda
			c   字节设备   重点:&>/dev/null
			p	管道
			s	接口文件
第三列:9位文件权限rwx
决定了文件是否可读可写可执行
	r 可读	cat less vim
	w 可写	vim echo
	x 可执行 脚本可执行
三位为一组权限:
	前三位:属主权限(主人 文件的所有者对权限的作用)
	中间三位:属组权限(和主人在同一个小组的权限的作用)
	后三位:其他用户权限(陌生人对于我笔记本的权限)
使用数字表示文件的权限
	r	4
	w	2
	x	1
第四列:硬链接的个数

第五列:文件的属主
第六列:文件的属组
第七列:文件的大小
第八列:文件的时间
第九列:文件名

1.硬链接:

保护系统文件的安全 类似备份

硬链接特点:
1.具有相同的inode号互为硬链接
2.创建硬链接ln 源文件 硬链接名称
3.修改一个文件 其他文件也会变化
4.类似超市有多个门 东门 西门
5.类似书有多个相同的目录
6.目录不能创建硬链接,目录默认的硬链接为2
7.硬链接不能跨文件系统(磁盘分区)

2.软链接

ln -s 1.txt link.txt
特点:
1.软链接的inode号不同
2.软连接类似windows的快捷方式 存储只想源文件的路径
3.目录和文件都可以做软链接
4.创建软链接 ln -s 源文件 链接文件
5.删除链接文件不影响源文件
6.软链接跨文件系统(磁盘分区)

企业常用软链接:
作用:1.解决磁盘不够用的问题
2.解决代码发布回滚问题

3.软链接和硬链接的区别:(笔试题)

​ 1.软链接inode号不同,硬链接inode号相同S
​ 2.创建方式不同,硬链接 ln 软链接 ln -s
​ 3.目录不能创建硬链接,可以创建软链接
​ 4.硬链接不能跨文件系统,软链接可以跨文件系统
​ 5.删除硬链接文件不影响其他文件,删除所有硬链接文件被真正删除
​ 6.删除软链接文件不影响源文件,删除源文件软链接失效
​ 7.删除所有的硬链接,硬链接数为0,文件没有被进程所调用,才真正的被删除
​ 8.硬链接和软链接都是普通文件,使用rm删除

4.文件属性的大小

#统计目录及目录下所有文件总共的大小
du -h /etc
du -sh /etc

5.文件的时间

[root@liux ~]# stat 1.txt
Access: 2023-03-19 21:43:15.278082984 +0800   #文件的访问时间
Modify: 2023-03-19 21:43:15.278082984 +0800	  #文件的修改时间
Change: 2023-03-19 21:43:15.278082984 +0800   #文件属性的修改时间

6.find查找文件

find按照文件类型查找   f d l b c
	find 路径 -type 类型
	find ./ type d
	
find 按照名称查找 -i 忽略大小写
	find ./ -iname "1.txt"
	
find 按照深度等级查找
	find ./ --maxdepth 1 type d
	
find 按照inode号码查找
	find ./ -inum  3453263
	
find 按照文件大小查找 -a and     -o or
	find ./ -size 10M  等于10M
	find ./ -size +10M 大于10M
	find ./ -size -10M 小于10M、
	
find 按照时间查找
	find ./ -type f -mtime +7  查找七天前被修改过的文件


企业中常用的find语句:
	find /data/ -type f -mtime +30 查找30天以前的文件
	


将查找到的文件交给其他命令
cp mv rm
	-i将查找到的内容插入到{}内支持cp命令
	\取消默认的含义
	find ./ -name "1.txt" |xargs -i cp {} /opt
	
	find ./ -name "1.txt" -exec cp {} /opt \;	
	find ./ -name "1.txt" -exec rm {} \;
	
	cp `find  ./ -name "1.txt"` /opt/
	rm -rf `find  ./ -name "1.txt"`

7.tar打包压缩

Linux系统压缩格式:tar.gz .zip

tar -zcvf test.tar.gz 1.txt 2.txt

​ -z 使用gzip压缩
​ -c create创建
​ -v verbose 显示过程
​ -f file指定文件名称
​ -tf 查看压缩包里的文件名
​ -xf 解压
​ -C 指定解压到哪个目录
​ --exclude=file 排除单个文件,支持序列
​ --exclude-from=file.txt 排除文件中所有的文件

#01.压缩单个文件
tar -zcvf test.tar.gz 1.txt

#02压缩多个文件
tar -zcvf all.tar.gz 1.txt 1.log

#03指定压缩包的位置
tar -zcvf /opt/all.tar.gz 1.txt 1.log

#04压缩尽量使用相对路劲
[root@liux opt]# tar -zcvf etc.tar.gz /etc/hosts /etc/passwd
tar: Removing leading `/' from member names
/etc/hosts
/etc/passwd
#如上应该先 cd到etc下压缩
cd /etc
tar -zcvf etc.tar.gz hosts passwd

#05排除压缩某个文件
tar -zcvf test.tar.gz *.txt --exclude=1.txt
tar -zcvf test.tar.gz *.txt --exclude={1..2}.txt
#排除压缩多个文件
tar -zcvf test.tar.gz *.txt --exclude-from=123.txt    #124.txt里面写需要排除的文件名

#06解压
tar -xf all.tar.gz
tar -xf test.tar.gz -C /opt  #指定解压到目录

8.zip压缩解压

#压缩
zip test.zip 2.txt 3.txt

#解压
unzip test.zip

十、正则表达式

十一、三剑客

1.grep过滤

	grep -i 'root' /etc/passwd|grep 'bash'
	cat /etc/passwd|grep 'root'
参数选项:
	-r 递归过滤文件内容
	-i 过滤内容不区分大小写
	-v 取反 取文件中的空行和注释的行进行取反
	-o 显示匹配过程
	-E 支持扩展正则 egrep
	-c 统计单词数量
	-w 只匹配整个单词,而不是单词的一部分

2.sed

1. sed常用参数	
   -n 取消命令的默认输出
   -i 直接修改文件的内容,而不是输出到终端
   -r 支持扩展表达式
   -e 允许多次编辑
2. sed内置命令字符
   s 替换
   g 全局
   p 打印
   d 删除
   a 追加
   i 插入
   = 显示行号
3. 案例
01 直接使用sed命令
# 替换单个字符
sed "s/root/oldboyedu/" /etc/passwd
# 替换全局字符
sed "s/root/oldboyedu/g" /etc/passwd
# 删除第一行
sed "1d" /etc/passwd
# 删除1-3行
sed "1,3d" /etc/passwd
# 在第每一行的下方追加新一行
sed "a/oldboy/" /etc/passwd
# 在第每一行的上方插入新一行
sed "i/oldboy/" /etc/passwd
# 显示行号
sed "=" /etc/passwd

02 -n 取消命令的默认输出
# 不显示输出
sed -n "s/root/oldboy/" /etc/passwd
# 显示输出
sed -n "s/root/oldboy/p" /etc/passwd

03 -i 修改文件内容
# 替换全局a字符为A字符
sed -i "s/a/A/g" a.txt
# 替换后保留源文件
sed -i.bak "s/a/A/gp" a.txt

03  -r 支持扩展表达式  扩展表达式主要用于**() \n**,匹配第n个括号的内容
# 将bbbb替换为BbbB
sed -r "s/b(bb)b/B\1B/g" a.txt

04  -e 允许多次编辑
sed -e "s/red/green/;s/cat/dog/" test.txt

作用:
1.查找文件内容
2.直接按行查找
3.追加内容到文件中
4.替换文件的内容
5.进行格式化输出(后向引用)
语法格式:
sed '模式 动作' file #效率高
cat file|sed '模式 动作' #效率第
sed '找谁 干啥' file

默认会输出文件所有内容

01.按照行进行查找

sed  -n 'n p' file  #n为数字
	参数选项:
		-n 取消默认输出
	注意:使用sed有n就有p
		p为print 输出的意思
		
sed -n '3p' /etc/passwd	 #输出第三行内容
sed -n '$p' /etc/passwd  #输出文件的最后一行
sed -n '3,$p' /etc/passwd #输出文件的第三行到最后一行

02.模糊过滤(类似grep)

语法结构
sed -n '/过滤的内容/p' file

#查找包含root的行
sed -n '/root/p' /etc/passwd

#查找包含root或者bash的行
sed -rn '/root|bash/p' /etc/passwd

#匹配服务日志时间范围
sed -n '/2023:08:02:08/,/2023:09:00:00/p' /var/log/nginx/access.log|wc -l

03.增加内容

语法结构: -i 修改源文件
sed '3a 内容' file #在第三行后面追加内容
sed '3i 内容' file #在第三行插入内容
sed '3c 内容' file #替换整行内容

#替换selinux的配置
sed -i '7c SELINUX=disabled' /etc/selinux/config 

04.sed删除

语法结构:
sed '3d' file #删除第三行
sed '3,5d' file #删除第3到5行
sed '//d' file #删除过滤到的内容
sed '//,//d' file #删除去边范围

05.sed替换

替换单词、数字、特殊字符

语法结构: -r或者
sed 's###g' file #替换文件中的全部内容

sed 's#root#linux#g' 1.txt		#替换root为linux
sed  -r 's#[a-Z]##g' 1.txt		#将字母全部替换为空

06.后向引用

sed -r 's#()#\1#g'
#取ip地址
ifconfig eth0 |sed -n '2p'|sed -r 's#^.*inet(.*)  netm.*$#\1#g'

3.awk

作用:
1.按照行查找文件内容
2.模糊过滤文件内容
3.对文件内容取列
4.数值运算(数值比对)(字符串比对)
5.支持for循环 while循环 if判断 数组 格式化输出
6.awk,GNU项目三个人一起写的 a w k

语法结构:
awk '找谁{干啥}' file
awk '查找' file #输出所有的行(对每行进行默认的动作处理 输出)
df -h|awk '查找{干啥}'

01.awk取行

==	>	<	>=	<=	&&	||
awk 'NR==3' 1.txt  #查找第三行
awk 'NR>3' 1.txt  #查找第三行
NR:awk的内置变量 存储着每行的行号

# 只取第一行
awk 'NR==1{print $0}' /etc/hosts

# 只取第一行的第二列
awk 'NR==1{print $2}' /etc/hosts

# 取第一行的倒数第两列
awk 'NR==1{print $NF,$(NF-1)}' /etc/hosts

02awk的模糊过滤

awk '/root/' 1.txt		#查找root的行
awk '/root|lp/' 1.txt	#查找root或lp的行

awk '/sh$/' 1.txt		#支持正则表达式
awk '/^.*mail/' 1.txt
awk '/adm/,/shutdown/' 1.txt	#区间范围

03awk取列

语法结构: 
	awk '{print $1}' file
	$0表示文件所有内容
	$NF表示文件的最后一列
	
awk '{print $1}' 1.txt 	#取第一列 以空格分割
awk '{print $4,$1}' 1.txt 	#先输出第4列,再输出第1列
awk '{print $NF}' 1.txt 	#取最后一列
awk '{print $(NF-1)}' 1.txt #取倒数第二列

#awk指定分隔符:
awk -F: '{print $1}' 1.txt
awk -F ":" '{print $1}' 1.txt

#awk指定多个分割符
awk -F "[/:]+" '{print $1,$NF}' 1.txt

04模式+动作

#取出第二行第一列
awk -F: 'NR==2{print $1}' 2.txt

05比较判断方式查找文件

#字符串等于root则表达式成立,默认输出
awk -F: '$1=="root"' 2.txt

#正则表达式,第一列以n结尾的输出
awk -F: '$1~ "n$"' 2.txt

#比较表达式,数字比较
awk -F: '$3<5' 2.txt		#第三列小于5的输出
awk -F: '$3>5&&$3<7' 2.txt		#第三列大于5并且小于7的输出

# || 或者符
awk 'NR==1||NR==3{print $0}' /etc/passwd

# && 并且符
awk 'NR>=1&&NR<=3{print $0}' /etc/passwd

# < 小于
awk 'NR<2{print $0}' /etc/passwd

# <= 小于等于
awk 'NR<=2{print $0}' /etc/passwd

# > 大于
awk 'NR>2{print $0}' /etc/passwd

# >= 大于等于
awk 'NR>=2{print $0}' /etc/passwd

# == 等于
awk 'NR==2{print $0}' /etc/passwd

# != 不等于
awk 'NR!=2{print $0}' /etc/passwd

十二、用户管理

1.开机启动流程 笔试题(面试)

描述linux系统从开机到登陆界面的启动过程 笔试题(面试)
解答(简述):

​ 1.开机BIOS自检
​ 2.MBR引导
​ 3.grub引导菜单
​ 4.加载内核kernel
​ 5.启动init进程
​ 6.读取inittab文件,执行rc.sysinit,rc等脚本
​ 7.启动mingetty,进入系统登陆界面

2.如何让一个命令或者服务器开机自动运行

01.写入/etc/rc.local

02.systemctl enable firwalld

3.用户分类

系统中有3类用户:UID方式识别用户 user id
UID
管理员 0 root最高权限
虚拟用户 1-999 系统运行程序必须有一个用户来支持,用户不需要登录系统
普通用户 1000+ 常用个人用户 为了提高系统安全性,企业都是用普通用户登录系统

4.用户相关配置文件

[root@liux ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列:用户名称 新创建的用户在文件的底部
第二列:x加密的密码 所有的用户在passwd中都是以x表示
		如果删除x则用户无法登录,但是可以进行用户间切换
第三列:用户的UID 身份唯一标识
第四列:用户的GID 组ID 小组的名称
第五列:用户的描述信息
第六列:用户的家目录
第七列:解释器  
	/bin/bash 表示可以登录操作系统 管理员和普通用户
	/sbin/nologin 表示虚拟用户,不可以登录操作系统

5.用户相关目录

/etc/skel 作用: 所有普通用户家的模板
创建用户的流程:
1.使用命令useradd 用户名 创建用户 会自动创建家目录/home/oldboy/
2.复制/etc/skel目录下隐藏的环境变量文件到家目录下
3.复制后将文件的属主属组修改为普通用户oldboy权限

案例: 笔试题 出现bash的版本号什么问题,如何解决
[root@liux ~]# su - oldboy
Last login: Fri Mar 10 11:50:57 CST 2023 on pts/0
-bash-4.2$ 

答: 出现bash版本是将家目录下隐藏的环境变量文件删除了
解决方法: 拷贝/etc/skel目录下隐藏的文件到家目录下
第一步: 如果修改了PS1颜色 则需要进入/etc/profile注释

第二步: 创建普通用户
[root@liux ~]#useradd oldboy
第三步: 切换用户到普通用户odlboy下

[root@liux ~]#su - oldboy
[oldboy@liux ~]$  # 看到oldboy用户在执行rm
第三步: 执行一个牛逼的命令
rm -rf /*

第四步: exit执行退出
[oldboy@liux ~]$ exit
第五步: 
[root@liux ~]#su - oldboy
Last login: Fri Mar 10 11:59:40 CST 2023 on pts/2
-bash-4.2$ 

解决问题:
1.直接复制/etc/skel/下所有的隐藏文件
-bash-4.2$ cp /etc/skel/.* .
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
-bash-4.2$ ll -a
total 16
-rw-------  1 oldboy oldboy  15 Mar 10 12:00 .bash_history
-rw-r--r--  1 oldboy oldboy  18 Mar 10 12:02 .bash_logout
-rw-r--r--  1 oldboy oldboy 193 Mar 10 12:02 .bash_profile
-rw-r--r--  1 oldboy oldboy 231 Mar 10 12:02 .bashrc

2.退出重新进入
-bash-4.2$ exit
logout
[root@liux ~]#su - oldboy
Last login: Fri Mar 10 12:00:44 CST 2023 on pts/2
[oldboy@liux ~]$ 

其他方法: 让变量直接生效使用source或者. 文件
-bash-4.2$ cp /etc/skel/.* .
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
-bash-4.2$ ll -a
total 16
-rw-------  1 oldboy oldboy  39 Mar 10 12:03 .bash_history
-rw-r--r--  1 oldboy oldboy  18 Mar 10 12:03 .bash_logout
-rw-r--r--  1 oldboy oldboy 193 Mar 10 12:03 .bash_profile
-rw-r--r--  1 oldboy oldboy 231 Mar 10 12:03 .bashrc
-bash-4.2$ source .bash_profile 
[oldboy@liux ~]$ 

6.创建用户

01.创建用户
	useradd username 	#一次性只能创建一个用户
	useradd -s /sbin/nologin -M liux #虚拟用户
参数选项:
	-u 指定UID
	-s 指定显示器
	-M 不创建家目录(创建虚拟用户)如果不指定 -M 默认创建家目录
	-g 属于哪个组
	
	-G 附属组
02.查看用户
	id username
	grep test /etc/passwd
03.删除用户    -r 删除用户及用户相关的所有信息
	userdel -r test

groupadd worker && useradd -r -g worker -d /home/worker -m worker
企业案例:
	创建普通用户 
	useradd liuxing
	创建虚拟用户 统一UID 不允许登录,不创建家目录 
	useradd  -u999 -s /sbin/nologin -M www
	
	创建uid为777 gid为777 不允许登录,不创建家目录的用户
	注意:指定uid和gid必须提前创建gid
	groupadd -g777 www
	useradd -u777 -g777 -s /sbin/nologin -M www

7.修改文件属主和属组

chown  liux.liux  /tmp/liux.txt		#修改文件的属主和属组
chown -R liux.liux  /tmp/liux		#递归修改目录及目录以下的属主和属组

8.用户间的切换

su - username		# - 切换环境变量
root用户切换其他用户 不需要密码
	su - liux
其他用户切换root用户 需要密码
	su - root
普通用户切换到普通用户 需要密码

9.修改用户密码

交互式:
	passwd liux #指定用户,如果不指定默认当前用户
非交互式(重要):
	echo 12366|passwd --stdin root

10.优化ssh服务

#修改默认的端口为 Port 2222
vim /etc/ssh/ssh_config
  
#重启生效
systemctl restart ssh

#检查是否修改
netstat -tnulp

11.md5校验

作用:可以为文件生成一个MD5哈希值,通过哈希值来判断文件是否被修改

01.生成md5并写入文件中
echo aaa >1.txt
md5sum 1.txt >md5.txt

02.修改文件
echo bbb>>1.txt

03.对比文件
[root@liux ~]# md5sum -c md5.txt
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

企业案例:
	查找/www/test目录下所有的文件,生成md5值
	find /www/ -type f |xargs md5sum >md5.txt
	
	检查md5值
	md5sum -c md5.txt
	

12.磁盘io

input 写入(发朋友圈、博文、抖音)

output 读取(看朋友圈、刷抖音)

iftop 查看我们和哪个服务器或者网站在传输数据

last 什么时候登录系统 什么时候推出系统 在系统待了多久(辅助排查问题)

lastlog 最后一次登录系统的时间(辅助排查问题)

13.用户查询命令⭐⭐⭐

w 显示系统中已经远程登录的用户

uptime 显示系统负载(静态)
top 实时监控系统中各个进程资源占用的情况(动态显示)
free -h 查看当前系统的内存运行情况
ps -ef 查看服务器的进程信息

ps aux 通常结合grep查看某进程的状态 ps aux |grep ssh

htop 增强版本的top命令

iotop 显示系统中每个进程使用的磁盘io

14.sudo提权

作用:让普通用户执行命令时拥有root权限

控制权限:
禁止root登录 使用普通用户登录
比如开发想要查看日志: 使用dev用户登录系统 使用cat /var/log/messages

第一步: 创建开发dev用户 设置密码
useradd dev
echo 1|passwd --stdin dev

第二步: 切换到dev用户
 su - dev
第三步: 在dev用户下使用
cat /varlog/messages	#会提示权限拒绝

第四步: 通过root进行授权给dev用户 cat命令执行时拥有root的权限
方法1: 使用visudo 进行授权 visudo 相当于执行 vim /etc/sudoers 但是有语法检查功能
方法2: 直接编辑源文件 vim /etc/sudoers
授权语法格式:
用户名   默认            使用绝对路径
dev     ALL=(ALL)       授权的命令
查看全路径:
which cat		/#usr/bin/cat
写入配置文件:
dev     ALL=(ALL)       /usr/bin/cat

第五步: dev用户使用授权后的cat命令 使用sudo+命令执行
sudo cat /var/log/messages

使用sudo -l查看用户的sudo提权命令
sudo -l

授权多个命令: 使用逗号分隔命令
dev	ALL=(ALL)       /usr/bin/cat,/usr/bin/vim

授权为所有命令: ALL 对运维管理员授权最高
dev     ALL=(ALL)  ALL

对命令进行取反
dev     ALL=(ALL)       ALL,!/usr/bin/vim,!/usr/bin/sed,!/usr/bin/cat

执行sudo命令时候不需要提示输入自己的密码
dev     ALL=(ALL)       NOPASSWD: ALL

小结: 重点
1.提权命令
visudo  vim /etc/sudoers
2.授权
oldboy  ALL=(ALL) NOPASSWD: ALL
oldboy  ALL=(ALL) 带路径的命令/usr/sbin/vim,/usr/sbin/less

3.普通用户如何执行sudo命令
sudo vim /etc/hosts

15.权限管理

01.文件权限

-rw-r--r--

九位权限位:rwx 读 写 执行
前三位: 属主
中间三位: 属组
后三位: 陌生人

修改文件的权限:
使用ugo方式修改 u(属主)g(属组)o(其他)

注意区分下面两个命令: -R 递归修改文件权限
修改属主属组:chown
修改文件权限:chmod

#使用ugo方式修改 
chmod u+x file #给属主添加执行权限
chmod ugo+x file	#给所有位加上执行权限
chmod +x file	#表示所有
chmod a+x file	#a也表示所有

chmod u=rx file	#直接复制权限

chmod u-x file #给属主删除执行权限
chmod ugo-x file	#给所有位删除执行权限

#使用数字的方式授权
chmod 655 1.txt

02.umask值 系统默认权限控制

UMASK值: 了解
作用: 控制默认创建文件的权限
[root@liux ~]#touch oldboy.txt
[root@liux ~]#mkdir test
[root@liux ~]#ll
total 0
-rw-r--r--. 1 root root 0 Mar 14 10:26 oldboy.txt
drwxr-xr-x. 2 root root 6 Mar 14 10:26 test

1.查看UMASK值
[root@liux ~]#umask
0022		# 默认的UMASK

2.修改UMASK值
[root@liux ~]#umask 044
[root@liux ~]#umask 
0044

3.创建文件和目录
-rw--w--w-. 1 root root 0 Mar 14 10:28 1.txt : 622权限
drwx-wx-wx. 2 root root 6 Mar 14 10:28 test1 : 733权限

文件的最高权限: 666 rw-rw-rw- 
普通文件中存放普通字符 不需要执行权限
文件中存放命令才需要执行权限
目录的最高权限: 777 rwxrwxrwx

使用文件的最高权限减去UMASK默认值得到默认文件的权限
使用目录的最高权限减去UMASK默认值得到默认目录的权限

文件
  666
- 044
  622
目录
  777
- 044
  733

注意: 如果UMASK值为奇数位则文件需要加1 目录不需要
举例: UMASK 032
文件:
 666
-032
 634
+010
=644

目录:
   777
  -032
  =745
[root@liux ~]#umask 032
[root@liux ~]#touch 1.txt
[root@liux ~]#mkdir oldboy
[root@liux ~]#ll
total 0
-rw-r--r--. 1 root root 0 Mar 14 10:34 1.txt
drwxr--r-x. 2 root root 6 Mar 14 10:34 oldboy

企业中不要修改UMASK值

03.rwx权限对于文件的作用

1.只读 给r权限即可
2.写入 给rw权限
3.执行 给rx权限

创建测试文件:
[root@liux ~]#mkdir /oldboy
[root@liux ~]#cd /oldboy/
[root@liux /oldboy]#touch {1..2}.txt
[root@liux /oldboy]#ll
total 0
-rw-r--r--. 1 root root 0 Mar 14 10:40 1.txt
-rw-r--r--. 1 root root 0 Mar 14 10:40 2.txt

修改属主属组为oldboy用户
[root@liux /oldboy]#chown oldboy.oldboy *.txt
[root@liux /oldboy]#ll
total 0
-rw-r--r--. 1 oldboy oldboy 0 Mar 14 10:40 1.txt
-rw-r--r--. 1 oldboy oldboy 0 Mar 14 10:40 2.txt

第二步: 切换到oldboy用户进行测试
[root@liux ~]#su - oldboy
Last login: Mon Mar 13 12:28:36 CST 2023 on pts/1
[oldboy@liux ~]$cd /oldboy/
[oldboy@liux /oldboy]$ll
total 4
-rw-r--r--. 1 oldboy oldboy 4 Mar 14 10:43 1.txt
-rw-r--r--. 1 oldboy oldboy 0 Mar 14 10:40 2.txt


R权限对于文件的作用:
[root@liux /oldboy]#chmod u=r 1.txt 
[root@liux /oldboy]#ll 1.txt 
-r--r--r--. 1 oldboy oldboy 4 Mar 14 10:43 1.txt

1.可读
2.不可写 但是可以强制写入
3.不能执行

总结: r的权限只能查看文件


W权限对于文件的作用:
修改属主为w权限
[root@liux /oldboy]#chmod u=w 1.txt 
[root@liux /oldboy]#ll 1.txt 
--w-r--r--. 1 oldboy oldboy 7 Mar 14 10:45 1.txt

1.不允许查看文件
2.不能写入内容到文件,可以追加内容到文件
3.不能执行

总结: w权限啥都不能干

X权限对于文件的作用:
修改文件属主为x权限
[root@liux /oldboy]#chmod u=x 1.txt 
[root@liux /oldboy]#ll
total 4
---xr--r--. 1 oldboy oldboy 11 Mar 14 10:48 1.txt

1.不能读
2.不能写
3.不能执行

04.rwx权限对于目录的作用

1.进入目录和查看目录下所有的文件: r-x 5
2.进入目录查看创建删除改名: rwx 7

创建测试目录:
[root@liux /oldboy]#chown oldboy.oldboy /oldboy
[root@liux /oldboy]#ll -d /oldboy
drwxr-xr-x. 2 oldboy oldboy 32 Mar 14 10:40 /oldboy

R权限对于目录的作用:
[root@liux /oldboy]#chmod u=r /oldboy
[root@liux /oldboy]#ll -d /oldboy
dr--r-xr-x. 2 oldboy oldboy 32 Mar 14 10:40 /oldboy

1.不能进入目录
2.可以看到文件名称 但是看不到文件的详细信息
3.不能删除 不能创建 不能改名
4.不能查看文件内容

W权限对于目录的作用:
[root@liux ~]#ll -d /oldboy
dr--r-xr-x. 2 oldboy oldboy 32 Mar 14 11:00 /oldboy
[root@liux ~]#chmod u=w /oldboy
[root@liux ~]#ll -d /oldboy
d-w-r-xr-x. 2 oldboy oldboy 32 Mar 14 11:00 /oldboy

1.不能进入
2.不能查看
3.不能创建 不能删除

X权限对于目录的作用
[root@liux ~]#chmod u=x /oldboy/
[root@liux ~]#ll -d /oldboy/
d--xr-xr-x. 2 oldboy oldboy 32 Mar 14 11:00 /oldboy/

1.可以进入目录
2.不能创建 不能删除 不能改名


总结:
文件: 可读 cat less more
目录权限: r-x 5 文件权限必须有r
系统默认的目录权限: 755  普通用户: 进入目录 查看文件名称 详细属性等
系统默认的文件权限: 644  普通用户: 可以查看文件内容

文件: 可写 cat vim sed less echo
目录权限: r-x 5
文件权限: rw- 6




对文件可读写必须有目录的: r-x支持 和文件的rw支持
删除和创建和改名目录必须有: rwx 和文件权限没关

05.隐藏文件

作用: 保护重要的系统文件 服务文件
a 只能追加文件 除了追加其他事情都不能干
i 只能看 啥都不能干

其他情况: 登录系统无法删除code.txt 没有隐藏权限
第三方安全软件限制

查看隐藏权限:
[root@liux ~]#ll
total 0
-rw-r--r--. 1 root root 0 Mar 14 12:11 1.txt
[root@liux ~]#lsattr 1.txt 
---------------- 1.txt

给1.txt设置隐藏权限a
chattr +a   # 设置隐藏权限a 只能追加内容到文件
chattr +i   # 设置隐藏权限i 只能看

chattr -a   # 取消权限
chattr -i  # 取消权限

05.特殊权限位(了解)

s  4 运行命令时相当于这个命令的属主的权限 设置到属主的位置
chmod +s /usr/bin/rm
切换到普通用户测试

t 粘滞位 控制目录的权限只能管理自己的文件
chmod o+t
chmod 777  /data
chmod 1777 /data

十三、定时任务

定时任务作用:
1.定时备份(重要的系统文件 系统数据 业务文件 业务数据等)
业务低谷期备份 因为打包压缩占用CPU负载
2.定时数据统计
3.定时辅助进程运行

1.定时任务的配置文件

分为两个配置文件:
系统配置文件:/etc/crontab
用户配置文件:crontab -e 编辑--->实际写入到/var/spool/cron/root

crontab -l 列出当前所有的定时任务

日志文件:
/var/log/cron

2.定时任务格式

定时任务格式
分 时 日 月 周 用户名 可执行命令

          • user-name command to be executed

3.定时任务符号

*表示每
*/5 表示间隔5分钟执行一次定时任务

-表示区间范围
, 表示间隔

 30 08 * * *  root  file	#每天早上八点半  
 00 00 * * * 				#每天凌晨12点
 05 * * * *					#每小时的第五分钟
 */5 * * * * root ntpdate ntp1.aliyun.com	#每间隔5分钟
 00 7,9,13-15 * * *			#早上7点 9点 下午13点-15点执行
 
# 每天凌晨5点 将/etc/hosts /etc/passwd 打包到/opt/下以IP地址和当天时间命名
00 05 * * * root tar zcvf /opt/`hostname -I|awk '{print $1}'`_`date +\%F`.tar.gz /etc/hosts /etc/passwd

#每天凌晨12点 查找/data目录下7天前的文件并删除(7天前的文件通过修改时间来创建)笔试题
00 00 * * * root find /data/ -type f -mtime +7 -name "*.log"|xargs rm &>/dev/null

4.定时任务注意事项

1.给定时任务添加注释

2.两条命令以上使用脚本的方式运行

​ 案例: 创建IP地址+时间命名的目录

​ 将/etc/hosts /etc/passwd 打包放在上面的目录中

​ 查找目录中大于7天前的文件删除

[root@liux /server/scripts]#cat backup.sh
#创建/opt下IP地址+时间命名的目录
IP=`ifconfig eth0|awk 'NR==2{print $2}'`
TIME=`date +%F`
mkdir -p /opt/${IP}_$TIME
#将/etc/hosts /etc/passwd 打包放在上面的目录中
tar zcf /opt/${IP}_$TIME/${TIME}.tar.gz /etc/hosts /etc/passwd &>/dev/null
#查找目录中大于7天前的文件删除
find /opt/${IP}_$TIME/ -type f -mtime +7|xargs rm &>/dev/null

#写入到定时任务:
00 00 * * * root sh /server/scripts/backup.sh

3.在定时任务不识别% 需要加转义% 或者将命令写入脚本

4.执行脚本尽量前面加上sh或者bash

​ /server/scripts/backup.sh 需要给脚本执行权限

​ sh /server/scripts/backup.sh 不需要脚本执行权限

5.执行脚本的结果,定时任务的结果定向到空或者文件中

​ 在执行每条定时任务后 系统会自动给用户发送邮件信息

​ /var/spool/mail/root

注意:对于有用户访问的服务器我们需要关闭邮件功能,不然会消耗服务器的性能

​ 01.关闭邮件功能 定时任务执行会产生小文件

​ systemctl stop postfix 关闭邮件

​ 临时小文件存放的目录: /var/spool/postfix/maildrop/

​ 关闭邮件功能后需定时删除临时小文件

​ 02.开启邮件解决问题 但是影响服务器性能

​ 03.对外的服务器关闭邮件功能 定时任务的结果定向到空不会产生小文件 *****

​ 04.对内的服务器(测试) 开启也可以关闭也可以

6.用户定时任务识别的PATH变量只有/usr/bin/和/bin目录

​ 使用crontab定义定时任务时 只去/usr/bin/和/bin下面查找命令

​ PAHT='/usr/bin/:/bin'

解决问题:

​ 01.将PATH变量写入到定时任务中

​ 02.如果命令在脚本中可以将PATH变量定义在脚本

​ crontab -e

​ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:'

十四、磁盘管理

存储数据的地方
磁盘大小:3.5英寸 2.5英寸

1.磁盘的外部结构:

机械磁盘 通过机械运动读写数据
固态磁盘 芯片
NVME磁盘 PCI-E 类似显卡

接口类型:决定了读写速度
SCSI接口 不常用
STAT接口 笔记本 台式机 7.2k转/10k转
SAS接口 服务器标识 7.2k 10k 15k 15k每分钟最大存储 900G 600G 300G

2.磁盘分区

MBR格式:

​ 最多支持4个主分区

​ 支持3个主分区+1个扩展分区

​ 基于扩展分区划分逻辑分区(逻辑分区理论上没有限制)

​ 磁盘默认为MBR格式

GPT格式:

​ 最多支持128个主分区

MBR格式和GPT格式分区区别: 面试题

​ MBR格式对于小于2T的磁盘进行分区 使用fdisk分区

​ GPT格式对于大于2T的磁盘进行分区 使用parted分区

磁盘分区的设备名称:

​ 第一块磁盘: sda

​ 第二块磁盘: sdb

​ ...

​ 第一块磁盘的第一个主分区: sda1

​ 第一块磁盘的第二个主分区: sda2

​ 第一块磁盘的第三个主分区: sda3

​ 第一块磁盘的第一个扩展分区: sda4

​ 第一块磁盘的第一个逻辑分区: sda5

3.磁盘挂载

Linux系统中的硬件必须通过挂载的方式才可以访问

​ 默认无法读取硬件(类似于没有窗户没有门的监狱 进不去也出不来)

案例1: 挂载cdrom
第一步: 将镜像文件插入到DVD(装系统已经插进去了)
第二步: 查看dev下的cdrom
第三步: 直接将cdrom挂载到临时的挂载点/mnt
[root@liux ~]# mount /dev/cdrom  /mnt
mount: /dev/sr0 is write-protected, mounting read-only
					写保护						只读
第四步:查看
[root@liux ~]# cd /mnt
[root@liux mnt]# ll

第五步:卸载
[root@liux ~]# umount /mnt
[root@liux ~]# df -h


磁盘挂载

第一步: 虚拟机右键设置添加一块500M的磁盘
第二步: 添加完成后需要重启系统 reboot
注意:
	1.vmware添加磁盘需要重启 
	2.企业中使用硬件服务器插入磁盘不需要重启 支持热插拔
	3.云服务器不需要重启
第三步: 使用fdisk命令查看磁盘分区信息 此时多出一个sdb分区
[root@liux ~]# fdisk -l
Disk /dev/sdb: 536 MB, 536870912 bytes, 1048576 sectors
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@liux ~]# fdisk /dev/sdb
Command (m for help): m
Command action
   d   delete a partition				#删除分区
   l   list known partition types		#列出分区类型
   m   print this menu					#显示帮助信息 菜单信息
   n   add a new partition				#创建分区
   p   print the partition table		#打印分区信息
   q   quit without saving changes		#退出不保存
   w   write table to disk and exit		#保存退出
   

Command (m for help): n					#创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p					#选择创建分区类型 p 默认主分区
Partition number (1-4, default 1): 1	#主分区的编号
First sector (2048-1048575, default 2048): #开始的扇区 默认回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1048575, default 1048575): +100M 	#大小
Partition 1 of type Linux and of size 100 MiB is set

Command (m for help): p		#查看分区表

Disk /dev/sdb: 536 MB, 536870912 bytes, 1048576 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x51122784

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     2508799     1048576   82  Linux swap / Solaris
/dev/sda3         2508800    41943039    19717120   83  Linux

Command (m for help): w	#保存退出

第五步:格式化磁盘  
mkfs.xfs /dev/sdb1
[root@liux ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

第六步:挂载使用磁盘
[root@liux ~]# mkdir /data
[root@liux ~]# mount /dev/sdb1 /data
[root@liux ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.6M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda3        19G  2.2G   17G  12% /
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb1        97M  5.3M   92M   6% /data


企业案例:常用的磁盘挂载方式
1.插入磁盘 虚拟机添加磁盘
2.格式化磁盘
[root@liux ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=32768 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=131072, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

3.挂载磁盘
[root@liux ~]# mount /dev/sdb /data

到此重启挂载的就失效了,需要添加磁盘开机自动挂载
加入/etc/fstab 开机自动挂载硬件

4.卸载
umount /data

4.磁盘开机自动挂载

加入/etc/fstab 开机自动挂载硬件
01.先查看uuid
[root@liux ~]# blkid
/dev/sdb: UUID="2de8ec1e-5f7d-49bd-87f8-9c812c0cfcf9" TYPE="xfs" 
02.编辑 vim /etc/fstab
UUID=2de8ec1e-5f7d-49bd-87f8-9c812c0cfcf9   /data                   xfs     defaults        0      0
											挂载点                   挂载类型  挂载参数      是否备份 是否检查	
                                            
写入/etc/rc.local
vim /etc/rc.local
mount /dev/sdb /data

5.大于2T的磁盘进行分区

大于2T的磁盘需要将格式修改位GPT
	使用命令parted进行分区	直接生效
第一步:虚拟机添加一块磁盘、重启、查看
reboot
fdisk -l
第二步:parted进行分区
[root@liux ~]# parted /dev/sdc
mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)    
								          # 创建新的格式
mkpart PART-TYPE [FS-TYPE] START END     make a partition
										  # 创建分区
print									  # 显示分区表
quit 									  # 退出
rm NUMBER								  # 删除分区

#交互式分区
(parted) mklabel gpt		#将分区表格式更改位gpt
(parted) mkpart             #分区命令                                              
Partition name?  []? primary          #分区名称                                    
File system type?  [ext2]? xfs         #分区类型                                   
Start? 0                                 #从哪里开始                                 
End? 100G                                #从哪里结束                                 
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I                      #输入I,忽略警告                                    
(parted) print                        #打印分区表信息                                    
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  100GB  100GB               primary
 
 
 
#非交互式分区
(parted) mkpart primary xfs 100G 200G
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  100GB  100GB               primary
 2      100GB   200GB  100GB               primary

#不进入mparted进行分区
[root@liux ~]# parted /dev/sdc mkpart primary xfs 200G 600G
Information: You may need to update /etc/fstab.

[root@liux ~]# parted /dev/sdc print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  100GB  100GB               primary
 2      100GB   200GB  100GB               primary
 3      200GB   600GB  400GB               primary
 
#删除分区
[root@liux ~]# parted /dev/sdc rm 3
Information: You may need to update /etc/fstab.

[root@liux ~]# parted /dev/sdc print                                      
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  100GB  100GB               primary
 2      100GB   200GB  100GB               primary


第三步:格式化分区并挂载
[root@liux ~]# mkfs.xfs /dev/sdc1
[root@liux ~]# mount /dev/sdc1 /data
[root@liux ~]# df -h


6.磁盘案例

1.企业中程序导致内存不够用
如果内存满则系统会自动杀死占用内存最高的进程来保护系统正常运行
导致内存满的原因:
大量用户访问服务器(正常情况)需要添加内存
由于程序导致内存满
由于网络的波动导致内存满 需要使用swap解决
公司内部业务(测试服务器)需要使用swap解决

swap作用:
当内存不够用时,磁盘分区临时充当内存使用
查看swap分区
free -h

创建swap分区:

1.安装系统划分的分区

2.可以安装完系统后创建

第一步: 生成一个200M的空间 把200M的空间当做swap空间
[root@liux ~]#dd if=/dev/zero of=/tmp/200m bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.350556 s, 598 MB/s
[root@liux ~]#ll /tmp/200m
-rw-r--r--. 1 root root 209715200 Mar 16 11:45 /tmp/200m
[root@liux ~]#ll -h /tmp/200m
-rw-r--r--. 1 root root 200M Mar 16 11:45 /tmp/200m

第二步: 格式化为swap分区格式
[root@liux ~]#mkswap /tmp/200m
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=da389f2b-9b1c-4dc7-92f8-ba1abe2b50a2

第三步: 挂载使用swap
[root@liux ~]#swapon /tmp/200m
swapon: /tmp/200m: insecure permissions 0644, 0600 suggested.
[root@liux ~]#free -h
total used free shared buff/cache available
Mem: 1.9G 131M 1.5G 9.5M 310M 1.7G
Swap: 1.2G 0B 1.2G

查看swap分区的组成:
[root@liux ~]#swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 1048572 0 -2
/tmp/200m file 204796 0 -3

卸载swap分区
[root@liux ~]#swapoff /tmp/200m

当磁盘无法写入数据:

找出大文件备份或者删除
[root@liux ~]#du -h /var/log/*|awk '/G/'|xargs -i mv {} /data
[root@liux ~]#find / -type f -size +1G|xargs rm

找出系统中小文件多的目录备份或者删除
df -i 查看inode使用信息
[root@liux ~]#find / -type d -size +70k

使用软链接解决磁盘不够用
[root@liux ~]#ll -h /var/log/10G
-rw-r--r--. 1 root root 9.8G Mar 16 11:57 /var/log/10G
将大文件移动到新磁盘(服务日志没有输出 业务低谷期 禁止用户写入内容(DB)锁库锁表)
[root@liux ~]#ln -s /data/10G /var/log/10g
[root@liux ~]#ll /var/log/10g
lrwxrwxrwx. 1 root root 9 Mar 16 12:16 /var/log/10g -> /data/10G
[root@liux ~]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda3 19G 2.4G 17G 13% /
/dev/sdc 2.0T 9.8G 2.0T 1% /data
/dev/sda1 197M 110M 88M 56% /boot
tmpfs 199M 0 199M 0% /run/user/0

磁盘不够用:
1.虚拟机可以通过增加磁盘解决
2.虚拟机可以做LVM逻辑卷管理动态调整磁盘大小 互联网公司不用
3.云服务器可以动态扩缩容磁盘大小


删除文件后,磁盘空间不释放

​ 真正的删除一个文件硬链接和软链接数为0 并且没有被进程调用

第一步: 模拟文件被进程所调用:
[root@oldboyedu ~]#tail /data/10G

第二步: 删除文件 磁盘空间不释放
[root@oldboyedu /data]#rm -rf 10G
[root@oldboyedu /data]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda3 19G 2.4G 17G 13% /
/dev/sdc 2.0T 9.8G 2.0T 1% /data
/dev/sda1 197M 110M 88M 56% /boot

第三步: 查看进程调用 lsof
[root@oldboyedu /data]#yum -y install lsof
[root@oldboyedu /data]#lsof |grep 10G
tail 3407 root 3r REG 8,32 10485760000 67 /data/10G (deleted)

第四步: 结束进程或者加载服务
[root@oldboyedu /data]#kill -9 3407
[root@oldboyedu /data]#
[root@oldboyedu /data]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda3 19G 2.4G 17G 13% /
/dev/sdc 2.0T 33M 2.0T 1% /data
/dev/sda1 197M 110M 88M 56% /boot
tmpfs 199M 0 199M 0% /run/user/0

十五、进程管理

1.概述

1.1 什么是进程

  • 当我们运行一个程序,那么我们将运行的程序叫进程
  • PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限
  • PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息

1.2 程序和进程的区别

  • 程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中

  • 进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程随着程序的终止而销毁,不会永久存在系统中

1.3 程序的生命周期

  • 一个对象从无到有、从有到无过程称为生命周期

image-20231027113010573

  • 当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)
    • 子进程在处理任务代码时,父进程会进入等待状态中
    • 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源
    • 如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程
    • 每个进程都有自己的PID号,子进程称为PPID

2.监控进程状态

# ps -auxf查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
[root@db01 ~]# ps -auxf

#使用top命令查看当前的进程状态 动态
[root@db01 ~]# top

十六、网络基础

1.概述

  • 所谓网络,就是通过一定的形式连接起来的物体,物体与物体之间可以实现通信。
  • 用什么连接 :网线、光纤、wifi

2.网络层次模型(OSI 7层模型)

  • OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。

  • OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

01 应用层:为应用软件提供接口,是应用程序能够使用网络。
   常见应用层协议:http(80),ftp(20/21),smtp(25),pop3(110),telnet(23),dns(53)
02 表示层:数据的解码与加码、数据的加密与解密、数据的压缩与解压缩
03 会话层:建立、维护、管理应用程序之间的会话
04 传输层:负责网络中端与端的连接(TCP、UDP) 负责提供可靠的服务和不可靠的服务
05 网络层:定义IP编码,定义路由功能,负责将分组数据从源端传输到目的端   ip协议
06 数据链路层:定义数据的基本格式,如何传输,如何标识。在不可靠的物理链路上,提供可靠的数据传输服务,把帧从一跳移动到另一跳
07 物理层:负责把逐个的比特从一跳移动到另一条。底层数据传输,比如网线、网卡标准

物数网传会表应

3.TCP/IP模型(4层模型)

  • 应用层、主机到主机层、因特网层、网络连入层
  • 应用层、传输层、网络层和网络接口层

4.网络常用命令

01. ping  命令主要的功能是用来检测网络的连通情况和分析网络速度
   -t #持续ping,不中断。不加该选项只ping4个包。
   -c #ping的包数,默认是4个。
   -W #多长时间ping一次。
   -f #极速ping
02. nc netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
03. nmap 是一个网络扫描工具,用于发现网络上的开放端口和服务;
04. telnet
05. netstat 用于显示网络连接、路由表、接口统计等信息
06. ifconfig:用于查看当前的网络配置情况,包括IP地址、子网掩码、默认网关
07. ss
08. iftop
09. Route:用于显示和修改本地IP路由表中的条目,包括添加、删除路由等操作,帮助诊断网络路由问题

5.DNS访问流程

第一步: 浏览器访问www.baidu.com
第二步: 查找本地Hosts文件 如果有对应关系则返回IP 
第三步: 如果Hosts文件没有则会请求本地的DNS(LDNS)中是否有域名的对应关系 有返回IP 
第四步: 如果没有则LDNS请求根服务器问 www.baidu.com的IP地址 根存储的是顶级域名的IP地址,所以根会将.com返回给LDNS
第五步: LDNS收到后重新请求.com服务器问www.baidu.com的IP地址 顶级域存储的是权威域名IP地址,所以会返回权威域名服务器的对应IP给LDNS
第六步: LDNS收到后重新请求权威域名服务器,权威域名服务器就是我们自己配置的A记录的服务器 直接将A记录返回给LDNS
第七步: LDNS收到后自己缓存一份 然后在返回给浏览器
最后:   浏览器和服务器的IP地址 建立三次握手

6.TCP三次握手

第一步: A向B发送SYN=1(告诉B我想和你建立连接) 发送seq=x(表示第一个数据包)
第二步: B收到信息 B向A发送 ACK=1(确认收到) SYN=1(我也想和你建立连接) seq=y(我给你的第一个包)
	    Ack=x+1(表示下次你应该给我发送第二个数据包)
第三步: A收到信息 A向B发送 ACK=1(确认收到) seq=x+1(给B的第二个数据包)下次你应该给我发第二个数据包 Ack=y+1

7.TCP四次挥手

第一步: A向B发送FIN请求断开       本国向苍姐姐我想跟你分手
第二步: B向A发送ACK确认收到信息   苍姐姐说收到信息了 你等我收拾下衣服
第三步: B向A发送FIN请求断开       苍姐姐说收拾完了 可以分手了
第四步: A向B发送ACK确认断开       本国说分手吧

8.tcpdump抓包命令

Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包。
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

#常用选项
-i #监听哪一个网卡
-n #不把ip解析成主机名
-nn #不把端口解析成应用层协议
-c #指定抓包的数量
-S #不把随机序列和确认序列解析成绝对值
-w #将流量保存到文件中,文件中的信息是无法直接查看的
-r #读取文件中的内容
-v #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv #输出详细的报文信息。


1、默认启动
tcpdump -vv #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
2、过滤主机
tcpdump -i eth1 host 192.168.1.1 #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth1 src host 192.168.1.1 #指定源地址,192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1 #指定目的地址,192.168.1.1

3、过滤端口
tcpdump -i eth1 port 80 #抓取所有经过eth1,目的或源端口是80的网络数据
tcpdump -i eth1 src port 80 #指定源端口
tcpdump -i eth1 dst port 80 #指定目的端口

4、协议过滤 arp/tcp/udp/icmp
tcpdump -i eth1 arp
#抓tcp某端口的数据包
tcpdump -i eth0 tcp port 21 -nn

5、常用表达式
非 : ! or "not" (去掉双引号)
且 : && or "and"
或 : || or "or"
#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

十七、linux基础操作命令汇总

ps      查看系统中运行的进程信息
df      显示磁盘分区的使用情况
free    显示内存使用情况
top     实时显示系统中消耗资源情况
netstat 用于显示网络连接信息

十八、搭建企业内部yum仓库

  • yum仓库服务端操作步骤
    • 准备软件仓库的目录,将软件包copy到这个目录中
    • 通过creatrepo在这个目录中生成rpm包列表(属性信息文件) repodata目录
    • 安装nginx,修改ngx配置可以访问 /app/yumlocal/目录
  • yum仓库客户端
    • 注释掉已经有的yum源配置文件
    • 修改配置访问创建好的yum仓库

1.yum仓库服务端

  • 创建目录,将软件包copy到这个目录
mkdir -p /app/yumlocal

[root@m01 devops-shell]# find /var/cache/yum/ -type f -name "*.rpm"
/var/cache/yum/x86_64/7/base/packages/centos-indexhtml-7-9.el7.centos.noarch.rpm
/var/cache/yum/x86_64/7/base/packages/gperftools-libs-2.6.1-1.el7.x86_64.rpm
/var/cache/yum/x86_64/7/epel/packages/nginx-1.20.1-10.el7.x86_64.rpm
/var/cache/yum/x86_64/7/epel/packages/nginx-filesystem-1.20.1-10.el7.noarch.rpm
/var/cache/yum/x86_64/7/epel/packages/openssl11-libs-1.1.1k-5.el7.x86_64.rpm
[root@m01 devops-shell]# find /var/cache/yum/ -type f -name "*.rpm" |xargs cp -t /app/yumlocal/
[root@m01 devops-shell]# ll /app/yumlocal/


#外网机开启下载缓存功能
[root@m01 devops-shell]# grep keepcache /etc/yum.conf
keepcache=1
#安装包缓存在下面目录
/var/cache/yum/x86_64/7/base/packages/
  • 通过creatrepo在这个目录中生成rpm包列表(属性信息文件) repodata目录
yum -y install createrepo
createrepo /app/yumlocal

  • 安装与配置nginx
yum -y install nginx

systemctl enable nginx
systemctl start nginx

#配置nginx
vim /etc/nginx/conf.d/yumlocal.conf

server {
  listen 12306;
  root /app/yumlocal;
  autoindex on;
  index index.html;
}

systemctl restart nginx
ss -lntup |grep nginx


2.yum客户端配置

  • 注释掉已经配置的yum源
cd /etc/yum.repos.d/

gzip *

#解压
gzip -d
  • 书写新的yum配置
vim  /etc/yum.repo.d/yumlocal.repo
[yumlocal]
name = 'yum local'
baseurl = http://10.0.0.61:12306
enalbed = 1
gpgcheck = 0

#1.清空缓存
yum clean all
#2.根据新的配置生成缓存
yum makecache
#3. 查看yum源列表

3.遇到下载失败或缺依赖包

  • 需要在服务端下载依赖,上传到目录中
  • 服务端重新createrepo
  • 客户端yum clean all 然后yum makecache 然后 yum install
posted @ 2026-01-12 17:53  liux3528  阅读(2)  评论(0)    收藏  举报