Linux 命令是后端、运维、测试和开发岗位面试中的高频内容。面试官通常会继续追问:“执行后会看到什么?”“遇到问题时如何组合使用?”

本文为常用命令配备典型结果示例,示例输出会因机器、用户和发行版不同而变化。

一、文件和目录操作

1. 查看当前目录:pwd

1
2
$ pwd
/home/app

pwd 用于显示当前工作目录。

2. 查看目录内容:ls

1
2
$ ls
app.jar config logs start.sh

查看详细信息:

1
2
3
4
5
$ ls -l
-rw-r--r-- 1 app app 24576 Oct 9 10:20 app.jar
drwxr-xr-x 2 app app 4096 Oct 9 10:18 config
drwxr-xr-x 2 app app 4096 Oct 9 10:19 logs
-rwxr-xr-x 1 app app 512 Oct 9 10:20 start.sh

查看隐藏文件:

1
2
3
4
5
$ ls -la
drwxr-xr-x 5 app app 4096 Oct 9 10:20 .
drwxr-xr-x 3 app app 4096 Oct 9 10:00 ..
-rw-r--r-- 1 app app 220 Oct 9 10:00 .bash_logout
-rw-r--r-- 1 app app 3526 Oct 9 10:00 .bashrc

3. 创建目录和文件:mkdir、touch

1
2
3
4
$ mkdir logs
$ touch logs/app.log
$ ls logs
app.log

创建多级目录:

1
2
3
$ mkdir -p /opt/app/logs/archive
$ ls -ld /opt/app/logs/archive
drwxr-xr-x 2 app app 4096 Oct 9 10:21 /opt/app/logs/archive

4. 复制、移动和重命名:cp、mv

1
2
3
$ cp app.jar app-backup.jar
$ ls app*.jar
app-backup.jar app.jar

复制目录:

1
2
3
$ cp -r config config-backup
$ ls
app.jar config config-backup

移动文件:

1
2
3
$ mv app-backup.jar backup/
$ ls backup/
app-backup.jar

重命名文件:

1
2
3
$ mv start.sh start-prod.sh
$ ls start*
start-prod.sh

5. 删除文件和目录:rm

1
2
$ rm backup/app-backup.jar
$ ls backup/

删除目录:

1
2
3
$ rm -rf config-backup
$ test -d config-backup; echo $?
1

返回值 1 表示目录不存在。rm -rf 会递归强制删除,执行前必须确认路径。

6. 查看文件类型:file

1
2
$ file app.jar
app.jar: Java archive data (JAR)

二、查看和搜索文件内容

1. 查看完整内容:cat

1
2
3
4
$ cat config/app.conf
server.port=8080
app.name=demo
log.level=INFO

2. 分页查看:less

1
2
3
$ less app.log
2026-10-09 10:20:01 INFO Application started
2026-10-09 10:20:05 INFO Request received

在 less 中:

  • 按 q 退出
  • 按 /关键词 搜索
  • 按 n 查看下一个匹配项

3. 查看开头和结尾:head、tail

1
2
3
4
$ head -n 3 app.log
2026-10-09 10:20:01 INFO Application started
2026-10-09 10:20:02 INFO Database connected
2026-10-09 10:20:03 INFO Cache initialized
1
2
3
4
$ tail -n 3 app.log
2026-10-09 10:21:01 INFO Request received
2026-10-09 10:21:02 INFO Request completed
2026-10-09 10:21:03 INFO Application healthy

实时查看日志:

1
2
3
$ tail -f app.log
2026-10-09 10:22:01 INFO Request received
2026-10-09 10:22:02 INFO Request completed

4. 搜索文件内容:grep

1
2
3
$ grep "ERROR" app.log
2026-10-09 10:23:10 ERROR Database connection failed
2026-10-09 10:23:15 ERROR Request timeout

显示行号:

1
2
3
$ grep -n "ERROR" app.log
25:2026-10-09 10:23:10 ERROR Database connection failed
31:2026-10-09 10:23:15 ERROR Request timeout

忽略大小写并递归搜索:

1
2
$ grep -ri "timeout" logs/
logs/app.log:2026-10-09 10:23:15 ERROR Request timeout

统计匹配行数:

1
2
$ grep -c "ERROR" app.log
2

5. 查找文件:find

按名称查找:

