Linux操作系统

Linux操作系统

1.linux初学

1、Linux发展史

(1)操作系统简介

计算机硬件 -- 主板、cpu、内存、硬盘、显卡、网卡等

计算机软件--- office、qq、浏览器、B站、游戏等

操作系统 --- 是个软件,用于管理硬件和应用软件,大管家。

操作系统分类 - - 桌面操作系统(windows、mac)、服务器操作系统(linux、windows)、移动操作系统(鸿蒙、安卓、IOS)、嵌入式操作系统(智能家居、物联网)

服务器操作系统 --- unix、linux、windows server

服务器操作系统优势 -- 性能强、稳定性、扩展性、安全性

为什么要学Linux -- 市场占有率、成本(开源)、可定制性(模块化,微内核设计)、活跃的社区、更新迭代快

(2)unix、linux、gnu

Linux之父、自由软件基金会

(3)云计算和Linux

1、主流云操作系统都是liunx(centos、ubuntu等)

2、kvm、docker、k8s底层依赖Linux内核功能

2、Linux发布版本

内核 -- 简单的功能,二次开发,衍生出不同的版本。

桌面版本 - - ubuntu、fedora、

服务器版本-- redhat、centos、欧拉

国产操作系统-- 麒麟、统信

redhat 和 centos的关系

CentOS 并非被红帽 “收购”,而是红帽对其发展方向进行了调整。红帽在 2014 年收购了 CentOS 项目背后的主要支持公司,但这和常规意义上的收购不同,当时红帽是希望加强对 CentOS 社区的支持。后来在 2019 年,红帽宣布调整 CentOS 的发展方向,计划将 CentOS 从 RHEL(Red Hat Enterprise Linux)的下游重建版本,转变为 RHEL 的上游测试版本,即 CentOS Stream, 并于 2021 年 12 月 31 日停止对 CentOS 8 的维护,CentOS 7 的维护也在 2024 年 6 月 30 日结束 。这一决策引发了社区的强烈反响,许多依赖 CentOS 的企业和用户不得不寻找新的替代发行版,如 Rocky Linux、AlmaLinux 等,它们旨在延续 CentOS 原有的定位,成为 RHEL 的下游重建版本,提供免费、稳定且兼容 RHEL 的 Linux 发行版 。

3、vmware workstation软件使用

vmtools:实现虚拟机与宿主机之间的文件共享、鼠标无缝切换、屏幕分辨率自动调整等功能,并提升网络和磁盘 I/O 性能

  • 快照:存档
  • 克隆:复制、链接克隆和完整克隆
  • 网络配置:桥接、NAT、主机

4、centos7 系统安装

语言选择--- 初学选择中文,生产环境使用英文

分区--- 初学选择自动分区

账户--- 初学可以使用root账户,生产环境不建议使用

安装包---根据实际情况选择是否安装图形界面GUI

5、远程连接工具使用

putty --- 轻量级

xshell --- 功能丰富,只支持windows系统

secureCRT --- 扩平台,商业版本

连接之前准备工作:

1、关闭防火墙

 #systemctl stop firewalld
 禁止防火墙开机启动
 #systemctl disable firewalld

2、设置SELinux

 #setenforce 0

3、查看IP地址

 #ip a

4、重启网络服务(可选)

 #systemctl stop NetworkManager
 #systemctl disable NetworkManager
 #systemctl restart network

6、终端介绍

 [root@localhost ~]# pwd
 /root

用户名、主机名、当前目录、用户身份(root还是普通)

7、命令格式和帮助

命令格式

 #命令名称 [选项] [参数]
 选项 --- 定义命令的行为(-l list 显示详细信息, -a 全部)
 参数 --- 定义命令操作的对象(文件名、目录名、IP地址等)

命令帮助

help参数:简单描述,方便快捷
 命令名称  --help
man命令:完整命令手册,最常用
man 命令名称
info命令:最详细,树形结构
info 命令名称
help命令:只用于shell内置命令
help 命令名称

8、查看系统信息命令

uname、hostname、ifconfig、free

uname查看系统信息

查看系统信息

uname -a 查看详细系统信息(主机名、内核版本、发行时间、硬件架构)
uname -s 查看内核名称(默认)
uname -r 查看内核版本
uname -n 查看主机名
uname -m 查看硬件架构

whoami

查看当前用户名

hostname

主机名:设备在网络中的标识,用于网络通信、系统识别等

命令:

hostnamehostnamectl
查看主机名查看主机名,输出内容更详细
设置临时主机名,重启失效设置临时、永久、灵活主机名
独立命令,不依赖服务依赖systemd服务
设置当前临时主机名是test(2种方式)
hostname test
hostnamectl --transient set-hostname test --transient
设置当前永久主机名是woniu
hostnamectl  --static set-hostname woniu

--static也可以省略不写

ifconfig查看和临时设置ip地址

查看和临时设置ip地址

free查看内存信息

查看内存信息

free -h

lscpu查看cpu信息

查看cpu信息

df查看磁盘信息

查看磁盘信息

df -h 

lspci

查看显卡信息

9、关机重启命令

shutdown、poweroff、halt、reboot

必须具备管理员权限

shutdown

#立刻关机
shutdown -h now
#5分钟后关机
shutdown -h +5 "5分钟后关机"
#取消计划关机
shutdown -c
#重启
shutdown -r

poweroff立刻关机断电

立刻关机断电,等同于shutdown -h now

halt关闭系统但不强制断电

关闭系统但不强制断电

reboot

等同于shutdown -r now

10、文件系统

Linux系统和Windows系统中文件系统存在多方面区别。Linux采用树形结构,以根目录“/”为起点,统一管理文件和目录,支持多种文件系统类型,如ext4、Btrfs等,具有灵活的权限控制和丰富的命令行工具,性能上在处理大文件和大量并发I/O请求时表现较好,安全性较高,但易用性相对较差,学习曲线较陡。

Windows基于盘符组织文件,每个分区独立,主要使用NTFS和FAT文件系统,提供基于访问控制列表的权限管理,依赖图形用户界面进行操作,文件管理直观方便,易于上手,但在处理大文件和大量并发I/O请求时性能稍逊,且因广泛使用而成为更多攻击目标。

  • 树形结构 根目录/ 挂载
  • 一切皆文件磁盘文件/dev/sda1
  • 文件目录FHS标准--文件系统层次标准,描述Unix类系统布局规范的参考标准ls /bin:存放所有用户都可以使用的命令的二进制文件sbin:存放管理员可以使用的命令dev:设备文件目录(磁盘、键盘、鼠标)home:普通用户家目录,保存用户数据root:管理员家目录tmp:临时文件目录var:存放系统运行过程中变化的数据(如日志)etc:配置文件目录boot:系统启动文件目录lib:系统调用的函数库保存目录media:挂载目录,光盘文件opt:第三方软件安排目录usr:存放系统软件,类似于windows系统的program files

11、查看与切换目录

pwd、cd、ls、du等

pwd

显示当前目录

[root@test01 ~]# pwd
/root

cd

切换目录

cd 绝对路径或相对路径

绝对路径和相对路径

#绝对路径
cd /etc
#相对路径
cd ./local
cd ../dev
cd ../../opt
#切换到上一次目录,在2个目录之间快速切换
cd -
#切换到用户家目录
cd ~

ls

列出目录内容

格式

ls [选项] [目录]

用法

#-l  列出详细信息
[root@test01 /]# ls -l
总用量 20
lrwxrwxrwx. 1 root root 7 5月 25 06:42 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 5月 25 06:49 boot
drwxr-xr-x. 20 root root 3340 5月 25 07:27 dev

#-h 可读格式
[root@test01 /]# ls -lh
总用量 20K
lrwxrwxrwx. 1 root root 7 5月 25 06:42 bin -> usr/bin
dr-xr-xr-x. 5 root root 4.0K 5月 25 06:49 boot
drwxr-xr-x. 20 root root 3.3K 5月 25 07:27 dev

#-a 显示所有文件,包含隐藏文件(以.开头的文件)
[root@test01 /]# ls -al
总用量 20
dr-xr-xr-x. 17 root root 224 5月 25 06:48 .
dr-xr-xr-x. 17 root root 224 5月 25 06:48 ..
lrwxrwxrwx. 1 root root 7 5月 25 06:42 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 5月 25 06:49 boot

#-d 查看目录属性
[root@test01 /]# ls -dl /tmp/
drwxrwxrwt. 21 root root 4096 5月 25 11:16 /tmp/

#-R 递归显示子目录
[root@test01 opt]# ls -R /opt/
/opt/:
rh

/opt/rh:

#-t 按时间排序,最新修改的文件在前边
[root@test01 opt]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@test01 opt]# ls -t /
tmp root dev proc var opt lib64 bin media srv
etc run sys home boot usr sbin lib mnt

#-S 按文件大小排序,大的文件排在前边
[root@test01 opt]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@test01 opt]# ls -S /
etc tmp run root home lib64 bin media srv sys
boot dev var usr opt sbin lib mnt proc

du统计文件或目录大小

统计文件或目录大小

格式

du [选项] [文件或目录]

用法

#-h 可读格式
[root@test01 /]# du /etc/passwd
4 /etc/passwd
[root@test01 /]# du -h /etc/passwd
4.0K /etc/passwd

#-s 统计目录大小
[root@test01 /]# du -sh /etc/
38M /etc/

12、创建目录和文件

mkdir、touch、ln命令等

mkdir

创建目录

语法

mkdir [选项] 目录1,[目录2,目录3,目录4....]

用法

#创建单个目录
[root@test01 opt]# mkdir aaa
[root@test01 opt]# ls
aaa rh

#创建多个目录,2种方式
[root@test01 opt]# mkdir bbb ccc ddd
[root@test01 opt]# ls
aaa bbb ccc ddd rh
[root@test01 opt]# mkdir linux0{1,2,3}
[root@test01 opt]# ls
aaa bbb ccc ddd linux01 linux02 linux03 rh

#-p 创建多级目录
[root@test01 opt]# mkdir 01/02/03
mkdir: 无法创建目录"01/02/03": 没有那个文件或目录
[root@test01 opt]# mkdir -p 01/02/03
[root@test01 opt]# ls -R 01
01:
02

01/02:
03

01/02/03:

touch

创建文件

格式

touch [选项] 文件1[文件2,文件3,文件4....]

用法

#创建空文件
[root@test01 opt]# touch test.txt
[root@test01 opt]# ls
01 aaa bbb ccc ddd linux01 linux02 linux03 rh test.txt
[root@test01 opt]# ll -h test.txt
-rw-r--r--. 1 root root 0 5月 25 11:40 test.txt
#创建多个文件,2种形式
[root@test01 opt]# touch aaa.txt bbb.txt ccc.txt
[root@test01 opt]# ls
aaa.txt bbb.txt ccc.txt
[root@test01 opt]# touch test0{1,2,3}.txt
[root@test01 opt]# ls
aaa.txt bbb.txt ccc.txt test01.txt test02.txt test03.txt

ln创建文件链接,类似于windows的快捷方式

创建文件链接,类似于windows的快捷方式

语法

ln [选项] 源文件 目标链接

用法

[root@test01 opt]# echo "123" > test.txt
[root@test01 opt]# ls
test.txt
[root@test01 opt]# cat test.txt
123
#硬链接
[root@test01 opt]# ln test.txt test.txt.hard
#-s 软链接
[root@test01 opt]# ln -s test.txt test.txt.soft
[root@test01 opt]# ls
test.txt test.txt.hard test.txt.soft
[root@test01 opt]# cat test.txt.hard
123
[root@test01 opt]# cat test.txt.soft
123
[root@test01 opt]# rm -rf test.txt
[root@test01 opt]# ls
test.txt.hard test.txt.soft
[root@test01 opt]# cat test.txt.hard
123
[root@test01 opt]# cat test.txt.soft
cat: test.txt.soft: 没有那个文件或目录

13、复制、删除、移动目录和文件

cp、mv、rm等命令

cp

复制文件或目录

语法

cp [选项] 源文件/目录 目标路径

用法

#复制文件到指定目录
[root@test01 opt]# ls
test.txt.hard test.txt.soft
[root@test01 opt]# pwd
/opt
[root@test01 opt]# ls /mnt
[root@test01 opt]# cp test.txt.hard /mnt/
[root@test01 opt]# ls /mnt/
test.txt.hard

#复制并改名
[root@test01 opt]# cp test.txt.hard /mnt/test.txt.hard2
[root@test01 opt]# ls /mnt/
test.txt.hard test.txt.hard2

#-r 复制目录
[root@test01 opt]# mkdir -p aaa/bbb/ccc
[root@test01 opt]# ls
aaa test.txt.hard test.txt.soft
[root@test01 opt]# cp aaa /mnt/
cp: 略过目录"aaa"
[root@test01 opt]# cp -r aaa /mnt/
[root@test01 opt]# ls /mnt/
aaa test.txt.hard test.txt.hard2

#-p 复制元数据,文件名、文件类型、文件权限、文件创建时间、修改时间
[root@test01 opt]# ll
总用量 4
drwxr-xr-x. 3 root root 17 5月 25 12:07 aaa
-rw-r--r--. 1 root root 4 5月 25 11:53 test.txt.hard
lrwxrwxrwx. 1 root root 8 5月 25 11:54 test.txt.soft -> test.txt
[root@test01 opt]# cp test.txt.hard /mnt/
[root@test01 opt]# ll /mnt/
总用量 4
-rw-r--r--. 1 root root 4 5月 25 12:19 test.txt.hard
[root@test01 opt]# cp -p test.txt.hard /mnt/test.txt.hard2
[root@test01 opt]# ll /mnt/
总用量 8
-rw-r--r--. 1 root root 4 5月 25 12:19 test.txt.hard
-rw-r--r--. 1 root root 4 5月 25 11:53 test.txt.hard2

#-f 强制覆盖
[root@test01 opt]# cp -f test.txt.hard /mnt/
cp:是否覆盖"/mnt/test.txt.hard"? y
[root@test01 opt]# which cp
alias cp='cp -i'
/usr/bin/cp
[root@test01 opt]# /usr/bin/cp -f test.txt.hard /mnt/

#-i 提示覆盖
[root@test01 opt]# cp test.txt.hard /mnt/
cp:是否覆盖"/mnt/test.txt.hard"? y

#-v 显示进度
[root@test01 opt]# cp -v Fedora-Workstation-Live-42-1.1.x86_64.iso /mnt/
"Fedora-Workstation-Live-42-1.1.x86_64.iso" -> "/mnt/Fedora-Workstation-Live-42-1.1.x86_64.iso

mv rename

移动文件或目录、重命名

语法

mv [选项] 源文件或目录 目标路径

用法

#重命名文件或目录
[root@test01 opt]# ls
1.txt aaa Fedora-Workstation-Live-42-1.1.x86_64.iso
[root@test01 opt]# mv 1.txt 2.txt
[root@test01 opt]# mv aaa/ bbb
[root@test01 opt]# ls
2.txt bbb Fedora-Workstation-Live-42-1.1.x86_64.iso

#移动文件或目录
[root@test01 opt]# mv 2.txt bbb/ /mnt/
[root@test01 opt]# ls /opt/ /mnt/
/mnt/:
2.txt bbb

/opt/:
Fedora-Workstation-Live-42-1.1.x86_64.iso

#批量移动文件(通配符)
[root@test01 opt]# touch 0{1,2,3,4}.txt
[root@test01 opt]# ls
01.txt 02.txt 03.txt 04.txt Fedora-Workstation-Live-42-1.1.x86_64.iso
[root@test01 opt]# mv *.txt /mnt/
[root@test01 opt]# ls /mnt/
01.txt 02.txt 03.txt 04.txt 2.txt bbb

#-i 提示覆盖
[root@test01 opt]# ls /mnt/
01.txt 02.txt 03.txt 04.txt 2.txt bbb
[root@test01 opt]# touch 01.txt
[root@test01 opt]# mv 01.txt /mnt/
mv:是否覆盖"/mnt/01.txt"? y
[root@test01 opt]# which mv
alias mv='mv -i'
/usr/bin/mv

#-f 强制覆盖
#-v 显示进度

rm

删除文件或目录

该命令一定要慎重使用删除后数据无法恢复

语法

rm [选项] 文件或目录

用法

#删除文件
[root@test01 mnt]# ls
01.txt 02.txt 03.txt 04.txt 2.txt bbb
[root@test01 mnt]# rm 01.txt
rm:是否删除普通空文件 "01.txt"?y

#删除目录
[root@test01 mnt]# rm bbb/
rm: 无法删除"bbb/": 是一个目录
[root@test01 mnt]# rm -r bbb/
rm:是否删除目录 "bbb/"?y

#强制删除
[root@test01 mnt]# ls
02.txt 03.txt 04.txt 2.txt
[root@test01 mnt]# rm -f 02.txt
[root@test01 mnt]# ls
03.txt 04.txt 2.txt

