Linux运维工程师面试题(1)

article/2025/8/22 15:56:34

文章目录

  • Linux运维工程师面试题(1)
    • 1 别名、内部命令、外部命令的执行顺序
    • 2 linux 系统启动流程
    • 3 破解用户密码的方法
    • 4 忘记 grub 密码怎么解决
    • 5 硬盘空间满了怎么处理,怎么找到硬盘中的大文件
    • 6 硬盘明明有很多空间,为什么无法存储文件
    • 7 进程使用内存问题
      • 7.1 内存泄露:Memory Leak
      • 7.2 内存溢出:Memory Overflow
      • 7.3 内存不足:OOM
    • 8 进程、线程和协程的区别
    • 9 使用 find 命令找出/data目录下15天以上以log结尾的文件并删除
    • 10 su、su - 和 sudo 的区别

Linux运维工程师面试题(1)

祝各位小伙伴们早日找到自己心仪的工作。
持续学习才不会被淘汰。
地球不爆炸,我们不放假。
机会总是留给有有准备的人的。
加油,打工人!

1 别名、内部命令、外部命令的执行顺序

命令执行寻找顺序:别名 > 内部命令 > 外部命令;

即先寻找是否为别名,然后再找是否为内部命令,最后才找是否为外部命令。

拓展:什么是内部命令?什么是外部命令?

内部命令:由shell自带的,而且通过某命令形式提供
外部命令:在文件系统路径下有对应的可执行程序文件

# 使用type命令判断是外部命令还是内部命令[root@waluna ~]# type -a echo
echo is a shell builtin
echo is /usr/bin/echo	# echo 即为内部命令也为外部命令
[root@waluna ~]# type echo
echo is a shell builtin	# 内部命令显示结果
[root@waluna ~]# type vim
vim is /usr/bin/vim	# 外部命令会显示命令的路径# 使用此命令后效果
[root@waluna ~]# vim 1.sh
[root@waluna ~]# type vim
vim is hashed (/usr/bin/vim) # 会显示为是hash,因为命令执行后会使用hash缓存在内存中,不会再次依次寻找环境变量的路径,可以直接执行,加速速度

2 linux 系统启动流程

不同操作系统及版本有所不同,以下以 centos 7 为例。

启动流程比较复杂,以下简要描述,详细看下图

  1. UEFI 或 BIOS 初始化,运行 POST 开机加电自检;
  2. 加载 BIOS 的硬件信息,获取第一个启动设备;
  3. 读取第一个启动设备 MBR 的引导加载程序 (grub) 的启动信息;
  4. 引导装载程序,centos 7 是 grub2,加载装载程序的配置文件:
  • /etc/grub.d/
    • /etc/default/grub
    • /boot/grub2/grub.cfg
  1. 加载 initramfs 驱动模块;
  2. 加载内核选项;
  3. 内核初始化,centos7使用systemd代替init;
  4. 执行 initrd.target 所有单元,包括挂载 /etc/fstab;
  5. 从 initramfs 根文件系统切换到磁盘根目录;
  6. systemd 执行默认 target 配置,配置文件 /etc/systemd/system/default.target;
  7. systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统;
  8. systemd 启动 multi-user.target 下的本机与服务器服务;
  9. systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local;
  10. systemd 执行 multi-user.target 下的 getty.target 及登录服务;
  11. systemd 执行 graphical 需要的服务。

linux启动流程

图片来自互联网,略有错误,仅供参考

3 破解用户密码的方法

方法一:

启动时任意键暂停启动
选择内核按e键进入编辑模式
将光标移动linux开始的行,添加内核参数rd.break # rd.break为打断正常启动
按 ctrl-x 启动
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
# 如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
exit
reboot

方法二:

启动时任意键暂停启动
选择内核按e键进入编辑模式
将光标移动linux开始的行,改为将 ro 改为 rw init=/sysroot/bin/sh
按 ctrl-x 启动
chroot /sysroot
passwd root
# 如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
exit
reboot

4 忘记 grub 密码怎么解决

如果 root 密码忘记了,grub 的密码也忘记了,可以进救援模式将 /mnt/sysimage/boot/grub/grub.conf 文件里密码那行删了即可,或者直接修改 shadow 文件,直接把 root 密码删了,即可以使用 root 进行空口令登录了。

物理安全是系统安全的前提

5 硬盘空间满了怎么处理,怎么找到硬盘中的大文件

首先使用 df -h 查看硬盘的使用情况,找到是哪个分区空间满了;

然后去对应分区使用 du -sh * 或者 du -a 查看哪个文件占空间比较大,一般是日志文件。

使用以上方法后没有发现大文件,该怎么处理?

