1. 基础命令
Linux常用文件操作命令? ls、cd、pwd、mkdir、touch、cp、mv、rm、cat、vi/vim。
如何查看系统版本?
uname -a
如何查找文件?
# 按名称查找find [路径] [匹配条件] [动作]find / -name "filename"# 基于数据库快速查找(-i 忽略大小写; -n x 显示前x条)locate -i "filename"如何查看文件内容 / 如何查看大文件?
cat(全部)、less/more(分页)、head/tail(头尾)、grep(过滤)。
less/more 区别?
- more 只能向前翻页,加载大文件慢,无交互搜索;
- less 支持双向滚动,按需加载性能优,内置搜索功能强,且在管道中可回溯,更适合大型文件和复杂操作。
如何查看当前目录?
pwd (Print Working Directory)
如何管理用户?
useradd 选项 用户名userdel 选项 用户名usermod 选项 用户名passwd 选项 用户名如何管理权限?
chmod改变文件/目录权限,三个数字owner/group/others,八进制表示法(读4 写2 执行1)chown改变所有者,chgrp改变所在组
目录权限含义?
- 读(r):允许列出目录中的文件和子目录名称(ls)。
- 写(w):允许在目录中创建、删除、重命名文件或子目录(会改变目录的文件列表)。
- 执行(x):允许进入目录(cd)并访问其中的文件或子目录。
- 注意:
- 只有 x 权限而无 r 权限,可以进入目录但无法列出文件名。
- 只有 r 权限而无 x 权限,可以看到文件列表但无法进入目录或访问文件内容。
子目录有写权限但父目录没有,能修改子目录吗?
| 操作 | 需要父目录权限 | 需要子目录权限 |
|---|---|---|
| 修改子目录内文件 | x(穿过) | w + x |
| 在子目录内创建/删除文件 | x | w + x |
进入子目录 cd | x | x |
| 删除/重命名子目录本身 | w + x | — |
| 列出父目录内容 | r | — |
如何设置定时任务?
crontab -e 编辑当前用户 crontab 文件,* * * * * command 分/时/日/月/星期
硬链接与软链接(符号链接)的底层区别? 硬链接是同一inode的多个入口,不能跨文件系统,不能指向目录,删除源不影响;软链接是新inode存储路径字符串,指向源文件路径,源删除则失效(高亮闪烁)。
硬链接为什么不能跨文件系统?
- 硬链接指向的是 inode,而 inode 号只在当前文件系统内有意义。每个文件系统都有自己的 inode 表,另一个文件系统里的同一个 inode 号不代表同一个文件。
- 软链接保存的是路径字符串,解析时按路径重新查找目标文件,所以可以跨文件系统
如何查看文件被哪个进程占用?
lsof filename
Linux系统结构,主要目录作用?
分层的树形结构,主要目录作用:
- /bin 存放常用的用户命令,如ls、cp等,普通用户和管理员均可使用。
- /sbin 存放系统管理员使用的管理命令,如ifconfig、reboot等。
- /etc 存放系统配置文件和子目录,例如网络配置文件/etc/hosts和DNS配置文件/etc/resolv.conf。
- /home 用户的主目录,每个用户都有一个以用户名命名的子目录。
- /root 超级用户(root)的主目录,仅供系统管理员使用。
- /lib和/lib64 存放系统的共享库文件,类似于Windows的DLL文件,几乎所有程序都依赖这些库。
- /usr 存放用户应用程序和文件,包括/usr/bin(用户命令)、/usr/sbin(管理员命令)和/usr/local(本地安装的软件)。
- /var 存放动态数据,如日志文件(/var/log)、邮件(/var/mail)和临时文件(/var/tmp)。
- /tmp 存放临时文件,系统重启后会清空。
- /dev 存放设备文件,例如硬盘(/dev/sda)和终端(/dev/tty)。
- /proc 虚拟文件系统,存储内核和进程信息,例如CPU信息(/proc/cpuinfo)和内存信息(/proc/meminfo)。
- /sys 类似于/proc,用于存储设备和内核模块的信息。
- /boot 存放启动相关文件,包括内核和引导加载器配置文件。
- /media和/mnt 用于挂载外部设备,如U盘和光驱。
- /opt 存放第三方软件或可选应用程序。
- /run 存储系统运行时的信息,系统重启后会清空。
如何查看文件类型?
ls -l 看第一列
- -:普通文件
- d:目录文件
- b:块设备文件(一般位于
/dev,以块为单位进行读写的特殊设备文件,通常用于硬盘、光盘和U盘等存储设备) - c:字符设备文件(一般位于
/dev,允许用户按字节顺序与设备交互,例子包括键盘、鼠标、串口和终端设备) - s:套接字文件
- p:管道文件
- l:链接文件(软链接)
su命令作用、参数?
作用:切换用户。主要参数:
- / -l / --login模拟完整登录,加载目标用户环境-c "cmd"以目标用户执行一条命令后退出-s shell指定使用的 shell-m / -p保留当前环境变量(不重置)-g group指定主组-G group指定附加组
su user和su - user区别?
su user | su - user | |
|---|---|---|
| 环境变量 | 保留当前用户环境 | 重新加载目标用户环境 |
| 工作目录 | 不变(当前目录) | 切换到目标用户 home |
| PATH | 沿用原用户 | 重置为目标用户的 PATH |
| shell 类型 | 非登录 shell | 登录 shell |
| 读取配置 | 不读 .bash_profile / .profile | 读取 .bash_profile / .profile / .bashrc |
| 本质 | 只切换身份 | 完整登录模拟 |
用 su user 跑脚本可能因 PATH 不对找不到命令;生产脚本建议用 su - user -c "cmd"。
2. 进程管理
进程排查
如何查看所有运行中的进程?
ps aux 或 ps -ef。
如何实时监控进程和系统资源?
top(实时刷新),关注%CPU、%MEM、load average。
top命令顶部输出含义?
- Tasks(进程任务):
total总进程数;running正在运行;sleeping睡眠;stopped暂停;zombie僵尸进程(重点警戒值,不为0需关注)。 - %Cpu(s):
us用户态占用;sy内核态占用;id空闲;waI/O等待;hi/si硬/软中断。 - MiB Mem(物理内存):
total总内存;free完全空闲;used已分配(含缓存);buff/cache缓冲区+页缓存(Linux会把空闲内存拿来当缓存,所以看可用内存应看available列)。
数值异常 & 常见原因
| 现象 | 可能原因 |
|---|---|
us 高 | 应用死循环、计算密集、代码 bug、QPS 突增 |
sy 高 | 系统调用频繁、上下文切换多、锁竞争、网络/磁盘驱动问题 |
wa 高 | 磁盘 I/O 瓶颈、NFS 慢(Network FileSystem)、数据库慢查询、swap 抖动 |
si 高 | 网络软中断集中、单核跑满、网卡多队列未配置、DDoS |
hi 高 | 硬件中断频繁、网卡/磁盘中断风暴 |
st 高 | 虚拟机被宿主机超卖、邻居抢占资源(云主机常见) |
ni 高 | 有人用 nice 跑后台任务 |
id 低但负载不高 | 可能是 st 或 wa 吃掉了,需结合 vmstat / iostat 看 |
排查套路
us 高 → top 看进程 → perf/火焰图sy 高 → vmstat 看 cs/in → stracewa 高 → iostat -x 1 → 看 %util / awaitsi 高 → mpstat -P ALL 1 → 看是否单核 → 调 RPS/RSS/多队列st 高 → 找云厂商 / 换宿主机ps aux / top命令各个关键字段含义?
- PID:进程ID
- USER:所属用户
- PR/NI:优先级与 nice 值
- VIRT/RES/SHR:虚拟内存、常驻内存、共享内存
- %CPU/%MEM:CPU/内存占用率
- TIME+:累计 CPU 时间
- COMMAND:命令名或完整命令行
CPU硬中断和软中断区别? 硬中断由外部硬件触发,软中断由软件指令触发,它们在操作系统中分别处理实时事件和系统调用任务。
进程清理
kill与kill -9的区别? kill默认发SIGTERM(可捕获、可清理);kill -9发SIGKILL(强制终止,不可捕获)。
kill 命令中信号编号 1、2、3、9、15、18、19 的具体区别?
- 1 (SIGHUP):终端挂起,常用于让进程重读配置(如Nginx -s reload本质发此信号)。
- 2 (SIGINT):键盘中断(Ctrl+C),进程可捕获清理。
- 3 (SIGQUIT):键盘退出(Ctrl+\),会产生core dump用于调试。
- 9 (SIGKILL):强制终止,不可捕获/忽略,直接由内核回收,可能造成资源泄漏或脏数据。
- 15 (SIGTERM):默认终止信号,可捕获,优雅停机首选(超时后补9)。
- 18 (SIGCONT):继续运行被暂停的进程。
- 19 (SIGSTOP):暂停进程(Ctrl+z,不可捕获,类似外部挂起)。
- 补充:Ctrl+d 表示输入结束,不发送信号,若输入为空,则返回0,类似EOF
僵尸进程是什么?如何清理? 子进程退出后父进程未调用wait()回收,进程描述符残留在进程表中。无法kill僵尸本身,需kill父进程(PPID),父进程死后僵尸被init收养并清理。
孤儿进程是什么? 父进程先退出,子进程被init(PID 1)收养,由init负责回收,通常无害。
进程间七种通信方式
- 管道(Pipe):父子进程间单向传输,数据无格式。
- 命名管道(FIFO):通过文件节点,允许无亲缘关系进程通信。
- 信号(Signal):异步通知机制(如
kill -9)。 - 消息队列(Message Queue):内核维护的消息链表,有格式。
- 共享内存(Shared Memory):最快的方式,映射同一块物理内存,需配合信号量使用。
- 信号量(Semaphore):本质上是一个计数器,用于进程/线程间的同步与互斥,而非传输数据。
- 套接字(Socket):用于跨网络或本机不同进程间的通信(TCP/UDP)。
3. 内存与存储
基础
Buffer和Cache的区别? Buffer(Buffers):块设备元数据缓存(inode、分区信息)。Cache(Page Cache):文件内容缓存,读写都经过它。
手动drop_caches有什么风险?
echo 3 > /proc/sys/vm/drop_caches会清空Page Cache,导致CPU飙升重建索引、磁盘I/O风暴(Cache Miss),生产环境慎用。
如何查看内存使用情况?
free -h;vmstat 查看虚拟内存统计。
虚拟地址
缺页中断与内存映射
- 内存映射(mmap):将磁盘文件或设备数据直接映射到进程的虚拟地址空间,使程序可以像访问内存一样访问文件数据,由内核在后台同步。
- 懒加载(Lazy Loading):数据只有在首次访问时才会触发缺页异常,由内核将对应文件页加载到物理内存。
- 缺页异常(Page Fault):当进程试图访问一个尚未加载到物理内存的虚拟页面时。
- 次要异常/软缺页:数据已在 page cache,只需建立页表映射即可,很快。
- 主要异常/硬缺页:数据不在 page cache,必须触发磁盘I/O将其读入内存(很慢,影响性能)。
虚拟内存
什么是Swap?什么时候会用到?
- 定义:Swap(交换分区)是硬盘上划出的一块空间。当物理内存(RAM)不足时,内核会将暂时不用的内存数据换出到Swap中,从而释放物理内存给当前活跃的进程。
- 触发时机:
- 物理内存耗尽(剩余可用内存低于阈值)。
- 内存回收压力大(内核的
kswapd0线程被频繁唤醒)。 - 主动冷数据迁移(即使内存还有余量,内核也会根据
vm.swappiness参数决定是否把不活跃的页换出去,默认值通常是60)。
OOM
什么是OOM?什么会导致OOM?
- 定义:Out Of Memory,即内存溢出。当系统物理内存和Swap全部耗尽,内核无法再为任何进程分配内存时,会触发 OOM Killer 机制,它会根据评分(
oom_score)挑选一个进程强制杀掉(发送 SIGKILL 信号)以释放内存,保障操作系统存活。 - 常见诱因:
- 内存泄漏(程序申请的内存没有释放,积少成多耗尽资源)。
- 不合理的大对象/大查询(如数据库一次性加载上亿行数据到内存)。
- 流量突增(并发请求数暴增,导致创建大量线程或缓存对象)。
- 内存分配速度超过GC/回收速度(特别是在 Java 或 Python 应用中)。
Linux 下 OOM Killer 的运作机制?
系统内存耗尽时触发,根据 oom_score(受 /proc/[pid]/oom_adj 调节)打分,分数最高者被杀。可通过 echo -17 > /proc/[pid]/oom_adj 禁止被杀(仅对特定关键进程)。
ulimit
ulimit 什么作用? ulimit 是 Linux 系统中用于控制 Shell 程序资源限制的内建命令。允许用户查看或设置当前会话的资源限制,包括文件大小、内存使用、CPU 时间等。
Linux 下 ulimit 的 soft limit 和 hard limit 区别?
soft 当前生效值(进程可主动修改,最多涨到hard),hard 系统硬上限(只有 root 能改)。生产常见坑:nofile(最大文件句柄数)未调大导致”Too many open files”。
LVM
LVM是什么?基本概念? Logical Volume Manager,在线调整分区大小无需停机。三层:PV(物理卷)→ VG(卷组)→ LV(逻辑卷)。
LVM常用操作命令?
pvcreate创建物理卷,vgcreate创建卷组,lvcreate创建逻辑卷,vgextend扩展卷组,lvextend扩展逻辑卷。
LVM 在线扩容完整流程?(以虚拟机扩容为例)
最佳实践:生产环境一般不动现有磁盘/分区,而是作为新磁盘加入。 流程:虚拟层扩盘 → OS层执行rescan → 确认lsblk → PV/VG/LV操作 → xfs_growfs/resize2fs → df验证
- 虚拟化层操作:在虚拟机管理平台(如VMware/vCenter)中加新磁盘。
- OS层发现新设备:扫描SCSI总线
echo "- - -" > /sys/class/scsi_host/host0/scan或重启(生产慎用) - 确认识别新容量:用
lsblk(list block)确认新容量已识别。 - PV阶段:
pvcreate /dev/sdb - VG阶段:
vgextend vg_data /dev/sdb - LV阶段:
lvextend -l +100%FREE /dev/vg_data/lv_data - 文件系统层:
resize2fs(ext4)或xfs_growfs(xfs)。 - 确认扩容:
df -h验证扩容完成 - 注意:缩减(reduce)极其危险且需离线,生产禁用。
**传统扩容方法 / 给机器加一块磁盘,如何识别?**OS 层执行 rescan → 确认 lsblk → PV/VG/LV 操作 → mkfs → mount → df 验证 → fstab 永久挂载 → mount -a 验证。详细说明可参考 一文讲通 LVM 与传统扩容的异同。
磁盘与I/O
如何查看磁盘空间?
df -h 查看分区使用;du -sh * 查看目录大小。
如何排查磁盘I/O瓶颈?
iostat -x 1 查看I/O负载;iotop 查看进程I/O。
4. 网络
如何查看网络连接和监听端口?
netstat -tunlp 或 ss -tunlp(ss更快)。
netstat 常用参数 / -tunlp 分别代表什么
- -a (—all): 显示所有的网络连接和监听端口。
- -t (—tcp): 仅显示TCP连接。
- -u (—udp): 仅显示UDP连接。
- -n (—numeric): 显示IP地址和端口号,而不是尝试解析域名和服务名。
- -l (—listen): 显示监听中的端口
- -p (—programs): 显示哪个进程正在使用哪个套接字或网络端口。
- -x (—unix): 仅显示Unix域套接字连接。
- -r (—route): 显示路由表。
- -i (—interfaces): 显示网络接口信息。
- -s (—statistics): 显示网络协议的统计数据。
如何抓包/监听80端口数据?
tcpdump -i eth0 port 80 -w capture.pcap。
- -i:指定接口
- -w:保存到文件
如何测试网络连通性?
ping 测试连通性;telnet/nc 测试端口。
如何追踪数据包?
tracert 追踪数据包经过的路由路径,一层层显示路径。
常见的TCP内核参数调优(sysctl)?
net.ipv4.tcp_tw_reuse=1(允许复用TIME_WAIT)、net.ipv4.tcp_fin_timeout=30(缩短FIN超时)、net.core.somaxconn=65535(监听队列最大长度,Nginx配合backlog)。
如何配置IP?
# 持久化配置# Ubuntu 系统,可以调整 /etc/network/interfaceiface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1# 然后重启网络服务sudo systemctl restart networking如何配置DNS?
sudo sh -c 'echo "nameserver 8.8.8.8" >> /etc/resolv.conf'如何查看IP/DNS?
- IP 看
ip addr的 eth0,DNS 看cat /etc/resolv.conf下的 nameserver - DNS 常规为8.8.8.8,阿里云ECS默认100.100.2.136或138
5. 系统管理与启动
Linux系统从开机到登录的启动流程? 上电复位 → BIOS/UEFI自检 → 引导加载程序(GRUB,GNU GRand Unified Bootloader)→ 内核加载 → 挂载根文件系统 → init进程(Systemd)→ 运行级别(SysV)/目标(systemd) → 用户登录。
Load Average是什么?怎么看?
系统平均负载,表示单位时间内处于运行或不可中断状态的进程数。top或uptime查看三个时间点(1/5/15分钟)。
如何排查服务器性能瓶颈? top看整体负载 → vmstat看CPU/内存/swap → iostat看磁盘I/O → netstat/iftop看网络。
什么是服务?服务和进程区别?
进程是操作系统资源调度的单位;服务是”被托管、可启停、可自愈、有生命周期管理”的长期运行进程,在后台持续运行、独立于用户会话,通常称为“守护进程”(Daemon)。
| 维度 | 进程 Process | 服务 Service |
|---|---|---|
| 定义 | 正在运行的程序实例 | 被 init/systemd/管理器托管的长期进程 |
| 管理方 | 内核 | systemd / SysV / supervisor / k8s 等 |
| 生命周期 | 手动起、手动死 | 有 start/stop/restart/reload |
| 开机自启 | 不保证 | 可 enabled |
| 崩溃自愈 | 不会 | 可自动重启(Restart=always) |
| 状态查询 | ps / pgrep | systemctl status / supervisorctl status |
| 日志 | stdout / 文件 | journald / 统一日志 |
| 依赖管理 | 无 | After= / Requires= |
| 典型例子 | bash、vim、一个 python xx.py | nginx.service、sshd.service |
Systemd与Init的区别?
- Systemd并行启动、按需启动、支持socket/DBus激活;
- SysV init串行启动,依赖
/etc/init.d目录下的脚本。
如何查看服务?
Systemd 服务:
systemctl --type=servicesystemctl status xxx 看具体服务systemctl start/restart/stopSysV 服务:
service --status-allservice xxx status6. 其他/操作系统
进程/线程区别?
- 内存分配
- 进程:资源分配的基本单位,拥有独立的内存空间
- 线程:CPU调度的基本单位,共享进程的资源
- 切换开销
- 进程:大,有独立代码和数据段
- 线程:小,只维护独立的堆栈和程序计数器
- 稳定性
- 进程:隔离性更强,某个进程崩溃不会影响其他进程
- 线程:弱,线程共享进程资源,崩溃可能导致整个进程异常
- 安全性
- 进程:有独立内存空间,安全性高
- 线程:共享内存空间,存在数据竞争和线程安全问题,需要同步/互斥机制
- 补充:MySQL 多线程,PostgreSQL/Oracle 多线程
并发/并行区别?
- 并发(Concurrency):逻辑上的“同时”。单核CPU通过时间片轮转快速切换,看起来像是同时处理多个任务,本质是交替执行(强调结构,处理多件事)。
- 并行(Parallelism):物理上的“同时”。多核CPU在同一时刻真正地执行多个任务(强调执行,同时做多件事)。
死锁的四个条件
| 条件 | 含义 | 对应到 Java 或数据库 |
|---|---|---|
| 互斥 | 某个资源同一时刻只能被一个执行单元占用 | synchronized 锁对象、行级排他锁、独占文件锁 |
| 请求与保持(占有并等待) | 已经拿着一部分资源,同时继续等待其他资源 | 线程持有 resource1 时继续申请 resource2 |
| 非抢占 | 资源不能被外部强行拿走,只能由持有者释放 | Java 内置锁不能被另一个线程直接剥夺 |
| 循环等待 | 等待关系形成闭环 | 线程 1 等线程 2,线程 2 又等线程 1 |
用户态与内核态是什么?如何切换?
-
用户态:用户态下的程序只能访问受限的内存,不能直接访问硬件设备。用户态程序的执行权限较低,不能执行特权指令。
-
内核态:内核态下的程序可以访问所有的内存和硬件设备,具有最高的执行权限。内核态程序可以执行特权指令,如设置时钟、内存管理等。
用户态和内核态之间的切换是通过系统调用、异常和中断来实现的。
- 系统调用:用户态程序通过系统调用请求操作系统提供的服务,从而切换到内核态。例如,内存分配函数*malloc()会调用sbrk()*系统调用,从而切换到内核态。
- 异常:当CPU在执行用户态程序时发生异常(如缺页异常),会触发从用户态切换到内核态。
- 中断:当外围设备完成用户请求的操作后,会向CPU发出中断信号,CPU会暂停当前用户态程序的执行,转而执行中断处理程序,从而切换到内核态。
听说过 CFS 吗? CFS(Completely Fair Scheduler,完全公平调度器)用于Linux系统中普通进程的调度。vruntime,红黑树结构,有利于交互式进程。听说过 CFS 吗?(Linux ) - 面试鸭 | 2026最新面试题+详细答案解析
ps 常用参数
- -A:显示所有进程。
- -e:与 -A 效果相同,显示所有进程。
- -a:显示所有终端上的进程,包括其他用户的进程。
- -x:显示没有控制终端的进程。
- -u:以用户为主的格式显示进程信息。
- -f:显示完整格式的进程信息,包括 UID、PPID 等。
- -l:以长格式显示进程信息。
- -o:自定义输出格式,例如 ps -o pid,cmd 仅显示进程 ID 和命令。
- —sort:按指定字段排序,例如 —sort=-%cpu 按 CPU 使用率降序排列。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 45 天
部分内容可能已过时