1
2
3
4
$ find /var/log -name "*.log" 2>/dev/null
/var/log/syslog
/var/log/nginx/access.log
/var/log/nginx/error.log

查找大于 100 MB 的文件:

1
2
3
$ find / -type f -size +100M 2>/dev/null
/var/lib/docker/containers/container.log
/opt/app/app.log

查找最近一天修改过的文件:

1
2
3
$ find . -type f -mtime -1
./config/app.conf
./logs/app.log

6. 统计内容:wc

1
2
$ wc -l app.log
120 app.log

表示文件共有 120 行。

1
2
$ wc -w README.md
356 README.md

表示共有 356 个单词。

三、权限和用户

1. 查看当前用户:whoami

1
2
$ whoami
app

2. 查看用户和组:id

1
2
$ id
uid=1001(app) gid=1001(app) groups=1001(app),4(adm)

3. 查看文件权限:ls -l

1
2
$ ls -l start.sh
-rwxr-xr-- 1 app app 512 Oct 9 10:20 start.sh

权限分为三组:

1
2
3
所有者:rwx
所属组:r-x
其他用户:r--

其中:

  • r:读
  • w:写
  • x:执行

4. 修改权限:chmod

添加执行权限:

1
2
3
$ chmod +x start.sh
$ ls -l start.sh
-rwxr-xr-x 1 app app 512 Oct 9 10:20 start.sh

设置数字权限:

1
2
3
$ chmod 755 start.sh
$ stat -c "%a %n" start.sh
755 start.sh

755 表示所有者可读写执行,其他用户可读和执行。

5. 修改所有者:chown

1
2
3
$ sudo chown app:app app.log
$ ls -l app.log
-rw-r--r-- 1 app app 4096 Oct 9 10:20 app.log

6. 使用管理员权限:sudo

1
2
3
$ sudo systemctl restart nginx
$ echo $?
0

返回值 0 通常表示命令执行成功。

四、进程和服务管理

1. 查看进程:ps

1
2
3
$ ps aux | grep java
app 2188 2.1 8.4 3256840 342112 ? Sl 10:20 0:15 java -jar app.jar
app 2250 0.0 0.0 6400 2200 pts/0 S+ 10:25 0:00 grep java

常见字段:

  • PID:进程编号
  • %CPU:CPU 使用率
  • %MEM:内存使用率
  • COMMAND:启动命令

2. 实时查看资源:top

1
2
3
4
5
$ top
top - 10:26:00 up 3 days, 4:12, 2 users, load average: 0.42, 0.38, 0.31
Tasks: 215 total, 1 running, 214 sleeping
%Cpu(s): 8.2 us, 1.4 sy, 0.0 ni, 90.0 id
MiB Mem : 15932.0 total, 2048.0 free, 6100.0 used, 7784.0 buff/cache

常用操作:

  • P:按 CPU 排序
  • M:按内存排序
  • k:结束进程
  • q:退出

3. 结束进程:kill

1
2
3
$ kill 2188
$ ps -p 2188
PID TTY TIME CMD

普通 kill 会发送 SIGTERM,给程序机会正常退出。

强制结束:

1
2
3
$ kill -9 2188
$ echo $?
0

kill -9 无法被程序捕获,应该作为最后手段使用。

4. 查看服务:systemctl

1
2
3
4
$ systemctl status nginx
● nginx.service - A high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Thu 2026-10-09 09:00:00 CST

启动、停止和重启:

1
2
3
$ sudo systemctl start nginx
$ sudo systemctl stop nginx
$ sudo systemctl restart nginx

查看是否运行:

1
2
$ systemctl is-active nginx
active

设置开机启动:

1
2
$ sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service

五、磁盘、内存和文件句柄

1. 查看磁盘空间:df

1
2
3
4
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 80G 52G 25G 68% /
tmpfs 7.8G 0 7.8G 0% /dev/shm

df 查看文件系统整体空间。

2. 查看目录大小:du

1
2
$ du -sh /var/log
2.4G /var/log

查看一级目录:

1
2
3
4
$ du -h --max-depth=1 /var | sort -h
120M /var/cache
2.4G /var/log
3.1G /var

du 查看具体目录和文件占用空间。

3. 查看内存:free

1
2
3
4
$ free -h
total used free shared buff/cache available
Mem: 15Gi 5.9Gi 2.0Gi 120Mi 7.6Gi 9.3Gi
Swap: 2.0Gi 0B 2.0Gi