特殊情况一:

挂载的时候将有数据的目录给覆盖掉了,需要使用df命令查看挂载情况,取消挂载后将原有目录的里大文件删除即可。

特殊情况二:

删除大量的文件没有被释放掉,使用 lsof -n | grep deleted 命令查看哪些被删除文件的pid,将对应的进程停止即可释放删除的文件进而释放硬盘空间。

正确释放大文件的方法:

cat /dev/null > /data/bigfile 或者 > /data/bigfile 但是后者不通用,有的shell不支持>,比如csh
释放后再删除 rm -f /data/bigfile

考察du、df、ls -l命令的区别:

ls -l查看的是文件的实际大小,du查看文件占硬盘空间的实际大小,df查看的是硬盘的实际大小,ext系列默认元数据占用比xfs文件系统的元数据要小很多。

一般情况下du显示的会比ls -l显示的大,这主要是因为du显示的是block的整数倍。

为什么生成文件前就有33M的数据,因为默认磁盘的元数据也会占用空间。

6 硬盘明明有很多空间,为什么无法存储文件

原因是所在分区的inode号满了,df -i 可以查看 inode 的使用情况。

一般是生成大量的小文件导致inode号耗尽,将这些小文件删除,释放inode号即可。

软链接过多也会导致inode耗尽。

7 进程使用内存问题

7.1 内存泄露:Memory Leak

指程序中用 malloc 或 new 申请了一块内存,但是没有用 free 或 delete 将内存释放,导致这块内存一直处于占用状态。

7.2 内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出。

7.3 内存不足:OOM

OOM 即 Out Of Memory,“内存用完了",在情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到类似下面的提示:

Jul 10 10:20:30 kernel: Out of memory: Kill process 9527(java) score 88 or sacrifice child

当 JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理。

原因:

  • 给应用分配内存太少:比如虚拟机本身可使用的内存 (一般通过启动时的VM参数指定) 太少。
  • 应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

使用的解决办法:

  1. 限制 java 进程的 max heap,并且降低 java 程序的 worker 数量,从而降低内存使用
  2. 给系统增加 swap 空间

8 进程、线程和协程的区别

定义:

(1) 进程是系统进行资源分配和调度的独立单位;

(2) 线程是进程的实体,是CPU调度和分配的基本单位;

(3) 协程,又称微线程,自带CUP上下文,是比线程更小的执行单元,占用资源小,效率高。

区别:

(1) 一个程序至少有一个进程,一个进程至少有一个线程;

(2) 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高;

(3) 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率;

(4) 线程不能够独立执行,必须依存在进程中。

进程线程协程

9 使用 find 命令找出/data目录下15天以上以log结尾的文件并删除

find /data -type f -iname "*.log" -mtime +15 -exec rm -rf {} \;

10 su、su - 和 sudo 的区别

su username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - username:登录式切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换

sudo 是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。格式:sudo -u USERNAME COMMAND

使用su切换用户时需要输入目标用户的密码,使用sudo执行命令的时候需要输入当前用户的密码。

以上面试题仅仅个人总结,想到什么就写什么,没有任何顺序,写的有什么不对的地方请各位大佬评论、留言,我会及时更正。

原文链接: Linux运维工程师面试题(1).


http://chatgpt.dhexx.cn/article/yW3LVlO6.shtml

相关文章

Linux运维工程师面试题整理

1.Nginx反向代理,负载均衡,动静分离,工作原理及优化 nginx配置反向代理。 vim Nginx.conf Server模块中配置 Listen 80 Server_name ip; 在server段里面的location加上proxy_pass http://ip:端口; Nginx配置完成后重启一下nginx。 配…

FastReport打印标签

1、选择标签向导 2、在这里可以选择自己想要的标签布局,也可以点击左下角的自定义标签 3、点击自定义标签后,可以自定义自己想要的标签 4、点击确定之后,可以在制造商找到自定义,选择自定义的标签1 5、然后可以在数据区自定义想要…

深度学习训练数据打标签过程

深度学习训练数据打标签过程 为了获取大量的图片训练数据,在采集数据的过程中常用视频的方式采集数据,但对于深度学习,训练的过程需要很多的有有标签的数据,这篇文章主要是解决视频文件转换成图片文件,并加标签&#…

k8s-节点打标签

node标签设置后,pod可以根据要求让pod调度到想要的节点上运行,或者不在某节点运行。或者确保pod调度到具有高性能(比如ssd的机器)的节点山上。 1.展示节点标签: kubectl get node --show-labelstrue2.添加节点标签 …

python 图片数据集批量打标签

