标签 系统管理员 下的文章

科学海盗湾 Sci-Hub 创始人获 EFF 年度大奖

电子前沿基金会(EFF)将 2023 年度大奖授予了 Sci-Hub 的创始人 Alexandra Elbakyan。Sci-Hub 是她在 2011 年还是一名大学生时创办的,为所有科学知识提供免费不受限制的访问。它在今天发展成为一个包含逾 8830 万篇论文和书籍的数据库,任何人都可以下载和阅读。EFF 称,Sci-Hub 是数百万学生和研究人员的重要资源。一些医学专家甚至认为,该网站有助于挽救生命。Sci-Hub 打破了期刊出版业的垄断机制,因而她成为了众多诉讼和政府行动的目标,但她仍然坚持其信念而不动摇。本次获奖者还有 图书馆自由项目 Library Freedom Project 和 Signal 基金会。Linux 之父 Linus Torvalds 之前也获得过该奖项。

消息来源:EFF
老王点评:无需多说,就一个字,?

昨天是系统管理员日

昨天(7 月 28 日)是 “ 系统管理员日 System Administrator Appreciation Day ”,其组织者表示,全世界都应该借此机会 “向那些风雨无阻地预防灾难、保护 IT 安全和扑灭技术火灾的英雄们致敬”。该活动由系统管理员 Ted Kekatos 于 1999 年创立,每年 7 月的最后一个星期五都会举行庆祝活动,以表彰和感谢这些兢兢业业,但往往不被重视的 IT 专业人员所做出的贡献。

消息来源:The Register
老王点评:国内了解并庆祝该日子的系统管理员们非常少,连我这样一个老系统管理员都是第一次知道。国内往往会庆祝另外一个日子 —— 代表 7X24 运维的 7.24。

美国立法禁止汽车制造商在新车中取消调幅广播

今年至少有七家汽车制造商在其电动汽车中 取消 了调幅广播,其中包括福特、特斯拉、宝马和大众。迫于压力,福特在今年 5 月改变了取消的做法。美国参议院商业委员会周四批准了一项立法,禁止汽车制造商在新车中取消调幅广播。立法者称,失去调幅广播会破坏向公众提供关键公共安全信息的联邦系统。

消息来源:路透社
老王点评:虽然调幅广播是很老的技术了,但是它仍然有不可取代的优势。你有多久没有收听过调幅广播了?

即将进行系统管理员工作面试吗?阅读本文,了解你可能会遇到的一些问题以及可能的答案。

作为一个经常与计算机打交道的极客,在硕士毕业后在 IT 行业选择我的职业是很自然的选择。因此,我认为走上系统管理员之路是正确的路径。在我的职业生涯中,我对求职面试过程非常熟悉。现在来看一下对该职位的预期、职业发展道路,以及一系列常见面试问题及我的回答。

系统管理员的典型任务和职责

组织需要了解系统工作原理的人员,以确保数据安全并保持服务平稳运行。你可能会问:“等等,是不是系统管理员还能做更多的事情?”

你是对的。现在,一般来说,让我们看一下典型的系统管理员的日常任务。根据公司的需求和人员的技能水平,系统管理员的任务从管理台式机、笔记本电脑、网络和服务器到设计组织的 IT 策略不等。有时,系统管理员甚至负责购买和订购新的 IT 设备。

那些寻求系统管理工作以作为其职业发展道路的人可能会发现,由于 IT 领域的快速变化是不可避免的,因此难以保持其技能和知识的最新状态。所有人都会想到的下一个自然而然的问题是 IT 专业人员如何掌握最新的更新和技能。

简单的问题

这是你将遇到的一些最基本的问题,以及我的答案:

1、你在 *nix 服务器上登录后键入的前五个命令是什么?

  • lsblk 以查看所有的块设备信息
  • who 查看谁登录到服务器
  • top,以了解服务器上正在运行的进程
  • df -khT 以查看服务器上可用的磁盘容量
  • netstat 以查看哪些 TCP 网络连接处于活动状态

2、如何使进程在后台运行,这样做的好处是什么?

