Linux|学习笔记

文章目录

  • [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 大块:

  1. Linux 基础认知

    • 操作系统是什么
    • Linux 内核、发行版
    • 为什么服务器常用 Linux
    • 虚拟机、WSL、远程连接
  2. 文件系统与常用命令

    • / 根目录
    • 绝对路径、相对路径
    • ls/cd/pwd/mkdir/touch/cp/mv/rm
    • cat/more/less/head/tail
    • find/which/grep/wc
    • 管道、重定向
  3. 用户与权限

    • root 用户
    • 普通用户、用户组
    • su/sudo
    • chmod/chown
    • rwx 权限含义
    • 软链接、硬链接
  4. 进程管理

    • ps/top/kill
    • 前台、后台
    • Ctrl+CCtrl+Z
    • 信号
    • 守护进程
    • nohup
  5. 系统服务管理

    • systemctl
    • 服务启动、停止、重启、开机自启
    • 查看服务状态
    • MySQL/Nginx/Redis 等服务排查
  6. 网络与端口

    • IP、主机名、DNS
    • ping/curl/wget
    • netstat/ss
    • 端口占用
    • 127.0.0.10.0.0.0
  7. 系统资源排查

    • CPU:top
    • 内存:free
    • 磁盘:df/du
    • IO:iostat
    • 网络:sar
    • 日志:tail -f + grep
  8. 后端部署实战

    • 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?

核心原因:

  1. 稳定性高,适合长期运行服务。
  2. 资源占用低,不依赖图形界面。
  3. 命令行和脚本能力强,适合自动化部署和运维。
  4. 网络能力强,适合服务器场景。
  5. 开源生态成熟,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 常见三种模式:

  1. 命令模式
  2. 输入模式
  3. 底线命令模式

进入文件:

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,但校招后端面试还经常问 sedawk

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 -shdu --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 面试一句话总结

  1. Linux 没有盘符,只有一个根目录 /
  2. 绝对路径从 / 开始,相对路径从当前目录开始。
  3. ls -alh 看文件详情、隐藏文件、大小和权限。
  4. tail -f 实时看日志,grep 过滤关键字。
  5. 管道 | 把左边输出交给右边继续处理。
  6. > 覆盖写入,>> 追加写入。
  7. root 是最高权限用户,生产环境不建议长期直接使用。
  8. sudo 是临时提权,su 是切换用户。
  9. chmod 改权限,chown 改所属用户和组。
  10. 文件 rwx 和目录 rwx 含义不同,目录 x 表示能进入。
  11. 软链接保存路径,硬链接共享 inode。
  12. ps -ef 查进程,top 看资源占用。
  13. kill 默认优雅终止,kill -9 强制杀死。
  14. Ctrl+C 发 SIGINT,kill -9 发 SIGKILL。
  15. systemctl 管理服务启动、停止、重启、开机自启。
  16. ss -lntpnetstat -anp 查端口监听。
  17. 127.0.0.1 只代表本机,0.0.0.0 监听所有网卡。
  18. df -h 看磁盘分区,du -sh 看目录大小。
  19. free -h 看内存时重点看 available。
  20. 服务访问不了:查进程、查端口、查防火墙、查日志、查资源。
相关推荐
wangchunting1 小时前
VMware17 使用Rocky Linux 9.7系统
linux·运维·服务器
相醉为友1 小时前
040 Linux/裸机/RTOS 项目开发的跨平台兼容性——C语言静态接口抽象底层原理分析
linux·c语言·mcu
大数据三康1 小时前
Java字符统计:从输入到输出的完整解析
java·学习·循环结构
952362 小时前
SpringAOP
java·后端·学习·spring
Mapleay2 小时前
ALSA 专业术语 和 dai_link 分析
linux
wanghanjiett2 小时前
笔记:ESP32驱动SimpleFOC成功(基于Espressif-IDE)
笔记·esp32·foc
青梅橘子皮2 小时前
Linux---权限
linux·运维·服务器
不灭锦鲤2 小时前
网络安全学习第101天
学习
承渊政道2 小时前
【动态规划算法】(背包问题经典模型与解题套路)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法