Linux 常用命令详解教程


Linux 常用命令详解教程

本教程旨在提供一份全面的 Linux 常用命令列表,涵盖文件管理、系统信息获取、高级系统监控、文本处理、用户与权限管理、网络配置与诊断以及端口和防火墙管理等多个方面。每个命令都将包含其用途、常用语法、重要选项及示例,力求内容完整且实用。

一、文件和目录管理 (File and Directory Management)

文件和目录管理是 Linux 系统操作的基础。以下命令能帮助用户有效地在文件系统中进行导航、创建、删除、复制、移动和查找文件及目录。

1.1 基本导航与列表 (Basic Navigation and Listing)

  • ls (列出目录内容 List directory contents)
    • 用途: 显示目录中的文件和子目录。
    • 语法: ls [选项][目录名]
    • 常用选项:
      • -l: 以长格式显示详细信息,包括权限、所有者、大小、修改日期等。
      • -a: 显示所有文件,包括隐藏文件(以 . 开头的文件)。
      • -h: 以人类可读的格式显示文件大小 (例如 1K, 234M, 2G)。
      • -A: 显示除 ... 之外的所有文件,包括隐藏文件。
      • -S: 按文件大小降序排序。
      • -t: 按修改时间排序,最新修改的在前。
      • -R: 递归列出所有子目录的内容。
    • 示例:
      • ls -l /home/user: 以长格式列出 /home/user 目录的内容。
      • ls -ah: 以人类可读格式显示当前目录所有文件(包括隐藏文件)。
  • cd (更改目录 Change directory)
    • 用途: 切换当前工作目录。
    • 语法: cd [目录路径]
    • 特殊用法:
      • cd..: 切换到上一级目录。
      • cd ~cd: 切换到当前用户的主目录。
      • cd -: 切换到上一个工作目录。
    • 示例:
      • cd /var/log: 切换到 /var/log 目录。
      • cd../documents: 从当前目录切换到上一级的 documents 子目录。
  • pwd (打印工作目录 Print working directory)
    • 用途: 显示当前所在的完整目录路径。
    • 语法: pwd
    • 示例: pwd

1.2 文件与目录操作 (File and Directory Operations)

  • mkdir (创建目录 Make directory)
    • 用途: 创建一个新的目录。
    • 语法: mkdir [选项] 目录名
    • 常用选项:
      • -p: 递归创建目录,如果父目录不存在则一并创建。
    • 示例:
      • mkdir new_project: 在当前目录下创建名为 new_project 的目录。
      • mkdir -p project/docs/images: 递归创建 project 目录及其子目录 docsimages
  • rmdir (删除空目录 Remove empty directory)
    • 用途: 删除一个空的目录。
    • 语法: rmdir [选项] 目录名
    • 常用选项:
      • -p: 递归删除目录,当子目录被删除后其父目录变为空时,也一同被删除。
      • --ignore-fail-on-non-empty: 删除非空目录时忽略错误(通常不推荐,应使用 rm -r)。
    • 示例: rmdir old_folder (如果 old_folder 为空,则删除它)。
  • cp (复制文件和目录 Copy files and directories)
    • 用途: 复制文件或目录。
    • 语法: cp [选项] 源文件/目录 目标文件/目录
    • 常用选项:
      • -r-R: 递归复制目录及其内容。
      • -i: 覆盖前提示。
      • -v: 显示详细的复制过程。
    • 示例:
      • cp file1.txt file1_backup.txt: 将 file1.txt 复制为 file1_backup.txt
      • cp -r project_a/ /backup/project_a_backup: 将 project_a 目录及其所有内容复制到 /backup/project_a_backup
  • mv (移动或重命名文件和目录 Move or rename files and directories)
    • 用途: 移动文件或目录,或者在同一目录下对文件或目录进行重命名。
    • 语法: mv [选项] 源文件/目录 目标文件/目录
    • 常用选项:
      • -i: 覆盖前提示。
      • -n: 不覆盖已存在的目标文件。
      • -u: 仅当源文件比目标文件新,或目标文件不存在时,才执行移动。
    • 示例:
      • mv report.docx documents/: 将 report.docx 移动到 documents 目录。
      • mv old_name.txt new_name.txt: 将 old_name.txt 重命名为 new_name.txt
      • mv temp_folder /opt/archive/: 将 temp_folder 目录移动到 /opt/archive/
  • rm (删除文件或目录 Remove files or directories)
    • 用途: 删除文件或目录。这是一个非常强大的命令,使用时需格外小心。
    • 语法: rm [选项] 文件/目录...
    • 常用选项:
      • -r-R: 递归删除目录及其所有内容。
      • -f: 强制删除,不进行提示,忽略不存在的文件和参数。
      • -i: 删除前逐一提示确认。
      • -v: 显示详细的删除过程。
    • 警告: rm -rf 命令会无提示地递归删除指定目录下的所有内容,一旦执行无法轻易恢复,务必谨慎使用。
    • 示例:
      • rm unwanted_file.txt: 删除 unwanted_file.txt 文件。
      • rm -rf old_project/: 强制递归删除 old_project 目录及其所有内容。
  • touch (创建空文件或更新文件时间戳 Create empty file or update file timestamps)
    • 用途: 创建一个空文件,或者更新已有文件的时间戳(访问时间和修改时间)。
    • 语法: touch [选项] 文件名...
    • 示例:
      • touch newfile.log: 创建一个名为 newfile.log 的空文件。
      • touch existing_file.txt: 更新 existing_file.txt 的时间戳。
  • ln (创建链接 Create links)
    • 用途: 在文件之间创建链接,分为硬链接和符号链接(软链接)。
    • 语法: ln [选项] 源文件 链接名
    • 常用选项:
      • -s: 创建符号链接(软链接)。如果不使用此选项,则创建硬链接。
      • -v: 显示详细过程。
    • 硬链接与符号链接的区别:
      • 硬链接:与原文件共享相同的inode号和数据块,删除原文件不影响硬链接的访问,除非所有硬链接和原文件都被删除。不能对目录创建硬链接,不能跨文件系统创建硬链接。
      • 符号链接:一个指向原文件路径的特殊文件,类似于快捷方式。删除原文件会导致符号链接失效。可以对目录创建符号链接,也可以跨文件系统创建。
    • 示例:
      • ln target.txt hard_link.txt: 为 target.txt 创建一个名为 hard_link.txt 的硬链接。
      • ln -s /opt/app/config.conf /etc/app_config.conf: 为 /opt/app/config.conf 创建一个名为 /etc/app_config.conf 的符号链接。

1.3 文件查找与类型判断 (File Searching and Type Identification)

  • find (在目录层次结构中查找文件 Search for files in a directory hierarchy)
    • 用途: 根据指定的条件在目录树中搜索文件和目录。
    • 语法: find [路径...][表达式选项]
    • 常用表达式选项:
      • -name "模式": 按文件名模式查找 (支持通配符, 如 *.txt)。
      • -type 类型: 按文件类型查找 (如 f 普通文件, d 目录, l 符号链接)。
      • -user 用户名: 按文件所有者查找。
      • -group 组名: 按文件所属组查找。
      • -size [+|-]大小[cwbkMG]: 按文件大小查找 (如 +10M 大于10MB, -1k 小于1KB)。
      • -mtime [-|+]天数: 按文件修改时间查找 (如 -7 7天内修改, +30 30天前修改)。
      • -exec 命令 {} \;: 对找到的每个文件执行指定的命令。
      • -maxdepth 层数: 限制搜索深度。
    • 示例:
      • find /home/user -name "*.log" -mtime -7: 在 /home/user 目录及其子目录下查找最近7天内修改过的所有 .log 文件。
      • find. -type f -size +100M -exec rm {} \;: 查找当前目录下大于100MB的普通文件并删除它们(删除前会提示)。
  • file (判断文件类型 Determine file type)
    • 用途: 识别给定文件的类型。
    • 语法: file [选项] 文件名...
    • 常用选项:
      • -b--brief: 简要模式,不输出文件名。
      • -i: 输出MIME类型字符串。
      • -z: 尝试查看压缩文件内部。
    • 示例:
      • file document.pdf: 显示 document.pdf 的文件类型。
      • file -bi image.jpg: 以MIME类型格式简要显示 image.jpg 的类型。

二、系统信息与管理 (System Information and Management)

了解系统的运行状态、硬件信息和基本配置是系统管理的重要组成部分。

2.1 系统基本信息 (Basic System Information)

  • uname (打印系统信息 Print system information)
    • 用途: 显示当前系统的内核名称、版本、主机名等信息。
    • 语法: uname [选项]
    • 常用选项:
      • -a: 显示所有可用信息。
      • -r: 显示内核发行版本。
      • -s: 显示内核名称。
      • -n: 显示网络节点主机名。
      • -m: 显示机器硬件名称。
    • 示例: uname -a
  • hostname (显示或设置系统的主机名 Show or set the system’s host name)
    • 用途: 查看或临时设置系统的主机名。
    • 语法: hostname [选项][新主机名]
    • 常用选项:
      • -s--short: 显示短主机名 (第一个点之前的部分)。
      • -f--fqdn--long: 显示完全限定域名 (FQDN)。
      • -i--ip-address: 显示主机的IP地址 (如果可解析)。
      • -I--all-ip-addresses: 显示主机所有网络接口的IP地址。
      • -d--domain: 显示DNS域名。
    • 示例:
      • hostname: 显示当前主机名。
      • sudo hostname new-server-name: 临时将主机名设置为 new-server-name (永久更改需修改配置文件,如 /etc/hostname )。
  • date (打印或设置系统日期和时间 Print or set the system date and time)
    • 用途: 显示或设置系统的当前日期和时间。
    • 语法: date [选项][+格式]YY][.ss]]
    • 常用选项与格式:
      • +%Y-%m-%d %H:%M:%S: 以 年-月-日 时:分:秒 格式显示。
      • --set="字符串": 设置日期和时间。
    • 示例:
      • date: 显示当前日期和时间。
      • date '+%A, %B %d, %Y': 以 “星期几, 月份 日期, 年份” 格式显示。
      • sudo date --set="2024-07-30 10:30:00": 将日期和时间设置为2024年7月30日10点30分。
  • uptime (告诉系统已运行多长时间 Tell how long the system has been running)
    • 用途: 显示系统自上次启动以来运行了多长时间、当前用户数量以及系统平均负载。
    • 语法: uptime [选项]
    • 常用选项:
      • -p: 以易读格式显示运行时间。
    • 示例: uptime
  • whoami (打印有效用户ID Print effective user ID)
    • 用途: 显示当前正在操作的用户名。
    • 语法: whoami
    • 示例: whoami

2.2 磁盘与内存使用 (Disk and Memory Usage)

  • df (报告文件系统磁盘空间使用情况 Report file system disk space usage)
    • 用途: 显示文件系统的总空间、已用空间、可用空间和挂载点。
    • 语法: df [选项][文件/目录]
    • 常用选项:
      • -h: 以人类可读的格式显示 (例如 GB, MB)。
      • -T: 显示文件系统类型。
      • -i: 显示inode信息而非块使用情况。
    • 示例: df -h
  • du (估算文件空间使用情况 Estimate file space usage)
    • 用途: 显示指定文件或目录占用的磁盘空间大小。
    • 语法: du [选项][文件/目录]
    • 常用选项:
      • -h: 以人类可读的格式显示。
      • -s: 仅显示总计大小。
      • -c: 显示总计大小,并在最后显示所有参数的总和。
      • --max-depth=N: 只显示指定深度的目录大小。
    • 示例:
      • du -sh /var/log: 显示 /var/log 目录的总大小。
      • du -h --max-depth=1 /home: 显示 /home 目录下第一级子目录和文件的大小。
  • free (显示系统中的可用和已用物理内存和交换内存量 Display amount of free and used memory in the system)
    • 用途: 查看系统内存和交换空间的使用情况。
    • 语法: free [选项]
    • 常用选项:
      • -h: 以人类可读的格式显示。
      • -m: 以MB为单位显示。
      • -g: 以GB为单位显示。
      • -s N: 每N秒刷新一次。
    • 示例: free -h

