• JonTechTips

    Jonny Hu

    Linux培训学习

    82
    2024-09-08
    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)来支持旧版操作系统。

      文件系统创建

      image-20240724151959164-cdbb.png

      注意此处:

      在Linux系统中,swap分区通常不挂载到文件系统中的特定目录,例如/swap,而是通过系统管理器直接启用。这样做的原因是swap分区本质上并不属于文件系统的一部分,它是一块专门用于扩展虚拟内存的磁盘区域。

      从表格来看,lvswap这一逻辑卷的挂载点被标记为swap。这种标记实际上只是为了表明这是一个swap分区,并不表示它会挂载到文件系统中的某个具体目录。这种表示法更像是一种记录,用于区分其他类型的逻辑卷。

      启用swap分区的方法通常如下:

      1. /etc/fstab文件中添加一行,以便系统在启动时自动启用swap分区。例如:

        /dev/mapper/vgname-lvswap none swap sw 0 0

        这里的/dev/mapper/vgname-lvswap是逻辑卷管理器(LVM)创建的逻辑卷设备路径。

      2. 手动启用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支持图形化启动管理器和更复杂的启动配置,使用户可以更方便地管理多个操作系统和启动选项。

    三种启动方式有什么区别?

    image-20240724172149838.png

    默认从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

    image-20240724174531974.png

    版本、内核查看

    cat /etc/redhat-release

    cat /etc/system-release

    cat /etc/oracle-release

    cat /etc/os-release

    image-20240724175658698.png

    文件系统结构和访问

    结构

    1. 文件系统层次结构标准(FHS)

      • Linux系统的文件系统从根目录 / 开始,包含各种二级和三级目录。

      • FHS标准由Linux基金会发布,规定了系统中主要目录的用途。

    2. 根目录及其子目录

      • 例如:/bin/boot/dev/home 等。

        image-20240717144440277.png

      • 各子目录有各自的用途,以下为主要目录及其用途

    • /bin:包含基本的用户命令,如 lscpmv 等。这些命令在单用户模式下也必须存在,因此需要放在根文件系统中。

    • /boot:包含启动加载器及其配置文件,例如 grub 配置文件和内核镜像文件。

    • /dev:包含设备文件,如硬盘、终端设备等。每个设备文件表示一个物理设备,例如 /dev/sda 代表第一个SCSI硬盘。

    • /etc:包含系统配置文件,所有系统级配置文件都在这里,例如网络配置文件、用户账号信息等。

    • /home:包含用户的主目录,每个用户都有一个子目录,例如 /home/username

    • /lib:包含系统库文件和内核模块,供 /bin/sbin 中的二进制文件使用。

    • /media:挂载点,用于挂载可移动介质,如 CD-ROM 和 USB 设备。

    • /mnt:临时挂载点,系统管理员可以在这里挂载文件系统。

    • /opt:用于安装附加软件包,主要用于第三方软件。

    • /root:超级用户(管理员)的主目录,与普通用户的主目录 /home/username 类似。

    • /run:存储应用程序运行时产生的临时文件。

    • /sbin:包含系统管理员使用的基本命令,如 ifconfigreboot 等。

    • /srv:存放服务相关的数据,如 HTTP 服务器的网页文件。

    • /tmp:存放临时文件,系统重启后可能会被清空。

    • /usr

      :包含多用户应用程序和文件,包括二进制文件、库文件、文档等。常见子目录有:

      • /usr/bin:包含用户可执行文件。

      • /usr/lib:包含库文件。

      • /usr/local:用于安装本地编译的软件。

      • /usr/share:包含共享数据,如文档和配置文件。

    • /var

      :存放经常变化的文件,如日志、缓存、临时文件等。常见子目录有:

      • /var/log:存放日志文件。

      • /var/tmp:存放临时文件,系统重启后不会被清空。

    目录访问与文件操作

    1. 绝对路径和相对路径

      • 绝对路径:从根目录 / 开始,例如 /etc/sysconfig/network-scripts/ifcfg-eth1

      • 相对路径:相对于当前目录,例如 ./ifcfg-eth1 或者 ../network-scripts/ifcfg-eth1

    2. 基本命令

      • pwd:打印当前工作目录。

      • cd:更改当前目录。

      • ls:列出目录内容。

    • cd:

      • cd /path/to/directory:进入指定目录。

      • cd ..:返回上一级目录。

      • cd ~:进入用户的主目录。

      • cd -:返回上一次所在的目录。

    • ls:

      • ls -l:以长格式列出目录内容。

      • ls -a:列出所有文件,包括隐藏文件。

      • ls -lh:以人类可读的格式显示文件大小。

    文件操作

    1. 查看文件内容

      • cat:连接并显示文件内容。

      • more:分页显示文件内容。

      • less:同 more,但功能更强大。

      • head:显示文件的开头部分。

      • tail:显示文件的结尾部分。

    • cat:快速查看文件内容,适用于小文件。

    • moreless:适用于大文件,分页查看,less 支持上下翻页和搜索功能more只能向下翻页

    • head和 tail

      • head -n 10 filename:显示文件的前10行。

      • tail -n 10 filename:显示文件的后10行。

      • tail -f filename:实时查看文件末尾的更新,常用于查看日志文件。

    VI/VIM

    VI编辑器的使用

    1. VI与VIM编辑器

      • VI:老式的文本编辑器,功能齐全,适用于基本文本编辑。

      • VIM:VI的增强版,增加了语法高亮、代码折叠等功能,更适合代码编写。

    2. 三种模式

      • 命令模式:进入VI编辑器后的默认模式,可使用快捷键进行光标移动、删除、查找等操作。

      • 编辑模式:用于编辑文件内容,从命令模式按 i 进入编辑模式,按 ESC 退出回到命令模式。

      • 末行模式:用于执行保存、退出等命令,从命令模式按 : 进入末行模式。

    VI编辑器的使用场景

    1. 编辑已有文件

      • 命令:vi filename

      • 示例:vi /tmp/1.txt

    2. 新建文件

      • 命令:vi newfile

    一般模式

    1. 常用快捷键

      • 光标移动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 全文替换 oldnew

    编辑模式

    1. 进入编辑模式的方法

      • i:在光标前插入

      • a:在光标后插入

      • o:在当前行下方新建一行并插入(O为上一行)

    • 在行首插入I(进入插入模式,在行首插入)

    • 在行尾插入A(进入插入模式,在行尾插入)

    • 替换模式R(进入替换模式,逐字符替换)

    末行模式

    1. 末行模式常用命令

      • :w:保存文件

      • :q:退出VI编辑器

      • :wq:保存并退出

      • :q!:强制退出不保存

    • 另存为:w newfilename(将文件另存为 newfilename

    • 读取文件:r filename(在当前文件中读取并插入 filename 的内容)

    • 设置行号:set number(显示行号),:set nonumber(取消显示行号)

    Linux系统启动与关闭

    系统运行级别

    知识点

    1. CentOS 6 运行级别 (level) init

      • 0:关机模式

      • 1:单用户模式

      • 2:无网络的多用户模式

      • 3:有网络的多用户模式(文本界面)

      • 4:未使用

      • 5:有网络的多用户模式(图形界面)

      • 6:重启模式

    2. 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:重启

    image-20240725170633866.png

    拓展

    • 运行级别的实际应用:

      • 不同运行级别对应不同的系统状态,可以根据需要选择合适的运行级别,例如在进行系统维护时使用单用户模式。

      • CentOS 7/8 通过 systemctl 命令管理运行级别 (挂软链接) ,取代了旧版的 init 命令。

    实践操作

    • 查看当前运行级别

      systemctl get-default
    • 切换运行级别

      systemctl set-default multi-user.target  # 设置为多用户模式
      systemctl set-default graphical.target   # 设置为图形界面模式

      image-20240717160123946.png

    系统关闭与重启

    知识点

    1. 系统关闭命令

      Power Off

      halt(不停止主板供电)

      shutdown

      shutdown -h now

      shutdown now

      shutdown -H now

      halt –p

      halt

      init 0(会缺少一个sync的过程)

      halt -f

      poweroff:当你希望系统完全关闭并切断电源时使用,例如在工作完成后关闭计算机。

      halt:当你希望系统停止运行,但保持电源供应(例如进行某些维护任务或准备进行硬件维护)时使用。

    2. 系统重启命令

      • init 6:立即重启

      • reboot:立即重启

      • shutdown -r now:立即重启

    拓展

    • shutdown命令详解:

      • shutdown 命令在关机之前会通知所有登录用户,并且冻结新的用户登录。

      • 使用 shutdown 命令关闭系统会先调用 sync 工具,将内存中的数据进行持久化。

      • 随后Shutdown指令会将信号发给init程序,要求它更改runlevel为0

      • 区分 shutdown 命令的不同参数,理解 haltpower off 的区别。

    实践操作

    • 计划关机

      shutdown -h +10  # 计划在10分钟后关机
    • 取消计划关机

      shutdown -c  # 取消已计划的关机

    Linux基础运维命令

    命令帮助

    知识点

    1. 获取命令帮助

      • command -hcommand --help:快速查看命令的简要使用方法。

      • man command:使用man手册查看命令的详细帮助信息,可以使用空格键翻页,[q]退出。

    历史命令

    知识点

    1. 查看历史命令

      • history:显示所有历史命令。

      • HISTTIMEFORMAT:设置历史命令显示时间戳。

    总线连接设备查看

    知识点

    1. 查看PCI设备

      需要查看系统上所有的PCI设备时(比如说CPU、USB、Memory、Ethernet Card、Raid Card等等)

      • lspci:列出所有的PCI总线设备。

        image-20240717163423185.png

      lspci 命令是由 pciutils 包提供的

    2. 查看所有硬件设备

      • dmidecode:显示系统的硬件信息。

        PCI 和硬件设备区别:

        项目

        PCI(Peripheral Component Interconnect)

        硬件设备

        定义

        一种标准总线接口,用于连接计算机主板和附加设备

        计算机系统中的任何物理组件

        功能和用途

        提供标准化接口,支持设备插拔和升级,高速数据传输

        执行具体计算任务和功能,如计算、存储、显示等

        物理形态

        插槽形式出现在主板上,有不同版本如PCIe

        各种形态和尺寸,如显卡、网卡、硬盘、内存等

        例子

        PCIe插槽,用于插入显卡

        显卡、网卡、声卡、硬盘、SSD、内存条等

    补充:lsblk看树状的目录

    image-20240725185540059.png

    时间查看与配置

    知识点

    1. 查看和设置系统时间

      • timedatectl:查看和设置系统时间和时区。

      • timedatectl set-time yyyy-mm-dd hh:mm:ss:设置系统时间。

      • timedatectl set-timezone ZONE:设置系统时区。

        image-20240717164108106.png

      • timedatectl list-timezones:列出所有可用时区。

    使用率与性能分析

    知识点

    1. CPU使用率查看

      • top:实时显示系统的CPU、内存使用情况和当前进程。

        image-20240725191651888.png

        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.

      • htoptop 的增强版,提供更友好的用户界面和更多功能。

    2. 内存使用率查看

      • free -h:显示系统的物理内存和交换内存的使用情况。

        image-20240717165012634.png

    3. 存储使用率查看

      • df -h:显示文件系统的磁盘使用情况。(du查看的是磁盘目录,定位文件位置)

        image-20240717164927773.png

    4. I/O性能分析

      • iotop:显示I/O使用情况,帮助分析磁盘读写性能。

    文件和目录管理

    文件类型

    知识点

    1. 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.txtvim 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.txtless file.txt 读取文件内容。

    • 查看命令

      stat -c %x filename
    设置文件系统行为

    在现代 Linux 文件系统中,默认情况下会优化 atime 的更新频率,以减少磁盘写入操作,提升性能。以下是一些常见的 atime 相关挂载选项:

    1. relatime(默认):

      • 只在 atime 小于 mtime 或 ctime 时更新。

      • 提供了性能和兼容性之间的平衡。

    2. noatime

      • 禁止更新 atime,提升性能。

      • 适用于不依赖 atime 的应用。

    3. nodiratime

      • 禁止更新目录的 atime。

    4. strictatime

      • 强制每次访问都更新 atime,性能较低。

    可以通过 mount 命令设置这些选项。例如:

    mount -o remount,noatime /mnt/mydisk
    自动删除未访问的文件

    可以使用 tmpwatchfind 命令结合 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] 文件

    1. 目录管理

      • 创建目录mkdir -p 目录(-parents 创建父目录)

      • 进入目录cd 目录

      • 打印当前目录pwd

      • 删除目录rm -r 目录

    2. 链接管理

      • 创建链接ln 实际文件 链接文件(软链接使用ln -s

      • 删除链接rm 链接文件

    实践操作

    # 链接操作
    ln -s /tmp/test.txt /test_link  # 创建软链接
    rm /test_link                # 删除链接

    image-20240717173836609.png

    查看、查找文件

    知识点

    1. 文件查询

      • 可执行文件查询which 命令

      • 在特定目录寻找文件whereis 文件名

      • 在已建立的数据库中寻找文件locate [-ir] 关键字

      • 寻找文件find [PATH] option action

    实践操作

    which ls                   # 查找可执行文件的位置
    whereis test.txt           # 在特定目录中查找文件
    locate test.txt            # 在数据库中查找文件
    find / -name test.txt      # 在根目录下查找文件

    文件压缩、归档、拆分和合并

    压缩与归档

    知识点

    1. 压缩与归档的区别

      • 压缩:将文件内容进行编码,以减少文件占用的存储空间。常见工具包括 gzipbzip2 等。

      • 归档:将多个文件或目录打包成一个文件,以便于传输或备份。常见工具包括 tar

    2. 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

    image-20240717203446596.png

    检查归档文件存在:

    image-20240717203550427.png

    或者直接查看归档文件内容:

    image-20240717203900678.png

    指定解压到opt目录

    image-20240717203745725.png

    拆分与合并

    知识点

    1. split 命令

      • split 命令用于将一个大文件拆分成多个小文件,方便传输或存储。

      • 常用参数:

        • -a:指定输出文件名的后缀长度(默认为2个字符)

        • -d:使用数字作为后缀

        • -b:指定输出文件的大小,可以使用 kmg 等单位

    2. cat 命令

      • cat 命令用于连接文件内容,通常用于将拆分的文件重新合并成一个文件。

    实践操作

    # 将大文件拆分成每个100MB的小文件
    split -b 100M largefile.bin part_
    
    # 将拆分的小文件重新合并成一个文件
    cat part_* > largefile_reconstructed.bin

    分区管理与挂载管理

    文件系统

    知识点

    1. 文件系统概述

      • 文件系统是操作系统用来管理存储设备上数据的一种方式。

      • 不同操作系统支持不同的文件系统类型,如Windows支持FAT32、NTFS,Linux支持EXT4、XFS等。

    2. 文件系统结构

      • inode:存储文件的元数据(如权限、所有者等)。

      • data block:存储文件实际数据。

      • superblock:记录文件系统的总体信息(如inode与block的总量、使用量、剩余量等)。

    实践操作

    1. 查看文件系统类型和使用情况

      df -Th

      df 命令用于报告文件系统的磁盘空间使用情况。-T 选项显示文件系统类型,-h 选项以人类可读的格式显示输出。

      image-20240718153717543.png

    2. 查看指定目录的磁盘使用情况

      du -sh /path/to/directory

      du 命令用于估算文件和目录的磁盘使用空间。-s 选项显示总计,-h 选项以人类可读的格式显示输出。

    磁盘的分区、格式化与挂载

    知识点

    1. 磁盘分区

      • 分区是将硬盘划分为多个独立区域,每个区域可以作为一个独立的逻辑磁盘使用。

      • 分区类型:MBR(主引导记录)和GPT(GUID分区表)。

        • MBR:支持最多4个主分区或3个主分区加1个扩展分区,总大小限制为2TB。

        • GPT:支持无限制的分区数量,且支持大于2TB的分区。

    2. 格式化

      • 格式化是指将分区初始化为特定的文件系统,以便操作系统使用。

      • 常用格式化命令:mkfs.xfsmkfs.ext4

        特性

        EXT4

        XFS (现在用的更多)

        引入年份

        2008

        1994

        设计目标

        通用文件系统

        高性能、可扩展的文件系统

        最大文件系统大小

        1 EB(Exabyte)

        8 EB(Exabyte)

        最大文件大小

        16 TB(Terabyte)

        8 EB(Exabyte)

        预分配空间

        支持(fallocate

        支持(xfs_io

        延迟分配

        支持

        支持

        碎片整理

        支持(e4defrag

        支持(xfs_fsr

        日志记录

        支持元数据和数据日志

        支持元数据日志

        写时复制(CoW)

        不支持

        支持通过 reflink 实现

        快照

        不原生支持,需要通过 LVM 或其他工具实现

        支持,通过 Snapper 等工具实现

        文件系统检查

        较快(fsck.ext4

        较慢(xfs_repair

        卷大小调整

        支持在线调整和离线调整

        仅支持在线扩展

        性能

        对小文件和目录较多的情况表现优异

        对大文件和高并发操作表现优异

        延展性

        较好

        极好

        成熟度

        稳定,广泛使用

        稳定,适合高性能需求

        常见应用场景

        通用用途,桌面系统,服务器

        数据库,大数据,高性能计算

    3. 挂载

      • 挂载是将分区或设备与文件系统的某个目录关联,使其内容可通过该目录访问。

      • 常用挂载命令:mount,取消挂载命令:umount

    实践操作

    1. 使用fdisk进行MBR分区

      fdisk /dev/sda

      fdisk 交互界面中,可以使用以下命令:

      • n:新建分区

      • d:删除分区

      • p:显示分区表信息

      • w:保存并退出

        image-20240718113007730.png

    2. 使用parted进行GPT分区

      parted /dev/sdb

      parted 交互界面中,可以使用以下命令:

      • mklabel gpt:创建GPT分区表

      • mkpart primary ext4 0% 100%:创建主分区,文件系统类型为ext4,覆盖整个磁盘

    3. 格式化分区为XFS文件系统

      mkfs.xfs /dev/sdb1
    4. 挂载分区

      mount /dev/sdb1 /mnt
    5. 取消挂载

      umount /mnt

    设定开机自动挂载

    知识点

    1. 自动挂载配置

      • 系统启动时,读取/etc/fstab文件进行自动挂载配置。

      • fstab文件中的每一行定义一个文件系统的挂载点、文件系统类型、挂载选项等。

    2. fstab文件格式

      • 设备文件名或UUID

      • 挂载点

      • 文件系统类型

      • 挂载选项(如defaults)

      • dump选项(备份)

      • fsck选项(文件系统检查)

    实践操作

    1. 编辑/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
    2. 验证自动挂载配置

      sudo mount -a

      mount -a 命令会根据 fstab 文件中的配置挂载所有未挂载的文件系统。

      reboot后验证:

      image-20240718162955496.png

    LVM(Logical Volume Management)

    LVM 原理剖析

    知识点

    1. LVM 概述

      • LVM 是 Linux 系统下对磁盘分区进行管理的工具,适合管理大存储设备,并允许用户动态调整文件系统的大小。

      • LVM 可以将多个物理分区整合成一个虚拟磁盘,并支持在未来增加或移除物理分区。

    2. LVM 基本元素

      • PV(Physical Volume,物理卷):由分区创建而成,是 LVM 最底层的概念。

      • VG(Volume Group,卷组):由 PV 组成的集合,可以将多个 PV 组合在一起。

      • PE(Physical Extent,物理区块):PV 中可以分配的最小存储单元,类似于分区里的 Block。

      • LV(Logical Volume,逻辑卷):在 VG 中重新划分出的元素,可以理解为“逻辑分区”。

    LVM 的创建、删除、扩容、缩容

    知识点

    1. 创建 LVM

      • 创建 PVpvcreate 分区名称

      • 创建 VGvgcreate VG名称 PV名称

      • 创建 LVlvcreate –L 大小 –n 名字 VG名称

    2. 删除 LVM

      • 删除 LVlvremove LV

      • 删除 VGvgremove VG

      • 删除 PVpvremove PV

    3. 扩容 LVM

      • 扩容 LVlvextend –L 大小 LV的路径(大小可以通过带 + 表示增加的大小)

      • 扩容 VGvgextend VG PV

    4. 缩容 LVM

      • 缩容操作较为复杂且不常用,通常建议通过清理数据而非缩减分区大小。

    实践操作

    1. 创建 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
    2. 扩容 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命令展示如下:

    image-20240725102234407.png

    接下来对文件格式化mkfs.xfs /dev/vg00/lvtestdir

    接着挂载到mount /dev/vg00/lvtestdir /mnt,此时用df -h命令查看,为何filesystem的路径变为了/dev/mapper/vg00-lvtestdir???

    image-20240725102737544.png

    在查阅后得知

    image-20240725103245883.png

    • 当创建逻辑卷时,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 的条带化创建

    知识点

    1. 条带化创建

      • 条带化(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?

    知识点

    1. 内存与存储

      • 内存(Memory):用于暂时存放CPU运算数据和外部储存器交换数据的随机存储器。断电后,数据会消失。

      • 存储(Disk):通常为机械硬盘或固态硬盘,用于长时间存储数据。存储设备在断电后数据依然存在。

    2. 内存与存储的区别

      • 性能:内存通过总线直接连接到CPU,速度快。存储通过其它接口连接,速度相对较慢。

      • 用途:内存用于临时存放正在处理的数据和指令,存储用于保存长期数据。

    3. SWAP的定义

      • SWAP(交换分区):是使用存储来扩展内存的技术。当系统内存耗尽时,SWAP 提供一个缓冲空间,避免系统宕机。

      • vm.swappiness:定义 SWAP 使用的阈值,表示当系统内存剩余到一定程度时开始使用 SWAP。

    SWAP管理

    实践操作

    1. 创建SWAP

      mkswap /dev/sda2
    2. 挂载SWAP

      swapon /dev/sda2
    3. 卸载SWAP

      swapoff /dev/sda2
    4. 扩容SWAP

      swapoff /dev/sda2
      lvextend -L +1G /dev/vg0/swaplv
      mkswap /dev/vg0/swaplv
      swapon /dev/vg0/swaplv

    用户和组管理

    基础

    用户标识符

    1. 理解UID和GID

      • 用户ID (UID):分配给系统中每个用户的唯一标识符。

      • 组ID (GID):分配给系统中每个组的唯一标识符。

    2. UID和GID的重要性

      • 在Linux中,系统通过UID和GID识别用户和组,而不是通过名称。

      • 每个文件和目录在Linux中都有一个关联的UID和GID,指示其所有者和所属组。

    用户配置文件

    1. 理解 /etc/passwd

      • /etc/passwd 文件包含用户账户信息。每个用户在这个文件中有一行,包含几个字段。

      • 示例条目:root:x:0:0:root:/root:/bin/bash

        • 用户名root

        • 密码x(实际密码存储在 /etc/shadow

        • UID0

        • GID0

        • 用户信息root

        • 主目录/root

        • Shell/bin/bash

    组配置文件

    1. 理解 /etc/group

      • /etc/group 文件包含组信息。每个组在这个文件中有一行,包含几个字段。

      • 示例条目:mail:x:12:postfix

        • 组名mail

        • 密码x(实际密码存储在 /etc/gshadow

        • GID12

        • 组成员postfix


    管理、切换

    组管理

    1. 创建组

      • 命令:groupadd -g GID groupname

    2. 修改组配置

      • 命令:groupmod -g new_GID -n new_groupname old_groupname

    3. 删除组

      • 命令:groupdel groupname

        image-20240719144035471.png

    sssd版本过低导致报错,在

    rm -rf /var/lib/sss/db/*
    systemctl restart sssd

    之后成功解决问题

    image-20240719144838593.png

    用户管理

    1. 创建用户

      • 命令: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

    2. 修改用户属性

      • 命令:usermod [options] LOGIN

        • 选项包括更改主目录 (-d),主组 (-g),附加组 (-G),Shell (-s) 等。

      • 锁定和解锁账户:usermod -L(锁定),usermod -U(解锁)

    3. 更改用户密码

      • 命令:passwd username

      • 查看密码参数:chage -l username

    4. 删除用户

      • 命令:userdel -r username

      • 查看基本用户信息:id username

    用户身份切换

    1. 切换用户

      • 命令:su - username(使用新用户的环境变量)

      • 命令:su username(使用当前用户的环境变量)

      • 命令:su - username -c "command"(以另一个用户的环境变量和权限执行命令)

    2. 使用sudo

      • sudo 允许授权用户以超级用户或另一个用户的身份执行命令,具体由安全策略指定。

      • /etc/sudoers 文件中的配置示例:

        user ALL=(ALL) ALL
        %group ALL=(root) NOPASSWD: /path/to/command

    权限管理

    文件权限

    1. 文件属性

      • 文件属性在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表示目录,-表示文件。后面九个字符分为三组,分别代表属主、属组和其他用户的权限。

    2. 权限表示

      • 每组三个字符,分别由r(读)、w(写)、x(执行)组成。

      • 对文件和目录的权限含义:

        • 文件:

          • r:查看文件内容

          • w:修改文件内容

          • x:可执行文件(如程序或脚本)

        • 目录:

          • r:查看目录下的文件和目录名称

          • w:在目录下增删改文件和目录

          • x:进入该目录

    3. 数字表示法

      • 权限的数字表示法:r=4w=2x=1

      • 例如:drwxr-xr-x 表示权限为755。


    权限设置

    1. 更改文件属组

      • 命令:chgrp

      • 由于chown命令可以更改属主和属组,一般不用chgrp

    2. 更改文件属主

      • 命令:chown [OPTION] [OWNER][:[GROUP]] FILE

      • 常用选项:-R 递归更改,将目录下所有文件和目录的属主和属组都进行更改。

    3. 更改文件权限

      • 命令:chmod [OPTION]... MODE[MODE]... FILE...

      • 权限模式可以用数字表示法,例如chmod 777 test.txt,将test.txt的权限更改为rwxrwxrwx

      • 也可以通过u+xu-x等命令进行精准调整。


    文件访问控制ACL模型

    1. ACL概述

      • ACL(Access Control List)提供了比传统的属主、属组、其他用户的读写执行权限更细致的权限设置。

      • ACL可以针对单个用户、单个文件或目录进行rwx权限规范,非常适合需要特殊权限的情况。

      • ACL在多用户环境中尤其有用,因为它允许为特定用户或用户组设置特定权限,而不影响其他用户的权限。

    2. 设置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
    3. 查看ACL

      • 使用getfacl命令查看ACL。

      • 基本语法:

        getfacl file
      • 例如,查看文件example.txt的ACL:

        getfacl example.txt
    4. 删除ACL

      • 使用setfacl命令删除ACL。

      • 基本语法:

        setfacl -x u:username file
        setfacl -b file  # 删除所有ACL
      • 例如,删除用户bob在文件example.txt上的ACL:

        setfacl -x u:bob example.txt
    5. 默认ACL

      • 可以为目录设置默认ACL,以便新创建的文件和子目录继承这些ACL。

      • 基本语法:

        setfacl -m d:u:username:permissions directory
      • 例如,将目录/shared设置为用户alice具有读写执行权限:

        setfacl -m d:u:alice:rwx /shared

    软件管理

    RPM

    知识点

    1. 软件包概述

      • 就像我们手机、电脑安装软件包一样,Linux 开发商也会对软件进行包装:

        1. 在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好。

        2. 将这个软件的所有相关文件打包成为一个特殊格式的文件。

        3. 发布打包好的文件给客户端下载安装。

        4. 客户端取得文件后,用特定的指令安装,检测依赖关系并完成安装。

    2. 常见的软件安装方式

      • dpkg:Debian Linux 社群开发,主要用于 B2D、Ubuntu 等。

      • RPM:Red Hat 开发,使用广泛,如 Fedora、CentOS、SuSE 等。

    RPM命令

    1. 软件包命名规则

      • 格式:tar-1.26-35.el7.x86_64

        • tar:软件名

        • 1.26:主版本

        • 35:修订次数

        • el7:适配系统

        • x86_64:适配CPU架构

    2. 安装命令

      • rpm -ivh rpm包全名:安装软件包

      • 选项:

        • -i:安装

        • -v:打印安装信息

        • -h:以#号展示安装进度

      • 测试安装:--test 参数

    3. 卸载命令

      • rpm -e rpm包全名:卸载软件包

    4. 升级命令

      • rpm -Uvh rpm包全名:升级软件包

      • 跳过依赖检查:--nodeps 参数

    5. 查询命令

      • rpm -q 软件名:查询软件包

      • 查看所有已安装软件:-a 参数

      • 查看详细信息:-i 参数

      • 查看安装位置:-l 参数

      • 查看依赖关系:-R 参数

    思考与延伸

    • RPM的优势和不足

      • 优势:便捷性和易用性,广泛使用。

      • 不足:手动处理依赖关系繁琐,容易出现依赖地狱问题。


    YUM

    知识点

    1. YUM概述

      • YUM(Yellowdog Updater Modified)是一个RPM包管理工具,可以解决RPM包安装过程中遇到的依赖关系问题。

      • YUM可以从多个源中搜索软件及其依赖包,并自动安装相应的依赖软件。

    2. YUM的原理

      • YUM将所有RPM软件包存放在一起,分析依赖关系,记录成依赖列表,统称为软件仓库(repository)。

      • 客户端读取repository,根据需求选取对应的rpm包进行安装。

    YUM命令

    1. 基本命令

      • 列出所有软件包:yum listrpm -qa

      • 查看软件包信息:yum inforpm -qai

      • 搜索软件包:yum search 关键字

    2. 安装软件包

      • yum install 软件包名:安装软件包及其依赖包

      • yum groupinstall 软件组名:安装软件包组及依赖包

    3. 更新软件包

      • yum update 软件包名:升级软件包

      • yum group update 软件组名:升级软件包组及依赖包

    4. 移除软件包

      • yum remove 软件包名:移除软件包

      • yum group remove 软件组名:移除软件包组及依赖包

    5. 管理repository

      • 列出所有可用的repository:yum repolist all

      • 配置文件存放在 /etc/yum.repos.d 目录下,以 .repo 结尾的文件为repository配置文件。

    示例

    1. 配置YUM源

      cat /etc/yum.repos.d/local.repo
      
      [rhel7]
      name=reh17
      baseurl=file:///mnt
      enabled=1
      gpgcheck=0
    2. 更新repository

      yum clean all  # 清空yum缓存信息
      yum makecache  # 更新yum repository缓存信息
      yum list       # 检查读取软件包是否顺利

    源码编译安装

    1. 源码安装概述

      • 除了使用RPM和YUM安装已经编译好的软件包,还可以通过源码编译安装软件。

      • 源码编译安装需要自行完成编译工作,适合对软件进行自定义配置和优化。

    2. 安装步骤

      • 以Nginx为例:

        1. 安装依赖:

          yum -y install gcc* pcre-devel openssl-devel
        2. 解压源码包:

          tar -xvf nginx-1.9.9.tar.gz
          cd nginx-1.9.9/
        3. 运行configure并指定安装位置:

          ./configure --prefix=/usr/local/nginx/
        4. 编译安装:

          make && make install

    Shell

    Shell简介

    1. Shell的定义和作用

      • 完整的计算机系统包括硬件和软件。软件分为系统软件和应用软件。系统软件的内核部分负责管理和操作硬件,但用户无法直接与内核交互。用户通过应用程序或部分系统软件发出指令,这些指令会被翻译并传给内核。

      • 在Linux系统下,用户可以通过Shell与内核进行沟通,从而使用计算机资源。Shell是一个命令解释器,为用户和操作系统之间提供了一个接口。此外,Shell也是一种编程工具,称为脚本语言。与编译型语言(如C/C++、Java)不同,脚本语言是解释执行的,编写后无需编译即可运行。

      • 登录系统时会启动一个Shell,这个信息存储在用户配置文件/etc/passwd的最后一列。

    2. Bash的功能

      • Tab键自动补全命令和文件名。

      • 设置别名(alias)以便快捷使用常用命令。

      • 后台执行任务和控制作业(jobs、bg、fg等)。

      • 执行Shell脚本。

      • 使用通配符进行文件名匹配(如/etc/sys*表示/etc/目录下所有以sys开头的文件或目录)。

    变量

    1. 变量的定义

      • 变量在Bash环境中非常重要。每个用户登录系统时都会获得一个Bash Shell,每个人都可以在Bash中运行进程和服务。程序运行时需要的参数通过环境变量获取。

    2. 变量的使用

      • 查看变量值:echo $变量名,如:echo $PATH

      • 设置变量:

        myname=test
      • 变量与内容之间不能有空格,如:myname = test是错误的。

      • 变量名可以包含字母和数字,但不能以数字开头。

      • 变量内容中包含空格时,需要使用引号:

        var="lang is $LANG"
      • 使用export命令将变量变成环境变量:

        export PATH
      • 取消变量:

        unset 变量名
    3. 环境变量

      • 环境变量是全局变量,存在于所有Shell中,并具有继承性。环境变量定义了很多系统运行所需的变量,即使产生了子进程也可以继承父进程的环境变量。

      • 查询环境变量:env

      • 查询所有变量:set

      • 自定义变量转为环境变量:export

      • 环境变量配置文件:

        • 全局配置文件:/etc/profile

        • 用户配置文件:用户家目录下的.bash_profile

    字符处理命令

    1. 排序命令:sort

      • sort [-fnr] 文件名/目录名

        • -f:忽略大小写

        • -n:按数值排序

        • -r:反向排序

    2. 取消重复行:uniq

      • uniq [-ic] 文件名/目录名

        • -i:忽略大小写

        • -c:统计重复行的次数

    3. 统计:wc

      • wc [-cwl] 文件名/目录名

        • -c:统计字符数

        • -l:统计行数

    4. 行提取命令:grep

      • grep [-cinvo] "关键词" 文件名

        • -c:统计符合条件的行数

        • -i:忽略大小写

        • -n:输出行号

        • -v:反向查找

        • -o:只列出关键词

    管道和重定向

    1. 管道符:|

      • 将前一个命令的输出作为后一个命令的输入。

      • 示例:

        ls -a /etc/ | more
        rpm -qa | grep httpd
    2. 重定向

      • 标准输入输出:

        • 标准输入:/dev/stdin,文件描述符:0

        • 标准输出:/dev/stdout,文件描述符:1

        • 标准错误输出:/dev/stderr,文件描述符:2

      • 输出重定向:

        • 命令 > 文件:以覆盖方式将正确输出重定向到文件

        • 命令 >> 文件:以追加方式将正确输出重定向到文件

        • 错误命令 2> 文件:以覆盖方式将错误输出重定向到文件

        • 错误命令 2>> 文件:以追加方式将错误输出重定向到文件

        • 命令 > 文件 2>&1:以覆盖方式将正确输出和错误输出重定向到同一个文件

        • 命令 >> 文件 2>&1:以追加方式将正确输出和错误输出重定向到同一个文件

    进程管理

    进程了解

    1. 进程的定义

      • 当系统触发任何一个事件时,系统都会将其定义为一个进程,并给这个进程一个ID(PID)。根据启动这个进程的用户,系统会给这个PID一组权限。进程是在系统中执行任何程序或指令时触发的。

    2. 父进程和子进程

      • 进程之间存在相关性。例如,当我们使用root用户登录到系统时,系统会产生一个bash进程,这个bash进程的PID的属主和属组是root:root。如果我们执行su命令进行用户切换,如su – test,系统会赋予第二个进程su一个新的PID和全新的权限test:test,并产生一个新的test用户的bash。第一个进程称为第二个进程的父进程,第二个进程是第一个进程的子进程。

    进程管理

    进程的控制和管理

    1. 后台执行

      • 当执行一些耗时较长的命令时,可以在命令后加上&,将命令放在后台执行,完成后返回结果。

    2. 暂停和恢复进程

      • [CTRL]+[Z]:将当前工作进程放到后台并暂停。

      • jobs:查看当前正在后台工作的进程。

      • fg:将后台进程放到前台执行。

      • bg:将后台进程在后台继续执行。

    3. 脱机管理

      • 使用nohup命令可以在终端关闭后继续运行进程。

        nohup [指令与参数] &

    进程的查看和释放

    1. 查看进程

      • ps:将当前时间点的进程状况取出。常用命令:

        ps aux
        ps -ef
    2. 查看进程树

      • pstree:将当前时间点的进程树展示。

    3. 动态查看进程状态

      • top:动态展示进程状态,包括CPU和内存的使用情况。

    4. 释放进程

      • kill:通过发送信号来释放进程。常用信号包括:

        • 1:SIGHUP,重启进程。

        • 2:SIGINT,中止进程。

        • 9:SIGKILL,强制中断进程。

        • 15:SIGTERM,正常结束进程。

        • 19:SIGSTOP,暂停进程。

    特殊文件和进程

    /proc目录中的内容

    1. 进程信息

      • 系统中的所有进程信息都存放在内存中,并写入到/proc目录下。每个进程的PID以目录的形式存在于/proc中。

    2. 特殊文件

      • /proc/meminfo:记录当前系统内存的所有相关信息。

      • /proc/cpuinfo:记录当前系统CPU的所有相关信息。

    特殊命令

    1. fuser

      • 根据文件来获取使用该文件的进程。

        fuser [-umv] [-k [i] [-signal]] file/dir
    2. 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来进行服务控制。其特征如下:

      1. 平行处理所有服务,加速开机流程。

      2. systemctl管理所有的服务只需使用systemctl指令,不再需要init、service、chkconfig等命令。

      3. systemctl在启动服务时会进行服务依赖性的自我检查,帮助同步启动依赖服务。

      4. systemctl将所有服务定义为一个服务单位(unit),并根据unit进行分类,如service、target、socket、path等。

      5. systemctl会将许多功能集合为一个target项目,有时执行一个target项目就是执行多个daemon的集合。

      6. 向下兼容,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名

    注意事项

    • 虽然服务也是一个运行在内存中的程序,但不要使用类似killfuser -kc的命令停止服务。这样会导致systemctl无法继续监控服务的进度和状态。

    systemctl管理的服务状态解析

    • active (running):服务运行中。

    • active (exited):执行了一次正常结束的服务,目前系统中没有任何相关程序执行。

    • active (waiting):当前服务正在运行中,但需要等待其它事件完成才能继续处理。

    • inactive:服务未运行。

    • enabled:服务设置为开机自启。

    • disabled:服务未设置为开机自启。

    • static:服务不可以设置开机自启,但可能被其它enabled的服务唤醒(依赖关系)。