Linux/UNIX 核心概念万字详解

Linux/UNIX 核心概念万字详解

从内核架构、文件系统、进程管理、信号与 IPC,到用户权限、网络、Shell、日志、软件包与审计——Linux/UNIX 100 个核心概念的一次系统梳理。每个概念都附有定义、机制与实践要点,是打底知识的一份长期参考。


一、系统基础与架构

1. 内核(Kernel)

内核是操作系统的核心,直接附着在硬件平台之上,控制和管理系统内各种资源(CPU、内存、设备),并向上层提供系统调用接口。它负责进程管理、内存管理、文件系统管理、设备驱动和安全控制等核心功能。Linux内核采用单块架构,但支持模块化加载,允许在运行时动态链接或解除链接功能模块,实现了高效与灵活的统一。

2. 发行版(Distribution)

发行版是基于Linux内核的完整操作系统套装,包含内核、系统工具、应用软件和包管理器。常见的发行版有Ubuntu(面向桌面用户)、CentOS(面向服务器)、Arch(面向高级用户)等。发行版通过整合GNU工具集、桌面环境(如GNOME、KDE)和软件仓库,降低了用户使用Linux的门槛,同时提供了差异化的生态体验。

3. Shell

Shell是用户与内核交互的命令解释器,位于操作系统的最外层,接收用户输入的命令并将其传递给内核执行。常见的Shell有Bash(Bourne Again Shell)、Zsh、Fish等。Shell不仅是一个命令行界面,还是一种编程语言,支持变量、循环、条件判断等结构,用户可以通过编写Shell脚本自动化完成复杂任务。

4. 终端(Terminal)

终端是运行Shell的窗口程序,提供了文本输入输出的图形化界面。常见的终端模拟器有GNOME Terminal、Konsole、Terminator等。终端本身不执行命令,而是启动一个Shell进程,将用户的键盘输入传递给Shell,并将Shell的输出显示在屏幕上。终端还支持多标签、分屏、配色方案等增强功能。

5. 控制台(Console)

控制台是系统启动时直接显示的文本界面,通常通过Ctrl+Alt+F1~F6切换。控制台不依赖图形环境,在系统故障或图形界面无法启动时,仍可通过控制台进行系统维护。每个控制台对应一个独立的虚拟终端,支持多用户同时登录,是Linux系统可靠性的重要保障。

6. 根用户(Root)

根用户是Linux系统中的超级管理员,拥有对系统的完全控制权,其用户标识符(UID)固定为0。根用户可以访问任何文件、执行任何命令、修改系统配置。由于权限过大,日常操作应避免直接使用root账户,而是通过sudo命令临时提权,这样既能完成管理任务,又能记录操作日志,提高安全性。

7. sudo

do(superuser do)允许普通用户以root或其他用户的身份执行命令,同时将操作记录到日志中。通过配置/etc/sudoers文件,管理员可以精细控制哪些用户、在哪些主机上、可以执行哪些命令。sudo相比直接使用root账户更安全,因为它要求用户输入自己的密码(而非root密码),且可以限制命令范围,防止误操作。

8. 系统调用(System Call)

系统调用是用户程序请求内核服务的接口,是用户态进入内核态的唯一合法途径。常见的系统调用有open()、read()、write()、fork()、exec()等。当应用程序需要访问硬件设备、创建进程、分配内存时,必须通过系统调用陷入内核,由内核代表应用程序完成操作。系统调用是操作系统提供的最小功能单元,库函数和Shell命令最终都依赖系统调用实现。

9. POSIX

OSIX(Portable Operating System Interface)是IEEE制定的操作系统接口标准,旨在确保不同Unix系统之间的应用程序可移植性。POSIX定义了系统调用、库函数、Shell、环境变量等规范。Linux遵循POSIX标准,因此许多为其他Unix系统编写的程序可以不经修改地在Linux上编译运行,这也是Linux能够成为Unix生态重要成员的原因。

10. GNU工具集

