Linux培训学习
编辑
Oracle Linux 安装
问题
Legacy启动和UEFI启动有什么区别?
启动模式:
Legacy启动:也称为BIOS启动,基于传统的BIOS固件接口。它使用MBR(主引导记录)分区表,限制在4个主分区,最大支持2TB的磁盘。
UEFI启动:统一可扩展固件接口,替代传统BIOS。它使用GPT(GUID分区表),支持更多分区(最多128个)和更大容量的硬盘(超过2TB)。
引导过程:
Legacy启动:BIOS读取MBR的引导扇区,然后加载并执行MBR中的引导代码,找到并加载操作系统的引导程序。
UEFI启动:UEFI固件直接读取EFI分区(ESP)中的引导程序(通常是EFI应用程序文件,如
bootx64.efi
),支持更复杂的启动管理和配置。
安全性:
Legacy启动:安全性较低,没有原生的安全启动功能。
UEFI启动:支持安全启动(Secure Boot),可以验证引导加载程序的签名,防止加载未授权的操作系统和恶意代码。
兼容性:
Legacy启动:较老的系统和硬件仍然使用传统BIOS和MBR,不支持GPT。
UEFI启动:新硬件和操作系统普遍支持UEFI和GPT,但可能需要兼容模式(CSM)来支持旧版操作系统。
文件系统创建
注意此处:
在Linux系统中,swap分区通常不挂载到文件系统中的特定目录,例如
/swap
,而是通过系统管理器直接启用。这样做的原因是swap分区本质上并不属于文件系统的一部分,它是一块专门用于扩展虚拟内存的磁盘区域。从表格来看,
lvswap
这一逻辑卷的挂载点被标记为swap
。这种标记实际上只是为了表明这是一个swap分区,并不表示它会挂载到文件系统中的某个具体目录。这种表示法更像是一种记录,用于区分其他类型的逻辑卷。启用swap分区的方法通常如下:
在
/etc/fstab
文件中添加一行,以便系统在启动时自动启用swap分区。例如:/dev/mapper/vgname-lvswap none swap sw 0 0
这里的
/dev/mapper/vgname-lvswap
是逻辑卷管理器(LVM)创建的逻辑卷设备路径。手动启用swap分区:
sudo swapon /dev/mapper/vgname-lvswap
因此,swap分区不需要挂载到文件系统中的具体目录,只需要在启动时通过系统管理器启用即可。
为什么UEFI启动时,需要创建/boot/efi分区?
EFI系统分区(ESP):
UEFI启动需要ESP:UEFI固件使用EFI系统分区(ESP)来存储EFI启动加载程序、EFI应用程序和驱动程序。ESP是一个专用分区,格式通常为FAT32,标记为
EFI System Partition
。/boot/efi分区:在Linux系统中,ESP通常挂载在
/boot/efi
目录下。这个分区用于存放操作系统的EFI引导加载程序和其他启动相关文件。
多操作系统支持:
统一引导管理:ESP允许多个操作系统共存,每个操作系统在ESP中存放其EFI引导程序。UEFI固件可以从ESP中选择不同的EFI引导程序启动不同的操作系统。
配置和维护:
简化启动配置:ESP提供了一个标准化的位置来存储启动相关文件,简化了启动配置和维护。引导加载程序如GRUB可以直接从ESP中读取配置文件和内核镜像。
安全性和灵活性:
增强的安全性:ESP支持UEFI的安全启动功能,可以验证引导加载程序的签名,提高系统启动的安全性。
灵活的启动管理:UEFI支持图形化启动管理器和更复杂的启动配置,使用户可以更方便地管理多个操作系统和启动选项。
三种启动方式有什么区别?
默认从Oracle Linux Server 8 UEK内核启动
UEK内核(Oracle Linux Server 8 UEK)Unbreakable Enterprise Kernel是为高性能和高稳定性设计的,特别适合Oracle数据库和应用环境。
Red Hat兼容内核(Oracle Linux Server 8.6)Red Hat Enterprise Linux (RHEL)更注重兼容性,适用于广泛的应用和硬件环境。
救援内核(Oracle Linux Server 8 Rescue)用于系统故障后的恢复和修复操作,不用于日常使用。
网络配置
ifconfig -a查看所有网卡(没有network-tools就ip a)
systemctl restart NetworkManager
版本、内核查看
cat /etc/redhat-release
cat /etc/system-release
cat /etc/oracle-release
cat /etc/os-release
文件系统结构和访问
结构
文件系统层次结构标准(FHS)
Linux系统的文件系统从根目录
/
开始,包含各种二级和三级目录。FHS标准由Linux基金会发布,规定了系统中主要目录的用途。
根目录及其子目录
例如:
/bin
、/boot
、/dev
、/home
等。各子目录有各自的用途,以下为主要目录及其用途
/bin:包含基本的用户命令,如
ls
、cp
、mv
等。这些命令在单用户模式下也必须存在,因此需要放在根文件系统中。/boot:包含启动加载器及其配置文件,例如
grub
配置文件和内核镜像文件。/dev:包含设备文件,如硬盘、终端设备等。每个设备文件表示一个物理设备,例如
/dev/sda
代表第一个SCSI硬盘。/etc:包含系统配置文件,所有系统级配置文件都在这里,例如网络配置文件、用户账号信息等。
/home:包含用户的主目录,每个用户都有一个子目录,例如
/home/username
。/lib:包含系统库文件和内核模块,供
/bin
和/sbin
中的二进制文件使用。/media:挂载点,用于挂载可移动介质,如 CD-ROM 和 USB 设备。
/mnt:临时挂载点,系统管理员可以在这里挂载文件系统。
/opt:用于安装附加软件包,主要用于第三方软件。
/root:超级用户(管理员)的主目录,与普通用户的主目录
/home/username
类似。/run:存储应用程序运行时产生的临时文件。
/sbin:包含系统管理员使用的基本命令,如
ifconfig
、reboot
等。/srv:存放服务相关的数据,如 HTTP 服务器的网页文件。
/tmp:存放临时文件,系统重启后可能会被清空。
/usr
:包含多用户应用程序和文件,包括二进制文件、库文件、文档等。常见子目录有:
/usr/bin:包含用户可执行文件。
/usr/lib:包含库文件。
/usr/local:用于安装本地编译的软件。
/usr/share:包含共享数据,如文档和配置文件。
/var
:存放经常变化的文件,如日志、缓存、临时文件等。常见子目录有:
/var/log:存放日志文件。
/var/tmp:存放临时文件,系统重启后不会被清空。
目录访问与文件操作
绝对路径和相对路径
绝对路径:从根目录
/
开始,例如/etc/sysconfig/network-scripts/ifcfg-eth1
。相对路径:相对于当前目录,例如
./ifcfg-eth1
或者../network-scripts/ifcfg-eth1
。
基本命令
pwd
:打印当前工作目录。cd
:更改当前目录。ls
:列出目录内容。
cd:
cd /path/to/directory
:进入指定目录。cd ..
:返回上一级目录。cd ~
:进入用户的主目录。cd -
:返回上一次所在的目录。
ls:
ls -l
:以长格式列出目录内容。ls -a
:列出所有文件,包括隐藏文件。ls -lh
:以人类可读的格式显示文件大小。
文件操作
查看文件内容
cat
:连接并显示文件内容。more
:分页显示文件内容。less
:同more
,但功能更强大。head
:显示文件的开头部分。tail
:显示文件的结尾部分。
cat:快速查看文件内容,适用于小文件。
more 和 less:适用于大文件,分页查看,
less
支持上下翻页和搜索功能more
只能向下翻页head和 tail:
head -n 10 filename
:显示文件的前10行。tail -n 10 filename
:显示文件的后10行。tail -f filename
:实时查看文件末尾的更新,常用于查看日志文件。
VI/VIM
VI编辑器的使用
VI与VIM编辑器
VI:老式的文本编辑器,功能齐全,适用于基本文本编辑。
VIM:VI的增强版,增加了语法高亮、代码折叠等功能,更适合代码编写。
三种模式
命令模式:进入VI编辑器后的默认模式,可使用快捷键进行光标移动、删除、查找等操作。
编辑模式:用于编辑文件内容,从命令模式按
i
进入编辑模式,按ESC
退出回到命令模式。末行模式:用于执行保存、退出等命令,从命令模式按
:
进入末行模式。
VI编辑器的使用场景
编辑已有文件
命令:
vi filename
示例:
vi /tmp/1.txt
新建文件
命令:
vi newfile
一般模式
常用快捷键
光标移动:
h
(左)、j
(下)、k
(上)、l
(右)删除:
x
(删除当前字符)X
(删除前面一个)dd
(删除当前行,加上数字如20dd可以删除20行)复制粘贴:
yy
(复制当前行)、p
(粘贴)
翻页:
Ctrl+f
(向下翻页)、Ctrl+b
(向上翻页)、Ctrl+b
(重做上一个动作)u
( 复原前一个动作)跳转:
gg
(跳转到文件开头)、G
(跳转到文件末尾)、[Home]
移动到这一行的最前面、[End]
移动到最后面查找替换:
查找:
/keyword
向下查找(输入n继续向下找),?keyword
向上查找替换:
:%s/old/new/g
全文替换old
为new
编辑模式
进入编辑模式的方法
i
:在光标前插入a
:在光标后插入o
:在当前行下方新建一行并插入(O为上一行)
在行首插入:
I
(进入插入模式,在行首插入)在行尾插入:
A
(进入插入模式,在行尾插入)替换模式:
R
(进入替换模式,逐字符替换)
末行模式
末行模式常用命令
:w
:保存文件:q
:退出VI编辑器:wq
:保存并退出:q!
:强制退出不保存
另存为:
:w newfilename
(将文件另存为newfilename
)读取文件:
:r filename
(在当前文件中读取并插入filename
的内容)设置行号:
:set number
(显示行号),:set nonumber
(取消显示行号)
Linux系统启动与关闭
系统运行级别
知识点
CentOS 6 运行级别 (level) init
0:关机模式
1:单用户模式
2:无网络的多用户模式
3:有网络的多用户模式(文本界面)
4:未使用
5:有网络的多用户模式(图形界面)
6:重启模式
CentOS 7/8 运行级别 (target)
CentOS 7/8 运行级别使用 systemd 目标态表示:
runlevel0.target
/poweroff.target
:关机runlevel1.target
/rescue.target
:单用户模式runlevel2.target
/multi-user.target
:多用户模式(命令行界面)runlevel5.target
/graphical.target
:多用户模式(图形界面)runlevel6.target
/reboot.target
:重启
拓展
运行级别的实际应用:
不同运行级别对应不同的系统状态,可以根据需要选择合适的运行级别,例如在进行系统维护时使用单用户模式。
CentOS 7/8 通过
systemctl
命令管理运行级别 (挂软链接) ,取代了旧版的init
命令。
实践操作
查看当前运行级别:
systemctl get-default
切换运行级别:
systemctl set-default multi-user.target # 设置为多用户模式 systemctl set-default graphical.target # 设置为图形界面模式
系统关闭与重启
知识点
系统关闭命令
poweroff
:当你希望系统完全关闭并切断电源时使用,例如在工作完成后关闭计算机。halt
:当你希望系统停止运行,但保持电源供应(例如进行某些维护任务或准备进行硬件维护)时使用。系统重启命令
init 6
:立即重启reboot
:立即重启shutdown -r now
:立即重启
拓展
shutdown命令详解:
shutdown
命令在关机之前会通知所有登录用户,并且冻结新的用户登录。使用
shutdown
命令关闭系统会先调用sync
工具,将内存中的数据进行持久化。随后Shutdown指令会将信号发给init程序,要求它更改runlevel为0
区分
shutdown
命令的不同参数,理解halt
和power off
的区别。
实践操作
计划关机:
shutdown -h +10 # 计划在10分钟后关机
取消计划关机:
shutdown -c # 取消已计划的关机
Linux基础运维命令
命令帮助
知识点
获取命令帮助
command -h
或command --help
:快速查看命令的简要使用方法。man command
:使用man手册查看命令的详细帮助信息,可以使用空格键翻页,[q]退出。
历史命令
知识点
查看历史命令
history
:显示所有历史命令。HISTTIMEFORMAT
:设置历史命令显示时间戳。
总线连接设备查看
知识点
查看PCI设备
需要查看系统上所有的PCI设备时(比如说CPU、USB、Memory、Ethernet Card、Raid Card等等)
lspci
:列出所有的PCI总线设备。
lspci
命令是由pciutils
包提供的查看所有硬件设备
dmidecode
:显示系统的硬件信息。PCI 和硬件设备区别:
补充:lsblk看树状的目录
时间查看与配置
知识点
查看和设置系统时间
timedatectl
:查看和设置系统时间和时区。timedatectl set-time yyyy-mm-dd hh:mm:ss
:设置系统时间。timedatectl set-timezone ZONE
:设置系统时区。timedatectl list-timezones
:列出所有可用时区。
使用率与性能分析
知识点
CPU使用率查看
top
:实时显示系统的CPU、内存使用情况和当前进程。Uptime: The system has been up for 3 hours and 12 minutes.
Load average: The average system load over the last 1, 5, and 15 minutes.
Tasks: 237 total tasks, with 1 running and 236 sleeping.
CPU usage: 0% user processes, 0% system processes, 98% idle.
Memory usage: 7653.2 MB total memory, with approximately 4428 MB free, 2578 MB used, and 646 MB in buffer/cache.
Swap usage: 0 MGB total swap.
Task List:
PID 1098: A process running as root, using 0.7% of the CPU and 0.2% of memory.
PID 11: A process running as root, using 0.3% of the CPU and 0% of memory.
htop
:top
的增强版,提供更友好的用户界面和更多功能。
内存使用率查看
free -h
:显示系统的物理内存和交换内存的使用情况。
存储使用率查看
df -h
:显示文件系统的磁盘使用情况。(du
查看的是磁盘目录,定位文件位置)
I/O性能分析
iotop
:显示I/O使用情况,帮助分析磁盘读写性能。
文件和目录管理
文件类型
知识点
Linux中的文件类型
普通文件:包括文本文件、二进制文件、数据文件和压缩文件。
目录文件:用于存放文件名及其相关信息的文件。
块设备文件:如硬盘、光驱等存储设备。
字符设备文件:如键盘、鼠标等串行端口设备。
套接字文件:用于网络连接的文件。
管道文件:用于不同进程之间的信息传递。
链接文件:类似于Windows中的快捷方式,包括硬链接和符号链接。
管理文件、目录、链接
使用
ls -al
命令可以查看文件的详细属性。示例输出:
drwxr-xr-x 15 root root 4096 Apr 15 15:24 apache2.2.17 -rw------- 1 root root 30476 Jul 1 11:00 .bash_history -rw-r----- 1 root root 26782 May 16 17:48 billdb-dbca.rsp
权限:
drwxr-xr-x
表示文件的权限设置。d
表示目录,-
表示文件,l
表示符号链接。权限位从左到右依次为:所有者权限、组权限、其他用户权限。
属性:
文件类型:在权限部分的第一个字符表示文件类型,如
d
表示目录,-
表示文件,l
表示符号链接。属性:
r:读权限。
w:写权限。
x:执行权限。
属主:文件的所有者。
属组:文件所属的用户组。
大小:文件的字节数。
时间(mtime):文件最后修改时间。
名称:文件名。
时间属性
Modification time (mtime):文件内容发生变化时更新(权限和属性变化不会导致 mtime 更新)。
Status time (ctime):文件状态改变时更新,例如权限和属性被更改,但内容未变。
Access time (atime):文件被访问时更新,例如使用
cat
读取文件内容,进入目录,会导致 atime 更新。
Modification time (mtime)
定义:文件内容最后一次被修改的时间。
更改条件:
任何修改文件内容的操作都会更新 mtime。
例如:使用
echo "text" > file.txt
、vim file.txt
编辑保存文件。
查看命令:
stat -c %y filename
Status time (ctime)
定义:文件状态或属性最后一次被修改的时间。
更改条件:
文件的元数据(例如权限、属主、属组)发生变化时更新。
文件内容变化也会更新 ctime。
例如:使用
chmod 755 file.txt
修改权限,使用chown user:group file.txt
修改属主和属组。
查看命令:
stat -c %z filename
Access time (atime)
定义:文件最后一次被访问(读取)的时间。
更改条件:
任何读取文件的操作都会更新 atime。
例如:使用
cat file.txt
、less file.txt
读取文件内容。
查看命令:
stat -c %x filename
设置文件系统行为
在现代 Linux 文件系统中,默认情况下会优化 atime 的更新频率,以减少磁盘写入操作,提升性能。以下是一些常见的 atime 相关挂载选项:
relatime(默认):
只在 atime 小于 mtime 或 ctime 时更新。
提供了性能和兼容性之间的平衡。
noatime:
禁止更新 atime,提升性能。
适用于不依赖 atime 的应用。
nodiratime:
禁止更新目录的 atime。
strictatime:
强制每次访问都更新 atime,性能较低。
可以通过 mount
命令设置这些选项。例如:
mount -o remount,noatime /mnt/mydisk
自动删除未访问的文件
可以使用 tmpwatch
或 find
命令结合 atime
属性来自动删除未访问的文件。例如:
使用 tmpwatch
tmpwatch
是一个工具,用于清理超过指定时间未访问的文件。安装和使用:
sudo yum install tmpwatch tmpwatch 30d /path/to/directory # 删除超过30天未访问的文件
使用 find
命令
find
命令也可以用来查找并删除超过指定时间未访问的文件。例如,删除超过30天未访问的文件:
find /path/to/directory -type f -atime +30 -exec rm -f {} \;
示例:自动删除未访问文件的 Cron 任务
可以将上述 find
命令添加到 cron 作业中,实现定期清理。编辑 crontab:
crontab -e
添加以下行,每天凌晨3点执行清理任务:
0 3 * * * find /path/to/directory -type f -atime +30 -exec rm -f {} \;
通过上述方法,可以有效管理文件系统中的时间属性,并实现自动化的文件清理操作。
文件管理
复制文件:
cp [-adfilprsu] 来源文件 目标文件
删除文件:
rm [-fir] 文件或目录
移动文件:
mv [-fiu] source destination
新建文件:
touch 文件
查看文件类型:
file 文件
文件内容查看:
cat [-AbEnTv] 文件
,more 文件
,less 文件
,head [-n number] 文件
,tail [-n number] 文件
目录管理
创建目录:
mkdir -p 目录
(-parents 创建父目录)进入目录:
cd 目录
打印当前目录:
pwd
删除目录:
rm -r 目录
链接管理
创建链接:
ln 实际文件 链接文件
(软链接使用ln -s
)删除链接:
rm 链接文件
实践操作
# 链接操作
ln -s /tmp/test.txt /test_link # 创建软链接
rm /test_link # 删除链接
查看、查找文件
知识点
文件查询
可执行文件查询:
which 命令
在特定目录寻找文件:
whereis 文件名
在已建立的数据库中寻找文件:
locate [-ir] 关键字
寻找文件:
find [PATH] option action
实践操作
which ls # 查找可执行文件的位置
whereis test.txt # 在特定目录中查找文件
locate test.txt # 在数据库中查找文件
find / -name test.txt # 在根目录下查找文件
文件压缩、归档、拆分和合并
压缩与归档
知识点
压缩与归档的区别
压缩:将文件内容进行编码,以减少文件占用的存储空间。常见工具包括
gzip
、bzip2
等。归档:将多个文件或目录打包成一个文件,以便于传输或备份。常见工具包括
tar
。
tar 命令
tar
是 Linux 中常用的归档工具,可以将多个文件或目录打包成一个归档文件。常用参数:
-c
:创建新的归档文件-x
:从归档文件中提取文件-v
:显示操作过程-f
:指定归档文件名-t
:列出归档文件中的内容-C
:指定解压路径
实践操作
# 创建归档文件
tar -cvf archive.tar /path/directory
# 解压归档文件到指定目录
tar -xvf archive.tar -C /path/extract
# 查看归档文件内容
tar -tvf archive.tar
检查归档文件存在:
或者直接查看归档文件内容:
指定解压到opt目录
拆分与合并
知识点
split 命令
split
命令用于将一个大文件拆分成多个小文件,方便传输或存储。常用参数:
-a
:指定输出文件名的后缀长度(默认为2个字符)-d
:使用数字作为后缀-b
:指定输出文件的大小,可以使用k
、m
、g
等单位
cat 命令
cat
命令用于连接文件内容,通常用于将拆分的文件重新合并成一个文件。
实践操作
# 将大文件拆分成每个100MB的小文件
split -b 100M largefile.bin part_
# 将拆分的小文件重新合并成一个文件
cat part_* > largefile_reconstructed.bin
分区管理与挂载管理
文件系统
知识点
文件系统概述
文件系统是操作系统用来管理存储设备上数据的一种方式。
不同操作系统支持不同的文件系统类型,如Windows支持FAT32、NTFS,Linux支持EXT4、XFS等。
文件系统结构
inode:存储文件的元数据(如权限、所有者等)。
data block:存储文件实际数据。
superblock:记录文件系统的总体信息(如inode与block的总量、使用量、剩余量等)。
实践操作
查看文件系统类型和使用情况
df -Th
df
命令用于报告文件系统的磁盘空间使用情况。-T
选项显示文件系统类型,-h
选项以人类可读的格式显示输出。查看指定目录的磁盘使用情况
du -sh /path/to/directory
du
命令用于估算文件和目录的磁盘使用空间。-s
选项显示总计,-h
选项以人类可读的格式显示输出。
磁盘的分区、格式化与挂载
知识点
磁盘分区
分区是将硬盘划分为多个独立区域,每个区域可以作为一个独立的逻辑磁盘使用。
分区类型:MBR(主引导记录)和GPT(GUID分区表)。
MBR:支持最多4个主分区或3个主分区加1个扩展分区,总大小限制为2TB。
GPT:支持无限制的分区数量,且支持大于2TB的分区。
格式化
格式化是指将分区初始化为特定的文件系统,以便操作系统使用。
常用格式化命令:
mkfs.xfs
、mkfs.ext4
。
挂载
挂载是将分区或设备与文件系统的某个目录关联,使其内容可通过该目录访问。
常用挂载命令:
mount
,取消挂载命令:umount
。
实践操作
使用fdisk进行MBR分区
fdisk /dev/sda
在
fdisk
交互界面中,可以使用以下命令:n
:新建分区d
:删除分区p
:显示分区表信息w
:保存并退出
使用parted进行GPT分区
parted /dev/sdb
在
parted
交互界面中,可以使用以下命令:mklabel gpt
:创建GPT分区表mkpart primary ext4 0% 100%
:创建主分区,文件系统类型为ext4,覆盖整个磁盘
格式化分区为XFS文件系统
mkfs.xfs /dev/sdb1
挂载分区
mount /dev/sdb1 /mnt
取消挂载
umount /mnt
设定开机自动挂载
知识点
自动挂载配置
系统启动时,读取
/etc/fstab
文件进行自动挂载配置。fstab
文件中的每一行定义一个文件系统的挂载点、文件系统类型、挂载选项等。
fstab
文件格式设备文件名或UUID
挂载点
文件系统类型
挂载选项(如defaults)
dump选项(备份)
fsck选项(文件系统检查)
实践操作
编辑
/etc/fstab
文件,添加自动挂载配置echo –e '/dev/sdb1 /mnt xfs defaults 0 0' >> /etc/fstab 或者 echo '/dev/sdb1 /mnt xfs defaults 0 0' | sudo tee -a /etc/fstab
验证自动挂载配置
sudo mount -a
mount -a
命令会根据fstab
文件中的配置挂载所有未挂载的文件系统。reboot后验证:
LVM(Logical Volume Management)
LVM 原理剖析
知识点
LVM 概述
LVM 是 Linux 系统下对磁盘分区进行管理的工具,适合管理大存储设备,并允许用户动态调整文件系统的大小。
LVM 可以将多个物理分区整合成一个虚拟磁盘,并支持在未来增加或移除物理分区。
LVM 基本元素
PV(Physical Volume,物理卷):由分区创建而成,是 LVM 最底层的概念。
VG(Volume Group,卷组):由 PV 组成的集合,可以将多个 PV 组合在一起。
PE(Physical Extent,物理区块):PV 中可以分配的最小存储单元,类似于分区里的 Block。
LV(Logical Volume,逻辑卷):在 VG 中重新划分出的元素,可以理解为“逻辑分区”。
LVM 的创建、删除、扩容、缩容
知识点
创建 LVM
创建 PV:
pvcreate 分区名称
创建 VG:
vgcreate VG名称 PV名称
创建 LV:
lvcreate –L 大小 –n 名字 VG名称
删除 LVM
删除 LV:
lvremove LV
删除 VG:
vgremove VG
删除 PV:
pvremove PV
扩容 LVM
扩容 LV:
lvextend –L 大小 LV的路径
(大小可以通过带 + 表示增加的大小)扩容 VG:
vgextend VG PV
缩容 LVM
缩容操作较为复杂且不常用,通常建议通过清理数据而非缩减分区大小。
实践操作
创建 LVM 的基本操作
# 创建 PV pvcreate /dev/sda2 # 创建 VG vgcreate vg00 /dev/sda2 # 创建 LV lvcreate –L 200G –n lvroot vg00 lvcreate –L 150G –n lvapp1 vg00 lvcreate –L 149G –n lvapp2 vg00
扩容 LV 的操作
# 添加新的物理卷 pvcreate /dev/sdb # 扩展 VG vgextend vg00 /dev/sdb # 扩展 LV lvextend –L +151G /dev/vg00/lvapp2 # 对 XFS 文件系统进行在线更新 xfs_growfs /dev/vg00/lvapp2
发现的问题
在lvcreate -L 100M -n lvtestdir vg00
之后,使用lvdisplay命令展示如下:
接下来对文件格式化mkfs.xfs /dev/vg00/lvtestdir
接着挂载到mount /dev/vg00/lvtestdir /mnt
,此时用df -h
命令查看,为何filesystem的路径变为了/dev/mapper/vg00-lvtestdir
???
在查阅后得知
当创建逻辑卷时,LVM 使用设备映射器来创建一个对应的虚拟块设备。设备映射器生成的设备节点位于
/dev/mapper
目录中,而 LVM 会在/dev
目录中创建符号链接以方便管理。因此,可以看到以下关系:/dev/vg00/lvtest -> /dev/mapper/vg00-lvtest
符号链接:
/dev/vg00/lvtestdir
是 LVM 创建的符号链接,便于用户管理。实际设备节点:
/dev/mapper/vg00-lvtestdir
是设备映射器创建的实际设备节点,实际进行 I/O 操作时使用。df -h
输出:显示实际挂载的设备节点路径,因此显示/dev/mapper/vg00-lvtestdir
。
这种设计提高了存储管理的灵活性和抽象层次,使得高级存储管理功能(如 LVM、加密、RAID)更加易于实现和使用。
假设创建了一个卷组 vg00
和一个逻辑卷 lvtest
,实际情况可能如下:
实际设备节点:
/dev/dm-2
符号链接:
/dev/vg00/lvtest -> /dev/dm-2
设备映射器友好名称:
/dev/mapper/vg00-lvtest -> /dev/dm-2
LVM 的条带化创建
知识点
条带化创建
条带化(Striping)是将数据分条存储在不同的物理卷上,提升读写性能。
创建条带化 LV 时,指定
-i
参数表示条带数。
实践操作
# 创建 PV
pvcreate /dev/sda /dev/sdb /dev/sdc
# 创建 VG
vgcreate vgdata /dev/sda
# 扩展 VG
vgextend vgdata /dev/sdb /dev/sdc
# 创建条带化 LV
lvcreate –L 1500G -i 3 –n lvapp vgdata
# 创建文件系统
mkfs.xfs /dev/vgdata/lvapp
# 更新 /etc/fstab 文件,添加挂载配置
echo –e “/dev/vgdata/lvapp /mnt xfs defaults 0 0” >> /etc/fstab
# 创建挂载点目录
mkdir /app
# 挂载文件系统
mount /app
SWAP管理
什么是SWAP?
知识点
内存与存储
内存(Memory):用于暂时存放CPU运算数据和外部储存器交换数据的随机存储器。断电后,数据会消失。
存储(Disk):通常为机械硬盘或固态硬盘,用于长时间存储数据。存储设备在断电后数据依然存在。
内存与存储的区别
性能:内存通过总线直接连接到CPU,速度快。存储通过其它接口连接,速度相对较慢。
用途:内存用于临时存放正在处理的数据和指令,存储用于保存长期数据。
SWAP的定义
SWAP(交换分区):是使用存储来扩展内存的技术。当系统内存耗尽时,SWAP 提供一个缓冲空间,避免系统宕机。
vm.swappiness:定义 SWAP 使用的阈值,表示当系统内存剩余到一定程度时开始使用 SWAP。
SWAP管理
实践操作
创建SWAP
mkswap /dev/sda2
挂载SWAP
swapon /dev/sda2
卸载SWAP
swapoff /dev/sda2
扩容SWAP
swapoff /dev/sda2 lvextend -L +1G /dev/vg0/swaplv mkswap /dev/vg0/swaplv swapon /dev/vg0/swaplv
用户和组管理
基础
用户标识符
理解UID和GID
用户ID (UID):分配给系统中每个用户的唯一标识符。
组ID (GID):分配给系统中每个组的唯一标识符。
UID和GID的重要性
在Linux中,系统通过UID和GID识别用户和组,而不是通过名称。
每个文件和目录在Linux中都有一个关联的UID和GID,指示其所有者和所属组。
用户配置文件
理解 /etc/passwd
/etc/passwd
文件包含用户账户信息。每个用户在这个文件中有一行,包含几个字段。示例条目:
root:x:0:0:root:/root:/bin/bash
用户名:
root
密码:
x
(实际密码存储在/etc/shadow
)UID:
0
GID:
0
用户信息:
root
主目录:
/root
Shell:
/bin/bash
组配置文件
理解 /etc/group
/etc/group
文件包含组信息。每个组在这个文件中有一行,包含几个字段。示例条目:
mail:x:12:postfix
组名:
mail
密码:
x
(实际密码存储在/etc/gshadow
)GID:
12
组成员:
postfix
管理、切换
组管理
创建组
命令:
groupadd -g GID groupname
修改组配置
命令:
groupmod -g new_GID -n new_groupname old_groupname
删除组
命令:
groupdel groupname
sssd版本过低导致报错,在
rm -rf /var/lib/sss/db/*
systemctl restart sssd
之后成功解决问题
用户管理
创建用户
命令:
useradd [options] LOGIN
选项包括设置主目录 (
-d
),主组 (-g
),附加组 (-G
),Shell (-s
) 等。
示例:
useradd -u 1601 -g 1601 -G 1602 -d /home/test -s /bin/bash -c "test user" test
修改用户属性
命令:
usermod [options] LOGIN
选项包括更改主目录 (
-d
),主组 (-g
),附加组 (-G
),Shell (-s
) 等。
锁定和解锁账户:
usermod -L
(锁定),usermod -U
(解锁)
更改用户密码
命令:
passwd username
查看密码参数:
chage -l username
删除用户
命令:
userdel -r username
查看基本用户信息:
id username
用户身份切换
切换用户
命令:
su - username
(使用新用户的环境变量)命令:
su username
(使用当前用户的环境变量)命令:
su - username -c "command"
(以另一个用户的环境变量和权限执行命令)
使用sudo
sudo
允许授权用户以超级用户或另一个用户的身份执行命令,具体由安全策略指定。/etc/sudoers
文件中的配置示例:user ALL=(ALL) ALL %group ALL=(root) NOPASSWD: /path/to/command
权限管理
文件权限
文件属性
文件属性在Linux中通过
ls -al
命令显示,格式如下:drwxr-xr-x 15 root root 4096 Apr 15 15:24 apache2.2.17 -rw------- 1 root root 30476 Jul 1 11:00 .bash_history -rw-r----- 1 root root 26782 May 16 17:48 billdb-dbca.rsp
文件属性分为几部分:权限、属主、属组、大小、时间(mtime)、名称。
文件最前面的字符表示文件类型:
d
表示目录,-
表示文件。后面九个字符分为三组,分别代表属主、属组和其他用户的权限。
权限表示
每组三个字符,分别由
r
(读)、w
(写)、x
(执行)组成。对文件和目录的权限含义:
文件:
r
:查看文件内容w
:修改文件内容x
:可执行文件(如程序或脚本)
目录:
r
:查看目录下的文件和目录名称w
:在目录下增删改文件和目录x
:进入该目录
数字表示法
权限的数字表示法:
r=4
,w=2
,x=1
。例如:
drwxr-xr-x
表示权限为755。
权限设置
更改文件属组
命令:
chgrp
由于
chown
命令可以更改属主和属组,一般不用chgrp
。
更改文件属主
命令:
chown [OPTION] [OWNER][:[GROUP]] FILE
常用选项:
-R
递归更改,将目录下所有文件和目录的属主和属组都进行更改。
更改文件权限
命令:
chmod [OPTION]... MODE[MODE]... FILE...
权限模式可以用数字表示法,例如
chmod 777 test.txt
,将test.txt
的权限更改为rwxrwxrwx
。也可以通过
u+x
、u-x
等命令进行精准调整。
文件访问控制ACL模型
ACL概述
ACL(Access Control List)提供了比传统的属主、属组、其他用户的读写执行权限更细致的权限设置。
ACL可以针对单个用户、单个文件或目录进行rwx权限规范,非常适合需要特殊权限的情况。
ACL在多用户环境中尤其有用,因为它允许为特定用户或用户组设置特定权限,而不影响其他用户的权限。
设置ACL
使用
setfacl
命令设置ACL。基本语法:
setfacl -m u:username:permissions file setfacl -m g:groupname:permissions file
例如,将文件
example.txt
设置为用户bob
具有读写权限:setfacl -m u:bob:rw example.txt
查看ACL
使用
getfacl
命令查看ACL。基本语法:
getfacl file
例如,查看文件
example.txt
的ACL:getfacl example.txt
删除ACL
使用
setfacl
命令删除ACL。基本语法:
setfacl -x u:username file setfacl -b file # 删除所有ACL
例如,删除用户
bob
在文件example.txt
上的ACL:setfacl -x u:bob example.txt
默认ACL
可以为目录设置默认ACL,以便新创建的文件和子目录继承这些ACL。
基本语法:
setfacl -m d:u:username:permissions directory
例如,将目录
/shared
设置为用户alice
具有读写执行权限:setfacl -m d:u:alice:rwx /shared
软件管理
RPM
知识点
软件包概述
就像我们手机、电脑安装软件包一样,Linux 开发商也会对软件进行包装:
在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好。
将这个软件的所有相关文件打包成为一个特殊格式的文件。
发布打包好的文件给客户端下载安装。
客户端取得文件后,用特定的指令安装,检测依赖关系并完成安装。
常见的软件安装方式
dpkg:Debian Linux 社群开发,主要用于 B2D、Ubuntu 等。
RPM:Red Hat 开发,使用广泛,如 Fedora、CentOS、SuSE 等。
RPM命令
软件包命名规则
格式:
tar-1.26-35.el7.x86_64
tar
:软件名1.26
:主版本35
:修订次数el7
:适配系统x86_64
:适配CPU架构
安装命令
rpm -ivh rpm包全名
:安装软件包选项:
-i
:安装-v
:打印安装信息-h
:以#
号展示安装进度
测试安装:
--test
参数
卸载命令
rpm -e rpm包全名
:卸载软件包
升级命令
rpm -Uvh rpm包全名
:升级软件包跳过依赖检查:
--nodeps
参数
查询命令
rpm -q 软件名
:查询软件包查看所有已安装软件:
-a
参数查看详细信息:
-i
参数查看安装位置:
-l
参数查看依赖关系:
-R
参数
思考与延伸
RPM的优势和不足:
优势:便捷性和易用性,广泛使用。
不足:手动处理依赖关系繁琐,容易出现依赖地狱问题。
YUM
知识点
YUM概述
YUM(Yellowdog Updater Modified)是一个RPM包管理工具,可以解决RPM包安装过程中遇到的依赖关系问题。
YUM可以从多个源中搜索软件及其依赖包,并自动安装相应的依赖软件。
YUM的原理
YUM将所有RPM软件包存放在一起,分析依赖关系,记录成依赖列表,统称为软件仓库(repository)。
客户端读取repository,根据需求选取对应的rpm包进行安装。
YUM命令
基本命令
列出所有软件包:
yum list
或rpm -qa
查看软件包信息:
yum info
或rpm -qai
搜索软件包:
yum search 关键字
安装软件包
yum install 软件包名
:安装软件包及其依赖包yum groupinstall 软件组名
:安装软件包组及依赖包
更新软件包
yum update 软件包名
:升级软件包yum group update 软件组名
:升级软件包组及依赖包
移除软件包
yum remove 软件包名
:移除软件包yum group remove 软件组名
:移除软件包组及依赖包
管理repository
列出所有可用的repository:
yum repolist all
配置文件存放在
/etc/yum.repos.d
目录下,以.repo
结尾的文件为repository配置文件。
示例
配置YUM源
cat /etc/yum.repos.d/local.repo [rhel7] name=reh17 baseurl=file:///mnt enabled=1 gpgcheck=0
更新repository
yum clean all # 清空yum缓存信息 yum makecache # 更新yum repository缓存信息 yum list # 检查读取软件包是否顺利
源码编译安装
源码安装概述
除了使用RPM和YUM安装已经编译好的软件包,还可以通过源码编译安装软件。
源码编译安装需要自行完成编译工作,适合对软件进行自定义配置和优化。
安装步骤
以Nginx为例:
安装依赖:
yum -y install gcc* pcre-devel openssl-devel
解压源码包:
tar -xvf nginx-1.9.9.tar.gz cd nginx-1.9.9/
运行configure并指定安装位置:
./configure --prefix=/usr/local/nginx/
编译安装:
make && make install
Shell
Shell简介
Shell的定义和作用
完整的计算机系统包括硬件和软件。软件分为系统软件和应用软件。系统软件的内核部分负责管理和操作硬件,但用户无法直接与内核交互。用户通过应用程序或部分系统软件发出指令,这些指令会被翻译并传给内核。
在Linux系统下,用户可以通过Shell与内核进行沟通,从而使用计算机资源。Shell是一个命令解释器,为用户和操作系统之间提供了一个接口。此外,Shell也是一种编程工具,称为脚本语言。与编译型语言(如C/C++、Java)不同,脚本语言是解释执行的,编写后无需编译即可运行。
登录系统时会启动一个Shell,这个信息存储在用户配置文件
/etc/passwd
的最后一列。
Bash的功能
Tab
键自动补全命令和文件名。设置别名(alias)以便快捷使用常用命令。
后台执行任务和控制作业(jobs、bg、fg等)。
执行Shell脚本。
使用通配符进行文件名匹配(如
/etc/sys*
表示/etc/
目录下所有以sys
开头的文件或目录)。
变量
变量的定义
变量在Bash环境中非常重要。每个用户登录系统时都会获得一个Bash Shell,每个人都可以在Bash中运行进程和服务。程序运行时需要的参数通过环境变量获取。
变量的使用
查看变量值:
echo $变量名
,如:echo $PATH
设置变量:
myname=test
变量与内容之间不能有空格,如:
myname = test
是错误的。变量名可以包含字母和数字,但不能以数字开头。
变量内容中包含空格时,需要使用引号:
var="lang is $LANG"
使用
export
命令将变量变成环境变量:export PATH
取消变量:
unset 变量名
环境变量
环境变量是全局变量,存在于所有Shell中,并具有继承性。环境变量定义了很多系统运行所需的变量,即使产生了子进程也可以继承父进程的环境变量。
查询环境变量:
env
查询所有变量:
set
自定义变量转为环境变量:
export
环境变量配置文件:
全局配置文件:
/etc/profile
用户配置文件:用户家目录下的
.bash_profile
字符处理命令
排序命令:sort
sort [-fnr] 文件名/目录名
-f
:忽略大小写-n
:按数值排序-r
:反向排序
取消重复行:uniq
uniq [-ic] 文件名/目录名
-i
:忽略大小写-c
:统计重复行的次数
统计:wc
wc [-cwl] 文件名/目录名
-c
:统计字符数-l
:统计行数
行提取命令:grep
grep [-cinvo] "关键词" 文件名
-c
:统计符合条件的行数-i
:忽略大小写-n
:输出行号-v
:反向查找-o
:只列出关键词
管道和重定向
管道符:
|
将前一个命令的输出作为后一个命令的输入。
示例:
ls -a /etc/ | more rpm -qa | grep httpd
重定向
标准输入输出:
标准输入:
/dev/stdin
,文件描述符:0标准输出:
/dev/stdout
,文件描述符:1标准错误输出:
/dev/stderr
,文件描述符:2
输出重定向:
命令 > 文件
:以覆盖方式将正确输出重定向到文件命令 >> 文件
:以追加方式将正确输出重定向到文件错误命令 2> 文件
:以覆盖方式将错误输出重定向到文件错误命令 2>> 文件
:以追加方式将错误输出重定向到文件命令 > 文件 2>&1
:以覆盖方式将正确输出和错误输出重定向到同一个文件命令 >> 文件 2>&1
:以追加方式将正确输出和错误输出重定向到同一个文件
进程管理
进程了解
进程的定义
当系统触发任何一个事件时,系统都会将其定义为一个进程,并给这个进程一个ID(PID)。根据启动这个进程的用户,系统会给这个PID一组权限。进程是在系统中执行任何程序或指令时触发的。
父进程和子进程
进程之间存在相关性。例如,当我们使用root用户登录到系统时,系统会产生一个bash进程,这个bash进程的PID的属主和属组是root:root。如果我们执行
su
命令进行用户切换,如su – test
,系统会赋予第二个进程su一个新的PID和全新的权限test:test,并产生一个新的test用户的bash。第一个进程称为第二个进程的父进程,第二个进程是第一个进程的子进程。
进程管理
进程的控制和管理
后台执行
当执行一些耗时较长的命令时,可以在命令后加上
&
,将命令放在后台执行,完成后返回结果。
暂停和恢复进程
[CTRL]+[Z]
:将当前工作进程放到后台并暂停。jobs
:查看当前正在后台工作的进程。fg
:将后台进程放到前台执行。bg
:将后台进程在后台继续执行。
脱机管理
使用
nohup
命令可以在终端关闭后继续运行进程。nohup [指令与参数] &
进程的查看和释放
查看进程
ps
:将当前时间点的进程状况取出。常用命令:ps aux ps -ef
查看进程树
pstree
:将当前时间点的进程树展示。
动态查看进程状态
top
:动态展示进程状态,包括CPU和内存的使用情况。
释放进程
kill
:通过发送信号来释放进程。常用信号包括:1
:SIGHUP,重启进程。2
:SIGINT,中止进程。9
:SIGKILL,强制中断进程。15
:SIGTERM,正常结束进程。19
:SIGSTOP,暂停进程。
特殊文件和进程
/proc目录中的内容
进程信息
系统中的所有进程信息都存放在内存中,并写入到
/proc
目录下。每个进程的PID以目录的形式存在于/proc
中。
特殊文件
/proc/meminfo
:记录当前系统内存的所有相关信息。/proc/cpuinfo
:记录当前系统CPU的所有相关信息。
特殊命令
fuser
根据文件来获取使用该文件的进程。
fuser [-umv] [-k [i] [-signal]] file/dir
lsof
列出被进程所开启的文件。
lsof [-aUu] [+d]
服务管理
服务的定义
服务其实就是在内存中一直运行的进程。
例如crontab服务,它有一个守护进程(daemon)crond,会一直在内存中运行,每隔一段时间就去扫描crontab的服务配置文件,来继续运行crontab服务。
每个服务都类似crontab,会有一个守护进程(daemon),来保证服务的运行。
服务就是系统为了实现某些功能所提供的一些进程。既然是进程,就需要有命令来进行进程的运行。daemon就是服务的program(程序),只要运行服务的program,就可以运行服务的守护进程(daemon),这样就能保证服务的正常运行。
systemctl服务管理
旧版Linux的服务管理
在7之前的Linux系统,服务是通过init程序来进行管理的。例如:
/etc/init.d/daemon start(stop、restart、status)
使用chkconfig来控制服务是否自动启动。
CentOS 6启动较慢,因为系统启动完成后还需要加载所有服务。init启动服务遵循串行执行,即所有的服务都是依次启动的,上一个没有完成是不会启动下一个;而且服务之间有依赖关系,需要等依赖服务启动完成才能继续。
systemctl服务管理
从CentOS 7开始,改用systemctl来进行服务控制。其特征如下:
平行处理所有服务,加速开机流程。
systemctl管理所有的服务只需使用systemctl指令,不再需要init、service、chkconfig等命令。
systemctl在启动服务时会进行服务依赖性的自我检查,帮助同步启动依赖服务。
systemctl将所有服务定义为一个服务单位(unit),并根据unit进行分类,如service、target、socket、path等。
systemctl会将许多功能集合为一个target项目,有时执行一个target项目就是执行多个daemon的集合。
向下兼容,systemctl命令可以兼容init的启动脚本。
systemctl的不同unit类型
根据/usr/lib/systemd/system下的数据后缀区分服务类型:
.service
:一般服务类型,主要是系统服务。.socket
:内部程序数据交换的插槽服务。.target
:执行环境类型,是unit的集合。.mount
:文件系统挂载相关的服务。.path
:侦测特定文件或目录的类型。.timer
:循环执行的服务。
systemctl命令使用方法
查询服务状态:
systemctl status service名
启动服务:
systemctl start service名
关闭服务:
systemctl stop service名
重启服务:
systemctl restart service名
使服务开机自启:
systemctl enable service名
使服务开机不自启:
systemctl disable service名
注意事项
虽然服务也是一个运行在内存中的程序,但不要使用类似
kill
或fuser -kc
的命令停止服务。这样会导致systemctl无法继续监控服务的进度和状态。
systemctl管理的服务状态解析
active (running)
:服务运行中。active (exited)
:执行了一次正常结束的服务,目前系统中没有任何相关程序执行。active (waiting)
:当前服务正在运行中,但需要等待其它事件完成才能继续处理。inactive
:服务未运行。enabled
:服务设置为开机自启。disabled
:服务未设置为开机自启。static
:服务不可以设置开机自启,但可能被其它enabled的服务唤醒(依赖关系)。
- 0
- 0
-
分享