Linux面试题及详细答案 120道(111-120-- 系统管理与性能调优

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括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 -acat /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和网络性能?(如 sarvmstat 命令))
      • [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. 如何清理系统中的临时文件和日志,释放磁盘空间?)
  • 二、120道Linux面试题目录列表

一、本文面试题目录

111. 如何查看Linux系统的版本信息?(uname -acat /etc/os-release 等)

  • 原理说明:Linux系统版本信息包括内核版本、发行版名称及版本等,不同命令可获取不同层面的信息。
  • 常用命令及示例
    1. 查看内核版本

      bash 复制代码
      uname -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
    2. 查看发行版信息

      bash 复制代码
      cat /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
    3. 其他方法

      bash 复制代码
      lsb_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表示周一到周五
  • 创建和管理定时任务

    bash 复制代码
    crontab -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 命令输出的三个数字分别表示什么?

  • 查看系统负载的命令

    1. uptime:简洁显示系统运行时间和负载。
    2. w:在uptime基础上增加用户登录信息。
    3. top/htop:动态显示负载及进程资源占用。
  • uptime 输出解读

    bash 复制代码
    uptime  # 输出示例: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瓶颈。

115. 什么是I/O等待(iowait)?如何查看系统的I/O性能?(如 iostat 命令)

  • I/O等待(iowait)

    指CPU空闲且等待磁盘I/O操作完成的时间百分比。iowait过高通常表示磁盘读写速度跟不上CPU处理速度,可能是磁盘性能不足或I/O请求过多导致。

  • 查看I/O性能的工具

    1. iostat (需安装sysstat包):

      bash 复制代码
      iostat  # 显示CPU和磁盘I/O统计(默认间隔1秒,显示一次)
      iostat 5 3  # 每5秒刷新一次,共3次
      
      # 输出关键指标解读:
      # %iowait:CPU等待I/O的时间百分比(过高需关注)
      # tps:每秒I/O传输次数
      # kB_read/s:每秒读取数据量(kB)
      # kB_wrtn/s:每秒写入数据量(kB)
    2. iotop :类似top,按I/O使用率排序进程:

      bash 复制代码
      sudo iotop  # 实时显示进程的I/O读写情况
    3. dstat:综合显示CPU、内存、I/O等性能指标:

      bash 复制代码
      dstat -d  # 仅显示磁盘I/O统计
  • 分析建议

    %iowait持续高于20%,且磁盘kB_read/skB_wrtn/s接近硬件上限,可能需要优化磁盘(如更换SSD)或减少I/O密集型操作。

116. 如何监控系统的CPU、内存、磁盘I/O和网络性能?(如 sarvmstat 命令)

  • 综合性能监控工具
    1. 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数据
    2. vmstat(虚拟内存统计):

      bash 复制代码
      vmstat 2 3  # 每2秒一次,共3次
      # 关键指标:
      # r:等待运行的进程数(过高表示CPU繁忙)
      # free:空闲内存(kB)
      # si/so:交换区读写量(非0表示内存不足)
      # bi/bo:磁盘I/O读写块数(过高表示磁盘繁忙)
      # us/sy/id/wait:用户态/系统态/空闲/I/O等待的CPU时间占比
    3. top/htop(实时进程监控):

      bash 复制代码
      top  # 动态显示进程的CPU、内存占用(按P排序CPU,按M排序内存)
      htop  # 更友好的交互界面(需安装)
    4. nmon(综合监控工具,支持图形化输出):

      bash 复制代码
      nmon  # 启动后按c(CPU)、m(内存)、d(磁盘)、n(网络)查看对应指标

117. 什么是内核参数?如何临时和永久修改内核参数?(sysctl 命令和 /etc/sysctl.conf 文件)

  • 内核参数概念:内核参数是控制Linux内核行为的配置项(如网络队列大小、虚拟内存策略),直接影响系统性能和功能。

  • 查看内核参数

    bash 复制代码
    sysctl -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

  • 查看启动日志的方法

    1. 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
    2. 传统日志文件

      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.log Nginx访问日志(路径因软件而异) 安装Nginx的系统
    /var/log/mysql/error.log MySQL错误日志(路径因软件而异) 安装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. 如何清理系统中的临时文件和日志,释放磁盘空间?

  • 清理临时文件

    1. 清理/tmp目录(系统重启会自动清空,可手动删除长时间未使用的文件):

      bash 复制代码
      # 删除7天前的临时文件
      sudo find /tmp -type f -mtime +7 -delete
      
      # 清空整个/tmp目录(谨慎:确保无运行中程序依赖的文件)
      sudo rm -rf /tmp/*
    2. 清理用户缓存

      bash 复制代码
      # 清理浏览器缓存(以Firefox为例)
      rm -rf ~/.mozilla/firefox/*/Cache/*
      
      # 清理APT缓存(Debian/Ubuntu)
      sudo apt clean  # 清理所有下载的包文件
      sudo apt autoremove  # 移除不再需要的依赖包
  • 清理日志文件

    1. 手动截断大日志(保留文件但清空内容,避免服务因文件消失出错):

      bash 复制代码
      sudo truncate -s 0 /var/log/syslog  # 清空syslog日志
    2. 日志轮转配置 (自动压缩和删除旧日志,避免日志无限增长):

      查看/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命令检查文件是否被占用)。

二、120道Linux面试题目录列表

文章序号 Linux面试题120道
1 Linux面试题及详细答案120道(01-15)
2 Linux面试题及详细答案120道(16-30)
3 Linux面试题及详细答案120道(31-45)
4 Linux面试题及详细答案120道(46-60)
5 Linux面试题及详细答案120道(61-75)
6 Linux面试题及详细答案120道(76-95)
7 Linux面试题及详细答案120道(96-110)
8 Linux面试题及详细答案120道(111-120)
相关推荐
还是大剑师兰特2 天前
ruoyi‑vue3 添加【车辆管理】菜单组完整方案
大剑师·若依系统
还是大剑师兰特6 天前
若依(ruoyi)前后台系统从零到一部署配置(坑点带解析)
大剑师
还是大剑师兰特6 天前
ideaIC‑2024.1.7(社区版zip绿色解压版)完整使用教程
大剑师·idealc
还是大剑师兰特8 天前
MySQL8.0 Windows完整安装教程
windows·mysql·大剑师
还是大剑师兰特1 个月前
VSCode 插件冲突导致崩溃、卡死、假死 全套根治方案
vscode·大剑师
还是大剑师兰特1 个月前
ThinkPad T490 Windows 自动修复失败完整解决步骤
windows·大剑师·t490
还是大剑师兰特1 个月前
二年级奥数(12) : 巧填符号+竖式数字谜
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(9):鸡兔同笼+ 归一问题
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(7):移多补少8题 + 和差入门8题 + 年龄问题8题
大剑师·二年级奥数
还是大剑师兰特2 个月前
Vite6 + Vue3 + TS 完整版标准配置模板
vite·大剑师·vite6配置