GNU(GNU's Not Unix)是自由软件基金会发起的项目,旨在创建一个完全自由的操作系统。GNU工具集包括编译器(GCC)、调试器(GDB)、文本编辑器(Emacs)、Shell(Bash)以及大量命令行工具(ls、grep、sed、awk等)。Linux内核与GNU工具集结合,形成了完整的操作系统,因此严格来说应称为“GNU/Linux”。

11. 引导流程(Boot Process)

Linux系统的引导流程从BIOS/UEFI开始,依次经过引导加载程序(GRUB)、内核加载、init进程启动(现代系统使用systemd)。具体步骤:BIOS/UEFI执行硬件自检并加载GRUB;GRUB读取配置文件,加载内核和initramfs到内存;内核初始化硬件、挂载根文件系统;最后启动init进程(PID=1),由init负责启动其他系统服务。整个流程体现了从硬件到软件的逐层抽象。

12. init 系统

系统init是系统启动后的第一个用户空间进程,负责启动、监控和终止其他系统服务。传统SysV init使用串行启动方式,效率较低;现代Linux广泛使用systemd,它采用并行启动、按需启动、依赖管理等机制,大大加快了系统启动速度。systemd还提供了systemctl、journalctl等工具,统一管理服务、日志和系统状态。

13. cgroups(控制组)

cgroups是Linux内核特性,用于限制、隔离和统计进程组的资源使用(CPU、内存、磁盘I/O、网络带宽)。它通过将进程分组,并为每个组设置资源配额,防止某个进程过度消耗资源影响整个系统。cgroups是容器技术(如Docker、LXC)的底层支撑,每个容器可以看作一个独立的cgroup,实现资源隔离和限制。

14. 命名空间(Namespace)

命名空间是Linux内核的隔离机制,为进程提供独立的系统资源视图。常见的命名空间包括PID(进程隔离)、Network(网络栈隔离)、Mount(文件系统挂载点隔离)、UTS(主机名隔离)、IPC(进程间通信隔离)、User(用户ID隔离)等。命名空间与cgroups结合,构成了容器技术的核心,使得容器内的进程仿佛运行在独立的操作系统中。

15. 虚拟文件系统(VFS)

VFS是Linux内核的抽象层,位于用户进程和具体文件系统之间,定义了一组所有文件系统都支持的数据结构和标准接口(如open、read、write)。用户进程只需与VFS交互,无需关心底层是ext4、XFS还是NFS。VFS屏蔽了不同文件系统的实现差异,实现了“一切皆文件”的设计哲学——普通文件、目录、设备、管道、套接字都通过统一的文件接口操作。

二、文件系统与目录结构

16. 一切皆文件

一切皆文件”是Unix/Linux的核心设计哲学,意味着所有系统资源(普通文件、目录、设备、管道、套接字、进程信息等)都可以通过文件描述符和统一的read()/write()接口进行访问。这种抽象简化了程序设计,使得用户可以使用相同的系统调用来操作不同类型的资源。例如,向/dev/null写入数据等同于丢弃数据,从/dev/random读取数据则获得随机数。

17. 根目录(/)

根目录是Linux文件系统树状结构的起点,用斜杠“/”表示。所有文件、目录、设备、挂载点都位于根目录之下。根目录是文件系统的顶层,其内容由FHS标准规定,包含/bin、/etc、/home、/usr、/var等子目录。根目录本身也是一个目录文件,其inode编号通常为2,由系统在格式化时创建。

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

FHS定义了Linux系统中目录的布局和用途,确保不同发行版之间的兼容性。例如,/bin存放基本命令(ls、cp),/etc存放配置文件,/var存放可变数据(日志、邮件),/usr存放用户程序和只读数据,/home存放用户家目录。遵循FHS的发行版,用户和管理员可以快速定位文件,便于系统维护和脚本编写。

19. inode

node(索引节点)是文件系统中存储文件元数据的数据结构,每个文件或目录都有一个唯一的inode。inode包含文件类型、权限(rwx)、所有者(UID/GID)、文件大小、时间戳(atime/mtime/ctime)、数据块指针、硬链接计数等信息。文件名不存储在inode中,而是存储在目录项中。inode是文件系统的核心,通过它内核可以快速定位文件数据。

20. 硬链接(Hard Link)

硬链接是多个目录项指向同一个inode的链接方式。创建硬链接后,文件名和原文件共享相同的inode和数据块,删除其中一个不会影响另一个(只有当链接计数降为0时,inode和数据块才会被释放)。硬链接不能跨文件系统创建,也不能用于目录(防止形成循环)。硬链接常用于备份和文件共享,节省磁盘空间。

21. 符号链接(Symbolic Link)

符号链接(软链接)是一个独立的文件,其内容存储了目标文件的路径。访问符号链接时,内核会自动重定向到目标文件。与硬链接不同,符号链接可以跨文件系统,也可以指向目录。但删除原文件后,符号链接会变成“悬空链接”,访问时会报错。符号链接常用于创建快捷方式、管理软件版本(如/usr/bin/python -> python3)。

22. 挂载(Mount)

挂载是将一个文件系统附加到目录树的过程,使得该文件系统的内容可以通过指定的挂载点目录访问。例如,mount /dev/sda1 /mnt 将分区/dev/sda1挂载到/mnt目录。挂载点必须是已存在的空目录,挂载后该目录的原有内容会被临时隐藏。Linux支持多种文件系统类型,通过mount命令的-t参数指定。持久化挂载需写入/etc/fstab文件。

23. ext4

是第四代扩展文件系统,是Linux最主流的文件系统之一。它支持最大1EB的分区和16TB的单个文件,具备日志机制(保证数据一致性)、区段(Extents)分配(减少碎片化)、延迟分配、多块分配等特性。ext4向下兼容ext2/ext3,性能稳定,适用于服务器系统盘、个人电脑和普通数据存储。

24. XFS

是一种高性能64位日志文件系统,由SGI开发,现为RHEL/CentOS的默认文件系统。它支持最大8EB的分区和9EB的单个文件,并发读写性能优异,特别适合大文件和视频存储场景。XFS采用分配组(Allocation Group)设计,支持在线扩容,但缩容较困难。在数据库服务器和高性能计算集群中广泛使用。

25. Btrfs

Btrfs(B-tree文件系统)是一种写时复制(CoW)文件系统,支持快照、压缩、子卷、RAID管理、数据校验等高级功能。它允许动态调整分区大小,提供自我修复能力(通过校验和检测数据损坏)。Btrfs适合企业级存储和需要频繁备份的场景,但由于仍在积极开发中,稳定性不如ext4和XFS,在关键生产环境中需谨慎使用。

26. /proc

proc是一个虚拟文件系统,不占用磁盘空间,由内核在内存中动态生成。它反映了内核和进程的实时状态,例如/proc/cpuinfo显示CPU信息,/proc/meminfo显示内存使用情况,/proc/<PID>/ 目录下包含每个进程的详细信息。用户可以通过读取/proc文件获取系统信息,也可以通过写入某些文件(如/proc/sys/)动态调整内核参数。

27. /sys

ys是sysfs虚拟文件系统,提供设备、驱动、电源管理、总线等硬件信息的统一视图。它由内核在启动时创建,将设备模型以文件形式呈现。例如,/sys/class/net/ 下包含网卡信息,/sys/block/ 下包含块设备信息。udev工具利用/sys中的信息动态管理设备节点,实现即插即用功能。

28. /dev

ev目录存放设备文件,是用户空间访问硬件设备的接口。设备文件分为字符设备(如/dev/tty、/dev/random)和块设备(如/dev/sda、/dev/nvme0n1)。传统上设备文件是静态创建的,现代Linux使用udev(用户空间设备管理器)动态创建和删除设备节点,当硬件插入或移除时自动更新/dev目录。

29. /tmp

mp目录用于存放临时文件,任何用户都可以在此创建文件,但通常只有文件所有者才能删除(粘滞位保护)。/tmp通常挂载为tmpfs(基于内存的文件系统),重启后内容自动清空。系统服务也会使用/tmp存储临时数据,因此应确保/tmp有足够的空间并定期清理。

30. /var

ar目录存放可变数据,包括系统日志(/var/log)、邮件队列(/var/mail)、打印队列(/var/spool)、数据库文件(/var/lib)、临时文件(/var/tmp)等。与/tmp不同,/var/tmp中的文件在重启后通常保留。/var是系统运行过程中数据增长的主要区域,需要监控磁盘使用情况,并配置logrotate等工具管理日志轮转。

三、文件操作与权限

31. 文件权限(rwx)

Linux文件权限使用9位二进制表示,分为三组:所有者(User)、所属组(Group)、其他用户(Other),每组包含读(r=4)、写(w=2)、执行(x=1)三种权限。例如,-rwxr-xr--表示所有者可读写执行,组用户可读可执行,其他用户只读。权限通过chmod命令修改,数字模式(如755)或符号模式(如u+x)均可。权限信息存储在inode中。

32. chmod

用于修改文件或目录的访问权限。数字模式:chmod 755 file 将权限设为rwxr-xr-x(所有者7=4+2+1,组5=4+1,其他5=4+1)。符号模式:chmod u+x file 给所有者添加执行权限,chmod o-w file 移除其他用户的写权限。chmod -R 可递归修改目录及其子文件权限。注意:只有文件所有者和root才能修改权限。

33. chown

用于修改文件或目录的所有者和所属组。语法:chown user:group file,例如chown alice:staff data.txt 将文件所有者改为alice,组改为staff。只修改所有者:chown alice file;只修改组:chown :staff file。chown -R 递归修改。普通用户不能将文件所有权转让给他人,只有root可以任意修改。

34. chgrp

专门用于修改文件或目录的所属组,功能与chown :group相同。语法:chgrp group file。普通用户只能将文件组改为自己所属的组(且必须是该组的成员),root可以改为任意组。chgrp -R 递归修改。chgrp是chown的子集,但单独提供便于记忆和使用。

35. umask

是文件创建时的默认权限掩码,用于控制新文件或目录的初始权限。umask值从系统权限中减去,得到实际权限。例如,umask 022 表示新文件权限为666-022=644(rw-r--r--),新目录权限为777-022=755(rwxr-xr-x)。umask通常在Shell配置文件(如.bashrc)中设置,影响当前会话中所有新建文件。

36. ACL(访问控制列表)

ACL 提供了比传统rwx更细粒度的权限控制,允许为特定用户或组单独设置权限,而不仅限于所有者、组和其他三类。例如,setfacl -m u:alice:rw file 给用户alice赋予读写权限。ACL通过getfacl查看,setfacl设置。ACL在需要复杂权限共享的场景(如多用户协作的项目目录)中非常有用,但会略微增加文件系统开销。

37. setuid / setgid

和setgid是特殊权限位,当应用于可执行文件时,允许用户以文件所有者(setuid)或文件所属组(setgid)的身份运行该程序,而不是以当前用户身份。例如,/usr/bin/passwd设置了setuid位,普通用户执行它时临时获得root权限,从而可以修改/etc/shadow文件。setgid还可用于目录,使在该目录下创建的新文件继承目录的组。

38. 粘滞位(Sticky Bit)

粘滞位(t位)主要用于/tmp等共享目录,防止非文件所有者删除或重命名其他用户的文件。设置粘滞位后,目录的权限显示为drwxrwxrwt(最后一位t)。只有文件所有者、目录所有者或root才能删除文件。粘滞位通过chmod +t dir设置,对普通文件无意义。它是多用户系统中保护临时文件安全的重要机制。

39. ls -l

以长格式列出文件详细信息,输出格式为:-rw-r--r-- 1 alice staff 1024 Jan 1 10:00 file.txt。各部分含义:第一个字符表示文件类型(-普通文件,d目录,l符号链接),后9位为权限,数字为硬链接计数,alice为所有者,staff为所属组,1024为文件大小(字节),Jan 1 10:00为最后修改时间,file.txt为文件名。ls -i可同时显示inode编号。

40. find

是强大的文件搜索命令,支持按名称、类型、大小、时间、权限、所有者等条件查找文件。基本语法:find [路径] [条件] [动作]。例如,find /home -name "*.txt" 查找所有.txt文件;find /var -size +100M 查找大于100MB的文件;find . -mtime -7 查找7天内修改过的文件。find还支持-exec参数对找到的文件执行命令,是系统管理和脚本编写的重要工具。

四、进程与作业管理

41. 进程(Process)

进程是程序在计算机上的一次执行活动,是系统进行资源分配和调度的基本单位。每个进程有独立的地址空间、文件描述符、环境变量等资源。进程由内核创建,通过fork()系统调用复制父进程,再通过exec()加载新程序。进程拥有唯一PID(进程ID),所有进程形成树状结构,根为init(PID=1)。进程是动态的,有生命周期:创建、运行、等待、终止。

42. 守护进程(Daemon)

守护进程是后台持续运行的服务进程,通常以d结尾(如sshd、httpd、crond)。它们脱离终端控制,在系统启动时自动启动,并在后台等待处理请求。守护进程通过fork()创建子进程后,父进程退出,子进程调用setsid()创建新会话,从而与终端完全脱离。守护进程是Linux服务架构的基础,常见于网络服务、系统监控、定时任务等。

43. PID

(进程标识符)是系统为每个进程分配的唯一正整数,用于区分不同进程。PID从1开始(init/systemd),最大值为/proc/sys/kernel/pid_max(通常32768)。当进程终止后,其PID可被新进程重用,但系统会避免立即重用。PID是进程管理的基础,通过PID可以使用kill、renice、wait等命令操作特定进程。

44. PPID

ID(父进程ID)是创建当前进程的父进程的PID。每个进程都有父进程(除了init),通过ps -ef或pstree命令可以查看进程树。PPID在进程创建时由内核设置,用于追踪进程层级关系。当父进程先于子进程终止时,子进程成为孤儿进程,被init收养,其PPID变为1。

45. 僵尸进程(Zombie)

僵尸进程是已经终止但未被父进程回收的进程,其进程描述符仍保留在进程表中,占用一个PID。僵尸进程不占用CPU和内存,但会消耗进程表项(系统资源有限)。如果父进程没有调用wait()或waitpid()来获取子进程的退出状态,子进程就会变成僵尸。父进程终止后,僵尸进程会被init收养并自动清理。

46. 孤儿进程

是指父进程先于子进程终止的进程。此时子进程成为孤儿,被init(PID=1)收养,init会定期调用wait()回收它们。孤儿进程不会变成僵尸,因为init会自动处理。孤儿进程在后台运行时不会产生问题,但如果父进程意外崩溃,子进程可能失去控制,需要系统管理员注意。

47. ps

rocess status)用于查看当前系统的进程快照。常用选项:ps aux 显示所有进程的详细信息(包括用户、CPU/内存使用率、状态、启动时间等);ps -ef 显示标准格式;ps -eo pid,ppid,cmd 自定义输出列。ps从/proc文件系统读取进程信息,是系统监控和故障排查的基础工具。

