11 Essential Linux Interview Questions *

最优秀的Linux开发人员和工程师可以回答的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

Hire a Top Linux Developer Now
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, and project managers in the world. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

What is a Unix shell? Is Bash the only Unix shell?

View answer

Unix shell是一种为底层操作系统提供用户界面的软件. Unix shell通常提供一个文本用户界面—命令行解释器—可用于输入和运行命令, 或者创建运行一系列命令的脚本,这些脚本可用于表达更高级的行为.

Bash不是唯一的Unix shell,而只是众多shell中的一种. 它是Bourne-Again Shell的缩写,也是众多bourne兼容Shell之一. 然而,Bash可以说是最流行的shell之一. There are other, 可用的现代shell通常保留了与Bash的向后兼容性,但提供了更多的功能和特性, such as the Z Shell (zsh).

2.

符号链接的目标路径存储在哪里? 如何处理符号链接的权限设置?

View answer

符号链接的目标路径存储在索引节点中,索引节点是用于在磁盘上存储文件信息的数据结构.

Typically, 符号链接本身的权限设置仅控制对符号链接本身执行的重命名和删除操作. 处理链接到的文件内容的任何操作都由目标文件的权限设置控制.

3.

How would you swap the stdout and stderr of a command?

View answer
$ command 3>&2 2>&1 1>&3

To swap stdout and stderr 对于命令,将创建第三个文件描述符(在本例中) 3),它被分配给与 stderr is pointed to (referenced by &2). Then stderr is pointed to the same target stdout is pointed to (&1). Finally, stdout 指向新创建的文件描述符所指向的位置(这是相同的目标 stderr originally pointed to.)

申请加入Toptal的发展网络

and enjoy reliable, steady, remote Freelance Linux Developer Jobs

Apply as a Freelancer
4.

如何计算当前目录下出现的所有文件中出现的术语“potato”的次数, and its subdirectories, recursively?

View answer
$ grep -orI potato . | wc -l

要在单独一行上列出“potato”这个词的每一次出现,必须运行 grep -o potato . Adding the r 标记的命令使搜索递归地处理给定路径下的每个文件,并且 I 标志确保忽略二进制文件中的匹配项. In addition, the w 标记只能用于匹配确切的术语, 忽略像“土豆”这样的超弦, and to make the search case-insensitive, the i flag can be added as well:

$ grep -iworI potato . | wc -l

The number of lines yielded by this grep Command是所需术语的出现次数, 然后将其倒入 wc -l command.

5.

如何编写一个shell脚本,以相反的顺序打印传递给它的所有附加参数?

