CA复习功课
RHCSA 复习笔记
一、 文件管理
- 创建文件/目录:
touch [文件名]:创建空文件或更新现有文件时间戳。mkdir [目录名]:创建目录。常用选项:-p递归创建多级目录。
- 查看文件/目录:
ls [选项] [文件/目录]:列出目录内容。常用选项:-l详细列表,-a显示隐藏文件,-h人性化大小显示。- more
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 ... fifor var in list; do ... donewhile 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 2LABEL=backup /mnt/backup xfs defaults,noatime 0 0192.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
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)