48. top / htop

是动态实时监控进程资源占用的工具,默认按CPU使用率排序,显示进程ID、用户、CPU%、内存%、运行时间、命令等。按P键按CPU排序,按M键按内存排序,按k键可终止进程。htop是top的增强版,支持彩色显示、鼠标操作、树状视图、垂直/水平滚动,更直观易用。两者都依赖/proc文件系统,是性能分析的首选工具。

49. kill

用于向进程发送信号,默认发送SIGTERM(15),请求进程优雅终止。常用信号:kill -9 PID 发送SIGKILL强制终止;kill -15 PID 发送SIGTERM;kill -1 PID 发送SIGHUP(让守护进程重新加载配置)。kill通过PID指定目标进程,如果进程不存在会报错。killall命令可通过进程名发送信号。

50. nice / renice

用于以指定优先级启动程序,renice用于调整已运行进程的优先级。优先级范围从-20(最高)到19(最低),默认值为0。只有root可以设置负优先级(提高优先级)。语法:nice -n 10 command 以较低优先级运行;renice -n 5 -p PID 将进程优先级调整为5。调整优先级可以控制CPU资源分配,确保重要任务获得更多CPU时间。

五、信号与进程间通信

51. 信号(Signal)

信号是软件中断,用于通知进程发生了异步事件。信号由内核或另一个进程发送,进程可以捕获、忽略或执行默认操作。Linux支持多种信号,如SIGINT(Ctrl+C)、SIGTERM(终止请求)、SIGKILL(强制终止)、SIGCHLD(子进程状态变化)等。信号是进程间通信的一种简单方式,常用于进程控制、错误通知和定时器。