View answer
for (( i = ${#}; i > 0; i-- )); do
        echo ${!i}
done

The arguments are available as $, where n is the position of the argument. For example, $0 would give the name of the script, $1 会给出第一个附加参数, $2 the second, and so on. 附加参数的总数见 $#.

A loop that starts at $# 以1结尾的And可以用来倒序打印每个附加参数.

6.

如何编写shell脚本并确保每个用户只能运行该脚本的一个实例? Strong atomicity is not required.

View answer

In Bash:

LOCKFILE=/tmp/lock-`whoami`
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
    echo "Already running!"
    exit 1
fi
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}

首先确定锁文件的名称. In this case, 锁文件是通过在通用名称后面加上当前用户的用户名来生成的.

然后,检查锁文件是否存在,以及锁文件中包含的PID是否正在运行. If it is, exit with a message.

创建一个陷阱,在干净出口或不干净出口(任何有信号的出口)上删除锁文件 INT or TERM).

Finally, if the script has not exited yet, create the lock file, 并存储当前进程的PID ($$) in it.

7.

什么是共享挂载点、从属挂载点、私有挂载点和不可绑定挂载点?

View answer

共享的挂载点可以根据需要复制多次, 每个副本都是一样的. 出现在某个子目录中的共享挂载点下的其他挂载点将原样出现在所有其他复制挂载点中.

从挂载点类似于共享挂载点,只是挂载点信息的“共享”发生在一个方向上. 从挂载点将只接收挂载和卸载事件. 在此复制挂载点下挂载的任何内容都不会移动到原始挂载点.

私有挂载点顾名思义:私有. 出现在私有挂载点下的挂载点不会显示在其他复制挂载点的其他地方,除非它们也显式地挂载在那里.

An unbindable mount point, which by definition is also private, 不能通过使用挂载系统调用或命令的绑定标志在其他地方复制.

8.

您会采取哪些基本措施来加固服务器的SSH服务?

View answer

可以采取一些非常简单的步骤来初始化SSH服务,例如:

  • 强制服务只使用协议的版本2将引入安全性和功能增强.
  • Disabling root login, and even password-based logins, 会进一步加强服务器的安全性吗.
  • The whitelist approach can be taken, 只有属于某个列表的用户才能通过SSH登录到服务器.
  • 禁用基于密码的登录将要求您允许基于密钥的登录, which is secure, 但可以通过限制仅从某些IP地址使用它们来更进一步.
  • 将端口更改为22以外的其他端口可以显著减少来自互联网的随机暴力破解尝试.

有时,在服务器上使用SSH服务可能只是在服务器之间传输文件(通常使用像 scp). 在这种情况下,可以将用户的shell更改为限制性的shell,例如 rssh.

最后,当您没有登录到服务器时,通常希望确切地知道发生了什么. 如果需要,可以增加日志记录的详细程度. Often, 正是这些日志允许人们弄清楚钥匙是否确实被盗了,是否被滥用了.

9.

What are terminal multiplexers? What are some of their key features? 目前有哪些比较流行的?

View answer

终端多路复用器允许从单个屏幕或从单个远程会话创建和控制多个终端. 终端和会话可以被分离并保持运行,即使用户注销.

目前最常见的两个是 GNU Screen and tmux.

Screen 使您能够连接到多个远程服务器,而无需打开多个终端shell. 可以保留工作并分离会话, for example, 等待长时间运行命令的输出. 在随后的重新连接中,用户可以重新连接到现有会话或运行新会话. 会话也可以在不同的用户之间共享, 哪些在审计或培训场景中可能有用.

Both Screen and tmux 支持分屏功能(更准确地说, tmux supports this and Screen supports it via a plugin). This allows, for example, runningtail 在屏幕一部分的服务日志文件上, 并编辑该服务的配置, and restarting it if necessary, in another.

10.

持续监视正在运行的服务的日志文件的简单方法是什么?

View answer

可能最简单和最常用的方法是使用命令:

tail -F $LOGFILE

where $LOGFILE 环境变量是否与要监控的日志文件路径对应.

By default, the Linux tail 命令将给定文件的最后10行打印到标准输出. The -F 选项会导致在文件继续增长时实时显示其他文件内容. 这产生了一种简单的机制,可以通过日志文件近乎实时地监视服务.

在这种情况下,另外两个相关的命令行选项是:

  • The -s option causes tail 在更新之间休眠指定的秒数.g., tail -F -s 10 将大约每10秒更新显示的文件内容,而不是在文件更新时接近实时).
  • The -n 选项可用于指定初始显示的行数,而不是10行.g., tail -n 20 -F 将首先显示文件的最后20行,然后继续实时更新输出).
11.

什么是Linux空(或黑洞)路由? 如何使用它来减少不需要的传入连接?

View answer

A Linux null (or Blackhole) route is a type of routing table entry which, upon matching a packet, 丢弃该报文,不再转发,也不发送ICMP报文.

Using this technique, 可以通过运行一个简单的命令来阻止一个IP(或IP地址范围). For example, blocking 192.168.0.1可以简单地用以下命令完成:

# ip route add blackhole 192.168.0.1/32 

面试不仅仅是棘手的技术问题, so these are intended merely as a guide. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

Tired of interviewing candidates? 不知道该问什么才能让你得到一份好工作?

Let Toptal find the best people for you.

Hire a Top Linux Developer Now

Our Exclusive Network of Linux Developers

希望找到一份Linux开发人员的工作?

Let Toptal find the right job for you.

Apply as a Linux Developer

Job Opportunities From Our Network

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, at the sole discretion of Toptal, LLC.

* All fields are required

Looking for Linux Developers?

Looking for Linux Developers? Check out Toptal’s Linux developers.

Lawrence Zhou

Freelance Linux Developer

United StatesToptal Member Since August 14, 2018

Lawrence是一名软件开发人员和定量分析师,在软件开发和定量建模方面拥有超过12年的经验. 他曾在花旗集团(Citigroup)、Traxis Partners工作,并与人共同创立了一家Y-Combinator投资的初创公司. Lawrence更喜欢同时运用他的财务和编程背景的项目, 但他也喜欢处理和分析数据——无论是在分析方面, visualization, or machine learning.

Show More

Julie Wetherbee

Freelance Linux Developer

United StatesToptal Member Since August 21, 2015

Julie在为各种规模的企业构建软件应用程序和领导工程团队方面拥有超过20年的经验. She has expertise in Java, JavaScript, C, C++, and Perl, 并且熟悉许多流行的框架. 最近,Julie为沃尔玛设计并实现了一个大规模的Oracle数据库分片解决方案.com.

Show More

Richard Kolkovich

Freelance Linux Developer

United StatesToptal Member Since August 10, 2015

理查德曾担任过从技术支持到联合创始人的各种职务. Over his career, Richard积累了深厚的技术理解以及对建立和发展成功企业的其他必要要素的广泛理解. 他丰富的经验和技术专长使他非常适合用技术解决业务问题.

Show More

Toptal Connects the Top 3% of Freelance Talent All Over The World.

Join the Toptal community.

Learn more