佚名运维训练营-第一天

  1. 常用的Linux系统有哪些?

    Red Hat Enterprise Linux、CentOS、Ubuntu、Debian、SUSE Linux Enterprise Server、Fedora

  2. 哪些Linux系统属于国产化

    统信UOS (UnionTech OS)、银河麒麟 (KylinOS)、开放麒麟 (openKylin)、优麒麟 (Ubuntu Kylin)、中兴新支点操作系统 (NewStartOS)

  3. 哪些系统使用yum,哪些使用apt

    Linux 系统根据其所属的发行版家族,会使用不同的包管理工具。最常见的两大家族是 Debian 系Red Hat 系

    使用 apt​ (或 apt-get​, aptitude​) 的系统

    apt​ 是 Advanced Package Tool 的缩写,它是 Debian 及其衍生发行版上用于管理软件包的命令行工具。这些系统通常使用 .deb​ 格式的软件包。

    主要使用 apt的系统包括:

    • Debian:所有 Debian 版本的官方包管理器。

    • Ubuntu:基于 Debian,是目前最流行的桌面 Linux 发行版之一。

    • Linux Mint:基于 Ubuntu 或 Debian。

    • Elementary OS:基于 Ubuntu。

    • Kali Linux:基于 Debian,专注于渗透测试。

    • Deepin (深度操作系统) :基于 Debian。

    • Ubuntu Kylin (优麒麟) :Ubuntu 的中国本地化版本。

    • 统信 UOS:基于 Debian,国产化操作系统。

    • 其他所有直接或间接基于 Debian 的发行版。

      常用 apt命令示例:

    • sudo apt update​:更新软件包索引(同步仓库列表)。

    • sudo apt upgrade​:升级所有可用的软件包。

    • sudo apt install <package_name>​:安装软件包。

    • sudo apt remove <package_name>​:卸载软件包(保留配置文件)。

    • sudo apt purge <package_name>​:彻底卸载软件包(包括配置文件)。

    • apt search <keyword>​:搜索软件包。

      使用 yum​ 或 dnf​ 的系统

      yum​ (Yellowdog Updater, Modified) 是 Red Hat 系 Linux 发行版较早使用的包管理器。然而,在较新的 Red Hat 系发行版中,yum​ 已经被 dnf(Dandified YUM) 所取代,dnf​ 旨在解决 yum​ 存在的一些性能和依赖解析问题,并提供更现代的API。尽管如此,在许多新系统中,yum​ 命令仍然作为 dnf​ 的一个别名存在,以提供向后兼容性。这些系统通常使用 .rpm​ 格式的软件包。

      主要使用 yum(或现在更多是 dnf) 的系统包括:

    • Red Hat Enterprise Linux (RHEL) :在 RHEL 8 及更高版本中,dnf​ 是默认的包管理器(yum​ 是 dnf​ 的别名)。RHEL 7 及更早版本主要使用 yum​。

    • CentOS

      • CentOS 7 及更早版本使用 yum​。

      • CentOS 8 及 CentOS Stream 8/9 使用 dnf​。

    • Fedora:从 Fedora 22 开始,dnf​ 成为默认包管理器。

    • AlmaLinux:RHEL 的免费、开源替代品,使用 dnf​。

    • Rocky Linux:RHEL 的免费、开源替代品,使用 dnf​。

    • Oracle Linux:使用 dnf​。

    • openSUSE:虽然它也是 RPM 系的,但它有自己独特的包管理器 zypper​,而不是 yum​ 或 dnf​。

    • 国产化系统中基于 Red Hat 系的: 例如一些基于 openEuler 的发行版,可能会使用 dnf​。

      常用 dnf(或 yum) 命令示例:

    • sudo dnf update​ (或 sudo yum update​):更新所有可用的软件包。

    • sudo dnf install <package_name>​ (或 sudo yum install <package_name>​):安装软件包。

    • sudo dnf remove <package_name>​ (或 sudo yum remove <package_name>​):卸载软件包。

    • dnf search <keyword>​ (或 yum search <keyword>​):搜索软件包。

    • dnf repolist​ (或 yum repolist​):列出已配置的软件仓库。

      总结来说:

    • Debian 系(如 Debian, Ubuntu, Linux Mint, Deepin, UOS 等)使用 apt​。

    • Red Hat 系(如 RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux 等)较新的版本使用 dnf​,旧版本使用 yum​。

      在 Ansible 中,你有专门的 apt​ 模块和 dnf​ (或 yum​) 模块,Ansible 会根据你指定的模块和远程主机的操作系统类型来选择正确的包管理器。

  4. yum与apt有什么区别

    1. 所属发行版家族

    • apt​: 主要用于 Debian 及其衍生发行版

      • 典型系统: Debian, Ubuntu, Linux Mint, Elementary OS, Kali Linux, Deepin, 统信UOS, Ubuntu Kylin 等。

    • yum​: 主要用于 Red Hat 及其衍生发行版

      • 典型系统: Red Hat Enterprise Linux (RHEL) (旧版本), CentOS (旧版本), Fedora (旧版本), Oracle Linux。

      • 重要说明: 在较新的 Red Hat 系发行版中,yum​ 已经被 dnf(Dandified YUM) 取代。dnf​ 是 yum​ 的下一代,提供了更好的性能和依赖解析能力。虽然 yum​ 命令在这些新系统上通常仍然可用(作为 dnf​ 的别名),但底层实际执行的是 dnf​。因此,在讨论 Red Hat 系时,通常会提及 dnf​。

      2. 软件包格式

    • apt​: 使用 .deb​ 格式的软件包 (Debian Package)。

    • yum/ dnf​: 使用 .rpm​ 格式的软件包 (Red Hat Package Manager)。

      3. 底层工具

    • apt​: 是 dpkg​ (Debian Package) 的高级前端工具。dpkg​ 负责处理单个 .deb​ 文件的安装、卸载和信息查询,而 apt​ 负责处理复杂的依赖关系、从软件源下载软件包等。

    • yum/ dnf​: 是 rpm​ (Red Hat Package Manager) 的高级前端工具。rpm​ 负责处理单个 .rpm​ 文件的安装、卸载和信息查询,而 yum​ / dnf​ 负责处理依赖关系、从软件源下载等。

      4. 配置文件和软件源管理

    • apt​:

      • 主要的软件源配置文件是 /etc/apt/sources.list​。

      • 也可以通过 /etc/apt/sources.list.d/​ 目录下的独立文件来添加额外的软件源。

      • APT 的配置通常在 /etc/apt/apt.conf​ 文件中,并以树形结构组织。

    • yum/ dnf​:

      • 主要的配置文件是 /etc/yum.conf​ (或 /etc/dnf/dnf.conf​)。

      • 软件源通常通过 /etc/yum.repos.d/​ (或 /etc/yum.repos.d/​) 目录下的 .repo​ 文件来配置,每个文件定义一个或多个软件源。

      5. 常用命令对比

      虽然命令的目的相似,但具体命令有所不同:

      6. 依赖解析

      两者都具备强大的依赖解析能力,能够自动识别并安装软件包所需的其他软件包。dnf​ 相对于 yum​ 在依赖解析方面有显著改进,速度更快,冲突处理能力更强。

      7. 历史发展和命令行接口

    • apt​: 最初是 apt-get​ 和 apt-cache​ 等命令的集合。在 Ubuntu 16.04 及更高版本以及 Debian 9 (Stretch) 之后,引入了更友好的 apt​ 命令,它整合了 apt-get​ 和 apt-cache​ 的常用功能,并提供了更美观的输出。

    • yum​: 作为一个较老的工具,在依赖解析方面曾受到一些批评。dnf​ 作为其现代化替代品,解决了这些问题,并计划最终完全取代 yum​。

      总结

      yum​ (及 dnf​) 和 apt​ 是 Linux 世界中两大主流的软件包管理体系,它们各自服务于不同的发行版家族。对于用户和系统管理员来说,理解它们的主要区别在于:

    • 你使用的 Linux 发行版决定了你使用哪种包管理器。

    • 它们管理不同格式的软件包 (.rpm vs .deb)。

    • 它们的命令语法和配置文件路径有所不同。

  5. Linux安装系统之后,如何使用账号密码登录,截图你登录成功的界面。

  6. Linux下的目录结构是什么与Windows有什么区别

    Linux 目录结构 (遵循 Filesystem Hierarchy Standard - FHS)

    Linux 的文件系统是统一的,所有的文件和目录都挂载在一个单一的根目录 /(root directory) 下。没有驱动器盘符的概念。即使你有多个硬盘分区、USB 设备或网络共享,它们都会被“挂载”到 /​ 下的某个目录中,成为整个文件系统树的一部分。

    以下是 Linux 系统中一些重要的顶级目录及其常见用途:

    • /(Root Directory) :

      • 根目录,是整个文件系统层次结构的起点。所有其他目录和文件都位于它的下方。

    • /bin(Binaries) :

      • 存放所有用户都可用的基本命令行程序和可执行文件(如 ls​, cp​, mv​, rm​, cat​ 等),这些是在系统启动和基本操作时所必需的。

    • /sbin(System Binaries) :

      • 存放只有超级用户 (root) 才能执行的系统管理命令和可执行文件(如 fdisk​, reboot​, ifconfig​ 等)。

    • /boot​:

      • 存放引导系统所需的文件,包括 Linux 内核(vmlinuz​)、initrd 映像和 GRUB 引导加载器的相关文件。

    • /etc(Etc-etera) :

      • 存放系统范围的配置文件。几乎所有的系统服务、应用程序的配置文件都在这里(如 passwd​, fstab​, nginx.conf​, hosts​ 等)。

    • /dev(Devices) :

      • 存放设备文件,这些文件代表了系统中的硬件设备(如硬盘、光驱、终端等)。在 Linux 中,“一切皆文件”的概念在这里体现得很明显。

    • /home​:

      • 存放普通用户的家目录。每个用户通常有一个独立的子目录(例如 /home/username​),其中包含用户的个人文件、文档、配置和桌面设置等。

    • /root​:

      • root (超级用户) 的家目录。它与普通用户的 /home​ 目录分开,以提高安全性。

    • /lib(Libraries) :

      • 存放基本共享库文件,供 /bin​ 和 /sbin​ 中的可执行文件使用。

    • /usr(Unix System Resources) :

      • 这是一个非常大的目录,包含用户程序和资源。它通常是“Unix System Resources”的缩写,而不是“user”。

      • **​/usr/bin`**: 大多数用户应用程序的可执行文件(如 Firefox, LibreOffice)。

      • **​/usr/sbin`**: 非基本系统管理命令。

      • **​/usr/lib`**: 非基本程序库。

      • **​/usr/local`**: 存放本地安装的程序,通常是手动编译或安装的软件。

      • **​/usr/share`**: 存放程序共享的数据,如文档、图标、字体、Man pages 等。

    • /var(Variable data) :

      • 存放经常变化的文件,如系统日志文件 (/var/log​)、邮件队列 (/var/mail​)、缓存文件 (/var/cache​)、网站数据 (/var/www/html​) 等。

    • /tmp(Temporary) :

      • 存放临时文件。系统重启后,这个目录的内容通常会被清空。

    • /mnt(Mount) :

      • 传统的临时挂载点,用于手动挂载文件系统,如 USB 驱动器、网络共享等。

    • /media​:

      • 用于自动挂载可移动介质(如 CD/DVD, USB 驱动器、SD 卡)的目录。

    • /opt(Optional) :

      • 存放可选的第三方应用程序软件包。通常由大型软件厂商提供,用于安装其独立的软件包。

    • /proc(Processes) :

      • 一个虚拟文件系统,不存储在硬盘上。它提供了关于系统进程和内核信息的实时视图。

    • /sys(System) :

      • 另一个虚拟文件系统,用于与内核进行交互,提供了关于硬件设备和内核模块的信息。

      Windows 目录结构

      Windows 的文件系统结构基于 驱动器盘符 (Drive Letters)。每个物理或逻辑分区、以及连接的外部存储设备(如 USB 驱动器、光驱)都分配一个独立的盘符(例如 C:​, D:​, E:​),每个盘符都有自己的根目录。

      以下是 Windows 系统中 C:​ 驱动器下一些重要的目录及其常见用途:

    • C:\(Root Directory) :

      • 通常是系统盘的根目录。

    • C:\Windows​:

      • 存放操作系统核心文件、系统服务、驱动程序、重要的 DLL 文件和系统配置文件等。类似于 Linux 的 /etc​, /bin​, /sbin​, /lib​ 的一部分功能。

    • C:\Program Files​:

      • 存放64位应用程序的安装目录

    • C:\Program Files (x86) ​:

      • 存放32位应用程序的安装目录(在64位 Windows 系统上)。

    • C:\Users​:

      • 存放所有用户配置文件和个人数据。每个用户都有一个子目录(例如 C:\Users\Username​),其中包含:

        • Desktop​ (桌面)

        • Documents​ (文档)

        • Downloads​ (下载)

        • Pictures​ (图片)

        • Videos​ (视频)

        • AppData​ (隐藏目录,存放应用程序的用户特定数据和配置,类似于 Linux 家目录下的点文件 .config​, .local​ 等)。

    • C:\ProgramData​:

      • 存放应用程序的共享数据,这些数据不随用户改变而改变,且不应随程序卸载而删除。

    • C:\temp(或 C:\Windows\Temp) :

      • 存放临时文件

    • C:\Recovery​:

      • 存放系统恢复相关的文件。

    • C:\PerfLogs​:

      • 存放性能监视器生成的日志。

      Linux 与 Windows 目录结构的主要区别:

  1. 根目录概念:

    • Linux: 单一的根目录 / ​,所有文件和设备都挂载在其下方形成一个统一的树状结构。

    • Windows: 多个驱动器盘符 (C:​, D:​, E:​),每个盘符都有自己的独立根目录。

  2. 路径分隔符:

    • Linux: 使用正斜杠 / ​ (forward slash) 作为路径分隔符 (例如 /home/user/document.txt​)。

    • Windows: 使用反斜杠 \ ​ (backslash) 作为路径分隔符 (例如 C:\Users\Username\Documents\file.txt​)。不过,Windows 内部也支持 /​ 作为路径分隔符。

  3. 大小写敏感性:

    • Linux: 大小写敏感file.txt​ 和 File.txt​ 是两个不同的文件。

    • Windows: 大小写不敏感(但会保留大小写)。file.txt​ 和 File.txt​ 被视为同一个文件,但在显示时会保留你输入的原始大小写。

  4. 设备和分区的表示:

    • Linux: 设备(如硬盘分区、USB 驱动器)被视为特殊文件,并挂载到文件系统树的某个目录中(例如 /dev/sda1​ 代表第一个硬盘的第一个分区,然后可以挂载到 /mnt/data​ 或 /home​)。

    • Windows: 设备通过驱动器盘符 (C:​, D:​) 来表示,每个盘符代表一个独立的逻辑或物理存储单元。

  5. 配置文件的位置:

    • Linux: 绝大多数系统和应用程序的配置文件都集中在 /etc​ 目录及其子目录下,用户特定的配置文件通常在用户家目录下的隐藏文件中(以 .​ 开头)。

    • Windows: 配置文件分散在 C:\Windows​ 及其子目录、C:\ProgramData​ 和用户的 C:\Users\Username\AppData​ 目录下。

  6. 程序安装位置:

    • Linux: 程序的二进制文件、库文件、配置文件、共享数据等通常会分散到 /bin​, /sbin​, /usr/bin​, /usr/lib​, /etc​, /usr/share​ 等多个标准目录中。

    • Windows: 应用程序通常将所有文件安装到其在 C:\Program Files​ (或 C:\Program Files (x86)​) 下的独立子目录中。

    1. Linux下如何 进入目录,创建目录,删除目录,更改目录名,移动目录

    1. 进入目录:cd​ (change directory)

  • 基本用法:

    • 目录路径​ 可以是绝对路径(从 /​ 开始)或相对路径(相对于当前目录)。

  • 常用示例:

    • 进入根目录: Bash

      cd /
    • 进入用户家目录 (无论当前在哪个目录): Bash

      cd ~
      # 或者
      cd
    • 进入父目录: Bash

      cd ..
    • 进入上一次所在的目录: Bash

      cd -
    • 进入当前目录下的子目录: Bash

      cd my_folder
    • 进入绝对路径指定的目录: Bash

      cd /usr/local/bin
  • 提示: 使用 pwd​ (print working directory) 命令可以查看当前所在的目录。


2. 创建目录:mkdir​ (make directory)

  • 基本用法:

    • 目录名​ 可以是单个目录名或以路径形式指定。

  • 常用示例:

    • 在当前目录下创建一个新目录:

    • 创建多级目录 (需要父目录不存在时):

      • -p​ (parents):如果父目录不存在,则自动创建父目录。

    • 一次创建多个目录:


3. 删除目录:rmdir​ 或 rm -r

  • rmdir(remove directory): 只能删除空目录

    • 示例: Bash

      rmdir empty_folder
  • rm -r(remove recursively): 可以删除非空目录及其所有内容,非常危险,请谨慎使用!

    • -r​ (recursive):递归删除目录及其所有子目录和文件。

    • -f​ (force):强制删除,不提示确认。结合 -r​ 使用时,请务必小心,因为它会立即删除,没有任何确认。

    • 常用示例:

    • 重要提示:

      • 在使用 rm -rf​ 时,务必再三确认目录路径,尤其是在使用 sudo​ 时。

      • 避免在根目录 /​ 或其他关键系统目录下使用 rm -rf​。


4. 更改目录名:mv​ (move)

mv​ 命令既可以用于移动文件/目录,也可以用于重命名文件/目录。

  • 基本用法:

  • 常用示例:

    • 在当前目录下重命名目录: Bash

      mv old_name_dir new_name_dir
    • 重命名带有路径的目录: Bash

      mv /path/to/old_dir /path/to/new_dir

5. 移动目录:mv​ (move)

同样使用 mv​ 命令。

  • 基本用法:

    • 如果目标路径是一个已存在的目录,则源目录会被移动到目标目录内部。

    • 如果目标路径不存在,且看起来像一个新目录名,则 mv​ 会将源目录重命名并移动到该位置。

  • 常用示例:

    • 将当前目录下的 my_folder移动到 /tmp目录下: Bash

      mv my_folder /tmp/
      • 此时 my_folder​ 会变成 /tmp/my_folder​。

    • /opt/backup_data移动到 /var/log目录下,并将其命名为 old_logs Bash

      mv /opt/backup_data /var/log/old_logs
    • /tmp/source_dir移动到 /home/user/destination_dir中: Bash

      mv /tmp/source_dir /home/user/destination_dir/
      • 最终路径是 /home/user/destination_dir/source_dir​。

    1. Linux下如何 查看文件,删除文件,更改文件名,移动文件

    查看文件

    在 Linux 中,查看文件内容有很多种方式,取决于你想如何查看。

    1. cat​ (concatenate and print files)

  • 作用: 完整显示文件内容,适用于短文件或需要将多个文件内容连接起来显示。

  • 用法: Bash

    cat <文件名>
  • 示例: Bash

    cat /etc/hosts
    cat my_document.txt

    2. less​ (opposite of more)

  • 作用: 分页显示文件内容,可以在文件中上下滚动,搜索文本,适用于长文件。它不会一次性加载整个文件,因此对大文件更友好。

  • 用法: Bash

    less <文件名>
  • 示例: Bash

    less /var/log/syslog
  • 操作:

    • 空格键/Page Down: 向下翻一页

    • b/Page Up: 向上翻一页

    • 向上/向下箭头: 向上/向下滚动一行

    • /关键词 向下搜索关键词

    • ?关键词 向上搜索关键词

    • n 跳转到下一个匹配项

    • N 跳转到上一个匹配项

    • q 退出 less

    3. head​ (display first part of files)

  • 作用: 显示文件的开头几行,默认是前10行。

  • 用法: Bash

    head <文件名>
    # 或指定行数
    head -n <行数> <文件名>
  • 示例: Bash

    head /var/log/messages
    head -n 5 /etc/passwd # 显示 passwd 文件前5行

    4. tail​ (display last part of files)

  • 作用: 显示文件的末尾几行,默认是最后10行。对于查看实时变动的日志文件非常有用。

  • 用法: Bash

    tail <文件名>
    # 或指定行数
    tail -n <行数> <文件名>
    # 实时查看文件新增内容
    tail -f <文件名>
  • 示例: Bash

    tail /var/log/apache2/access.log
    tail -n 20 error.log # 显示错误日志最后20行
    tail -f /var/log/syslog # 实时查看系统日志,按 Ctrl+C 退出

删除文件

rm​ (remove)

  • 作用: 删除文件。

  • 用法: Bash

    rm <文件名>
  • 常用选项:

    • -i​ (interactive):删除前进行确认提示。

    • -f​ (force):强制删除,不提示确认( -i相反,请谨慎使用)。

    • -v​ (verbose):显示删除过程。

  • 示例: Bash

    rm my_old_file.txt
    rm -i another_file.doc # 删除前会询问:rm: remove regular file 'another_file.doc'? y
    rm -f sensitive_data.bak # 强制删除,不提示
    rm -v *.log # 删除当前目录下所有 .log 文件,并显示删除的文件名
  • 重要提示: rm​ 命令删除文件后,默认情况下文件不会进入回收站,而是直接从文件系统中删除,很难恢复。所以在使用 rm​,特别是 rm -f​ 时,请务必小心。


更改文件名 (重命名文件)

mv​ (move)

  • 作用: 既可以用于移动文件/目录,也可以用于重命名文件/目录。当目标路径和源路径在同一个目录下,且目标路径是一个新文件名时,mv​ 执行重命名操作。

  • 用法: Bash

    mv <旧文件名> <新文件名>
  • 示例: Bash

    mv document.txt report.txt # 将 document.txt 重命名为 report.txt
    mv /path/to/old_name.log /path/to/new_name.log # 重命名带有路径的文件
  • 提示: 如果新文件名已经存在,mv​ 默认会覆盖它。可以使用 -i​ 选项进行确认提示:mv -i old_file new_file​。


移动文件

mv​ (move)

  • 作用: 将文件从一个位置移动到另一个位置。

  • 用法: Bash

    mv <源文件路径> <目标目录路径>
    # 或
    mv <源文件路径> <目标文件路径及新文件名>
  • 示例:

    • 将文件移动到另一个目录: Bash

      mv my_file.txt /tmp/ # 将 my_file.txt 移动到 /tmp 目录
      mv /home/user/notes.txt /var/www/html/ # 将 notes.txt 移动到 /var/www/html 目录
    • 移动文件并同时更改文件名: Bash

      mv old_name.txt /tmp/new_name_in_tmp.txt # 移动 old_name.txt 到 /tmp 并重命名为 new_name_in_tmp.txt
  1. Linux下如何编辑文件。

    在 Linux 下编辑文件,你主要会用到几种命令行文本编辑器。最常用的是 vi​ **/vim​ 和 **​nano​。vi​/vim​ 功能强大且几乎所有 Linux 系统都预装,而 nano​ 则更简单、更适合初学者。


    1. 使用 nano​ (适合初学者)

    nano​ 是一个简单易用的文本编辑器,它会在屏幕底部显示常用的命令提示,非常直观。

    打开或创建文件:

    Bash

    nano <文件名>

    示例:

    Bash

    nano my_document.txt

    nano界面操作:

    1. 打开文件后,你可以直接开始输入和编辑文本。

    2. 光标移动: 使用键盘的上下左右箭头键移动光标。

    3. **常用命令(​ **​^表示 Ctrl键):

      • ^X​ (Ctrl+X): 退出。如果有未保存的更改,nano​ 会提示你是否保存。

      • ^O​ (Ctrl+O): 写入文件 (保存)。它会显示要保存的文件名,按回车键确认即可。

      • ^K​ (Ctrl+K): 剪切当前行。

      • ^U​ (Ctrl+U): 粘贴剪切的行。

      • ^W​ (Ctrl+W): 搜索 (Where Is)。

      • ^C​ (Ctrl+C): 显示光标位置。

      • ^G​ (Ctrl+G): 获取帮助。

      使用 nano编辑文件的步骤:

    4. 输入 nano <文件名>​ 并按回车键。

    5. 进行你的编辑。

    6. Ctrl+X​ 退出。

    7. 如果提示保存更改,按 Y​ (Yes) 或 N​ (No)。

    8. 如果你按了 Y​,按回车键确认文件名。


2. 使用 vi​ 或 vim​ (功能强大且普及)

vi​ (Vi IMproved,通常简写为 vim​) 是一个非常强大且模态化的文本编辑器。它主要有两种操作模式:

  • 命令模式 (Normal Mode): 这是你打开 vi​/vim​ 时的默认模式。在这个模式下,键盘按键被解释为命令(例如移动光标、删除文本、复制文本),你不能直接输入文本

  • 插入模式 (Insert Mode): 在这个模式下,你可以直接输入和插入文本。

    打开或创建文件:

    Bash

    vim <文件名>
    # 或者
    vi <文件名>

    示例:

    Bash

    vim my_config_file.conf

    vi​ **/vim​ **常用操作:

  1. 打开文件:
    Bash

    vim 文件名

    打开后,你将处于命令模式

  2. 切换到插入模式 (开始输入文本):命令模式下按以下任一键:

    • i​:在当前光标位置插入。(最常用)

    • a​:在当前光标位置之后添加。

    • o​:在当前行下方新开一行并插入。

    • I​:在当前行行首插入。

    • A​:在当前行行尾添加。

    • O​:在当前行上方新开一行并插入。

  3. 输入/编辑文本: 进入插入模式后,你就可以像在普通文本编辑器中一样输入和修改文本了。

  4. 从插入模式切换回命令模式: 编辑完成后,按 Esc​ 键。这将把你带回到命令模式。

  5. 保存和退出 (在命令模式下执行):

    • :w​:保存文件(write)。

    • :q​:退出 vim​(quit)。

    • :wq​:保存并退出(write and quit)。

    • :x​:保存并退出(功能与 :wq​ 类似,但只在有修改时才写入)。

    • :q!​:强制退出,不保存任何更改。

    • :wqa​:保存所有打开的文件并退出所有窗口。

  6. 常用命令模式下的操作:

    • 光标移动:

      • h​ (左), j​ (下), k​ (上), l​ (右)

      • gg​:跳转到文件开头。

      • G​:跳转到文件末尾。

      • 数字gg​:跳转到指定行号(例如 10gg​ 跳转到第10行)。

      • w​:跳到下一个单词开头。

      • b​:跳到上一个单词开头。

      • 0​ (数字零):跳到行首。

      • $​:跳到行尾。

    • 删除:

      • x​:删除当前光标下的字符。

      • dw​:删除当前光标到词尾。

      • dd​:删除当前行。

      • 数字dd​:删除指定行数(例如 5dd​ 删除当前行及以下共5行)。

    • 复制/粘贴:

      • yy​:复制当前行(yank)。

      • p​:在当前光标后(或当前行下)粘贴。

      • P​:在当前光标前(或当前行上)粘贴。

    • 撤销/重做:

      • u​:撤销上一步操作 (undo)。

      • Ctrl+r​:重做 (redo)。

    • 搜索:

      • /关键词​:向下搜索关键词。按 n​ 跳转到下一个,按 N​ 跳转到上一个。

      • ?关键词​:向上搜索关键词。按 n​ 跳转到下一个,按 N​ 跳转到上一个。

    使用 vim编辑文件的步骤:

  7. 输入 vim <文件名>​ 并按回车键。

  8. 进入插入模式 (例如按 i​ 键)。

  9. 进行你的编辑。

  10. Esc​ 键回到命令模式

  11. 输入 :wq​ (保存并退出) 或 :q!​ (不保存并退出) 并按回车键。

  1. 如何查看一个目录的大小

    1. du​ 命令 (Disk Usage)

    du​ 命令是查看目录大小的首选工具。它会递归地计算指定目录及其所有子目录和文件所占用的空间。

    基本用法:

    Bash

    du [选项] [目录路径]

    常用选项:

    • -h(human-readable) :以人类可读的格式显示大小,例如 K (千字节), M (兆字节), G (千兆字节)。这对于快速理解大小非常有用。

    • -s(summarize) :只显示总大小,而不是列出所有子目录的大小。

    • -c(total) :显示所有指定参数的总和。

    • --max-depth=<N> ​:只显示指定深度 <N>​ 内的目录大小。例如,--max-depth=1​ 只显示当前目录下的第一级子目录大小。

    • -a(all) :显示所有文件(包括目录中的文件)的大小。默认情况下,du​ 只显示目录大小。

    示例:

  1. 查看当前目录的总大小 (人类可读):

    • .​ 代表当前目录。

    • -s​ 汇总显示总大小。

    • -h​ 以 K、M、G 等单位显示。

  2. 查看指定目录的总大小 (人类可读):

    • 这将显示 /var/log​ 目录及其所有内容的汇总大小。

  3. 查看当前目录下所有一级子目录的大小 (不包括文件):

    • 这会列出当前目录下每个直接子目录的大小,以及当前目录本身的总大小。

  4. 查看当前目录下所有子目录和文件的大小 (人类可读,并列出每一个):

    • 这将输出大量信息,包括所有嵌套的子目录和文件的大小。

  5. 按大小排序显示当前目录下最大的10个子目录:

    • sort -rh​:sort​ 命令用于排序,-r​ 表示倒序(从大到小),-h​ 表示按人类可读的数字进行排序。

    • head -n 10​:只显示前10行。


2. ncdu​ 命令 (NCurses Disk Usage)

ncdu​ 是一个非常棒的交互式磁盘使用分析工具。它提供一个可视化的界面,让你轻松地浏览目录大小,查找占用空间最多的文件和目录。

安装 ncdu​:

  • Debian / Ubuntu 系: Bash

    sudo apt install ncdu
  • CentOS / RHEL / Fedora 系: Bash

    sudo dnf install ncdu

    使用 ncdu​:

  1. 在当前目录运行:

    • 它会扫描当前目录并显示一个交互式列表。

  2. 扫描指定目录:

    ncdu​ 界面操作:

  • 上下箭头: 移动选择项。

  • 右箭头 / Enter: 进入选中的目录。

  • 左箭头: 返回上一级目录。

  • d​:删除选中的文件或目录(需要确认)。

  • g​:在百分比和图形表示之间切换。

  • s​:按文件或目录大小排序。

  • a​:在显示文件实际占用空间和“apparent size”(文件在磁盘上的真实字节数)之间切换。

  • ?​:显示帮助信息和快捷键。

  • q​:退出 ncdu​。


3. ls​ 命令 (List directory contents)

虽然 ls​ 主要用于列出文件和目录,但结合选项也可以查看文件大小,但它不能直接汇总目录的大小(它只会显示目录本身在文件系统中的元数据大小,通常很小,如 4K)。

  • 查看当前目录下文件的大小 (人类可读):

    • -l​:长列表格式,显示详细信息。

    • -h​:人类可读格式显示文件大小。

  • 查看所有文件和目录的大小 (包括隐藏文件):

    • -a​:显示所有文件,包括隐藏文件(以 .​ 开头的文件)。


总结:

  • 快速查看目录总大小: 使用 du -sh <目录路径>​。

  • 查看子目录大小分布: 使用 du -h --max-depth=1 <目录路径>​。

  • 交互式可视化分析: 使用 ncdu <目录路径>​。

  • 查看单个文件大小: 使用 ls -lh​。

    在大多数情况下,du -sh​ 是最直接和常用的方法。如果你需要更详细的分析或可视化界面,ncdu​ 是一个非常好的选择。

  1. 如何查看一个文件的大小

    在 Linux 中,有几种常用且有效的方法来查看文件的大小。最常见的命令是 ls​ 和 du​,stat​ 也可以提供更详细的文件信息,包括大小。


    1. 使用 ls​ 命令 (list directory contents)

    ls​ 命令最常用于列出文件和目录,但它也可以显示文件的大小。

    • 基本用法(以字节为单位显示大小):

    • -l​ (long listing format): 以长格式显示详细信息,包括文件权限、所有者、组、大小和最后修改时间。

    • 示例: Bash

      ls -l my_document.txt
      # 输出可能像这样:
      # -rw-r--r-- 1 user group 12345 Jun 17 09:25 my_document.txt
      # 这里的 "12345" 就是文件的大小,以字节为单位。
    • **以人类可读的格式显示大小 (K​ **, M, G等): 这是最常用的方法,因为它更容易理解。

    • -h​ (human-readable): 以 K (千字节), M (兆字节), G (千兆字节) 等单位显示文件大小。

    • 示例: Bash

      ls -lh my_document.txt
      # 输出可能像这样:
      # -rw-r--r-- 1 user group 12K Jun 17 09:25 my_document.txt
      # 或者 1.2M, 3.5G 等。
    • 查看当前目录下所有文件的详细信息及大小:

    • 这会列出当前目录下所有文件和子目录的详细信息,包括它们的(在文件系统中的元数据)大小。


    2. 使用 du​ 命令 (disk usage)

    虽然 du​ 主要用于查看目录的磁盘使用情况,但它也可以用来查看单个文件的大小。它的优点是,它会报告文件实际占用磁盘的空间,这可能与文件本身的精确字节大小略有不同(因为文件系统通常以块为单位分配空间)。

    • 基本用法(以人类可读格式显示文件实际占用的磁盘空间): Bash

    du -h <文件名>
    • -h​ (human-readable): 以 K, M, G 等单位显示大小。

    • 示例: Bash

      du -h my_document.txt
      # 输出可能像这样:
      # 4.0K   my_document.txt
      # 即使文件内容只有几百字节,但如果文件系统块大小是4K,它也会显示占用4K。
    • 只显示总计(即使只有一个文件),通常与 -h结合使用: Bash

    du -sh <文件名>
    • -s​ (summarize): 只显示总计,不显示子项。

    • 示例: Bash

      du -sh my_document.txt
      # 输出可能像这样:
      # 4.0K   my_document.txt

3. 使用 stat​ 命令 (display file or file system status)

stat​ 命令用于显示文件或文件系统的详细状态信息,其中也包括文件大小。它会提供更多的元数据。

  • 基本用法:

    • 示例: Bash

      stat my_document.txt
    • 输出示例(部分):

      File: 'my_document.txt'
      Size: 12345         Blocks: 24         IO Block: 4096   regular file
      Device: 801h/2049d      Inode: 1234567     Links: 1
      Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/   group)
      Access: 2025-06-17 09:25:44.200000000 -0400
      Modify: 2025-06-17 09:25:00.000000000 -0400
      Change: 2025-06-17 09:25:00.000000000 -0400
      Birth: 2025-06-17 09:25:00.000000000 -0400
      • 这里的 Size:​ 后面就是文件的精确字节大小。

      • Blocks:​ 显示文件占用的块数。

  • 只输出文件大小(以字节为单位):

    • -c %s​: stat​ 命令的格式化输出选项,%s​ 代表文件大小(以字节为单位)。

    • 示例: Bash

      stat -c %s my_document.txt
      # 输出:12345

总结:

  • **最常用且推荐:ls -lh <文件名>​** ​。它直观地显示文件大小,并以易读的单位表示。

  • **需要精确字节数:ls -l <文件名>​** ​ 或 stat -c %s <文件名> ​。

  • **想了解磁盘实际占用空间:du -h <文件名>​** ​。

    1. 如何查看系统磁盘的大小

    在 Linux 中,有几个命令可以帮助你查看系统磁盘的大小、使用情况以及分区信息。最常用的有 df​、lsblk​ 和 fdisk​。


1. df​ 命令 (disk free)

df​ 命令用于显示文件系统(通常是分区或挂载点)的磁盘空间使用情况。这是查看磁盘已用空间、可用空间和总大小最常用的命令。

  • 基本用法(以 KiloBytes 为单位显示):
    Bash

    df

    输出会显示文件系统名称、1K-块数、已用空间、可用空间、使用百分比以及挂载点。

  • **以人类可读的格式显示大小 (​ **​-h): 这是最常用的选项,它会将大小显示为 K (千字节)、M (兆字节)、G (千兆字节) 等,更易于理解。
    Bash

    df -h

    输出示例:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1        50G   15G   33G  32% /
    tmpfs           3.9G     0  3.9G   0% /dev/shm
    /dev/sdb1       200G  100G  100G  50% /home
    /dev/sdc1       1.0T  500G  500G  50% /data
    • Filesystem (文件系统): 设备的名称,通常是 /dev/sda1​ (表示第一个SATA硬盘的第一个分区)。

    • Size (大小): 文件系统的总容量。

    • Used (已用): 已使用的空间。

    • Avail (可用): 可用的空间。

    • Use% (使用百分比): 已用空间占总空间的百分比。

    • Mounted on (挂载点): 文件系统被挂载到 Linux 目录树的哪个位置。

  • **显示文件系统类型 (​ **​-T):
    Bash

    df -hT

    这会额外显示文件系统的类型,例如 ext4​、xfs​、tmpfs​ 等。

  • **只显示总计 (​ **​--total): 如果你只想看到所有挂载点加起来的总使用量,可以这样:

  • 查看特定挂载点的大小:


2. lsblk​ 命令 (list block devices)

lsblk​ 命令列出所有块设备(包括硬盘、SSD、USB 驱动器及其分区)的信息,以树状结构显示,非常直观。它不显示文件系统的使用情况(已用/可用),但可以清晰地展示物理磁盘和分区的大小。

  • 基本用法:
    Bash

    lsblk

    输出示例:

    NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    sda           8:0    0   200G  0 disk
    ├─sda1        8:1    0    50G  0 part /
    ├─sda2        8:2    0     2G  0 part [SWAP]
    └─sda3        8:3    0   148G  0 part /home
    sdb           8:16   0     1T  0 disk
    └─sdb1        8:17   0     1T  0 part /data
    sr0          11:0    1  1024M  0 rom
    • NAME: 设备名称(例如 sda​ 代表第一个SATA硬盘,sda1​ 是它的第一个分区)。

    • SIZE: 设备或分区的大小。

    • TYPE: 设备类型(disk​ 表示整个磁盘,part​ 表示分区,rom​ 表示光驱等)。

    • MOUNTPOINTS: 如果是分区,它被挂载到文件系统中的哪个目录。

  • **显示文件系统信息 (​ **​-f):
    Bash

    lsblk -f

    这会显示文件系统的 UUID、文件系统类型 (FSTYPE) 和标签 (LABEL)。

  • **不显示标题行 (​ **​-n):


3. fdisk​ 命令 (manipulate disk partition tables)

fdisk​ 是一个强大的分区工具,但它的 -l​ (list) 选项可以用来列出磁盘的分区表信息,包括物理硬盘的总大小。你需要 root 权限才能运行它。

  • 基本用法: Bash

    sudo fdisk -l

    输出示例(部分):

    Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
    Disk model: VBOX HARDDISK
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x12345678
    
    Device     Boot    Start       End   Sectors  Size Id Type
    /dev/sda1  * 2048 104859647 104857600   50G 83 Linux
    /dev/sda2      104859648 109053951   4194304    2G 82 Linux swap / Solaris
    /dev/sda3      109053952 419430399 310376448  148G 83 Linux
    • 在输出的开头,你会看到 Disk /dev/sda: 200 GiB​ 这样的信息,这就是整个物理磁盘的总大小

    • 下面会列出每个分区的大小。

    注意: fdisk​ 通常用于查看物理磁盘的原始大小和分区信息,而不是文件系统的使用情况(已用/可用)。


总结:

  • 查看文件系统(分区)的已用/可用空间: 使用 df -h​。这是最常见的需求。

  • 查看物理磁盘及其分区的大小和结构: 使用 lsblk​。它提供了一个清晰的树状视图。

  • 查看更底层的物理磁盘信息和分区表: 使用 sudo fdisk -l​。

    1. Linux中进程是什么

    在 Linux(以及其他操作系统)中,进程 (Process) 是一个程序在计算机上执行时的一个实例。可以把进程看作是程序在内存中“活起来”的状态。

    简单来说:

  • 程序 (Program) :是存储在磁盘上的静态文件,包含一系列指令和数据,例如一个可执行文件 (.exe​ 在 Windows,或者没有扩展名的二进制文件在 Linux)。它只是一段代码。

  • 进程 (Process) :是程序在运行时,被加载到内存中,并由操作系统分配资源(如 CPU 时间、内存空间、文件句柄、网络连接等)的动态实体。


进程的核心组成部分:

一个进程不仅仅是程序代码本身,它还包括以下关键要素:

  1. 程序代码 (Text Segment) :程序的可执行指令。

  2. 数据段 (Data Segment) :存放全局变量和静态变量。

  3. 堆 (Heap) :用于程序运行时动态内存分配的区域。

  4. 栈 (Stack) :用于存放局部变量、函数参数和函数调用返回地址。

  5. 进程控制块 (Process Control Block, PCB) :这是一个操作系统维护的数据结构,包含了关于进程的所有关键信息。它是进程的“身份证”和“状态记录”,包括:

    • 进程ID (PID) :每个进程的唯一标识符。

    • 父进程ID (PPID) :启动当前进程的父进程的ID。

    • 进程状态:如运行中、可运行、睡眠、停止、僵尸等。

    • 程序计数器 (Program Counter) :指示下一条要执行的指令地址。

    • CPU 寄存器值:进程暂停时保存的CPU寄存器状态。

    • 内存管理信息:如页表、段表等,指示进程的内存地址空间。

    • I/O 状态信息:如打开的文件列表、I/O 设备分配情况。

    • 优先级:进程被调度执行的优先级别。

    • 所有者信息:拥有该进程的用户ID (UID) 和组ID (GID)。


进程的生命周期:

一个进程通常会经历以下几种状态:

  1. 新建 (New) :进程正在被创建。

  2. 运行 (Running) :进程正在 CPU 上执行其指令。

  3. 就绪 (Ready) :进程已准备好执行,正在等待被调度器分配 CPU 时间。

  4. 等待/阻塞 (Waiting/Blocked) :进程正在等待某个事件的发生(如 I/O 完成、接收信号、等待资源释放)才能继续执行。

  5. 终止 (Terminated) :进程已完成执行,或被操作系统终止。

  6. 僵尸 (Zombie) :一个已终止但其父进程尚未收集其退出状态信息的子进程。它仍然在进程表中占用一个条目,但不再执行任何代码或占用其他资源。


进程与线程的区别:

  • 进程是资源分配的基本单位:每个进程都有自己独立的内存地址空间和系统资源。

  • 线程是 CPU 调度的基本单位:一个进程可以包含一个或多个线程。线程共享进程的内存地址空间和资源,但拥有独立的执行流、栈和寄存器状态。线程比进程更轻量级,创建和销毁的开销更小。


为什么理解进程很重要?

  • 系统资源管理:理解进程有助于你监控和管理系统资源(CPU、内存、I/O)。

  • 故障排除:当程序崩溃或系统变慢时,你需要检查是哪个进程出了问题。

  • 安全性:进程由特定用户拥有,这有助于实施权限控制。

  • 并发编程:在编写多任务程序时,进程和线程的概念是基础。

  • 容器技术:Docker 和 Kubernetes 等容器技术的核心就是对进程进行隔离和管理。

    在 Linux 中,你可以使用 ps​、top​、htop​ 等命令来查看和管理系统中的进程。

  1. 如何查看哪个进程占用CPU最高

    在 Linux 中,要查看哪个进程占用 CPU 最高,最常用的工具是 top​ 和 htop​。此外,ps​ 命令结合排序也能达到类似目的,但不如 top​/htop​ 实时和直观。

    1. 使用 top​ 命令 (最常用且预装)

    top​ 命令是一个实时显示系统进程状态的工具。默认情况下,它会按照 CPU 使用率从高到低排序进程。

    如何使用:

    1. 在终端中输入:Bash

    top
    1. 按回车。

    top的交互式界面:

  • 顶部区域:显示系统概览信息,包括:

    • top​ 行:当前时间、运行时间、登录用户、平均负载(load average)。

    • Tasks​ 行:总进程数、运行中、睡眠、停止、僵尸进程数。

    • %Cpu(s)​ 行:CPU 使用率(us​ 用户空间、sy​ 内核空间、ni​ 优先级调整过的用户进程、id​ 空闲、wa​ I/O等待、hi​ 硬件中断、si​ 软件中断、st​ 虚拟机偷取时间)。

    • MiB Mem​ 行:内存使用情况。

    • MiB Swap​ 行:交换空间使用情况。

  • 进程列表区域:显示每个进程的详细信息。

    • PID:进程 ID。

    • USER:进程所有者。

    • PR:优先级。

    • NI:NICE 值(影响进程调度优先级)。

    • VIRT:虚拟内存大小。

    • RES:常驻内存大小。

    • SHR:共享内存大小。

    • S:进程状态(R​ 运行,S​ 睡眠,Z​ 僵尸,D​ 不可中断睡眠等)。

    • %CPU:进程占用 CPU 的百分比(这就是我们要找的关键指标)。

    • %MEM:进程占用内存的百分比。

    • TIME+ :进程累计运行的 CPU 时间。

    • COMMAND:进程的命令名称或路径。

    关键操作 (在 top运行中):

  • P(大写P) :按 %CPU 使用率进行降序排序。这是默认行为,但如果排序被改变了,可以按 P​ 恢复。

  • M(大写M) :按 %MEM 内存使用率进行降序排序。

  • k​:杀死一个进程。会提示输入 PID,然后按回车。

  • q​:退出 top​。

  • 1​:在多核 CPU 系统上,显示每个 CPU 核心的独立使用情况。再按一次 1​ 恢复显示整体 CPU 使用情况。

  • z​:切换彩色显示。

    2. 使用 htop​ 命令 (更友好、功能更强)

    htop​ 是 top​ 的一个增强版本,提供了更友好的界面和更多的功能,比如可以通过鼠标点击操作,更容易杀死进程,垂直和水平滚动。

    安装 htop(如果未安装):

  • Debian/Ubuntu 系: Bash

    sudo apt install htop
  • CentOS/RHEL/Fedora 系: Bash

    sudo dnf install htop

    如何使用:

  1. 在终端中输入:Bash

    htop
  2. 按回车。

    htop的特点:

  • 彩色界面:默认就是彩色的,更易读。

  • 鼠标支持:可以直接用鼠标点击列头进行排序,点击进程进行选择等。

  • 顶部CPU/内存条:以图形方式显示 CPU 和内存的使用情况。

  • 功能键:底部显示 F1-F10 功能键对应的操作,例如 F6​ 排序,F9​ 杀死进程。

  • 树状视图:可以切换到进程树状视图 (F5​),更容易看出父子进程关系。

  • F6​:会弹出一个菜单,你可以选择按 CPU%​ 进行排序。

  • F9​:杀死选中的进程,会提示发送信号类型。

    3. 使用 ps​ 和 sort​ 命令 (一次性快照)

    ps​ 命令可以获取当前运行进程的快照。结合 sort​ 命令,你可以按照 CPU 使用率进行排序。这种方法不是实时的,但适合获取特定时刻的 CPU 占用情况。

    常用命令:

    Bash

    ps aux --sort=-%cpu | head -n 10

    命令解释:

  • ps aux​:

    • a​: 显示所有用户的进程。

    • u​: 显示进程的所有者。

    • x​: 显示没有控制终端的进程。

  • --sort=-%cpu​: 按照 CPU 使用率 (%cpu​) 进行降序排序(-​ 表示降序)。

  • | head -n 10​: 将 ps​ 的输出通过管道传递给 head​ 命令,只显示前 10 行(通常包括一行标题)。

    输出示例:

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         7  0.0  0.0      0     0 ?        S    Jun16   0:00 [ksoftirqd/0]
    root        11  0.0  0.0      0     0 ?        S    Jun16   0:00 [rcu_sched]
    ...
    (实际输出会显示占用CPU高的进程在前几行)

    你会看到 %CPU​ 列显示了进程占用 CPU 的百分比。


总结:

  • 实时监控和交互式操作:

    • top 内置,功能强大,是系统管理员必备。

    • htop 更友好,提供更多可视化和便捷操作,推荐安装。

  • 获取一次性快照:

    • ps aux --sort=-%cpu | head -n 10 适合脚本或需要输出到文件的情况。

    在日常使用中,top htop​ 是查看哪个进程占用 CPU 最高的首选工具。

  1. 如何查看哪个进程占用内存最高

    在 Linux 中,查看哪个进程占用内存最高与查看 CPU 占用最高的方法类似,主要也是通过 top​、htop​ 或 ps​ 命令。

    1. 使用 top​ 命令 (最常用且预装)

    top​ 命令是实时显示系统进程状态的工具。默认情况下,top​ 会按 CPU 使用率排序,但你可以很容易地切换到按内存使用率排序。

    如何使用:

    1. 在终端中输入:Bash

    top
    1. 按回车。

    2. top​ 运行的界面中,按 M(大写 M) 键。这会将进程列表按 %MEM(内存使用百分比) 降序排序,占用内存最高的进程会显示在顶部。

    top界面中的内存相关指标:

    在进程列表区域,你会看到以下与内存相关的列:

  • %MEM:进程占用的物理内存百分比。这是最直观的指标。

  • VIRT虚拟内存大小 (Virtual Memory Size) 。这是进程当前使用的所有虚拟内存总量,包括代码、数据、共享库、以及已交换到磁盘的内存。这个值通常会非常大,因为它包含了进程可能使用的所有内存地址空间,不代表实际物理内存使用。

  • RES常驻内存大小 (Resident Set Size) 。这是进程当前实际占用的物理内存大小,不包括已被交换到磁盘的内存,也不包括共享库中未被该进程使用的部分。这个值通常是评估进程实际内存消耗最重要的指标。

  • SHR共享内存大小 (Shared Memory Size) 。这是进程与其他进程共享的内存部分。

    关键操作 (在 top运行中):

  • M(大写 M) :按 %MEM​ 使用率进行降序排序。

  • k​:杀死一个进程。会提示输入 PID,然后按回车。

  • q​:退出 top​。

    2. 使用 htop​ 命令 (更友好、功能更强)

    htop​ 是 top​ 的一个增强版本,提供了更友好的界面和更多的功能。

    安装 htop(如果未安装):

  • Debian/Ubuntu 系: Bash

    sudo apt install htop
  • CentOS/RHEL/Fedora 系: Bash

    sudo dnf install htop

    如何使用:

  1. 在终端中输入:Bash

    htop
  2. 按回车。

  3. htop​ 界面中,可以直接用鼠标点击 MEM%​ 列的标题进行排序,或者按 F6​ 键,然后选择 PERCENT_MEM​ (或 M_RESIDENT​ / M_SIZE​ / M_SHARE​) 进行排序。PERCENT_MEM​ 和 M_RESIDENT​ 通常是你最关心的。

    htop的特点:

  • 彩色界面:默认就是彩色的,更易读。

  • 鼠标支持:可以直接用鼠标点击列头进行排序。

  • 顶部内存条:以图形方式显示内存使用情况。

  • 功能键:底部显示 F1-F10 功能键对应的操作,例如 F6​ 排序,F9​ 杀死进程。

  • F6​:会弹出一个菜单,你可以选择按 PERCENT_MEM​ (百分比内存使用)、M_RESIDENT​ (物理内存占用) 等进行排序。

    3. 使用 ps​ 和 sort​ 命令 (一次性快照)

    ps​ 命令可以获取当前运行进程的快照。结合 sort​ 命令,你可以按照内存使用率进行排序。这种方法不是实时的,但适合获取特定时刻的内存占用情况或用于脚本。

    常用命令 (按 %MEM降序排序):

    Bash

    ps aux --sort=-%mem | head -n 10

    命令解释:

  • ps aux​:

    • a​: 显示所有用户的进程。

    • u​: 以用户为导向的格式显示。

    • x​: 显示没有控制终端的进程。

  • --sort=-%mem​: 按照内存使用百分比 (%mem​) 进行降序排序(-​ 表示降序)。

  • | head -n 10​: 将 ps​ 的输出通过管道传递给 head​ 命令,只显示前 10 行(通常包括一行标题,所以实际是前 9 个内存最高的进程)。

    更精确地按物理内存占用 (RES) 排序并显示详细信息:

    Bash

    ps -eo pid,user,rss,vsz,%mem,command --sort=-rss | head -n 10
  • -e​: 选择所有进程。

  • -o pid,user,rss,vsz,%mem,command​: 指定输出格式。

    • pid​: 进程 ID。

    • user​: 进程所有者。

    • rss​: 常驻内存大小(Resident Set Size),以 KB 为单位。这是进程实际占用的物理内存。

    • vsz​: 虚拟内存大小(Virtual Memory Size),以 KB 为单位。

    • %mem​: 内存使用百分比。

    • command​: 进程的完整命令。

  • --sort=-rss​: 按照常驻内存大小 (RSS) 进行降序排序。

    总结:

  • 实时监控和交互式操作:

    • top 内置,功能强大。进入后按 M​。

    • htop 更友好,提供更多可视化和便捷操作,推荐安装。进入后按 F6​ 选择 PERCENT_MEM​ 或 M_RESIDENT​。

  • 获取一次性快照:

    • ps aux --sort=-%mem | head -n 10 快速查看按百分比排序的内存占用。

    • ps -eo pid,user,rss,vsz,%mem,command --sort=-rss | head -n 10 更详细地查看按物理内存(RSS)排序的进程。

    在日常使用中,top htop​ 是最便捷和常用的方法来查找占用内存最高的进程。