52. SIGKILL

(9)SIGKILL是强制终止信号,进程无法捕获、忽略或阻塞它。收到SIGKILL后,内核立即终止进程并释放其资源,不给进程任何清理机会。因此,SIGKILL应作为最后手段使用,仅当进程无响应且SIGTERM无效时使用。使用kill -9 PID发送。注意:SIGKILL不能杀死僵尸进程(僵尸已死,只是未回收)。

53. SIGTERM

(15)SIGTERM是优雅终止信号,请求进程自行退出。进程可以捕获SIGTERM并执行清理操作(如保存数据、关闭文件、释放资源),然后退出。如果进程忽略SIGTERM,则不会终止。大多数守护进程和应用程序会注册SIGTERM处理函数,实现平滑关闭。使用kill PID(默认发送SIGTERM)或kill -15 PID。

54. SIGINT

(2)SIGINT是中断信号,通常由用户按下Ctrl+C触发。前台进程收到SIGINT后,默认行为是终止。进程可以捕获SIGINT并执行自定义操作(如提示确认退出)。SIGINT与SIGTERM类似,但通常用于用户主动中断,而SIGTERM用于系统或管理员请求终止。

55. SIGCHLD

是子进程状态变化时(终止、停止、继续)发送给父进程的信号。父进程可以通过捕获SIGCHLD来异步回收子进程,避免子进程变成僵尸。如果父进程不处理SIGCHLD,子进程终止后父进程需要显式调用wait()来回收。现代程序常使用SIGCHLD结合waitpid()实现高效的子进程管理。

