你在准备 Linux 面试吗?我们准备了一些常见的 Linux 面试问题及其答案。
如果您是初学者(具有一定的 Linux 知识或获得认证)或具有专业的 Linux 管理经验,那么下面的问答有助于您准备面试。
1.什么是Linux及基本组件?
Linux 是一个基于 Linux 内核的免费开源操作系统。它是广泛使用的操作系统之一,尤其是在服务器世界和开发人员中。它的用途从托管网站和应用程序延伸到成为智能手机、平板电脑和电视等智能设备的核心操作系统。
Linux 由 4 个基本组件构成:
Kernel:这是Linux系统的核心。它负责与硬件组件交互并确保操作系统与硬件设备进行通信。
Shell: Shell 是 Linux 用户和内核之间的接口。在 shell 中,命令由用户发出,然后由操作系统执行。
系统库:这些是特殊程序或函数,它们负责实现操作系统的大部分功能,而不依赖于内核模块的代码访问权限。
系统实用程序:这些是执行某些任务的特定程序。例如 LibreOffice、Brasero、Gparted。
2、什么是Linux内核?
Linux内核是Linux系统的核心。它将底层硬件与操作系统连接起来。
3、Linux和Unix有什么区别?
Linux 是衍生 Linux 的 UNIX 系统的克隆。Linux 是开源的并且可以免费使用,而 UNIX 是专有操作系统。
4. Linux 中的 inode 是什么?如何找到与文件关联的inode?
inode(索引节点)是 Unix 风格文件系统中的一种数据结构,用于描述文件系统对象,例如文件或目录。创建文件时,会为其分配一个名称和一个 inode 编号,这是一个在文件系统中唯一的整数。
解释
文件系统通常有两部分:元数据或关于数据的“数据”和数据本身。元数据包含有关数据的信息。更准确地说,它包括诸如访问控制列表 (ACL)、文件修改日期、文件所有者、文件权限、文件大小、设备 ID、文件的 uid 等信息。此类信息是文件系统,否则我们在存储介质上只有一堆没有多大意义的位。Inode 存储此元数据信息,通常它们还存储有关数据在存储介质上的位置的信息。
在文件系统中,inode 大约占总磁盘空间的 1%,无论是整个存储单元(硬盘、拇指驱动器等)还是存储单元上的分区。inode 空间用于跟踪存储在硬盘上的文件。inode 条目仅指向这些结构,而不是存储数据。每个条目的大小为 128 字节。在安装操作系统或新文件系统以及进行初始结构化时,会为 Inode 分配空间。所以通过这种方式我们可以看到,在文件系统中,设置了最大 Inode 数,因此设置了最大文件数。现在,上述概念带来了另一个有趣的事实。文件系统可以通过两种方式耗尽空间:
要获取 inode 编号的列表,请使用ls -i命令。
ls -li
total 3336
57741 -rw-r--r-- 1 root root 3412144 Nov 20 17:26 coreutils-8.22-18.el7.x86_64.rpm
57725 -rw-r--r-- 1 root root 0 Apr 7 04:00 file
57736 -rw-r--r-- 1 root root 0 Apr 7 04:00 new-file
# ls -li new-file
57736 -rw-r--r-- 1 root root 0 Apr 7 04:00 new-file
# find /root -inum 57736
/root/new-file
5.什么是Linux shell?如何检查当前的shell?
Linux shell 是一个命令解释器或接受命令并将其传递给操作系统执行的程序。要检查您正在使用的 shell,请运行命令 echo $0
6. 用什么命令查找内存和交换使用情况?
使用free命令
7. 软链接和硬链接的区别?
a)不能为目录创建硬链接。只能为文件创建硬链接。
b) 符号链接或符号链接可以链接到目录。
c)删除硬链接指向的原始文件并不会删除硬链接本身;硬链接仍然提供基础文件的内容。
d)如果您删除硬链接或符号链接本身,原始文件将保持不变。
e)删除原始文件不会删除附加的符号链接或符号链接,但没有原始文件,符号链接是无用的
8.解释Linux中的文件权限?
在 Linux 中,有 3 种主要类型的文件权限:读、写和执行。这些权限可以递归地分配给文件或目录。作为一个多用户系统,您可以将这些权限分配给 root 用户、组,甚至是使用该系统的其他用户。
Read:读取权限授予使用打开和读取文件的能力。
Write:写入权限允许用户打开和修改或编辑文件的内容并保存更改。
Execute:这允许用户执行或运行可执行的文件或程序或 shell 脚本。
9. 如何在 Linux 中创建和删除目录?
要创建目录,请使用 mkdir 命令,如图所示;
mkdir directory_name
例如,要创建一个名为“data”的目录,请运行以下命令:
mkdir data
要在 Linux 中删除目录,请使用rmorrmdir命令。
该rmdir命令用于删除空目录。
该rm命令主要与-R用于递归删除目录的标志一起使用。
10、如何在Linux中创建文件?
要创建文件,请使用 touch 命令。例如要创建一个文件 file1.doc 运行命令:
10
touch file1.doc
您还可以使用cat命令后跟重定向运算符或大于号>
后跟文件名。接下来,键入文件的内容,最后按CTRL + D退出文件。
cat > file1.doc
输入文件内容并点击CTRL + D
11. 如何在Linux中重命名文件和目录?
要重命名文件,请使用 mv 命令。请注意,要使其正常工作,要重命名的文件的路径必须相同。例如,要将/data/files目录中的文件 file1.doc 重命名为 file2.doc,请执行以下命令:
mv /data/files/file1.doc /data/files/file2.doc
12、如何在Linux中复制文件和目录?
要在 Linux 中复制文件,请使用 cp 命令。语法很简单
cp /source/of/the/file /destination/of/the/file
13. 如何在Linux中列出和挂载设备?
要列出挂载点,请运行以下命令:
df -aTh
要查找有关系统上安装点的更多信息,请执行以下命令:
findmnt
此外,您可以使用下面的 cat 命令
cat /proc/self/mounts
此外,您可以使用 mount 命令,如图所示
mount -l
14、如何在Linux中创建空文件?
要在 Linux 中创建一个空文件,请使用 touch 命令,如下所示:
touch new_file
15. 如何在 Linux 中调度任务?什么是 crontab 并解释 crontab 中的字段?
cron 是一个守护进程,它在 Linux 中的特定日期和时间执行命令。您可以使用它来安排活动,既可以作为一次性事件,也可以作为重复任务。Crontab是用于安装、卸载或列出用于驱动服务器中的 cron 守护程序的表的程序。每个用户都可以有自己的 crontab,虽然这些是 /var/spool/cron/crontabs 中的文件,但它们并不打算直接编辑。以下是 crontab 的几个命令行选项。
crontab -e 编辑您的 crontab 文件。
crontab -l 显示你的 crontab 文件。
crontab -r 删除你的 crontab 文件。
传统的 cron 格式由空格分隔的六个字段组成:
格式解释如下:
* * * * * *
| | | | | |
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
16. 你知道哪些基本的 Vim 命令?
a) 保存
要保存文件,请按ESC按钮并按 :wq! OR :ZZ
b) 退出
要退出文件而不进行更改,请运行命令:q
c) 跳转到文件中的特定行
按ESC再按j向下移动一行。
k按键盘上移一行
将光标移动到行首 按^
将光标移动到行尾 按$
将光标移动到文件的开头1G
将光标移动到文件末尾G
将光标移动到文件中行号“n”的开头nG
d) 复制文本
将光标移动到字符串或文本的开头。接下来按键盘上的 v 并向前按光标以突出显示文本。到达要复制的文本的末尾后,请按yyank 的缩写来复制文本。
要将文本从当前位置复制到行尾 -y$
复制整行 -yy
要复制下面的 4 行 -4yy
d) 粘贴文本
要粘贴文本,只需按p键盘上的
d) 删除文本
要删除一行,请移至一行的开头。按下ESC按钮并按下dd
要删除单个单词,请将光标放在单词前面并点击dw
删除从当前单词到行尾的文本d$
要删除下面运行的 3 行3dd
17. 如何将二进制文件添加到 $PATH 变量中?
$ export PATH=$PATH:/path/to/the/binary/file
18.解释Grep命令和正则表达式?
Grep 命令是用于过滤结果或输出的表达式。例如,要列出一个目录并仅搜索带有单词“cron”的文件,请运行以下命令:
ls | grep cron
19、umask和ulimit有什么区别?
Umask代表“用户文件创建掩码”,它确定掩码的设置,该掩码控制在创建文件和目录时为文件和目录设置哪些文件权限。虽然 ulimit 是一个 linux 内置命令,它提供对 shell 可用资源和/或由它启动的进程的控制。
您可以通过编辑 /etc/security/limits.conf 将用户限制在特定范围内,同时可以在 /etc/sysctl.conf 中更新系统范围的设置
20. 解释 ls 命令在 Linux 中的输出?
ls 命令列出 Linux 中目录的内容。它显示目录内的文件和子目录。当与其他参数一起使用时,它可以列出文件权限,甚至显示隐藏文件。
21.解释Linux中top命令的输出?
top 命令是一个监控实用程序,可让用户深入了解系统指标,例如正常运行时间、平均负载、%CPU 和 % 内存利用率。
22. Linux 中的进程状态有哪些?
进程状态,顾名思义,是指Linux进程所处的当前状态。进程状态有4种,分别是Running、Waiting、stopped和Zombie。
23. 如何在 Linux 中备份或归档文件(tar 命令)?
要备份目录,只需运行下面的 tar 命令
$ tar -cvf tarball_name.tar /path/to/directory
例如,要在 /data/reports/ 路径中创建文件 sales.txt 的 tar.gz 格式的存档,请执行:
$ tar -cvf sales.tar.gz /data/reports/sales.txt
您还可以归档整个目录,如下所示:
$ tar -cvf repors.tar.gz /data/reports/
24. 如何停止Linux中正在运行的进程?
要停止正在运行的进程,请使用 kill 命令,后跟进程的 PID。
例如,要停止 PID 为 3836 的进程,请运行命令
kill 3836
25.如何在linux中搜索文件?
要在 Linux 中搜索文件,请使用locate orfind命令
26. 如何检查某项服务是否在运行?
要检查服务是否正在运行,请使用以下语法:
systemctl status service_name
例如,要检查 Postfix 是否正在运行,请运行以下命令:
systemctl status postfix
27. 如何在重启时启动服务?
要在重新启动运行时启动服务,请使用以下语法:
systemctl enable service_name
例如,要在重新启动时启动 httpd Web 服务器,请运行
systemctl enable httpd
28. 如何启动和停止服务?
要在 systemd 系统中启动服务,请运行以下命令:
systemctl start service_name
例如,要启动 ssh 服务,请运行以下命令:
systemctl start sshd
要停止服务,请运行:
systemctl stop service_name
要停止 ssh 运行:
systemctl stop sshd
29. 如何远程登录另一台linux电脑?
您可以使用 SSH 协议或使用 VNC 服务登录到远程 Linux 计算机。
30.如何查看磁盘使用情况?
使用该df命令检查硬盘驱动器上使用的空间和剩余空间/可用空间。
此外,使用该du命令检查特定文件和目录的使用情况。
31. 为什么要使用导出命令?
导出命令标记和导出环境变量。
32. 如何使用 bash 脚本从多个 Linux 服务器获取版本?
#!/bin/bash
#we user variable serverlist to keep there path to file with server names
serverlist='server_list.txt'
#we write in variable all server list
servers=`cat $serverlist`
#we use variable result to keep there path to file with result
result='result.txt'
#this print header to file with resilt using \t\t to add 2 tab symbols
echo -e "Servername \t\t kernel version"> $result
#this get each line of serverlist one by one and write to server variable
for server in $servers
do
#this login to server by ssh and get uname -r
kernel=`ssh root@${server} "uname -r"`
#this write server name and kernel version separated by 2 tab to result file
echo -e "$server \t\t $kernel" >> $result
#end of for loop.
done
33. Linux 安装的最低要求是什么?
随着更新的 Linux 发行版每隔一周或一个月推出,没有明确的最低要求。由于改进了 GUI 功能和架构,较旧版本将需要更高的最低要求。尽管如此,任何 Linux 发行版都应与具有以下最低要求的 PC 一起使用:
25 GB of hard disk space
2 GB RAM
2 Ghz dual core processor
A screen resolution of 1024x768
A CD/DVD ROM or USB port for inserting installation media
34.如何设置Linux文件/目录权限?
要设置文件权限,请使用chmod命令后跟八进制值或符号值,然后是文件名或目录名。
例如分配一个文件权限值为 664 运行
chmod 664 filename
要分配目录权限,请使用-R递归分配权限的选项。
chmod -R 664 directory_name
35. 如何设置文件/目录的所有权?
要设置文件所有者,请使用该chown命令。例如chown user:user filename
对于目录,使用-R递归分配权限的选项。例如
chown -R user:user directory_name
36. 如何在Linux中创建用户和组?
要创建用户,请运行命令adduser user_name例如
adduser john
37、如何在Linux中查找内核/操作系统版本?
运行命令uname -a
38、如何查找接口IP地址?
ifconfig interface_name您可以通过运行命令或使用ip 命令(推荐)轻松找到 IP 接口。
例如
ifconfig eth0
ip addr show
39.什么是initrd镜像?
初始 RAM 磁盘 (initrd) 是在真正的根文件系统可用之前安装的初始根文件系统。initrd 绑定到内核并作为内核引导过程的一部分加载。然后内核将这个 initrd 挂载为两阶段引导过程的一部分,以加载模块以使真实文件系统可用并获得真实的根文件系统。因此 initrd 映像在linux 启动过程中起着至关重要的作用。
40.解释suid、sgid和sticky bit这几个术语?
除了 Linux 中的基本文件权限外,可执行文件和目录还有一些特殊权限。
SUID:如果设置了setuid位,当用户执行文件时,进程将拥有与正在执行的文件的所有者相同的权限。
SGID:同上,但在执行时继承文件的组权限,而不是用户权限。类似地,当您在目录中创建文件时,它将继承目录的组所有权。
粘滞位:粘滞位用于 linux 中的可执行文件,以便在初始执行后它们会在内存中保留更长时间,希望在不久的将来会需要它们。但主要是在文件夹上,这意味着在启用 Stickybit 的文件夹中创建的文件或文件夹只能由所有者删除。粘性位的一个很好的实现是 /tmp ,每个用户都有写权限,但只有拥有文件的用户才能删除它们。
41. linux 中的运行级别是什么,如何更改它们?
运行级别是 init 和整个系统的状态,它定义了正在运行的系统服务,它们由数字标识。Linux 系统中有 7 个不同的运行级别(运行级别 0-6)用于不同的目的。下面给出描述。
0: Halt System (To shutdown the system)
1: Single user mode
2: Basic multi user mode without NFS
3: Full multi user mode (text based)
4: unused
5: Multi user mode with Graphical User Interface
6: Reboot System
要更改运行级别,请编辑文件“/etc/inittab”并更改 initdefault 条目 (id:5:initdefault:)。如果我们想即时更改运行级别,可以使用“init”命令来完成。
例如,当我们在命令行中输入“init 3”时,这会将系统从当前运行级别移动到运行级别 3。可以通过输入命令“who -r”列出当前级别
42.什么是SeLinux?
SELinux 是 Security-enhanced Linux 的缩写。它是 Linux 内核的访问控制实现和安全功能。它旨在保护服务器免受错误配置和/或受损守护程序的影响。它通过定义安全策略设置限制并指示服务器守护程序或程序可以访问哪些文件以及可以采取哪些操作。
43. 选择 5 个 Linux 命令,你的选择是什么?
1) rsync 命令
rsync 命令可用于同步两个目录或目录树,无论它们是在同一台计算机上还是在不同的计算机上,但它可以做的远不止这些。rsync 创建或更新目标目录,使其与源目录相同。
rsync -aH sourcedir targetdir
-a 选项用于保留权限、所有权和符号(软)链接的存档模式。-H 用于保留硬链接。请注意,源目录或目标目录都可以位于远程主机上。
2) sed 命令
当您需要选择文件的特定行时,使用Sed 命令。Sed 是流编辑器的缩写,是执行此操作的一种方法。您想合并多个具有标题的文件或进行批量查找和替换文件。
在匹配“正则表达式”的每一行上方插入一个空行
$ sed '/regex/{x;p;x;}'
将“scarlet”或“ruby”或“puce”更改为“red”
$ sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'
3) awk 命令
awk 是一种编程语言,可以轻松操作结构化数据并生成格式化报告。它主要用于图案扫描和加工。它搜索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。这就像 sed 命令。如果您对awk 命令感兴趣,那么您的生活将变得轻松。
打印特定字段
$ awk -F':' '{ print $1 }' /etc/group
$ date | awk '{print $2 " " $6}'
4) lsof 命令
lsof 是一个命令行实用程序,用于列出有关由各种进程打开的文件的信息。在 unix 中,一切都是文件:管道、套接字、目录、设备等。因此,通过使用 lsof,您可以获得有关任何已打开文件的信息。
列出打开特定文件的进程
# lsof /var/log/syslog
列出属于用户拥有的进程的所有打开文件
# lsof -u username
杀死属于特定用户的所有进程
# kill -9 `lsof -t -u username
列出所有网络连接
# lsof -i
列出特定进程正在使用的所有网络文件
# lsof -i -a -c ssh
列出正在侦听特定端口的进程
# lsof -i :25
5) grep 命令
Grep 是用于搜索文本或给定文件中包含与给定字符串或单词匹配的行的命令。默认情况下,grep 显示匹配的行。
打印Firefox使用的网络连接
# netstat -pltnu | grep firefox
在 /etc/passwd 文件中打印包含“root”的行
# cat /etc/passwd | grep root
44. 基于名称的虚拟主机和基于IP的虚拟主机有什么区别?
虚拟主机用于在单个 apache 实例上托管多个域。您可以为服务器拥有的每个 IP 设置一个虚拟主机,或者相同的 IP 但不同的端口,或者相同的 IP、相同的端口但不同的主机名。后者称为“基于名称的虚拟主机”。
在基于 IP 的虚拟主机上,我们可以在同一台服务器机器上运行多个网站,但每个网站都有自己的 IP 地址,而在基于名称的虚拟主机中,我们在同一个 IP 地址上托管多个网站。但要成功,您必须在 DNS 数据库中为您的 IP 地址放置多个 DNS 记录。
45. 网络绑定有什么优势?
Network Bonding是一个 Linux 内核功能,允许将多个网络接口聚合到单个虚拟链接中。这是在生产系统中实现冗余链路、容错或负载平衡网络的好方法。如果其中一个物理 NIC 关闭或拔出,它会自动将流量转移到另一个 NIC 卡。类似地,绑定将增加接口吞吐量以处理在主动-主动模式下配置的流量。
46. /etc/passwd 和 /etc/shadow 文件有什么用?
/etc/shadow 文件以加密格式存储实际密码,并带有一些与用户密码相关的附加属性。主要保存账龄参数。所有字段均以冒号 (:) 符号分隔。对于/etc/passwd 文件中列出的每个用户,它每行包含一个条目。
47. 为什么设置密码少ssh登录?
为了进一步提高系统安全性,大多数组织转而使用基于密钥的身份验证,而不是基于密码的身份验证。我们可以通过禁用标准密码身份验证来强制执行基于密钥的身份验证,这涉及公钥私钥对。公钥添加在服务器配置文件中,而私钥在客户端保密。
48. 什么是 Linux 中的 swappiness?
swappiness 参数控制内核将进程移出物理内存并移至交换磁盘的趋势。由于磁盘比 RAM 慢得多,如果进程过于激进地移出内存,这可能会导致系统和应用程序的响应时间变慢。
swappiness 的值可以在 0 到 100 之间
swappiness=0 告诉内核尽可能长时间地避免将进程交换出物理内存
swappiness=100 告诉内核积极地将进程交换出物理内存并将它们移动到交换缓存