#批量删除
[root@test01 mnt]# rm *.txt
[root@test01 mnt]# rm ./*

千万不要使用的命令

rm -rf /*

14、查找目录和文件

which、find等命令

which

查看命令路径

语法

which [选项] 命令名称

用法

[root@test01 mnt]# which cp
alias cp='cp -i'
/usr/bin/cp

find 搜索文件

搜索文件

语法

find [搜索路径] [匹配条件] [执行动作]
-name按文件名称搜索
#-name 名称要完全匹配
find /etc -name "hosts" # 精确查找 /etc 目录下的 hosts 文件
#-iname 忽略大小写
find . -iname "*.jpg" # 在当前目录查找所有 .jpg 或 .JPG 文件
#配合正则表达式使用
find /var/log -regex ".*\.log$" # 查找 /var/log 目录下所有以 .log 结尾的文件
-type按文件类型搜索

文件类型:windows系统按照后缀名区分,Linux系统按照文件属性区分

Linux文件类型:- d b c s p l

d:表示是一个目录 -:表示这是一个普通的文件。 l: 表示这是一个符号链接文件 b:表示区块设备文件

c:字符设备文件 s:套接字文件

p:命名管道文件

[root@test01 opt]# ll
总用量 2342308
-rw-r--r--. 1 root root 0 5月 25 13:28 1.jpg
-rw-r--r--. 1 root root 0 5月 25 13:28 2.JPG
lrwxrwxrwx. 1 root root 5 5月 25 13:37 3.JPG -> 2.JPG
drwxr-xr-x. 2 root root 6 5月 25 13:36 aaa
[root@test01 opt]# ll /dev/sda1
brw-rw----. 1 root disk 8, 1 5月 25 07:27 /dev/sda1
[root@test01 opt]# ll /dev/tty1
crw--w----. 1 root tty 4, 1 5月 25 07:27 /dev/tty1
[root@test01 opt]# ll /run/chrony/chronyd.sock
srwxr-xr-x. 1 chrony chrony 0 5月 25 07:27 /run/chrony/chronyd.sock
[root@test01 opt]# ll /run/dmeventd-client
prw-------. 1 root root 0 5月 25 07:27 /run/dmeventd-client

选项:- type 文件类型

[root@test01 opt]# find / -type s 
/dev/log
/run/gssproxy.sock
/run/vmware/guestServicePipe
-size按文件大小搜索
find / -size +1G  # 查找根目录下大于 1GB 的文件
find /tmp -size -10k # 查找 /tmp 目录下小于 10KB 的文件
按文件时间搜索mtime、atime、ctime
#mtime n 修改时间(文件内容修改)为 n 天前的文件
#atime n 访问时间(文件被读取)为 n 天前的文件
#ctime n 状态时间(文件权限、所有者等元数据修改)为 n 天前的文件
find /var/log -mtime -1 # 查找 /var/log 目录下 24 小时内修改过的文件
find ~ -atime +30 # 查找用户家目录下 30 天内未被访问的文件
-perm按文件权限搜索
find / -perm 777  # 查找全权限(777)的文件或目录(安全风险)
find . -perm -600 # 查找至少有 600 权限(所有者可读写)的文件
针对搜索内容执行动作
find /var/log -name "*.log" -exec rm -f {} \;  # 删除 /var/log 目录下的所有 .log 文件
find . -type f -size +100M -ok ls -lh {} \; # 对大于 100MB 的文件执行 ls -lh,执行前提示确认
find /tmp -atime +30 -delete # 删除 /tmp 目录下 30 天未访问的文件
组合条件
find /tmp -type f -and -size +10M  # 查找 /tmp 目录下大于 10MB 的文件
find . -name "*.txt" -or -name "*.md" # 查找当前目录下的 .txt 或 .md 文件
find /home -not -user root # 查找 /home 目录下非 root 用户的文件

2.基础命令

1.1 cat查看文件内容

  • 语法
cat [选项] [文件1] [文件2]
  • 用法1查看文件内容
#查看文件内容
[root@test01 opt]# cat /etc/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
  • 用法2 -n显示行号
#-n 显示行号
[root@test01 opt]# 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
  • 用法3 输出文件内容到新文件
#输出文件内容到新文件
[root@test01 opt]# cat 1.txt
123
[root@test01 opt]# cat 1.txt > 2.txt
[root@test01 opt]# cat 2.txt
123
  • 用法4 合并多个文件内容到新文件
#合并多个文件内容到新文件
[root@test01 opt]# cat 1.txt
123
[root@test01 opt]# cat 2.txt
456
[root@test01 opt]# cat 1.txt 2.txt > 3.txt
[root@test01 opt]# cat 3.txt
123
456

1.2 more分页显示文件内容

  • 语法
more [选项] 文件名
  • 操作按键
按键操作
空格下一页
enter下一 行
b后退一页
q退出
/关键字向下搜索关键字
n搜索关键字后继续查找下一个匹配项
  • 指定每页行数
#指定每页行数
[root@test01 opt]# more -10 /etc/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
--More--(17%)

1.3 less分页显示文件内容

相对于more,功能更强大,前后分页,高亮,资源占用更少,适合大文件查看。

  • 语法
less [选项]  文件名
  • 操作按键
按键操作
backspace/pageup上一页
空格/pagedown下一页
enter下一 行
q退出
/关键字向下搜索关键字
?关键字向上搜索关键字
n搜索关键字后继续查找下一个配置项
N搜索关键字后向上查找配置项
  • -N 显示行号
#-N 显示行号
less -N /etc/ssh/sshd_config # 显示行号,方便定位配置项
  • -i 搜索关键字忽略大小写
#-i 搜索关键字忽略大小写
less -i syslog.log # 进入后输入 `/error` 搜索,不区分 "ERROR" 和 "error"

1.4 head 查看文件前几行内容,默认显示前10行

  • 语法
head [选项] 文件名
  • 用法 -n 显示前n行
#-n 数字
head -n 5 /etc/passwd # 显示 passwd 文件的前 5 行

1.5 tail 查看文件末尾内容,特别适合监控日志文件

  • 语法
tail [选项] 文件名    -- 不加选项默认显示10行
  • -n 查看最后n行数据
#-n 数字
tail -n 20 access.log # 显示日志文件的最后 20 行
  • -f 实时监控
#-f 实时监控
tail -f /var/log/syslog # 实时显示系统日志的新增内容(按 Ctrl+C 退出)

1.6 wc 统计文件的行数、单词数、字节数

  • 语法:
wc [选项] 文件名
  • 默认输出行数、单词数、字节数
#默认输出
[root@test01 opt]# wc /etc/passwd
43 87 2262 /etc/passwd
行数(lines)、单词数(words)、字节数(bytes)
  • -l 统计行数
#-l 统计行数
[root@test01 opt]# wc -l /etc/passwd
43 /etc/passwd
  • -w 统计单词数
#-w 统计单词数
[root@test01 opt]# wc -w /etc/passwd
87 /etc/passwd
  • -c 统计多个文件
#-c 统计字符数
[root@test01 opt]# wc -c /etc/passwd
2262 /etc/passwd
  • 统计多个文件
#统计多个文件
[root@test01 opt]# wc -l /etc/passwd /etc/shadow
43 /etc/passwd
43 /etc/shadow
86 总用量

1.7 grep 文本搜索工具,根据条件输出指定行内容

  • 语法
grep [选项]  '搜索模式'  文件名
  • -v 反向查询 查询没有root的数据
[root@test01 opt]# grep -v 'root' /etc/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
  • -i 忽略大小写

1.8 w 查看系统运行信息

[root@localhost ~]# w
18:32:38 up 1:18, 1 user, load average: 0.00, 0.01, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.85.1 17:15 6.00s 0.03s 0.00s w

average: 0.00, 0.01, 0.01

0.00:一分钟内的负载情况

0.01:五分钟内的负载情况

0.01:十分钟内的负载情况

1.9 who显示当前登录系统的用户

[root@localhost ~]# who
root pts/0 2025-05-29 17:15 (192.168.85.1)

3.重定向和管道

(1)重定向>、>>

  • 重定向:输入、输出、错误
  • 覆盖:>
  • 追加:>>

(2)管道 |

  • | 管道:上一个命令的结果作为下一个命令的参数

4.vi编辑器

2.1编辑器三大模式(命令,编辑,末行)

  • 命令模式
  • 编辑模式或者输入模式
  • 末行模式

2.2 命令模式

  • vi默认进入就是命令模式
    • 此模式下退出不保存更改按:q!
    • 保存更改按:wq
命令操作
dd删除光标所在行
ndd删除光标所在行开始向下n行(包括光标所在行)
u撤销上一步操作
dG删除光标所在行到文本末尾
d1G删除光标
^光标到行首
$光标到行尾
x删除光标所在字符
1G光标到第一行
GG光标到最后一行
yy复制当前行
p向下粘贴
P向上粘贴
nyy复制多行
nGG表示跳转到第n行

2.3 输入模式

i当前光标前插入文本
I当前光标所在行行首插入文本
a当前光标后插入文本
A当前光标所在行行尾插入文本
o光标下一行创建新行插入文本
O光标上一行创建新行插入文本

按esc 退出输入模式,切换到命令模式

2.4 末行模式

按键操作
:命令模式切换到末行模式
% s/old/new/g全局替换 new替换old
% s/old/new/gc全局替换并继续
:1,10 s/old/new/g1-10行替换
:set nu设置行号
:set nonu取消设置行号

5.Linux用户和组管理

3.1用户管理

(1) Linux用户分类:

  • root用户 — administrator()
  • 普通用户
  • 系统用户 — 应用(ssh、ftp、apache、mysql) 不能用于登录

(2)/etc/passwd 存放用户账户文件

  • 存储用户账号信息,普通用户可读,root账户可写
[root@localhost opt]# cat /etc/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
jcx:x:1000:1000::/home/jcx:/bin/bash

分为7个字段:

  • 用户名、密码、UID用户id、GID组id、账户说明、家目录、默认shell

(3) /etc/shadow 用户密码文件

[root@woniu opt]# cat /etc/shadow
root:$6$p/hdpDe8CHsvsgeW$1TVdqciNuAVMkiUkO2V8kru2YFZOxS6PcvH.EAIDJ8Ngsm/FzpTfJhMJsHGMdVn4nclZ2u/9i5mezEEBJA4JM/::0:99999:7:::
  • 共九列
  • 用户名、加密密码(哈希算法)、最后密码修改时间、密码最小使用天数、密码最大使用天数、密码过期前警告天数、密码过期后宽限时间、账号过期时间、保留字段
    • 第一列:用户名
    • 第二列:加密后的密码
    • 第三列:最后密码修改时间
    • 第四列:密码最小使用天数
    • 第五列:密码最大使用天数
    • 第七列:密码过期前警告天数
    • 第八列:账号过期时间
    • 第九列:保留字段

(4) useradd 添加用户

  • 语法
useradd [选项]  用户名
  • 示例
[root@woniu opt]# useradd test
变化:
1、/etc/passwd文件
[root@woniu opt]# tail -1 /etc/passwd
test:x:1001:1001::/home/test:/bin/bash
2、/etc/shadow文件。注意密码处是!!,表示账号被禁用
[root@woniu opt]# tail -1 /etc/shadow
test:!!:20235:0:99999:7:::
3、家目录
[root@woniu opt]# ls /home/
test woniu
  • -u选项 创建用户指定UID
[root@woniu opt]# useradd -u 2000 woniu2
#默认情况下,创建用户,用户ID和组ID一致
[root@woniu opt]# tail -1 /etc/passwd
woniu2:x:2000:2000::/home/woniu2:/bin/bash
  • -d选项 创建用户指定家目录
[root@woniu opt]# useradd -u 3000 -d /opt/woniu3  woniu3
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@woniu opt]# tail -1 /etc/passwd
woniu3:x:3000:3000::/opt/woniu3:/bin/bash
  • -s 选项 设置默认shell,可以让用户默认不登录
[root@woniu opt]# useradd -s /sbin/nologin woniu5

WARNING! The remote SSH server rejected X11 forwarding request.
This account is currently not available.

Connection closed.

Disconnected from remote host(woniu5) at 15:47:55.

/sbin/nologin表示软件使用的默认shell

  • -G选项 指定用户组
useradd -m -d /home/dev/alice -s /bin/bash -G developers alice

(5)passwd设置用户密码

  • passwd
语法
passwd [用户名]

[root@woniu opt]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
密码文件变化
[root@woniu opt]# tail -1 /etc/shadow
test:$6$jHJT0U3T$BFa4/r6uCHhbrnTwakz2.a5pmDPwIzt3.d92be1300uzgvZtZYmv2ew56YS/RSQ6luDVzbBarQVthDEvPnsoG.:20235:0:99999:7:::
  • -l lock 锁定账户
[root@woniu opt]# passwd -l woniu
Locking password for user woniu.
passwd: Success
  • -u unlock 解锁账户
[root@woniu opt]# passwd  -u  woniu
Unlocking password for user woniu.
passwd: Success
  • -e 强制修改密码
[root@woniu opt]# passwd -e woniu
Expiring password for user woniu.
passwd: Success

WARNING! The remote SSH server rejected X11 forwarding request.
You are required to change your password immediately (root enforced)
Last login: Tue May 27 16:02:33 2025 from 192.168.200.1
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user woniu.
Changing password for woniu.
(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
  • -d 设置空密码
[root@woniu opt]# passwd -d woniu
Removing password for user woniu.
passwd: Success

(6)usermod修改用户

  • usermod -u 修改UID
[root@woniu opt]# usermod -u 1500  woniu2
[root@woniu opt]# grep woniu2 /etc/passwd
woniu2:x:1500:2000::/home/woniu2:/bin/bash
  • -e 指定账户失效时间
[root@woniu opt]# grep woniu2 /etc/shadow
woniu2:!!:20235:0:99999:7:::
[root@woniu opt]# usermod -e 2030-1-1 woniu2
[root@woniu opt]# grep woniu2 /etc/shadow
woniu2:!!:20235:0:99999:7::21915:
  • -c 修改账户的信息(修改注释)
[root@woniu opt]# grep woniu2 /etc/passwd
woniu2:x:1500:2000::/home/woniu2:/bin/bash
[root@woniu opt]# usermod -c "wuhan" woniu2
[root@woniu opt]# grep woniu2 /etc/passwd
woniu2:x:1500:2000:wuhan:/home/woniu2:/bin/bash
  • -L 锁定用户
[root@woniu opt]# usermod -L woniu5
  • -U 解锁用户
[root@woniu opt]# usermod -U  woniu5

(7)userdel删除用户

  • -r 家目录一起删除
[root@woniu opt]# userdel woniu2
[root@woniu opt]# userdel -r woniu5
[root@woniu opt]# ls /home/
test woniu woniu2

3.2 用户组管理

(1)groupadd组添加

[root@woniu opt]# groupadd whgroup
  • -g 指定GID
groupadd -g 5001 

(2) /etc/group 存放用户组文件

whgroup:x:3001:woniu3
组名:密码:组ID:组成员

(3) /etc/gshadow 存放用户组密码文件

[root@woniu opt]# tail /etc/gshadow
whgroup:!::woniu3
组名:没有密码:管理员:组成员

(4) gpasswd 组管理

  • -a 添加用户到指定组
#添加用户到指定的组
[root@woniu opt]# gpasswd -a woniu3 whgroup
Adding user woniu3 to group whgroup
  • -d 从组中移除用户
[root@woniu opt]# tail -1 /etc/group
whgroup:x:3001:woniu3
[root@woniu opt]# gpasswd -d woniu3 whgroup
Removing user woniu3 from group whgroup
[root@woniu opt]# tail -1 /etc/group
whgroup:x:3001:
  • -M 添加多个用户到指定组 属于覆盖之前的用户
[root@woniu opt]# gpasswd -M woniu,test,woniu3 whgroup
[root@woniu opt]# tail -1 /etc/group
whgroup:x:3001:woniu,test,woniu3
  • -A 指定组管理员
[root@woniu opt]# tail -1 /etc/gshadow
whgroup:!::woniu,test,woniu3
[root@woniu opt]# gpasswd -A test whgroup
[root@woniu opt]# tail -1 /etc/gshadow
whgroup:!:test:woniu,test,woniu3

(5) groupmod组修改

  • -g 更改组ID
[root@woniu opt]# tail -1  /etc/group
whgroup:x:3001:woniu,test,woniu3
[root@woniu opt]# groupmod -g 6000 whgroup
[root@woniu opt]# tail -1 /etc/group
whgroup:x:6000:woniu,test,woniu3
  • -n 更改组名
[root@woniu opt]# tail -1  /etc/group
whgroup:x:6000:woniu,test,woniu3
[root@woniu opt]# groupmod -n hbgroup whgroup
[root@woniu opt]# tail -1 /etc/group
hbgroup:x:6000:woniu,test,woniu3

(6)groupdel组删除

  • 主要组和附加组
  • 如果组是普通组,可以直接删除
[root@woniu opt]# tail -1  /etc/group
hbgroup:x:6000:woniu,test,woniu3
[root@woniu opt]# groupdel hbgroup
  • 如果是主要组,无法删除,必须把用户转移出去
[root@woniu opt]# groupdel woniu
groupdel: cannot remove the primary group of user 'woniu'

3.3 用户和组相关命令

(1) id

[root@woniu opt]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@woniu opt]# id woniu
uid=1000(woniu) gid=1000(woniu) groups=1000(woniu)

(2)groups 查看用户所属的组(主要组和附加组)

[root@woniu opt]# groups
root
[root@woniu opt]# groups woniu
woniu : woniu

(3) finger

#查看当前用户信息
finger # 示例输出(长格式)
Login: alice Name: Alice Smith
Directory: /home/alice Shell: /bin/bash
On since Mon May 25 09:30 (CST) on tty7 from :0
2 days 10 hours 42 minutes idle
Mail last read Tue May 26 15:23 2025 (CST)
No Plan.

#查看其他用户信息
finger root # 示例输出
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Mon May 25 09:00 (CST) on pts/0
No mail.
No Plan.

(4) users 查看当前登录的用户

[root@woniu opt]# users
root root

6.文件权限

4.1 权限的概念

  • 权限 -- 对文件或目录的访问控制。
  • 权限类型
权限类型文件目录
可读(read --- r)查看文件内容执行列表操作,可以查看目录内的文件或子目录信息
可写(write --- w)编辑、删除重命名、移动、复制、删除、文件等
可执行(excute --- x)二进制文件进入目录
  • 权限作用的角色
u-- user文件所有者
g -- group文件所属组
o -- others其他用户

4.2 查看权限

(1)ls命令 ls -l

ls  -l  
[root@woniu ~]# ls -l
-rw-r--r--. 1 root root 6 May 27 08:53 aaa.txt

(2)stat命令

[root@woniu ~]# stat aaa.txt
File: ‘aaa.txt’
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 100663419 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2025-05-27 08:53:52.276105601 +0800
Modify: 2025-05-27 08:53:48.237105418 +0800
Change: 2025-05-27 08:53:48.237105418 +0800

4.3设置权限chmod

  • chmod命令

(1)符号方式设置权限

r可读
w可写
x可执行
  • 设置方式
+添加权限
-撤销权限
=设置权限
  • 设置角色
u文件所有者
g文件所属组
o其他用户
[root@woniu opt]# chmod  o+w  aaa.txt 
[root@woniu opt]# ll aaa.txt
[root@woniu opt]# chmod g=rwx aaa.txt
[root@woniu opt]# chmod u+x,o-w aaa.txt

(2)数字方式设置权限

  • 把权限类型转换成二进制
r4
w2
x1
文件初始状态   
rw-r--r--
644
[root@woniu opt]# chmod 644 aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-r--r--. 1 root root 11 May 28 11:18 aaa.txt

(3)权限验证

  • 可读
文件
[test@woniu opt]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[test@woniu opt]$ ll /etc/shadow
----------. 1 root root 863 May 28 10:12 /etc/shadow

目录
[test@woniu opt]$ ls aaa
bbb
[test@woniu opt]$ ls -R aaa
ls: cannot open directory aaa: Permission denied
  • 可写
文件 - 可编辑

目录 -- 没有写的情况下,无法重命名,也无法删除
[test@woniu aaa]$ mv bbb/ www
mv: cannot move ‘bbb/’ to ‘www’: Permission denied
[test@woniu aaa]$ rm -rf bbb/
rm: cannot remove ‘bbb/ccc’: Permission denied
可以重命名,可以删除
[root@woniu opt]# chmod 767 aaa
[root@woniu opt]# ll -d aaa
drwxrw-rwx. 3 root root 17 May 28 11:43 aaa
[test@woniu aaa]$ mv bbb/ www
[test@woniu aaa]$ rm -rf bbb/
[test@woniu aaa]$
  • 可执行
文件
[root@woniu opt]# ll /usr/bin/cp
-rwxr-xr-x. 1 root root 155264 Oct 31 2018 /usr/bin/cp
[root@woniu opt]# chmod o-x /usr/bin/cp
[root@woniu opt]# ll /usr/bin/cp
-rwxr-xr--. 1 root root 155264 Oct 31 2018 /usr/bin/cp
[test@woniu aaa]$ ls
www
[test@woniu aaa]$ cp -r www/ nnn
[test@woniu aaa]$ ls
nnn www
[test@woniu aaa]$ cp -r www/ nnn
-bash: /usr/bin/cp: Permission denied

目录
[root@woniu opt]# ll -d aaa
drwxrw-rwx. 4 root root 28 May 28 11:52 aaa
[root@woniu opt]# chmod o-x aaa
[root@woniu opt]# ll -d aaa
drwxrw-rw-. 4 root root 28 May 28 11:52 aaa
[test@woniu opt]$ cd aaa
[test@woniu aaa]$ cd -
/opt
[test@woniu opt]$ cd aaa
-bash: cd: aaa: Permission denied

4.4更改用户和组chown

  • chown命令 change owner

(1)改变文件所有者

[root@woniu opt]# ll aaa.txt 
-rw-r--r--. 1 root root 11 May 28 11:18 aaa.txt
[root@woniu opt]# chown test aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-r--r--. 1 test root 11 May 28 11:18 aaa.txt

(2)改变文件所属组

[root@woniu opt]# chown :whgroup  aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-rw-r--. 1 root whgroup 11 May 28 11:18 aaa.txt

(3)同时改变文件的所有者和所属组

[root@woniu opt]# chown test:test2 aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-rw-r--. 1 test test2 11 May 28 11:18 aaa.txt

(4)-R 递归

[root@woniu opt]# chown -R  test:test2 aaa.txt

4.5 特殊权限setUID、setGID、stickID

setUIDs:文件所有者有执行权限时 S:文件所有者无执行权限时针对x位
setGIDs:文件所属组有执行权限时 S:文件所属组无执行权限时针对x位
stickIDt:其他用户有执行权限时 T:其他用户无执行权限时针对x位

(1)setUID --- 让用户暂时拥有文件所有者的权限

[root@woniu opt]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@woniu opt]# chmod u-s /usr/bin/passwd
[root@woniu opt]# ll /usr/bin/passwd
-rwxr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@woniu opt]# chmod 4755 /usr/bin/passwd
[root@woniu opt]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@woniu opt]# chmod 0755 /usr/bin/passwd
[root@woniu opt]# ll /usr/bin/passwd
-rwxr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

(2)setGID -- 让用户暂时拥有文件所属组的权限

[root@woniu opt]# ll aaa.txt 
-rw-rw-r--. 1 test test2 11 May 28 11:18 aaa.txt
[root@woniu opt]# chmod g+s aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-rwSr--. 1 test test2 11 May 28 11:18 aaa.txt
[root@woniu opt]# chmod 0664 aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-rw-r--. 1 test test2 11 May 28 11:18 aaa.txt
[root@woniu opt]# chmod 2664 aaa.txt
[root@woniu opt]# ll aaa.txt
-rw-rwSr--. 1 test test2 11 May 28 11:18 aaa.txt

(3)stickID -- 限制权限只能作用在文件所有者创建的文件

[root@woniu opt]# ll -d /tmp
drwxrwxrwt. 8 root root 180 May 28 13:05 /tmp
[root@woniu opt]# chmod o-t /tmp
[root@woniu opt]# ll -d /tmp
drwxrwxrwx. 8 root root 180 May 28 14:35 /tmp
[root@woniu opt]# chmod 1777 /tmp
[root@woniu opt]# ll -d /tmp
drwxrwxrwt. 8 root root 166 May 28 14:36 /tmp

4.6 umask设置文件或者目录的初始权限

  • 用于设置文件和目录默认权限的系统参数
  • 最大默认权限:

文件666

目录777

#临时修改
[root@woniu opt]# umask
0022

#永久修改,修改环境变量文件 系统全局环境文件 /etc/profile

7.软件安装

5.1软件的概念

  • windows系统: .exe .bin .bat
  • Linux系统: 二进制方式、源码方式
  • 二进制安装 --- rpm、deb

5.2 rpm安装

  • rpm --- redhat package manager
  • 名称定义:QQ_3.2.17_250521_x86_64_01.rpm
  • 命令:rpm
rpm  -ivh  软件包名称
-i install 安装
-v verbose 详细信息
-h 显示进度

#rpm安装要先解决依赖关系
[root@localhost opt]# rpm -ivh QQ_3.2.17_250521_x86_64_01.rpm
错误:依赖检测失败:
libXScrnSaver 被 linuxqq-3.2.17_35341-1.x86_64 需要

(1)查询

  • 查询所有rpm包rpm -qa
#查询所有rpm包
rpm -qa
#统计包的总数
rpm -qa | wc -l
#查询指定包
rpm -qa | grep -i 'firefox'
  • rpm -qi查询指定包的详细信息
[root@localhost opt]# rpm -qi firefox
  • rpm -ql查询软件的安装位置
[rootalocalhost opt]# rpm -ql firefox | more
/etc/firefox
/etc/firefox/pref
/usr/bin/firefox
/usr/lib64/firefox
/usr/lib64/firefox/LICENSE
  • rpm -qf 文件名称,查询的是文件所属的软件
[rootalocalhost opt]# rpm -qf /etc/firefox/
firefox-60.2.2-1.e17 centos.x86 64
  • rpm -qd 查询软件的帮助文件位置
[rootalocalhost opt]# rpm -qd firefox
/usr/lib64/firefox/LICENSE
/usr/share/man/man1/firefox.1.gz

(2)安装rpm -ivh

rpm  -ivh  软件包名称
-i install 安装
-v verbose 详细信息
-h 显示进度

(3)不考虑依赖关系 --nodeps

#不考虑依赖关系
[root@woniu opt]# rpm -ivh --nodeps QQ_3.2.17_250521_x86_64_01.rpm
Preparing... ################################# [100%]
Updating / installing...
1:linuxqq-3.2.17_35341-1 ################################# [100%]

(4)强制安装 --force

#强制安装
[root@woniu opt]# rpm -ivh --force QQ_3.2.17_250521_x86_64_01.rpm
error: Failed dependencies:
at-spi2-core is needed by linuxqq-3.2.17_35341-1.x86_64
gtk3 is needed by linuxqq-3.2.17_35341-1.x86_64
libXScrnSaver is needed by linuxqq-3.2.17_35341-1.x86_64
libXtst is needed by linuxqq-3.2.17_35341-1.x86_64
libnotify is needed by linuxqq-3.2.17_35341-1.x86_64
xdg-utils is needed by linuxqq-3.2.17_35341-1.x86_64

(5)更新 -U -F

-U
将系统中现有版本全部删除后再更新,强制更新
-F
必须是新的版本才能更新

(6)卸载 -e

rpm  -e 软件名称
[root@localhost ~]# rpm -e firefox
[root@localhost ~]# rpm -qa | grep -i firefox

5.3 YUM安装

  • yum解决rpm安装方式依赖包的问题,自动解决依赖关系。
  • 架构:C/S架构
  • 搭建方式:
    • 1、公网 阿里云、163、清华大学
    • 2、私有网络

(1)Linux yum目录

  • vi /etc/yum.repos.d/
[root@woniu firefox]# vi /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo epel.repo
CentOS-Base.repo.backup CentOS-Media.repo epel-testing.repo
CentOS-CR.repo CentOS-Sources.repo
CentOS-Debuginfo.repo CentOS-Vault.repo

(2)配置阿里yum源:

  • 备份
[root@woniu firefox]# cp -r /etc/yum.repos.d/  /opt/
  • 拷贝阿里配置文件
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  • 重建缓存
[root@localhost opt]# yum clean all
[root@localhost opt]# yum makecache
  • 测试
#lrzsz软件可以实现windows系统和linux系统之间互相传递文件
[root@localhost opt]# yum install lrzsz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 lrzsz-0.12.20-36.el7.x86_64 已安装并且是最新版本

#rz是将windows系统文件传递到Linux
[root@localhost opt]# rz
#sz是将Linux系统文件传递到windows
[root@localhost opt]# sz wps-office-12.1.0.17900-1.x86_64.rpm

(3)扩展源epel

  • epel --- extral package redhat-enterprise
[root@localhost yum.repos.d]# yum install epel-release  -y

(4)yum命令

1.列出所有软件包yum list
#列出所有软件包
[root@localhost yum.repos.d]# yum list | wc -l
25241
2.列出所有组安装包yum grouplist
#列出所有组安装包
[root@localhost yum.repos.d]# yum grouplist
已加载插件:fastestmirror, langpacks
3.列出仓库列表yum repolist
#列出仓库列表
[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
4.查询指定软件包yum search
#查询指定软件包
[root@localhost yum.repos.d]# yum search firefox
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
5.查询软件包的详细信息yum info
#查询软件包的详细信息
[root@localhost yum.repos.d]# yum info sl
已加载插件:fastestmirror, langpacks
Loading mirror speeds from
6.查询包的依赖关系yum deplist
#查询包的依赖关系
[root@woniu yum.repos.d]# yum deplist firefox
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
7.查询哪些包依赖我yum whatprovides
[root@woniu yum.repos.d]# yum whatprovides  firefox | more
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
8.安装yum install -y 软件名称
yum install  -y 软件名称
-y选项:默认确定
9.更新yum update -y 软件名称
yum update -y  软件名称
[root@localhost yum.repos.d]# yum update firefox
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: pubmirror1.math.uh.edu
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 firefox.x86_64.0.60.2.2-1.el7.centos 将被 升级
---> 软件包 firefox.x86_64.0.115.12.0-1.el7.centos 将被 更新
10. 删除yum remove -y 软件名称
yum  remove -y 软件名称
[root@localhost yum.repos.d]# yum remove firefox
已加载插件:fastestmirror, langpacks
正在解决依赖关系
--> 正在检查事务
---> 软件包 firefox.x86_64.0.115.12.0-1.el7.centos 将被 删除
--> 解决依赖关系完成

依赖关系解决 不删除依赖包

(5)私有仓库

  • 挂载光盘
mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
  • 服务器端准备仓库软件和依赖关系的文件
软件包的位置
[root@woniu yum.repos.d]# ls /mnt/Packages/ | wc -l
4022
依赖关系的文件
[root@woniu yum.repos.d]# ls /mnt/repodata/
276ebf1746f2994d58b786a62e58727962f4b633cac7b289b0ef18e80df7578e-other.xml.gz
2ff4471767c82fed8b27981c603e3dc9d6559ca69e162f5ca2bb53f2450c8b08-primary.sqlite.bz2
5504e9b031f0f2ee7e377b28b5cd0d4785a093acf37e86b4397611341540d7c1-other.sqlite.bz2
aced7d22b338fdf7c0a71ffcf32614e058f4422c42476d1f4b9e9364d567702f-c7-x86_64-comps.xml
bc140c8149fc43a5248fccff0daeef38182e49f6fe75d9b46db1206dc25a6c1c-c7-x86_64-comps.xml.gz
c4a7811896f3a65404455f3631907adaca3bb9bcd93acb6e476a9a7708abe8c7-filelists.sqlite.bz2
e005e92e5e4a30b46c189587e09bfdfdc30500df3f4479637d1a9c2a9798aa6e-filelists.xml.gz
f4267434952367b8ee0a241f62540b0778b74911e27241d09d60ccdb657ba1a2-primary.xml.gz
repomd.xml
TRANS.TBL
  • 客户端配置如何访问这个仓库第一步:备份
cp -r  /etc/yum.repos.d/*.repo  /opt

第二步:配置仓库文件

[root@woniu yum.repos.d]# vi CentOS-Base.repo

[base]
name=woniu #仓库名称
baseurl=file:///mnt #最重要,仓库地址(http,ftp,本地文件file://)
gpgcheck=0 #软件包校验。0表示关闭,1表示开启
enable=1 #启用该仓库

第三步:重建缓存

yum clean all
yum makecache

第四步:测试

#查看仓库列表
[root@woniu yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base woniu 10,072
repolist: 10,072

#查看仓库软件数量
yum list | wc -l

第五步:安装apache

[root@woniu yum.repos.d]# yum install httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package httpd-2.4.6-88.el7.centos.x86_64 already installed and latest version
Nothing to do

第六步:启动apache服务

[root@woniu yum.repos.d]# systemctl start httpd
如果还是不能访问
关闭防火墙
[root@woniu yum.repos.d]# systemctl stop firewalld

第七步:测试

浏览器访问centos7系统IP地址

5.4源码安装

(1)tar命令

  • 对文件或目录进行打包,支持压缩。
-c  创建打包文件
-v 显示进度
-f 必须放在最后,后边接文件

#f后边接命名的打包文件,建议后缀名是tar
[root@localhost yum.repos.d]# tar cvf /opt/yum.tar /etc/yum.repos.d/
tar: 从成员名中删除开头的“/”
/etc/yum.repos.d/
/etc/yum.repos.d/CentOS-CR.repo
/etc/yum.repos.d/CentOS-Debuginfo.repo
/etc/yum.repos.d/CentOS-Media.repo
/etc/yum.repos.d/CentOS-Sources.repo
/etc/yum.repos.d/CentOS-Vault.repo
/etc/yum.repos.d/CentOS-fasttrack.repo
/etc/yum.repos.d/CentOS-Base.repo.backup
/etc/yum.repos.d/CentOS-Base.repo
/etc/yum.repos.d/epel-testing.repo
/etc/yum.repos.d/epel.repo
  • 打包并压缩
压缩方式:
gz --- z
bzip2 --- j
xz --- J
压缩比 xz > bzip2 > gz

使用gz压缩
tar czvf /opt/centos7.tar.gz /etc
使用bzip2压缩
tar cjvf /opt/centos7.tar.bz2 /etc
使用xz压缩
tar cJvf /opt/centos7.tar.xz /etc

对比压缩比
[root@localhost opt]# du -sh /var/ var.tar.gz var.tar.bz2
657M /var/
200M var.tar.gz
162M var.tar.bz2
  • 解包
x   --  解包
v -- 显示过程
f -- 接文件名称

解压到当前目录
[root@localhost opt]# tar xvf yum.tar

-C 解压到指定目录
[root@localhost opt]# tar xvf yum.tar -C /usr/

对于gz压缩的文件如何解压
tar xzvf var.tar.gz -C /usr/src

对于bz2压缩的文件如何解压
tar xjvf var.tar.bz2 -C /usr/src

对于xz压缩的文件如何解压
tar xJvf var.tar.xz -C /usr/src
  • 查看打包文件 -t选项
[root@localhost opt]# tar tvf yum.tar 
drwxr-xr-x root/root 0 2025-05-29 10:15 etc/yum.repos.d/
-rw-r--r-- root/root 1309 2018-11-23 21:16 etc/yum.repos.d/CentOS-CR.repo
-rw-r--r-- root/root 649 2018-11-23 21:16 etc/yum.repos.d/CentOS-Debuginfo.repo

(2)源码安装步骤

1、获取安装软件 --- 源码(nginx、mysql)

官网下载

wget命令

2、解压 tar命令

3、生成makefile文件 ./configure 检查安装环境

4、编译 make命令

5、安装到指定位置 make install

nginx举例:

1、下载安装包

官网下载

[root@localhost opt]# yum install -y wget
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: repo.jing.rocks
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系

wget是一个远程下载工具

[root@localhost opt]# wget http://nginx.org/download/nginx-1.22.0.tar.gz
--2025-05-29 15:04:25-- http://nginx.org/download/nginx-1.22.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2601::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1073322 (1.0M) [application/octet-stream]
正在保存至: “nginx-1.22.0.tar.gz”

100%[====================================>] 1,073,322 106KB/s 用时 13s

2025-05-29 15:04:38 (82.3 KB/s) - 已保存 “nginx-1.22.0.tar.gz” [1073322/1073322])

2、解压软件包

[root@localhost opt]# tar xzvf nginx-1.22.0.tar.gz -C /usr/src/
nginx-1.22.0/
nginx-1.22.0/auto/
nginx-1.22.0/conf/
nginx-1.22.0/contrib/

3、安装编译器和库

#安装gcc编译器
[root@localhost nginx-1.22.0]# yum install gcc-c++
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: pubmirror1.math.uh.edu
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com

**PCRE(Perl Compatible Regular Expressions)** 是一套实现正则表达式的库,由 Philip Hazel 开发,因其兼容 Perl 的正则表达式语法而得名。它广泛应用于各种编程语言和工具中,用于文本匹配、搜索、替换等操作
[root@localhost nginx-1.22.0]# yum install -y pcre pcre-devel


zlib
**zlib** 是一个用于数据压缩和解压缩的开源库,由 Jean-loup Gailly 和 Mark Adler 开发。它提供了高效的无损数据压缩算法,广泛应用于各种软件和网络协议中。
[root@localhost nginx-1.22.0]# yum install -y zlib zlib-devel

OpenSSL
**OpenSSL** 是一个开源的密码学工具包,提供了 SSL/TLS 协议实现、加密算法库和证书管理功能。它广泛应用于网络通信、数据加密、身份验证等领域,是保障互联网安全的核心组件之一。
[root@localhost nginx-1.22.0]# yum install -y openssl openssl-devel

3、检查编译环境

[root@localhost opt]# cd /usr/src/nginx-1.22.0/
[root@localhost nginx-1.22.0]# ./configure --prefix=/usr/local

nginx path prefix: "/usr/local"
nginx binary file: "/usr/local/sbin/nginx"
nginx modules path: "/usr/local/modules"
nginx configuration prefix: "/usr/local/conf"
nginx configuration file: "/usr/local/conf/nginx.conf"
nginx pid file: "/usr/local/logs/nginx.pid"
nginx error log file: "/usr/local/logs/error.log"
nginx http access log file: "/usr/local/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"

#生成了Makefile文件
[root@localhost nginx-1.22.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README

第三步:

编译
make

第四步:

安装到指定路径
make install

三四步合并:

make  && make install 

测试:

如果启动了apache,要先把apache关掉
[root@localhost nginx-1.22.0]# systemctl stop httpd

再启动nginx
[root@localhost nginx-1.22.0]# /usr/local/sbin/nginx

访问首页
http://ip地址
image-20250529152511371

8.磁盘管理

6.1 磁盘概念

  • 作用:存储数据
  • 磁盘分类:
    • 机械磁盘 ---(希捷、西数) SATA接口
    • 固态磁盘 --- M.2接口 SATA接口

6.2 磁盘管理

[root@localhost dev]# ls /dev/sda
/dev/sda1
s --- 表示硬盘接口(SATA、SASI、SAS) h开头(接口IDE接口)
d --- disk
a --- 第一块磁盘
1 --- 第一个分区

(1)lsblk - list block 查看块设备文件

[root@localhost dev]# lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part
sr0 11:0 1 4.3G 0 rom

字段说明:

NAME设备名称
MAJ:MIN主设备号和次设备号
RM是否可移动(removable),1表示可移动,0表示不可移动
SIZE设备大小
RO是否只读,1表示只读,0表示可读写
TYPE设备类型:disk(磁盘)、part(分区)、rom(只读存储)等
MOUNTPOINT挂载点
lsblk -f

显示文件系统信息。

(2)df命令

  • -h可读形式查看磁盘容量

以易读的格式显示磁盘空间大小,例如以 GB、MB 等单位显示,而不是默认的块大小。

-h可读形式查看磁盘容量
[root@localhost dev]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 12G 39G 23% /
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.3M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 166M 849M 17% /boot
/dev/mapper/centos-home 47G 37M 47G 1% /home
tmpfs 98M 12K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
  • -T选项查看文件系统类型

显示文件系统的类型。

-T选项查看文件系统类型
[root@localhost dev]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 12G 39G 23% /
devtmpfs devtmpfs 470M 0 470M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 8.3M 478M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 166M 849M 17% /boot
/dev/mapper/centos-home xfs 47G 37M 47G 1% /home
tmpfs tmpfs 98M 12K 98M 1% /run/user/42
tmpfs tmpfs 98M 0 98M 0% /run/user/0、

(3)fdisk命令

[root@localhost dev]# fdisk -l   # ---- 查看磁盘详细信息

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x12a90061

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux

6.3磁盘分区

  • 1 准备一块磁盘

虚拟机添加

  • 2 分区命令fdisk
fdisk  磁盘名称
进入交互模式分区
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x88157d21 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):
  • 3 创建分区
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

扩展分区
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (10487808-62914559,默认为 10487808):
将使用默认值 10487808

逻辑分区(先划分扩展分区,在扩展分区基础上划分逻辑分区)
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (10489856-62914559,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-62914559,默认为 62914559):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB
  • 4 删除分区
删除扩展分区后,逻辑分区也被删除

命令(输入 m 获取帮助):d
分区号 (1,2,5,默认 5):2
分区 2 已删除

命令(输入 m 获取帮助):p

磁盘 /dev/sdc:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x88157d21

设备 Boot Start End Blocks Id System
/dev/sdc1 2048 10487807 5242880 83 Linux
  • 5 保存分区表
命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

磁盘信息同步(相当于不关机刷新)

[root@localhost ~]# partprobe 

查看分区

[root@localhost ~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 30G 0 disk
├─sdc1 8:33 0 5G 0 part
└─sdc2 8:34 0 5G 0 part
  • 6 格式化分区
mkfs命令  -- 创建linux文件系统
[root@localhost ~]# mkfs -t xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
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
  • 7 挂载文件系统
[root@localhost ~]# mkdir /woniu
[root@localhost ~]# mount /dev/sdc1 /woniu/
[root@localhost ~]# cp /etc/passwd /woniu/
[root@localhost ~]# mkdir /woniu
[root@localhost ~]# mount /dev/sdc1 /woniu/
[root@localhost ~]# cp /etc/passwd /woniu/
[root@localhost ~]# umount /dev/sdc1
[root@localhost ~]# ls /woniu
[root@localhost ~]# mount /dev/sdc1 /woniu/
[root@localhost ~]# ls /woniu/
passwd

9.逻辑卷

1.自动挂载

1.1mount命令

  • 作用: 挂载文件系统, 分区、移动硬盘、U盘、光盘镜像等

语法:

mount  [选项]   设备名称    挂载点

选项:

-t选项 
-o选项
-a选项
-l选项

案例:

挂载到指定位置

mount   /dev/sda1    /mnt

-t: 指定挂载的文件系统
[root@localhost ~]# mount -t ntfs-3g /dev/sdb2 /data/

-l:查看挂载信息
[root@localhost ~]# mount -l | tail -1
/dev/sdb2 on /data type xfs (ro,relatime,seclabel,attr2,inode64,noquota)

-o:指定操作 ro、rw、async、sync、
[root@localhost ~]# mount -o ro /dev/sdb2 /data/

-a:挂载/etc/fstab文件下的所有系统
[root@localhost ~]# mount -a
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# mount -a
mount: 挂载点 /woniuu 不存在

1.2 /etc/fstab文件

一共有5列:

dev/mapper/centos-root /                       xfs     defaults        0 0

dev/mapper/centos-root:设备名称
/: 挂载点
xfs:文件系统
defaults:默认权限 rw,relatime,seclabel,attr2,inode64,noquota
0: dump备份 0不备份,1备份
0: check 是否自检 1自检

如何修改

image-20250530102828566

挂载NTFS文件系统 — 挂载移动硬盘

1、下载ntfs-3g软件
[root@localhost ~]# wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz

2、源码安装
[root@localhost ~]# tar zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz -C /usr/src/
[root@localhost nginx-1.22.0]# cd /usr/src/ntfs-3g_ntfsprogs-2017.3.23/
[root@localhost ntfs-3g_ntfsprogs-2017.3.23]# ./configure
[root@localhost ntfs-3g_ntfsprogs-2017.3.23]# make
[root@localhost ntfs-3g_ntfsprogs-2017.3.23]# make install

3、测试安装是否成功
[root@localhost ntfs-3g_ntfsprogs-2017.3.23]# ntfs-3g --version
ntfs-3g 2017.3.23 integrated FUSE 27

4、挂载NTFS文件系统
mount -t nfs-3g /dev/sdb1 /mnt

2、逻辑卷 (LVM)

作用:实现磁盘容量的动态管理。

硬件---磁盘

分区

数据

LVM

硬件 - - 磁盘 1 瓷盘 2

虚拟卷组 (磁盘1,磁盘2)

逻辑卷 (lv1,lv2)

数据

最小存储单元 - - PE, LE

物理卷 -- 实际存储数据的磁盘或者分区

卷组 -- 多个物理卷统一管理,当成整体的磁盘空间

逻辑卷 -- 是卷组分配出来的,和物理卷没有直接关系

逻辑卷的创建步骤

1、创建物理卷

[root@localhost ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created.

查看物理卷信息
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<99.00 GiB / 4.00 MiB free]
PV /dev/sde lvm2 [10.00 GiB]
PV /dev/sdd lvm2 [10.00 GiB]
Total: 3 [<119.00 GiB] / in use: 1 [<99.00 GiB] / in no VG: 2 [20.00 GiB]
[root@localhost ~]# pvdisplay /dev/sdd
"/dev/sdd" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 47y265-R2aj-217k-ap9e-wl1t-4fzW-o2gbSQ

2、创建卷组

vgcreate     v-- volume    g -=-- group
[root@localhost ~]# vgcreate woniu-vg /dev/sdd /dev/sde
Volume group "woniu-vg" successfully created
woniu-vg - 自定义卷组名称
/dev/sdd /dev/sde -- 要加入的物理卷名称,可以多个一起加入

查看vg信息
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "woniu-vg" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name woniu-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID EqyatF-xLVe-3Fjt-WL6b-pTd4-lc3p-A0j2jj

新建一个卷组,名称为vg0,PEsize为8M,在卷组中创建一个名为lv02的逻辑卷,大小为50个PE,格式化为ext4,挂载在/mnt/lv01要求每次开机都生效。

pvcreate /dev/sdb2 vgcreate -s 8M vg0 /dev/sdb2 lvcreate -l 50 -n lv02 vg0 mkfs.ext4 /dev/vg0/lv02 mkdir /mnt/lv01 mount /dev/vg0/lv02 /mnt/lv01 vim /etc/fstab /dev/vg0/lv02 /mnt/lv01 ext4 defaults 0 2 mount -a

3、创建逻辑卷lv logic volume

lvcreate  
[root@localhost ~]# lvcreate -n woniu-lv1 -L 2G woniu-vg
Logical volume "woniu-lv1" created.
[root@localhost ~]# lvcreate -n woniu-lv2 -l 1000 woniu-vg
Logical volume "woniu-lv2" created.
[root@localhost ~]# lvdisplay /dev/woniu-vg/woniu-lv1
--- Logical volume ---
LV Path /dev/woniu-vg/woniu-lv1
LV Name woniu-lv1
VG Name woniu-vg
LV UUID kOMeMh-em2W-wQPg-DCfa-1lF5-XLOi-CvM4Vq
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-05-30 11:35:20 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3

lvcreate -n woniu-lv2 -l 1000 woniu-vg

大小为1000个PE

4、格式化指定文件系统

[root@localhost ~]# mkfs.xfs /dev/woniu-vg/woniu-lv1
meta-data=/dev/woniu-vg/woniu-lv1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, 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

5、挂载

[root@localhost ~]# mkdir /woniu-lv1
[root@localhost ~]# mount /dev/woniu-vg/woniu-lv1 /woniu-lv1/

6、测试

[root@localhost ~]# cp  /etc/passwd   /woniu-lv1

7、扩容

#卷组
[root@localhost ~]# pvcreate /dev/sdc5
Physical volume "/dev/sdc5" successfully created.
[root@localhost ~]# vgextend woniu-vg /dev/sdc5
Volume group "woniu-vg" successfully extended
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name woniu-vg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size <25.99 GiB
PE Size 4.00 MiB
Total PE 6653
Alloc PE / Size 1512 / <5.91 GiB
Free PE / Size 5141 / 20.08 GiB
VG UUID EqyatF-xLVe-3Fjt-WL6b-pTd4-lc3p-A0j2jj


#逻辑卷
[root@localhost ~]# lvextend -L +10G /dev/woniu-vg/woniu-lv1
Size of logical volume woniu-vg/woniu-lv1 changed from 2.00 GiB (512 extents) to 12.00 GiB (3072 extents).
Logical volume woniu-vg/woniu-lv1 successfully resized.

#xfs文件系统扩容,后边接的是挂载点
用于调整 XFS 文件系统的大小,使其能够利用逻辑卷中新增的磁盘空间
[root@localhost ~]# xfs_growfs /woniu-lv1
meta-data=/dev/mapper/woniu--vg-woniu--lv1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 3145728


#resize2fs只能针对ext4文件系统进行扩容
用于调整 ext2/ext3/ext4 文件系统的大小,使其能够利用逻辑卷中新增的磁盘空间。
[root@localhost ~]# resize2fs /dev/woniu-vg/woniu-lv3
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/woniu-vg/woniu-lv3 is mounted on /woniu-lv3; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/woniu-vg/woniu-lv3 is now 2097152 blocks long.

验证:
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 12G 39G 24% /
devtmpfs devtmpfs 470M 0 470M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 8.4M 478M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sdc1 xfs 5.0G 33M 5.0G 1% /woniu
/dev/sda1 xfs 1014M 166M 849M 17% /boot
/dev/mapper/centos-home xfs 47G 37M 47G 1% /home
tmpfs tmpfs 98M 12K 98M 1% /run/user/42
/dev/mapper/woniu--vg-woniu--lv1 xfs 2.0G 33M 2.0G 2% /woniu-lv1
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/woniu--vg-woniu--lv3 ext4 7.9G 14M 7.5G 1% /woniu-lv3

8、查看卷组中物理卷详细信息

[root@localhost ~]# vgdisplay -v woniu-vg
--- Physical volumes ---
PV Name /dev/sdd
PV UUID 47y265-R2aj-217k-ap9e-wl1t-4fzW-o2gbSQ
PV Status allocatable
Total PE / Free PE 2559 / 0

PV Name /dev/sde
PV UUID iombAl-bXwF-hN7I-Ant2-4gb4-LZgw-TGTaxl
PV Status allocatable
Total PE / Free PE 2559 / 0

PV Name /dev/sdc5
PV UUID ReZTcN-O3FG-rZMD-e4EL-qcTl-ZNnU-SxzvL4
PV Status allocatable
Total PE / Free PE 1535 / 533

9、移除操作

#从卷组中删除指定的物理卷
[root@localhost ~]# vgreduce woniu-vg /dev/sdc5
Physical volume "/dev/sdc5" still in use
提升该物理卷正被使用

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
└─sdb2 8:18 0 5G 0 part
sdc 8:32 0 30G 0 disk
├─sdc1 8:33 0 5G 0 part /woniu
├─sdc2 8:34 0 5G 0 part
├─sdc3 8:35 0 512B 0 part
└─sdc5 8:37 0 6G 0 part
└─woniu--vg-woniu--lv3 253:5 0 8G 0 lvm /woniu-lv3
查询结果显示正被逻辑卷lv3使用

解决思路:
1、卸载逻辑卷lv3
[root@localhost ~]# umount /woniu-lv3
2、删除逻辑卷(数据要备份)
[root@localhost ~]# lvremove /dev/woniu-vg/woniu-lv3
Do you really want to remove active logical volume woniu-vg/woniu-lv3? [y/n]: y
Logical volume "woniu-lv3" successfully removed
3、移除物理卷
[root@localhost ~]# vgreduce woniu-vg /dev/sdc5
Removed "/dev/sdc5" from volume group "woniu-vg"
4、验证
[root@localhost ~]# vgdisplay -v woniu-vg

10.进程管理

程序是存储在磁盘上的静态代码文件,进程是程序运行时的动态实例(拥有独立资源),线程是进程内的最小执行单元(共享进程资源),一个进程可包含多个线程,三者体现了 “静态代码→动态运行→并发执行” 的层次关系。

交互关系示例

  1. 程序→进程
    • 用户双击 chrome.exe 时,操作系统创建一个 Chrome 进程,加载程序代码到内存并分配资源。
  2. 进程→线程
    • Chrome 进程启动后,自动创建多个线程:
      • 主线程:处理 UI 渲染和用户交互。
      • 网络线程:负责 HTTP 请求和资源下载。
      • 渲染线程:解析 HTML/CSS/JavaScript 并绘制页面。
  3. 多进程与多线程
    • 多进程:如 Chrome 浏览器为每个标签页创建独立进程,隔离崩溃风险。
    • 多线程:如 Python 的 threading 模块创建多个线程并行执行任务(受 GIL 限制)。
  • 程序是 “剧本”:定义了执行逻辑,但本身不会 “行动”。
  • 进程是 “舞台”:为程序运行提供独立环境,消耗系统资源。
  • 线程是 “演员”:在进程的舞台上并行表演,共享舞台资源但各自执行不同动作。

8.1 top

动态监控进程的变化

第一行
top - 15:38:42 up 4:15, 1 user, load average: 0.00, 0.01, 0.05

top:
表示这是一个top命令的输出。
14:30:00:
当前系统时间,格式为HH:MM:SS。
up 2 days, 12:34:
表示系统已经运行了2天12小时34分钟。这是系统自上次启动以来的运行时间。
2 users:
表示当前有2个用户登录到系统中。
load average: 0.12, 0.08, 0.05:
表示系统的平均负载。平均负载是系统在过去1分钟、5分钟和15分钟内的平均进程数。这些值越低,表示系统越空闲。具体来说:
0.12:过去1分钟内的平均负载。
0.08:过去5分钟内的平均负载。
0.05:过去15分钟内的平均负载。

第二行:进程数量
Tasks: 203 total, 1 running, 202 sleeping, 0 stopped, 0 zombie
运行:
休眠:默认
停止:
僵尸:

第三行:CPU状态
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0
us --- 用户
sy -- 系统
ni -- 优先级
id -- idle 空闲百分比

第四行:内存状态 memory
KiB Mem : 995920 total, 168568 free, 375796 used, 451556 buff/cache

第五行:swap(交换分区)
KiB Swap: 2097148 total, 2097148 free, 0 used. 378160 avail Mem

第六行:
PID -- 进程ID
USER -- 进程所有者
PR/NI --- 优先级
%CPU -- cpu使用率 P
%MEM --- 内存使用率 M

修改进程执行的优先级:
r 根据PID修改优先级 -10 --- 10
image-20250530154630425

第三行

image-20240115175603214
内 容说 明
Cpu(s): 0.0 %us用户模式占用的 CPU 百分比
0.3%sy系统模式占用的 CPU 百分比
0.0%ni改变过优先级的用户进程占用的 CPU 百分比
99.7%ididle缩写,空闲 CPU 占用的 CPU 百分比
0.0%wa等待输入/输出的进程占用的 CPU 百分比
0.0%hi硬中断请求服务占用的 CPU 百分比
0.0%si软中断请求服务占用的 CPU 百分比
0.0%stst(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

具体进程情况分析

image-20240115190839383
PID进程的 ID。
USER该进程所属的用户。
PR优先级,数值越小优先级越高。
NI优先级,数值越小优先级越高。
VIRT该进程使用的虚拟内存的大小,单位为 KB。
RES该进程使用的物理内存的大小,单位为 KB。
SHR共享内存大小,单位为 KB。计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR)
S进程状态。其中S 表示睡眠,R 表示运行
%CPU该进程占用 CPU 的百分比。
%MEM该进程占用内存的百分比。
TIME+该进程共占用的 CPU 时间。
COMMAND进程名

8.2 ps

静态方式查看进程

ps aux    BSD表示方式 
ps -ef systemV表示方式

ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
用户名 进程ID cpu使用率 内存使用率

ps -ef 可以看到PPID父进程ID PPID则是创建该进程的父进程的ID

[root@localhost opt]# ps aux | grep -i nginx
root 11917 0.0 0.0 39312 936 ? Ss 16:10 0:00 nginx: master process /usr/sbin/nginx
nginx 11918 0.0 0.1 41784 1932 ? S 16:10 0:00 nginx: worker process
nginx 11919 0.0 0.1 41784 1932 ? S 16:10 0:00 nginx: worker process
root 11924 0.0 0.1 112824 1000 pts/0 S+ 16:10 0:00 grep --color=auto -i nginx

pstree 树形显示进程
ps -ef
image-20240115193343663
UID该进程执行的用户ID
PID进程ID
PPID该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID)
CCpu的占用率,其形式是百分数
STIME进程的启动时间
TTY终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起
TIME进程实际使用CPU的时间
CMD该进程的名称或者对应的路径

aux是BSD风格,大家可以理解为两种风格只是显示不同

image-20240115194222829
USER:该 process 属于哪个使用者账号
PID :该 process 的ID
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令

8.3 pstree

  • 需要下载
yum -y install psmisc
  • 以树状图的形式显示当前系统中进程的层次结构。它可以帮助你直观地了解进程之间的父子关系,这对于系统管理和故障排查非常有帮助
[root@localhost opt]# pstree | more
systemd-+-ModemManager---2*[{ModemManager}]
|-VGAuthService
|-2*[abrt-watch-log]
|-abrtd
|-accounts-daemon---2*[{accounts-daemon}]
|-alsactl
|-at-spi-bus-laun-+-dbus-daemon---{dbus-daemon}
| `-3*[{at-spi-bus-laun}]
|-at-spi2-registr---2*[{at-spi2-registr}]
|-atd
|-auditd-+-audispd-+-sedispatch

8.4 kill

根据PID杀

发送信号 默认是15,正常结束进程

9 - 强制杀掉进程

[root@localhost ~]# ps aux | grep -i yes
root 12259 88.0 0.0 108056 356 pts/0 R+ 16:32 0:22 yes
root 12269 0.0 0.0 112824 992 pts/1 S+ 16:32 0:00 grep --color=auto -i yes
[root@localhost ~]# kill 12259

8.5 killall

killall 程序名称

[root@localhost ~]# killall nginx
[root@localhost ~]# ps aux | grep -i nginx
root 12389 0.0 0.1 112824 1000 pts/1 S+ 16:38 0:00 grep --color=auto -i nginx

8.6 renice

临时修改进程的优先级

[root@localhost opt]# renice -n 10 -p 13000
-n 设置优先级
-p 进程ID

8.7 nice

临时修改程序优先级

-n可以省略

[root@localhost opt]# nice  -5  nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[root@localhost opt]# systemctl stop nginx
[root@localhost opt]# nice -5 nginx

开启程序设置优先级

11.计划任务

1、计划任务的概念

1.1 计划任务的作用

  • 定时执行任务 系统的备份、软件的更新
  • 集中利用资源,避开业务高峰期游戏更新、软件维护
  • 监控监控系统

1.2 计划任务的分类

  • 系统执行的计划任务 - -- 周期性的任务
  • 用户执行的计划任务 ---- 备份、执行脚本,一次性和周期性
  • 程序执行的计划任务 -- 监控(心跳机制)、apache、nginx

2、一次性计划任务

2.1 atd服务

[root@localhost u01]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2025-06-03 09:32:53 CST; 1h 8min ago
Main PID: 7041 (atd)
Tasks: 1
CGroup: /system.slice/atd.service
└─7041 /usr/sbin/atd -f

6月 03 09:32:53 localhost.localdomain systemd[1]: Started Job spooling...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost u01]# systemctl is-enabled atd
enabled

2.2 at命令

at  时间    ---- 进入交互式配置
使用ctrl + d结束
[root@localhost u01]# at 10:46
at> toucgh
at> touch /opt/at.txt
at> <EOT>
job 18 at Tue Jun 3 10:46:00 2025

-f选项 非交互式,后边一般接一个shell脚本

-l选项 显示我们未执行的计划任务 等同于atq命令
[root@localhost u01]# at -l
19 Tue Jun 3 10:55:00 2025 a root
[root@localhost u01]# atq
19 Tue Jun 3 10:55:00 2025 a root

-d选项 删除未执行的计划任务 等同于atrm命令
[root@localhost u01]# at -l
19 Tue Jun 3 10:55:00 2025 a root
20 Tue Jun 3 10:59:00 2025 a root
[root@localhost u01]# at -d 19
[root@localhost u01]# at -l
20 Tue Jun 3 10:59:00 2025 a root
[root@localhost u01]# atrm 20
[root@localhost u01]# at -l

2.3 at中的时间

#绝对时间

#AM表示上午,PM表示下午
[root@localhost u01]# at 11:00AM
at> ls /etc/shadow
at> <EOT>
job 21 at Tue Jun 3 11:00:00 2025
[root@localhost u01]# at 22:00PM
Hour too large for PM. Last token seen: PM
Garbled time

# midnight、noon、tealight
[root@localhost u01]# at midnight
at> ls /etc
at> <EOT>
job 22 at Wed Jun 4 00:00:00 2025
[root@localhost u01]# atq
21 Tue Jun 3 11:00:00 2025 a root
22 Wed Jun 4 00:00:00 2025 a root
[root@localhost u01]# man at
[root@localhost u01]# at noon
at> ls /etc
at> <EOT>
job 23 at Tue Jun 3 12:00:00 2025
[root@localhost u01]# at -l
21 Tue Jun 3 11:00:00 2025 a root
22 Wed Jun 4 00:00:00 2025 a root
23 Tue Jun 3 12:00:00 2025 a root

#日期
[root@localhost u01]# at 12:00 20250604
Error in month number. Last token seen: 20250604
Garbled time
[root@localhost u01]# man at
[root@localhost u01]# at 12:00 06042025

#相对时间 now、today、tomorrow
[root@localhost u01]# at now + 5
syntax error. Last token seen: 5
Garbled time
[root@localhost u01]# at now + 5minutes
[root@localhost u01]# at 14:00 today
at>
[root@localhost u01]# at 14:00 tomorrow
at> <EOT>

2.4 at权限问题

默认情况下,/etc/at.deny文件定义使用at命令权限,在该文件内的用户不能使用at命令。

[haha@localhost ~]$ at now
at> <EOT>
job 36 at Tue Jun 3 11:28:00 2025
[haha@localhost ~]$ at now
You do not have permission to use at.

创建/etc/at.allow文件,将用户加入该文件,测试at命令使用权限,allow文件优先级高于deny文件

[haha@localhost ~]$ at now
at> <EOT>
job 36 at Tue Jun 3 11:28:00 2025
[haha@localhost ~]$ at now
You do not have permission to use at.
[haha@localhost ~]$ at now
at>

3、周期性计划任务

按照一定频率执行相关任务。

3.1 crond服务

[root@localhost u01]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2025-06-03 09:32:53 CST; 2h 15min ago
Main PID: 7044 (crond)
Tasks: 1
CGroup: /system.slice/crond.service
└─7044 /usr/sbin/crond -n

6月 03 09:32:53 localhost.localdomain systemd[1]: Started Command Sche...
6月 03 09:32:53 localhost.localdomain crond[7044]: (CRON) INFO (RANDOM...
6月 03 09:32:54 localhost.localdomain crond[7044]: (CRON) INFO (runnin...
Hint: Some lines were ellipsized, use -l to show in full.

3.2 crontab命令

[root@localhost u01]# ls /etc/cron
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab

#主要配置文件/etc/crontab
[root@localhost u01]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

3.3 重要选项

#-e选项 
编辑周期性计划任务
* 2 * * * ps aux | grep -i 'nginx' > /opt/cron.txt
30 4 * * * cp /etc/passwd /opt
* 6 20 * * reboot
30 18 * * 5 ls /

频率:
*/5 * * * * ls /
* 14-16 * * * ls /
* 14,15,19 * * * ls /
/ --- 每隔多久
- --- 从哪到哪
, --- 包含每个