56. 管道(Pipe)

管道是Unix/Linux中最基本的进程间通信方式,将一个命令的标准输出连接到另一个命令的标准输入,用竖线“|”表示。例如,ls -l | grep "txt" 将ls的输出作为grep的输入。管道是单向的、无名的,只能在有亲缘关系的进程(如父子进程)之间使用。管道本质上是内核中的一个缓冲区,默认大小通常为64KB。

57. 命名管道(FIFO)

命名管道(FIFO)是一种特殊的文件类型,通过mkfifo命令创建。与普通管道不同,FIFO有文件名,允许无亲缘关系的进程通过它通信。FIFO遵循先进先出原则,数据以流的形式传输。常用于客户端-服务器模型,例如一个进程写入FIFO,另一个进程读取。FIFO在文件系统中可见,使用ls -l查看时类型为p。

58. 信号量(Semaphore)

信号量是用于同步多个进程对共享资源访问的计数器。它支持两种原子操作:P(等待,减少计数)和V(释放,增加计数)。当计数为0时,P操作会阻塞进程直到其他进程执行V操作。信号量可以解决互斥和同步问题,例如控制对共享内存的访问。Linux提供System V信号量和POSIX信号量两种实现。

六、用户与组管理

59. 用户(User)

用户是系统资源的访问者,每个用户有唯一的用户名和UID(用户标识符)。用户信息存储在/etc/passwd文件中,包括用户名、加密密码占位符(x)、UID、GID、用户描述、家目录、登录Shell。用户通过登录认证后,获得相应的权限。Linux是多用户系统,支持同时多个用户登录,每个用户拥有独立的家目录和环境。

60. 组(Group)

组是用户的集合,用于简化权限管理。每个组有唯一的组名和GID(组标识符)。组信息存储在/etc/group文件中。一个用户可以属于多个组,其中一个是主组(在/etc/passwd中指定),其他为附加组。通过将用户加入特定组,可以批量授予文件访问权限,例如将开发人员加入dev组,然后设置项目目录的组权限为读写。

61. /etc/passwd

/etc/passwd是系统用户账户信息文件,每行代表一个用户,格式为:用户名:密码占位符:UID:GID:描述:家目录:Shell。例如,alice:x:1000:1000:Alice:/home/alice:/bin/bash。密码字段通常为x,表示密码存储在/etc/shadow中。该文件对所有用户可读,因此不能存储明文密码。修改用户信息应使用usermod、useradd等专用命令。

62. /etc/shadow

/etc/shadow存储加密后的用户密码和密码策略信息,仅root可读。每行格式为:用户名:加密密码:最后修改日:最小天数:最大天数:警告天数:禁用天数:过期日:保留字段。加密密码使用SHA-512()等算法。密码策略包括密码有效期、过期警告、账户锁定等,通过chage命令管理。shadow文件的存在提高了密码安全性。

63. /etc/group

/etc/group存储组信息,每行格式为:组名:密码占位符:GID:成员列表。例如,staff:x:100:alice,bob。密码字段通常为空(x),组密码很少使用。成员列表是用逗号分隔的用户名,表示该组的附加成员。主组成员不在/etc/group中列出,而是通过/etc/passwd中的GID确定。