判断可用内存时,优先关注 available。

4. 查看磁盘和分区:lsblk

1
2
3
4
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
└─sda1 8:1 0 80G 0 part /

5. 查看被删除但仍占用的文件:lsof

1
2
$ sudo lsof | grep deleted
java 2188 app 12w REG 8,1 2147483648 /opt/app/app.log (deleted)

这表示文件虽然已删除,但 Java 进程仍占用文件句柄,空间不会立即释放。

六、网络命令

1. 查看 IP 地址:ip addr

1
2
3
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0

2. 查看路由:ip route

1
2
3
$ ip route
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20

3. 测试连通性:ping

1
2
3
4
5
$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=117 time=32.4 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss

4. 查询 DNS:nslookup

1
2
3
$ nslookup example.com
Name: example.com
Address: 93.184.216.34

5. 查看端口:ss

1
2
3
4
$ ss -lntp
State Local Address:Port Process
LISTEN 0.0.0.0:22 users:(("sshd",pid=800,fd=3))
LISTEN 0.0.0.0:8080 users:(("java",pid=2188,fd=120))

查看指定端口:

1
2
$ ss -lntp | grep 8080
LISTEN 0 વિક 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=2188,fd=120))

6. 调试 HTTP:curl

查看响应头:

1
2
3
4
$ curl -I http://localhost:8080/health
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 15

查看详细请求过程:

1
2
3
4
5
$ curl -v http://localhost:8080/health
> GET /health HTTP/1.1
> Host: localhost:8080
< HTTP/1.1 200 OK
{"status":"UP"}

7. 远程登录:ssh

1
2
3
4
$ ssh app@192.168.1.20
app@192.168.1.20's password:
Last login: Thu Oct 9 10:00:00 2026
[app@server ~]$

8. 远程复制:scp

1
2
$ scp app.jar app@192.168.1.20:/opt/app/
app.jar 100% 24KB 1.2MB/s 00:00

七、压缩和解压

1. 创建 tar.gz 压缩包:tar -czf

1
2
3
$ tar -czf app.tar.gz app/
$ ls -lh app.tar.gz
-rw-r--r-- 1 app app 18K Oct 9 10:30 app.tar.gz

2. 解压:tar -xzf

1
2
3
$ tar -xzf app.tar.gz
$ ls
app app.tar.gz

3. 查看压缩包内容:tar -tzf

1
2
3
4
$ tar -tzf app.tar.gz
app/
app/app.jar
app/config/app.conf

4. ZIP 压缩和解压:zip、unzip

1
2
3
$ zip -r app.zip app/
adding: app/ (stored 0%)
adding: app/app.jar (deflated 12%)
1
2
3
$ unzip app.zip
Archive: app.zip
extracting: app/app.jar

八、管道、重定向和环境变量

1. 管道:|

1
2
$ ps aux | grep java
app 2188 2.1 8.4 ... java -jar app.jar

管道会把前一个命令的输出传给后一个命令。

2. 输出重定向:> 和 >>

1
2
3
$ echo "start" > status.log
$ cat status.log
start

> 会覆盖文件:

1
2
3
$ echo "running" > status.log
$ cat status.log
running

>> 会追加内容:

1
2
3
4
$ echo "healthy" >> status.log
$ cat status.log
running
healthy

3. 错误输出重定向:2>

1
2
3
$ ls /not-found 2> error.log
$ cat error.log
ls: cannot access '/not-found': No such file or directory

合并标准输出和错误输出:

1
2
3
$ command > all.log 2>&1
$ cat all.log
command: not found

4. 查看历史命令:history

1
2
3
4
$ history 3
101 systemctl status nginx
102 tail -f app.log
103 history 3

5. 查看命令帮助:man 和 --help

1
2
3
$ ls --help | head -n 3
Usage: ls [OPTION]... [FILE]...
List information about the FILEs.
1
2
3
4
$ man grep
GREP(1) General Commands Manual
NAME
grep - print lines that match patterns

6. 查看和设置环境变量:echo、env、export

1
2
$ echo $PATH
/usr/local/bin:/usr/bin:/bin
1
2
3
$ export APP_ENV=prod
$ echo $APP_ENV
prod

查看全部环境变量:

1
2
$ env | grep APP_ENV
APP_ENV=prod

九、软件包管理

Ubuntu/Debian:apt

1
2
3
$ sudo apt update
Fetched 12.4 MB in 2s
Reading package lists... Done
1
2
$ sudo apt install nginx
nginx is already the newest version.
1
2
$ sudo apt remove nginx
Removing nginx ...

CentOS/RHEL:dnf

1
2
3
4
$ sudo dnf install nginx
Installed:
nginx.x86_64 1:1.24.0
Complete!

不同发行版的软件包管理器不同,面试时应先确认系统类型。

十、综合面试场景

场景一:接口响应很慢,如何排查?

先查看系统资源:

1
2
$ top
%Cpu(s): 92.0 us, 3.0 sy, 0.0 ni, 5.0 id

CPU 空闲只有 5%,说明 CPU 可能存在压力。

再查看内存和磁盘:

1
2
$ free -h
Mem: 15Gi 14Gi 200Mi ...
1
2
$ df -h /
/dev/sda1 80G 79G 500M 99% /

发现磁盘接近满载后,继续定位大目录:

1
2
3
$ du -h --max-depth=1 /var | sort -h
2.4G /var/log
65G /var/lib

最后检查应用日志和端口:

1
2
$ grep -i "timeout\|error" app.log
2026-10-09 10:40:01 ERROR Database connection timeout
1
2
$ ss -lntp | grep 8080
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=2188,fd=120))

回答思路应为:

1
2
3
4
5
检查 CPU 和内存
→ 检查磁盘空间
→ 检查进程和端口
→ 查看应用日志
→ 使用 curl 验证接口

场景二:端口无法访问,如何排查?

先确认服务是否运行:

1
2
$ systemctl is-active nginx
inactive

启动服务:

1
2
3
$ sudo systemctl start nginx
$ systemctl is-active nginx
active

确认端口是否监听:

1
2
$ ss -lntp | grep 80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3300,fd=6))

本机测试:

1
2
$ curl -I http://127.0.0.1
HTTP/1.1 200 OK

如果本机正常、远程异常,还需要继续检查防火墙、安全组、路由和 DNS。

场景三:磁盘空间不足,如何排查?

1
2
$ df -h
/dev/sda1 80G 80G 0G 100% /

查找大目录:

1
2
$ du -h --max-depth=1 / | sort -h | tail
65G /var

查找大文件:

1
2
$ find /var -type f -size +1G -ls 2>/dev/null
/var/log/app.log 2147483648

检查删除但仍被占用的文件:

1
2
$ sudo lsof | grep deleted
java 2188 app 12w REG 80G /var/log/app.log (deleted)

这说明需要让相关进程重新打开日志文件,或者重启服务后释放空间。

十一、面试高频问题

df 和 du 有什么区别?

  • df:查看文件系统整体剩余空间
  • du:查看具体目录或文件占用空间

grep 和 find 有什么区别?

  • grep:搜索文件内容
  • find:按名称、大小、时间等条件查找文件

kill 和 kill -9 有什么区别?

  • kill PID:发送 SIGTERM,允许程序正常清理资源
  • kill -9 PID:发送 SIGKILL,强制结束进程

> 和 >> 有什么区别?

  • >:覆盖写入
  • >>:追加写入

如何查看端口被哪个进程占用?

1
2
$ ss -lntp | grep 8080
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=2188,fd=120))

也可以:

1
2
$ lsof -i:8080
java 2188 app 120u IPv6 12345 TCP *:8080 (LISTEN)

如何实时查看日志?

1
2
3
$ tail -f app.log
2026-10-09 10:45:01 INFO Request received
2026-10-09 10:45:02 INFO Request completed

结语

Linux 面试的重点不是孤立记忆命令,而是理解命令的输出,并能组合命令定位问题。

常见排查流程是:

1
2
3
4
5
确认现象
→ 检查 CPU、内存和磁盘
→ 检查进程和端口
→ 搜索日志
→ 验证修复结果

优先掌握以下命令:

1
2
3
4
5
6
pwd  ls  cd  cp  mv  rm
cat less head tail grep find
chmod chown ps top kill systemctl
df du free lsof
ip ping ss curl ssh scp
tar history man

当你能解释命令的作用、关键参数、典型输出和实际使用场景时,基本就具备了应对 Linux 基础面试的能力。