#-l选项 查看周期性计划任务
[root@localhost u01]# crontab -l
* 2 * * * ps aux | grep -i 'nginx' > /opt/cron.txt
30 4 * * * cp /etc/passwd /opt
* 6 20 * * reboot
30 18 * * 5 ls /
*/5 * * * * ls /
* 14-16 * * * ls /
* 14,15,19 * * * ls /

#-r选项。情况计划任务,不建议使用,清除计划表
[root@localhost u01]# crontab -r
[root@localhost u01]# crontab -e
no crontab for root - using an empty one

3.4 crontab权限问题::

  • Crontab权限问题 Crontab是任何用户都可以创建的计划任务,但是超级管理员可以通过配置来设置某些用户不允许设置计划任务。
  • 黑名单配置文件位于:/etc/cron.deny里面写用户名,一行只能写一个白名单还有一个配置文件/etc/cron.allow(本身不存在,自己创建)

注意:白名单优先级高于黑名单,如果一个用户同时存在两个名单文件中,则会被默认允许创建计划任务

  • 计划任务的保存文件 /var/spool/cron/用户名文件中 如果使用root用户编辑计划任务,则用户文件名为root

4. 计划任务小结

1、计划任务分类

系统用户、普通用户、程序用户

2、一次性计划任务

#启动服务
systemctl start atd
#at命令
-l atq
-d atrm
#时间格式
相对时间
绝对时间