64. useradd

用于创建新用户,常用选项:-m 创建家目录,-s 指定Shell,-G 指定附加组,-u 指定UID。例如,useradd -m -s /bin/bash -G sudo alice 创建用户alice,家目录为/home/alice,Shell为bash,加入sudo组。useradd还会在/etc/shadow中创建密码条目(需用passwd设密码)。不同发行版默认行为略有差异。

65. passwd

用于设置或修改用户密码。普通用户只能修改自己的密码(需输入旧密码),root可以修改任何用户的密码。passwd会加密新密码并更新/etc/shadow。密码强度由系统策略(如pam_cracklib)控制,要求包含大小写字母、数字和特殊字符,长度至少8位。使用passwd -l可锁定账户,-u解锁。

66. usermod

用于修改已有用户的属性,如用户名(-l)、家目录(-d)、Shell(-s)、UID(-u)、附加组(-aG)等。例如,usermod -aG docker alice 将用户添加到docker组(-a表示追加,防止覆盖现有组)。usermod -L 锁定账户(在密码前加!),-U解锁。修改用户信息后,用户需重新登录才能生效。

七、网络与远程访问

67. IP 地址

地址IP地址是网络设备的唯一标识,分为IPv4(32位,如192.168.1.1)和IPv6(128位,如fe80::1)。Linux中通过ifconfig或ip addr查看IP地址。IP地址与子网掩码配合使用,确定网络地址和主机地址。IP地址是网络通信的基础,每个网络接口(如eth0、wlan0)可以配置一个或多个IP地址。

68. SSH

(Secure Shell)是加密的远程登录协议,默认端口22。它使用公钥加密技术,确保数据传输的机密性和完整性。SSH客户端(ssh命令)连接到SSH服务器(sshd守护进程),支持密码认证和密钥认证。SSH还支持端口转发、X11转发、文件传输(通过SCP、SFTP)等功能,是Linux系统管理的必备工具。

69. SCP / SFTP

(Secure Copy)基于SSH协议,用于在本地和远程主机之间安全复制文件。语法:scp source destination,例如scp file.txt user@host:/path/。SCP支持递归复制目录(-r)、保留文件属性(-p)等选项。与FTP不同,SCP全程加密,适合传输敏感数据。现代系统推荐使用rsync替代SCP,因为rsync支持断点续传和增量传输。

70. ping

用于测试网络连通性,通过发送ICMP回显请求并等待响应。ping hostname 会持续发送数据包,显示响应时间和丢包率。ping -c 4 hostname 发送4个包后停止。ping是网络故障排查的第一步,可以判断目标主机是否可达、网络延迟是否正常。注意:某些防火墙会屏蔽ICMP,导致ping不通但其他服务正常。

71. netstat / ss

和ss用于查看网络连接、路由表、接口统计等。ss是netstat的现代替代,性能更好。常用选项:ss -tuln 显示所有监听端口(t TCP,u UDP,l监听,n数字格式);ss -an 显示所有连接。通过ss可以查看哪些服务在监听哪些端口,以及当前建立的连接状态(ESTABLISHED、TIME_WAIT等),是网络调试的重要工具。

72. tcpdump

是命令行网络抓包工具,用于捕获和分析网络流量。语法:tcpdump -i eth0 host 192.168.1.1 抓取eth0接口上与192.168.1.1通信的包。支持过滤表达式(如port 80、tcp、udp),可保存到文件(-w)并用Wireshark分析。tcpdump是网络故障排查、协议分析和安全审计的利器,但需要root权限。

73. iptables / nftables

es/nftablesiptables是Linux内核的包过滤防火墙工具,通过规则表(filter、nat、mangle)控制网络流量。nftables是iptables的现代替代,语法更简洁,性能更好。防火墙规则可以允许、拒绝或修改数据包,实现访问控制、端口转发、NAT等功能。例如,iptables -A INPUT -p tcp --dport 22 -j ACCEPT 允许SSH连接。防火墙配置通常保存为脚本或使用firewalld管理。

74. DNS

(域名系统)将域名(如www.example.com)解析为IP地址。Linux系统通过/etc/resolv.conf配置DNS服务器(如8.8.8.8)。常用DNS工具:nslookup、dig、host。DNS解析是网络通信的前提,如果DNS配置错误,域名将无法访问。本地DNS缓存(如systemd-resolved、dnsmasq)可加速解析。

75. DHCP

CP(动态主机配置协议)自动为网络设备分配IP地址、子网掩码、网关、DNS等参数。Linux客户端通过dhclient或NetworkManager获取IP。DHCP服务器(如isc-dhcp-server)管理地址池,避免IP地址冲突。DHCP简化了网络配置,特别适合移动设备和大型网络。静态IP则需手动配置/etc/network/interfaces或使用nmcli。

76. curl / wget

和wget是命令行HTTP/HTTPS请求工具。curl功能更丰富,支持多种协议(HTTP、FTP、SMTP等)、自定义请求头、Cookie、认证等。例如,curl -O https://example.com/file.zip 下载文件。wget更专注于下载,支持递归下载、断点续传。两者都是自动化脚本和API测试的常用工具。

