2019-12-13 09:38:34 +08:00
[#]: collector: (lujun9972)
[#]: translator: (wxy)
2019-12-14 12:49:46 +08:00
[#]: reviewer: (wxy)
2019-12-14 12:50:14 +08:00
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11673-1.html)
2019-12-13 09:38:34 +08:00
[#]: subject: (24 sysadmin job interview questions you should know)
[#]: via: (https://opensource.com/article/19/7/sysadmin-job-interview-questions)
[#]: author: (DirectedSoul https://opensource.com/users/directedsoul)
24 个必知必会的系统管理员面试问题
======
2019-12-14 12:49:46 +08:00
> 即将进行系统管理员工作面试吗?阅读本文,了解你可能会遇到的一些问题以及可能的答案。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
![](https://img.linux.net.cn/data/attachment/album/201912/14/124906g3vrkr3vrvqdkw7f.jpg)
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
作为一个经常与计算机打交道的极客,在硕士毕业后在 IT 行业选择我的职业是很自然的选择。因此,我认为走上系统管理员之路是正确的路径。在我的职业生涯中,我对求职面试过程非常熟悉。现在来看一下对该职位的预期、职业发展道路,以及一系列常见面试问题及我的回答。
2019-12-13 09:38:34 +08:00
### 系统管理员的典型任务和职责
组织需要了解系统工作原理的人员,以确保数据安全并保持服务平稳运行。你可能会问:“等等,是不是系统管理员还能做更多的事情?”
你是对的。现在,一般来说,让我们看一下典型的系统管理员的日常任务。根据公司的需求和人员的技能水平,系统管理员的任务从管理台式机、笔记本电脑、网络和服务器到设计组织的 IT 策略不等。有时,系统管理员甚至负责购买和订购新的 IT 设备。
2019-12-14 12:49:46 +08:00
那些寻求系统管理工作以作为其职业发展道路的人可能会发现,由于 IT 领域的快速变化是不可避免的,因此难以保持其技能和知识的最新状态。所有人都会想到的下一个自然而然的问题是 IT 专业人员如何掌握最新的更新和技能。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
### 简单的问题
2019-12-13 09:38:34 +08:00
这是你将遇到的一些最基本的问题,以及我的答案:
2019-12-14 12:49:46 +08:00
**1、你在 \*nix 服务器上登录后键入的前五个命令是什么?**
2019-12-13 09:38:34 +08:00
> * `lsblk` 以查看所有的块设备信息
> * `who` 查看谁登录到服务器
> * `top`,以了解服务器上正在运行的进程
> * `df -khT` 以查看服务器上可用的磁盘容量
> * `netstat` 以查看哪些 TCP 网络连接处于活动状态
2019-12-14 12:49:46 +08:00
**2、如何使进程在后台运行, 这样做的好处是什么? **
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> 你可以通过在命令末尾添加特殊字符 `& ` 来使进程在后台运行。通常,执行时间太长并且不需要用户交互的应用程序可以放到后台,以便我们可以在终端中继续工作。([引文][2])
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**3、以 root 用户身份运行这些命令是好事还是坏事?**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> 由于两个主要问题,以 root 身份运行(任何命令)是不好的。第一个是*风险*。当你以 **root** 身份登录时,无法避免你由于粗心大意而犯错。如果你尝试以带有潜在危害的方式更改系统,则需要使用 `sudo`,它会引入一个暂停(在你输入密码时),以确保你不会犯错。
2019-12-13 09:38:34 +08:00
>
2019-12-14 12:49:46 +08:00
> 第二个原因是*安全*。如果你不知道管理员用户的登录信息,则系统更难被攻击。拥有 root 的访问权限意味着你已经能够进行管理员身份下的一半工作任务。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**4、`rm` 和 `rm -rf` 有什么区别?**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> `rm` 命令本身仅删除指明的文件(而不删除目录)。使用 `-rf` 标志,你添加了两个附加功能:`-r`(或等价的 `-R`、`--recursive`)标志可以递归删除目录的内容,包括隐藏的文件和子目录;而 `-f`(或 `--force`)标志使 `rm` 忽略不存在的文件,并且从不提示你进行确认。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**5、有一个大小约为 15GB 的 `Compress.tgz` 文件。你如何列出其内容,以及如何仅提取出特定文件?**
2019-12-13 09:38:34 +08:00
> 要列出文件的内容:
>
> `tar tf archive.tgz`
>
> 要提取特定文件:
>
> `tar xf archive.tgz filename`
2019-12-14 12:49:46 +08:00
### 有点难度的问题
2019-12-13 09:38:34 +08:00
这是你可能会遇到的一些较难的问题,以及我的答案:
2019-12-14 12:49:46 +08:00
**6、什么是 RAID? 什么是 RAID 0、RAID 1、RAID 5、RAID 6 和 RAID 10? **
2019-12-13 09:38:34 +08:00
> RAID( <ruby>廉价磁盘冗余阵列<rt>Redundant Array of Inexpensive Disks</rt></ruby>)是一种用于提高数据存储性能和/或可靠性的技术。RAID 级别为:
>
> * RAID 0: 也称为磁盘条带化, 这是一种分解文件并将数据分布在 RAID 组中所有磁盘驱动器上的技术。它没有防止磁盘失败的保障。([引文][3])
2019-12-14 12:49:46 +08:00
> * RAID 1: 一种流行的磁盘子系统, 通过在两个驱动器上写入相同的数据来提高安全性。RAID 1 被称为*镜像*, 它不会提高写入性能, 但读取性能可能会提高到每个磁盘性能的总和。另外, 如果一个驱动器发生故障, 则会使用第二个驱动器, 发生故障的驱动器需要手动更换。更换后, RAID 控制器会将可工作的驱动器的内容复制到新驱动器上。
2019-12-13 09:38:34 +08:00
> * RAID 5: 一种磁盘子系统, 可通过计算奇偶校验数据来提高安全性和提高速度。RAID 5 通过跨三个或更多驱动器交错数据(条带化)来实现此目的。在单个驱动器发生故障时,后续读取可以从分布式奇偶校验计算出,从而不会丢失任何数据。
> * RAID 6: 通过添加另一个奇偶校验块来扩展 RAID 5。此级别至少需要四个磁盘, 并且可以在任何两个并发磁盘故障的情况下继续执行读/写操作。RAID 6 不会对读取操作造成性能损失,但由于与奇偶校验计算相关的开销,因此确实会对写入操作造成性能损失。
> * RAID 10: RAID 10 也称为 RAID 1 + 0, 它结合了磁盘镜像和磁盘条带化功能来保护数据。它至少需要四个磁盘, 并且跨镜像对对数据进行条带化。只要每个镜像对中的一个磁盘起作用, 就可以检索数据。如果同一镜像对中的两个磁盘发生故障, 则所有数据将丢失, 因为带区集中没有奇偶校验。( [引文][4])
2019-12-14 12:49:46 +08:00
**7、`ping` 命令使用哪个端口?**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> `ping` 命令使用 ICMP。具体来说, 它使用 ICMP 回显请求和应答包。
2019-12-13 09:38:34 +08:00
>
> ICMP 不使用 UDP 或 TCP 通信服务:相反,它使用原始的 IP 通信服务。这意味着, ICMP 消息直接承载在 IP 数据报数据字段中。
2019-12-14 12:49:46 +08:00
**8、路由器和网关之间有什么区别? 什么是默认网关? **
2019-12-13 09:38:34 +08:00
> *路由器*描述的是一种通用技术功能(第 3 层转发)或用于该目的的硬件设备,而*网关*描述的是本地网段的功能(提供到其他地方的连接性)。你还可以说“将路由器设置为网关”。另一个术语是“跳”,它描述了子网之间的转发。
>
2019-12-14 12:49:46 +08:00
> 术语*默认网关*表示局域网上的路由器,它的责任是作为对局域网外部的计算机通信的第一个联系点。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**9、解释一下 Linux 的引导过程。**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> BIOS -> 主引导记录( MBR) -> GRUB -> 内核 -> 初始化 -> 运行级
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**10、服务器启动时如何检查错误消息? **
2019-12-13 09:38:34 +08:00
> 内核消息始终存储在 kmsg 缓冲区中,可通过 `dmesg` 命令查看。
>
2019-12-14 12:49:46 +08:00
> 引导出现的问题和错误要求系统管理员结合某些特定命令来查看某些重要文件,这些文件不同版本的 Linux 处理方式不同:
2019-12-13 09:38:34 +08:00
>
> * `/var/log/boot.log` 是系统引导日志,其中包含系统引导过程中展开的所有内容。
> * `/var/log/messages` 存储全局系统消息,包括系统引导期间记录的消息。
> * `/var/log/dmesg` 包含内核环形缓冲区信息。
2019-12-14 12:49:46 +08:00
**11、符号链接和硬链接有什么区别? **
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> *符号链接*( *软链接*)实际是到原始文件的链接,而*硬链接*是原始文件的镜像副本。如果删除原始文件,则该软链接就没有用了,因为它指向的文件不存在了。如果是硬链接,则完全相反。如果删除原始文件,则硬链接仍然包含原始文件中的数据。([引文][5])
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**12、如何更改内核参数? 你可能需要调整哪些内核选项? **
2019-12-13 09:38:34 +08:00
> 要在类 Unix 系统中设置内核参数,请首先编辑文件 `/etc/sysctl.conf`。进行更改后,保存文件并运行 `sysctl -p` 命令。此命令使更改永久生效,而无需重新启动计算机
2019-12-14 12:49:46 +08:00
**13、解释一下 `/proc` 文件系统。**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> `/proc` 文件系统是虚拟的,并提供有关内核、硬件和正在运行的进程的详细信息。由于 `/proc` 包含虚拟文件,因此称为“虚拟文件系统”。这些虚拟文件具有独特性。其中大多数显示为零字节。
2019-12-13 09:38:34 +08:00
>
> 虚拟文件,例如 `/proc/interrupts`、`/proc/meminfo`、`/proc/mounts` 和 `/proc/partitions`,提供了系统硬件的最新信息。其他诸如 `/proc/filesystems` 和 `/proc/sys` 目录提供系统配置信息和接口。
2019-12-14 12:49:46 +08:00
**14、如何在没有密码的情况下以其他用户身份运行脚本? **
2019-12-13 09:38:34 +08:00
> 例如,如果你可以编辑 sudoers 文件(例如 `/private/etc/sudoers`),则可以使用 `visudo` 添加以下[内容][2]:
>
> `user1 ALL =( user2) NOPASSWD: /opt/scripts/bin/generate.sh`
2019-12-14 12:49:46 +08:00
**15、什么是 UID 0 toor 帐户?是被入侵了么?**
2019-12-13 09:38:34 +08:00
> `toor` 用户是备用的超级用户帐户,其中 `toor` 是 `root` 反向拼写。它预期与非标准 shell 一起使用,因此 `root` 的默认 shell 不需要更改。
>
2019-12-14 12:49:46 +08:00
> 此用途很重要。这些 shell 不是基本发行版的一部分,而是从 ports 或软件包安装的,它们安装在 `/usr/local/bin` 中,默认情况下,位于其他文件系统上。如果 root 的 shell 位于 `/usr/local/bin` 中,并且未挂载包含 `/usr/local/bin` 的文件系统,则 root 无法登录以解决问题,并且系统管理员必须重新启动进入单用户模式来输入 shell 程序的路径。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
### 更难的问题
2019-12-13 09:38:34 +08:00
这是你可能会遇到的甚至更困难的问题:
2019-12-14 12:49:46 +08:00
**16、`tracert` 如何工作,使用什么协议?**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> 命令 `tracert`(或 `traceroute`,具体取决于操作系统)使你可以准确地看到在连接到最终目的地的连接链条中所触及的路由器。如果你遇到无法连接或无法 `ping` 通最终目的地的问题,则可以使用 `tracert` 来帮助你确定连接链在何处停止。([引文][6])
2019-12-13 09:38:34 +08:00
>
> 通过此信息, 你可以联系正确的人; 无论是你自己的防火墙、ISP、目的地的 ISP 还是中间的某个位置。 `tracert` 命令像 `ping` 一样使用 ICMP 协议,但也可以使用 TCP 三步握手的第一步来发送 SYN 请求以进行响应。
2019-12-14 12:49:46 +08:00
**17、使用 `chroot` 的主要优点是什么?我们何时以及为什么使用它?在 chroot 环境中,`mount /dev`、`mount /proc` 和 `mount /sys` 命令的作用是什么?**
2019-12-13 09:38:34 +08:00
> chroot 环境的优点是文件系统与物理主机是隔离的,因为 chroot 在文件系统内部有一个单独的文件系统。区别在于 `chroot` 使用新创建的根目录(`/`)作为其根目录。
>
2019-12-14 12:49:46 +08:00
> chroot 监狱可让你将进程及其子进程与系统其余部分隔离。它仅应用于不以 root 身份运行的进程,因为 root 用户可以轻松地脱离监狱。
2019-12-13 09:38:34 +08:00
>
2019-12-14 12:49:46 +08:00
> 该思路是创建一个目录树,在其中复制或链接运行该进程所需的所有系统文件。然后,你可以使用 `chroot()` 系统调用来告诉它根目录现在位于此新树的基点上,然后启动在该 chroot 环境中运行的进程。由于该命令因此而无法引用修改后的根目录之外的路径,因此它无法在这些位置上执行恶意操作(读取、写入等)。([引文][7])
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**18、如何保护你的系统免遭黑客攻击? **
2019-12-13 09:38:34 +08:00
> 遵循最低特权原则和这些做法:
>
> * 使用公钥加密,它可提供出色的安全性。
> * 增强密码复杂性。
> * 了解为什么要对上述规则设置例外。
> * 定期检查你的例外情况。
> * 让具体的人对失败负责。(它使你保持警惕。)([引文][8])
2019-12-14 12:49:46 +08:00
**19、什么是 LVM, 使用 LVM 有什么好处?**
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> LVM( 逻辑卷管理) 是一种存储设备管理技术, 该技术使用户能够合并和抽象化组件存储设备的物理布局, 从而可以更轻松、灵活地进行管理。使用设备映射器的 Linux 内核框架, 当前迭代( LVM2) 可用于将现有存储设备收集到组中, 并根据需要从组合的空间分配逻辑单元。
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
**20、什么是粘性端口? **
2019-12-13 09:38:34 +08:00
> 粘性端口是网络管理员最好的朋友,也是最头痛的事情之一。它们允许你设置网络,以便通过将交换机上的每个端口锁定到特定的 MAC 地址,仅允许一台(或你指定的数字)计算机在该端口上进行连接。
2019-12-14 12:49:46 +08:00
**21、解释一下端口转发? **
2019-12-13 09:38:34 +08:00
2019-12-14 12:49:46 +08:00
> 尝试与安全的网络内部的系统进行通信时,从外部进行通信可能非常困难,这是很显然的。因此,在路由器本身或其他连接管理设备中使用端口转发表可以使特定流量自动转发到特定目的地。例如,如果你的网络上运行着一台 Web 服务器,并且想从外部授予对该服务器的访问权限,则可以将端口转发设置为该服务器上的端口 80。这意味着在 Web 浏览器中输入你的( 外网) IP 地址的任何人都将立即连接到该服务器的网站。
2019-12-13 09:38:34 +08:00
>
> 请注意,通常不建议允许从你的网络外部直接访问服务器。
2019-12-14 12:49:46 +08:00
**22、对于 IDS, 误报和漏报是什么? **
2019-12-13 09:38:34 +08:00
> 当入侵检测系统( IDS) 设备为实际上没有发生的入侵生成警报时, 这是<ruby>误报(假阳性)<rt>false positive</rt></ruby>。如果设备未生成任何警报,而入侵实际上已发生,则为<ruby>漏报(假阴性)</rt></ruby>。
2019-12-14 12:49:46 +08:00
**23、解释一下 `:(){ :|:& };:` ,如果已经登录系统,如何停止此代码?**
2019-12-13 09:38:34 +08:00
> 这是一枚复刻炸弹。它分解如下:
>
2019-12-14 12:49:46 +08:00
> * `:()` 定义了函数,以 `:` 作为函数名,并且空括号表示它不接受任何参数。
2019-12-13 09:38:34 +08:00
> * `{}` 是函数定义的开始和结束。
> * `:|:` 将函数 `:` 的副本加载到内存中,并将其输出通过管道传递给函数 `:` 的另一个副本,该副本也必须加载到内存中。
> * `& ` 使前一个命令行成为后台进程,因此即使父进程被自动杀死,子进程也不会被杀死。
2019-12-14 12:49:46 +08:00
> * `:` 执行该函数,因此连锁反应开始。
2019-12-13 09:38:34 +08:00
>
> 保护多用户系统的最佳方法是使用特权访问管理( PAM) 来限制用户可以使用的进程数。
>
> 复刻炸弹的最大问题是它发起了太多进程。因此,如果你已经登录系统,我们有两种尝试解决此问题的方法。一种选择是执行一个 `SIGSTOP` 命令来停止进程,例如:
>
> `killall -STOP -u user1`
>
> 如果由于占用了所有进程而无法使用命令行,则必须使用 `exec` 强制其运行:
>
> `exec killall -STOP -u user1`
>
> 对于复刻炸弹,最好的选择是防患于未然。
2019-12-14 12:49:46 +08:00
**24、什么是 OOM 杀手,它如何决定首先杀死哪个进程?**
2019-12-13 09:38:34 +08:00
> 如果内存被进程彻底耗尽,可能会威胁到系统的稳定性,那么<ruby>内存不足<rt>out of memory</rt></ruby>( OOM) 杀手就登场了。
>
> OOM 杀手首先必须选择要杀死的最佳进程。*最佳*在这里指的是在被杀死时将释放最大内存的进程,并且对系统来说最不重要。主要目标是杀死最少数量的进程,以最大程度地减少造成的损害,同时最大化释放的内存量。
>
> 为了实现此目标,内核为每个进程维护一个 `oom_score`。你可以在 `/proc` 文件系统中的 `pid` 目录下的看到每个进程的 `oom_score`:
>
> `$ cat /proc/10292/oom_score`
>
2019-12-14 12:49:46 +08:00
> 任何进程的 `oom_score` 值越高,在内存不足的情况下被 OOM 杀手杀死的可能性就越高。([引文][9])
2019-12-13 09:38:34 +08:00
### 总结
2019-12-14 12:49:46 +08:00
系统管理人员的薪水[差别很大][10],有些网站上说年薪在 70,000 到 100,000 美元之间,具体取决于地点、组织的规模以及你的教育水平以及多年的工作经验。系统管理的职业道路最终归结为你对使用服务器和解决那些酷问题的兴趣。现在,我要说,继续前进,实现你的梦想之路吧!
2019-12-13 09:38:34 +08:00
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/7/sysadmin-job-interview-questions
作者:[DirectedSoul][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxy)
2019-12-14 12:49:46 +08:00
校对:[wxy](https://github.com/wxy)
2019-12-13 09:38:34 +08:00
本文由 [LCTT ](https://github.com/LCTT/TranslateProject ) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/directedsoul
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_HowToFish_520x292.png?itok=DHbdxv6H (Question and answer.)
[2]: https://github.com/trimstray/test-your-sysadmin-skills
[3]: https://www.waytoeasylearn.com/2016/05/netapp-filer-tutorial.html
[4]: https://searchstorage.techtarget.com/definition/RAID-10-redundant-array-of-independent-disks
[5]: https://www.answers.com/Q/What_is_hard_link_and_soft_link_in_Linux
[6]: https://www.wisdomjobs.com/e-university/network-administrator-interview-questions.html
[7]: https://unix.stackexchange.com/questions/105/chroot-jail-what-is-it-and-how-do-i-use-it
[8]: https://serverfault.com/questions/391370/how-to-prevent-zero-day-attacks
[9]: https://unix.stackexchange.com/a/153586/8369
[10]: https://blog.netwrix.com/2018/07/23/systems-administrator-salary-in-2018-how-much-can-you-earn/