10.日志管理

1、日志的概念

日志主要用于记录系统的运行状态、用户的登录情况、系统的启动情况、防火墙的状态、计划任务、邮件等。

记录的目的用于监控系统,防范攻击,程序的运行状态。

2、rsyslog服务

Linux系统日志管理服务

[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2025-06-03 09:32:53 CST; 4h 33min ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 7022 (rsyslogd)
Tasks: 9
CGroup: /system.slice/rsyslog.service
└─7022 /usr/sbin/rsyslogd -n

6月 03 09:32:52 localhost.localdomain systemd[1]: Starting System Logg...
6月 03 09:32:53 localhost.localdomain rsyslogd[7022]: [origin softwar...
6月 03 09:32:53 localhost.localdomain systemd[1]: Started System Loggi...
Hint: Some lines were ellipsized, use -l to show in full.

主要配置文件

[root@localhost ~]# ls /etc/rsyslog.
rsyslog.conf rsyslog.conf.bak rsyslog.d/

日志目录

[root@localhost ~]# ls /var/log/
anaconda grubby_prune_debug tuned
audit lastlog vmware-network.1.log
boot.log libvirt vmware-network.2.log
boot.log-20250526 maillog vmware-network.3.log
boot.log-20250528 maillog-20250601 vmware-network.4.log
boot.log-20250529 messages vmware-network.5.log
boot.log-20250530 messages-20250601 vmware-network.6.log

配置文件中的定义

vi  /etc/rsyslog.conf
#内核信息
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

设施(Facility)

设施说明
auth认证相关(如 SSH 登录)
authpriv安全相关(敏感信息)
cron定时任务(crontab
daemon系统守护进程
user用户级消息(默认)
syslogsyslogd 自身日志
local0-local7自定义设施(供本地使用)

级别(Level,从高到低)

级别说明
emerg紧急(系统不可用)
alert必须立即处理的警报
crit严重错误
err错误
warning警告
notice正常但需要注意的事件
info信息性消息
debug调试信息

3、系统核心日志文件

3.1 内核日志文件

#内核文件
/var/log/messages
也可以使用命令dmesg查看

#认证文件
/var/log/secure
[root@localhost ~]# su - haha
上一次登录:二 6月 3 14:37:34 CST 2025pts/1 上
[haha@localhost ~]$ pwd
/home/haha
Jun 3 14:39:21 localhost sshd[13402]: Accepted password for woniu2 from 192.168.200.1 port 58717 ssh2
Jun 3 14:39:22 localhost sshd[13402]: pam_unix(sshd:session): session opened for user woniu2 by (uid=0)
对应了三个日志文件
(1)/var/log/wtmp --- 记录的就是最近登录成功的事件
对应的就是last命令
(2)/var/log/btmp -- 记录的就是最近登录失败的事件
对应的就是lastb命令
[root@localhost ~]# lastb
root pts/1 Tue Jun 3 14:45 - 14:45 (00:00)

btmp begins Tue Jun 3 14:45:21 2025

(3)/var/log/lastlog文件 -- 记录的就是最后一次登录的事件
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/1 二 6月 3 14:38:00 +0800 2025
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**

(4)/var/log/boot.log 系统引导日志文件
(5)/var/log/cron 计划任务日志文件
(6)/var/log/maillog 邮件日志文件

4、日志命令journalctl

4.1 查看日志

查看:cat、more、less、head

过滤:grep、awk、sed、wc

日志:

journalctl 全局查看日志命令

#默认情况下,查看所有日志信息
journalctl

#实时查看,等同于tail -f
journalctl -f

logger命令:

logger 命令用于向系统日志中添加消息,可以将消息发送到系统日志守护进程,以便记录在日志文件中。使用 logger 命令可以方便地记录系统信息、调试信息和错误信息等。

[root@localhost log]# logger "this is my log"
[root@localhost log]# tail -1 /var/log/messages
Jun 3 15:28:44 localhost root: this is my log

logrotate命令:

日志轮转命令

5、远程日志传输

实现日志文件的远程传输

5.1 架构

日志服务器 - - 客户端

5.2 连通性(2台虚拟机)

首先查看2台虚拟机的IP地址

服务器:
[root@localhost log]# ip a show ens33(真实网卡名称)
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:2c:c4:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.200.128/24 brd 192.168.200.255 scope global dynamic ens33
valid_lft 827sec preferred_lft 827sec
inet6 fe80::20c:29ff:fe2c:c4cc/64 scope link
valid_lft forever preferred_lft forever
客户端:
[root@woniu ~]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:35:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.200.166/24 brd 192.168.200.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::9ae2:e2fc:4e31:cd46/64 scope link noprefixroute
valid_lft forever preferred_lft forever

测试网络连通性:

#网络联通的状态
[root@localhost log]# ping 192.168.200.166
PING 192.168.200.166 (192.168.200.166) 56(84) bytes of data.
64 bytes from 192.168.200.166: icmp_seq=1 ttl=64 time=0.508 ms
64 bytes from 192.168.200.166: icmp_seq=2 ttl=64 time=0.887 ms
^C
--- 192.168.200.166 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 0.508/0.697/0.887/0.191 ms
#网络不联通的状态
[root@localhost log]# ping 192.168.200.111
PING 192.168.200.111 (192.168.200.111) 56(84) bytes of data.
From 192.168.200.128 icmp_seq=1 Destination Host Unreachable
From 192.168.200.128 icmp_seq=2 Destination Host Unreachable
From 192.168.200.128 icmp_seq=3 Destination Host Unreachable

服务器端配置:

#先备份配置文件
[root@localhost log]# cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
#修改配置文件
[root@localhost log]# vim /etc/rsyslog.conf
15 $ModLoad imudp
16 $UDPServerRun 514
17
18 # Provides TCP syslog reception
19 $ModLoad imtcp
20 $InputTCPServerRun 514
#重启服务
[root@localhost log]# systemctl restart rsyslog
#验证,查看514端口是否开放
[root@localhost log]# ss -an | grep :514
udp UNCONN 0 0 *:514 *:*
udp UNCONN 0 0 :::514 :::*
tcp LISTEN 0 25 *:514 *:*
tcp FIN-WAIT-2 0 0 192.168.200.128:514 192.168.200.166:48990
tcp LISTEN 0 25 :::514 :::*

客户端配置:

#先备份配置文件
[root@localhost log]# cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
#修改配置文件
[root@localhost log]# vim /etc/rsyslog.conf
*.* @@192.168.200.128:514 #指定传输服务器的IP地址和端口
#重启服务
[root@localhost log]# systemctl restart rsyslog

验证:

服务器端:
[root@localhost log]# tail -f /var/log/secure
Jun 3 15:46:05 woniu useradd[18638]: new group: name=hehe, GID=1002
Jun 3 15:46:05 woniu useradd[18638]: new user: name=hehe, UID=1002, GID=1002, home=/home/hehe, shell=/bin/bash
客户端:
[root@woniu ~]# useradd hehe

6、日志轮转logrotate

当日志满足一定条件后就保存为一个新文件,然后日志记录使用一个空的新文件。

logrotate命令:

[root@localhost log]# ls /etc/logrotate.
logrotate.conf logrotate.d/
[root@localhost log]# ls /etc/logrotate.d
bootlog iscsiuiolog nginx psacct wpa_supplicant
chrony libvirtd numad samba yum
cups libvirtd.qemu ppp syslog

主要配置文件:

[root@localhost log]# vim /etc/logrotate.conf
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

[root@localhost log]# vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
create 0640 nginx root
daily
rotate 10
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}

create 640 www-data adm: 创建新日志文件,并设置所有权和权限。
daily:每天切割一次日志。
missingok:如果日志文件不存在,Logrotate 不会报错。
rotate 10:保留最近 10 天的日志文件,超过的会被删除。
compress:使用 gzip 压缩旧日志文件。
delaycompress:延迟压缩最新一份日志文件,方便查看。
notifempty:如果日志文件为空,则不进行切割。
copytruncate:复制日志文件后截断原文件,适用于不支持重启的 Java 程序。
dateext:在日志文件名后添加日期后缀。
dateformat:自定义日期格式(例如 test.log-20231001)。
postrotate: 在日志轮换后重新打开日志文件。这里使用USR1信号通知Nginx重新打开日志文件。

案例:nginx

logrotate命令:
-d选项 模拟轮转
[root@localhost log]# logrotate -d /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /var/log/nginx/*.log after 1 days (10 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log does not need rotating (log is empty)considering log /var/log/nginx/error.log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated

#让日志文件不是空
启动nginx
[root@localhost log]# nginx
[root@localhost log]# ss -an | grep :80
tcp LISTEN 0 128 *:80 *:*

1、启动nginx

nginx
ss -an | grep :80

#轮转的配置
[root@localhost log]# vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
create 0640 nginx root
daily
rotate 10
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}

create 640 www-data adm: 创建新日志文件,并设置所有权和权限。
daily:每天切割一次日志。
missingok:如果日志文件不存在,Logrotate 不会报错。
rotate 10:保留最近 10 天的日志文件,超过的会被删除。
compress:使用 gzip 压缩旧日志文件。
delaycompress:延迟压缩最新一份日志文件,方便查看。
notifempty:如果日志文件为空,则不进行切割。
copytruncate:复制日志文件后截断原文件,适用于不支持重启的 Java 程序。
dateext:在日志文件名后添加日期后缀。
dateformat:自定义日期格式(例如 test.log-20231001)。
postrotate: 在日志轮换后重新打开日志文件。这里使用USR1信号通知Nginx重新打开日志文件。

2、切换到nginx日志文件目录

cd  /var/log/nginx
默认有2个日志access.log error.log
ll -h /var/log/nginx 2个日志不能为空
[root@localhost log]# ll /var/log/nginx/
总用量 16
-rw-r-----. 1 nginx root 0 6月 2 10:10 access.log
-rw-r-----. 1 nginx root 228 6月 2 10:10 access.log.1
-rw-r--r--. 1 root root 1992 5月 30 16:54 access.log-20250601
-rw-r-----. 1 nginx root 0 6月 2 10:10 error.log
-rw-r-----. 1 nginx root 259 6月 2 10:10 error.log.1
-rw-r--r--. 1 root root 516 5月 30 16:36 error.log-20250601

3、模拟轮转

#-d选项   模拟轮转
[root@localhost log]# logrotate -d /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /var/log/nginx/*.log after 1 days (10 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log does not need rotating (log is empty)considering log /var/log/nginx/error.log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated

4、强制轮转

#-f 强制轮转
[root@localhost nginx]# logrotate -f /etc/logrotate.d/nginx
[root@localhost nginx]# ls
access.log access.log-20250601 error.log error.log-20250601
access.log.1 access.log.2.gz error.log.1 error.log.2.gz

11.网络服务

1、Linux网络概述

1.1 设备 --- 网卡,服务器网卡有电口,也有光口

1.2 怎么找到网卡

网卡命名 - -

网卡名称 - - 网络适配器 network adapater NIC

  • windows (有线 - 以太网, 无线 - wlan)
  • linux -- lo -- loopback 环回口 127.0.0.1 永远up状态,一般用于测试网络centos6 -- eth0、eth1 (eth - etherent 以太网)centos7 -- ens33 UUID ens()
    1. 传统命名(例如,eth0, eth1等):这种命名方式是基于物理位置的,即第一个发现的网络接口被命名为eth0,第二个被命名为eth1,以此类推。但存在一个问题,当网卡插拔顺序改变或者系统启动时检测到网卡的顺序不同,网卡的编号可能会发生变化,导致配置文件中的网卡名称与实际网卡不匹配。
    2. 基于UUID的命名(例如,ens33):这种命名方式是基于网络接口的唯一标识符(UUID),而不是其物理位置。例如,ens33中的“ens”代表“Ethernet Name Space”,而数字或字母组合(如33)是接口的UUID的一部分。这种命名方式有助于避免因物理位置的改变而导致网络接口名称的不一致。

2、Linux网络服务

2.1network服务

centos6以前用的默认的网络服务

network -- 网络

network适合服务器管理网络 ,通过配置文件的方式管理linux网络。

network更适合配置静态IP地址。

centos7 建议 使用network。

停止服务测试:

[root@localhost ~]# systemctl stop network

正常的状态:

停止服务的状态:

网络停止服务,IP地址消失

解决方法:

重启网络服务

[root@localhost ~]# systemctl restart network

1、查看网络状态

systemctl status  network
systemctl status NetworkManager

#关闭NetworkManager
systemctl stop NetworkManager

#测试 关闭network
systemctl stop network

#观察网卡,测试远程连接工具
ip a

#重新启动网卡
systemctl restart network
配置文件的方式

ifcfg-ens33 :

if - interface 接口

cfg - config 配置

配置静态IP地址 ,服务器用的都是静态地址:

配置文件参数解释:

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
#网卡接口类型:以太网
TYPE=Ethernet
#不使用代理服务器连接
PROXY_METHOD=none
#是否仅用于浏览器访问
BROWSER_ONLY=no
#激活网卡时使用的地址配置协议:dhcp、static、none
BOOTPROTO=dhcp
#是否是默认路由
DEFROUTE=yes
#是否开启IPV4致命错误检测
IPV4_FAILURE_FATAL=no
#IPv6初始化
IPV6INIT=yes
#IPv6自动配置
IPV6_AUTOCONF=yes
#IPv6默认路由
IPV6_DEFROUTE=yes
#是否开启IPV6致命错误检测
IPV6_FAILURE_FATAL=no
#IPv6地址生成模型
IPV6_ADDR_GEN_MODE=stable-privacy
#网卡名称,逻辑名称,和设备名称一致
NAME=ens33
#网卡的唯一标识
UUID=92adc39e-bbe9-40ec-a6bf-d273ad788864
#设备名称
DEVICE=ens33
#是否开机激活网卡
ONBOOT=yes
#第一个DNS地址
DNS1=114.114.114.114

***#激活网卡时使用的地址配置协议:dhcp、static、none BOOTPROTO=dhcp

dhcp协议  --     dynamic   host  config  protocol  自动获取IP地址

static -- 静态

none - 静态
#是否开机激活网卡,网卡就是up状态
ONBOOT=yes
配置静态IP地址

第一步:

修改网卡文件之前 一定要备份

第二步:修改配置文件

IP地址 - IPADDR (ip address)

子网掩码 - NETMASK

默认网关 - - GATEWAY

修改完成后保存退出,重启网络服务:

systemctl restart network

2.2 (nmcli)NetworkManager命令行配置网络信息

nmcli 是 NetworkManager服务 的命令行工具。

nm 代表 NetworkManager,cli 代表 Command-Line 命令行。

确保NetworkManager服务正常运行

查看网络状态 nmcli general status
[root@localhost ~]# nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
连接的 完全 已启用 已启用 已启用 已启用
STATE:网络是否连接
CONNECTIVITY:NetworkManager是否接管网络设置
WIFI-HW:表示WIFI的硬件是否启用
WIFI:表示WIFI软件是否启用
WWAN-HW:表示WWAN的硬件(支持3G/LTE技术的物理接口)
WWAN:表示WWAN的软件
查看设备状态nmcli device status
[root@localhost ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet 连接的 ens33
virbr0 bridge 连接的 virbr0
lo loopback 未托管 --
virbr0-nic tun 未托管 --
查看具体连接状态nmcli connection show
image-20250610115735102
修改网络配置nmcli connection modify
修改ip地址
[root@localhost ~]nmcli connection modify ens33 ipv4.addresses 192.168.200.199/24
#如果配置IP地址不指定子网掩码,默认使用的是32的掩码,代表是一台主机

设置管理方式是手动
[root@localhost ~]nmcli conn modify ens33 ipv4.method manual

修改网关
[root@localhost ~]nmcli connection modify ens33 ipv4.gateway 192.168.200.200

修改DNS
[root@localhost ~]nmcli conn modify ens33 ipv4.dns 223.5.5.5

设置开机激活网卡
[root@localhost ~]nmcli conn modify ens33 connection.autoconnect yes

重启网卡后生效
[root@localhost ~]# nmcli connection down ens33 && nmcli connection up ens33
#成功取消激活连接 'ens33'(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
nmtui简易图形化配置

nmtui (Network Manager Text User Interface‌)nmtui‌的英文全称是‌Network Manager Text User Interface‌)是一个基于文本界面的网络管理工具,用于在 Linux 系统中配置和管理网络连接。它提供了一个用户友好的交互方式,使用户能够轻松地添加、删除和编辑网络连接,以及查看当前网络状态。

nmtui

2.3 ip网络相关命令

ip

[root@localhost ~] ifconfig          #查看网络状态信息
[root@localhost ~] netstat #查看端口状态
[root@localhost ~] chkconfig #设置服务的开机状态

ip命令是三者结合
临时修改mac地址
ip link set dev ens33 adress 00:0c:29:2c:55:55
ip a show ens33
临时添加IP地址
ip addr add 192.168.100.1/24 dev ens33
显示路由表
ip route show

2.4 多网卡

高可用 --- 不中断业务

负载均衡 -- 分散业务

步骤:

1、虚拟机增加一块网卡,注意要和绑定的网卡在同一种模式

2、备份网卡配置文件

3、修改网卡配置文件

2.5案例

多网卡服务器网络配置及负载均衡

Bonding是将多块网卡绑定同一ip地址对外提供服务,可以实现高可用或者负载均衡。默认情况下,无法给不同网卡配置同一个ip地址,通过bonding,创建一个虚拟网卡(Master角色)对外提供连接,然后在此虚拟机上绑定多块物理网卡(Slave角色),它们将共用MAC地址。这样一来,流量将以master虚拟网卡为导向分配给各slave物理网卡,从而实现流量的负载均衡或高可用。

Linux Bonding 支持多种模式,最常用的有以下几种:

1. 主备模式(Mode 1: Active-Backup)

  • 原理:多个网卡中只有一个处于活动状态,其他网卡作为备份。当主网卡故障时,备份网卡自动切换为活动状态。
  • 优点:提供高可用性,避免单点故障。
  • 缺点:带宽仅为单网卡的带宽,无法实现负载均衡。

2. 负载均衡模式(Mode 0: Round Robin)

  • 原理:按顺序轮流使用网卡发送数据,接收时所有网卡均可接收。
  • 优点:实现发送负载均衡,提升总带宽。
  • 缺点:需要交换机支持,且可能导致数据包乱序(需上层协议处理)。

3. 动态链路聚合(Mode 4: 802.3ad)

  • 原理:通过 LACP(链路聚合控制协议)与交换机协商,将多个物理链路捆绑为一个逻辑链路。
  • 优点:同时实现发送和接收的负载均衡,且具备高可用性。
  • 缺点:需要交换机支持 LACP 协议。

4. 广播模式(Mode 3: Broadcast)

  • 原理:所有数据包同时发送到所有网卡,确保数据可靠传输。
  • 优点:极端情况下的高可用性。
  • 缺点:浪费带宽,仅适用于特殊场景(如心跳检测)。

场景描述

某企业的服务器安装了两块网卡(ens33 和 ens36),需要将这两块网卡进行绑定,实现网络负载均衡,提高网络传输性能和可靠性。

操作步骤

1,添加1块NAT网卡

  1. 停止 NetworkManager 服务并备份配置文件
systemctl stop NetworkManager
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33.bak

1.创建绑定接口配置文件

vi /etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.200.177
#子网掩码
PREFIX=24
GATEWAY=192.168.200.254
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
参数详解
1. mode=1
含义:指定 Bonding 工作在 主备模式(Active-Backup)。
工作原理:
所有网卡中只有一个处于活动状态,其他网卡作为备份。
当活动网卡发生故障时,备份网卡会自动切换为活动状态。
适用场景:需要高可用性(HA)但无需负载均衡的场景,如关键服务器的网络连接。
2. miimon=100
含义:设置链路监测频率,单位为毫秒(ms)。
作用:
系统每 100ms 检查一次网卡的链路状态(通过 MII 接口)。
若连续多次检测到网卡无响应,则判定为故障并触发切换。
调优建议:
网络环境稳定时可增大值(如 200),减少系统开销。
网络波动较大时可减小值(如 50),加快故障检测速度。
3. fail_over_mac=1
含义:设置故障切换时的 MAC 地址处理方式。
取值说明:
0:保持原 MAC 地址(默认值)。
1:切换到活动网卡的 MAC 地址。
2:使用唯一的虚拟 MAC 地址(需交换机支持)。
作用:
在 mode=1 下,当主网卡故障切换到备网卡时,fail_over_mac=1 会使绑定接口使用备网卡的 MAC 地址,避免网络中断。

2.修改网卡配置文件

#  ens33配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
BOOTPROTO=none
MASTER=bond0

#ens36配置
vi /etc/sysconfig/network-scripts/ifcfg-ens36
NAME=ens36
DEVICE=ens36
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
含义:指定该网卡从属于名为 bond0 的绑定接口。
作用:将物理网卡(如 eth0、eth1)加入到逻辑接口 bond0 中,使其作为绑定组的一部分工作。
#SLAVE=yes
含义:声明该网卡为从属设备(Slave)。
作用:
禁用网卡的独立 IP 配置(由绑定接口统一管理 IP)。
使网卡接受绑定驱动的控制,按指定模式(如主备、负载均衡)工作。
#ONBOOT=yes

3.加载绑定模块

modprobe bonding

4.重启网络服务

systemctl restart network

验证

使用 ip a 命令查看网络接口信息,确保 bond0 接口正常工作,并且 IP 地址配置正确。使用网络测试工具,如 iperf,测试网络带宽是否有所提升(主备模式带宽不提升)。

3、linux服务管理

Linux 系统中,“服务”(Service)是指在后台持续运行的程序或进程,用于提供特定功能或支持系统运行。

windows进入服务 - cmd中 services.msc

9.1 服务的管理命令(重点)

启动 -- start

停止 - stop

重启 -restart

重新加载 - reload

3.1 status查看服务状态

systemctl status httpd

3.2 is-active查看服务是否存活

systemctl is-active httpd

3.3 is-enabled查看服务开机是否启动

systemctl is-enabled httpd

3.4 enable设置开机启动

systemctl enable httpd

3.5 disable设置开机不自启

systemctl disable httpd

3.6 start启动服务

systemctl  start  httpd

3.7 stop停止服务

systemctl stop httpd

3.8 restart重启

systemctl restart httpd
---
或者先stop -- 再start

3.9 reload重新加载

不停止服务的前提下
systemctl reload httpd
为了不中断网站访问,我们使用reload重新加载配置文件

4、服务端口

1.1 作用

区分系统上的不同服务。

1.2 分类

总共65535个端口。

  • 公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议,例如:80端口实际上总是HTTP通讯。
  • 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:Mysql数据库服务默认端口3306。
  • 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

1.3 常用端口

公认端口 ---

21 -- FTP 22 -- SSH

23 -- Telnet

25 -- smtp

80 - http

443 -- https

3389 - windows自带的远程桌面

(1)系统端口(Well-Known Ports)

端口号协议服务名称描述
20/21TCPFTP文件传输协议(数据连接 / 控制连接)
22TCPSSH安全远程登录
23TCPTelnet明文远程登录(不安全,已淘汰)
25TCPSMTP发送邮件
53TCP/UDPDNS域名解析
80TCPHTTP超文本传输协议(明文网页)
443TCPHTTPS加密网页传输(SSL/TLS)
110TCPPOP3接收邮件
3389TCPRDPWindows 远程桌面

(2)注册端口(Registered Ports)

端口号协议服务名称描述
3306TCPMySQL关系型数据库服务
6379TCPRedis内存数据库
8080TCPHTTP Alternate常用作代理或测试端口
8088TCPApache Hadoop大数据框架服务
9000TCPHBase分布式数据库服务
9200TCPElasticsearch

1.4 ss -anp端口命令

ss -anp 
-a:查看所有
-n: 端口号
-p:进程ID

5、SSH服务

  • 作用:远程连接 远程访问,实际环境中管理多台不同地域服务器,从及时性、便捷性、成本考虑采用远程访问。
  • ssh - (Secure Shell)安全的shell
SSH服务和Telnet服务的对比
维度SSHTelnet
数据加密全程加密(AES、RSA 等算法),防止监听和篡改。明文传输数据(包括用户名、密码、命令),极不安全。
认证方式支持密码认证、公钥认证(更安全)。仅支持明文密码认证,易被中间人攻击。
安全漏洞极少(定期更新修复,如 openssh 版本)。存在严重安全缺陷,已被明令禁止用于生产环境。
默认端口2223

5.1 加密方式

加密方式:

1)对称加密算法

  • 发送方使用密钥将明文数据加密成密文发送出去。
  • 接收方收到密文后,使用同一个密钥将密文解密成明文进行读取。