2.3 系统控制 (System Control)

  • shutdown (关闭系统 Schedule a system shutdown)
    • 用途: 安全地关闭或重启Linux系统,可以指定延迟时间或特定时间,并向登录用户发送警告信息。
    • 语法: sudo shutdown [选项] 时间 [警告信息]
    • 常用选项:
      • -h: 关闭系统后停止电源 (halt)。
      • -P: 关闭系统后切断电源 (power off),通常是 -h 的默认行为。
      • -r: 重启系统。
      • -c: 取消先前安排的关机。
      • -k: 发送警告信息,但不实际关机。
    • 时间参数:
      • now: 立刻执行。
      • +分钟数: 指定多少分钟后执行 (例如 +10)。
      • hh:mm: 指定绝对时间执行 (例如 23:00)。
    • 示例:
      • sudo shutdown -h now: 立刻关闭系统。
      • sudo shutdown -r +15 "系统将在15分钟后重启以进行维护": 15分钟后重启系统并发送消息。
      • sudo shutdown -c: 取消已计划的关机或重启。
  • reboot (重启系统 Reboot the system)
    • 用途: 重启Linux系统。通常是 shutdown -r now 的一个快捷方式。
    • 语法: sudo reboot [选项]
    • 常用选项:
      • -f: 强制重启,不调用 shutdown。不推荐常规使用。
      • -p: 关闭电源(如果系统支持)。
    • 示例: sudo reboot
  • history (显示或操作历史列表 Display or manipulate the history list)
    • 用途: 显示用户在当前shell会话中执行过的命令历史。
    • 语法: history [选项][数量]
    • 常用选项:
      • -c: 清空历史列表。
      • -d 偏移量: 删除指定偏移量的历史条目。
    • 特殊用法:
      • !!: 执行上一条命令。
      • !编号: 执行历史列表中指定编号的命令。
      • !字符串: 执行最近一条以指定字符串开头的命令。
      • Ctrl+R: 反向搜索历史命令。
    • 示例:
      • history: 显示所有命令历史。
      • history 20: 显示最近20条命令历史。
      • !ls: 执行最近一条以 ls 开头的命令。
  • man (系统参考手册的分页程序 an interface to the on-line reference manuals)
    • 用途: 显示命令、函数或配置文件的帮助手册页。
    • 语法: man [选项][章节] 命令名/主题
    • 常用选项:
      • -k 关键字: 根据关键字搜索手册页标题和描述 (等同于 apropos)。
    • 导航:man 页面中,通常使用与 less 相同的导航键(如空格翻页,q 退出,/ 搜索)。
    • 示例:
      • man ls: 显示 ls 命令的手册页。
      • man 5 passwd: 显示 /etc/passwd 文件格式的手册页 (第5章节通常是文件格式)。
  • clear (清屏 Clear the terminal screen)
    • 用途: 清除终端屏幕上的所有内容,将提示符移到屏幕顶部。
    • 语法: clear
    • 示例: clear (快捷键通常是 Ctrl+L
  • alias (定义或显示别名 Define or display aliases)
    • 用途: 为长命令或常用命令序列创建简短的别名。
    • 语法:
      • alias: 显示所有已定义的别名。
      • alias 名称='命令' : 定义一个别名。
      • unalias 名称: 删除一个别名。
    • 持久化: 临时定义的别名只在当前shell会话有效。要使其永久生效,需将其添加到shell的配置文件中,如 ~/.bashrc~/.bash_aliases
    • 示例:
      • alias ll='ls -alF': 定义 ll 作为 ls -alF 的别名。
      • alias update='sudo apt update && sudo apt upgrade -y': 定义 update 用于更新系统。

三、高级系统监控 (Advanced System Monitoring)

除了基本的系统信息查看,Linux还提供了一系列高级工具,用于深入监控系统性能的各个方面,如CPU、内存、I/O和网络活动。

3.1 进程管理与监控 (Process Management and Monitoring)

  • ps (报告当前进程的快照 Report a snapshot of the current processes)
    • 用途: 显示当前系统中正在运行的进程信息。
    • 语法: ps [选项]
    • 常用选项:
      • aux: 显示所有用户的进程(System V风格,无 -)。
      • -ef: 显示所有进程,以完整格式(BSD风格,有 -)。
      • -u 用户名: 显示指定用户的进程。
      • --forest: 以ASCII字符显示进程树。
      • --sort=关键字: 按指定关键字排序 (例如 %cpu, %mem)。
    • 示例:
      • ps aux: 显示系统中所有正在运行的进程的详细信息。
      • ps -ef | grep sshd: 查找名为 sshd 的进程。
      • ps aux --sort=-%mem | head -n 5: 显示内存使用率最高的5个进程。
  • top (显示Linux进程 Display Linux processes)
    • 用途: 实时动态地显示系统中各个进程的资源占用状况,如CPU使用率、内存使用率等,默认按CPU使用率排序。
    • 语法: top [选项]
    • 交互命令 (在 top 运行时):
      • P: 按CPU使用百分比排序。
      • M: 按内存使用百分比排序。
      • N: 按进程ID (PID) 排序。
      • k: 杀死一个进程 (需要输入PID和信号,默认为15 SIGTERM)。
      • r: 重新设置一个进程的nice值 (优先级)。
      • h?: 显示帮助。
      • q: 退出 top
      • d: 改变刷新延迟时间。
    • 常用选项:
      • -d 秒数: 设置屏幕刷新间隔。
      • -n 次数: 刷新指定次数后退出。
      • -b: 批处理模式,适合将输出重定向到文件。
      • -o +列名: 按指定列排序 (如 +%MEM 按内存排序)。
    • 示例: top (启动实时监控)
  • htop (交互式进程查看器 Interactive process viewer)
    • 用途: top 的增强版,提供更友好的交互界面、颜色显示、鼠标支持、水平/垂直滚动以及完整的命令行显示。
    • 语法: htop [选项]
    • 常用选项:
      • -d 延迟: 设置更新之间的延迟(单位为十分之一秒,例如 -d 10 表示1秒)。
      • -u 用户名: 只显示指定用户的进程。
      • -s 列名: 按指定列排序 (例如 -s PERCENT_MEM)。
      • -t: 以树状视图显示进程层级关系。
    • 交互命令 (在 htop 运行时):
      • F4 (或 \): 过滤进程。
      • F5 (或 t): 切换树状视图。
      • F6 (或 < >): 选择排序字段。
      • F9 (或 k): 杀死选中的进程。
      • F10 (或 q): 退出 htop
    • 示例: htop
  • kill (向进程发送信号 Send a signal to a process)
    • 用途: 向指定的进程发送信号,常用于终止进程。
    • 语法: kill [选项] PID...
    • 常用信号:
      • SIGTERM (15): 默认信号,请求进程正常终止。
      • SIGKILL (9): 强制终止进程,进程无法捕获此信号。
      • SIGHUP (1): 挂起进程,常用于让守护进程重新读取配置文件。
      • SIGINT (2): 中断进程,等同于 Ctrl+C
    • 常用选项:
      • -l: 列出所有可用的信号名称。
      • -信号编号或名称: 指定要发送的信号 (例如 -9-SIGKILL)。
    • 示例:
      • kill 12345: 向PID为12345的进程发送 SIGTERM 信号。
      • kill -9 54321: 强制杀死PID为54321的进程。
  • pkill (根据名称和其他属性查找或发信号给进程 Signal processes based on name and other attributes)
    • 用途: 根据进程名或其他属性向进程发送信号,通常用于终止进程。
    • 语法: pkill [选项] 模式
    • 常用选项:
      • -信号: 指定要发送的信号 (例如 -9)。
      • -u 用户名: 匹配指定用户的进程。
      • -f: 匹配完整命令行参数。
    • 示例:
      • pkill firefox: 终止所有名为 firefox 的进程。
      • pkill -9 -f "stale_script.py": 强制杀死完整命令行包含 “stale_script.py” 的进程。
  • jobs (列出活动作业 List active jobs)
    • 用途: 显示在当前shell会话中放到后台运行或被挂起的作业。
    • 语法: jobs [选项]
    • 常用选项:
      • -l: 同时显示作业的进程ID (PID)。
      • -p: 只显示作业的进程ID。
      • -r: 只显示正在运行的作业。
      • -s: 只显示已停止(挂起)的作业。
    • 示例: jobs -l
  • bg (将作业放到后台运行 Resume suspended jobs in the background)
    • 用途: 将一个已挂起(stopped)的作业转到后台继续运行。
    • 语法: bg 51 (作业ID可通过 jobs 命令查看,通常以 % 开头,如 %1)
    • 示例: bg %1 (将作业号为1的挂起作业转到后台运行)
  • fg (将作业放到前台运行 Resume jobs in the foreground)
    • 用途: 将一个在后台运行或已挂起的作业转到前台继续运行。
    • 语法: fg
    • 示例: fg %2 (将作业号为2的作业转到前台运行)

3.2 系统性能分析 (System Performance Analysis)

  • vmstat (报告虚拟内存统计信息 Report virtual memory statistics)

    • 用途: 显示关于进程、内存、分页、块I/O、陷阱和CPU活动的即时信息。

    • 语法: vmstat [选项][延迟 [次数]]

    • 常用选项:

      • -a: 显示活动/非活动内存。
      • -s: 显示各种事件计数器和内存统计信息的表格。
      • -d: 显示磁盘统计信息。
      • -p 分区: 显示指定分区的详细统计信息。
      • -t: 在输出中添加时间戳。
      • 延迟 次数: 每隔“延迟”秒输出一次报告,共输出“次数”次。
    • 输出字段解释:

      • procs: r (等待运行的进程数), b (不可中断睡眠的进程数)。
      • memory: swpd (使用的虚拟内存), free (空闲物理内存), buff (用作缓冲的内存), cache (用作缓存的内存)。
      • swap: si (从磁盘换入的内存量/秒), so (换出到磁盘的内存量/秒)。
      • io: bi (从块设备接收到的块数/秒), bo (发送到块设备的块数/秒)。
      • system: in (每秒中断次数), cs (每秒上下文切换次数)。
      • cpu: us (用户CPU时间百分比), sy (系统CPU时间百分比), id (空闲CPU时间百分比), wa (等待I/O的CPU时间百分比), st (从虚拟机窃取的CPU时间百分比)。
    • 示例:

      • vmstat 2 5: 每2秒显示一次系统状态,共显示5次。
      • vmstat -s: 显示内存和事件计数器摘要。
  • iostat (报告CPU统计信息和输入/输出统计信息 Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions)

    • 用途: 监控系统输入/输出设备和CPU的活动情况,用于识别磁盘或CPU瓶颈。

    • 语法: iostat [选项][间隔 [次数]]

    • 常用选项:

      • -c: 仅显示CPU利用率报告。
      • -d: 仅显示设备利用率报告。
      • -x: 显示扩展的I/O统计信息。
      • -k: 以KB为单位显示统计信息。
      • -m: 以MB为单位显示统计信息。
      • -t: 打印每个报告的时间。
      • -p [设备 | ALL]: 显示块设备及其所有分区的统计信息。
      • 间隔 次数: 每隔“间隔”秒输出一次报告,共输出“次数”次。
    • 输出字段解释 (部分):

      • %user: 用户级别CPU利用率。
      • %system: 系统级别CPU利用率。
      • %iowait: CPU等待I/O操作完成的时间百分比。高 %iowait 通常表示I/O瓶颈。
      • %idle: CPU空闲时间百分比。
      • tps: 每秒传输次数。
      • Blk_read/s (或 kB_read/s, MB_read/s): 每秒读取的块/KB/MB数。
      • Blk_wrtn/s (或 kB_wrtn/s, MB_wrtn/s): 每秒写入的块/KB/MB数。
      • %util: 存储设备繁忙的时间百分比。
    • 示例:

      • iostat -dx 2 5: 每2秒显示一次扩展的磁盘I/O统计信息,共显示5次。
      • iostat -c 1: 每1秒显示一次CPU利用率。
  • sar (收集、报告或保存系统活动信息 Collect, report, or save system activity information)

    • 用途: System Activity Reporter,一个强大的系统性能分析工具,可以收集和报告CPU、内存、I/O、网络等多种系统活动的统计数据,支持历史数据分析。
    • 安装: sar 通常包含在 sysstat 包中,可能需要手动安装: sudo apt-get install sysstatsudo yum install sysstat
    • 语法: sar [选项][间隔 [次数]]
    • 常用选项:
      • -u: 显示CPU利用率。
      • -r: 显示内存利用率。
      • -b: 显示I/O和传输速率统计。
      • -d: 显示块设备(磁盘)活动。
      • -n DEV | EDEV |...: 显示网络统计信息 (DEV 为网络接口,EDEV 为网络错误)。
      • -q: 显示运行队列长度和平均负载。
      • -P ALL | CPU号: 报告每个处理器的统计信息。
      • -o 文件名: 将数据保存到二进制文件。
      • -f 文件名: 从指定文件读取数据。
      • 间隔 次数: 每隔“间隔”秒输出一次报告,共输出“次数”次。
    • 示例:
      • sar -u 2 5: 每2秒显示一次CPU利用率,共显示5次。
      • sar -r 1 3: 每1秒显示一次内存利用率,共显示3次。
      • sar -n DEV 1: 每1秒显示一次网络接口统计。
      • sar -f /var/log/sa/saDD (其中DD为日期): 查看历史系统活动报告。
  • lsof (列出打开的文件 List open files)

    • 用途: 显示系统中所有进程打开的文件列表。在Linux中,“一切皆文件”,因此 lsof 可以显示打开的普通文件、目录、网络套接字、设备等。

    • 语法: lsof [选项][文件名]

    • 常用选项:

      • -i [条件]: 显示符合条件的网络连接。例如:

        • -i TCP:22: 显示监听或连接到TCP端口22的进程。
        • -i :80: 显示监听或连接到端口80的进程。
        • -i @主机名/IP: 显示与指定主机相关的连接。
      • -u 用户名: 显示指定用户打开的文件。

      • -p PID: 显示指定进程ID打开的文件。

      • -c 命令名: 显示由指定命令名开头的进程打开的文件。

      • +D 目录: 递归显示目录下被打开的文件。

      • -t: 只输出进程ID (PID),常用于与其他命令结合。

    • 示例:

      • sudo lsof -i :80: 查看哪些进程正在使用80端口。
      • sudo lsof -u apache: 查看用户 apache 打开了哪些文件。
      • sudo lsof /var/log/syslog: 查看哪个进程打开了 /var/log/syslog 文件。
      • sudo lsof -p 1234: 查看PID为1234的进程打开了哪些文件。

四、文本处理 (Text Processing)

Linux 提供了大量强大的文本处理工具,用于查看、搜索、编辑和分析文本文件。

4.1 文件内容查看 (Viewing File Contents)

  • cat (连接文件并打印到标准输出 Concatenate files and print on the standard output)
    • 用途: 显示一个或多个文件的全部内容,也可用于创建或合并文件。
    • 语法: cat [选项][文件...]
    • 常用选项:
      • -n: 显示行号。
      • -E: 在每行末尾显示 $ 符号。
    • 示例:
      • cat myfile.txt: 显示 myfile.txt 的内容。
      • cat file1.txt file2.txt > combined.txt: 合并 file1.txtfile2.txt 的内容到 combined.txt
      • cat -n script.sh: 显示 script.sh 的内容并带行号。
  • less (与 more 功能相反,但功能更强大 Opposite of more, but with more features)
    • 用途: 分页查看文件内容,允许向前和向后滚动,支持搜索。比 cat 更适合查看大文件。
    • 语法: less [选项] 文件名
    • 常用选项:
      • -N: 显示行号。
      • -S: 禁止长行自动换行 (内容超出屏幕宽度时可水平滚动)。
      • -i: 搜索时忽略大小写。
      • -F: 如果内容能在一屏内显示完则自动退出。
      • -X: 退出 less 后不清屏。
    • 交互命令 (在 less 运行时):
      • 空格键 或 f: 向下翻一页。
      • b: 向上翻一页。
      • j 或 向下箭头: 向下滚动一行。
      • k 或 向上箭头: 向上滚动一行。
      • G: 跳转到文件末尾。
      • g: 跳转到文件开头。
      • /模式: 向下搜索指定模式。
      • ?模式: 向上搜索指定模式。
      • n: 重复上一次搜索 (同方向)。
      • N: 重复上一次搜索 (反方向)。
      • q: 退出 less
      • h: 显示帮助。
    • 示例:
      • less large_log_file.log: 查看 large_log_file.log
      • dmesg | less -N: 分页显示内核环形缓冲区消息并带行号。
  • head (输出文件的第一部分 Output the first part of files)
    • 用途: 显示文件的开头部分,默认显示前10行。
    • 语法: head [选项][文件...]
    • 常用选项:
      • -n 数字-数字: 指定显示的行数。
      • -c 字节数: 指定显示的字节数。
    • 示例:
      • head access.log: 显示 access.log 的前10行。
      • head -n 20 error.log: 显示 error.log 的前20行。
  • tail (输出文件的最后一部分 Output the last part of files)
    • 用途: 显示文件的末尾部分,默认显示最后10行。常用于监控实时更新的日志文件。
    • 语法: tail [选项][文件...]
    • 常用选项:
      • -n 数字-数字: 指定显示的行数。
      • -c 字节数: 指定显示的字节数。
      • -f: 持续显示文件末尾追加的内容,直到按 Ctrl+C 终止。非常适用于实时日志监控。
      • -n +数字: 从第几行开始显示到文件末尾。
    • 示例:
      • tail messages.log: 显示 messages.log 的最后10行。
      • tail -n 50 system.log: 显示 system.log 的最后50行。
      • tail -f /var/log/syslog: 实时监控 /var/log/syslog 文件的新增内容。

4.2 文本搜索与模式匹配 (Text Searching and Pattern Matching)

  • grep

    (打印匹配模式的行 Print lines matching a pattern)

    • 用途: 在文件中搜索包含指定模式(字符串或正则表达式)的行,并打印这些行。
    • 语法: grep [选项] 模式 [文件...]
    • 常用选项:
      • -i: 忽略模式和输入数据的大小写。
      • -v: 反向匹配,打印不包含模式的行。
      • -r-R: 递归搜索目录下的所有文件。
      • -n: 显示匹配行的行号。
      • -c: 只打印匹配行的计数。
      • -l: 只打印包含匹配模式的文件名。
      • -w: 整词匹配。
      • -E: 使用扩展正则表达式 (ERE)。
      • -A 数字: 打印匹配行及其后N行。
      • -B 数字: 打印匹配行及其前N行。
      • -C 数字: 打印匹配行及其前后各N行。
      • -e 模式: 指定多个搜索模式。
      • -o: 只显示匹配模式的部分。
    • 示例:
      • grep "error" application.log: 在 application.log 中搜索包含 “error” 的行。
      • grep -i "warning" /var/log/messages: 在 /var/log/messages 中不区分大小写地搜索 “warning”。
      • grep -r "config_value" /etc/myapp/: 递归搜索 /etc/myapp/ 目录中包含 “config_value” 的文件。
      • ps aux | grep -v "grep": 显示进程列表,但不显示 grep 命令本身。

4.3 文本编辑与转换 (Text Editing and Transformation)

  • sed (流编辑器,用于对输入流执行基本文本转换 Stream editor for performing basic text transformations on an input stream)

    • 用途: 一个强大的流编辑器,用于对文件或输入流进行非交互式的文本替换、删除、插入、转换等操作。

    • 语法: sed [选项] '脚本' [输入文件...]

    • 常用选项:

      • -i[后缀]: 直接修改文件内容 (如果提供后缀,则创建备份)。
      • -n: 禁止自动打印模式空间的内容,通常与 p 命令配合使用。
      • -e 脚本: 添加要执行的脚本。允许多个 -e 来执行多个命令。
      • -f 脚本文件: 从脚本文件中读取 sed 命令。
      • -r-E: 使用扩展正则表达式。
    • 常用命令 (在脚本中):

      • s/旧模式/新模式/[标志]: 替换 (substitute)。标志可以是:

        • g: 全局替换行内所有匹配。
        • N: 替换第N个匹配项。
        • Ii: 忽略大小写。
      • d: 删除匹配的行。

      • p: 打印模式空间的内容 (通常与 -n 选项一起使用)。

      • a\文本: 在匹配行之后追加文本。

      • i\文本: 在匹配行之前插入文本。

      • c\文本: 用文本替换匹配的行。

    • 地址 (指定命令作用的行): 可以是行号、正则表达式、或行号范围 (如 1,5 表示第1到5行;/pattern/ 表示匹配模式的行)。

    • 示例:

      • sed 's/apple/orange/g' fruit.txt: 将 fruit.txt 中所有的 “apple” 替换为 “orange” 并输出到标准输出。
      • sed -i 's/old_domain.com/new_domain.com/g' config.file: 直接修改 config.file,将其中的 “old_domain.com” 全部替换为 “new_domain.com”。
      • sed -n '/error/p' server.log: 只打印 server.log 中包含 “error” 的行。
      • sed '1,5d' data.txt: 删除 data.txt 文件的前5行。
      • sed '/^#/d' config.conf: 删除 config.conf 中所有以 # 开头的注释行。
  • awk (模式扫描和处理语言 Pattern scanning and processing language)

    • 用途: 一种强大的文本处理编程语言,非常适合处理结构化数据(如按列分隔的数据)、生成报告和执行复杂的文本操作。
    • 语法: awk '[选项] '模式 {动作}' [输入文件...]'
    • 核心概念:
      • 记录 (Record): awk 逐行处理输入,每行被视为一个记录,默认记录分隔符是换行符。
      • 字段 (Field): 每个记录被进一步分解为字段,默认字段分隔符是空格或制表符。字段可以用 $1, $2,… $NF (最后一个字段) 表示,$0 表示整个记录。
      • 模式 (Pattern): 在执行动作之前检查的条件。可以是正则表达式、比较表达式等。如果省略模式,则对每一行都执行动作。
      • 动作 (Action): 由花括号 {} 包围的一系列命令。
      • BEGIN 块: 在处理任何输入行之前执行一次。
      • END 块: 在处理完所有输入行之后执行一次。
    • 常用选项:
      • -F 分隔符: 指定输入字段分隔符。
      • -v 变量=值: 定义 awk 脚本中可以使用的变量。
      • -f 程序文件: 从文件中读取 awk 程序。
    • 内置变量:
      • FS: 输入字段分隔符 (同 -F 选项)。
      • OFS: 输出字段分隔符 (默认为空格)。
      • RS: 输入记录分隔符 (默认为换行符)。
      • ORS: 输出记录分隔符 (默认为换行符)。
      • NR: 当前已处理的记录数(行号)。
      • NF: 当前记录中的字段数。
    • awk 不仅仅是一个简单的文本过滤器,它实际上是一种编程语言,拥有变量、条件语句(如 if)、循环(如 for, while)等编程结构 。这使其能够处理比 grepsed 更复杂的文本处理任务,例如对数据进行计算、格式化输出复杂的报告等。
    • 示例:
      • awk -F':' '{print $1, $3}' /etc/passwd: 打印 /etc/passwd 文件中以冒号分隔的第一和第三个字段(用户名和UID)。
      • awk '/error/ {count++; print "Error on line " NR ": " $0} END {print "Total errors found: " count}' system.log: 搜索 system.log 中包含 “error” 的行,打印行号和内容,并在最后打印错误总数。
      • ls -l | awk '{if ($5 > 1024) print $9, "is larger than 1KB"}': 列出当前目录中大于1KB的文件。
  • tr (转换或删除字符 Translate or delete characters)

    • 用途: 用于字符级别的转换(如大小写转换)或删除。
    • 语法: tr [选项] SET1
    • 常用选项:
      • -d: 删除 SET1 中指定的所有字符。
      • -s: 压缩 SET1 (或 SET2 如果提供了 SET2) 中连续重复的字符为一个。
      • -c: 使用 SET1 的补集。
    • 字符集 (SET): 可以是单个字符、字符范围 (如 a-z, 0-9) 或特殊字符类 (如 [:lower:], [:upper:], [:digit:], [:space:])。
    • 示例:
      • echo "Hello World" | tr 'A-Z' 'a-z': 将标准输入中的大写字母转换为小写,输出 “hello world”。
      • cat myfile.txt | tr -d '\r': 删除 myfile.txt 中的回车符 (Windows换行符转Unix换行符)。
      • echo "This has too many spaces" | tr -s ' ': 将多个连续空格压缩为单个空格,输出 “This has too many spaces”。
  • cut (从每行中删除文本区域 Remove sections from each line of files)

    • 用途: 从文件的每一行中提取(剪切)指定的列或字符。
    • 语法: cut [选项][文件...]
    • 常用选项:
      • -d 分隔符: 指定字段分隔符 (默认是制表符 TAB)。
      • -f 字段列表: 指定要提取的字段编号,可以用逗号分隔多个字段 (如 1,3) 或用连字符表示范围 (如 2-5)。
      • -c 字符列表: 指定要提取的字符位置,格式同 -f
      • -b 字节列表: 指定要提取的字节位置,格式同 -f
      • --complement: 提取指定字段/字符/字节之外的部分。
      • --output-delimiter=字符串: 指定输出字段的分隔符。
    • 示例:
      • cut -d':' -f1,7 /etc/passwd: 提取 /etc/passwd 文件中以冒号分隔的第一和第七个字段(用户名和shell)。
      • date | cut -c12-19: 显示当前时间的 时:分:秒 部分。
      • who | cut -c1-8: 提取 who 命令输出中每行的前8个字符(通常是用户名)。

4.4 文本比较与统计 (Text Comparison and Statistics)

  • sort (对文本文件的行进行排序 Sort lines of text files)
    • 用途: 对文件内容按行进行排序,支持多种排序规则。
    • 语法: sort [选项][文件...]
    • 常用选项:
      • -r: 反向排序(降序)。
      • -n: 按数值大小进行排序。
      • -k 字段号[,结束字段号][选项]: 按指定的字段进行排序。字段号从1开始。可以附加排序选项,如 n (数值), r (反向)。
      • -t 分隔符: 指定字段分隔符。
      • -u: 输出唯一的行(去除重复行,等同于 sort file | uniq)。
      • -f: 忽略大小写进行排序。
      • -M: 按月份名称排序 (Jan, Feb,…)。
      • -h: 人类可读数字排序 (例如 2K, 1G)。
      • -o 输出文件: 将排序结果写入指定文件,而不是标准输出。可以用于原地排序,例如 sort -o file.txt file.txt
    • 示例:
      • sort names.txt: 按字母顺序对 names.txt 的行进行排序。
      • sort -rn data.log | head -n 5: 对 data.log 中的数字进行反向(从大到小)排序,并显示前5行。
      • sort -t':' -k3n /etc/passwd: 以冒号为分隔符,按第三个字段(UID)的数值大小对 /etc/passwd 文件进行排序。
  • uniq (报告或省略重复行 Report or omit repeated lines)
    • 用途: 从已排序的输入中删除或报告重复的相邻行。因此,uniq 通常与 sort 命令配合使用。
    • 语法: uniq [选项][输入文件 [输出文件]]
    • 常用选项:
      • -c: 在每行前输出该行重复出现的次数。
      • -d: 仅显示重复出现的行(每组重复行只显示一次)。
      • -D: 显示所有重复的行(而不是每组只显示一次)。
      • -u: 仅显示不重复的行。
      • -i: 比较时忽略大小写。
      • -f N--skip-fields=N: 跳过比较每行的前N个字段。
      • -s N--skip-chars=N: 跳过比较每行的前N个字符。
    • 示例:
      • sort access.log | uniq -c: 统计 access.log 中每种唯一请求的次数。
      • sort data.txt | uniq -d: 显示 data.txt 中所有重复的行。
  • wc (打印换行符、字和字节计数 Print newline, word, and byte counts for each file)
    • 用途: 统计指定文件或标准输入的行数、单词数、字符数或字节数。
    • 语法: wc [选项][文件...]
    • 常用选项:
      • -l: 只统计行数。
      • -w: 只统计单词数。
      • -c: 只统计字节数。
      • -m: 只统计字符数 (考虑多字节字符)。
      • -L: 打印最长行的长度。
    • 示例:
      • wc report.txt: 显示 report.txt 的行数、单词数和字节数。
      • ls -1 | wc -l: 统计当前目录下的文件和目录数量。
      • grep "error" logfile | wc -l: 统计 logfile 中包含 “error” 的行数。
  • diff (逐行比较文件 Compare files line by line)
    • 用途: 比较两个文件的内容,并显示它们之间的差异。常用于比较代码文件、配置文件等。
    • 语法: diff [选项] 文件1 文件2
    • 常用选项:
      • -u-U 数字: 以统一格式 (unified format) 输出差异,通常更易读,并被 patch 命令使用。
      • -c: 以上下文格式 (context format) 输出差异。
      • -i: 比较时忽略大小写。
      • -w: 忽略所有空格导致的差异。
      • -B: 忽略因空行导致的差异。
      • -r: 递归比较目录。如果比较的是目录,diff 会比较两个目录中同名的文件。
      • -q--brief: 仅报告文件是否不同,不显示具体差异。
      • -s: 当文件相同时报告。
    • 输出格式解释:
      • 默认格式:< 表示第一个文件中的行,> 表示第二个文件中的行,行号和操作符(a 添加, d 删除, c 更改)指示如何从文件1转换到文件2。
      • 统一格式 (-u): 以 --- file1+++ file2 开头,差异部分用 - (来自文件1) 和 + (来自文件2) 标记。
    • 示例:
      • diff config_v1.conf config_v2.conf: 比较两个配置文件的差异。
      • diff -u old_script.sh new_script.sh > script.patch: 以统一格式生成补丁文件。
      • diff -r project_v1/ project_v2/: 递归比较两个项目目录。

五、用户、用户组与权限管理 (User, Group, and Permission Management)

管理用户账户、用户组以及文件和目录的访问权限是 Linux 系统安全与管理的核心。

5.1 用户信息查看 (Viewing User Information)

  • who (显示当前已登录的用户 Show who is logged on)
    • 用途: 显示当前登录到系统的用户信息,包括用户名、终端、登录时间、来源IP等。
    • 语法: who [选项]
    • 常用选项:
      • -a--all: 显示所有信息,包括空闲时间、进程ID等。
      • -b--boot: 显示上次系统启动时间。
      • -H--heading: 显示列标题。
      • -u--users: 列出已登录用户,并显示空闲时间和PID。
      • -q--count: 只显示登录用户名和数量。
      • am i (或 am I): 显示运行 who 命令的当前用户信息。
    • 示例:
      • who: 显示当前登录用户。
      • who -H: 显示当前登录用户并带列标题。
      • who am i: 显示当前终端会话的用户信息。
  • id (打印真实和有效的用户和组ID Print real and effective user and group IDs)
    • 用途: 显示指定用户(默认为当前用户)的UID(用户ID)、GID(组ID)以及所属的用户组信息。
    • 语法: id [选项][用户名]
    • 常用选项:
      • -u: 只显示有效用户ID (UID)。
      • -g: 只显示有效组ID (GID)。
      • -G: 显示所有组ID。
      • -n: 与 -u, -g, -G 配合使用,显示名称而非数字ID。
      • -r: 与 -u, -g, -G 配合使用,显示真实ID而非有效ID。
    • 示例:
      • id: 显示当前用户的ID信息。
      • id john: 显示用户 john 的ID信息。
      • id -Gn jane: 显示用户 jane 所属的所有组的名称。

5.2 用户切换与提权 (Switching Users and Elevating Privileges)

  • su (切换用户或成为超级用户 Switch user or become superuser)
    • 用途: 允许用户在当前终端会话中切换到另一个用户账户,如果未指定用户名,则默认切换到超级用户 (root)。
    • 语法: su [选项][用户名]
    • 常用选项:
      • --l--login: 模拟一次完整的登录过程,加载目标用户的环境变量、主目录和shell配置。这是推荐的切换用户方式,以避免环境混乱。
      • -c "命令": 以目标用户身份执行单个命令后退出。
      • -s shell路径: 指定切换后使用的shell。
      • -p-m--preserve-environment: 保留当前用户的环境变量。
    • 示例:
      • su - john: 切换到用户 john,并加载其完整的登录环境。
      • su -: 切换到 root 用户,并加载其完整的登录环境 (需要输入root密码)。
      • su -c "ls /root" someuser: 以 someuser 的身份执行 ls /root 命令。
  • sudo (以其他用户身份执行命令,通常是root Execute a command as another user, typically root)
    • 用途: 允许授权用户以超级用户 (root) 或其他指定用户的身份执行命令,而无需知道目标用户的密码(通常需要输入当前用户的密码进行验证)。这是比直接使用 root 账户更安全的权限提升方式。
    • 语法: sudo [选项] 命令
    • 常用选项:
      • -u 用户名: 以指定用户的身份执行命令。
      • -i: 模拟一次 root 用户的登录shell,加载 root 的环境。
      • -s: 执行由 SHELL 环境变量指定的shell,通常是 root 的shell。
      • -l: 列出当前用户可以通过 sudo 执行的命令以及禁止执行的命令。
      • -v: 延长 sudo 的密码凭证时效,而不执行命令。
      • -k: 使当前的 sudo 密码凭证失效,下次使用 sudo 时需要重新输入密码。
      • -b: 在后台运行命令。
    • 配置文件: sudo 的权限配置存储在 /etc/sudoers 文件中,应使用 visudo 命令进行编辑,以确保语法正确并防止配置错误导致系统无法使用 sudo
    • 示例:
      • sudo apt update: 以 root 权限更新软件包列表。
      • sudo -u www-data crontab -l: 以 www-data 用户身份列出其 cron 作业。
      • sudo -i: 切换到 root 用户的交互式shell。

5.3 用户账户管理 (User Account Management)

  • useradd (创建新用户 Create a new user or update default new user information)
    • 用途: 用于在Linux系统中添加新的用户账户。
    • 语法: useradd [选项] 用户名
    • 常用选项:
      • -m: 创建用户的主目录(如果不存在)。
      • -d 家目录路径: 指定用户的主目录路径。
      • -s shell路径: 指定用户的默认登录shell (例如 /bin/bash, /sbin/nologin)。
      • -g 初始组名或GID: 指定用户的主组。
      • -G 附加组列表: 指定用户所属的附加组(逗号分隔)。
      • -c "注释": 为用户账户添加注释信息(例如全名)。
      • -e YYYY-MM-DD: 设置账户的过期日期。
    • 注意: useradd 是一个底层工具,而 adduser 是一个更用户友好的脚本,通常在Debian/Ubuntu系统中使用,它会进行更多交互式设置。
    • 示例:
      • sudo useradd -m -s /bin/bash -c "John Doe" johnd: 创建一个名为 johnd 的用户,创建其主目录,设置shell为bash,并添加注释。
      • sudo useradd -m -G developers,testers jane: 创建用户 jane,创建其主目录,并将其加入 developerstesters 组。
  • userdel (删除用户账户 Delete a user account and related files)
    • 用途: 用于从系统中删除用户账户。
    • 语法: userdel [选项] 用户名
    • 常用选项:
      • -r: 删除用户的主目录及其中的文件,以及用户的邮件池。
      • -f: 强制删除用户账户,即使该用户当前已登录或其文件仍被使用。
    • 示例:
      • sudo userdel olduser: 删除用户 olduser (不删除其主目录)。
      • sudo userdel -r former_employee: 删除用户 former_employee 并移除其主目录和邮件池。
  • usermod (修改用户账户 Modify a user account)
    • 用途: 用于修改现有用户账户的各种属性。
    • 语法: usermod [选项] 用户名
    • 常用选项:
      • -l 新登录名: 更改用户的登录名。
      • -d 新家目录路径 [-m]: 更改用户的主目录。-m 选项会将旧主目录的内容移动到新主目录。
      • -s 新shell路径: 更改用户的默认登录shell。
      • -g 新主组名或GID: 更改用户的主组。
      • -G 新附加组列表: 更改用户所属的附加组列表(会覆盖原有的附加组)。
      • -aG 附加组: 将用户追加到指定的附加组,而不影响其他已有的附加组 ( -a 必须与 -G 一起使用)。
      • -L: 锁定用户账户,使其无法登录。
      • -U: 解锁用户账户。
      • -e YYYY-MM-DD: 设置账户的过期日期。
      • -c "新注释": 修改用户的注释信息。
    • 示例:
      • sudo usermod -s /usr/sbin/nologin restricted_user: 将用户 restricted_user 的shell设置为 /usr/sbin/nologin,使其无法登录。
      • sudo usermod -aG docker current_user: 将用户 current_user 添加到 docker 组。
      • sudo usermod -L problematic_user: 锁定用户 problematic_user 的账户。
  • passwd (更改用户密码 Change user password)
    • 用途: 用于设置或更改用户账户的密码。
    • 语法: passwd [选项][用户名]
    • 行为:
      • 如果未指定用户名,则更改当前用户的密码 (需要输入当前密码)。
      • 如果由 root 用户执行并指定了用户名,则可以直接更改该用户的密码,无需知道其旧密码。
    • 常用选项:
      • -d: 删除指定用户的密码,使其可以无密码登录 (非常不安全,慎用)。
      • -l: 锁定指定用户的密码,使其无法通过密码登录。
      • -u: 解锁指定用户的密码。
      • -e--expire: 强制用户在下次登录时更改密码。
      • -S: 显示密码状态信息。
      • -n 天数: 设置密码最短有效天数。
      • -x 天数: 设置密码最长有效天数。
      • -w 天数: 设置密码过期前多少天开始警告。
      • -i 天数: 密码过期后账户停用前的天数。
    • 示例:
      • passwd: 更改当前用户的密码。
      • sudo passwd john: 更改用户 john 的密码。
      • sudo passwd -l jane: 锁定用户 jane 的密码。

5.4 用户组管理 (Group Management)

  • groupadd (创建新用户组 Create a new group)
    • 用途: 用于在系统中创建一个新的用户组。
    • 语法: groupadd [选项] 组名
    • 常用选项:
      • -g GID: 指定新用户组的GID (组ID)。如果省略,系统会自动分配一个。
      • -r: 创建一个系统组。
    • 示例: sudo groupadd developers: 创建一个名为 developers 的用户组。
  • groupdel (删除用户组 Delete a group)
    • 用途: 用于从系统中删除一个已存在的用户组。
    • 语法: groupdel [选项] 组名
    • 常用选项:
      • -f--force: 强制删除组,即使该组是某个用户的主组(通常不推荐这样做,除非明确知道后果)。
    • 注意: 不能删除作为任何用户主组的组,除非先更改该用户的主组。
    • 示例: sudo groupdel old_project_team: 删除名为 old_project_team 的用户组。
  • groupmod (修改用户组 Modify a group definition on the system)
    • 用途: 用于修改现有用户组的属性,如组名或GID。
    • 语法: groupmod [选项] 组名
    • 常用选项:
      • -n 新组名: 更改用户组的名称。
      • -g 新GID: 更改用户组的GID。
      • -o: 与 -g 配合使用,允许GID不唯一(通常不推荐)。
    • 示例:
      • sudo groupmod -n web_developers developers: 将用户组 developers 重命名为 web_developers
      • sudo groupmod -g 1005 new_team: 将用户组 new_team 的GID修改为1005。
  • groups (打印用户所属的组 Print the groups a user is in)
    • 用途: 显示指定用户(默认为当前用户)所属的所有组的列表。
    • 语法: groups [用户名]
    • 示例:
      • groups: 显示当前用户所属的组。
      • groups john: 显示用户 john 所属的组。

5.5 文件权限与归属管理 (File Permission and Ownership Management)

Linux 文件权限基于“用户-组-其他” (UGO) 模型,对每个文件或目录定义了读(r)、写(w)、执行(x)三种基本权限。

  • chmod

    (更改文件模式位/权限 Change file mode bits)

    • 用途: 修改文件或目录的访问权限。
    • 语法: chmod [选项] 模式 文件/目录...
    • 模式 (Mode):
      • 符号模式 (Symbolic Mode): 使用 u (所有者/用户), g (组), o (其他), a (所有) 结合 + (添加权限), - (移除权限), = (设置精确权限) 以及 r (读), w (写), x (执行)。
      • 数字模式 (Octal Mode): 使用三位八进制数表示权限,每位分别对应所有者、组和其他人。每位数字是r(4), w(2), x(1)权限值的和。
    • 常用选项:
      • -R: 递归地修改目录及其内容的权限。
    • 表格5.1: chmod 数字模式权限含义
数字 r (读) w (写) x (执行) 描述
0 - - - 无权限
1 - - x 执行权限
2 - w - 写入权限
3 - w x 写入和执行权限
4 r - - 读取权限
5 r - x 读取和执行权限
6 r w - 读取和写入权限
7 r w x 读取、写入和执行权限
**示例:**
`chmod u+x script.sh`: 为文件 `script.sh` 的所有者添加执行权限。 
 `chmod 600 private_key.pem`: 设置 `private_key.pem` 文件的权限为所有者可读写,组和其他人无任何权限 (rw-------)`chmod 755 public_script.sh`: 设置 `public_script.sh` 权限为所有者可读写执行,组和其他人可读可执行 (rwxr-xr-x)`sudo chmod -R 750 /var/www/my_app`: 递归地设置 `/var/www/my_app` 目录及其内容的权限为所有者读写执行,所属组读执行,其他人无权限。
  • chown (更改文件所有者和组 Change file owner and group)
    • 用途: 更改文件或目录的用户所有者和/或组所有者。通常需要超级用户权限。
    • 语法: chown [选项][新所有者][:新组] 文件/目录...
    • 常用选项:
      • -R: 递归地更改目录及其内容的所有权。
    • 示例:
      • sudo chown john myfile.txt: 将 myfile.txt 的所有者更改为用户 john
      • sudo chown jane:developers report.doc: 将 report.doc 的所有者更改为 jane,所属组更改为 developers
      • sudo chown -R www-data:www-data /var/www/html: 递归地将 /var/www/html 目录及其所有内容的所有者和所属组更改为 www-data
  • chgrp (更改文件组所有权 Change file group ownership)
    • 用途: 单独更改文件或目录的组所有者。通常需要超级用户权限。
    • 语法: chgrp [选项] 新组 文件/目录...
    • 常用选项:
      • -R: 递归地更改目录及其内容的组所有权。
    • 示例:
      • sudo chgrp editors draft.txt: 将 draft.txt 的所属组更改为 editors
      • sudo chgrp -R web_content /srv/my_website/assets: 递归地将 /srv/my_website/assets 目录及其所有内容的所属组更改为 web_content

六、网络命令 (Networking Commands)

Linux 提供了丰富的网络命令,用于测试连接、配置接口、查看状态、进行远程操作和DNS查询。

6.1 网络连接测试 (Network Connectivity Testing)

  • ping

    (向网络主机发送ICMP ECHO_REQUEST数据包 Send ICMP ECHO_REQUEST to network hosts)

    • 用途: 测试与目标主机之间的网络连通性,通过发送ICMP回显请求并等待回显应答。
    • 语法: ping [选项] 主机名或IP地址
    • 常用选项:
      • -c 次数: 发送指定数量的回显请求包后停止。
      • -i 间隔: 设置发送每个包之间的间隔秒数。
      • -s 包大小: 设置发送包的大小(字节)。
      • -W 超时: 设置等待响应的超时时间(秒)。
    • 示例:
      • ping google.com: 持续向 google.com 发送ping包,直到手动停止 (Ctrl+C)。
      • ping -c 5 192.168.1.1: 向 IP 地址 192.168.1.1 发送5个ping包。

6.2 网络接口配置与查看 (Network Interface Configuration and Viewing)

  • ip (显示/操作路由、网络设备、接口和隧道 Show / manipulate routing, network devices, interfaces and tunnels)

    • 用途: 这是Linux系统中用于网络配置的核心工具,功能强大,已取代旧的 ifconfigroute 等命令。

    • 子命令:

      • addr(或 a): 管理网络接口的IP地址。

      • ip addr show [dev 接口名]: 显示指定接口(或所有接口)的IP地址信息。

        • sudo ip addr add IP地址/掩码 dev 接口名: 为接口添加IP地址。
      • sudo ip addr del IP地址/掩码 dev 接口名: 从接口删除IP地址。

      • link(或 l): 管理网络设备(接口)本身。

        • ip link show [dev 接口名]: 显示接口的状态和属性。
      • sudo ip link set 接口名 up/down: 启用或禁用指定的网络接口。

      • sudo ip link set 接口名 mtu 数值: 设置接口的最大传输单元 (MTU)。

      • route(或 r): 管理路由表。

        • ip route showip route list: 显示内核路由表。
        • sudo ip route add 目标网络/掩码 via 网关地址 [dev 接口名]: 添加一条静态路由。
      • sudo ip route del 目标网络/掩码: 删除一条路由。

    • neigh(或 n): 管理ARP或NDP缓存(邻居表)。

      • ip neigh show: 显示邻居表。
    • ip 命令是 ifconfig 的现代替代品,功能更强大,语法更一致。ifconfig 在许多新发行版中已不再默认安装。

    • 示例:

      • ip addr show eth0: 显示 eth0 接口的IP地址信息。
      • sudo ip link set wlan0 down: 禁用 wlan0 无线接口。
      • ip route add default via 192.168.1.254 dev eth0: 添加默认网关。
  • ifconfig (配置网络接口 - 旧版 Configure a network interface - deprecated)

    • 用途: 在较旧的Linux系统中用于配置和显示网络接口信息。
    • 内容:
      • ifconfig: 显示所有活动接口的信息。
      • ifconfig 接口名: 显示指定接口的信息。
      • sudo ifconfig 接口名 IP地址 netmask 子网掩码 up: 配置接口IP并启用。
    • 注意: 此命令已逐渐被 ip 命令取代,在新系统中可能未预装。
    • 示例: ifconfig eth0

6.3 网络状态与套接字查看 (Network Status and Socket Viewing)

  • ss (另一个调查套接字的实用程序 Another utility to investigate sockets)
    • 用途: 用于显示活动的套接字连接信息,是 netstat 的现代替代品,通常更快且提供更多信息。
    • 语法: ss [选项]
    • 常用选项:
      • -t: 显示TCP套接字。
      • -u: 显示UDP套接字。
      • -x: 显示Unix域套接字。
      • -l: 显示监听状态的套接字。
      • -p: 显示使用套接字的进程。
      • -n: 不解析服务名称,直接显示数字地址和端口号。
      • -a: 显示所有状态的套接字(监听和非监听)。
      • -e: 显示详细的套接字信息。
      • -o: 显示计时器信息。
      • -s: 显示套接字摘要统计。
      • state 状态: 过滤特定状态的连接 (如 established, listen, time-wait)。
    • ss 命令比 netstat 更快、提供更多信息,并且是 netstat 的推荐替代品。
    • 示例:
      • ss -tulnp: 显示所有TCP和UDP的监听端口及其对应的进程,并以数字形式显示地址和端口。
      • ss -tan state established: 显示所有已建立的TCP连接。
      • ss -tlp sport = :22: 显示监听在SSH端口(22)的TCP连接及进程。
  • netstat (打印网络连接、路由表、接口统计等 - 旧版 Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships - deprecated)
    • 用途: 显示网络连接、路由表、接口统计等信息。
    • 语法: netstat [选项]
    • 常用选项:
      • -t: 显示TCP连接。
      • -u: 显示UDP连接。
      • -l: 显示监听套接字。
      • -p: 显示与套接字关联的进程ID和名称。
      • -n: 以数字形式显示地址和端口号。
      • -a: 显示所有活动的连接和监听端口。
      • -r: 显示内核路由表。
      • -i: 显示网络接口统计信息。
      • -s: 显示各协议的统计摘要。
    • 注意: netstat 已被 ss 命令取代,在新系统中可能未预装或不被推荐使用。
    • 示例: sudo netstat -tulnp: 显示所有TCP和UDP的监听端口、对应的进程,并以数字形式显示地址和端口。

6.4 远程连接与文件传输 (Remote Connection and File Transfer)

  • ssh (安全Shell客户端 OpenSSH SSH client (remote login program))

    • 用途: Secure Shell,用于安全地远程登录到另一台Linux/Unix服务器,并执行命令。所有通信都会被加密。
    • 语法: ssh [选项] 用户名@主机名或IP地址 [命令]
    • 常用选项:
      • -p 端口号: 指定连接的远程SSH服务器端口 (默认为22)。
      • -i 身份文件路径: 指定用于公钥认证的私钥文件路径。
      • -X: 启用X11转发,允许在本地显示远程GUI应用的界面。
      • -L 本地端口:目标主机:目标端口: 设置本地端口转发。
      • -R 远程端口:目标主机:目标端口: 设置远程端口转发。
      • -C: 启用压缩,可以加快慢速网络下的传输速度。
      • -v: 详细模式,显示连接过程的调试信息。
    • 示例:
      • ssh user@example.com: 以用户 user 的身份登录到 example.com
      • ssh -p 2222 admin@192.168.1.100 "df -h": 通过2222端口以 admin 用户身份连接到 192.168.1.100 并执行 df -h 命令。
      • ssh -L 8080:localhost:80 user@remote_server: 将本地的8080端口转发到远程服务器的80端口。
  • scp (安全复制文件 Secure copy (remote file copy program))

    • 用途: Secure Copy Protocol,用于在本地主机和远程主机之间,或者两台远程主机之间安全地复制文件和目录。它使用SSH进行数据传输和认证。
    • 语法: scp [选项][[用户名@]源主机:]源文件路径 [[用户名@]目标主机:]目标文件路径
    • 常用选项:
      • -P 端口号 (注意是大写P): 指定远程主机的SSH端口。
      • -r: 递归复制整个目录。
      • -i 身份文件路径: 指定用于认证的私钥文件。
      • -C: 启用压缩。
      • -v: 显示详细的传输过程。
      • -l 带宽限制: 限制传输带宽 (Kbit/s)。
    • 示例:
      • scp local_document.pdf user@remote.server.com:/home/user/documents/: 将本地文件 local_document.pdf 复制到远程服务器的指定目录。
      • scp -r user@source.server.com:/var/www/html/ /backup/website/: 将远程服务器上的 html 目录递归复制到本地的 /backup/website/ 目录。
      • scp -P 2200 file.zip user@another.host:~/backups/: 通过2200端口将 file.zip 复制到另一台远程主机的 backups 目录。
  • sftp (安全文件传输程序 Secure File Transfer Program)

    • 用途: 提供一个交互式的安全文件传输会话,类似于传统的FTP客户端,但所有操作都通过SSH加密通道进行。

    • 语法: sftp [选项][用户名@]主机名或IP地址

    • 常用选项:

      • -P 端口号 (大写P): 指定远程SSH端口。
      • -b 批处理文件: 从批处理文件中读取命令执行。
      • -B 缓冲区大小: 指定传输缓冲区大小。
    • 交互模式常用命令:

      (在 sftp>提示符下使用)

      • get 远程文件 [本地路径]: 下载文件。
      • put 本地文件 [远程路径]: 上传文件。
      • ls [远程路径]: 列出远程目录内容。
      • cd 远程路径: 更改远程当前目录。
      • lcd 本地路径: 更改本地当前目录。
      • pwd: 显示远程当前工作目录。
      • lpwd: 显示本地当前工作目录。
      • rm 远程文件: 删除远程文件。
      • mkdir 远程目录名: 创建远程目录。
      • rmdir 远程目录名: 删除远程目录。
      • help?: 显示帮助信息。
      • exitquitbye: 断开连接并退出SFTP。
    • 示例:

      • sftp user@fileserver.example.com: 连接到SFTP服务器。
      • (在 sftp> 提示符下) get important_data.zip /local/backups/: 从远程服务器下载文件。
  • ftp (文件传输协议客户端 - 旧版,不安全 File Transfer Protocol client - deprecated, insecure)

    • 用途: 用于通过文件传输协议 (FTP) 在网络上的计算机之间传输文件。

    • 内容: FTP传输数据和凭证(用户名、密码)时通常不加密,存在安全风险。推荐使用SFTP或SCP作为更安全的选择。

    • 语法: ftp [主机名或IP地址]

    • 交互模式常用命令:

      (在 ftp> 提示符下使用)

      • user 用户名 [密码]: 登录。
      • get 远程文件 [本地文件名]: 下载文件。
      • put 本地文件 [远程文件名]: 上传文件。
      • mget 远程文件模式: 下载多个文件。
      • mput 本地文件模式: 上传多个文件。
      • ls: 列出远程目录内容。
      • cd 远程目录: 更改远程当前目录。
      • pwd: 显示远程当前工作目录。
      • delete 远程文件: 删除远程文件。
      • mkdir 远程目录名: 创建远程目录。
      • binary: 设置二进制传输模式 (传输非文本文件时必须)。
      • ascii: 设置ASCII传输模式 (传输文本文件时)。
      • byequit: 断开连接并退出FTP。
    • 示例:

      • ftp ftp.example.com: 连接到FTP服务器 ftp.example.com
      • (在 ftp> 提示符下) get report.pdf: 下载 report.pdf 文件。
  • wget (非交互式网络下载器 The non-interactive network downloader)

    • 用途: 从Web服务器下载文件,支持HTTP, HTTPS, FTP协议。它是一个非交互式工具,可以在后台运行。
    • 语法: wget [选项]......
    • 常用选项:
      • -O 文件名: 将下载内容保存为指定的文件名。
      • -P 目录: 指定下载文件的保存目录。
      • -c: 断点续传,继续下载未完成的文件。
      • -r: 递归下载整个网站或目录。
      • -l 深度: 递归下载时指定最大深度。
      • -np: 递归下载时不进入父目录。
      • -k: 转换链接,使下载的HTML文件可以在本地查看。
      • -p: 下载所有显示HTML页面所需的文件,如图片等。
      • -b: 后台下载。
      • -i 文件: 从文件中读取URL列表进行下载。
      • --limit-rate=速度: 限制下载速度 (例如 100k,

wget (非交互式网络下载器 The non-interactive network downloader)

用途: 从Web服务器下载文件,支持HTTP, HTTPS, FTP协议。它是一个非交互式工具,可以在后台运行。

语法: wget [选项]...... [URL...]

常用选项:

  • -O 文件名: 将下载内容保存为指定的文件名。
    • 示例: wget -O latest.tar.gz https://example.com/latest-version.tar.gz
  • -P 目录: 指定下载文件的保存目录。
    • 示例: wget -P /opt/downloads https://example.com/archive.zip
  • -c: 断点续传,继续下载未完成的文件。
    • 示例: wget -c https://large.example.com/bigfile.iso
  • -r: 递归下载整个网站或目录。
    • 示例: wget -r http://example.com/docs/
  • -l 深度: 递归下载时指定最大深度。
    • 示例: wget -r -l 2 http://example.com/ (下载当前页和下一层链接)
  • -np: 递归下载时不进入父目录。
    • 示例: wget -r -np http://example.com/parent/child/ (不会下载 http://example.com/parent/ 的其他内容)
  • -k: 转换链接,使下载的HTML文件可以在本地查看。通常与 -r一起使用。
    • 示例: wget -r -k http://example.com/
  • -p: 下载所有显示HTML页面所需的文件,如图片、CSS等。通常与 -r一起使用。
    • 示例: wget -r -p http://example.com/page.html
  • -b: 后台下载。日志默认输出到 wget-log
    • 示例: wget -b https://large.example.com/bigfile.iso
  • -i 文件: 从文件中读取URL列表进行下载,每行一个URL。
    • 示例: wget -i urls.txt (其中 urls.txt 包含多个下载链接)
  • --limit-rate=速度: 限制下载速度 (例如 100k, 1m)。
    • 示例: wget --limit-rate=200k https://example.com/file.zip
  • --tries=数字: 设置重试次数 (0 表示无限)。
    • 示例: wget --tries=5 https://example.com/file.zip
  • --user-agent="字符串": 设置自定义 User-Agent。
    • 示例: wget --user-agent="MyCustomBrowser/1.0" https://example.com/
  • --no-check-certificate: 不检查服务器的SSL证书 (不安全,慎用)。
    • 示例: wget --no-check-certificate https://self-signed.example.com/
  • --user=用户名 --password=密码: FTP或HTTP认证。
    • 示例: wget --user=myuser --password=mypass ftp://ftp.example.com/file.dat

curl (Client URL 请求库)

用途: 用于传输数据的命令行工具,支持多种协议,包括 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, LDAP, SMTP 等。非常灵活,常用于API测试和自动化脚本。

语法: curl [选项] [URL...]

常用选项:

  • -O: 将输出写入与远程文件名相同的文件。
    • 示例: curl -O https://example.com/archive.zip (保存为 archive.zip)
  • -o 文件名: 将输出写入指定的文件名。
    • 示例: curl -o new_archive.zip https://example.com/archive.zip
  • -L: 跟随HTTP重定向。
    • 示例: curl -L http://example.com
  • -I--head: 仅获取HTTP头信息。
    • 示例: curl -I https://example.com
  • -H "头部信息": 添加自定义HTTP头部。
    • 示例: curl -H "Authorization: Bearer mytoken" https://api.example.com/data
  • -X 请求方法: 指定HTTP请求方法 (GET, POST, PUT, DELETE 等)。
    • 示例 (POST): curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/submit
  • -d "数据"--data "数据": 发送HTTP POST请求的数据。
    • 示例: curl -d "param1=value1&param2=value2" https://example.com/form
  • -F "表单数据"--form "表单数据": 模拟multipart/form-data提交,常用于文件上传。
    • 示例: curl -F "file=@/path/to/localfile.txt" -F "name=myfile" https://example.com/upload
  • -u 用户名:密码: 进行服务器认证。
    • 示例: curl -u myuser:mypassword https://api.example.com/protected
  • -s--silent: 静默模式,不显示进度条或错误信息。
    • 示例: STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://example.com)
  • -v--verbose: 显示详细的通信信息,包括请求和响应头。
    • 示例: curl -v https://example.com
  • -k--insecure: 允许连接到没有有效SSL证书的HTTPS站点 (不安全,慎用)。
    • 示例: curl -k https://self-signed.example.com
  • --connect-timeout 秒数: 设置最大连接时间。
    • 示例: curl --connect-timeout 5 https://example.com
  • --max-time 秒数: 设置允许操作完成的最大总时间。
    • 示例: curl --max-time 30 https://example.com/largefile

nslookup (Name Server Lookup) 🌐

用途: 查询DNS域名服务器,获取域名对应的IP地址或其他DNS记录。

语法:

  • 非交互模式: nslookup [选项] [域名] [DNS服务器]
  • 交互模式: nslookup (进入提示符后输入域名或选项)

常用选项/查询类型:

  • 默认查询A记录 (IP地址)。
  • set type=mx: 查询MX记录 (邮件交换服务器)。
  • set type=ns: 查询NS记录 (域名服务器)。
  • set type=soa: 查询SOA记录 (起始授权机构记录)。
  • set type=txt: 查询TXT记录 (文本记录)。
  • set type=ptr: 查询PTR记录 (反向DNS查找)。
  • server <DNS服务器IP>: 在交互模式下指定查询使用的DNS服务器。

示例:


dig (Domain Information Groper) ⛏️

用途: 更强大和灵活的DNS查询工具,常用于DNS故障排除。

语法: dig [@服务器] [域名] [查询类型] [选项]

常用选项/查询类型:

  • 默认查询A记录。
  • MX: 查询邮件交换记录。
  • NS: 查询域名服务器记录。
  • SOA: 查询起始授权机构记录。
  • TXT: 查询文本记录。
  • ANY: 查询所有类型的记录。
  • -x <IP地址>: 进行反向DNS查询。
  • +short: 只显示简短的答案。
  • +trace: 显示从根域名服务器开始的完整解析路径。
  • +noall +answer: 只显示答案部分。
  • @<DNS服务器IP>: 指定查询使用的DNS服务器。

示例:

  • dig example.com
  • dig example.com MX
  • dig @8.8.8.8 example.com NS
  • dig -x 8.8.4.4
  • dig example.com +short
  • dig example.com +trace
  • dig example.com ANY +noall +answer

traceroute (追踪路由路径) 🗺️

用途: 显示数据包从本地主机到目标主机所经过的路由路径,以及每一跳的延迟。

语法: traceroute [选项] 主机名或IP地址

常用选项:

  • -n: 不将IP地址解析为主机名,加快显示速度。
  • -I: 使用ICMP ECHO请求代替UDP数据报 (类似Windows的tracert)。
  • -T: 使用TCP SYN请求代替UDP数据报。
  • -p 端口号: 指定UDP或TCP的目标端口号。
  • -m 最大跳数: 设置最大跳数 (默认为30)。
  • -q 查询次数: 设置对每一跳发送的探测包数量 (默认为3)。
  • -w 等待时间: 设置等待探测包回复的超时时间 (秒)。

示例:


route (显示/操作IP路由表 - 传统)

用途: (传统工具,推荐使用 ip route) 显示和管理内核的IP路由表。

语法:

  • routeroute -n (显示路由表,-n以数字形式显示IP和端口)
  • route add [-net|-host] 目标 [netmask Nm] [gw Gw] [metric M] [[dev] If]
  • route del [-net|-host] 目标 [netmask Nm] [gw Gw] [metric M] [[dev] If]

常用选项/参数:

  • -n: 以数字形式显示地址,不解析主机名。
  • add: 添加一条路由。
  • del: 删除一条路由。
  • -net 目标网络: 指定目标是一个网络。
  • -host 目标主机: 指定目标是一个主机。
  • netmask Nm: 指定网络的子网掩码。
  • gw Gw: 指定网关地址。
  • dev If: 指定路由通过哪个网络接口。
  • metric M: 设置路由的度量值 (成本)。

示例:

  • route -n (显示当前路由表)
  • route add default gw 192.168.1.1 (添加默认网关)
  • route del default gw 192.168.1.1 (删除默认网关)
  • route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 (添加一个到10.0.0.0/8网络的静态路由)
  • route del -net 10.0.0.0 netmask 255.0.0.0 (删除上述静态路由)

七、端口查看与防火墙管理

ss (Socket Statistics) SOCKET

用途: 用于转储套接字统计信息,可以显示比 netstat 更多的TCP和状态信息。它是 netstat 的现代替代品。

语法: ss [选项]

常用选项:

  • -t: 显示TCP套接字。
  • -u: 显示UDP套接字。
  • -l: 显示监听状态的套接字。
  • -p: 显示使用套接字的进程。
  • -n: 不解析服务名称,直接显示端口号。
  • -a: 显示所有套接字 (监听和非监听)。
  • -e: 显示详细的套接字信息。
  • -o: 显示计时器信息。
  • state <状态>: 过滤特定状态的连接,如 established, listen, time-wait
    • 例如: ss state established

示例:

  • ss -tulnp (最常用组合:显示所有TCP和UDP监听端口及其进程,不解析名称)
  • ss -tan (显示所有TCP连接,不解析名称)
  • ss -s (显示套接字使用摘要)
  • ss -t -a dst :22 (显示所有到22端口的TCP连接)
  • ss -t -a src 192.168.1.100:http (显示源自192.168.1.100的HTTP TCP连接)

netstat (Network Statistics - 传统)

用途: (传统工具,推荐使用 ss) 显示网络连接、路由表、接口统计等信息。

语法: netstat [选项]

常用选项:

  • -t: 显示TCP连接。
  • -u: 显示UDP连接。
  • -l: 显示监听状态的套接字。
  • -p: 显示使用套接字的进程PID和名称 (通常需要root权限)。
  • -n: 以数字形式显示地址和端口号,不解析名称。
  • -a: 显示所有活动的连接和监听端口。
  • -r: 显示路由表 (类似 route -n)。
  • -i: 显示网络接口统计信息 (类似 ifconfigip -s link)。
  • -c: 持续显示信息。
  • -e: 显示扩展信息。

示例:

  • netstat -tulnp (最常用组合:显示所有TCP和UDP监听端口及其进程,不解析名称)
  • netstat -an (显示所有活动的连接和监听端口,不解析名称)
  • netstat -rn (显示路由表)
  • netstat -i (显示网络接口)
  • netstat -antp | grep ESTABLISHED (显示所有已建立的TCP连接及其进程)

iptables (IPv4 Packet Filtering and NAT) 🔥🧱

用途: Linux内核防火墙 netfilter 的用户空间命令行工具,用于配置IPv4数据包过滤规则、NAT和包处理。功能强大但语法复杂。

基本概念:

  • Tables (表):

    • filter: 默认表,用于数据包过滤 (INPUT, OUTPUT, FORWARD 链)。
    • nat: 用于网络地址转换 (PREROUTING, POSTROUTING, OUTPUT 链)。
    • mangle: 用于修改IP头字段 (所有链)。
    • raw: 用于配置豁免,使数据包不经过连接跟踪。
  • Chains (链):

    规则的有序列表。

    • INPUT: 处理发往本机的入站数据包。
    • OUTPUT: 处理本机发出的出站数据包。
    • FORWARD: 处理流经本机的转发数据包。
    • PREROUTING: 在路由决策之前处理数据包 (常用于DNAT)。
    • POSTROUTING: 在路由决策之后,数据包即将发出时处理 (常用于SNAT)。
  • Targets (目标):

    规则匹配后执行的动作。

    • ACCEPT: 接受数据包。
    • DROP: 丢弃数据包 (不响应)。
    • REJECT: 拒绝数据包 (通常会返回错误信息)。
    • LOG: 记录数据包信息。
    • SNAT: 源地址转换。
    • DNAT: 目标地址转换。
    • MASQUERADE: 动态源地址转换 (常用于共享上网)。

语法 (通用): iptables [-t 表名] 命令 链名 匹配条件 -j 目标

常用命令:

  • -L [链名]: 列出规则。
    • -v: 显示详细信息 (包和字节计数器)。
    • -n: 数字格式显示IP和端口。
    • --line-numbers: 显示规则编号。
  • -A 链名: 追加新规则到链尾。
  • -I 链名 [规则编号]: 插入新规则到指定位置 (默认链首)。
  • -D 链名 规则编号或规则定义: 删除规则。
  • -R 链名 规则编号 规则定义: 替换规则。
  • -F [链名]: 清空链中的所有规则。
  • -Z [链名]: 清零链中所有规则的包和字节计数器。
  • -P 链名 目标: 设置链的默认策略 (ACCEPT, DROP)。
  • -N 链名: 创建用户自定义链。
  • -X [链名]: 删除用户自定义空链。
  • -E 旧链名 新链名: 重命名用户自定义链。

常用匹配条件:

  • -p 协议: 指定协议 (tcp, udp, icmp, all)。
  • -s 源地址/掩码: 指定源IP地址或网络。
  • -d 目标地址/掩码: 指定目标IP地址或网络。
  • -i 输入接口: 指定数据包进入的网络接口。
  • -o 输出接口: 指定数据包流出的网络接口。
  • --sport 源端口: 指定源端口 (需与 -p tcp-p udp 配合)。
  • --dport 目标端口: 指定目标端口。
  • -m 模块名 --模块选项: 使用扩展模块 (如 state, conntrack, multiport, tcp, udp)。
    • -m state --state NEW,ESTABLISHED,RELATED: 匹配连接状态。
    • -m multiport --dports 22,80,443: 匹配多个目标端口。

示例:

  1. 查看规则:
    • sudo iptables -L -n -v (查看filter表所有链的规则)
    • sudo iptables -t nat -L -n -v --line-numbers (查看nat表规则并显示行号)
  2. 设置默认策略: (通常先允许所有传出,拒绝所有传入和转发)
    • sudo iptables -P INPUT DROP
    • sudo iptables -P FORWARD DROP
    • sudo iptables -P OUTPUT ACCEPT
  3. 允许特定端口/服务:
    • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT (允许SSH)
    • sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT (允许HTTP)
    • sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT (允许HTTPS)
    • sudo iptables -A INPUT -i lo -j ACCEPT (允许来自本地回环接口的所有流量)
    • sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (允许已建立和相关的连接)
  4. 允许特定IP:
    • sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
  5. 阻止特定IP:
    • sudo iptables -A INPUT -s 1.2.3.4 -j DROP (阻止单个IP)
    • sudo iptables -A INPUT -s 1.2.3.0/24 -j REJECT (拒绝整个子网)
  6. 删除规则:
    • sudo iptables -D INPUT 3 (删除INPUT链中编号为3的规则)
    • sudo iptables -D INPUT -s 1.2.3.4 -j DROP (按规则定义删除)
  7. 清空规则:
    • sudo iptables -F INPUT (清空INPUT链)
    • sudo iptables -F (清空filter表所有链)
    • sudo iptables -t nat -F (清空nat表所有链)
  8. NAT示例 (SNAT/MASQUERADE - 共享上网):
    • 假设 eth0 是外网接口,eth1 是内网接口 (内网IP段 192.168.1.0/24)。
    • sudo sysctl -w net.ipv4.ip_forward=1 (开启IP转发)
    • sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    • sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    • sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
  9. NAT示例 (DNAT - 端口转发):
    • 将外网接口 eth0 的TCP 8080端口转发到内网服务器 192.168.1.100 的80端口。
    • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    • sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

保存和恢复规则:

  • 规则默认在重启后丢失。
  • 保存: sudo iptables-save > /etc/iptables/rules.v4 (Debian/Ubuntu,需安装 iptables-persistent) sudo ip6tables-save > /etc/iptables/rules.v6 在RHEL/CentOS系统上,通常使用 systemctl enable iptablessystemctl start iptables (需要 iptables-services 包),规则保存在 /etc/sysconfig/iptables
  • 恢复: sudo iptables-restore < /etc/iptables/rules.v4
  • iptables-persistent (Debian/Ubuntu):
    • 安装: sudo apt install iptables-persistent
    • 保存当前规则: sudo netfilter-persistent save (或 sudo /etc/init.d/netfilter-persistent save)
    • 系统启动时会自动加载。

ufw (Uncomplicated Firewall) 🛡️

用途: 一个用户友好的 iptables 前端,旨在简化防火墙配置。

语法: sudo ufw [选项] 命令

常用命令与选项:

  • 状态管理:

    • sudo ufw enable: 启用防火墙 (并设置开机自启)。
    • sudo ufw disable: 禁用防火墙。
    • sudo ufw status: 查看防火墙状态和规则。
    • sudo ufw status numbered: 查看规则并显示编号。
    • sudo ufw status verbose: 查看详细状态。
    • sudo ufw reload: 重载防火墙规则 (不中断现有连接)。
    • sudo ufw reset: 重置防火墙到默认状态 (会禁用防火墙)。
  • 默认策略:

    • sudo ufw default deny incoming: 拒绝所有入站连接 (推荐)。
    • sudo ufw default allow outgoing: 允许所有出站连接 (推荐)。
    • sudo ufw default deny outgoing: 拒绝所有出站连接。
    • sudo ufw default deny routed: 拒绝所有转发的包。
  • 规则管理 (allow/deny/reject/limit):

    • sudo ufw allow <端口号>[/协议]

      • 示例: sudo ufw allow 22/tcp (允许TCP 22端口)
      • 示例: sudo ufw allow 53 (允许TCP和UDP 53端口)
    • sudo ufw allow <服务名>

      (服务名在 /etc/services中定义)

      • 示例: sudo ufw allow ssh
      • 示例: sudo ufw allow http
      • 示例: sudo ufw allow https
    • sudo ufw deny <端口号>[/协议]

      • 示例: sudo ufw deny 3306 (拒绝访问MySQL端口)
    • sudo ufw reject <端口号>[/协议] (拒绝并返回消息)

    • sudo ufw limit <端口号>[/协议]

      (限制连接频率,如SSH,防止暴力破解:如果在30秒内尝试连接6次以上,则拒绝连接)

      • 示例: sudo ufw limit ssh
  • 基于源/目标IP的规则:

    • sudo ufw allow from <IP地址>
      • 示例: sudo ufw allow from 192.168.1.100
    • sudo ufw allow from <IP地址> to any port <端口号>
      • 示例: sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
    • sudo ufw deny from <IP地址>
      • 示例: sudo ufw deny from 1.2.3.4
  • 基于网络接口的规则:

    • sudo ufw allow in on <接口名> to any port <端口号>
      • 示例: sudo ufw allow in on eth1 to any port 80
  • 删除规则:

    • sudo ufw delete <规则定义>

      • 示例: sudo ufw delete allow 80
      • 示例: sudo ufw delete allow from 1.2.3.4
    • sudo ufw delete <规则编号>

      (通过 sudo ufw status numbered 获取编号)

      • 示例: sudo ufw delete 3
  • 应用程序配置文件:

    • ufw 可以使用应用程序配置文件 (位于 /etc/ufw/applications.d)。

    • sudo ufw app list: 列出可用的应用程序配置文件。

    • sudo ufw app info <应用名>: 显示应用程序配置文件的详细信息。

    • sudo ufw allow <应用名>

      : 允许应用程序配置文件中定义的所有规则。

      • 示例: sudo ufw allow 'Nginx Full'
  • 日志:

    • sudo ufw logging on [low|medium|high|full]
    • sudo ufw logging off
    • 日志通常记录在 /var/log/ufw.log

示例流程:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing
  3. sudo ufw allow ssh (或 sudo ufw allow 22/tcp)
  4. sudo ufw allow http (或 sudo ufw allow 80/tcp)
  5. sudo ufw allow https (或 sudo ufw allow 443/tcp)
  6. sudo ufw enable
  7. sudo ufw status

firewall-cmd (Firewalld Command Line Client) 🔥 Zones

用途: firewalld 服务的命令行客户端,是 RHEL/CentOS 7+ 和 Fedora 等发行版的默认防火墙管理工具。它使用 “区域 (zones)” 和 “服务 (services)” 的概念。

基本概念:

  • Zones (区域): 网络连接可以被分配到不同的区域,每个区域有自己独立的防火墙规则集。预定义区域如 public, home, work, dmz, internal, external, block, drop, trusted
  • Services (服务): 预定义的 XML 文件,描述了服务所需的端口和协议 (如 ssh, http)。
  • Permanent vs Runtime Configuration:
    • 默认情况下,firewall-cmd 修改的是运行时配置,重启后失效。
    • 添加 --permanent 选项可以修改永久配置,但需要 firewall-cmd --reload 或重启 firewalld 服务才能生效。

语法: sudo firewall-cmd [选项] [操作]

常用命令与选项:

  • 状态与管理:

    • sudo systemctl status firewalld: 查看 firewalld 服务状态。
    • sudo systemctl start firewalld: 启动服务。
    • sudo systemctl stop firewalld: 停止服务。
    • sudo systemctl enable firewalld: 设置开机自启。
    • sudo systemctl disable firewalld: 禁止开机自启。
    • sudo firewall-cmd --state: 查看防火墙运行状态。
    • sudo firewall-cmd --reload: 重载防火墙规则 (不中断现有连接,使永久配置生效)。
    • sudo firewall-cmd --complete-reload: 完全重载 (中断现有连接)。
  • 区域管理:

    • sudo firewall-cmd --get-default-zone: 获取默认区域。
    • sudo firewall-cmd --set-default-zone=<区域名>: 设置默认区域。
    • sudo firewall-cmd --get-active-zones: 获取当前活动的区域及其绑定的接口。
    • sudo firewall-cmd --get-zones: 列出所有可用区域。
    • sudo firewall-cmd --zone=<区域名> --list-all: 列出指定区域的所有配置。
    • sudo firewall-cmd --zone=<区域名> --add-interface=<接口名>: 将接口添加到指定区域 (运行时)。
    • sudo firewall-cmd --zone=<区域名> --add-interface=<接口名> --permanent: 永久添加。
    • sudo firewall-cmd --zone=<区域名> --change-interface=<接口名>: 修改接口所属区域。
    • sudo firewall-cmd --zone=<区域名> --remove-interface=<接口名>: 从区域移除接口。
    • sudo firewall-cmd --zone=<区域名> --add-source=<IP或子网>: 将源IP/子网添加到区域。
  • 服务管理:

    • sudo firewall-cmd --get-services: 列出所有预定义的服务。
    • sudo firewall-cmd --zone=<区域名> --add-service=<服务名> (运行时)
    • sudo firewall-cmd --zone=<区域名> --add-service=<服务名> --permanent (永久)
      • 示例: sudo firewall-cmd --permanent --zone=public --add-service=http
    • sudo firewall-cmd --zone=<区域名> --remove-service=<服务名> (运行时)
    • sudo firewall-cmd --zone=<区域名> --remove-service=<服务名> --permanent (永久)
    • sudo firewall-cmd --zone=<区域名> --list-services: 列出区域中允许的服务。

    端口管理:

    • sudo firewall-cmd --zone=<区域名> --add-port=<端口号>/<协议> (运行时)
    • sudo firewall-cmd --zone=<区域名> --add-port=<端口号>/<协议> --permanent(永久)
      • 示例: sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
    • sudo firewall-cmd --zone=<区域名> --remove-port=<端口号>/<协议> (运行时)
    • sudo firewall-cmd --zone=<区域名> --remove-port=<端口号>/<协议> --permanent (永久)
    • sudo firewall-cmd --zone=<区域名> --list-ports: 列出区域中允许的端口。
  • Panic Mode:

    • sudo firewall-cmd --panic-on: 紧急模式,丢弃所有入站和出站数据包。
    • sudo firewall-cmd --panic-off: 关闭紧急模式。
    • sudo firewall-cmd --query-panic: 查询紧急模式状态。
  • Direct Rules (直接规则 - 类似iptables语法,不推荐常规使用):

    • sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 22 -j ACCEPT
  • Rich Rules (富规则 - 更灵活的规则定义):

    • sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
    • sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'

示例流程 (public区域):

  1. sudo systemctl start firewalld
  2. sudo systemctl enable firewalld
  3. sudo firewall-cmd --set-default-zone=public (通常public是默认)
  4. sudo firewall-cmd --permanent --zone=public --add-service=ssh
  5. sudo firewall-cmd --permanent --zone=public --add-service=http
  6. sudo firewall-cmd --permanent --zone=public --add-service=https
  7. sudo firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp (允许一个端口范围)
  8. sudo firewall-cmd --reload
  9. sudo firewall-cmd --zone=public --list-all

八、常用配置文件与文本编辑器

常见重要配置文件 ⚙️

以下是一些Linux系统中常见的配置文件及其典型路径和用途:

  • /etc/passwd:

    • 用途: 存储用户账户信息(如用户名、用户ID (UID)、组ID (GID)、用户描述、家目录路径、默认shell)。密码字段通常是一个x,表示加密后的密码存储在/etc/shadow中。
    • 格式: username:password_placeholder:UID:GID:comment:home_directory:login_shell
  • /etc/shadow:

    • 用途: 安全地存储用户加密后的密码和密码老化信息。此文件通常只有root用户可读。

    • 格式:

      username:encrypted_password:last_password_change_date:min_password_age:max_password_age:warning_period:inactivity_period:expiration_date:reserved_field
      • encrypted_password: !* 表示账户被锁定或没有密码。
      • 日期字段通常是从1970年1月1日开始的天数。
  • /etc/group:

    • 用途: 存储用户组信息(组名、组ID (GID)、组成员列表)。
    • 格式: group_name:password_placeholder:GID:user_list_comma_separated
  • /etc/fstab (Filesystem Table):

    • 用途: 定义磁盘分区、各种块设备或远程文件系统如何在系统启动时挂载到文件系统中,或者在需要时由 mount -a 命令挂载。

    • 格式:

      device_spec mount_point fstype options dump pass_num
      • device_spec: 设备(如/dev/sda1)或UUID(如UUID=xxxxxxxx-xxxx...
      • mount_point: 挂载点(如//home/var
      • fstype: 文件系统类型(如ext4xfsntfsnfs
      • options: 挂载选项(如defaultsrwronoatime
      • dump: dump工具是否备份(0或1)
      • pass_num: fsck检查文件系统的顺序(0表示不检查,1表示根文件系统,2表示其他)
  • /etc/hosts:

    • 用途: 提供静态的IP地址到主机名的映射。在DNS解析之前,系统会检查此文件。常用于本地测试或强制解析特定域名到特定IP。

    • 格式:

      IP_address canonical_hostname [aliases...]
      • 示例: 127.0.0.1 localhost loopback
      • 示例: 192.168.1.100 myserver myapp.local
  • /etc/resolv.conf:

    • 用途: 配置DNS解析器,指定域名服务器(nameserver)的IP地址以及搜索域(search domain)。在许多现代发行版中,此文件可能由网络管理服务(如NetworkManager或systemd-resolved)动态生成和管理,不建议手动编辑。
    • 格式:
      • nameserver IP_address_of_DNS_server
      • search domain1.com domain2.net
      • options timeout:1
  • ~/.bashrc (用户特定):

    • 用途: Bash shell的用户特定配置文件。当用户启动一个新的交互式非登录shell时(如打开一个新的终端窗口),此文件中的命令会被执行。常用于设置别名、环境变量、自定义提示符等。
    • 位置: 用户家目录下 (~ 表示家目录,如 /home/username/.bashrc)
  • /etc/profile (系统全局):

    • 用途: Bash (及其他Bourne兼容shell) 的系统全局配置文件。当任何用户登录系统时(登录shell),此文件中的命令会被执行。它通常会调用 /etc/profile.d/ 目录下的脚本。
    • 注意: 修改此文件会影响系统所有用户。
  • /etc/profile.d/*.sh:

    • 用途: /etc/profile 通常会执行此目录下的所有 .sh 脚本,用于模块化地配置系统范围的环境变量和启动程序。
  • /etc/bash.bashrc (系统全局,某些发行版):

    • 用途: 系统全局的bashrc文件,为所有用户的交互式非登录shell执行。
  • /var/log/syslog (Debian/Ubuntu) 或 /var/log/messages (RHEL/CentOS):

    • 用途: 系统主要的日志文件,记录了内核消息、系统服务消息、以及各种应用程序的日志。是故障排除的重要来源。
    • 管理: 通常由 rsyslogdsyslog-ng 服务管理。
  • /etc/ssh/sshd_config:

    • 用途: OpenSSH服务器 (sshd) 的配置文件。控制SSH服务的行为,如监听端口、是否允许root登录、认证方法等。
  • /etc/sysctl.conf:

    • 用途: 用于在系统启动时配置内核参数。sysctl -p 可以加载此文件中的设置。

常用文本编辑器 📝

在Linux命令行下,最常用的文本编辑器是 vi (或其增强版 vim) 和 nano

nano

nano 是一个简单易用的命令行文本编辑器,适合初学者。屏幕底部会显示常用快捷键。

启动:

  • nano 文件名 (如果文件不存在,则创建新文件)
  • nano (不带文件名,之后可保存为新文件)

常用快捷键 (Ctrl 代表 Control 键):

  • Ctrl + G: 获取帮助 (显示所有快捷键)。
  • Ctrl + O: 保存文件 (Write Out)。会提示输入文件名,回车确认。
  • Ctrl + X: 退出 nano。如果文件已修改但未保存,会提示是否保存。
  • Ctrl + W: 搜索文本 (Where is)。
  • Ctrl + \: 替换文本 (Replace)。
  • Ctrl + K:剪切当前行 (Cut Text)。
  • Ctrl + U: 粘贴剪切的文本 (Uncut Text)。
  • Ctrl + C: 显示当前光标位置 (行号、列号)。
  • Ctrl + J: 对齐当前段落 (Justify)。
  • Ctrl + T: 检查拼写 (需要安装 spell 包)。
  • Alt + U: 撤销上一次操作。
  • Alt + E: 重做上一次撤销的操作。
  • 方向键: 移动光标。
  • PageUp / PageDown: 上下翻页。
  • Home / End: 移动到行首/行尾。

示例: sudo nano /etc/hosts (编辑hosts文件,需要sudo权限)

vi / vim (Vi IMproved)

vi 是一个功能强大的模态编辑器,学习曲线较陡峭,但熟练后效率极高。vimvi 的增强版,提供了更多功能(如语法高亮、多级撤销等)。大多数现代系统实际上的 vi 命令是指向 vim 的。

模式:

  1. 命令模式 (Command Mode): 默认模式。用于移动光标、删除文本、复制粘贴等操作。按键不会直接输入文本。
  2. 插入模式 (Insert Mode): 用于输入文本。从命令模式按 i, a, o 等键进入。按 Esc 键返回命令模式。
  3. 末行模式 (Last Line Mode / Ex Mode): 在命令模式下按 : 进入。用于执行保存、退出、搜索替换等命令。

启动:

  • vi 文件名vim 文件名

基本操作 (命令模式下):

  • 移动光标:
    • h: 左
    • j: 下
    • k: 上
    • l: 右
    • w: 移动到下一个单词的开头
    • b: 移动到上一个单词的开头
    • 0 (零): 移动到当前行行首
    • ^: 移动到当前行第一个非空白字符
    • $: 移动到当前行行尾
    • gg: 移动到文件第一行
    • G: 移动到文件最后一行
    • 行号G: 移动到指定行号 (例如 10G 到第10行)
  • 进入插入模式:
    • i: 在当前光标前插入
    • I: 在当前行首插入
    • a: 在当前光标后追加
    • A: 在当前行尾追加
    • o: 在当前行下方插入一个新行
    • O: 在当前行上方插入一个新行
  • 删除文本:
    • x: 删除当前光标处的字符
    • dw: 删除一个单词 (从光标处到词尾)
    • dd: 删除当前行
    • 数字dd: 删除从当前行开始的指定数量的行 (例如 3dd 删除3行)
    • D: 删除从光标到行尾的内容
  • 复制 (Yank) 与粘贴 (Put):
    • yw: 复制一个单词
    • yy: 复制当前行 (y 代表 yank)
    • 数字yy: 复制多行
    • p: 在光标后粘贴 (小写p)
    • P: 在光标前粘贴 (大写P)
  • 撤销与重做:
    • u: 撤销上一次操作 (undo)
    • Ctrl + r: 重做上一次撤销的操作 (redo)
  • 搜索:
    • /模式: 向下搜索 “模式” (按 n 查找下一个, N 查找上一个)
    • ?模式: 向上搜索 “模式”

末行模式命令 (按 : 后输入):

  • :w: 保存文件 (write)。
  • :w 文件名:另存为指定文件名。
  • :q: 退出 (quit)。如果文件已修改但未保存,会阻止退出。
  • :q!: 强制退出,不保存修改。
  • :wq:x: 保存并退出。
  • :e 文件名: 编辑另一个文件。
  • :set number:set nu: 显示行号。
  • :set nonumber:set nonu: 关闭行号。
  • :%s/旧字符串/新字符串/g: 全局替换 (g代表global)。
  • :%s/旧字符串/新字符串/gc: 全局替换,每次替换前确认 (c代表confirm)。
  • :!外部命令: 执行外部shell命令 (例如 :!ls -l)。

示例: sudo vim /etc/ssh/sshd_config

学习 vim:

  • 可以在终端中运行 vimtutor 命令,这是一个交互式的 vim 教程。

这只是 vim 功能的冰山一角,但足以应付日常的配置文件编辑。


文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录