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 天前
C++面试题及详细答案100道( 71-80 )
c++·大剑师·c++面试题
还是大剑师兰特4 天前
Blender学习笔记(5) -- 为什么不能再次显示“添加柱体”的参数?
blender·大剑师
还是大剑师兰特4 天前
Linux面试题及详细答案 120道(96-110)-- 用户与权限管理
大剑师·linux面试题·linux教程
还是大剑师兰特5 天前
Blender学习笔记(0) -- 思维导图框架
blender·大剑师·blender教程
还是大剑师兰特8 天前
C#面试题及详细答案120道(86-95)-- 进阶特性
c#·大剑师
还是大剑师兰特9 天前
Blender学习笔记(03)-- 点光、平行光、聚光、面光
blender·大剑师·blender教程
还是大剑师兰特21 天前
C#面试题及详细答案120道(51-60)-- LINQ与Lambda
c#·大剑师
还是大剑师兰特22 天前
C#面试题及详细答案120道(41-50)-- 异常处理
c#·大剑师
还是大剑师兰特1 个月前
Rust面试题及详细答案120道(42-50)-- 泛型与Trait
大剑师·rust面试题·rust教程