Linux 命令是后端、运维、测试和开发岗位面试中的高频内容。面试官通常会继续追问:“执行后会看到什么?”“遇到问题时如何组合使用?”
本文为常用命令配备典型结果示例,示例输出会因机器、用户和发行版不同而变化。
一、文件和目录操作
1. 查看当前目录:pwd
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
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--
其中:
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 基础面试的能力。