2)非对称加密算法

  • 发送方使用接收方发送过来的公钥明文数据加密成密文,然后发送出去。
  • 接收方收到密文后,使用自己本地留存的私钥将密文解密成明文进行读取。

注:公钥和私钥是一对用于非对称加密和解密的密钥。公钥可以公开分享,用于加密数据或验证签名私钥必须保密,用于解密数据或创建签名

3)对称加密与非对称加密比较

对称加密

1)使用同一个密钥进行加密和解密,密钥容易泄露。 2)加密速度快,效率高,数据传输速度快,安全性较低。

非对称加密:

1)使用不同的密钥(公钥和私钥)进行加密和解密。 2)加密速度远远慢于对称加密,数据传输速度慢,安全性较高。

5.2 SSH传输的原理

1)SSH客户端向SSH服务端发起一个登录请求。

2)SSH服务端将自己的公钥发送给SSH客户端。

3)SSH客户端使用服务端发过来的公钥将自己的密码加密并发送给SSH服务端。

4)SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密。

5)SSH服务端将解密出来的密码和/etc/shadow文件里的用户密码对比认证。

6)SSH服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令。

5.3软件的安装和部署

  • 查看ssh已安装包
  • 查看服务状态

sshd - daemon 后台

说明ssh服务在系统后台执行

  • 基础使用:
ssh [选项] [用户名@]服务器IP地址 [命令]

5.4 ssh配置文件修改

  • 配置文件查看 /etc/ssh/

ssh_config 是客户端配置文件

sshd_config 是服务器配置文件

4.1 不允许root账户远程登录
  • 修改配置文件/etc/ssh/sshd_config
  • 重启服务
systemctl restart sshd
4.2 修改默认端口
  • 服务器端 - 修改
  • 设置访问端口
vi  /etc/ssh/sshd_config
  • 重启服务
systemctl restart sshd
  • 测试 客户端访问

-p选项:指定访问端口

ssh -p 2222 root@192.168.100.20
4.3 配置文件详解
[root@localhost /]#vim /etc/ssh/sshd_config 
17 #Port 22
##这是sshd服务监听的端口,为了安全起见,建议更改默认端口为一个五位数以上的端口号
18 #AddressFamily any
19 #ListenAddress 0.0.0.0 ##可以改为自己的ip地址
20 #ListenAddress ::##用来设置sshd服务器绑定的IP地址

32 SyslogFacility AUTHPRIV
33 #LogLevel INFO
##当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。
##可以做日志分离优化
##LogLevel用来设定sshd日志消息的级别,与上面记录的等级息息相关

35 # Authentication:
##限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒

