《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux... 。

文章目录
- 一、本文面试题目录
-
-
- [111. 如何查看Linux系统的版本信息?(`uname -a`、`cat /etc/os-release` 等)](#111. 如何查看Linux系统的版本信息?(
uname -a、cat /etc/os-release等)) - [112. `crontab` 命令的作用是什么?如何创建定时任务?其时间格式如何解析?](#112.
crontab命令的作用是什么?如何创建定时任务?其时间格式如何解析?) - [113. 什么是anacron?它与cron的区别是什么?适用于哪些场景?](#113. 什么是anacron?它与cron的区别是什么?适用于哪些场景?)
- [114. 如何查看系统的负载情况?`uptime` 命令输出的三个数字分别表示什么?](#114. 如何查看系统的负载情况?
uptime命令输出的三个数字分别表示什么?) - [115. 什么是I/O等待(iowait)?如何查看系统的I/O性能?(如 `iostat` 命令)](#115. 什么是I/O等待(iowait)?如何查看系统的I/O性能?(如
iostat命令)) - [116. 如何监控系统的CPU、内存、磁盘I/O和网络性能?(如 `sar`、`vmstat` 命令)](#116. 如何监控系统的CPU、内存、磁盘I/O和网络性能?(如
sar、vmstat命令)) - [117. 什么是内核参数?如何临时和永久修改内核参数?(`sysctl` 命令和 `/etc/sysctl.conf` 文件)](#117. 什么是内核参数?如何临时和永久修改内核参数?(
sysctl命令和/etc/sysctl.conf文件)) - [118. 如何查看系统的启动日志?(`journalctl` 命令或 `/var/log/boot.log`)](#118. 如何查看系统的启动日志?(
journalctl命令或/var/log/boot.log)) - [119. Linux系统中常见的日志文件有哪些?(如 `/var/log/messages`、`/var/log/auth.log`)](#119. Linux系统中常见的日志文件有哪些?(如
/var/log/messages、/var/log/auth.log)) - [120. 如何清理系统中的临时文件和日志,释放磁盘空间?](#120. 如何清理系统中的临时文件和日志,释放磁盘空间?)
- [111. 如何查看Linux系统的版本信息?(`uname -a`、`cat /etc/os-release` 等)](#111. 如何查看Linux系统的版本信息?(
-
- 二、120道Linux面试题目录列表
一、本文面试题目录
111. 如何查看Linux系统的版本信息?(uname -a、cat /etc/os-release 等)
- 原理说明:Linux系统版本信息包括内核版本、发行版名称及版本等,不同命令可获取不同层面的信息。
- 常用命令及示例 :
-
查看内核版本:
bashuname -a # 显示完整内核信息(版本、主机名、硬件架构等) # 输出示例:Linux server 5.4.0-150-generic #167-Ubuntu SMP Wed May 24 15:06:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux uname -r # 仅显示内核版本号 # 输出示例:5.4.0-150-generic -
查看发行版信息:
bashcat /etc/os-release # 适用于大多数现代Linux(如Ubuntu、CentOS 7+) # 输出示例(Ubuntu): # NAME="Ubuntu" # VERSION="20.04.6 LTS (Focal Fossa)" # ID=ubuntu # VERSION_ID="20.04" cat /etc/issue # 显示简化的发行版信息(含登录提示) # 输出示例:Ubuntu 20.04.6 LTS \n \l -
其他方法:
bashlsb_release -a # 显示LSB(Linux Standard Base)兼容信息(需安装lsb-core) cat /etc/redhat-release # 适用于RedHat系(如CentOS、RHEL)
-
112. crontab 命令的作用是什么?如何创建定时任务?其时间格式如何解析?
-
crontab作用:用于创建和管理周期性执行的定时任务(cron jobs),适用于自动化脚本执行、日志清理、备份等场景。 -
时间格式解析 :
基本格式为
分 时 日 月 周 命令,每个字段含义如下:字段 取值范围 特殊符号 说明 分 0-59 *(任意)、/(间隔)、,(列表)、-(范围)如 */10表示每10分钟时 0-23 同上 如 8-18表示8点到18点日 1-31 同上 如 1,15表示每月1日和15日月 1-12(或Jan-Dec) 同上 如 */3表示每3个月周 0-6(0=周日,或Sun-Sat) 同上 如 1-5表示周一到周五 -
创建和管理定时任务:
bashcrontab -e # 编辑当前用户的定时任务(首次使用需选择编辑器) # 示例任务(添加到编辑界面): # 每天凌晨3点执行备份脚本 0 3 * * * /home/user/backup.sh # 每小时的第15分钟和第45分钟执行日志清理 15,45 * * * * /home/user/clean_logs.sh # 每周一到周五的18点执行数据同步 0 18 * * 1-5 /home/user/sync_data.sh # 保存退出后生效,查看当前用户的任务: crontab -l # 删除当前用户的所有定时任务: crontab -r -
注意:
- 系统级任务通常放在
/etc/cron.d/目录,需指定执行用户。 - 任务输出默认通过邮件发送给用户,可重定向到文件(如
>> /var/log/cron.log 2>&1)。
- 系统级任务通常放在
113. 什么是anacron?它与cron的区别是什么?适用于哪些场景?
-
anacron概念:anacron是用于补充cron的工具,专门处理因系统关机或休眠而错过的定时任务,确保周期性任务最终会执行。
-
与cron的区别:
特性 cron anacron 适用场景 持续运行的服务器 可能频繁关机的设备(如笔记本、台式机) 时间精度 分钟级(精确到分钟) 天级(最小周期为1天) 任务触发 严格按时间点执行 系统启动后检查是否有错过的任务,若有则执行 配置方式 用户级 crontab -e,系统级/etc/cron.d/主要通过 /etc/anacrontab配置 -
工作原理 :
anacron通过记录任务上次执行时间(存储在
/var/spool/anacron/),与当前时间对比,若超过设定周期则执行任务。 -
配置示例(
/etc/anacrontab):bash# 格式:周期(天) 延迟(分钟) 任务标识 命令 1 5 cron.daily run-parts /etc/cron.daily # 每天至少执行一次,延迟5分钟 7 10 cron.weekly run-parts /etc/cron.weekly # 每7天至少执行一次,延迟10分钟 @monthly 15 cron.monthly run-parts /etc/cron.monthly # 每月至少执行一次,延迟15分钟 -
适用场景 :
笔记本电脑、个人台式机等非24小时运行的设备,确保关机期间错过的备份、日志轮转等任务在下次开机后执行。
114. 如何查看系统的负载情况?uptime 命令输出的三个数字分别表示什么?
-
查看系统负载的命令:
uptime:简洁显示系统运行时间和负载。w:在uptime基础上增加用户登录信息。top/htop:动态显示负载及进程资源占用。
-
uptime输出解读:bashuptime # 输出示例:15:30:00 up 2 days, 3:45, 2 users, load average: 0.85, 0.70, 0.65- 前半部分:系统当前时间、运行时长、登录用户数。
- 三个数字(load average):分别表示过去1分钟、5分钟、15分钟的系统平均负载,即等待CPU处理的任务数(包括运行中和等待I/O的进程)。
-
负载数值的意义:
- 对于单核CPU:负载
<1表示空闲,1表示满负荷,>1表示任务排队。 - 对于多核CPU:负载
<核心数表示正常(如4核CPU,负载<4为合理)。 - 若15分钟负载持续高于核心数,可能存在CPU瓶颈。
- 对于单核CPU:负载
115. 什么是I/O等待(iowait)?如何查看系统的I/O性能?(如 iostat 命令)
-
I/O等待(iowait) :
指CPU空闲且等待磁盘I/O操作完成的时间百分比。iowait过高通常表示磁盘读写速度跟不上CPU处理速度,可能是磁盘性能不足或I/O请求过多导致。
-
查看I/O性能的工具:
-
iostat(需安装sysstat包):bashiostat # 显示CPU和磁盘I/O统计(默认间隔1秒,显示一次) iostat 5 3 # 每5秒刷新一次,共3次 # 输出关键指标解读: # %iowait:CPU等待I/O的时间百分比(过高需关注) # tps:每秒I/O传输次数 # kB_read/s:每秒读取数据量(kB) # kB_wrtn/s:每秒写入数据量(kB) -
iotop:类似top,按I/O使用率排序进程:bashsudo iotop # 实时显示进程的I/O读写情况 -
dstat:综合显示CPU、内存、I/O等性能指标:bashdstat -d # 仅显示磁盘I/O统计
-
-
分析建议 :
若
%iowait持续高于20%,且磁盘kB_read/s或kB_wrtn/s接近硬件上限,可能需要优化磁盘(如更换SSD)或减少I/O密集型操作。
116. 如何监控系统的CPU、内存、磁盘I/O和网络性能?(如 sar、vmstat 命令)
- 综合性能监控工具 :
-
sar(系统活动报告,需安装sysstat):bash# 监控CPU(每2秒一次,共3次) sar -u 2 3 # 监控内存 sar -r 2 3 # 监控磁盘I/O sar -b 2 3 # 监控网络(需先开启网络统计:sudo sar -n DEV 1 1) sar -n DEV 2 3 # 查看历史数据(默认保存28天,位于/var/log/sysstat/) sar -u -f /var/log/sysstat/sa01 # 查看1号的CPU数据 -
vmstat(虚拟内存统计):bashvmstat 2 3 # 每2秒一次,共3次 # 关键指标: # r:等待运行的进程数(过高表示CPU繁忙) # free:空闲内存(kB) # si/so:交换区读写量(非0表示内存不足) # bi/bo:磁盘I/O读写块数(过高表示磁盘繁忙) # us/sy/id/wait:用户态/系统态/空闲/I/O等待的CPU时间占比 -
top/htop(实时进程监控):bashtop # 动态显示进程的CPU、内存占用(按P排序CPU,按M排序内存) htop # 更友好的交互界面(需安装) -
nmon(综合监控工具,支持图形化输出):bashnmon # 启动后按c(CPU)、m(内存)、d(磁盘)、n(网络)查看对应指标
-
117. 什么是内核参数?如何临时和永久修改内核参数?(sysctl 命令和 /etc/sysctl.conf 文件)
-
内核参数概念:内核参数是控制Linux内核行为的配置项(如网络队列大小、虚拟内存策略),直接影响系统性能和功能。
-
查看内核参数:
bashsysctl -a # 显示所有内核参数(数量较多) sysctl net.ipv4.ip_forward # 查看特定参数(如IPv4转发功能) cat /proc/sys/net/ipv4/ip_forward # 直接查看/proc下的参数文件(内核参数映射) -
临时修改内核参数(立即生效,重启后失效):
bash# 方法1:sysctl命令 sudo sysctl -w net.ipv4.ip_forward=1 # 启用IPv4转发 # 方法2:直接写入/proc文件 sudo echo 1 > /proc/sys/net/ipv4/ip_forward -
永久修改内核参数(重启后仍生效):
bash# 编辑配置文件(传统方式) sudo vim /etc/sysctl.conf # 添加参数(格式:参数名 = 值) net.ipv4.ip_forward = 1 vm.swappiness = 10 # 减少swap使用(0-100,值越小越倾向使用内存) # 使配置生效 sudo sysctl -p # 加载/etc/sysctl.conf中的配置 # 现代系统可能使用/etc/sysctl.d/目录下的.conf文件(优先级更高) sudo vim /etc/sysctl.d/99-custom.conf # 创建自定义配置文件 sudo sysctl --system # 加载所有配置文件
118. 如何查看系统的启动日志?(journalctl 命令或 /var/log/boot.log)
-
查看启动日志的方法:
-
journalctl(适用于使用systemd的系统,如CentOS 7+、Ubuntu 16.04+):bash# 查看所有启动日志 journalctl -b # -b 表示当前启动的日志 # 查看上一次启动的日志 journalctl -b -1 # 实时查看新增日志(类似tail -f) journalctl -f # 按时间筛选(如查看今天的启动日志) journalctl -b --since today # 查看特定服务的启动日志(如sshd) journalctl -u sshd -b -
传统日志文件:
bash# 查看boot.log(部分系统保存启动过程日志) cat /var/log/boot.log # 查看系统初始化日志(适用于SysVinit系统) cat /var/log/init.d/* # 查看内核启动消息 dmesg # 显示内核环缓冲区信息(启动初期的硬件检测等) dmesg | grep -i error # 筛选启动过程中的错误
-
-
注意 :
journalctl依赖systemd-journald服务,日志默认保存在/var/log/journal/,而传统日志文件由rsyslog等服务管理。
119. Linux系统中常见的日志文件有哪些?(如 /var/log/messages、/var/log/auth.log)
-
常见日志文件及用途:
日志文件 用途 适用系统 /var/log/messages系统通用日志(内核消息、服务启动/停止等) CentOS/RHEL /var/log/syslog系统通用日志(类似messages) Ubuntu/Debian /var/log/auth.log认证相关日志(登录、sudo、ssh等操作) Ubuntu/Debian /var/log/secure安全认证日志(类似auth.log) CentOS/RHEL /var/log/boot.log系统启动过程日志 多数Linux /var/log/kern.log内核消息日志 多数Linux /var/log/cron定时任务(cron)执行日志 多数Linux /var/log/nginx/access.logNginx访问日志(路径因软件而异) 安装Nginx的系统 /var/log/mysql/error.logMySQL错误日志(路径因软件而异) 安装MySQL的系统 /var/log/audit/audit.log审计日志(记录系统调用、文件访问等) 启用auditd服务的系统 -
日志查看技巧:
bash# 查看最近100行日志 tail -n 100 /var/log/syslog # 实时跟踪日志更新 tail -f /var/log/auth.log # 搜索包含"error"的日志行 grep -i "error" /var/log/messages # 按时间范围筛选日志(需日志含时间戳) grep "2023-10-01 10:" /var/log/syslog
120. 如何清理系统中的临时文件和日志,释放磁盘空间?
-
清理临时文件:
-
清理
/tmp目录(系统重启会自动清空,可手动删除长时间未使用的文件):bash# 删除7天前的临时文件 sudo find /tmp -type f -mtime +7 -delete # 清空整个/tmp目录(谨慎:确保无运行中程序依赖的文件) sudo rm -rf /tmp/* -
清理用户缓存:
bash# 清理浏览器缓存(以Firefox为例) rm -rf ~/.mozilla/firefox/*/Cache/* # 清理APT缓存(Debian/Ubuntu) sudo apt clean # 清理所有下载的包文件 sudo apt autoremove # 移除不再需要的依赖包
-
-
清理日志文件:
-
手动截断大日志(保留文件但清空内容,避免服务因文件消失出错):
bashsudo truncate -s 0 /var/log/syslog # 清空syslog日志 -
日志轮转配置 (自动压缩和删除旧日志,避免日志无限增长):
查看
/etc/logrotate.d/目录下的配置文件(如/etc/logrotate.d/syslog),示例配置:bash/var/log/syslog { daily # 每天轮转 rotate 7 # 保留7天的日志 compress # 压缩旧日志 delaycompress # 延迟压缩(保留最新一个未压缩) missingok # 日志文件不存在时不报错 }
-
-
查找大文件辅助清理:
bash# 查找/var目录下大于100MB的文件 sudo find /var -type f -size +100M -exec ls -lh {} \; -
注意 :清理日志和临时文件时,避免删除正在被写入的文件(可通过
lsof命令检查文件是否被占用)。