11 Essential Linux Interview Questions *
最优秀的Linux开发人员和工程师可以回答的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.
Hire a Top Linux Developer NowInterview Questions
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).
符号链接的目标路径存储在索引节点中,索引节点是用于在磁盘上存储文件信息的数据结构.
Typically, 符号链接本身的权限设置仅控制对符号链接本身执行的重命名和删除操作. 处理链接到的文件内容的任何操作都由目标文件的权限设置控制.
$ 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
$ 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.
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可以用来倒序打印每个附加参数.
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.
共享的挂载点可以根据需要复制多次, 每个副本都是一样的. 出现在某个子目录中的共享挂载点下的其他挂载点将原样出现在所有其他复制挂载点中.
从挂载点类似于共享挂载点,只是挂载点信息的“共享”发生在一个方向上. 从挂载点将只接收挂载和卸载事件. 在此复制挂载点下挂载的任何内容都不会移动到原始挂载点.
私有挂载点顾名思义:私有. 出现在私有挂载点下的挂载点不会显示在其他复制挂载点的其他地方,除非它们也显式地挂载在那里.
An unbindable mount point, which by definition is also private, 不能通过使用挂载系统调用或命令的绑定标志在其他地方复制.
可以采取一些非常简单的步骤来初始化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, 正是这些日志允许人们弄清楚钥匙是否确实被盗了,是否被滥用了.
终端多路复用器允许从单个屏幕或从单个远程会话创建和控制多个终端. 终端和会话可以被分离并保持运行,即使用户注销.
目前最常见的两个是 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.
可能最简单和最常用的方法是使用命令:
tail -F $LOGFILE
where $LOGFILE
环境变量是否与要监控的日志文件路径对应.
By default, the Linux tail
命令将给定文件的最后10行打印到标准输出. The -F
选项会导致在文件继续增长时实时显示其他文件内容. 这产生了一种简单的机制,可以通过日志文件近乎实时地监视服务.
在这种情况下,另外两个相关的命令行选项是:
- The
-s
option causestail
在更新之间休眠指定的秒数.g.,tail -F -s 10
将大约每10秒更新显示的文件内容,而不是在文件更新时接近实时). - The
-n
选项可用于指定初始显示的行数,而不是10行.g.,tail -n 20 -F
将首先显示文件的最后20行,然后继续实时更新输出).
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 NowOur Exclusive Network of Linux Developers
希望找到一份Linux开发人员的工作?
Let Toptal find the right job for you.
Apply as a Linux DeveloperJob Opportunities From Our Network
Submit an interview question
提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, at the sole discretion of Toptal, LLC.
Looking for Linux Developers?
Looking for Linux Developers? Check out Toptal’s Linux developers.
Lawrence Zhou
Freelance Linux Developer
Lawrence是一名软件开发人员和定量分析师,在软件开发和定量建模方面拥有超过12年的经验. 他曾在花旗集团(Citigroup)、Traxis Partners工作,并与人共同创立了一家Y-Combinator投资的初创公司. Lawrence更喜欢同时运用他的财务和编程背景的项目, 但他也喜欢处理和分析数据——无论是在分析方面, visualization, or machine learning.
Show MoreJulie Wetherbee
Freelance Linux Developer
Julie在为各种规模的企业构建软件应用程序和领导工程团队方面拥有超过20年的经验. She has expertise in Java, JavaScript, C, C++, and Perl, 并且熟悉许多流行的框架. 最近,Julie为沃尔玛设计并实现了一个大规模的Oracle数据库分片解决方案.com.
Show MoreRichard Kolkovich
Freelance Linux Developer
理查德曾担任过从技术支持到联合创始人的各种职务. Over his career, Richard积累了深厚的技术理解以及对建立和发展成功企业的其他必要要素的广泛理解. 他丰富的经验和技术专长使他非常适合用技术解决业务问题.
Show MoreToptal Connects the Top 3% of Freelance Talent All Over The World.
Join the Toptal community.