八、Shell脚本与文本处理

77. Bash

Bash(Bourne Again Shell)是Linux默认的Shell,兼容sh,并扩展了命令行编辑、作业控制、数组、算术运算等功能。Bash脚本以#!/bin/bash开头,支持变量、条件判断(if)、循环(for、while)、函数、输入输出重定向等。Bash是系统管理自动化的核心语言,通过编写脚本可以批量处理文件、监控系统、部署应用。

78. 环境变量

是影响进程行为的动态命名值,通过export命令设置。常见环境变量:PATH(可执行文件搜索路径)、HOME(用户家目录)、USER(当前用户名)、LANG(语言环境)、SHELL(当前Shell)。环境变量在进程创建时从父进程继承,子进程可以修改自己的环境变量而不影响父进程。配置文件如.bashrc、.profile用于设置用户环境。

79. PATH

环境变量定义了Shell查找可执行文件的目录列表,各目录用冒号分隔。例如,PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。当用户输入命令时,Shell按顺序在PATH目录中查找同名可执行文件。如果命令不在PATH中,需使用绝对路径或相对路径。修改PATH(如export PATH=$PATH:/opt/bin)可以扩展命令搜索范围。

80. grep

是强大的文本搜索工具,根据正则表达式匹配文件内容。基本语法:grep pattern file。常用选项:-i 忽略大小写,-r 递归搜索目录,-n 显示行号,-v 反向匹配,-c 统计匹配行数,-E 支持扩展正则。例如,grep -rn "error" /var/log/ 在日志中递归搜索error。grep常与管道结合,用于过滤命令输出。

81. sed

(流编辑器)用于对文本进行非交互式编辑,支持替换、删除、插入、打印等操作。基本语法:sed 's/old/new/g' file。常用命令:s(替换)、d(删除行)、a(追加)、i(插入)、p(打印)。sed逐行处理文本,默认输出到标准输出,使用-i选项直接修改文件。sed是文本处理的重要工具,常用于批量替换配置文件中的参数。

82. awk

是一种模式扫描与处理语言,擅长格式化文本报告。基本语法:awk 'pattern {action}' file。awk自动将每行分割为字段,2等表示第1、2个字段。例如,awk '{print 3}' file 打印每行的第1和第3列。awk支持变量、数组、算术运算、控制流,可以编写复杂的数据处理脚本。awk与grep、sed并称文本处理三剑客。

83. 正则表达式

则表达式是用于模式匹配的字符串规则,被grep、sed、awk、vim等工具支持。基本元字符:. 匹配任意字符,* 匹配前一个字符零次或多次,^ 匹配行首,$ 匹配行尾,[] 匹配字符集,\ 转义。扩展正则(ERE)支持+、?、|、()等。正则表达式是文本处理的基石,掌握正则可以高效地搜索、替换和提取文本信息。

84. 脚本调试

ell脚本调试通过bash -x script.sh或set -x实现,显示每条命令及其参数(前面加+号)。set -e使脚本在遇到错误时立即退出,set -u将未定义变量视为错误。trap命令可以捕获信号并执行清理操作。调试时还可以使用echo打印变量值,或使用bashdb等调试器。良好的调试习惯能快速定位脚本中的逻辑错误。

九、系统服务与日志

85. systemd

是Linux系统的服务管理器,取代了传统的SysV init。它使用单元(unit)文件管理服务、挂载点、套接字、定时器等。systemd支持并行启动、按需启动、依赖管理、自动重启等特性,显著加快系统启动速度。systemd还集成了日志系统(journald)、时间同步(timesyncd)、网络管理(networkd)等功能,成为现代Linux发行版的标准组件。

86. systemctl

是systemd的控制命令,用于管理服务单元。常用操作:systemctl start nginx 启动服务;systemctl stop nginx 停止;systemctl restart nginx 重启;systemctl enable nginx 设置开机自启;systemctl status nginx 查看服务状态。systemctl还支持mask(屏蔽服务)、daemon-reload(重载配置)等高级功能。

87. journalctl

用于查询systemd日志(journald),支持按时间、服务、优先级等过滤。例如,journalctl -u nginx 查看nginx服务的日志;journalctl --since "1 hour ago" 查看最近一小时的日志;journalctl -f 实时跟踪新日志。journalctl将日志存储在二进制文件中,支持结构化查询,比传统文本日志更高效。

88. cron

是Linux的定时任务调度器,通过crontab文件配置。crontab格式:分 时 日 月 周 命令。例如,0 2 * * * /usr/bin/backup.sh 每天凌晨2点执行备份。cron服务(crond)每分钟检查一次crontab,执行到期的任务。用户可以使用crontab -e编辑自己的任务,root可以管理所有用户的任务。cron是系统自动化的基础,常用于日志轮转、数据备份、系统更新。

89. logrotate

用于管理日志文件,防止日志无限增长占用磁盘空间。它根据配置自动轮转、压缩、删除旧日志。配置文件在/etc/logrotate.conf和/etc/logrotate.d/中。例如,/var/log/syslog { weekly rotate 4 compress } 表示每周轮转一次,保留4个备份,并压缩。logrotate通常由cron定时执行,是系统日志管理的重要工具。