37 #LoginGraceTime 2m
##LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙

38 #PermitRootLogin yes
##PermitRootLogin用来设置能不能以root身份ssh登录,

40 #MaxAuthTries 6
##用来设置最大失败尝试登陆次数为6

41 #MaxSessions 10
##设置同一个连接最大会话

43 #PubkeyAuthentication yes
##基于key验证(生产中需要打开)

63 #PasswordAuthentication yes
64 #PermitEmptyPasswords no ##是否允许空密码登录,no表示不允许,需要密码!!
##密码验证建议还是需要的!可以通过认证的秘钥来登陆,来减少密码交互。
65 PasswordAuthentication yes
##基于用户名和密码连接,默认为yes

96 UsePAM yes
##设置是否通过PAM验证,需要的
98 #AllowAgentForwarding yes ##允许代理
99 #AllowTcpForwarding yes ##允许tcp那个代理
100 #GatewayPorts no
##设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止

115 #UseDNS no
##UseDNS是否使用dns反向解析,建议关闭,内网改为no可以提高速度

这是可以添加的选项:
#AllowUsers<用户名1> <用户名2> <用户名3> ...
##指定允许通过远程访问的用户,多个用户以空格隔开
比如:AllowUsers zhangsan@192.168.91.101 lisi
##默认拒绝所有
##允许所有的主机访问我的lisi用户
##只允许192.168.91.101上的所有用户访问本机的zhangsan用户

#AllowGroups<组名1> <组名2> <组名3> ...
##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。

#DenyUsers<用户名1> <用户名2> <用户名3> ...
##指定禁止通过远程访问的用户,多个用户以空格隔开
举例:DenyUsers liwu
#拒绝liwu被访问

#DenyGroups<组名1> <组名2> <组名3> ...
##指定禁止通过远程访问的组,多个组以空格隔开。

5.5 ssh免密登录

1)客户端生成公钥和私钥

ssh-keygen -t rsa  -b 4096

2)拷贝客户端公钥到服务器端

ssh-copy-id  服务器用户@服务器地址

3)客户端登录验证

客户端使用ssh连接服务器不需要密码登录

5.6 权限控制

1)黑名单
vi  /etc/ssh/sshd_config
#最后一行
DenyUsers woniu2
#其他用户不受影响
2)白名单
vi  /etc/ssh/sshd_config
#最后一行
AllowUsers woniu2
#其他用户不能访问
3)黑白名单
vi  /etc/ssh/sshd_config
#最后一行
AllowUsers woniu2
DenyUsers woniu2
#所有用户不能访问

注意:

黑名单优先级比白名单高

5.7 scp工具

1)从服务器拷贝文件到客户端
scp root@192.168.200.166:/etc/passwd   /opt
2)从客户端拷贝文件到服务器
scp   /opt/client.txt  root@192.168.200.166:/etc/passwd 
3)-r拷贝目录
[root@client ~]# scp -r root@192.168.200.166:/etc/ /opt/
4)-p拷贝属性
[root@client ~]# scp -p root@192.168.200.166:/etc/ /opt/
5)-P指定端口
[root@client ~]# scp -P 2222 root@192.168.200.166:/etc/ /opt/

6.FTP服务

1 服务概述

FTP - file transfer protocol 文件传输协议

作用:传输文件

架构:C/S架构

工作模式:都是站在服务器的角度

2种连接方式 :

控制连接 --- 下达命令

数据连接 -- 实际数据传输的

主动模式 -- 服务器主动发起连接

被动模式 -- 客户端主动发起连接

2 服务部署

服务器:

vsftpd服务 : very secury ftp

1)安装vsftpd

rpm -qa | grep  vsftpd
yum install -y vsftpd

2)启动vsftpd服务

systemctl  status vsftpd
systemctl start vsftpd

3)客户端安装ftp

yum -y intall ftp

4)客户端登录

ftp 192.168.100.10
ftp --ftp的匿名账户

5)ftp客户端登录

登录时显示的信息
1xx - 肯定的初步答复 .

这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 ##110 重新启动标记答复。

##120 服务已就绪,在 nnn 分钟后开始。

##125 数据连接已打开,正在开始传输。

##150 文件状态正常,准备打开数据连接。



2xx - 肯定的完成答复 .

一项操作已经成功完成。客户端可以执行新命令。 ##200 命令确定。

##202 未执行命令,站点上的命令过多。

##211 系统状态,或系统帮助答复。

##212 目录状态。

##213 文件状态。

##214 帮助消息。

##215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。

##220 服务就绪,可以执行新用户的请求。

##221 服务关闭控制连接。如果适当,请注销。

##225 数据连接打开,没有进行中的传输。

##226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。

##227 进入被动模式 (h1,h2,h3,h4,p1,p2)。

##230 用户已登录,继续进行。

##250 请求的文件操作正确,已完成。

##257 已创建“PATHNAME”。



3xx - 肯定的中间答复 .

该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。 ##331 用户名正确,需要密码。

##332 需要登录帐户。

##350 请求的文件操作正在等待进一步的信息。



4xx - 瞬态否定的完成答复

##425 无法打开数据连接。

##426 Connection closed; transfer aborted.

##450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。

##451 请求的操作异常终止:正在处理本地错误。

##452 未执行请求的操作。系统存储空间不够。



5xx - 永久性否定的完成答复

##500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。

##501 在参数中有语法错误。

##502 未执行命令。

##503 错误的命令序列。

##504 未执行该参数的命令。

##530 未登录。

##532 存储文件需要帐户。

##550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。

##551 请求的操作异常终止:未知的页面类型。

##552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。

##553 未执行请求的操作。不允许的文件名。



常见的 FTP 状态代码及其原因
##150 - FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。

##226 - 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。

##230 - 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。

##331 - 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。

##426 - 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。

##530 - 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。

##550 - 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。

3 ftp客户端登录和操作

  • 匿名账户 - ftp . anonymous
  • 正常账户登录
  • 切换目录:
  • 列出当前目录内容
get下载本地
put上传服务器

4 ftp控制连接和数据连接

5.主动模式

6.被动模式

7.FTP文件访问

1.禁止匿名用户访问(FTP,anonymous)

FTP有2个匿名账户,分别是FTP和anonymous

  • 没有密码的账户非常不安全,如何禁用?修改配置文件
cd /etc/vsftpd
cp vsftpd.conf vsftpd.conf.bak
vi vsftpd.conf
大概在第十二行默认允许匿名登录,设置成NO,不允许
  • 修改完成后,一定要重启ftp服务
systemctl restart vsftpd
  • 验证
2.指定数据目录
  • 账户登录后默认登录的是用户的家目录
  • 修改用户的数据存储目录
vi vsftpd.conf

在local_enable=YES下面添加local_root=/data,指定默认登录的家目录为/data

  • 修改完成后,一定要重启ftp服务
 systemctl restart vsftpd
3.禁锢数据目录
  • 禁止用户切换目录
vi vsftpd.conf
  • 修改完成后,一定要重启ftp服务
systemctl restart vsftpd
  • 用户无法切换目录:
4.灵活设置数据目录(目录白名单)
  • 设置白名单可以切换目录
vi vsftpd.conf
  • 修改完成后,一定要重启ftp服务
systemctl restart vsftpd
  • 该文件不存在,需自己创建,将白名单用户加入
vim /etc/vsftpd/chroot_list
  • 白名单用户可以切换目录
  • 其他用户无法切换

