Linux面试经典题目(六)

💠 常规系统管理员

首选的 bash shebang 是什么,为什么?使用 ./scriptbash 脚本执行文件有什么区别?

为了便于移植,您应该使用:不同的 *nixes 将 bash 放在不同的地方,使用是一种解决方法,可以运行在 .#!/usr/bin/env bash/usr/bin/envPATH

Running 正是这样做的,并且需要对文件的 execute 权限,但与它的程序类型无关。它可能是一个 bash 脚本一个 sh 脚本,或者一个 PerlPythonawkexpect 脚本,或者一个实际的二进制可执行文件。运行 将强制它在 下运行,而不是在其他任何内容下运行。./scriptbash scriptsh

有用的资源:

您必须运行将执行很长时间的命令。如何防止在 ssh 会话丢弃后终止此进程?

用于使您的进程忽略挂断信号:nohup

nohup long-running-process &
exit

或者您想使用 GNU Screen

screen -d -m long-running-process
exit

有用的资源:

中间认证机构的主要目的是什么?

要了解中间 CA 的主要用途,您应该首先了解根 CA中间 CASSL 证书链信任

根 CA 是主 CA,通常不直接签署最终实体/服务器证书。他们颁发根证书,这些证书通常预装在所有浏览器、移动设备和应用程序中。这些证书的私钥用于签署其他后续证书,称为中间证书。根 CA 通常保持“脱机”状态,并处于高度安全的环境中,访问权限受到严格限制。

中间 CA 是按一个或多个级别从属于根 CA 的 CA,受这些 CA 信任以代表其签署证书。创建和使用中间 CA 的目的主要是为了安全,因为如果中间私钥被盗用,则根 CA 可以吊销中间证书并使用新的加密密钥对创建新证书。

SSL 证书链信任 是 SSL 证书的列表,从根证书到最终实体/服务器证书。要使 SSL 证书受信任,它必须由受信任的 CA 颁发,该 CA 包含在连接设备(浏览器、移动设备和应用程序)的受信任 CA 列表中。因此,连接设备将测试链信任中每个 SSL 证书的可信度,直到它与受信任的 CA 颁发的证书匹配。

根-中间 CA 结构由每个主要 CA 创建,以防止根密钥泄露的灾难性影响。如果根密钥泄露,它将使根证书和所有从属证书不可信。因此,创建中间 CA 是确保严格保护主根密钥的最佳实践。

有用的资源:

配置更改后如何重新加载 PostgreSQL?

解决方案 1:

systemctl reload postgresql

解决方案 2:

su - postgres
/usr/bin/pg_ctl reload

解决方案 3:

SELECT pg_reload_conf();
您已向 .profile 添加了多个别名。如何在不退出的情况下重新加载 shell?

最好的方法是因为用新进程替换当前进程。同样好的(但其他的)解决方案是 。exec $SHELL -lexec. ~/.profile

有用的资源:

如何在不保存 shell 历史记录的情况下退出?
kill -9 $$

unset HISTFILE && exit

有用的资源:

这个 UID 0 toor 账户是什么?我是否受到了威胁?

toor 是另一种超级用户帐户,其中 toor 是 root 倒写。它旨在与非标准 shell 一起使用,因此 root 的默认 shell 不需要更改。

这一点很重要,因为 shell 不是基本分发的一部分,而是从端口或软件包安装的,默认情况下,它们位于不同的文件系统上。如果 root 的 shell 位于 中,并且包含 ) 的文件系统未挂载,则 root 将无法登录以解决问题,并且必须重新启动到单用户模式才能进入 shell 的路径。/usr/local/bin/usr/local/bin/usr/local/bin

有些人使用非标准 shell 将 toor 用于日常 root 任务,将 root 与标准 shell 一起用于单用户模式或紧急情况。默认情况下,用户无法使用 toor 登录,因为它没有密码,因此请以 root 身份登录并在使用 toor 登录之前为 toor 设置密码。

有用的资源:

有没有一种简单的方法可以在复杂目录结构中的 1000 个文件中搜索以查找包含特定字符串的文件?

例如,使用 :fgrep

fgrep * -R "string"

或:

grep -insr "pattern" *
  • -i忽略 PATTERN 和 input 文件中的大小写区别
  • -n在其输入文件中,为每行输出添加从 1 开始的行号作为前缀
  • -s禁止显示有关不存在或不可读文件的错误消息。
  • -r递归读取每个目录下的所有文件。

有用的资源:

如何找出运行时加载的动态库可执行文件?

您可以使用 command 执行此操作:ldd

ldd /bin/ls
您的任务是同步测试环境和生产环境。您将采取哪些步骤?

很容易陷入关于克隆环境的 bikeshing,而错过了真正的重点:

  • 只有生产才是生产

每次部署时,您都会测试部署代码 + 软件 + 环境的独特组合。

每隔一段时间,一个好的解决方案是定期克隆生产服务器以创建测试服务器。您可以在带有快照的开发/测试下创建具有生产环境精确副本的实例,例如:

  • 生成生产快照
  • 将快照复制到暂存(或其他)
  • 使用此快照创建新磁盘

当然,您可以启动各种系统组件或整个系统的克隆,并捕获真实流量以离线重放(系统测试的黄金标准)。但许多系统太大、太复杂且成本高昂,无法克隆。

在环境同步之前,一种很好的方法是跟踪您对测试环境所做的每一次更改,并提供一种将其传播到生产环境的方法,这样您就不会跳过任何步骤并尽可能顺利地完成。

此外,从生产环境更新测试环境的 structure comparison tool 或 deploy scripts 也是一个很好的解决方案。

预同步任务

首先,通知开发人员和客户不要对测试环境进行更改(如果可能,请禁用针对此环境的测试域或设置包含同步信息的静态页面)。

对这两个环境进行备份/快照也很重要。

数据库服务器

  • 同步/更新系统版本(例如软件包)
  • 从生产数据库服务器上的数据库创建转储文件
  • 在测试 DB Server 上导入转储文件
  • 如有必要,同步登录权限、角色、数据库权限、打开的数据库连接和其他

Web/应用程序服务器

  • 同步/更新系统版本(例如软件包)
  • 如有必要,更新内核参数、防火墙规则和其他
  • 同步/更新所有正在运行/重要服务的配置文件
  • 同步/更新用户帐户(例如权限)及其主目录
  • 从 git/svn 存储库部署项目
  • 同步/更新项目中存在的重要目录,例如 staticasset 和其他
  • 项目目录的同步/更新权限
  • 删除/更新所有 Webhook
  • 更新 Cron 作业

其他任务

  • 更新了用于测试域和特定 URL 的负载均衡器配置
  • 更新了队列、会话和存储实例的配置

有用的资源:

网络问题
根据 HTTP 监视器,网站已关闭。您可以 telnet 到端口,那么如何解决它呢?

如果您可以 telnet 到该端口,则意味着侦听该端口的服务正在运行,您可以连接到它(这不是网络问题)。最好以这种方式检查域解析到的 IP 地址,并使用相同的域来测试连接。

首先,检查您的网站是否从其他位置在线。然后,它会让您知道该站点是否在所有位置都已关闭,或者是否只有您的网络无法查看它。检查 Web 浏览器返回的内容也是一个好主意。

如果只有 IP 连接有效

  • 您可以使用 whois 查看哪些 DNS 服务器为站点提供主机名:whois www.example.com
  • 您可以使用 OR 等工具测试 DNS 以查看主机名是否正在解析:dighosthost www.example.org dns.example.org
  • 您还可以检查全球公共 DNS 服务器:host www.example.com 9.9.9.9

如果域未解析,则可能是 DNS 服务器有问题。

如果域解析正确

  • 调查日志文件并解决与日志有关的问题,这是显示问题所在的最佳方式
  • 检查 http 状态代码,通常是带有 5xx 的响应,也许服务器过载是因为客户端与网站或特定 URL 建立了大量连接?也许您的缓存规则无法正常工作?
  • 检查 Web/代理服务器配置(例如),也许另一个系统管理员对域配置进行了一些更改?nginx -t -c </path/to/nginx.conf>
  • 也许服务器上的某些内容崩溃了?也许空间不足或内存不足?
  • 也许是网站上的编程错误?
解释 HTTP 1.1 和 HTTP 2.0 之间的区别。