1.数据集介绍 OutdoorScene数据集:http://people.csail.mit.edu/torralba/code/spatialenvelope/ This dataset contains 8 outdoor scene categories: coast, mountain, forest, open country, street, inside city, tall buildings and highways. There are 2688…

打印标签时如何解决打印偏移

我们在打印标签时,使用的纸张一般都是不干胶卷纸,这样的卷纸又有单排、双排、三排和四排的规格。这些不同规格的标签纸在条码打印中经常会出现打印偏移的问题,甚至会跳纸,遇到这样的情况该如何调整呢?小编下面详细介绍…

视频打标签算法探讨

随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经取得了很好的效果。本文因实际产品需求&#xff0…

labelImg打标签教程

前言: 打标签的精度,会直接影响目标检测算法最终的识别准确率 安装: labelImg是图片标注软件,用于数据集的制作、标注等等。 在cmd中依次运行以下命令: pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-t…

Docker篇之镜像打标签tag

日常线上活动中,当我们对系统进行开发时,做容器化管理,因为每一个版本不同,可能随着业务量的产生,需求的迭代更新,不同版本所需要的环境不同。 因此,为了满足这样的问题,我们通常做的…

K8S给节点打标签和打污点

打标签 kubectl label node node名 key=value kubectl label node node1 env-role=prod查看标签 kubectl get nodes --show-labels打污点 kubectl taint node node名 key=value:污点三个可选值 NoSchedule : 一定不被调度 PreferNoSchedule : 尽量不被调度 NoExecute : 不…

机器学习 数据预处理之数据打标签

工作内容: 1.读取pdf文档内容 2.分页显示 3.每个数据后设置下拉框供手动打标签 4.数据录入txt文档 代码: import math import os import tkinter as tk from tkinter import * import tkinter.ttk as ttk from tkinter.messagebox import * import …

Excel中批量生成标签,批量打印标签。按指定模板批量打印标签

1.问题概述 工作中经常需要将产品明细表转换成标签,贴在送货单上,或者将学生成绩转换成标签打印出来发送给学生。 例如在下图中有若干产品的送货信息,要求按图2的模板批量打印。 图1 送货信息 图2 标签模板 要实现此类需求&…

SVN打标签方法及在此过程中的问题处理

所谓的“打标签”,我个人的理解是:项目取得了阶段性成果,需要保存在标签(tags文件夹)中,以备不时之需。我采用的打标签的方法是: 1、在SVN客户端打标签。前提是本地项目与SVN Server上的项目无…

图片打标签labelimg

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Windows安装二、使用步骤1.在cmd命令行中创建一个新的环境2.对图片打标签3.保存打标签的图片4.如何打开已经安装的labelimg 总结 前言 对图片打标签是数据…

使用Labelimg打标签

1.下载Labelimg (1)打开cmd命令行 用Windowr打开命令行,输入cmd命令。 (2)输入命令 pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple -i的后半部分是清华镜像源地址。 (3&#xff…

使用BarTender连接Excel打印标签

一、准备Excel内容 比如我这里设计的是产品信息表内容如下: 二、设计标签样式 详细的设计标签样式操作请参考:获取BarTender10.1和新建一个BarTender模板 三、连接Excel数据库 3.1、选中任意需要填充数据的组件,打开属性面板 3.2、选择属性面板中数据源下的组件名称,点…

使用labelme打标签,详细教程

做图像语义分割,打标签时需要用到labelme这个工具,我总结了它的详细使用教程。 目录 一、安装labelme工具二、文件位置关系三、labelme工具四、labelme工具的快捷键五、代码(将标签文件转为统一固定格式)六、总结 一、安装labelm…

深度学习中常见的打标签工具和数据集资源

深度学习中常见的打标签工具和数据集资源 一、打标签工具1. labelimg/labelme1.1 搭建图片标注环境(win10)(1) 安装anaconda3(2) 在anaconda环境python3下搭建labelImg环境 1.2 打标签1.2 搭建图片标注环境(ubuntu18.04)1.3 快捷键 一、打标签工具 1. l…

自训练数据集打标签注意事项及使用工具推荐

盘点自训练数据集如何打标签! 一、打标签规则 二、推荐工具 使用心得 前言 分享我在训练自己的数据集前期所碰到的一些问题,希望大家能及时避雷! 一、打标签规则 由于我使用YOLOv5模型,查询官方建议以及网上各路大神总结的经…

深度学习中常见的打标签工具和数据集集合

集大家之所长汇集于此,希望对有需要的你能有所帮助。 一、打标签工具 (1)labelimg/labelme 这两款工具简便易行,前者主要用于对目标进行大致的标定,用于常见的框选标定,后者主要用于较为细致的轮廓标定&…