90. syslog / rsyslog

是系统日志记录框架,rsyslog是其增强版,支持多源日志收集、过滤、转发。日志消息根据设施(facility)和优先级(priority)分类,写入/var/log/下的文件(如messages、auth.log)。rsyslog支持TCP/UDP传输、数据库存储、模板格式化等高级功能。日志是系统故障排查和安全审计的重要依据。

十、软件包管理

91. 包管理器

是自动化安装、更新、卸载软件的工具,解决软件依赖关系。Linux发行版通常使用两种包格式:Debian系(.deb)使用APT,Red Hat系(.rpm)使用YUM/DNF。包管理器从软件仓库(repository)下载预编译的二进制包,自动处理依赖,确保系统一致性。包管理器的出现大大简化了软件安装过程,是Linux生态繁荣的重要基础。

92. APT

(Advanced Package Tool)是Debian/Ubuntu的包管理工具。常用命令:apt update 更新软件源列表;apt install package 安装包;apt remove package 卸载包;apt upgrade 升级所有可升级的包;apt search keyword 搜索包。APT自动处理依赖关系,并将包信息缓存到本地。现代APT还支持apt list、apt show等查询命令。

93. YUM / DNF

FYUM(Yellowdog Updater Modified)和DNF(Dandified YUM)是Red Hat/CentOS/Fedora的包管理器。DNF是YUM的下一代,性能更好,依赖解析更准确。常用命令:dnf install package;dnf remove package;dnf update;dnf search keyword。DNF使用RPM作为底层包格式,支持插件扩展(如自动镜像选择、增量更新)。

94. RPM / DEB

BRPM(Red Hat Package Manager)和DEB(Debian Package)是两种主流的软件包格式。RPM用于Red Hat系(CentOS、Fedora),DEB用于Debian系(Ubuntu、Debian)。包文件包含二进制程序、配置文件、文档和元数据(版本、依赖、描述)。直接使用rpm -ivh package.rpm或dpkg -i package.deb可以安装,但不处理依赖,因此通常通过包管理器使用。

95. 仓库(Repository)

软件仓库是存储预编译包的服务器,通过配置文件(如/etc/apt/sources.list)指定。仓库分为官方仓库(如Ubuntu的main、universe)和第三方仓库(如PPA、EPEL)。包管理器从仓库下载包并验证签名,确保软件来源可靠。添加第三方仓库可以获取官方未提供的软件,但需注意安全风险。仓库机制是Linux软件分发的主要方式。

十一、安全与审计

96. 防火墙(Firewall)

防火墙是监控和控制网络流量的安全系统,基于规则允许或拒绝数据包。Linux防火墙通过iptables/nftables实现,也可使用firewalld(动态防火墙管理工具)简化配置。防火墙规则可以基于IP地址、端口、协议、状态等条件。例如,firewall-cmd --add-service=http --permanent 开放HTTP服务。防火墙是系统安全的第一道防线。

97. fail2ban

是入侵防御工具,通过监控日志文件(如/var/log/auth.log)检测多次认证失败,然后使用iptables临时封禁攻击IP。它支持多种服务(SSH、Apache、Postfix等),可自定义封禁时间和重试次数。fail2ban能有效防止暴力破解攻击,是服务器安全加固的常用工具。配置在/etc/fail2ban/jail.conf中。

98. SELinux

SELinux(安全增强型Linux)是强制访问控制(MAC)机制,由美国国家安全局开发。它通过安全策略定义进程可以访问哪些文件、端口、资源,即使进程被攻破,也无法越权操作。SELinux有三种模式:Enforcing(强制)、Permissive(仅记录)、Disabled(禁用)。配置复杂,但能提供极高的安全性,常用于政府、军事等高安全环境。

99. AppArmor

AppArmor是基于路径的强制访问控制,与SELinux互补。它通过配置文件(profile)限制程序可以访问的文件、网络、能力。例如,/usr/bin/evince的profile允许它读取PDF文件但禁止访问网络。AppArmor比SELinux更易配置,适合桌面和通用服务器。Ubuntu默认使用AppArmor,而CentOS使用SELinux。

100. 审计(Audit)

Linux审计系统(auditd)用于记录系统安全相关事件,如文件访问、系统调用、用户登录等。审计规则通过auditctl命令配置,日志写入/var/log/audit/audit.log。审计可以检测入侵行为、追踪用户操作、满足合规要求。例如,auditctl -w /etc/passwd -p wa -k passwd_changes 监控passwd文件的写和属性修改。审计日志需定期审查,结合ausearch工具分析。


以上100个概念涵盖了Linux/UNIX从底层内核到上层应用的完整知识体系。每个概念的定义、机制和作用相互关联,共同构成了这个强大而灵活的操作系统。建议读者结合实践操作(如搭建虚拟机、编写Shell脚本、配置服务)来加深理解,并持续关注Linux内核和工具的发展。如需某个概念的详细示例或深入探讨,欢迎继续提问。