CA复习功课
RHCSA 复习笔记(完善版)
一、 文件管理
- 创建文件/目录:
touch [文件名]
:创建空文件或更新现有文件时间戳。mkdir [目录名]
:创建目录。常用选项:-p
递归创建多级目录。
- 查看文件/目录:
ls [选项] [文件/目录]
:列出目录内容。常用选项:-l
详细列表,-a
显示隐藏文件,-h
人性化大小显示。cat [文件名]
:查看文件内容(小文件),无法翻页。less [文件名]
:分页查看文件内容,支持搜索(/
),适合大文件。head [选项] [文件名]
:查看文件开头部分,默认10行。选项-n [数字]
指定行数。tail [选项] [文件名]
:查看文件末尾部分,默认10行。选项-n [数字]
指定行数,-f
动态跟踪文件新增内容。watch [命令]
:周期性执行指定命令,并显示结果。常用选项-n [秒数]
指定间隔时间。
- 文本处理:
sort [文件名]
:对文件内容进行排序。常用选项-n
数字排序,-r
逆序,-u
去重。wc [选项] [文件名]
:统计文件行数、单词数、字节数。选项-l
仅统计行数,-w
仅统计单词数,-c
仅统计字节数。uniq [选项] [文件名]
:过滤连续的重复行。通常与sort
结合使用。选项-c
显示每行出现次数,-d
仅显示重复行。tr [字符集1] [字符集2]
:替换或删除字符。例如echo "hello" | tr 'a-z' 'A-Z'
将小写转为大写。sed [选项] '命令' [文件名]
:流编辑器,用于过滤和转换文本。常用命令s/旧内容/新内容/
(替换),d
(删除行),p
(打印行)。选项-n
静默模式,-e
执行多个命令。awk '{print $1}' [文件名]
:强大的文本分析工具,按字段处理文本。$1
表示第一列,{print}
表示打印。- 示例:
ls /mnt/*.conf | awk '{system("cp " $1 " "$1".bak")}'
将/mnt
下所有.conf
文件备份为.conf.bak
。
- 示例:
grep [选项] '模式' [文件名]
:在文件中搜索匹配指定模式的行。常用选项-i
忽略大小写,-r
递归搜索目录,-v
反向选择(不匹配的行)。
- 管理输入输出:
- 文件描述符(FD): 每个进程打开的文件或设备都有对应的文件描述符,如
0
(标准输入 stdin),1
(标准输出 stdout),2
(标准错误 stderr)。- 示例:
cd /proc/[PID]/fd
查看某个进程的文件描述符。0 -> /dev/pts/0
表示标准输入连接到终端/dev/pts/0
。
- 示例:
- 重定向:
>
:将命令的标准输出重定向到文件(覆盖原有内容)。>>
:将命令的标准输出重定向到文件(追加到文件末尾)。2>
:将命令的标准错误重定向到文件(覆盖)。2>>
:将命令的标准错误重定向到文件(追加)。&>
或>&
:将标准输出和标准错误都重定向到同一文件(覆盖)。&>>
或>>&
:将标准输出和标准错误都重定向到同一文件(追加)。
- 管道(|): 将一个命令的标准输出作为下一个命令的标准输入。
tee [选项] [文件名]
:从标准输入读取数据,并同时输出到标准输出和指定文件。选项-a
追加到文件而非覆盖。例如:command | tee output.log
。&1
:在x >&1
形式中,表示将标准错误(x
)重定向到标准输出(1
)。
- 文件描述符(FD): 每个进程打开的文件或设备都有对应的文件描述符,如
二、 用户和权限
- 用户信息相关文件:
/etc/passwd
:存储用户账户基本信息(用户名、UID、GID、家目录、默认shell)。/etc/shadow
:存储加密后的用户密码及其他认证信息。/etc/group
:存储组信息(组名、GID、组成员)。/etc/skel/
:用户骨架目录,新用户创建时,此目录下的文件会自动复制到用户家目录。/var/spool/mail/[username]
:用户邮件存放目录。/home/[username]
:用户家目录。
- 用户管理操作:
useradd [选项] [用户名]
:创建新用户。常用选项-m
创建家目录,-G [组名]
指定附加组,-s [shell]
指定默认shell。usermod [选项] [用户名]
:修改用户属性。常用选项-L
锁定用户,-U
解锁用户,-G [组名]
修改附加组,-d [家目录]
修改家目录。userdel [选项] [用户名]
:删除用户。选项-r
同时删除家目录。groupadd [组名]
:创建新组。groupmod [选项] [组名]
:修改组属性。常用选项-n [新组名]
重命名组。groupdel [组名]
:删除组(必须没有用户属于该组)。id [用户名]
:查看用户UID、GID及所属组信息。whoami
:显示当前有效用户名。su - [用户名]
:切换用户身份(-
表示加载目标用户的环境变量)。
- 权限管理:
- 权限类型: r(读权限,数值4)、w(写权限,数值2)、x(执行权限,数值1)。
chmod [选项] [模式] [文件/目录]
:修改文件/目录权限。模式可以是符号法(u/g/o/a +/- /= rwx
)或数字法(如755
)。chown [选项] [用户][:组] [文件/目录]
:修改文件/目录的所有者及所属组。选项-R
递归修改目录下所有文件。chgrp [组名] [文件/目录]
:修改文件/目录的所属组。- 特殊权限:
- SUID (Set User ID): 执行者临时获得文件所有者的权限。显示为
s
(有执行权限时)或S
(无执行权限时)在用户执行位。常见于/usr/bin/passwd
。 - SUID (Set User ID): 对应数字 4
- SGID (Set Group ID): 执行者临时获得文件所属组的权限,或目录下新创建的文件自动继承目录的所属组。显示为
s
或S
在组执行位。 - SGID (Set Group ID): 对应数字 2
- Sticky Bit: 设置在目录上,防止用户删除其他用户创建的文件。显示为
t
或T
在其他用户执行位。常见于/tmp
目录。 - Sticky Bit: 对应数字 1
- SUID (Set User ID): 执行者临时获得文件所有者的权限。显示为
- ACL (Access Control List) 权限:
- 提供比传统rwx更灵活的权限控制,可以为特定用户或组设置额外权限。
setfacl [选项] [规则] [文件/目录]
:设置ACL。规则格式如-m u:用户名:rw-
(为用户添加读写权限)。getfacl [文件/目录]
:查看ACL设置。setfacl -b [文件/目录]
:删除所有ACL设置。
用户类别:
u
表示文件所有者(user)。g
表示文件所属组(group)。o
表示其他用户(others)。a
表示所有类别(all)。权限操作:
+
表示添加权限。-
表示移除权限。=
表示设置确切的权限,替换原有的权限设置。权限类型:
r
表示读权限(read)。w
表示写权限(write)。x
表示执行权限(execute)。例如,以下是一些使用符号表示法的 chmod 命令示例:
chmod u+x file
:给文件所有者添加执行权限。chmod g-w file
:从文件所属组移除写权限。chmod o=r file
:设置其他用户的权限为只读。chmod u=rwx,g=rx,o=r file
:设置文件所有者拥有读写执行权限,文件所属组拥有读执行权限,其他用户只有读权限。chmod a-x file
:从所有类别中移除执行权限。特殊权限(SUID、SGID、Sticky Bit)也可以使用符号表示法设置:
chmod u+s file
:设置 SUID 权限。chmod g+s file
:设置 SGID 权限。chmod o+t directory
:设置目录的 Sticky Bit 权限。
三、 进程管理
- 基本概念:
- 程序 (Program): 存储在磁盘上的可执行文件。
- 进程 (Process): 程序在内存中的一次执行实例。每个进程有唯一PID(Process ID)。
- 线程 (Thread): 进程内的执行单元,共享进程资源。
- 进程状态: 运行、睡眠(可中断、不可中断)、停止、僵尸。
- 进程查看:
ps [选项]
:查看当前终端的进程状态。常用选项aux
查看所有进程详细信息,ef
查看所有进程及父进程关系。pstree [选项]
:以树状结构显示进程间的关系。选项-p
显示PID。pidof [进程名]
:查找指定进程的PID。top
:动态实时显示系统进程状态,包括CPU、内存占用等。按q
退出。pgrep [选项] [进程名]
:根据进程名或其他属性查找进程PID,返回列表。
- 进程管理:
kill [信号] [PID]
:向进程发送信号,终止或控制进程。常用信号9
(SIGKILL,强制终止),15
(SIGTERM,请求终止,允许清理)。killall [信号] [进程名]
:根据进程名发送信号,终止所有匹配的进程。pkill [信号] [条件]
:根据更复杂的条件(如用户、终端)发送信号终止进程。
- 进程前后台调用:
- 在命令后加
&
将命令放入后台执行。 jobs
:查看当前shell中的后台任务。fg %任务号
:将后台任务调回前台。bg %任务号
:将暂停的后台任务继续在后台运行。
- 在命令后加
- 信号 (Signals): 进程间通信的一种方式,用于发送控制指令。常用信号:
0
(无操作),1
(SIGHUP,重新加载配置),2
(SIGINT,中断,如Ctrl+C),3
(SIGQUIT,退出并转储核心),9
(SIGKILL,强制终止),15
(SIGTERM,请求终止),18
(SIGCONT,继续执行),19
(SIGSTOP,暂停)。 - 系统服务管理:
systemctl [命令] [服务名]
:管理systemd服务。常用命令:start
,stop
,restart
,reload
,enable
(开机启动),disable
(取消开机启动),status
(查看状态)。systemctl
:不带参数查看所有服务状态。
四、 网络管理
- 网络配置(RHEL7/8/9):
- nmcli 命令行工具:
nmcli networking on/off
:开启/关闭网络功能。nmcli connection up/down [连接名]
:激活/停用网络连接。nmcli connection show
:查看所有连接配置。nmcli connection edit [连接名]
:编辑连接配置。nmcli connection reload
:重新加载网络配置。
- 配置文件(RHEL9):
- 文件位置:
/etc/NetworkManager/system-connections/连接名称.nmconnection
- 文件权限:通常为
600
(root:root)。 - 文件格式(示例,静态IP):
- 文件位置:
- nmcli 命令行工具:
[connection]
id=连接名称
type=ethernet //网络类型
interface-name=网卡名称[ipv4]
method=manual //手动指定
address1=IP地址/netmask,网关
dns=DNS服务器地址[ipv6]
method=ignore
###版本9###
- 配置文件(RHEL7):
- 文件位置:
/etc/sysconfig/network-scripts/ifcfg-接口名
- 文件权限:通常为
600
(root:root)。 - 文件格式(示例,静态IP):
- 文件位置:
DEVICE=ens33
NAME=连接名称
BOOTPROTO=none
IPADDR0=IP地址
PREFIX0=前缀长度
GATEWAY0=网关
DNS1=主DNS
DNS2=备用DNS (可选)
ONBOOT=yes #系统开启时自动激活此块网卡
###版本7###
- 网络命令:
ip [选项] [命令] [地址/链接/路由]
:强大的网络配置工具。常用命令:ip addr show
(ip a
):查看IP地址信息。ip link show
(ip l
):查看网络接口状态。ip route show
(ip r
):查看路由表。
ipconfig
:Windows下的网络配置工具,Linux下不适用。nmcli device show [设备名]
:查看网络设备详细信息。route -n
:查看路由表(旧命令)。netstat -antulpe
:查看网络连接、监听端口、路由表、接口统计、伪装连接等信息(旧命令,推荐用ss
)。ss [选项]
:比netstat
更快的查看套接字状态工具。常用选项-t
(TCP),-u
(UDP),-n
(不解析服务名),-a
(所有),-l
(监听),-p
(程序),-e
(详细信息)。hostnamectl [命令]
:管理主机名。常用命令set-hostname [主机名]
,status
查看当前主机名。ping [选项] [主机名/IP]
:测试网络连通性。选项-c [次数]
指定发送包数,-w [秒数]
指定超时时间。dig [选项] [主机名]
:强大的DNS查询工具。nslookup [主机名]
:查询DNS信息。ifconfig
:旧的网络接口配置工具,在较新系统中被ip
和nmcli
取代。
- 网卡名称调整:
- 修改引导参数:
grubby --update-kernel ALL --args net.ifnames=0
- 禁用selinux:grubby --update-kernel ALL --args selinux=0 #关闭selinux,不是必须
(在rhel7中进入/etc/sysconfig/selinux 改为selinux=disabled)
- 修改引导参数:
网络配置:
- RHEL 7 / RHEL 8: 主要使用
nmcli
和nmtui
工具进行配置。配置文件通常位于/etc/NetworkManager/system-connections/
,文件权限为 600。 - RHEL 9: 继续使用
nmcli
和nmtui
,配置文件位置和格式与 RHEL 7/8 类似,但可能有一些细微调整。注意,RHEL 9 默认使用systemd-networkd
作为网络管理后端之一,但NetworkManager
仍然广泛使用。 - RHEL 6 / RHEL 7 (传统方式): 使用
/etc/sysconfig/network-scripts/ifcfg-<接口名>
文件进行配置。ifup
,ifdown
命令用于激活/禁用接口。nmcli connection up
和nmcli connection down
是更现代的方式。
- RHEL 7 / RHEL 8: 主要使用
软件包管理:
- RHEL 7: 主要使用
yum
。 - RHEL 8 / RHEL 9: 主要使用
dnf
(yum
的更快速、更现代的替代品)。dnf
的命令行选项与yum
大部分兼容,但有些新特性或更简洁的语法。
- RHEL 7: 主要使用
防火墙管理:
- RHEL 6: 主要使用
iptables
。 - RHEL 7 / RHEL 8 / RHEL 9: 默认使用
firewalld
,一个动态管理的防火墙。常用命令包括firewall-cmd
。iptables
仍然可用,但通常需要额外安装(如iptables-services
)并可能需要重启相关服务。
- RHEL 6: 主要使用
SELinux:
- 状态管理:
setenforce 0
(临时禁用强制模式),setenforce 1
(启用强制模式)。getenforce
查看当前状态。 - 策略模式:
sestatus
查看当前策略模式(Enforcing/Permissive)和 SELinux 版本。修改/etc/selinux/config
文件中的SELINUX=enforcing
或SELINUX=permissive
可以永久改变模式,但需要重启生效。 - 上下文标签:
ls -Z
查看文件/目录的 SELinux 上下文。chcon
临时修改上下文。restorecon
恢复默认上下文。 - 布尔值:
getsebool -a
查看所有布尔值。setsebool <布尔值名> 1
或setsebool <布尔值名> 0
临时设置布尔值。setsebool -P <布尔值名> 1
永久设置布尔值。
- 状态管理:
五. 补充遗漏的重要命令/概念
系统服务管理:
- systemd (RHEL 7/8/9): 现代系统服务管理器。
systemctl status <服务名>
:查看服务状态。systemctl start <服务名>
:启动服务。systemctl stop <服务名>
:停止服务。systemctl restart <服务名>
:重启服务。systemctl enable <服务名>
:设置服务开机自启。systemctl disable <服务名>
:取消服务开机自启。systemctl is-active <服务名>
:检查服务是否活动。systemctl is-enabled <服务名>
:检查服务是否启用。systemctl list-unit-files --type=service
:列出所有服务单元文件及其状态(enabled/disabled)。systemctl list-dependencies <服务名>
:查看服务的依赖关系。
- SysVinit (RHEL 6 及更早): 旧的服务管理方式。
service <服务名> status
:查看服务状态。service <服务名> start/stop/restart
:管理服务。chkconfig --list <服务名>
:查看服务开机自启状态。chkconfig <服务名> on/off
:设置服务开机自启。
- systemd (RHEL 7/8/9): 现代系统服务管理器。
文件系统管理:
- 挂载/卸载:
mount <设备> <挂载点>
:挂载文件系统。常用选项-t <文件系统类型>
(如 ext4, xfs),-o <选项>
(如ro
只读,rw
读写,acl
启用ACL,user
允许普通用户挂载)。umount <挂载点> | <设备>
:卸载文件系统。findmnt
:查看当前挂载的文件系统。/etc/fstab
:系统启动时自动挂载文件系统的配置文件。格式:<设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>
。
- 磁盘空间检查:
df -h
:以人类可读格式显示磁盘分区使用情况。du -sh <目录/文件>
:以人类可读格式显示目录或文件的总大小。
- 文件系统检查与修复:
fsck <设备>
:检查并尝试修复文件系统错误。通常在单用户模式下使用,特别是对于 XFS 文件系统,可能需要特定工具如xfs_repair
。
- 挂载/卸载:
日志管理:
- journalctl (systemd 日志):
journalctl -xe
:查看系统日志并显示未显示的日志。journalctl -u <服务名>
:查看特定服务的日志。journalctl --since "2023-01-01 12:00:00"
:查看指定时间后的日志。journalctl --until "2023-01-01 13:00:00"
:查看指定时间前的日志。
- 传统日志文件: 通常位于
/var/log/
目录下,如messages
,secure
,cron
,maillog
,dmesg
等。可以用tail -f <日志文件>
实时查看日志。
- journalctl (systemd 日志):
Shell 编程基础:
- 变量:
VAR_NAME="value"
定义变量,echo $VAR_NAME
使用变量。 - 条件判断:
[ condition ]
或[[ condition ]]
。常用条件:文件测试 (-f
,-d
,-e
), 整数比较 (-eq
,-gt
,-lt
), 字符串比较 (=
,!=
), 逻辑运算 (-a
,-o
,!
)。 - 流程控制:
if ... then ... elif ... then ... else ... fi
for var in list; do ... done
while condition; do ... done
- 函数:
function_name() { ... }
或function function_name { ... }
- 变量:
Shell 基础与技巧:
- 通配符:
*
(任意数量字符),?
(单个字符),[]
(字符范围),[]
(字符范围, 取反)。 - 重定向:
>
(覆盖写入),>>
(追加写入),<
(输入重定向)。 - 管道:
|
将前一个命令的输出作为下一个命令的输入。 - 命令替换:
`command`
或$(command)
将命令的输出赋值给变量或嵌入到其他命令中。 - 历史命令:
history
查看历史命令,!n
执行第 n 条历史命令,!!
执行上一条命令,!string
执行以 string 开头的最近一条命令。 - Tab 补全: 按下 Tab 键自动补全命令、文件名、目录名。
- 通配符:
六. 增加示例与解释
ACL (Access Control List) 权限:
- 查看:
getfacl <文件/目录>
。getfacl -R <目录>
递归查看。 - 设置:
setfacl [选项] <文件/目录>
。setfacl -m u:<用户名>:<权限> <文件>
:为指定用户添加 ACL 权限 (如setfacl -m u:john:rwx file.txt
)。setfacl -m g:<组名>:<权限> <文件>
:为指定组添加 ACL 权限。setfacl -m d:<默认权限> <目录>
:为目录设置默认 ACL 权限,新创建的文件/子目录会继承。setfacl -x <主体>:<权限> <文件>
:删除指定的 ACL 条目。setfacl -b <文件>
:删除所有 ACL 条目。setfacl -R <选项> <目录>
:递归设置 ACL。
- 启用: 确保文件系统挂载时包含
acl
选项(通常默认启用)。可以通过mount | grep <挂载点>
查看选项。
- 查看:
LVM (Logical Volume Manager) 逻辑卷管理:
- 基本概念: 物理卷(PV) -> 卷组(VG) -> 逻辑卷(LV)。允许动态调整分区大小。
- 常用命令:
pvcreate <物理设备>
:将磁盘分区创建为物理卷。vgcreate <卷组名> <物理卷>
:创建卷组。lvcreate -L <大小> -n <逻辑卷名> <卷组名>
:创建逻辑卷(如lvcreate -L 10G -n mydata vg01
)。mkfs -t <文件系统类型> <逻辑卷设备路径>
:格式化逻辑卷(如mkfs.xfs /dev/vg01/mydata
)。lvresize -L <新大小> /dev/<卷组名>/<逻辑卷名>
:调整逻辑卷大小。vgextend <卷组名> <新物理卷>
:向卷组中添加物理卷以扩展空间。lvreduce -L <减少大小> /dev/<卷组名>/<逻辑卷名>
:缩小逻辑卷(需先卸载并确保数据安全)。vgreduce <卷组名> <要移除的物理卷>
:从卷组中移除物理卷。pvremove <物理设备>
:移除物理卷。lvremove /dev/<卷组名>/<逻辑卷名>
:移除逻辑卷。vgremove <卷组名>
:移除卷组。
- 查看状态:
pvdisplay
,vgdisplay
,lvdisplay
,lvs
,vgs
,pvs
。
RAID (Redundant Array of Independent Disks) 磁盘阵列:
- 基本概念: 将多个磁盘组合起来,提高性能或数据冗余。
- 常用工具:
mdadm
。 - 常用命令:
mdadm --create --verbose /dev/md0 --level=<级别> --raid-devices=<磁盘数> /dev/sd<磁盘列表>
:创建 RAID 阵列(如mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
创建 RAID1)。mdadm --detail /dev/md0
:查看 RAID 阵列详细信息。mdadm --stop /dev/md0
:停止 RAID 阵列。mdadm --assemble /dev/md0 /dev/sd<磁盘列表>
:重新组装 RAID 阵列。mdadm --manage /dev/md0 --add /dev/sdd
:向 RAID 阵列中添加磁盘(通常用于替换故障盘)。mdadm --monitor --daemonize --pid=/var/run/mdadm.pid
:启动 RAID 监控守护进程。
七. 补充脚本示例解释
RHEL 9 网络脚本:
ifconfig $1 &> /dev/null || { ... }
:检查指定的网络接口$1
是否存在。如果不存在,输出错误信息并退出脚本。ping -c1 -w1 $2 &> /dev/null && { ... }
:尝试向 IP 地址$2
发送一次 (-c1
) ping 包,超时时间为 1 秒 (-w1
)。如果成功收到响应 (&&
表示逻辑与,前一个命令成功才执行后面),输出信息并退出。grep $1 -r /etc/NetworkManager/system-connections/ | awk -F : '{system("rm -fr "$1)}'
:查找/etc/NetworkManager/system-connections/
目录下是否已存在名为$1
的连接配置文件。如果存在,则使用awk
提取文件名并删除该文件(rm -fr
)。cat > ... <<EOF ... EOF
:使用 Here Document 将配置内容写入到新的网络连接配置文件中。文件内容包含连接标识、类型、接口名、IP 配置、DNS 等。chmod 600 ...
:设置新创建的连接配置文件权限为 600,只有所有者可读写。nmcli connection reload
:通知 NetworkManager 重新加载连接配置。nmcli connection up $1
:激活新创建的连接。hostnamectl hostname $3
:设置系统主机名为$3
。grep -e "$2\t$3" /etc/hosts || { ... }
:检查/etc/hosts
文件中是否已存在 IP 地址$2
对应主机名$3
的记录。如果不存在,则将其追加到文件末尾。
RHEL 7 网络脚本: 逻辑与 RHEL 9 类似,但配置文件格式和存放位置不同,使用
ifcfg-$1
作为文件名,内容格式为键值对。
八. 检查遗漏的重要概念
- 进程状态: 运行®, 中断(S), 不可中断(D), 僵死(Z), 停止(T)。
- 进程优先级:
nice
值(0-19,值越大优先级越低),renice
命令调整优先级。 - 系统资源监控:
top
,htop
(需要安装),vmstat
,mpstat
,iostat
(需要安装sysstat
包)。 - 用户和组管理:
id
,whoami
,w
,users
,groups
,lastlog
,chage
(管理密码过期策略)。 - SELinux 上下文类型: 文件、进程、用户等都有对应的 SELinux 类型(如
httpd_sys_content_t
,user_home_dir_t
)。 - 防火墙区域:
firewalld
使用区域概念管理不同网络接口的防火墙规则(如public
,internal
,home
,trusted
)。 - 网络配置文件:
/etc/hosts
(主机名解析),/etc/resolv.conf
(DNS 配置),/etc/hostname
(主机名),/etc/sysconfig/network
(RHEL 7 旧网络配置,可能存在)。 - 备份与恢复:
rsync
(同步文件/目录),tar
(打包压缩),dd
(低级复制,可用于备份磁盘镜像)。
九.磁盘管理
1. 文件查找工具 find
(在磁盘内容管理中的应用)
find
虽然是文件查找工具,但在磁盘管理中,它常用于定位特定文件或目录,这对于备份、迁移或清理磁盘空间非常有用。
- 常用选项详解与示例:
-name "pattern"
: 按文件名查找,支持通配符(*
,?
)。- 示例:
find /var/log -name "*.log"
查找/var/log
目录下所有.log
结尾的文件。
- 示例:
-type [f|d|l|c|b|p|s]
: 按文件类型查找。f
: 普通文件d
: 目录l
: 符号链接c
: 字符设备文件b
: 块设备文件 (常用于查找磁盘分区)- 示例:
find /dev -type b
查找所有块设备文件。
-size [+-]N[kMG]
: 按文件大小查找。N
: 数字k
: KBM
: MBG
: GB+
: 大于-
: 小于- 示例:
find /home -size +100M -type f
查找/home
下大于 100MB 的普通文件。
-user username
: 按文件所有者查找。- 示例:
find / -user nobody
查找所有属于nobody
用户的文件。
- 示例:
-group groupname
: 按文件所属组查找。- 示例:
find /tmp -group users
查找/tmp
下属于users
组的文件。
- 示例:
-perm mode
: 按文件权限查找。可以是精确模式(如0755
)或包含模式(如=644
表示精确权限,-444
表示至少有 r–r–r–)。- 示例:
find /etc -perm 644
查找/etc
下权限为rw-r--r--
的文件。
- 示例:
-a
: 逻辑与,默认操作符,表示条件需同时满足。- 示例:
find /home -size +50M -a -user root
查找/home
下大于 50MB 且属于 root 的文件。
- 示例:
-o
: 逻辑或,表示条件满足其一即可。- 示例:
find /var/log -name "*.log" -o -name "*.txt"
查找/var/log
下.log
或.txt
结尾的文件。
- 示例:
-not
或!
: 逻辑非,表示不满足条件。- 示例:
find / -not -user root
查找所有不属于 root 用户的文件。
- 示例:
-exec command {} \;
: 对找到的每个文件执行指定的命令。{}
代表找到的文件,\;
表示命令结束。- 示例:
find /tmp -name "*.tmp" -exec rm -f {} \;
查找/tmp
下所有.tmp
文件并删除。 - 更安全的替代方案是
xargs
:find /tmp -name "*.tmp" | xargs rm -f
。
- 示例:
2. 磁盘分区工具 fdisk
fdisk
是传统的磁盘分区工具,适用于 MBR(Master Boot Record)分区表。
- 基本操作:
fdisk /dev/sdX
(X 是磁盘号,如 a, b) 启动分区工具。m
: 显示帮助菜单。p
: 打印当前分区表。n
: 创建新分区 (选择主分区p
或扩展分区e
,然后选择分区号、起始扇区、结束扇区)。d
: 删除分区。t
: 更改分区类型 (如改为 Linux swap)。w
: 保存更改并退出。q
: 不保存退出。
- 注意:
fdisk
不支持 GPT 分区表,对于大于 2TB 的磁盘或需要更灵活分区的场景,建议使用parted
。
3. 块设备列表 lsblk
lsblk
提供了一个更现代、更易读的方式来列出块设备(磁盘、分区、RAID、LVM 等)及其关系。
- 常用选项与输出解读:
lsblk
: 显示所有块设备及其树状关系。-f
: 显示文件系统类型、挂载点、UUID 等信息。-o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,LABEL,UUID
: 自定义显示列。- 输出列说明:
NAME
: 设备名 (如 sda, sda1)。MAJ:MIN
: 主设备号和次设备号。RM
: 是否可移除 (0: 否, 1: 是)。SIZE
: 设备大小。RO
: 是否只读 (0: 否, 1: 是)。TYPE
: 设备类型 (disk: 磁盘, part: 分区, lvm: LVM 逻辑卷, raid: RAID 设备等)。MOUNTPOINT
: 挂载点 (如果已挂载)。FSTYPE
: 文件系统类型 (如 ext4, xfs, swap)。LABEL
: 卷标。UUID
: 统一唯一标识符。
- 用途: 快速查看磁盘布局、分区情况、哪些分区已挂载、文件系统类型等。
4. 获取块设备 UUID/TYPE blkid
blkid
用于快速查询块设备(通常是分区)的文件系统类型和 UUID。
- 用法:
blkid /dev/sdXN
: 查询指定分区/dev/sdXN
的 UUID 和文件系统类型。blkid
: 查询所有块设备的 UUID 和文件系统类型。
- 用途: 在
/etc/fstab
中挂载分区时,使用 UUID 比使用设备名更可靠,可以避免因设备名变化导致挂载失败。
5. 查看磁盘空间使用 df
df
(Disk Free) 报告文件系统的总空间、已用空间、可用空间和使用百分比。
- 常用选项:
-h
: 以人类易读的格式显示大小 (如 KB, MB, GB)。-T
: 显示文件系统类型。-i
: 显示 inode 使用情况 (对于包含大量小文件的情况很有用)。
- 输出列说明:
Filesystem
: 文件系统所在设备或挂载点。Size
: 总大小。Used
: 已用空间。Available
: 可用空间。Use%
: 使用百分比。Mounted on
: 挂载点。
- 用途: 监控各文件系统的磁盘空间使用情况,及时发现空间不足问题。
6. 磁盘分区与格式化工具 parted
parted
是一个功能更强大的分区工具,支持 MBR 和 GPT 分区表,并且可以处理更大的磁盘。
- 基本操作:
parted /dev/sdX
: 启动 parted 工具。print
: 显示当前分区表。mklabel gpt/mbr
: 创建 GPT 或 MBR 分区表。mkpart part-type start end
: 创建分区 (part-type: primary, logical, extended; start/end: 起始/结束位置,如 1GB, 100%).rm N
: 删除编号为 N 的分区。resizepart N end
: 调整分区 N 的大小 (end: 新的结束位置)。set N flag on/off
: 设置/取消分区标志 (如 boot, hidden, lba)。quit
: 退出。
- 注意:
parted
操作是直接在磁盘上进行的,务必小心,操作前最好备份重要数据或创建分区表备份 (parted ... backup ...
)。
7. 软件RAID管理 mdadm
mdadm
是 Linux 下管理软件 RAID 的标准工具。
- 基本操作:
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d}1
: 创建一个 RAID 5 阵列,使用 /dev/sdb1, /dev/sdc1, /dev/sdd1 三个分区。mdadm --detail /dev/md0
: 查看 RAID 阵列详细信息。mdadm --stop /dev/md0
: 停止 RAID 阵列。mdadm --assemble /dev/md0 /dev/sd{b,c,d}1
: 重新组装 RAID 阵列。mdadm --manage /dev/md0 --add /dev/sde1
: 向 RAID 阵列中添加一个热备盘或替换故障盘。mdadm --monitor --daemonize --delay=60 --pid=/var/run/mdadm/monitor.pid
: 启动 RAID 监控守护进程。
- 配置文件:
/etc/mdadm.conf
或/etc/mdadm/mdadm.conf
存储了 RAID 阵列的配置信息,用于系统启动时自动组装阵列。可以使用mdadm --detail --scan > /etc/mdadm.conf
生成配置文件内容。
8. 逻辑卷管理 LVM
LVM 提供了更灵活的磁盘管理方式,允许动态调整卷的大小。
- 基本概念:
- 物理卷 (PV, Physical Volume): 磁盘或分区,是 LVM 的基础。
- 卷组 (VG, Volume Group): 由一个或多个 PV 组成,是 LVM 的存储池。
- 逻辑卷 (LV, Logical Volume): 从 VG 中分配空间创建,对用户和应用程序表现为一个独立的块设备,可以格式化并挂载。
- 基本操作:
- 创建 PV:
pvcreate /dev/sdXN
- 查看 PV:
pvdisplay
,pvscan
- 创建 VG:
vgcreate vg_name /dev/sdXN /dev/sdYM ...
- 查看 VG:
vgdisplay
,vgscan
- 创建 LV:
lvcreate -L size -n lv_name vg_name
(size: 如 10G, 50%FREE) - 查看 LV:
lvdisplay
,lvscan
- 格式化 LV:
mkfs.ext4 /dev/vg_name/lv_name
- 挂载 LV:
mount /dev/vg_name/lv_name /mnt/lv_mount
- 调整 LV 大小:
- 扩展 VG:
vgextend vg_name /dev/sdYN
(将新 PV 加入 VG) - 扩展 LV:
lvextend -L +size /dev/vg_name/lv_name
或lvextend -L 100%VG /dev/vg_name/lv_name
(size: 如 5G) - 调整文件系统大小 (取决于文件系统类型):
- ext2/ext3/ext4:
resize2fs /dev/vg_name/lv_name
- xfs:
xfs_growfs /mnt/lv_mount
- ext2/ext3/ext4:
- 扩展 VG:
- 缩小 LV: (需要先卸载 LV,调整文件系统大小,再缩小 LV)
- 调整文件系统大小 (缩小):
resize2fs /dev/vg_name/lv_name size
或xfs_repair -L /dev/vg_name/lv_name && xfs_growfs -D size /mnt/lv_mount
(xfs 调整复杂,通常建议先备份) - 缩小 LV:
lvreduce -L -size /dev/vg_name/lv_name
- 调整文件系统大小 (缩小):
- 删除 LV/VG/PV: 按相反顺序删除,并确保 LV 未挂载,VG 中无 LV,PV 不属于任何 VG。
- 创建 PV:
补充重要概念和操作:
文件系统挂载:
mount source destination
: 挂载文件系统。source 是设备名 (如 /dev/sda1, /dev/md0, /dev/vg0/lv0) 或挂载点 (如果 source 是一个目录)。destination 是挂载点目录。umount mountpoint
: 卸载文件系统。/etc/fstab
: 用于配置系统启动时自动挂载的文件系统。格式通常为:<file system> <mount point> <type> <options> <dump> <pass>
<file system>
: 设备名 (推荐使用 UUID 或 LABEL) 或远程文件系统地址。<mount point>
: 挂载点目录。<type>
: 文件系统类型 (如 ext4, xfs, nfs)。<options>
: 挂载选项 (如defaults
,rw
,ro
,noatime
,user
)。<dump>
: 由 dump 命令使用,用于备份。0 表示不备份,1 表示备份 (通常根分区为 1,其他为 0)。<pass>
: 由 fsck 命令使用,指定文件系统检查的顺序。0 表示不检查,1 表示最先检查 (通常根分区为 1),其他数字按顺序检查。
- 示例
/etc/fstab
条目:UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2
LABEL=backup /mnt/backup xfs defaults,noatime 0 0
192.168.1.100:/export/share /mnt/nfs nfs defaults 0 0
文件系统创建 (格式化):
mkfs.ext4 /dev/sdXN
: 创建 ext4 文件系统。mkfs.xfs /dev/vg0/lv0
: 创建 xfs 文件系统。mkswap /dev/sdXN
: 创建 swap 分区。swapon /dev/sdXN
: 启用 swap 分区。swapoff /dev/sdXN
: 禁用 swap 分区。free -h
: 查看 swap 使用情况。
磁盘健康检查:
- SMART (Self-Monitoring, Analysis, and Reporting Technology): 硬盘自监测技术。
smartctl -a /dev/sdX
: 查看硬盘 SMART 信息。smartctl -s on /dev/sdX
: 启用 SMART。smartctl -t short /dev/sdX
: 运行短测试。smartctl -H /dev/sdX
: 检查硬盘健康状态。
磁盘性能监控:
iostat -x 1
: 监控磁盘 I/O 性能,显示设备使用率、等待时间等关键指标。
十.软件管理
- RPM包管理器(RPM Package Manager)
rpm 命令用于管理RPM软件包。常用选项包括:
-ivh:安装软件包,显示进度、校验包完整性并显示安装信息。
-ql:列出软件包安装的文件。
-qa:列出所有已安装的软件包。
-qf:查询文件属于哪个软件包。
-qc:显示软件包的配置文件。
-qd:显示软件包的文档文件。
–scripts:显示软件包包含的脚本。
–nodeps:不检查依赖关系安装软件包。
–force:强制安装软件包,即使已经安装或存在依赖问题。RHEL 9 使用 DNF(Dandified Yum)作为默认的包管理器,而 RHEL 7 使用 YUM(Yellowdog Updater Modified)。
- 绿色软件(免安装软件)
- 这类软件通常是指解压后即可直接运行的软件,不需要安装过程。
- 源码编译安装
- 源码编译安装软件通常包括下载源码、解压、编译和安装几个步骤。编译安装可以更好地定制软件选项和优化性能。
- 建立本地软件仓库
- 在虚拟机中加载系统镜像并设置虚拟光驱开机启动。
- 挂载光驱到系统目录。
[root@rhe19 ~l# mkdir /rhe19.4
[rootarhe19 ~l# mount /dev/cdrom /rhe19.4/
- 设置光驱开机自动挂载。
[root@rhe19 ~]# vim /etc/rc.d/rc.1ocal #开机自运行脚本
[root@rhe19 ~l# chmod +x /etc/rc.d/rc.loca]
- 配置仓库指向文件,指定软件仓库的位置和是否启用 GPG 校验。
实例(版本9):
[rootarhe19 ~]# cd /etc/yum.repos.d/
[rootarhe19 yum.repos.d]# vim rhel9.repo
[Appstream]
name = Appstream
baseurl= file:///rhe19.4/Appstream
gpgcheck = 1
gpgkey = file:///rhe19.4/RPM-GPG-KEY-redhat-release(密钥,在挂载目录下)
enabled =1
[Baseos]
name = BaseOs
baseurl= file:///rhe19.4/Baseos
gpgcheck=1
gpgkey =file:///rhe19.4/RPM-GPG-KEY-redhat-release
enabled=1
(版本7):
[rhe17]
name = rhel7
baseurl = file:///rhe17
gpgcheck=0
- 建立第三方软件仓库
- 下载第三方软件到指定目录。
[rootarhe19 ~l# mkdir /software
[rootarhe19 software]# wget
https://d1dir1v6.99.com/qqfi1e/qq/Q0NT/Linux/00_3.2.18_250626_x86_64_01.rpm(这里以QQ做示例)
- 安装软件信息采集工具(如 createrepo)。
[root@rhe19 software]# dnf install createrepo -y
[root@rhel9 software]# createrepo -v /software/
[root@rhel9 software]# ls
00 3.2.18 250626 x86 64 01.rpm repodata #repodata目录是通过createrepo命令采集出来的数据目录
- 配置系统以使用第三方软件仓库。
[root@rhe19 software]# vim /etc/yum.repos.d/rhe19.repo
[qq]
name = qq
baseur] = file:///software
gpgcheck=0
enabled =1
- 软件包查询和安装
- 使用 dnf whatprovides 命令可以根据文件名查找提供该文件的软件包。
- 使用 dnf install 命令可以安装软件包。
- 开机执行命令文件
- /etc/rc.d/rc.local 文件用于存储开机时需要执行的命令。
十一.脚本文件(用于改网卡名,IP,主机名)
版本9
#!/bin/bash
ifconfig $l &> /dev/null || {
echo "net device $l is not exist"
exit
}
ping -cl -wl $2 &> /dev/null && {
echo "$2 is exist"
exit
}
grep $1 -r /etc/NetworkManager/system-connections/ | awk -F : '{system("rm -fr " $1)}'
cat >/etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1
[ipv4]
method=manual
address1=$2/24,172.25.254.2
dns=8.8.8.8
EOF
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl hostname $3
grep -e "$2\t$3" /etc/hosts || {
echo -e "$2\t$3" >> /etc/hosts
}
版本7
#!/bin/bash
ifconfig $l &> /dev/null || {
echo "net device $l is not exist"
exit
}
ping -c1 -wl $2 &> /dev/null && {
echo "$2 is exist"
exit
}
grep $1 -r /etc/sysconfig/network-scripts/ | awk -F : '{system("rm -fr " $l)}'
cat >/etc/sysconfig/network-scripts/ifcfg-$1 <<EOF
DEVICE=$1
NAME=$1
BOOTPROTO=none
IPADDR0=$2
PREFIX0=24
GATEWAY0=172.25.254.2
DNS1=8.8.8.8
ONBOOT=yes
EOF
nmcli connection reload
nmcli connection up $1
hostnamectl set-hostname $3
grep -e "$2\t$3" /etc/hosts || {
echo -e "$2\t$3" >> /etc/hosts
}