文章目录
- [0. Linux 面试知识总览](#0. Linux 面试知识总览)
- [1. Linux 基础认知](#1. Linux 基础认知)
-
- [1.1 操作系统是什么?](#1.1 操作系统是什么?)
- [1.2 Linux 是什么?](#1.2 Linux 是什么?)
- [1.3 为什么后端服务器常用 Linux?](#1.3 为什么后端服务器常用 Linux?)
- [2. Linux 文件系统与目录结构](#2. Linux 文件系统与目录结构)
-
- [2.1 Linux 目录结构](#2.1 Linux 目录结构)
- [2.2 绝对路径和相对路径](#2.2 绝对路径和相对路径)
- [3. Linux 基础命令](#3. Linux 基础命令)
-
- [3.1 命令基本格式](#3.1 命令基本格式)
- [3.2 ls:查看目录内容](#3.2 ls:查看目录内容)
- [3.3 pwd:查看当前目录](#3.3 pwd:查看当前目录)
- [3.4 cd:切换目录](#3.4 cd:切换目录)
- [3.5 mkdir:创建目录](#3.5 mkdir:创建目录)
- [3.6 touch:创建文件或更新时间戳](#3.6 touch:创建文件或更新时间戳)
- [3.7 cp:复制文件或目录](#3.7 cp:复制文件或目录)
- [3.8 mv:移动或重命名](#3.8 mv:移动或重命名)
- [3.9 rm:删除文件或目录](#3.9 rm:删除文件或目录)
- [4. 文件查看、搜索与文本处理](#4. 文件查看、搜索与文本处理)
-
- [4.1 cat:查看小文件](#4.1 cat:查看小文件)
- [4.2 more / less:分页查看文件](#4.2 more / less:分页查看文件)
- [4.3 head:查看文件开头](#4.3 head:查看文件开头)
- [4.4 tail:查看文件尾部](#4.4 tail:查看文件尾部)
- [4.5 which:查看命令位置](#4.5 which:查看命令位置)
- [4.6 find:查找文件](#4.6 find:查找文件)
- [4.7 grep:文本过滤](#4.7 grep:文本过滤)
- [4.8 wc:统计](#4.8 wc:统计)
- [4.9 管道符 |](#4.9 管道符 |)
- [4.10 重定向 > 和 >>](#4.10 重定向 > 和 >>)
- [5. vi/vim 编辑器](#5. vi/vim 编辑器)
-
- [5.1 三种模式](#5.1 三种模式)
- [6. 用户、用户组与权限](#6. 用户、用户组与权限)
-
- [6.1 root 用户](#6.1 root 用户)
- [6.2 su 和 sudo](#6.2 su 和 sudo)
- [6.3 用户和用户组管理](#6.3 用户和用户组管理)
- [6.4 ls -l 权限怎么看?](#6.4 ls -l 权限怎么看?)
- [6.5 chmod 修改权限](#6.5 chmod 修改权限)
- [6.6 chown 修改所属用户和用户组](#6.6 chown 修改所属用户和用户组)
- [7. 软链接和硬链接](#7. 软链接和硬链接)
-
- [7.1 软链接](#7.1 软链接)
- [7.2 硬链接](#7.2 硬链接)
- [7.3 软链接 vs 硬链接](#7.3 软链接 vs 硬链接)
- [8. 软件安装与服务管理](#8. 软件安装与服务管理)
-
- [8.1 yum 和 apt](#8.1 yum 和 apt)
- [8.2 systemctl 管理服务](#8.2 systemctl 管理服务)
- [9. 时间、时区、主机名与 IP](#9. 时间、时区、主机名与 IP)
-
- [9.1 date 查看时间](#9.1 date 查看时间)
- [9.2 修改时区](#9.2 修改时区)
- [9.3 ntp 时间同步](#9.3 ntp 时间同步)
- [9.4 IP 地址](#9.4 IP 地址)
-
- [127.0.0.1 和 0.0.0.0 有什么区别?](#127.0.0.1 和 0.0.0.0 有什么区别?)
- [9.5 主机名和 hosts](#9.5 主机名和 hosts)
- [10. 网络命令与端口排查](#10. 网络命令与端口排查)
-
- [10.1 ping:测试网络连通性](#10.1 ping:测试网络连通性)
- [10.2 curl:发送 HTTP 请求](#10.2 curl:发送 HTTP 请求)
- [10.3 wget:下载文件](#10.3 wget:下载文件)
- [10.4 netstat / ss:查看端口](#10.4 netstat / ss:查看端口)
- [10.5 端口分类](#10.5 端口分类)
- [11. 进程管理与信号](#11. 进程管理与信号)
-
- [11.1 ps 查看进程](#11.1 ps 查看进程)
- [11.2 kill 结束进程](#11.2 kill 结束进程)
-
- [kill 和 kill -9 有什么区别?](#kill 和 kill -9 有什么区别?)
- [11.3 Ctrl+C 和 kill -9 的区别](#11.3 Ctrl+C 和 kill -9 的区别)
- [11.4 Ctrl+Z、后台运行、jobs、fg、bg](#11.4 Ctrl+Z、后台运行、jobs、fg、bg)
- [12. 主机状态与资源排查](#12. 主机状态与资源排查)
-
- [12.1 top 查看系统状态](#12.1 top 查看系统状态)
- [12.2 free 查看内存](#12.2 free 查看内存)
- [12.3 df 查看磁盘空间](#12.3 df 查看磁盘空间)
- [12.4 du 查看目录大小](#12.4 du 查看目录大小)
- [12.5 iostat 查看 IO](#12.5 iostat 查看 IO)
- [12.6 sar 查看网络统计](#12.6 sar 查看网络统计)
- [13. 环境变量](#13. 环境变量)
-
- [13.1 临时环境变量](#13.1 临时环境变量)
- [13.2 永久环境变量](#13.2 永久环境变量)
- [13.3 PATH 是什么?](#13.3 PATH 是什么?)
- [14. 压缩和解压](#14. 压缩和解压)
-
- [14.1 tar](#14.1 tar)
- [14.2 zip / unzip](#14.2 zip / unzip)
- [15. 上传、下载与远程连接](#15. 上传、下载与远程连接)
-
- [15.1 SSH 远程登录](#15.1 SSH 远程登录)
- [15.2 scp 上传下载](#15.2 scp 上传下载)
- [15.3 rsync](#15.3 rsync)
- [16. 后端常见软件部署思路](#16. 后端常见软件部署思路)
-
- [16.1 通用部署流程](#16.1 通用部署流程)
- [16.2 MySQL 部署和排查](#16.2 MySQL 部署和排查)
- [16.3 Nginx 部署和排查](#16.3 Nginx 部署和排查)
- [16.4 Redis 部署和排查](#16.4 Redis 部署和排查)
- [16.5 Tomcat 部署和排查](#16.5 Tomcat 部署和排查)
- [17. 校招高频补充:Shell 与文本三剑客](#17. 校招高频补充:Shell 与文本三剑客)
-
- [17.1 sed](#17.1 sed)
- [17.2 awk](#17.2 awk)
- [17.3 sort / uniq](#17.3 sort / uniq)
- [17.4 crontab 定时任务](#17.4 crontab 定时任务)
- [18. Linux 线上排障套路](#18. Linux 线上排障套路)
-
- [18.1 服务访问不了怎么排查?](#18.1 服务访问不了怎么排查?)
- [18.2 CPU 飙高怎么排查?](#18.2 CPU 飙高怎么排查?)
- [18.3 内存不足怎么排查?](#18.3 内存不足怎么排查?)
- [18.4 磁盘满了怎么排查?](#18.4 磁盘满了怎么排查?)
- [18.5 端口被占用怎么排查?](#18.5 端口被占用怎么排查?)
- [18.6 日志怎么查?](#18.6 日志怎么查?)
- [19. 高频面试题与标准答案模板](#19. 高频面试题与标准答案模板)
-
- [19.1 Linux 中绝对路径和相对路径有什么区别?](#19.1 Linux 中绝对路径和相对路径有什么区别?)
- [19.2 Linux 中如何查看隐藏文件?](#19.2 Linux 中如何查看隐藏文件?)
- [19.3 如何查看日志?](#19.3 如何查看日志?)
- [19.4 如何查找一个文件?](#19.4 如何查找一个文件?)
- [19.5 grep 有什么用?](#19.5 grep 有什么用?)
- [19.6 管道符有什么作用?](#19.6 管道符有什么作用?)
- [19.7 > 和 >> 有什么区别?](#19.7 > 和 >> 有什么区别?)
- [19.8 chmod 755 是什么意思?](#19.8 chmod 755 是什么意思?)
- [19.9 文件和目录的 rwx 含义一样吗?](#19.9 文件和目录的 rwx 含义一样吗?)
- [19.10 chmod 和 chown 有什么区别?](#19.10 chmod 和 chown 有什么区别?)
- [19.11 su 和 sudo 有什么区别?](#19.11 su 和 sudo 有什么区别?)
- [19.12 软链接和硬链接有什么区别?](#19.12 软链接和硬链接有什么区别?)
- [19.13 如何查看进程?](#19.13 如何查看进程?)
- [19.14 kill 和 kill -9 有什么区别?](#19.14 kill 和 kill -9 有什么区别?)
- [19.15 Ctrl+C 和 kill -9 有什么区别?](#19.15 Ctrl+C 和 kill -9 有什么区别?)
- [19.16 nohup 和 & 有什么区别?](#19.16 nohup 和 & 有什么区别?)
- [19.17 怎么查看端口占用?](#19.17 怎么查看端口占用?)
- [19.18 127.0.0.1 和 0.0.0.0 有什么区别?](#19.18 127.0.0.1 和 0.0.0.0 有什么区别?)
- [19.19 ping 和 curl 有什么区别?](#19.19 ping 和 curl 有什么区别?)
- [19.20 如何排查服务访问不了?](#19.20 如何排查服务访问不了?)
- [19.21 如何排查磁盘满了?](#19.21 如何排查磁盘满了?)
- [19.22 如何排查 CPU 飙高?](#19.22 如何排查 CPU 飙高?)
- [19.23 df 和 du 有什么区别?](#19.23 df 和 du 有什么区别?)
- [19.24 free 里面 free 很低是不是内存不足?](#19.24 free 里面 free 很低是不是内存不足?)
- [19.25 systemctl 常用命令有哪些?](#19.25 systemctl 常用命令有哪些?)
- [19.26 yum 和 apt 有什么区别?](#19.26 yum 和 apt 有什么区别?)
- [19.27 如何设置环境变量?](#19.27 如何设置环境变量?)
- [19.28 tar 怎么压缩和解压?](#19.28 tar 怎么压缩和解压?)
- [19.29 如何实时查看日志中的 ERROR?](#19.29 如何实时查看日志中的 ERROR?)
- [19.30 如何找出访问量最高的 IP?](#19.30 如何找出访问量最高的 IP?)
- [20. 面试前最后速背版](#20. 面试前最后速背版)
- [21. 本讲义覆盖性检查](#21. 本讲义覆盖性检查)
-
- [21.1 课件内容覆盖](#21.1 课件内容覆盖)
- [21.2 校招面试补充覆盖](#21.2 校招面试补充覆盖)
- [22. 最后背诵版:Linux 面试一句话总结](#22. 最后背诵版:Linux 面试一句话总结)
适用目标:后端开发校招 / C++后端 / Java后端 / 运维开发基础面试
复习方法:先背"核心结论",再看"底层理解",最后刷"面试题模板"。
重点不是把每个命令参数都背完,而是能在面试中说清楚:这个命令解决什么问题、常见参数怎么用、线上排障时怎么组合。
0. Linux 面试知识总览
Linux 面试通常分为 8 大块:
-
Linux 基础认知
- 操作系统是什么
- Linux 内核、发行版
- 为什么服务器常用 Linux
- 虚拟机、WSL、远程连接
-
文件系统与常用命令
/根目录- 绝对路径、相对路径
ls/cd/pwd/mkdir/touch/cp/mv/rmcat/more/less/head/tailfind/which/grep/wc- 管道、重定向
-
用户与权限
- root 用户
- 普通用户、用户组
su/sudochmod/chownrwx权限含义- 软链接、硬链接
-
进程管理
ps/top/kill- 前台、后台
Ctrl+C、Ctrl+Z- 信号
- 守护进程
- nohup
-
系统服务管理
systemctl- 服务启动、停止、重启、开机自启
- 查看服务状态
- MySQL/Nginx/Redis 等服务排查
-
网络与端口
- IP、主机名、DNS
ping/curl/wgetnetstat/ss- 端口占用
127.0.0.1、0.0.0.0
-
系统资源排查
- CPU:
top - 内存:
free - 磁盘:
df/du - IO:
iostat - 网络:
sar - 日志:
tail -f + grep
- CPU:
-
后端部署实战
- yum/apt 安装软件
- JDK/Tomcat
- Nginx
- MySQL
- Redis
- RabbitMQ
- Elasticsearch
- 防火墙、端口、环境变量
1. Linux 基础认知
1.1 操作系统是什么?
操作系统是用户和硬件之间的中间层,负责管理和调度硬件资源。
可以这样理解:
text
用户/应用程序
↓
操作系统
↓
CPU / 内存 / 磁盘 / 网卡 / IO设备
操作系统主要负责:
- 管理 CPU,让程序能够被调度执行
- 管理内存,让程序有运行空间
- 管理磁盘,让文件可以存储
- 管理网络,让进程可以通信
- 管理设备 IO,例如键盘、显示器、网卡、磁盘
面试回答模板:
操作系统本质上是硬件资源的管理者,也是应用程序和硬件之间的桥梁。应用程序不能直接随意操作硬件,而是通过系统调用请求操作系统,由操作系统完成 CPU 调度、内存管理、文件系统管理、网络通信和 IO 管理。
1.2 Linux 是什么?
Linux 严格来说指 Linux 内核。我们平时说的 Linux 系统,通常是:
text
Linux 内核 + 系统级应用程序 + 包管理器 + Shell + 工具集
比如:
- CentOS
- Ubuntu
- Debian
- RedHat
- Rocky Linux
- AlmaLinux
这些叫 Linux 发行版。
面试回答模板:
Linux 内核负责最底层的资源管理,比如进程调度、内存管理、文件系统、网络协议栈和设备驱动。发行版是在 Linux 内核之上集成 Shell、包管理器、系统服务和常用工具后形成的完整操作系统,比如 CentOS 和 Ubuntu。
1.3 为什么后端服务器常用 Linux?
核心原因:
- 稳定性高,适合长期运行服务。
- 资源占用低,不依赖图形界面。
- 命令行和脚本能力强,适合自动化部署和运维。
- 网络能力强,适合服务器场景。
- 开源生态成熟,MySQL、Redis、Nginx、Docker、K8s 等大量后端基础设施天然运行在 Linux 上。
面试回答模板:
后端服务器更看重稳定性、资源利用率、自动化运维能力和网络性能。Linux 不依赖图形界面,命令行工具丰富,适合远程管理、脚本化部署、日志排查和服务治理,所以在服务器领域使用非常广泛。
2. Linux 文件系统与目录结构
2.1 Linux 目录结构
Linux 只有一个顶级目录:
bash
/
所有文件和目录都挂在 / 下面。
常见目录:
| 目录 | 作用 |
|---|---|
/ |
根目录 |
/home |
普通用户家目录 |
/root |
root 用户家目录 |
/bin |
常用基础命令 |
/sbin |
系统管理命令 |
/etc |
配置文件 |
/usr |
用户级程序和资源 |
/var |
经常变化的数据,如日志 |
/tmp |
临时文件 |
/opt |
第三方软件安装目录 |
/dev |
设备文件 |
/proc |
内核和进程信息的虚拟文件系统 |
/boot |
启动相关文件 |
面试重点:
Windows 有 C 盘、D 盘等多个盘符;Linux 没有盘符概念,只有一个根目录
/,其他磁盘或分区通过挂载的方式接入某个目录。
2.2 绝对路径和相对路径
绝对路径:
bash
/home/itheima/a.txt
/etc/nginx/nginx.conf
特点:
- 从根目录
/开始 - 不依赖当前所在目录
相对路径:
bash
test/a.txt
../log/app.log
./run.sh
特点:
- 从当前工作目录开始
- 不以
/开头
特殊路径符:
| 符号 | 含义 |
|---|---|
. |
当前目录 |
.. |
上一级目录 |
~ |
当前用户 HOME 目录 |
/ |
根目录 |
例子:
bash
cd ~
cd ..
cd ../..
cd ./logs
面试回答模板:
绝对路径从根目录
/开始描述文件位置,不受当前目录影响;相对路径从当前工作目录开始描述文件位置。.表示当前目录,..表示上一级目录,~表示当前用户的 HOME 目录。
3. Linux 基础命令
3.1 命令基本格式
Linux 命令基本格式:
bash
command [options] [parameters]
例如:
bash
ls -lh /var/log
其中:
ls是命令-lh是选项/var/log是参数
3.2 ls:查看目录内容
bash
ls
ls -l
ls -a
ls -h
ls -lh
ls -al
ls -lh /var/log
常用参数:
| 参数 | 作用 |
|---|---|
-l |
以列表形式展示 |
-a |
显示隐藏文件 |
-h |
文件大小以 K/M/G 显示,通常配合 -l |
-R |
递归显示目录内容 |
隐藏文件:
bash
.bashrc
.gitignore
Linux 中以 . 开头的文件默认隐藏。
面试回答模板:
ls用来查看目录内容。-l显示详细信息,-a显示隐藏文件,-h以人类可读方式显示文件大小,通常线上排查会用ls -lh看文件大小,用ls -al看隐藏文件和权限信息。
3.3 pwd:查看当前目录
bash
pwd
作用:
text
print working directory
用于查看当前所在工作目录。
3.4 cd:切换目录
bash
cd /etc
cd ..
cd ~
cd
cd -
说明:
| 命令 | 含义 |
|---|---|
cd /etc |
进入 /etc |
cd .. |
返回上一级 |
cd ~ |
回到 HOME |
cd |
不带参数默认回到 HOME |
cd - |
回到上一次所在目录 |
3.5 mkdir:创建目录
bash
mkdir test
mkdir -p a/b/c
-p:
- 父目录不存在时自动创建
- 创建多级目录时常用
3.6 touch:创建文件或更新时间戳
bash
touch a.txt
touch /tmp/test.log
注意:
touch 如果文件不存在,会创建空文件;如果文件存在,会更新文件的访问和修改时间。
3.7 cp:复制文件或目录
bash
cp a.txt b.txt
cp a.txt /tmp/
cp -r dir1 dir2
参数:
| 参数 | 作用 |
|---|---|
-r |
递归复制目录 |
-i |
覆盖前提示 |
-p |
保留权限、时间等属性 |
面试重点:
复制目录必须加
-r,因为目录下面可能还有子目录和文件,需要递归复制。
3.8 mv:移动或重命名
bash
mv a.txt b.txt
mv a.txt /tmp/
mv dir1 dir2
如果目标路径不存在,通常表现为重命名。
例如:
bash
mv old.log new.log
3.9 rm:删除文件或目录
bash
rm a.txt
rm -r dir
rm -f a.txt
rm -rf dir
参数:
| 参数 | 作用 |
|---|---|
-r |
递归删除目录 |
-f |
强制删除,不提示 |
危险命令:
bash
rm -rf /
rm -rf /*
面试回答模板:
rm是删除命令,删除目录要加-r,强制删除加-f。线上环境非常忌讳直接使用rm -rf,尤其是 root 用户下操作,一般需要先pwd确认路径,再ls确认目标,必要时用绝对路径和交互参数避免误删。
4. 文件查看、搜索与文本处理
4.1 cat:查看小文件
bash
cat a.txt
适合查看内容较少的文件。
缺点:
- 文件太大会一次性刷屏
- 不适合查看大日志
4.2 more / less:分页查看文件
bash
more /etc/services
less app.log
常用操作:
| 操作 | 作用 |
|---|---|
| 空格 | 下一页 |
q |
退出 |
/关键字 |
搜索关键字,less 支持更好 |
实际工作中更推荐:
bash
less app.log
因为 less 支持前后翻页和搜索,更适合看大文件。
4.3 head:查看文件开头
bash
head app.log
head -n 20 app.log
4.4 tail:查看文件尾部
bash
tail app.log
tail -n 100 app.log
tail -f app.log
最常用:
bash
tail -f app.log
作用:
- 实时追踪日志新增内容
- 后端排查接口报错、服务启动失败时非常常用
面试回答模板:
查看日志一般用
tail -f实时追踪日志,用tail -n查看最后 N 行,再结合grep过滤关键字,比如tail -f app.log | grep ERROR。
4.5 which:查看命令位置
bash
which java
which nginx
which python
用于判断命令实际执行的是哪个程序。
4.6 find:查找文件
按名称查找:
bash
find / -name "nginx.conf"
find /var/log -name "*.log"
按类型查找:
bash
find /tmp -type f
find /tmp -type d
按大小查找:
bash
find /var/log -type f -size +100M
按时间查找:
bash
find /var/log -type f -mtime +7
删除 7 天前日志:
bash
find /var/log/myapp -name "*.log" -mtime +7 -delete
面试提醒:
面试官经常问"如何查找大文件""如何删除 7 天前日志"。可以用
find按大小、名称、时间组合筛选。
4.7 grep:文本过滤
bash
grep "ERROR" app.log
grep -n "ERROR" app.log
grep -i "error" app.log
grep -v "DEBUG" app.log
grep -r "listen" /etc/nginx
常用参数:
| 参数 | 作用 |
|---|---|
-n |
显示行号 |
-i |
忽略大小写 |
-v |
反向匹配 |
-r |
递归搜索 |
-E |
使用扩展正则 |
例子:
bash
grep -n "OutOfMemory" app.log
grep -r "server_name" /etc/nginx
面试回答模板:
grep用来按关键字过滤文本,线上排查日志时非常常用。比如用grep -n ERROR app.log查错误行,用grep -r keyword dir在目录下递归搜索配置或日志。
4.8 wc:统计
bash
wc app.log
wc -l app.log
wc -w app.log
wc -c app.log
常用:
bash
cat app.log | grep ERROR | wc -l
含义:
统计日志中 ERROR 出现的行数。
4.9 管道符 |
管道符的作用:
text
把左边命令的输出,作为右边命令的输入
例子:
bash
cat app.log | grep ERROR
ps -ef | grep nginx
netstat -anp | grep 3306
tail -f app.log | grep ERROR
面试回答模板:
管道是 Linux 命令组合能力的核心,能够把一个命令的输出交给下一个命令继续处理。比如
ps -ef | grep nginx就是先列出所有进程,再筛选 nginx 相关进程。
4.10 重定向 > 和 >>
覆盖写入:
bash
echo "hello" > a.txt
追加写入:
bash
echo "world" >> a.txt
区别:
| 符号 | 含义 |
|---|---|
> |
覆盖 |
>> |
追加 |
常见用法:
bash
nohup java -jar app.jar > app.log 2>&1 &
含义:
- 标准输出写入 app.log
- 标准错误也重定向到标准输出
- 后台运行
5. vi/vim 编辑器
5.1 三种模式
vim 常见三种模式:
- 命令模式
- 输入模式
- 底线命令模式
进入文件:
bash
vim a.txt
进入输入模式:
| 按键 | 作用 |
|---|---|
i |
光标当前位置插入 |
a |
光标后插入 |
o |
当前行下一行插入 |
I |
行首插入 |
A |
行尾插入 |
退出输入模式:
text
Esc
底线命令:
| 命令 | 作用 |
|---|---|
:w |
保存 |
:q |
退出 |
:wq |
保存并退出 |
:q! |
强制退出不保存 |
:set nu |
显示行号 |
:set paste |
粘贴模式 |
搜索:
bash
/keyword
删除:
| 命令 | 作用 |
|---|---|
dd |
删除当前行 |
ndd |
删除 n 行 |
x |
删除单个字符 |
复制粘贴:
| 命令 | 作用 |
|---|---|
yy |
复制当前行 |
nyy |
复制 n 行 |
p |
粘贴 |
面试回答模板:
vim 有命令模式、输入模式和底线命令模式。刚进入文件默认是命令模式,按
i进入输入模式,按Esc回到命令模式,保存退出用:wq,强制退出用:q!。
6. 用户、用户组与权限
6.1 root 用户
Linux 中权限最高的用户是:
bash
root
root 拥有系统最高权限,可以修改系统配置、安装软件、管理用户、启动服务。
普通用户一般只能在自己的 HOME 目录下自由操作。
面试回答模板:
root 是 Linux 的超级管理员,拥有最高权限。生产环境中不建议长期直接使用 root 操作,因为误删文件、误改配置的风险很高。更推荐普通用户通过
sudo临时执行需要管理员权限的命令。
6.2 su 和 sudo
切换用户:
bash
su - root
su - username
退出当前用户:
bash
exit
或者:
text
Ctrl + D
su - 中 - 的含义:
切换用户时加载目标用户的环境变量,建议使用。
临时提权:
bash
sudo yum install nginx
sudo systemctl restart nginx
区别:
| 命令 | 作用 |
|---|---|
su - root |
切换到 root 用户 |
sudo command |
临时用 root 权限执行一条命令 |
面试回答模板:
su是切换用户,通常su - root会切换到 root 并加载 root 的环境变量;sudo是让普通用户临时以 root 权限执行某条命令。生产环境中更推荐 sudo,因为权限更可控,也方便审计。
6.3 用户和用户组管理
创建用户组:
bash
groupadd dev
删除用户组:
bash
groupdel dev
创建用户:
bash
useradd username
useradd -g dev username
useradd -d /home/myuser username
删除用户:
bash
userdel username
userdel -r username
查看用户信息:
bash
id username
把用户加入用户组:
bash
usermod -aG dev username
查看所有用户:
bash
getent passwd
查看所有组:
bash
getent group
面试回答模板:
Linux 是多用户、多用户组系统。用户可以属于多个组,文件权限也会按照所属用户、所属组、其他用户三个维度进行控制。
6.4 ls -l 权限怎么看?
执行:
bash
ls -l
示例:
bash
drwxr-xr-x 2 root root 4096 May 1 10:00 test
-rw-r--r-- 1 root root 1024 May 1 10:00 a.txt
第一列一共 10 位:
text
d rwx r-x r-x
解释:
| 位置 | 含义 |
|---|---|
| 第 1 位 | 文件类型 |
| 第 2-4 位 | 所属用户权限 |
| 第 5-7 位 | 所属用户组权限 |
| 第 8-10 位 | 其他用户权限 |
文件类型:
| 符号 | 含义 |
|---|---|
- |
普通文件 |
d |
目录 |
l |
软链接 |
权限含义:
| 权限 | 对文件的含义 | 对目录的含义 |
|---|---|---|
r |
读取文件内容 | 查看目录内容,即 ls |
w |
修改文件内容 | 在目录内创建、删除、重命名 |
x |
执行文件 | 进入目录,即 cd |
面试高频点:
目录的
x权限非常重要。没有目录的x权限,即使有r权限,也无法进入目录访问里面的文件。
6.5 chmod 修改权限
符号写法:
bash
chmod u=rwx,g=rx,o=r a.txt
数字写法:
bash
chmod 755 a.sh
chmod 644 a.txt
chmod -R 755 dir
数字含义:
| 权限 | 数字 |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
组合:
| 数字 | 权限 |
|---|---|
| 7 | rwx |
| 6 | rw- |
| 5 | r-x |
| 4 | r-- |
| 0 | --- |
常见权限:
| 权限 | 含义 |
|---|---|
755 |
用户 rwx,组 r-x,其他 r-x,常用于目录/脚本 |
644 |
用户 rw-,组 r--,其他 r--,常用于普通文件 |
600 |
只有用户可读写,常用于密钥 |
700 |
只有用户可读写执行,常用于私有目录 |
面试回答模板:
chmod用来修改文件权限。数字权限中 r=4,w=2,x=1,所以 755 表示用户 rwx,组 r-x,其他用户 r-x。目录如果要能进入,需要有 x 权限。
6.6 chown 修改所属用户和用户组
bash
chown user file
chown :group file
chown user:group file
chown -R user:group dir
注意:
修改文件所属用户和用户组通常需要 root 权限。
面试回答模板:
chmod修改的是权限位,chown修改的是文件的所属用户和所属组。比如服务进程没有权限读写目录时,可能需要把目录 owner 改成运行该服务的用户。
7. 软链接和硬链接
7.1 软链接
创建软链接:
bash
ln -s /opt/nginx/conf/nginx.conf ~/nginx.conf
特点:
- 类似 Windows 快捷方式
- 保存的是目标路径
- 可以跨文件系统
- 可以链接目录
- 源文件删除后,软链接会失效,变成悬空链接
查看:
bash
ls -l
会看到:
bash
nginx.conf -> /opt/nginx/conf/nginx.conf
7.2 硬链接
创建硬链接:
bash
ln a.txt b.txt
特点:
- 多个文件名指向同一个 inode
- 修改任意一个,另一个也会变化
- 删除其中一个,不影响另一个访问数据
- 不能跨文件系统
- 通常不能给目录创建硬链接
7.3 软链接 vs 硬链接
| 对比项 | 软链接 | 硬链接 |
|---|---|---|
| 创建命令 | ln -s 源 目标 |
ln 源 目标 |
| 本质 | 保存路径 | 指向同一 inode |
| 源文件删除 | 失效 | 不受影响 |
| 是否可跨文件系统 | 可以 | 不可以 |
| 是否可链接目录 | 可以 | 通常不可以 |
| 类比 | 快捷方式 | 同一个文件的多个名字 |
面试回答模板:
软链接类似快捷方式,保存的是源文件路径,源文件删除后软链接会失效;硬链接是多个文件名指向同一个 inode,只要还有一个硬链接存在,文件数据就不会真正删除。软链接可以跨文件系统并链接目录,硬链接通常不能跨文件系统,也不能随意链接目录。
8. 软件安装与服务管理
8.1 yum 和 apt
CentOS/RHEL 系:
bash
yum install -y nginx
yum remove -y nginx
yum search nginx
Ubuntu/Debian 系:
bash
apt install -y nginx
apt remove -y nginx
apt search nginx
区别:
| 系统 | 包管理器 |
|---|---|
| CentOS | yum / dnf |
| Ubuntu | apt |
面试回答模板:
yum 和 apt 都是 Linux 包管理工具,用来安装、卸载、搜索软件,并自动处理依赖。CentOS 常用 yum 或 dnf,Ubuntu 常用 apt。
8.2 systemctl 管理服务
常用命令:
bash
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
systemctl enable nginx
systemctl disable nginx
含义:
| 命令 | 作用 |
|---|---|
start |
启动 |
stop |
停止 |
restart |
重启 |
status |
查看状态 |
enable |
开机自启 |
disable |
关闭开机自启 |
常见服务:
bash
systemctl status sshd
systemctl status nginx
systemctl status mysqld
systemctl status redis
面试回答模板:
systemctl是 systemd 系统下管理服务的工具,可以启动、停止、重启服务,也可以配置开机自启。线上服务异常时,一般先用systemctl status 服务名查看运行状态,再结合日志排查。
9. 时间、时区、主机名与 IP
9.1 date 查看时间
bash
date
date "+%Y-%m-%d"
date "+%Y-%m-%d %H:%M:%S"
日期计算:
bash
date -d "+1 day" "+%Y-%m-%d"
date -d "-1 day" "+%Y-%m-%d"
9.2 修改时区
查看时区:
bash
timedatectl
设置上海时区:
bash
timedatectl set-timezone Asia/Shanghai
或者旧方式:
bash
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
9.3 ntp 时间同步
安装:
bash
yum install -y ntp
启动:
bash
systemctl start ntpd
systemctl enable ntpd
手动同步:
bash
ntpdate -u ntp.aliyun.com
面试提醒:
分布式系统中时间同步很重要。如果服务器时间不一致,可能导致日志时间混乱、认证失败、分布式锁异常、消息顺序判断错误等问题。
9.4 IP 地址
查看 IP:
bash
ifconfig
ip addr
特殊 IP:
| IP | 含义 |
|---|---|
127.0.0.1 |
本机回环地址 |
0.0.0.0 |
监听所有网卡地址,或表示任意地址 |
localhost |
通常解析到 127.0.0.1 |
面试高频:
127.0.0.1 和 0.0.0.0 有什么区别?
回答:
127.0.0.1是本机回环地址,只能本机访问;服务监听127.0.0.1时,外部机器访问不了。0.0.0.0在服务监听场景下表示监听本机所有网卡地址,外部机器可以通过服务器真实 IP 访问该服务。
9.5 主机名和 hosts
查看主机名:
bash
hostname
修改主机名:
bash
hostnamectl set-hostname node1
本地域名映射:
bash
vim /etc/hosts
示例:
text
192.168.88.130 node1
192.168.88.131 node2
域名解析顺序简化理解:
text
先查本机 hosts
再查 DNS 服务器
10. 网络命令与端口排查
10.1 ping:测试网络连通性
bash
ping baidu.com
ping -c 3 baidu.com
ping 192.168.88.130
作用:
- 判断网络是否可达
- 粗略观察延迟和丢包
注意:
ping 不通不一定代表服务不可用,可能是对方禁用了 ICMP;服务是否可用还要结合端口和应用协议检查。
10.2 curl:发送 HTTP 请求
bash
curl http://localhost:8080
curl -I http://localhost:8080
curl -X POST http://localhost:8080/api
常用:
bash
curl -I http://example.com
查看响应头。
下载文件:
bash
curl -O http://example.com/a.tar.gz
10.3 wget:下载文件
bash
wget http://example.com/a.tar.gz
wget -b http://example.com/a.tar.gz
后台下载:
bash
wget -b URL
tail -f wget-log
10.4 netstat / ss:查看端口
课程常用:
bash
netstat -anp | grep 8080
netstat -anp | grep 3306
更现代的方式:
bash
ss -lntp
ss -lntp | grep 8080
参数理解:
| 参数 | 含义 |
|---|---|
-l |
listening,监听状态 |
-n |
不解析域名和服务名,直接显示数字 |
-t |
TCP |
-u |
UDP |
-p |
显示进程信息 |
面试回答模板:
如果服务访问不了,我会先确认进程是否存在,再确认端口是否监听。可以用
ss -lntp | grep 端口或netstat -anp | grep 端口查看端口是否被进程监听。
10.5 端口分类
Linux 端口范围:
text
0 ~ 65535
常见分类:
| 范围 | 类型 |
|---|---|
| 1~1023 | 知名端口 |
| 1024~49151 | 注册端口 |
| 49152~65535 | 动态端口 |
常见端口:
| 服务 | 端口 |
|---|---|
| SSH | 22 |
| HTTP | 80 |
| HTTPS | 443 |
| MySQL | 3306 |
| Redis | 6379 |
| Tomcat | 8080 |
| RabbitMQ | 5672 / 15672 |
| Elasticsearch | 9200 |
11. 进程管理与信号
11.1 ps 查看进程
bash
ps -ef
ps -ef | grep nginx
常见字段:
| 字段 | 含义 |
|---|---|
| UID | 进程所属用户 |
| PID | 进程 ID |
| PPID | 父进程 ID |
| CMD | 启动命令 |
常用:
bash
ps -ef | grep java
面试回答模板:
ps -ef可以查看当前系统进程,grep用来过滤目标进程。比如排查 Java 服务是否启动,可以用ps -ef | grep java。
11.2 kill 结束进程
优雅终止:
bash
kill PID
强制杀死:
bash
kill -9 PID
常见信号:
| 信号 | 含义 |
|---|---|
SIGTERM |
默认信号,请求进程正常退出 |
SIGKILL |
强制杀死,不能被捕获、忽略或阻塞 |
SIGINT |
中断信号,常由 Ctrl+C 产生 |
SIGHUP |
终端断开或重新加载配置 |
SIGSTOP |
暂停进程 |
面试高频:
kill 和 kill -9 有什么区别?
回答:
kill PID默认发送 SIGTERM,通知进程正常退出,进程可以捕获这个信号并做资源释放、日志落盘、连接关闭等清理工作;kill -9 PID发送 SIGKILL,操作系统会强制终止进程,进程没有机会做清理。生产环境优先用普通 kill,只有进程无法退出时再用 kill -9。
11.3 Ctrl+C 和 kill -9 的区别
Ctrl+C:
- 给前台进程发送
SIGINT - 进程可以捕获这个信号
- 默认行为是终止进程
kill -9:
- 发送
SIGKILL - 进程不能捕获
- 不能忽略
- 不能清理资源
面试回答模板:
Ctrl+C是给当前终端前台进程发送 SIGINT,默认会中断进程,但程序可以捕获并处理;kill -9是 SIGKILL,由内核强制杀死进程,进程无法捕获,也没有机会释放资源,所以生产环境不建议一上来就用 kill -9。
11.4 Ctrl+Z、后台运行、jobs、fg、bg
暂停前台进程:
text
Ctrl + Z
查看后台任务:
bash
jobs
恢复到前台:
bash
fg %1
放到后台继续运行:
bash
bg %1
后台启动:
bash
command &
忽略终端挂断:
bash
nohup command > app.log 2>&1 &
面试回答模板:
&可以让命令后台运行,但终端断开后进程可能收到 SIGHUP 退出;nohup可以让进程忽略挂断信号,常配合> app.log 2>&1 &用于后台启动服务。
12. 主机状态与资源排查
12.1 top 查看系统状态
bash
top
重点看:
| 指标 | 含义 |
|---|---|
| load average | 系统负载 |
| us | 用户态 CPU |
| sy | 内核态 CPU |
| id | 空闲 CPU |
| wa | IO 等待 |
| RES | 进程实际占用物理内存 |
| %CPU | 进程 CPU 占用 |
| %MEM | 进程内存占用 |
面试回答模板:
排查 CPU 飙高时,我会先用
top看整体 CPU 使用率和具体占用高的进程 PID,再用ps或语言相关工具进一步分析。如果是 Java 服务,还可以结合jstack查看线程栈。
12.2 free 查看内存
bash
free -h
重点看:
| 字段 | 含义 |
|---|---|
| total | 总内存 |
| used | 已使用 |
| free | 空闲 |
| buff/cache | 文件缓存 |
| available | 实际可用内存 |
面试重点:
Linux 会尽可能利用空闲内存做缓存,所以
free很低不一定代表内存不足,要重点看available。
12.3 df 查看磁盘空间
bash
df -h
用于查看文件系统磁盘占用。
常见排查:
bash
df -h
发现 / 使用率 100%,说明根分区满了。
12.4 du 查看目录大小
bash
du -sh *
du -sh /var/log
du -h --max-depth=1 /var
常用排查大目录:
bash
cd /
du -h --max-depth=1
面试回答模板:
df -h看磁盘分区整体占用,du -sh看某个目录或文件实际占用。磁盘满时,先df -h确认哪个分区满,再du -h --max-depth=1层层定位大目录。
12.5 iostat 查看 IO
bash
iostat
iostat -x 1
关注:
| 指标 | 含义 |
|---|---|
%util |
磁盘繁忙程度 |
await |
IO 平均等待时间 |
r/s |
每秒读请求 |
w/s |
每秒写请求 |
如果 %util 接近 100%,说明磁盘 IO 可能成为瓶颈。
12.6 sar 查看网络统计
bash
sar -n DEV 1
sar -n TCP,ETCP 1
用于查看网络流量、TCP 连接异常等。
13. 环境变量
13.1 临时环境变量
bash
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin
当前 shell 生效,退出后失效。
13.2 永久环境变量
当前用户:
bash
vim ~/.bashrc
source ~/.bashrc
全局:
bash
vim /etc/profile
source /etc/profile
13.3 PATH 是什么?
查看 PATH:
bash
echo $PATH
PATH 记录命令搜索路径。
例如你输入:
bash
java
Shell 会去 PATH 里的目录依次查找 java 可执行文件。
面试回答模板:
PATH 是环境变量,保存了可执行程序的搜索路径。当我们输入一个命令时,Shell 会按照 PATH 中的目录顺序查找对应的可执行文件。配置 JDK 时通常要设置 JAVA_HOME,并把
$JAVA_HOME/bin加入 PATH。
14. 压缩和解压
14.1 tar
压缩:
bash
tar -zcvf app.tar.gz app/
解压:
bash
tar -zxvf app.tar.gz
tar -zxvf app.tar.gz -C /opt
参数:
| 参数 | 作用 |
|---|---|
-z |
使用 gzip |
-c |
创建压缩包 |
-x |
解压 |
-v |
显示过程 |
-f |
指定文件 |
-C |
指定解压目录 |
记忆:
text
压缩:zcvf
解压:zxvf
14.2 zip / unzip
压缩文件:
bash
zip a.zip a.txt
压缩目录:
bash
zip -r dir.zip dir/
解压:
bash
unzip dir.zip
unzip dir.zip -d /opt
15. 上传、下载与远程连接
15.1 SSH 远程登录
bash
ssh user@ip
ssh root@192.168.88.130
SSH 默认端口:
text
22
指定端口:
bash
ssh -p 2222 user@ip
15.2 scp 上传下载
上传:
bash
scp local.txt user@ip:/tmp/
下载:
bash
scp user@ip:/tmp/a.txt ./
复制目录:
bash
scp -r dir user@ip:/tmp/
15.3 rsync
bash
rsync -avz local_dir/ user@ip:/opt/app/
比 scp 更适合增量同步。
16. 后端常见软件部署思路
16.1 通用部署流程
后端软件在 Linux 上部署,一般流程:
text
1. 安装依赖
2. 下载/上传安装包
3. 解压到指定目录
4. 配置环境变量
5. 修改配置文件
6. 创建运行用户
7. 修改目录权限
8. 启动服务
9. 检查进程
10. 检查端口
11. 检查日志
12. 配置开机自启
排查三板斧:
bash
ps -ef | grep 服务名
ss -lntp | grep 端口
tail -f 日志文件
16.2 MySQL 部署和排查
常见服务名:
bash
mysqld
启动:
bash
systemctl start mysqld
systemctl enable mysqld
查看状态:
bash
systemctl status mysqld
查看端口:
bash
netstat -anp | grep 3306
ss -lntp | grep 3306
连接:
bash
mysql -uroot -p
常见问题:
| 问题 | 排查 |
|---|---|
| 连接不上 | 看 mysqld 是否启动 |
| 端口不通 | 看 3306 是否监听、防火墙是否放行 |
| 密码错误 | 检查用户和授权 |
| 远程连不上 | 检查 bind-address、用户 host、权限、防火墙 |
16.3 Nginx 部署和排查
服务名:
bash
nginx
启动:
bash
systemctl start nginx
systemctl enable nginx
检查配置:
bash
nginx -t
重载配置:
bash
nginx -s reload
查看端口:
bash
ss -lntp | grep 80
常见配置目录:
bash
/etc/nginx/nginx.conf
/etc/nginx/conf.d/
面试回答模板:
Nginx 常用于静态资源服务、反向代理和负载均衡。排查 Nginx 问题时,先用
nginx -t检查配置,再看systemctl status nginx,然后检查 80/443 端口和 error.log。
16.4 Redis 部署和排查
服务名:
bash
redis
redis-server
启动:
bash
systemctl start redis
systemctl enable redis
连接:
bash
redis-cli
测试:
bash
set name linux
get name
默认端口:
text
6379
排查:
bash
ss -lntp | grep 6379
systemctl status redis
16.5 Tomcat 部署和排查
默认端口:
text
8080
启动:
bash
/export/server/tomcat/bin/startup.sh
停止:
bash
/export/server/tomcat/bin/shutdown.sh
查看端口:
bash
ss -lntp | grep 8080
查看日志:
bash
tail -f /export/server/tomcat/logs/catalina.out
17. 校招高频补充:Shell 与文本三剑客
课件中主要讲了 grep,但校招后端面试还经常问 sed 和 awk。
17.1 sed
查看第 1 到第 10 行:
bash
sed -n '1,10p' app.log
替换文本:
bash
sed 's/old/new/g' a.txt
直接修改文件:
bash
sed -i 's/old/new/g' a.txt
17.2 awk
打印第一列:
bash
awk '{print $1}' access.log
按空格切分,打印第 1 列和第 2 列:
bash
awk '{print $1, $2}' access.log
统计访问 IP 次数:
bash
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
面试回答模板:
grep负责过滤行,sed适合按行替换和编辑文本,awk适合按列处理和统计文本。日志分析中经常把它们和管道组合起来使用。
17.3 sort / uniq
排序:
bash
sort access.log
去重:
bash
uniq access.log
统计重复次数:
bash
sort access.log | uniq -c
17.4 crontab 定时任务
编辑定时任务:
bash
crontab -e
查看定时任务:
bash
crontab -l
格式:
text
分 时 日 月 周 命令
例子:每天凌晨 2 点备份日志:
bash
0 2 * * * /bin/tar -zcvf /backup/log-$(date +\%F).tar.gz /var/log/myapp
面试提醒:
crontab 中
%有特殊含义,命令里用date +%F时需要写成\%F。
18. Linux 线上排障套路
18.1 服务访问不了怎么排查?
按顺序:
text
1. 看服务进程是否存在
2. 看端口是否监听
3. 看防火墙/安全组是否放行
4. 看服务日志
5. 看配置文件是否正确
6. 看依赖服务是否正常
7. 看机器资源是否不足
命令:
bash
ps -ef | grep app
ss -lntp | grep 8080
systemctl status app
tail -f app.log
df -h
free -h
top
面试回答模板:
我会先确认进程是否存在,再确认端口是否监听,然后检查防火墙或安全组,接着看应用日志。如果进程频繁退出,还要看启动日志、配置文件和依赖服务;如果服务卡顿,再看 CPU、内存、磁盘和 IO。
18.2 CPU 飙高怎么排查?
步骤:
bash
top
ps -ef | grep java
如果是 Java:
bash
top -Hp PID
jstack PID
思路:
text
1. top 找到 CPU 高的进程
2. 找到进程内占用高的线程
3. 转换线程 ID 为十六进制
4. jstack 查线程栈
5. 定位死循环、锁竞争、频繁 GC 等问题
18.3 内存不足怎么排查?
bash
free -h
top
ps aux --sort=-%mem | head
思路:
text
1. free -h 看 available
2. top 看哪个进程占用内存高
3. 判断是正常缓存、内存泄漏还是配置过小
4. 如果是 Java,结合 jmap/jstat/GC 日志分析
18.4 磁盘满了怎么排查?
bash
df -h
du -h --max-depth=1 /
du -sh /var/log/*
find / -type f -size +500M
思路:
text
1. df -h 看哪个分区满
2. du 逐层找大目录
3. find 找大文件
4. 判断是否可以清理日志、临时文件、历史备份
18.5 端口被占用怎么排查?
bash
ss -lntp | grep 8080
netstat -anp | grep 8080
lsof -i:8080
找到 PID 后:
bash
ps -ef | grep PID
kill PID
18.6 日志怎么查?
实时查看:
bash
tail -f app.log
查看最后 200 行:
bash
tail -n 200 app.log
查错误:
bash
grep -n "ERROR" app.log
查某个时间段附近:
bash
grep -n "2026-05-03 22:" app.log
组合:
bash
tail -f app.log | grep ERROR
grep "ERROR" app.log | wc -l
grep "timeout" app.log | tail -n 20
19. 高频面试题与标准答案模板
19.1 Linux 中绝对路径和相对路径有什么区别?
答案:
绝对路径从根目录
/开始描述文件位置,比如/etc/nginx/nginx.conf,不依赖当前目录;相对路径从当前工作目录开始描述,比如../logs/app.log。.表示当前目录,..表示上一级目录,~表示当前用户 HOME 目录。
19.2 Linux 中如何查看隐藏文件?
答案:
bash
ls -a
Linux 中以
.开头的文件默认隐藏,比如.bashrc、.gitignore,需要用ls -a查看。
19.3 如何查看日志?
答案:
小日志可以用
cat,大日志用less,查看末尾用tail -n,实时追踪用tail -f,过滤错误用grep。线上最常用的是:
bash
tail -f app.log | grep ERROR
19.4 如何查找一个文件?
答案:
bash
find / -name "文件名"
find /var/log -name "*.log"
find可以按文件名、类型、大小、修改时间查找文件,比如查找大文件可以用find / -type f -size +500M。
19.5 grep 有什么用?
答案:
grep用于文本过滤,常用于日志排查和配置搜索。比如grep -n ERROR app.log可以查找包含 ERROR 的行并显示行号,grep -r keyword dir可以递归搜索目录。
19.6 管道符有什么作用?
答案:
管道符
|把左边命令的输出作为右边命令的输入。比如ps -ef | grep nginx是先列出所有进程,再筛选 nginx 相关进程。
19.7 > 和 >> 有什么区别?
答案:
>是覆盖写入,>>是追加写入。比如echo hello > a.txt会覆盖原内容,echo hello >> a.txt会追加到文件末尾。
19.8 chmod 755 是什么意思?
答案:
chmod修改文件权限。r=4,w=2,x=1,所以 7 表示 rwx,5 表示 r-x。755表示所属用户有 rwx 权限,所属组和其他用户有 r-x 权限。
19.9 文件和目录的 rwx 含义一样吗?
答案:
不完全一样。对文件来说,r 是读取内容,w 是修改内容,x 是执行文件;对目录来说,r 是查看目录内容,w 是在目录中创建、删除、重命名文件,x 是进入目录。目录的 x 权限非常关键,没有 x 就无法进入目录。
19.10 chmod 和 chown 有什么区别?
答案:
chmod修改权限位,比如 rwx;chown修改文件所属用户和用户组。权限不足时,可能需要 chmod 改权限,也可能需要 chown 把目录归属改成服务运行用户。
19.11 su 和 sudo 有什么区别?
答案:
su用于切换用户,比如su - root切换到 root 用户;sudo是让普通用户临时以 root 权限执行一条命令。生产环境更推荐 sudo,因为权限更可控,也便于审计。
19.12 软链接和硬链接有什么区别?
答案:
软链接类似快捷方式,保存的是目标路径,源文件删除后会失效;硬链接是多个文件名指向同一个 inode,只要还有一个硬链接存在,文件数据就不会真正删除。软链接可以跨文件系统并链接目录,硬链接通常不能跨文件系统,也不能随意链接目录。
19.13 如何查看进程?
答案:
bash
ps -ef
ps -ef | grep nginx
top
ps -ef查看当前所有进程,top动态查看系统进程资源占用。
19.14 kill 和 kill -9 有什么区别?
答案:
kill PID默认发送 SIGTERM,请求进程正常退出,进程可以做资源清理;kill -9 PID发送 SIGKILL,由内核强制杀死进程,进程无法捕获,也没有机会清理资源。生产环境优先普通 kill,不行再 kill -9。
19.15 Ctrl+C 和 kill -9 有什么区别?
答案:
Ctrl+C给当前终端前台进程发送 SIGINT,默认中断进程,但程序可以捕获处理;kill -9发送 SIGKILL,进程无法捕获,操作系统直接强制杀死。
19.16 nohup 和 & 有什么区别?
答案:
&只是让命令后台运行,但终端关闭后进程可能退出;nohup让进程忽略终端挂断信号,常用于后台启动服务。常见写法是nohup command > app.log 2>&1 &。
19.17 怎么查看端口占用?
答案:
bash
ss -lntp | grep 8080
netstat -anp | grep 8080
lsof -i:8080
先看端口是否监听,再看是哪个 PID 占用。
19.18 127.0.0.1 和 0.0.0.0 有什么区别?
答案:
127.0.0.1是本机回环地址,只能本机访问;服务监听0.0.0.0表示监听所有网卡地址,外部机器可以通过服务器真实 IP 访问。
19.19 ping 和 curl 有什么区别?
答案:
ping测试网络层连通性,基于 ICMP;curl发送 HTTP 请求,能测试具体 Web 服务是否正常。ping 通不代表 HTTP 服务一定可用,ping 不通也可能是对方禁用了 ICMP。
19.20 如何排查服务访问不了?
答案:
bash
ps -ef | grep 服务名
ss -lntp | grep 端口
systemctl status 服务名
tail -f 日志文件
df -h
free -h
top
回答模板:
我会先看服务进程是否存在,再看端口是否监听,然后检查防火墙和安全组,接着看应用日志。如果服务启动失败,还会检查配置文件、依赖服务和机器资源。
19.21 如何排查磁盘满了?
答案:
bash
df -h
du -h --max-depth=1 /
find / -type f -size +500M
回答模板:
先用
df -h看哪个分区满了,再用du -h --max-depth=1逐层定位大目录,最后用find找大文件。确认文件可以删除后再清理,线上不要直接盲目rm -rf。
19.22 如何排查 CPU 飙高?
答案:
bash
top
ps -ef | grep 服务名
如果是 Java:
bash
top -Hp PID
jstack PID
回答模板:
先用
top找到 CPU 高的进程,再定位具体线程。如果是 Java 服务,可以用top -Hp找线程,再将线程 ID 转十六进制,用jstack查线程栈,判断是否死循环、锁竞争或频繁 GC。
19.23 df 和 du 有什么区别?
答案:
df从文件系统角度看磁盘分区使用情况,du从目录或文件角度统计实际占用。磁盘满时一般先df -h定位分区,再用du -sh或du --max-depth=1定位大目录。
19.24 free 里面 free 很低是不是内存不足?
答案:
不一定。Linux 会用空闲内存做 buff/cache,提高文件访问性能。判断是否内存不足,更应该看
available,它表示系统当前大致还能给新进程使用的内存。
19.25 systemctl 常用命令有哪些?
答案:
bash
systemctl start 服务名
systemctl stop 服务名
systemctl restart 服务名
systemctl status 服务名
systemctl enable 服务名
systemctl disable 服务名
start 启动,stop 停止,restart 重启,status 查看状态,enable 开机自启,disable 关闭开机自启。
19.26 yum 和 apt 有什么区别?
答案:
yum 常用于 CentOS/RHEL 系发行版,apt 常用于 Ubuntu/Debian 系发行版。它们都是包管理器,用于安装、卸载、搜索软件,并自动解决依赖。
19.27 如何设置环境变量?
答案:
临时:
bash
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin
永久:
bash
vim ~/.bashrc
source ~/.bashrc
或全局:
bash
vim /etc/profile
source /etc/profile
19.28 tar 怎么压缩和解压?
答案:
压缩:
bash
tar -zcvf app.tar.gz app/
解压:
bash
tar -zxvf app.tar.gz -C /opt
z表示 gzip,c创建,x解压,v显示过程,f指定文件,-C指定解压目录。
19.29 如何实时查看日志中的 ERROR?
答案:
bash
tail -f app.log | grep ERROR
如果要统计错误数量:
bash
grep ERROR app.log | wc -l
19.30 如何找出访问量最高的 IP?
假设 Nginx access.log 第一列是 IP:
bash
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
解释:
text
awk '{print $1}' 取第一列 IP
sort 排序
uniq -c 去重并计数
sort -nr 按数字倒序排序
head 取前几名
20. 面试前最后速背版
20.1 命令速查
bash
pwd # 当前目录
ls -alh # 查看目录详情
cd /path # 切换目录
mkdir -p a/b/c # 创建多级目录
touch a.txt # 创建文件
cp -r a b # 复制目录
mv a b # 移动/重命名
rm -rf dir # 删除目录,慎用
cat a.txt # 查看小文件
less a.txt # 分页查看
head -n 20 a.txt # 前20行
tail -n 100 a.log # 后100行
tail -f a.log # 实时日志
grep -n ERROR a.log # 查错误
find / -name "*.log" # 查文件
wc -l a.log # 统计行数
chmod 755 a.sh # 改权限
chown user:group file # 改所属
ps -ef | grep nginx # 查进程
kill PID # 正常终止
kill -9 PID # 强制杀死
top # 看系统状态
free -h # 看内存
df -h # 看磁盘分区
du -sh * # 看目录大小
ss -lntp # 看监听端口
curl http://localhost:8080 # 测HTTP服务
ping -c 3 ip # 测网络连通
systemctl status nginx # 看服务状态
tar -zcvf a.tar.gz dir # 压缩
tar -zxvf a.tar.gz -C /opt # 解压
20.2 排障速背
服务起不来
text
systemctl status
journalctl / 日志文件
配置文件是否正确
端口是否被占用
权限是否不足
依赖服务是否正常
服务访问不了
text
进程是否存在
端口是否监听
防火墙/安全组是否放行
服务绑定的是 127.0.0.1 还是 0.0.0.0
日志是否报错
CPU 高
text
top 找进程
top -Hp 找线程
jstack 分析线程栈
内存高
text
free -h 看 available
top 看进程
结合语言工具分析内存泄漏
磁盘满
text
df -h 看分区
du -h --max-depth=1 定位目录
find 找大文件
谨慎清理日志和临时文件
日志排查
text
tail -f 实时看
grep 查关键字
wc -l 统计数量
awk/sort/uniq 做分析
21. 本讲义覆盖性检查
21.1 课件内容覆盖
| 课件内容 | 本讲义是否覆盖 |
|---|---|
| 初识 Linux | 已覆盖 |
| 操作系统作用 | 已覆盖 |
| Linux 内核与发行版 | 已覆盖 |
| 虚拟机 / WSL / 远程连接 | 已覆盖核心概念 |
| Linux 目录结构 | 已覆盖 |
| 基础命令 ls/cd/pwd/mkdir/touch/cp/mv/rm | 已覆盖 |
| cat/more/head/tail | 已覆盖,并补充 less |
| find/which/grep/wc | 已覆盖 |
| 管道和重定向 | 已覆盖 |
| vi/vim | 已覆盖 |
| root/su/sudo | 已覆盖 |
| 用户和用户组 | 已覆盖 |
| chmod/chown/rwx | 已覆盖 |
| yum/apt | 已覆盖 |
| systemctl | 已覆盖 |
| 软链接 | 已覆盖,并补充硬链接 |
| date/时区/ntp | 已覆盖 |
| IP/主机名/hosts | 已覆盖 |
| ping/wget/curl | 已覆盖 |
| netstat/端口 | 已覆盖,并补充 ss/lsof |
| ps/kill/top | 已覆盖 |
| df/iostat/sar | 已覆盖 |
| 环境变量/PATH | 已覆盖 |
| tar/zip/unzip | 已覆盖 |
| MySQL/Nginx/Redis/Tomcat 等部署 | 已覆盖面试排查版 |
21.2 校招面试补充覆盖
| 高频面试补充项 | 是否补充 |
|---|---|
| 软链接 vs 硬链接 | 已补充 |
| Ctrl+C vs kill -9 | 已补充 |
| nohup 和 & | 已补充 |
| ss/lsof 查看端口 | 已补充 |
| free 中 available | 已补充 |
| df vs du | 已补充 |
| sed/awk/sort/uniq | 已补充 |
| crontab 定时任务 | 已补充 |
| CPU/内存/磁盘/端口/日志排障套路 | 已补充 |
| Nginx/MySQL/Redis 服务排查 | 已补充 |
22. 最后背诵版:Linux 面试一句话总结
- Linux 没有盘符,只有一个根目录
/。 - 绝对路径从
/开始,相对路径从当前目录开始。 ls -alh看文件详情、隐藏文件、大小和权限。tail -f实时看日志,grep过滤关键字。- 管道
|把左边输出交给右边继续处理。 >覆盖写入,>>追加写入。- root 是最高权限用户,生产环境不建议长期直接使用。
sudo是临时提权,su是切换用户。chmod改权限,chown改所属用户和组。- 文件 rwx 和目录 rwx 含义不同,目录 x 表示能进入。
- 软链接保存路径,硬链接共享 inode。
ps -ef查进程,top看资源占用。kill默认优雅终止,kill -9强制杀死。Ctrl+C发 SIGINT,kill -9发 SIGKILL。systemctl管理服务启动、停止、重启、开机自启。ss -lntp或netstat -anp查端口监听。127.0.0.1只代表本机,0.0.0.0监听所有网卡。df -h看磁盘分区,du -sh看目录大小。free -h看内存时重点看 available。- 服务访问不了:查进程、查端口、查防火墙、查日志、查资源。