你可以通过在命令末尾添加特殊字符 来使进程在后台运行。通常,执行时间太长并且不需要用户交互的应用程序可以放到后台,以便我们可以在终端中继续工作。(引文

3、以 root 用户身份运行这些命令是好事还是坏事?

由于两个主要问题,以 root 身份运行(任何命令)是不好的。第一个是风险。当你以 root 身份登录时,无法避免你由于粗心大意而犯错。如果你尝试以带有潜在危害的方式更改系统,则需要使用 sudo,它会引入一个暂停(在你输入密码时),以确保你不会犯错。

第二个原因是安全。如果你不知道管理员用户的登录信息,则系统更难被攻击。拥有 root 的访问权限意味着你已经能够进行管理员身份下的一半工作任务。

4、rmrm -rf 有什么区别?

rm 命令本身仅删除指明的文件(而不删除目录)。使用 -rf 标志,你添加了两个附加功能:-r(或等价的 -R--recursive)标志可以递归删除目录的内容,包括隐藏的文件和子目录;而 -f(或 --force)标志使 rm 忽略不存在的文件,并且从不提示你进行确认。

5、有一个大小约为 15GB 的 Compress.tgz 文件。你如何列出其内容,以及如何仅提取出特定文件?

要列出文件的内容:

tar tf archive.tgz

要提取特定文件:

tar xf archive.tgz filename

有点难度的问题

这是你可能会遇到的一些较难的问题,以及我的答案:

6、什么是 RAID?什么是 RAID 0、RAID 1、RAID 5、RAID 6 和 RAID 10?

RAID( 廉价磁盘冗余阵列 Redundant Array of Inexpensive Disks )是一种用于提高数据存储性能和/或可靠性的技术。RAID 级别为:

  • RAID 0:也称为磁盘条带化,这是一种分解文件并将数据分布在 RAID 组中所有磁盘驱动器上的技术。它没有防止磁盘失败的保障。(引文
  • RAID 1:一种流行的磁盘子系统,通过在两个驱动器上写入相同的数据来提高安全性。RAID 1 被称为镜像,它不会提高写入性能,但读取性能可能会提高到每个磁盘性能的总和。另外,如果一个驱动器发生故障,则会使用第二个驱动器,发生故障的驱动器需要手动更换。更换后,RAID 控制器会将可工作的驱动器的内容复制到新驱动器上。
  • RAID 5:一种磁盘子系统,可通过计算奇偶校验数据来提高安全性和提高速度。RAID 5 通过跨三个或更多驱动器交错数据(条带化)来实现此目的。在单个驱动器发生故障时,后续读取可以从分布式奇偶校验计算出,从而不会丢失任何数据。
  • RAID 6:通过添加另一个奇偶校验块来扩展 RAID 5。此级别至少需要四个磁盘,并且可以在任何两个并发磁盘故障的情况下继续执行读/写操作。RAID 6 不会对读取操作造成性能损失,但由于与奇偶校验计算相关的开销,因此确实会对写入操作造成性能损失。
  • RAID 10:RAID 10 也称为 RAID 1 + 0,它结合了磁盘镜像和磁盘条带化功能来保护数据。它至少需要四个磁盘,并且跨镜像对对数据进行条带化。只要每个镜像对中的一个磁盘起作用,就可以检索数据。如果同一镜像对中的两个磁盘发生故障,则所有数据将丢失,因为带区集中没有奇偶校验。(引文

7、ping 命令使用哪个端口?

ping 命令使用 ICMP。具体来说,它使用 ICMP 回显请求和应答包。

ICMP 不使用 UDP 或 TCP 通信服务:相反,它使用原始的 IP 通信服务。这意味着,ICMP 消息直接承载在 IP 数据报数据字段中。

8、路由器和网关之间有什么区别?什么是默认网关?

路由器描述的是一种通用技术功能(第 3 层转发)或用于该目的的硬件设备,而网关描述的是本地网段的功能(提供到其他地方的连接性)。你还可以说“将路由器设置为网关”。另一个术语是“跳”,它描述了子网之间的转发。

术语默认网关表示局域网上的路由器,它的责任是作为对局域网外部的计算机通信的第一个联系点。

9、解释一下 Linux 的引导过程。

BIOS -> 主引导记录(MBR) -> GRUB -> 内核 -> 初始化 -> 运行级

10、服务器启动时如何检查错误消息?

内核消息始终存储在 kmsg 缓冲区中,可通过 dmesg 命令查看。

引导出现的问题和错误要求系统管理员结合某些特定命令来查看某些重要文件,这些文件不同版本的 Linux 处理方式不同:

  • /var/log/boot.log 是系统引导日志,其中包含系统引导过程中展开的所有内容。
  • /var/log/messages 存储全局系统消息,包括系统引导期间记录的消息。
  • /var/log/dmesg 包含内核环形缓冲区信息。

11、符号链接和硬链接有什么区别?

符号链接软链接)实际是到原始文件的链接,而硬链接是原始文件的镜像副本。如果删除原始文件,则该软链接就没有用了,因为它指向的文件不存在了。如果是硬链接,则完全相反。如果删除原始文件,则硬链接仍然包含原始文件中的数据。(引文

12、如何更改内核参数?你可能需要调整哪些内核选项?

要在类 Unix 系统中设置内核参数,请首先编辑文件 /etc/sysctl.conf。进行更改后,保存文件并运行 sysctl -p 命令。此命令使更改永久生效,而无需重新启动计算机

13、解释一下 /proc 文件系统。

/proc 文件系统是虚拟的,并提供有关内核、硬件和正在运行的进程的详细信息。由于 /proc 包含虚拟文件,因此称为“虚拟文件系统”。这些虚拟文件具有独特性。其中大多数显示为零字节。

虚拟文件,例如 /proc/interrupts/proc/meminfo/proc/mounts/proc/partitions,提供了系统硬件的最新信息。其他诸如 /proc/filesystems/proc/sys 目录提供系统配置信息和接口。

14、如何在没有密码的情况下以其他用户身份运行脚本?

例如,如果你可以编辑 sudoers 文件(例如 /private/etc/sudoers),则可以使用 visudo 添加以下内容

user1 ALL =(user2)NOPASSWD:/opt/scripts/bin/generate.sh

15、什么是 UID 0 toor 帐户?是被入侵了么?

toor 用户是备用的超级用户帐户,其中 toorroot 反向拼写。它预期与非标准 shell 一起使用,因此 root 的默认 shell 不需要更改。

此用途很重要。这些 shell 不是基本发行版的一部分,而是从 ports 或软件包安装的,它们安装在 /usr/local/bin 中,默认情况下,位于其他文件系统上。如果 root 的 shell 位于 /usr/local/bin 中,并且未挂载包含 /usr/local/bin 的文件系统,则 root 无法登录以解决问题,并且系统管理员必须重新启动进入单用户模式来输入 shell 程序的路径。

更难的问题

这是你可能会遇到的甚至更困难的问题:

16、tracert 如何工作,使用什么协议?

命令 tracert(或 traceroute,具体取决于操作系统)使你可以准确地看到在连接到最终目的地的连接链条中所触及的路由器。如果你遇到无法连接或无法 ping 通最终目的地的问题,则可以使用 tracert 来帮助你确定连接链在何处停止。(引文

通过此信息,你可以联系正确的人;无论是你自己的防火墙、ISP、目的地的 ISP 还是中间的某个位置。 tracert 命令像 ping 一样使用 ICMP 协议,但也可以使用 TCP 三步握手的第一步来发送 SYN 请求以进行响应。

17、使用 chroot 的主要优点是什么?我们何时以及为什么使用它?在 chroot 环境中,mount /devmount /procmount /sys 命令的作用是什么?

chroot 环境的优点是文件系统与物理主机是隔离的,因为 chroot 在文件系统内部有一个单独的文件系统。区别在于 chroot 使用新创建的根目录(/)作为其根目录。

chroot 监狱可让你将进程及其子进程与系统其余部分隔离。它仅应用于不以 root 身份运行的进程,因为 root 用户可以轻松地脱离监狱。

该思路是创建一个目录树,在其中复制或链接运行该进程所需的所有系统文件。然后,你可以使用 chroot() 系统调用来告诉它根目录现在位于此新树的基点上,然后启动在该 chroot 环境中运行的进程。由于该命令因此而无法引用修改后的根目录之外的路径,因此它无法在这些位置上执行恶意操作(读取、写入等)。(引文

18、如何保护你的系统免遭黑客攻击?

遵循最低特权原则和这些做法:

  • 使用公钥加密,它可提供出色的安全性。
  • 增强密码复杂性。
  • 了解为什么要对上述规则设置例外。
  • 定期检查你的例外情况。
  • 让具体的人对失败负责。(它使你保持警惕。)(引文

19、什么是 LVM,使用 LVM 有什么好处?

LVM(逻辑卷管理)是一种存储设备管理技术,该技术使用户能够合并和抽象化组件存储设备的物理布局,从而可以更轻松、灵活地进行管理。使用设备映射器的 Linux 内核框架,当前迭代(LVM2)可用于将现有存储设备收集到组中,并根据需要从组合的空间分配逻辑单元。

20、什么是粘性端口?

粘性端口是网络管理员最好的朋友,也是最头痛的事情之一。它们允许你设置网络,以便通过将交换机上的每个端口锁定到特定的 MAC 地址,仅允许一台(或你指定的数字)计算机在该端口上进行连接。

21、解释一下端口转发?

尝试与安全的网络内部的系统进行通信时,从外部进行通信可能非常困难,这是很显然的。因此,在路由器本身或其他连接管理设备中使用端口转发表可以使特定流量自动转发到特定目的地。例如,如果你的网络上运行着一台 Web 服务器,并且想从外部授予对该服务器的访问权限,则可以将端口转发设置为该服务器上的端口 80。这意味着在 Web 浏览器中输入你的(外网)IP 地址的任何人都将立即连接到该服务器的网站。

请注意,通常不建议允许从你的网络外部直接访问服务器。

22、对于 IDS,误报和漏报是什么?

当入侵检测系统(IDS)设备为实际上没有发生的入侵生成警报时,这是 误报(假阳性) false positive 。如果设备未生成任何警报,而入侵实际上已发生,则为 漏报(假阴性)

23、解释一下 :(){ :|:& };:,如果已经登录系统,如何停止此代码?

这是一枚复刻炸弹。它分解如下:

  • :() 定义了函数,以 : 作为函数名,并且空括号表示它不接受任何参数。
  • {} 是函数定义的开始和结束。
  • :|: 将函数 : 的副本加载到内存中,并将其输出通过管道传递给函数 : 的另一个副本,该副本也必须加载到内存中。
  • 使前一个命令行成为后台进程,因此即使父进程被自动杀死,子进程也不会被杀死。
  • : 执行该函数,因此连锁反应开始。

保护多用户系统的最佳方法是使用特权访问管理(PAM)来限制用户可以使用的进程数。

复刻炸弹的最大问题是它发起了太多进程。因此,如果你已经登录系统,我们有两种尝试解决此问题的方法。一种选择是执行一个 SIGSTOP 命令来停止进程,例如:

killall -STOP -u user1

如果由于占用了所有进程而无法使用命令行,则必须使用 exec 强制其运行:

exec killall -STOP -u user1

对于复刻炸弹,最好的选择是防患于未然。

24、什么是 OOM 杀手,它如何决定首先杀死哪个进程?

如果内存被进程彻底耗尽,可能会威胁到系统的稳定性,那么 内存不足 out of memory (OOM)杀手就登场了。

OOM 杀手首先必须选择要杀死的最佳进程。最佳在这里指的是在被杀死时将释放最大内存的进程,并且对系统来说最不重要。主要目标是杀死最少数量的进程,以最大程度地减少造成的损害,同时最大化释放的内存量。

为了实现此目标,内核为每个进程维护一个 oom_score。你可以在 /proc 文件系统中的 pid 目录下的看到每个进程的 oom_score

$ cat /proc/10292/oom_score

任何进程的 oom_score 值越高,在内存不足的情况下被 OOM 杀手杀死的可能性就越高。(引文

总结

系统管理人员的薪水差别很大,有些网站上说年薪在 70,000 到 100,000 美元之间,具体取决于地点、组织的规模以及你的教育水平以及多年的工作经验。系统管理的职业道路最终归结为你对使用服务器和解决那些酷问题的兴趣。现在,我要说,继续前进,实现你的梦想之路吧!


via: https://opensource.com/article/19/7/sysadmin-job-interview-questions

作者:DirectedSoul 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过获得这些起码的能力,开始你的系统管理员职业。

昔日的系统管理员整天都在调教用户和摆弄服务器,一天的时间都奔波在几百米长的电缆之间。随着云计算、容器和虚拟机的复杂性的增加,而今依然如此。

以外行人来看,很难准确确定系统管理员的确切职能,因为他们在许多地方都扮演着一个不起眼的角色。没人能在培训中知道自己工作中所需要的一切知识,但是每个人其实都需要一个坚实的基础。如果你想走上系统管理的道路,那么这是你个人自学或在正式培训中应重点关注的内容。

Bash

当你学习 Bash Shell 时,你学习的不仅是 Bash Shell,你学习的也是 Linux、BSD、MacOS 甚至Windows(在适当条件下)的通用界面。你将了解语法的重要性,因此可以快速适应思科路由器的命令行或微软 PowerShell 等系统,最终你甚至可以学习更强大的语言,如 Python 或 Go。而且,你还会开始进行程序性思考,以便可以分析复杂的问题并将其分解为单个组件,这很关键,因为这就是系统(例如互联网、组织的内部网、Web 服务器、备份解决方案)是如何设计的。

不止于此,还有更多。

由于最近 DevOps 和容器的发展趋势,了解 Bash shell 变得尤为重要。你的系统管理员职业可能会将你带入一个视基础设施为代码的世界,这通常意味着你必须了解脚本编写的基础知识、基于 YAML配置的结构,以及如何与容器(运行在沙盒文件内部的微型 Linux 系统)交互。你会知道 Bash 是高效管理激动人心的开源技术的门户,因此请进入 Bash 世界吧。

资源

有很多方法可以在 Bash shell 中进行练习。

尝试一下便携式 Linux 发行版。你无需安装 Linux 即可使用 Linux,因此,请拿一块闲置的 U 盘,花个晚上或周末的空闲时光,来适应基于文本的界面。

这里有几篇很棒的 Bash 文章

要注意的是 Bash 练习的关键在于要练习,你必须有要做的练习才行。而且,在你知道如何使用 Bash 之前,你可能不知道该练习什么。如果是这样,请去 Over The Wire 玩一下 Bandit 游戏。这是一款针对绝对初学者的游戏,具有 34 个级别的交互式基本技巧,可让你熟悉 Linux shell。

Web 服务器设置

一旦你习惯了 Bash,你应该尝试设置一个 Web 服务器。并不是所有的系统管理员都会四处设置 Web 服务器甚至维护 Web 服务器,但是你在安装和启动 HTTP 守护程序、配置 Apache 或 Nginx,设置正确权限配置防火墙时所掌握的技能是你每天都需要使用的技能。经过一些努力,你可能会开始注意到自己的某些工作模式。在尝试管理可用于生产环境的软件和硬件之前,你可能认为某些概念是理所当然的,而你在成为新手的管理员角色时,将不再受到它们的影响。起初这可能会令人沮丧,因为每个人都喜欢在自己做好所做的事情,但这实际上是一件好事。让自己接触新技能,那就是你学习的方式。

此外,你在第一步中付出的努力越多,最终当你在默认的 index.html 上看到胜利的“it works!”就越甜蜜!

资源

David Both 撰写了有关 Apache Web 服务器配置的出色文章。值得一提的是,请逐步阅读他的后续文章,其中介绍了如何在一台计算机上托管多个站点

DHCP

动态主机配置协议(DHCP)是为网络上的设备分配 IP 地址的系统。在家里,ISP(互联网服务提供商)支持的调制解调器或路由器可能内置了 DHCP 服务器,因此可能不在你的权限范围内。如果你曾经登录家用路由器来调整 IP 地址范围或为某些网络设备设置了静态地址,那么你至少对该概念有所了解。你可能会将其理解为对网络上的设备分配了一种 IP 地址形式的电话号码,并且你可能会意识到计算机之间通过广播发送到特定 IP 地址的消息彼此进行通信。消息标头由路径上的路由器读取,每个消息标头都将消息定向到路径上的第二个逻辑路由器,以达到其最终目标。

即使你了解了这些概念,要从对 DHCP 的基本了解再进一步是架设 DHCP 服务器。安装和配置自己的 DHCP 服务器可能会导致家庭网络中的 DHCP 冲突(如果可以的话,请尽量避免这样做,因为它肯定会干掉你的网络,直到解决为止),要控制地址的分配、创建子网,并监控连接和租赁时间。

更重要的是,设置 DHCP 并尝试不同的配置有助于你了解网络之间的关系。你会了解网络如何在数据传输中表示“分区”,以及必须采取哪些步骤才能将信息从一个网络传递到另一个。这对于系统管理员来说至关重要,因为网络肯定是工作中最重要的方面之一。

资源

在运行自己的 DHCP 服务器之前,请确保家庭路由器(如果有)中的 DHCP 服务器处于非活动状态。一旦启动并运行了 DHCP 服务器,请阅读 Archit Modi 的网络命令指南,以获取有关如何探索网络的提示。

网络电缆

这听起来很普通,但是熟悉网络电缆的工作方式不仅使你的周末变得非常有趣,而且还使你对数据是如何通过缆线的得到了全新的了解。最好的学习方法是去当地的业余爱好商店并购买五类线剥线钳和压线钳以及一些五类线水晶头。然后回家,拿一根备用的以太网电缆,切断水晶头,花一些时间重新制作网线接头,将电缆重新投入使用。

解决了这个难题后,请再做一次,这次创建一条有效的交叉电缆

你现在应该还在沉迷于有关电缆管理。如果你有些强迫症,喜欢沿着地板线或桌子的边缘整齐地排列电缆,或者将电缆绑在一起以保持它们的整齐有序,那么就可以使自己免受永久混乱的电缆困扰。你一开始可能不会理解这样做的必要性,但是当你第一次走进服务器机房时,你会马上知道原因。

Ansible

Ansible 是配置管理软件,它在系统管理员和 DevOps 之间架起了一座桥梁。系统管理员使用 Ansible 来配置全新安装的操作系统并在计算机上维护特定的状态。DevOps 使用 Ansible 减少了在工具上花费的时间和精力,从而在开发上可以花费更多的时间和精力。作为系统管理员培训的一部分,你应该学习 Ansible,并着眼于 DevOps 实践,因为 DevOps 现在开创的大多数功能将最终成为将来系统管理中工作流的一部分。

Ansible 的好处是你可以立即开始使用它。它是跨平台的,并且可以向上和向下缩放。对于单用户计算机, Ansible 可能是小题大做,但是话又说回来,Ansible 可能会改变你启动虚拟机的方式,或者可以帮助你同步家庭或家庭实验室中所有计算机的状态。

资源

阅读 Jay LaCroix 的如何使用 Ansible 管理工作站配置中的典型介绍,以轻松地在日常之中开始使用 Ansible。

破坏

由于用户的错误、软件的错误、管理员(就是你!)的错误以及许多其他因素,计算机上会出现问题。无法预测将要失败的原因,因此你的个人系统管理员培训制度的一部分应该是破坏你设置的系统,直到它们失败为止。你自己的实验室基础设施越是脆弱,发现弱点的可能性就越大。而且,你越是经常修复这些弱点,你对解决问题的能力就越有信心。

除了严格设置所有常见的软件和硬件之外,作为系统管理员的主要工作是查找解决方案。有时候,你可能会遇到职位描述之外的问题,甚至可能无法解决,但这完全取决于你的解决方法。

现在,你越多地折腾并努力加以解决,则以系统管理员的身份进行的准备就越充分。

你是系统管理员吗?你是否希望自己为更好的任务做好准备?在下面的评论中写下它们!


via: https://opensource.com/article/19/7/be-a-sysadmin

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我通常会严格保持此博客的技术性,将观察、意见等内容保持在最低限度。但是,这篇和接下来的几篇文章将介绍刚进入系统管理/SRE/系统工程师/sysops/devops-ops(无论你想称自己是什么)角色的常见的基础知识。

请跟我来!

“我的网站很慢!”

我只是随机选择了本文的问题类型,这也可以应用于任何与系统管理员相关的故障排除。我并不是要炫耀那些可以发现最多的信息的最聪明的“金句”。它也不是一个详尽的、一步步指导的、并在最后一个方框中导向“利润”一词的“流程图”。

我会通过一些例子展示常规的方法。

示例场景仅用于说明本文目的。它们有时会做一些不适用于所有情况的假设,而且肯定会有很多读者在某些时候说“哦,但我觉得你会发现……”。

但那可能会让我们错失重点。

十多年来,我一直在从事于支持工作,或在支持机构工作,有一件事让我一次又一次地感到震惊,这促使我写下了这篇文章。

有许多技术人员在遇到问题时的本能反应,就是不管三七二十一去尝试可能的解决方案。

“我的网站很慢,所以”,

  • 我将尝试增大 MaxClients/MaxRequestWorkers/worker_connections
  • 我将尝试提升 innodb_buffer_pool_size/effective_cache_size
  • 我打算尝试启用 mod_gzip(遗憾的是,这是真实的故事)

“我曾经看过这个问题,它是因为某种原因造成的 —— 所以我估计还是这个原因,它应该能解决这个问题。”

这浪费了很多时间,并会让你在黑暗中盲目乱撞,胡乱鼓捣。

你的 InnoDB 的缓冲池也许达到 100% 的利用率,但这可能只是因为有人运行了一段时间的一次性大型报告导致的。如果没有排除这种情况,那你就是在浪费时间。

开始之前

在这里,我应该说明一下,虽然这些建议同样适用于许多角色,但我是从一般的支持系统管理员的角度来撰写的。在一个成熟的内部组织中,或与规模较大的、规范管理的或“企业级”客户合作时,你通常会对一切都进行检测、测量、绘制、整理(甚至不是文字),并发出警报。那么你的方法也往往会有所不同。让我们在这里先忽略这种情况。

如果你没有这种东西,那就随意了。

澄清问题

首先确定实际上是什么问题。“慢”可以是多种形式的。是收到第一个字节的时间吗?从糟糕的 Javascript 加载和每页加载要拉取 15 MB 的静态内容,这是一个完全不同类型的问题。是慢,还是比通常慢?这是两个非常不同的解决方案!

在你着手做某事之前,确保你知道实际报告和遇到的问题。找到问题的根源通常很困难,但即便找不到也必须找到问题本身。

否则,这相当于系统管理员带着一把刀去参加枪战。

唾手可得

首次登录可疑服务器时,你可以查找一些常见的嫌疑对象。事实上,你应该这样做!每当我登录到服务器时,我都会发出一些命令来快速检查一些事情:我们是否发生了页交换(free / vmstat),磁盘是否繁忙(top / iostat / iotop),是否有丢包(netstat / proc/net/dev),是否处于连接数过多的状态(netstat),有什么东西占用了 CPU(top),谁在这个服务器上(w / who),syslog 和 dmesg 中是否有引人注目的消息?

如果你从 RAID 控制器得到 2000 条抱怨直写式缓存没有生效的消息,那么继续进行是没有意义的。

这用不了半分钟。如果什么都没有引起你的注意 —— 那么继续。

重现问题

如果某处确实存在问题,并且找不到唾手可得的信息。

那么采取所有步骤来尝试重现问题。当你可以重现该问题时,你就可以观察它。当你能观察到时,你就可以解决。如果在第一步中尚未显现出或覆盖了问题所在,询问报告问题的人需要采取哪些确切步骤来重现问题。

对于由太阳耀斑或只能运行在 OS/2 上的客户端引起的问题,重现并不总是可行的。但你的第一个停靠港应该是至少尝试一下!在一开始,你所知道的是“某人认为他们的网站很慢”。对于那些人,他们可能还在用他们的 GPRS 手机,也可能正在安装 Windows 更新。你在这里挖掘得再深也是浪费时间。

尝试重现!

检查日志

我对于有必要包括这一点感到很难过。但是我曾经看到有人在运行 tail /var/log/... 之后几分钟就不看了。大多数 *NIX 工具都特别喜欢记录日志。任何明显的错误都会在大多数应用程序日志中显得非常突出。检查一下。

缩小范围

如果没有明显的问题,但你可以重现所报告的问题,那也很棒。所以,你现在知道网站是慢的。现在你已经把范围缩小到:浏览器的渲染/错误、应用程序代码、DNS 基础设施、路由器、防火墙、网卡(所有的)、以太网电缆、负载均衡器、数据库、缓存层、会话存储、Web 服务器软件、应用程序服务器、内存、CPU、RAID 卡、磁盘等等。

根据设置添加一些其他可能的罪魁祸首。它们也可能是 SAN,也不要忘记硬件 WAF!以及…… 你明白我的意思。

如果问题是接收到第一个字节的时间,你当然会开始对 Web 服务器去应用上已知的修复程序,就是它响应缓慢,你也觉得几乎就是它,对吧?但是你错了!

你要回去尝试重现这个问题。只是这一次,你要试图消除尽可能多的潜在问题来源。

你可以非常轻松地消除绝大多数可能的罪魁祸首:你能从服务器本地重现问题吗?恭喜,你刚刚节省了自己必须尝试修复 BGP 路由的时间。

如果不能,请尝试使用同一网络上的其他计算机。如果可以的话,至少你可以将防火墙移到你的嫌疑人名单上,(但是要注意一下那个交换机!)

是所有的连接都很慢吗?虽然服务器是 Web 服务器,但并不意味着你不应该尝试使用其他类型的服务进行重现问题。netcat 在这些场景中非常有用(但是你的 SSH 连接可能会一直有延迟,这可以作为线索)! 如果这也很慢,你至少知道你很可能遇到了网络问题,可以忽略掉整个 Web 软件及其所有组件的问题。用这个知识(我不收 200 美元)再次从顶部开始,按你的方式由内到外地进行!

即使你可以在本地复现 —— 仍然有很多“因素”留下。让我们排除一些变量。你能用普通文件重现它吗? 如果 i_am_a_1kb_file.html 很慢,你就知道它不是数据库、缓存层或 OS 以外的任何东西和 Web 服务器本身的问题。

你能用一个需要解释或执行的 hello_world.(py|php|js|rb..) 文件重现问题吗?如果可以的话,你已经大大缩小了范围,你可以专注于少数事情。如果 hello_world 可以马上工作,你仍然学到了很多东西!你知道了没有任何明显的资源限制、任何满的队列或在任何地方卡住的 IPC 调用,所以这是应用程序正在做的事情或它正在与之通信的事情。

所有页面都慢吗?或者只是从第三方加载“实时分数数据”的页面慢?

这可以归结为:你仍然可以重现这个问题所涉及的最少量的“因素”是什么?

我们的示例是一个缓慢的网站,但这同样适用于几乎所有问题。邮件投递?你能在本地投递吗?能发给自己吗?能发给<常见的服务提供者>吗?使用小的、纯文本的消息进行测试。尝试直到遇到 2MB 拥堵时。使用 STARTTLS 和不使用 STARTTLS 呢?按你的方式由内到外地进行!

这些步骤中的每一步都只需要几秒钟,远远快于实施大多数“可能的”修复方案。

隔离观察

到目前为止,当你去除特定组件时无法重现问题时,你可能已经偶然发现了问题所在。

但如果你还没有,或者你仍然不知道为什么:一旦你找到了一种方法来重现问题,你和问题之间的“东西”(某个技术术语)最少,那么就该开始隔离和观察了。

请记住,许多服务可以在前台运行和/或启用调试。对于某些类别的问题,执行此操作通常非常有帮助。

这也是你的传统武器库发挥作用的地方。stracelsofnetstatGDBiotopvalgrind、语言分析器(cProfile、xdebug、ruby-prof ……)那些类型的工具。

一旦你走到这一步,你就很少能摆脱剖析器或调试器了。

strace 通常是一个非常好的起点。

你可能会注意到应用程序停留在某个连接到端口 3306 的套接字文件描述符上的特定 read() 调用上。你会知道该怎么做。

转到 MySQL 并再次从顶部开始。显而易见:“等待某某锁”、死锁、max_connections ……进而:是所有查询?还是只写请求?只有某些表?还是只有某些存储引擎?等等……

你可能会注意到调用外部 API 资源的 connect() 需要五秒钟才能完成,甚至超时。你会知道该怎么做。

你可能会注意到,在同一对文件中有 1000 个调用 fstat()open() 作为循环依赖的一部分。你会知道该怎么做。

它可能不是那些特别的东西,但我保证,你会发现一些东西。

如果你只是从这一部分学到一点,那也不错;学习使用 strace 吧!真的学习它,阅读整个手册页。甚至不要跳过历史部分。man 每个你还不知道它做了什么的系统调用。98% 的故障排除会话以 strace 而终结。


via: http://northernmost.org/blog/troubleshooting-101/index.html

作者:Erik Ljungstrom 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我们是聪明地工作,而不是刻苦工作,但仍能把工作做好。

Linux 的系统管理员的工作总是复杂的,并且总是伴随着各种陷阱和障碍。做每件事都没有足够时间,当你想完成那个半秃头老板(PHB)给的任务时,他(只会)不停在你的后面盯着,而最核心的服务器总是在最不合时宜的时间点崩溃,问题和挑战比比皆是。而我发现,成为一名 懒惰的系统管理员 Lazy SysAdmin 可以解决这一困境。

(LCTT 译注: 半秃头老板 Pointy-Haired Boss (PHB),那是呆伯特漫画中的角色,缺乏一般知识常识及其职位所应具有的管理能力,爱说大话且富有向物理显示挑战的精神,大概长成下图这样。)

我在即将在 Apress 出版的新书 《The Linux Philosophy for SysAdmins》(LCTT 译注:暂译《系统管理员的 Linux 哲学》)中更详细地讨论如何成为一个懒惰的系统管理员,那书预计会在 9 月出版(LCTT 译注:已于 2018 年 8 月出版)。这本的部分内容摘录自该书,特别是第九章,“成为一名懒惰的系统管理员”。在我们讨论如何做到这点前,让我们简单了解一下成为一个名懒惰的系统管理员意味着什么。

真实生产力 vs. 虚假生产力

虚假生产力

在我工作的地方,半秃头老板相信的管理风格叫“ 走动式管理 management by walking around ”。通过判断某人在不在他的键盘上输入东西,或者至少要看看他们显示器上显示的东西,来判断他们的工作是否有效率。这是一个糟糕的工作场所。各部门间有道很高的行政墙,这会造就了许多的、微小的沟通壁垒,大量无用的文书工作,以及获得任何事情的许可都要等待漫长的时间。因为这样、那样的原因,不可能高效地做任何事情,如果真的是这样,那是非常低效。为了看起来很忙,我们都有自己的一套 “看起来很忙”的工具包 Look Busy Kits (LBK),可能是一些短小的、用来显示一些行为活动的 Bash 脚本,或者是 tophtopiotop 之类的程序,或者是一些持续显示某些行为活动的监控工具。这种工作场所的风气让人不可能真正高效,我讨厌这种地方,也讨厌那个几乎不可能完成任何有价值的事情的事实。

这种糟糕场所对真实的系统管理员来讲是场噩梦。没有人会感到快乐。在那里花费四五个月才能完成的事,在其他地方只需的一个早晨。我们没有什么实际工作要做,却要花大量的时间干活来让自己看起来很忙。我们在默默地竞赛,看谁能创造最好的“看起来很忙”的工具包,这就是我们花费最多时间的地方了。那份工作我只做了几个月,但好像已经耗费了一生。如果你看到的这个监狱的表面,你可能会说我们是很懒,因为我们只完成了几乎为 0 的实际工作。

这是个极端的例子,它完全与我所说的“我是一个懒惰的系统管理员”的意思相反,而做一个懒惰的系统管理是件好事。

真实生产力

我很幸运,曾为一些真正的管理者工作过 —— 他们明白,系统管理员的生产力并不是以每天花多少小时敲键盘来衡量。毕竟,即使一只猴子能敲击他们的键盘,但也不能说明结果的价值。

正如我书中所言:

“我是一个懒惰的系统管理员,同时我也是一个高效的系统管理员。这两者看似矛盾的说法不是相互排斥的,而是会以一种非常积极的方式相辅相成……

“系统管理员在思考的时候是最高效的 —— 思考关于如何解决现有问题和避免未来的问题;思考怎样监控 Linux 计算机,以便找到预测和预示这些未来的问题的线索;思考如何让他们的工作更有效率;思考如何自动化所有这些要执行的任务,无论是每天还是每年一次的任务。

“系统管理员冥思苦想的那一面是不会被非系统管理员所熟知的,那些人包括很多管理着系统管理员的人,比如那个半秃头老板。系统管理员都会以不同的方式解决他们工作中苦思的部分。一些我认识的系统管理员会在沙滩、骑自行车、参加马拉松或者攀岩时找到最好的想法。另一些人会认为静坐或听音乐的时候思考得最好。还有一些会在阅读小说、学习不相关的学科、甚至在学习 Linux 系统的时候可以最佳思考。关键是我们都有不同的方式激发我们的创造力,而这些创造力的推进器中很多并不涉及键盘上的任何一个按键。我们真正的生产力对于系统管理员周围的人来说可能是完全看不见的。”

成为懒惰的系统管理员有一些简单的秘诀 —— 系统管理员要完成一切需要完成的事,而且更多的是,当所有人都处于恐慌的状态时要保持冷静和镇定。秘诀的一部分是高效工作,另一部分是把预防问题放在首位。

成为懒惰系统管理员的方法

多思考

我相信关于懒惰系统管理员最重要的秘诀在于思考。正如上面的摘录所言,优秀的系统管理员会花大量的时候思考这些事情,如何更有效率地工作,在异常成为问题前如何定位,更聪明地工作,做其它事情的同时会考虑如何完成这些事情等等。

例如,除了撰写本文之外,我现在正在想一个项目,我打算在从亚马逊和本地计算机商店采购的新部件到达时才开始。我有一台不太关键的计算机上的主板坏了,最近它的崩溃更频率。但我的一台非常老的小服务器并没有出现故障,它负责处理我的电子邮件和外部网站,以及为我的网络的其余部分提供 DHCP 和 DNS 服务,但需要解决由于各种外部攻击而导致的间歇性过载。

我一开始想,我只要替换故障设备的主板及其直接部件:内存、CPU,可能还有电源。但是在考虑了一段时间之后,我决定将新部件放到服务器中,并将旧的(但仍然可用的)部件从服务器移到故障设备中。可以这样做的,只需一、两个小时就可以从服务器上移除旧部件并安装新的。然后我就可以花时间更换出故障的电脑里的部件了。太好了,所以我开始在脑海中列出要完成的任务。

然而,当我查看这个任务列表时,我意识到服务器中唯一不能替换的部件是机箱和硬盘驱动器,这两台计算机的机箱几乎完全相同。在有了这个小小的发现之后,我开始考虑用新的部件替换出了故障的计算机的部件,并将之作为我的服务器。经过一些测试之后,我只需从当前的服务器移除硬盘,并将它安装到用了新组件的机箱中,改下网络配置项,再更改 KVM 交换机端口上的主机名,并更改机箱上的主机名标签,就可以了。这将大大减少服务器停机时间,大大减少我的压力。此外,如果出现故障,我可以简单地将硬盘移回原来的服务器,直到我可以用新服务器解决问题为止。

所以,现在我在脑海中已经创建了一个完成这项工作我所需要做的任务清单。而且,我希望你能仔细观察,当我脑子里想着这一切的时候,我的手指从来没有碰过键盘。我新的心理行动计划风险很低,与我最初的计划相比,涉及的服务器停机时间要少得多。

当我在 IBM 工作的时候,我经常看到很多语言中都有写着“思考”的标语。思考可以节省时间和压力,是懒散的系统管理员的主要标志。

做预防性维护

在 1970 年代中期,我被 IBM 聘为客户工程师,我的领地由相当多的穿孔卡片设备组成。这也就是说,它们是处理打孔卡的重型机械设备,其中一些可以追溯到 20 世纪 30 年代。因为这些机器主要是机械的,所以它们的部件经常磨损或失调。我的部分工作是在它们损坏时修复它们。我工作的主要部分,也是最重要的部分,是首先要防止它们损坏。预防性维护的目的是在磨损部件损坏之前进行更换,并对还在运行的部件进行润滑和调整,以确保它们工作正常。

正如我在《系统管理员的 Linux 哲学》中所言:

“我在 IBM 的经理们明白这只是冰山一角;他们和我都知道,我的工作是让顾客满意。虽然这通常意味着修复损坏的硬件,但也意味着减少硬件损坏的次数。这对客户来说是好事,因为他们的机器在工作时工作效率更高。这对我有好处,因为我从那些快乐的客户那里接到的电话要少得多。我也睡了更多的觉,因为这样做的结果是更少的非工作时间的紧急电话。我是个懒惰的(客户工程师)。通过提前做额外的工作,从长远来看,我需要做的工作要少得多。

“这一原则已成为系统管理员的 Linux 哲学的功能原则之一。作为系统管理员,我们的时间最好用在最大限度地减少未来工作量的任务上。”

在 Linux 计算机中查找要解决的问题相当于项目管理。我检查系统日志,寻找以后可能会变得非常危险的问题的迹象。如果出现了一些小问题,或者我注意到我的工作站、服务器没有做出该有的响应,或者如果日志显示了一些不寻常的东西,所有这些都可以暗示出潜在的问题,而对于用户或半秃头老板来说,这些问题并没有产生明显的症状。

我经常检查 /var/log/ 中的文件,特别是 messagessecurity 文件。我最常见的问题之一是许多脚本小子在我的防火墙系统上尝试各种类型的攻击。而且,不,我不依赖 ISP 提供的调制解调器/路由器中的所谓的防火墙。这些日志包含了大量关于企图攻击来源的信息,非常有价值。但是要扫描不同主机上的日志并将解决方案部署到位,需要做大量的工作,所以我转向自动化。

自动化

我发现我的工作有很大一部分可以通过某种形式的自动化来完成。系统管理员的 Linux 哲学的原则之一是 “自动化一切”,这包括每天扫描日志文件等枯燥乏味的任务。

像是 Logwatch 这类的程序能够监控你的日志文件中的异常条目,并在异常条目发生时通知您。Logwatch 通常作为 cron 任务每天运行一次,并向本地主机上的 root 用户发送电子邮件。你可以从命令行运行 Logwatch,并立即在显示器上查看结果。现在我只需要每天查看 Logwatch 的电子邮件通知。

但现实是,仅仅收到通知是不够的,因为我们不能坐以待毙。有时需要立即作出反应。我喜欢的另一个程序是——它能为我做所有事(看,这就是懒惰的管理员)——它就是 Fail2ban。Fail2Ban 会扫描指定的日志文件,查找各种类型的黑客攻击和入侵尝试,如果它发现某个 IP 地址在持续做特定类型的活动,它会向防火墙添加一个条目,在指定的时间内阻止来自该 IP 地址的任何进一步的黑客尝试。默认值通常在 10 分钟左右,但我喜欢为大多数类型的攻击指定为 12 或 24 小时。每种类型的黑客攻击都是单独配置的,例如尝试通过 SSH 登录和那些 Web 服务器的攻击。

写脚本

自动化是这种哲学的关键组成部分之一。一切可以自动化的东西都应该自动化的,其余的尽可能地自动化。所以,我也写了很多脚本来解决问题,也就是说我编写了脚本来完成我的大部分工作。

我的脚本帮我节省了大量时间,因为它们包含执行特定任务的命令,这大大减少了我需要输入的数量。例如,我经常重新启动我的电子邮件服务器和垃圾邮件过滤软件(当修改 SpamAssassin 的 local.cf 配置文件时,就需要重启)。必须按特定顺序停止并重新启动这些服务。因此,我用几个命令编写了一个简短的脚本,并将其存储在可访问的 /usr/local/bin 中。现在,不用键入几个命令并等待每个命令都完成,然后再键入下一个命令,更不用记住正确的命令顺序和每个命令的正确语法,我输入一个三个字符的命令,其余的留给我的脚本来完成。

简化键入

另一种成为懒惰的系统管理员的方法是减少我们需要键入的数量。而且,我的打字技巧真的很糟糕(也就是说,我一点也没有,顶多是几个笨拙的手指)。导致错误的一个可能原因是我糟糕的打字技巧,所以我会尽量少打字。

绝大多数 GNU 和 Linux 核心实用程序都有非常短的名称。然而,它们都是有意义的名字。诸如用于更改目录的 cd 、用于列出目录内容的 ls 和用于磁盘转储的 dd 等工具都一目了然。短名字意味着更少的打字和更少的产生错误机会。我认为短的名字通常更容易记住。

当我编写 shell 脚本时,我喜欢保持名称简短而意义(至少对我来说是),比如用于 rsync 备份的 rsbu(LCTT 译注,Rsync Backup 的简写)。但在某些情况下,我喜欢使用更长的名称,比如 doUpdates 来执行系统更新。在后一种情况下,更长一点的名字让脚本的目的更明显。这可以节省时间,因为很容易记住脚本的名称。

其他减少键入的方法包括命令行别名、历史命令调回和编辑。别名只是你在 Bash shell 键入命令时才做的替换。键入 alias 命令会看到默认配置的别名列表。例如,当你输入命令 ls 时,会被条目 alias ls='ls –color=auto' 替成较长的命令,因此你只需键入 2 个字符而不是 14 个字符即可获得带有颜色的文件列表。还可以使用 alias 命令添加你自己定义的别名。

历史命令调回允许你使用键盘的向上和向下箭头键滚动浏览命令历史记录。如果需要再次使用相同的命令,只需在找到所需的命令时按回车键即可。如果在找到命令后需要更改该命令,则可以使用标准命令行编辑功能进行更改。

结束语

一名懒惰的系统管理员实际上也有很多的工作。但我们是聪明地工作,而不是刻苦工作。早在一堆小问题汇聚成大问题之前,我们就花时间探索我们负责的主机,并处理好所有的小问题。我们花了很多时间思考解决问题的最佳方法,我们也花了很多时间来发现新的方法,让自己更聪明地工作,成为懒惰的系统管理员。

除了这里描述的少数方法外,还有许多其他的方式可以成为懒惰的系统管理员。我相信你也有一些自己的方式;请在评论中和我们分享。


via: https://opensource.com/article/18/7/how-be-lazy-sysadmin

作者:David Both 选题:lujun9972 译者:zgj1024 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何在崩溃的局面中集中精力寻找解决方案。

如果你在 IT 领域工作,你知道事情永远不会像你想象的那样完好。在某些时候,你会遇到错误或出现问题,你最终必须解决问题。这就是系统管理员的工作。

作为人类,我们都会犯错误。我们不是已经犯错,就是即将犯错。结果,我们最终还必须解决自己的错误。总是这样。我们都会失误、敲错字母或犯错。

作为一名年轻的系统管理员,我艰难地学到了这一课。我犯了一个大错。但是多亏了上级的指导,我学会了不去纠缠于我的错误,而是制定一个“错误策略”来做正确的事情。从错误中吸取教训。克服它,继续前进。

我的第一份工作是一家小公司的 Unix 系统管理员。真的,我是一名生嫩的系统管理员,但我大部分时间都独自工作。我们是一个小型 IT 团队,只有我们三个人。我是 20 或 30 台 Unix 工作站和服务器的唯一系统管理员。另外两个支持 Windows 服务器和桌面。

任何阅读这篇文章的系统管理员都不会对此感到意外,作为一个不成熟的初级系统管理员,我最终在错误的目录中运行了 rm 命令——作为 root 用户。我以为我正在为我们的某个程序删除一些陈旧的缓存文件。相反,我错误地清除了 /etc 目录中的所有文件。糟糕。

我意识到犯了错误是看到了一条错误消息,“rm 无法删除某些子目录”。但缓存目录应该只包含文件!我立即停止了 rm 命令,看看我做了什么。然后我惊慌失措。一下子,无数个想法涌入了我的脑中。我刚刚销毁了一台重要的服务器吗?系统会怎么样?我会被解雇吗?

幸运的是,我运行的是 rm * 而不是 rm -rf *,因此我只删除了文件。子目录仍在那里。但这并没有让我感觉更好。

我立刻去找我的主管告诉她我做了什么。她看到我对自己的错误感到愚蠢,但这是我犯的。尽管紧迫,她花了几分钟时间跟我做了一些指导。 她说:“你不是第一个这样做的人,在你这种情况下,别人会怎么做?”这帮助我平静下来并专注。我开始更少考虑我刚刚做的愚蠢事情,而更多地考虑我接下来要做的事情。

我做了一个简单的策略:不要重启服务器。使用相同的系统作为模板,并重建 /etc 目录。

制定了行动计划后,剩下的就很容易了。只需运行正确的命令即可从另一台服务器复制 /etc 文件并编辑配置,使其与系统匹配。多亏了我对所有东西都做记录的习惯,我使用已有的文档进行最后的调整。我避免了完全恢复服务器,这意味着一个巨大的宕机事件。

可以肯定的是,我从这个错误中吸取了教训。在接下来作为系统管理员的日子中,我总是在运行任何命令之前确认我所在的目录。

我还学习了构建“错误策略”的价值。当事情出错时,恐慌并思考接下来可能发生的所有坏事是很自然的。这是人性。但是制定一个“错误策略”可以帮助我不再担心出了什么问题,而是专注于让事情变得更好。我仍然会想一下,但是知道我接下来的步骤可以让我“克服它”。


via: https://opensource.com/article/18/7/my-first-sysadmin-mistake

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出