HTTP/2 支持查询多路复用、标头压缩、优先级和更智能的数据包流管理。这样可以减少延迟并加快现代网页上的内容下载速度。

HTTP/1.1 的主要区别:

  • 它是二进制的,而不是文本的
  • 完全多路复用,而不是 ordered 和 blocking
  • 因此可以使用一个连接进行并行
  • 使用标头压缩来减少开销
  • 允许服务器主动将响应“推送”到客户端缓存中

有用的资源:

开发团队报告错误:POST http://ws.int/api/v1/Submit/ 导致 413 请求实体太大。怎么了?

修改域的 NGINX 配置文件

设置正确的变量值:client_max_body_size

client_max_body_size 20M;

重新启动 Nginx 以应用更改。

修改php.ini文件以进行上传限制

并非所有配置都需要它,但您可能还必须修改 PHP 上传设置,以确保 php 配置不会超出限制。

现在逐个找到以下指令:

upload_max_filesize
post_max_size

并将其限制增加到 20M,默认情况下它们是 8M 和 2M:

upload_max_filesize = 20M
post_max_size = 20M

最后保存并重新启动 PHP。

有用的资源:

什么是握手机制,为什么我们需要 3 次握手?

当一台设备向另一台设备发送消息,表明它想要建立通信通道时,手开始。然后,这两个设备来回发送多条消息,使它们能够就通信协议达成一致。

三次握手是 TCP/IP 网络中使用的一种在本地主机/客户端和服务器之间创建连接的方法。这是一个三步法,要求客户端和服务器在实际数据通信开始之前交换 (, , ) 数据包。SYNACKSYNSYN-ACKACK

有用的资源:

为什么 UDP 比 TCP 快?

UDPTCP 更快,原因很简单,因为它不存在允许连续数据包流的确认数据包 (),而不是使用 TCP 窗口大小和往返时间 () 计算的确认一组数据包的 TCP。ACKRTT

有用的资源:

什么是 NAT?它是做什么用的?

它允许使用未注册 IP 地址的专用 IP 网络连接到 Internet。NAT 在路由器上运行,通常将两个网络连接在一起,并在将数据包转发到另一个网络之前,将内部网络中的私有(非全局唯一)地址转换为合法地址。

可以使用 NAT 为需要在网络外部进行特殊访问的工作站或其他计算机分配特定的外部 IP,从而允许它们与需要唯一公共 IP 地址的计算机和应用程序进行通信。NAT 也是防火墙安全的一个非常重要的方面。

有用的资源:

生成树的目的是什么?

该协议在 OSI 模型的第 2 层运行,目的是防止网络上出现环路。如果没有 STP,冗余交换机部署将产生广播风暴,即使是最强大的网络也会瘫痪。基于原始 IEEE 802.1D 标准有几次迭代;每个 Loop 的运行方式与其他 Loop 略有不同,但在很大程度上实现了相同的无 Loop 目标。

如何检查我的 Linux Server 上正在侦听哪些端口?

使用:

  • lsof -i
  • ss -l
  • netstat -atn- 对于 TCP
  • netstat -aun- 对于 UDP
  • netstat -tulapn
连接到远程主机时,主机密钥验证失败是什么意思?你会自动接受吗?

Host key verification failed表示远程主机的 Host Key 已更改。如果连接到一台主机密钥已更改的计算机,并且该计算机在未复制其旧主机密钥的情况下进行了升级,则很容易发生这种情况。这里的主机密钥可以证明,当您使用 ssh 重新连接到远程计算机时,您正在与首次访问该计算机时连接的同一台计算机通信。/etc/ssh

每当您通过 SSH 连接到服务器时,该服务器的公钥都会存储在您的主目录(如果使用 Mac 或 Windows 桌面,则可能存储在您的本地帐户设置中)文件中,称为 known_hosts。当您重新连接到同一服务器时,SSH 连接将验证当前公钥是否与您保存在 known_hosts 文件中的公钥匹配。如果服务器的密钥自上次连接到服务器后发生更改,您将收到上述错误。

不要按照某些人的建议删除整个 known_hosts 文件,这完全使警告的意义无效。这是一项安全功能,用于警告您可能已经发生了中间人攻击。

在接受新的主机密钥之前,请联系您/其他系统管理员进行验证。

有用的资源:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰茶微苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值