关于linux:Linux运维工程师面试题1

1次阅读

共计 3594 个字符,预计需要花费 9 分钟才能阅读完成。

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,加载装载程序的配置文件:
  5. /etc/grub.d/

    • /etc/default/grub
    • /boot/grub2/grub.cfg
  6. 加载 initramfs 驱动模块;
  7. 加载内核选项;
  8. 内核初始化,centos7 应用 systemd 代替 init;
  9. 执行 initrd.target 所有单元,包含挂载 /etc/fstab;
  10. 从 initramfs 根文件系统切换到磁盘根目录;
  11. systemd 执行默认 target 配置,配置文件 /etc/systemd/system/default.target;
  12. systemd 执行 sysinit.target 初始化零碎及 basic.target 筹备操作系统;
  13. systemd 启动 multi-user.target 下的本机与服务器服务;
  14. systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local;
  15. systemd 执行 multi-user.target 下的 getty.target 及登录服务;
  16. systemd 执行 graphical 须要的服务。

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

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》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、GitHub、集体博客
公众号:阿贤 Linux
集体博客:blog.waluna.top
https://blog.waluna.top/


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

正文完
 0