白名单只有名单里的才能切换目录,不在名单的都不能切换目录

8. FTP权限控制(能否登录)

1.对象访问控制(user_list ftpusers)
  • 黑名单和白名单文件所在位置:

1)黑名单

vi   /etc/vsftpd/ftpusers
  • woniu2用户加入黑名单后,无法登录ftp服务器
  • 其他的用户可以登录

2)可黑可白名单

  • /etc/vsftpd/user_list该文件默认是黑名单
  • 怎么将可黑可白名单变为白名单

修改配置文件

vi  /etc/vsftpd/vsftpd.conf

用户在ftpusers文件中,那么用户不能访问ftp服务器

用户在user_list文件中,如果该文件是白名单,那么只在该文件中的用户可以访问ftp服务,其他用户不能访问

如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先

2 网络访问控制
  • 黑白名单的位置
  • 配置黑名单
  • 实现效果,服务无法访问
  • 设置所有网段都不能访问,除了192.168.200.177地址
  • 192.168.200.177地址可以访问
  • 其他地址无法访问
3 限速设置

(1)速度的限制

修改配置文件,单位是字节

重启服务

systemctl  restart  vsftpd

(2)连接数的限制

修改配置文件

重启服务

systemctl  restart  vsftpd

测试

第二个用户继续登录

7. DNS服务

7.1 DNS概述

DNS - 英文单词是 ----domian name system ,提供域名服务。

正向解析:将域名解析成IP地址

反向解析:将IP地址解析成域名

什么是域名?

www.baidu.com

7.2 DNS分类

(1)根域 -- 13台ipv4根服务器,主要在美国。

(2)顶级域 --

域名类型: com --商业组织,公司 net - 网络服务商 org - 非营利性组织 gov - 政府部门 edu - 教育机构 mil - 美国军部 pub: public大众、公共、知名 国别符号: cn -中国 ,hk -香港, tw-台湾 ,jp-日本,kr- 韩国,...

(3)二级域

(4)三级域

(5)主机名:最终提供服务的主机。

#这是一个常见的4层域名结构 xxx.yyy.zzz.com. | | | | |——> 根域名(通常不需要输入,计算机默认帮我们输入) | | | |————> 顶级域名(TLD):.com | | |————————> 二级域名(Second-Level Domain):zzz(用户可注册购买) | |————————————> 子域名(Subdomain):yyy(用户自行分配) |————————————————> 主机名(或子域名):xxx以上内容对么

7.3 DNS原理(理解)
  • DNS域名解析过程 分类:
    • 递归解析:DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户
    • 迭代解析(反复):DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,依次反复,直到返回查询结果

递归查询 --- 自己跑腿找域名解析的结果

第一步:找本地解析文件 /etc/hosts文件

第二步:找我们配置的DNS服务器

第三步:查询本地DNS服务器

第四步:

迭代查询 - 自己跑腿

递归查询 -- 别人帮你跑腿。

第五步:nslookup命令

7.4 DNS配置(重点)

A记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录

CNAME记录: 如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名

MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录

NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录

TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录

AAAA记录: 将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录

SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:example-server.tcp)。

SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器

PTR记录: PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名

显性URL转发记录: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址为:www.itbilu.com

隐性UR转发记录L: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,隐性转发会隐藏真实的目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址仍然是:www.liuht.cn

(1)安装DNS服务包

BIND(Berkeley Internet Name Domain)是全球使用最广泛的 DNS(域名系统)服务器软件。

yum install -y bind bind-utils

(2)启动DNS服务

(3)配置主配置文件

cp   /etc/named.conf   /etc/named.conf.bak
vi /etc/named.conf

(4)配置区域文件

  • /etc/named.rfc1912.zones

(5)解析映射文件

  • 切换到我们的解析文件目录 /var/named
  • DNS服务正向解析 正向解析拷贝模版文件
cp -p named.localhost woniu.com.zone

正向解析文件(以下边这张图为准)

下边这张图只是解释参数,具体配置看上边那张图

  • DNS服务反向解析反向解析拷贝模版文件
cd /var/named
cp -p named.localhost 200.168.192.in-addr.arpa.zone
vim 200.168.192.in-addr.arpa.zone

反向解析文件

(6)启动服务

#  检查配置文件
named-checkconf
#检查区域文件
named-checkzone woniu.com woniu.com.zone
#重启服务
systemctl restart named

(7)重新配置DNS服务器

  • /etc/hosts文件
vim  /etc/hosts
vim /etc/reslov.conf
#验证正向解析
nslookup ns.woniu.com
nslookup www.woniu.com
#验证反向解析
nslookup 192.168.200.166
nslookup 192.168.200.177
7.5 dns服务主从复制
主DNS配置

(1)修改区域定义文件

vim /etc/named.rfc1912.zones

(2)修改映射关系文件

正向解析文件:

增加一台从DNS服务器解析

vim /var/named/woniu.com.zone

反向解析文件:

增加一台从DNS服务器解析

(3)重启服务

[root@ns1 named]# systemctl restart named
从DNS配置

(1)安装bind软件

yum  -y  install bind bind-utils

(2)启动named服务

systemctl start named

(3)修改主配置文件

vim /etc/named.conf

(4)修改区域定义文件

vim /etc/named.rfc1912.zones

添加2个区域,正向和方向:

正向配置:

反向配置:

(5)检查配置文件

[root@ns2 ~]# named-checkconf

(6)修改主机域名解析文件

vim /etc/hosts
vim /etc/resolv.conf

(7)重启named服务

systemctl restart named

(8)测试

12.优化

1 关闭防火墙

[root@client ~]# systemctl stop firewalld
[root@client ~]# systemctl disable firewalld

2 关闭SELinux

[root@client ~]# vim /etc/sysconfig/selinux

3 关闭NetworkManager

配置静态IP地址,启动network服务

[root@client ~]# systemctl stop NetworkManager
[root@client ~]# systemctl disable NetworkManager
[root@client ~]# systemctl restart network

4 配置好阿里的yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all # 清除缓存
yum makecache # 重新生成缓存

13.rsync备份服务

13.1 服务概述

rsync 是一款开源的、快速的、多功能的文件同步和备份工具,它支持全量和增量备份,可以在本地或远程进行数据同步。

特点:

  • 全量和增量同步:rsync 可以在第一次同步时完整传输所有文件,但在后续的同步中,只会传输那些自上次同步以来发生变化的文件,从而提高了同步的效率。
  • 保持文件属性:rsync 能够保持文件的权限、时间戳、软硬链接等属性信息,确保数据的一致性和完整性。在 CentOS 7 系统中,时间戳(Timestamp)是表示特定时间点的数字,通常指自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数(Unix 时间)。
  • 跨平台支持:rsync 可以在 Unix、Linux、Windows 等不同操作系统平台上运行。
  • 安全性:rsync 支持使用 SCP、SSH 等加密方式进行文件传输,同时也支持直接的 socket 连接。Socket(套接字)是网络编程中用于实现进程间通信(IPC)的机制,允许不同主机上的应用程序通过网络进行数据交换。在 CentOS 7 中,Socket 连接广泛应用于 Web 服务器、数据库、即时通讯等场景。
  • 监听端口:rsync 的默认监听端口是 873。
  • 运行模式:rsync 可以以守护进程模式运行(服务),也可以作为客户端(命令)模式使用。
13.2 服务命令
  • 基本语法rsync [选项] 源路径 目标路径
  • 常用选项常用选项解释-v,–verbose详细模式输出-q,–quiet精简输出模式-c,–checksum打开校验开关,强制对文件传输进行校验-a,–archive归档模式,表示以递归方式传输文件,并保持所有文件树形-z在传输文件时进行压缩-r,–recursive对子目录以递归模式处理,包含目录及子目录中的所有文件-H,–hard-links保留硬链接-l, —links保留软链接–delete删除目标位置有而原始位置没有的文件(一致性)–delete-after传输结束以后再删除-A保留ACL属性信息
13.3 服务场景

(1)本地备份

  • 第一次执行的是全量备份
rsync  -avz  /opt/test/   /mnt/test
  • 添加新文件到/opt/test目录,第二次就是增量备份
touch  /opt/test/file7
[root@localhost opt]# rsync -avz test/ /mnt/test
  • 源数据发生变化,删除了文件,客户端如何同步?

需要 --delete选项 ,该选项会对比源数据和目标数据,会删除目标数据和源数据不一致的文件

(2)远程同步

  • 从服务器拉取数据
  • 上传数据到服务器
  • 免密传输数据
[root@client ~]# ssh-keygen -t rsa -b 4096
[root@client ~]# ssh-copy-id 192.168.200.166

(3)排除选项

--exclude="文件名"

(4)带宽的限制

--bwlimit=1000  (kb为单位) 
[root@dbserver opt]# rsync -avz -e ssh --bwlimit=10000 /etc /mnt/etc.bak

(5) 设置访问密码

vi  /etc/rsyncd.conf

更新密码文件权限

chmod   600  /etc/安全文件

重启服务

systemctl restart rsyncd
13.4 案例

(1)基本用法:本地文件同步

/data/src 目录同步到 /backup/dst,要求保留所有文件属性。

rsync -av /data/src/ /backup/dst/
# -a:归档模式(保留权限、时间戳等)
# -v:详细输出
# 注意 src 后的斜杠:/data/src/ 表示同步内容,/data/src 表示同步目录本身

(2) 远程同步:SSH 模式

将本地 /home/user/project 推送到远程服务器 192.168.1.100/opt/project 目录。

rsync -avz -e ssh /home/user/project/ user@192.168.1.100:/opt/project/
# -z:传输时压缩文件,减少带宽占用
# -e ssh:指定通过 SSH 加密传输

(3)增量备份:同步删除操作

每日备份 /data/backup,并删除 /backup/data 已不存在的文件。

rsync -avz --delete /data/ /backup/
# --delete:同步删除目标目录中源目录不存在的文件

(4)文件过滤:排除特定类型文件

同步 /project/deploy,但排除 .git 目录和 .log 文件。

rsync -avz --exclude=".git" --exclude="*.log" /project/ /deploy/
# --exclude:排除指定模式的文件或目录

(5)断点续传:大文件传输

传输一个 10GB 的文件 /data/bigfile.img,允许中断后继续。

rsync -avz --partial --progress /data/bigfile.img user@remote:/path/
# --partial:保留不完整传输的文件
# --progress:显示传输进度

(6)守护进程模式:高效同步

题目:从远程服务器 rsync.example.comreleases 模块拉取文件到本地 /downloads

rsync -av rsync://rsync.example.com/releases/ /downloads/
# 或使用双冒号语法
rsync -av rsync.example.com::releases/ /downloads/

(7)限速传输:避免占用过多带宽

在生产环境同步数据,限制带宽为 500KB/s。

rsync -avz --bwlimit=500 /data/ user@remote:/backup/
# --bwlimit=500:限制带宽为 500 KB/s

14.时间服务

14.1 时间命令date

  • 查看时间[root@dbserver cloud]# date
    2025年 06月 13日 星期五 16:21:27 CST
  • 设置时间[root@dbserver cloud]# date -s '20200606 16:00'
    2020年 06月 06日 星期六 16:00:00 CST

14.2 传播原理

Stratum 表示 NTP 服务器的层级,从 0 到 15,数值越小精度越高。 Stratum 0:直接连接高精度时间源(如原子钟、GPS 接收机)的设备。 Stratum 1:与 Stratum 0 设备直接相连的 NTP 服务器。 Stratum 2:从 Stratum 1 服务器同步时间的 NTP 服务器,依此类推。

  • 手动时间同步

修改成不合理的时间

15、su和sudo命令

1 su命令

在 Linux 系统中,su 命令(Switch UserSubstitute User)用于切换当前用户身份。通过该命令,你可以临时获得其他用户(如超级用户 root)的权限,执行特定操作后再返回原用户。

  • 基本语法
su [选项] [用户名]
  • 用户名:默认为 root,省略时切换到 root 用户。
  • 选项:常用选项如下:
    • --l:登录式切换,环境变量完全切换为目标用户的环境。
    • -c "命令":仅以目标用户身份执行一次命令,执行后返回原用户。
  • 常见用法
  1. 切换到 root 用户
su -
# 或
su - root

输入 root 密码后,提示符会变为 #(如 root@host#),表示已获得超级用户权限。

  1. 切换到其他普通用户
su - username  # 例如:su - alice

需输入目标用户的密码,适用于多用户系统中访问其他用户的环境。

2 sudo命令

在 Linux 系统中,sudoSuperuser Do)是一个强大的权限管理工具,允许授权用户以其他用户(通常是 root)的权限执行命令,而无需切换用户身份。这极大提高了系统安全性,避免长期以 root 身份操作带来的风险。

  • 基本语法
sudo [选项] 命令
  • 选项:常用选项如下:
    • -u 用户名:以指定用户(而非 root)的权限执行命令。
    • -i:模拟登录式 shell,完全加载目标用户的环境变量。
    • -l:列出当前用户可执行的 sudo 命令。
    • -k:清除当前用户的 sudo 时间戳,下次使用时需重新验证密码。
  • 授权,修改/etc/sudoers文件,建议使用visudo命令修改
  • *常见用法**
  1. 以 root 权限执行单个命令
sudo ls /root  # 查看 root 目录
sudo apt update # 更新软件包索引(需管理员权限)
  1. 编辑系统配置文件
sudo nano /etc/hosts  # 编辑 hosts 文件
sudo vim /etc/sysctl.conf # 编辑系统内核参数
  1. 以其他用户身份执行命令
sudo -u www-data ls /var/www  # 以 www-data 用户(Web 服务器用户)身份执行命令
  1. 获取 root shell
sudo -i  # 等同于 su -,但无需知道 root 密码
  • sudo 与 su 的核心区别
特性sudosu
权限来源基于用户在 /etc/sudoers 中的授权需要知道目标用户的密码
执行方式以目标用户权限执行单个命令完全切换到目标用户身份
日志记录所有操作记录到 /var/log/sudo无详细日志
安全性高(细粒度授权,无需暴露 root 密码)低(需共享 root 密码)
  • sudoers 文件配置

sudo 的权限控制由 /etc/sudoers 文件管理,需使用 visudo 命令编辑(避免文件损坏):

sudo visudo  # 使用默认编辑器打开 sudoers 文件

常见配置示例

  1. 允许用户无密码执行特定命令:user ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/reboot(用户 user 可无密码执行关机和重启命令)
  2. 将用户添加到 sudo 组:%sudo ALL=(ALL:ALL) ALL(所有属于 sudo 组的用户可执行任何命令)
  3. 限制命令参数:user ALL=(root) /usr/bin/git, !/usr/bin/git push(用户 user 可执行 git,但禁止 git push

在 Linux 系统中,sudo visudo 是用于安全编辑 /etc/sudoers 配置文件的命令。这个文件控制着哪些用户可以使用sudo执行特权命令,以及具体的权限范围。由于sudoers文件格式严格且直接影响系统安全,必须通过visudo工具编辑,而非普通文本编辑器。

一、为什么必须用visudo而非直接编辑?

  1. 语法检查visudo会在保存前自动验证sudoers文件的语法,避免因格式错误导致系统无法使用sudo
  2. 原子操作:编辑过程中会生成临时文件,只有语法正确时才会替换原文件,防止编辑中途崩溃导致文件损坏。
  3. 安全锁定:多人同时编辑时会加锁,避免配置冲突。

二、visudo的基本用法

sudo visudo  # 以root权限打开sudoers文件(需当前用户有sudo权限)
  • 默认编辑器:通常使用vi,若想修改为其他编辑器(如nano),可设置环境变量:export VISUAL=nano # 临时生效
    # 或永久修改~/.bashrc:
    echo "export VISUAL=nano" >> ~/.bashrc && source ~/.bashrc

三、sudoers文件的核心结构

  1. 全局配置(Defaults)

定义全局默认参数,例如:

Defaults    mailto=admin@example.com  # 错误邮件通知
Defaults logfile="/var/log/sudo.log" # 自定义日志文件
Defaults env_keep += "LANG LC_ALL" # 保留环境变量
  1. 用户授权规则

格式:用户 主机=(运行身份) 命令列表

%wheel  ALL=(ALL)       ALL
在 Linux 系统中,wheel 是一个特殊的用户组,其核心作用是允许组内用户通过 sudo 命令获取超级用户(root)权限。
  • 示例 1:普通用户加入 sudo 组%sudo ALL=(ALL:ALL) ALL # 所有sudo组成员可执行任何命令
  • 示例 2:指定用户无密码执行特定命令developer ALL=(root) NOPASSWD: /usr/bin/make, /usr/bin/make install
  • 示例 3:限制用户只能以特定用户身份执行命令deployer ALL=(www-data) /usr/bin/git pull, /usr/bin/npm install

持续更新中~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