Linux面试题
理论基础
1、面Linux系统比Windows系统好在哪里?
其它问法: 你为什么选择学习Linux?
你觉得企业为什么选择Linux系统?而不选择Windows系统?
1 | Linux开源,并且大多数的发行版本免费,其中甚至包括了部分企业级的服务器版本。 |
扩展:
我们常说的开源免费并不是同一个概念:
开源:软件产品的源代码对公众开放,任何人都可以查看、使用、修改以及分发其源代码。
免费:可以自由的运行程序、自由的学习并修改程序、自由的复制并向他人分发软件副本、自由的发行修改版。
但是这并不意味着开源软件必须免费,如:Red Hat Enterprise Linux(RHEL,红帽企业版);同时也不意味着免费必须开源,如:Adobe Acrobat Reader DC。这个知识点背诵时,首先记住Linux系统对比Windows最大的优势就是开源,因此可以从这一条开始扩展。
首先说出价格的问题,你可以认为一个开源的产品,总有其免费版本,大不了别人就拿源代码编译一下就是了;然后说出开源会带来的社区优势,即有更多的人去维护它,安全性会更好,同时也意味着你可以修改它做定制化。
到这里就说出一半了,然后再从Linux系统的多用户和可以舍弃图形化界面这点上说下,就答完了。
2、IP地址 和 域名的关系是什么?
其它问法: 域名是什么?
1 | IP 地址是计算机在网络上的唯一标识符,类似于门牌号。 |
扩展:
IP地址分两种,一种是IPv4,占用4字节,格式是由点(.)隔开的4组十进制数,每组范围0至255;一种是IPv6,占用16字节,格式是由冒号(:)隔开的8组十六进制数组成,同时为了简洁可以省略全是0的组的书写和将多个全是0的组缩写成一对冒号(::)。
域名的真正看法则是应该由右至左看,首先看到的是可以被省略的点(.),这个被称之为根域名;然后是我们常见的顶级域名,如:com、org 等;再然后是二级域名,这个级别的域名才是我们可以正常获取的级别,如:baidu、aliyun 等;之后的按照顺序,有三级域名、四级域名,这些域名都是由上级域名再分配而得到的。这个知识点背诵时,首先要记住的有两点:
1、 IP地址相当于我们计算机在网络上的“门牌号”。
2、 域名其实可以理解成 IP 地址的一个别名或者代称,它与 IP 地址一一对应,而一个 IP 地址是可能有多个别名或者代称的。
3、DNS 服务器是什么?
其它问法: DNS 是什么?
域名如何和 IP 地址 转换的?
1 | DNS 服务器是在网络上提供将域名转换为对应 IP 地址的一种服务设备。 |
扩展:
当我们访问一个域名时,会首先查询本机的 hosts 文件中有没有对应的转换关系,如果没有则会尝试请求对应的DNS服务器。
而当DNS服务器解析不出来时,将会尝试请求更上一级域名的DNS服务器,并将结果记录。
如果都查询不到,则网页就会出现域名解析错误的提示页面。这个知识点背诵时,要记住的有1点,DNS是指域名解析服务,将域名转换为 IP 地址的一种服务。
4、为什么IP地址到现在还没有分配完?
其它问法:IP 地址的分配方案是什么?
1 | 在IPv4 地址紧张的当下,私有IP地址范围(如10.0.0.0/8、172.16.0.0/12和192.168.0.0/16等)被广泛使用于内部网络。当内部网络设备需要与公网通信时,会利用NAT技术将私有IP地址映射到公共IP地址上。 |
扩展:
除此之外,云计算和数据中心采用了虚拟化技术,多个虚拟机可以在单个物理服务器上运行并共享该服务器的单个或少量公网IPv4地址,从而节省了地址资源。
这个知识点背诵时,要记住的核心概念是 NAT,通过它将我们内网IP地址转换为公网IP地址。这就好像从原本的点对点的传递物品,变成了现在的先传送到中转站A,然后由中转站A送到目标地址的中转站B,最后从中转站B再送到目标地点一样。这样每个地址所要记录的就只有自己下面的地址和其它中转站了,而其它中转站下面的我们并不需要记录。
5、你知道OSI七层网络模型吗?
其它问法:请说下OSI七层网络模型。
请说下交换机是属于哪一层的设备。
1 | OSI七层网络模型其层次从下至上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 |
扩展:
OSI七层网络模型的具体实现如下:
物理层:双绞线电缆、光纤电缆、RJ45(网线接口和水晶头)等
数据链路层:以太网协议、Wi-Fi协议、MAC地址等,物理设备有二层交换机等
网络层:IPv4协议、IPv6协议、ICMP协议等,物理设备有三层交换机、路由器等
传输层:TCP协议、UDP协议等
会话层:数据库连接池、Session等
表示层:HTTP头信息中的Content-Encoding、MIME类型等
应用层:HTTP协议、FTP协议、SSH协议等这个知识点背诵时,需要理解网络信息的传输流程。
在传输时,肯定是光电信号的,这里有关的是物理层,然后将光电信号转成数据的是数据链路层,再由网络层将数据发送到你电脑上,由传输层决定是哪个服务,然后开启服务会话,这里处于会话层,由表示层将二进制数据转换为对应的具体格式数据,并由应用层最后处理。
6、请说下TCP协议和UDP协议的区别。
其它问法:你知道TCP协议和UDP协议吗?
1 | TCP协议是传输控制协议,UDP协议是用户数据报协议。 |
扩展:
TCP协议还会对每个数据段赋予序列号,并按序传输和重组,以确保数据的正确顺序。
同时,还会根据接收端处理能力动态调整发送速率,避免接收方无法处理而丢包的情况。而UDP协议没有复杂的确认机制,会产生一定程度的丢包或乱序的情况。
不过同时,UDP协议还支持多播和广播,以实现支持向多个目的地一次性发送数据报文的功能。这个知识点背诵时,首先要明确一个名词,即:TCP的“三次握手,四次挥手”。这个功能实现了TCP协议关于传输的可靠性和完整性。
在这个点上进行反向扩展就可以得到UDP协议没有这一点,同时也不保证可靠性和完整性这一点。
然后再是根据这多出的步骤得到TCP协议的开销会比UDP大。
最终得到它们分别的适用场景。
请说下TCP连接的流程。
其它问法:你知道三次握手四次挥手吗?
1 | TCP的连接需要经历三次握手、传输数据和结束的四次挥手。 |
扩展:
下面是TCP连接的“三次握手,四次挥手”的完整版:
1、 第一次握手:SYN
客户端(Client)想要与服务器(Server)建立连接时,它会发送一个带有SYN标志的TCP报文段给服务器。在这个报文中,客户端会随机生成一个序列号seq(X),这个序列号将作为本次连接中所有从客户端发出的数据的起始序号。
2、 第二次握手:SYN + ACK
服务器接收到客户端的SYN报文后,如果同意建立连接,则回复一个带有SYN和ACK标志的TCP报文段。服务器同样也会生成一个自己的序列号seq(Y),并且确认号ACK设置为客户端的序列号加1(即seq(X)+1),表示期望接收客户端的下一个数据报文从该序列号开始。
3、 第三次握手:ACK
客户端收到服务器的SYN + ACK报文后,会再向服务器发送一个ACK确认报文。此时,客户端的确认号ACK设置为服务器的序列号加1(即seq(Y)+1),表示已收到并确认了服务器的SYN报文。同时,客户端也会继续发送自己的数据,或者等待服务器的数据传输开始。
至此,TCP连接已经建立完成,双方可以开始进行双向的数据传输。三次握手确保了双方都已准备好,并且双方对彼此的初始序列号进行了同步,这有助于后续数据包的可靠传输和顺序控制。
1、 第一次挥手:FIN
当某一方(假设是客户端)完成数据传输或决定断开连接时,它会发送一个带有FIN标志的TCP报文段给另一方(服务器),表示“我已无数据要发送”。此时,客户端进入FIN-WAIT-1状态。
2、 第二次挥手:ACK
服务器收到客户端发来的FIN报文后,确认并回复一个带有ACK标志的报文,确认号ACK设置为接收到的序列号加1。这表示服务器已经收到了客户端的关闭请求,并且自身可能还有数据需要发送完。服务器这时进入CLOSE-WAIT状态,而客户端则进入FIN-WAIT-2状态,等待服务器的FIN报文。
3、 第三次挥手:FIN
服务器发送完所有剩余的数据后,也会发出一个FIN报文,通知客户端它也已经没有数据要发送了。这时服务器进入LAST-ACK状态。
4、 第四次挥手:ACK
客户端收到服务器的FIN报文后,同样会回应一个ACK确认报文,确认号ACK设置为服务器FIN报文中的序列号加1。然后客户端进入TIME-WAIT状态,等待一段时间确保服务器接收到了这个确认报文。这段时间过后,客户端才会真正关闭连接。
服务器在收到客户端的最后一个ACK报文后,立即进入CLOSED状态,结束连接。
客户端在TIME-WAIT状态保持一段时间是为了防止最后的ACK报文丢失,若该ACK未到达服务器,服务器会重新发送FIN报文,客户端可以在TIME-WAIT期间再次确认。经过这个时间后,客户端确认连接已经完全关闭,最终也进入CLOSED状态。这个知识点背诵时,需要记住的一点是,不是直接开始传也不是直接断的,不是你说开始就代表你同意接收数据了。
因此问得互相问一次,各回答一次,然后其中“三次握手”中的目标的回答和询问一起发送了,因此是“三次握手”。
而“四次挥手”也是一样的,因此结束和同意也要互相确认,同时,结束时,同意结束和我发送结束因为有可能不是同时的,所以要分两次。因此是“四次挥手。”
7、你知道哪些常用的端口号?
其它问法: HTTP 和HTTPS 的端口号分别是多少?
SSH 的端口号是多少?
MySQL 的端口号是多少?
1 | HTTP 协议使用的默认端口号为80; |
扩展:
其它的如:
Redis 默认使用的端口号是:6379;
SMTP 默认使用的端口号是:25这个知识点就没什么好说的了,就是单纯的背。
8、HTTPS 中的 S 是什么意思?
其它问法: 你知道 SSL 吗?
你知道 TLS 吗?
1 | HTTPS中的“S”代表“Secure”(安全),它表明该连接使用了安全套接字层(SSL)或其后继者传输层安全(TLS)协议来加密和保护通信数据。 |
扩展:
其中,SSL/TLS的加密流程基本上是如下的:
1、 客户端向服务端发送请求连接,同时携带上客户端支持的TLS版本、加密套件列表和一个随机数。
2、 服务端接收后响应一个最高兼容的 TLS 版本、一个选定的加密套件和另一个随机数。同时发送服务器的数字证书给客户端,数字证书包含了服务器的身份信息和由受信任的证书颁发机构(CA)签名的公钥。
3、客户端接收后验证证书是否有效,没有过期、签发者可信和域名匹配,然后使用CA的公钥验证服务器证书的签名。
4、然后根据双方协商的秘钥交换算法,客户端可能需要产生一个随机数并通过服务器证书中的公钥加密后发往服务器;或者双方直接通过非对称加密算法交换随机数据以计算共享密钥。
5、客户端和服务器各自利用接收到的信息以及之前自己生成的随机数,通过密钥导出函数生成一个对话密钥,此密钥将用于后续的对称加密通信。
6、双方交换Finished消息,这些消息使用刚才生成的对话密钥进行加密,以验证握手过程中没有被篡改或监听。当对方成功解密并校验Finished消息后,握手阶段结束。
7、一旦握手完成,客户端和服务器开始使用协商好的对称加密算法、哈希算法以及消息认证码(MAC)来加密和解密应用层数据(比如HTTP请求和响应)。所有后续通信都将受到保护,确保数据隐私性和完整性。这个知识点背诵时,要记住的核心概念是HTTPS中的S意为安全。然后从安全这个意思进行扩展,得到SSL/TLS这个概念是解决安全性的问题的。
日常使用
1、你用的是什么发行版本?
其它问法: 你了解发行版本吗?
1 | 我使用的是CentOS7 这个发行版本。 |
扩展:
我们最常用的Linux两大系分别是:Red Hat系和 Debian 系。
其中Red Hat系主要客户群体是企业,因此更注重稳定性和一致性。
而Debian 系的主要客户群体是需要图形化界面的桌面用户、开发者和需要高度可定制化系统的组织,因此更注重新功能、广泛的软件包库和灵活的定制性。
同时,这两大系的包管理系统、更新策略、系统配置和系统管理是不一样的。这题其实就是问你用的 Linux 是哪个版本的,不过 Linux 不同于 Windows 只有一家公司
的,Linux 有好几家公司的,所以这里说的是发行版本。
2、你用的是图形化界面的还是命令行界面的?
其它问法: 你用的是带桌面的?还是不带桌面的?
你是在哪里操作Linux系统的?
1 | 我是使用的命令行界面的CentOS7。 |
扩展:
在系统中运行的图形化界面会占用较多的资源。
在现代Windows10或11中,纯净安装且仅启动基本图形界面服务时,空载状态下的内存占用通常从几百MB到1GB左右不等,实际情况下只会是远大于这个大小。
而在Linux系统中,轻量级桌面环境在无额外加载项的情况下,可能需要占用几十MB至几百MB的内存,而功能更全面的桌面环境在纯净启动时,内存占用可能会达到几百MB至上GB,实际情况也是只会大于这个大小。
同时这也意味着舍弃了图形化界面之后至少可以节省下来数百MB的内存空间。而对于Redis而言,在键平均占用8字节(8个英文字符),值平均占用32字节(32个英文字符)的情况下每百MB可以额外多存储近3百万个键值对。这题其实就是问你平时使用 Linux 的操作风格。
但是首先,我们要知道桌面UI会消耗大量的系统资源,而服务器是不需要桌面UI的,因此,正统服务器一般选择的都是命令行界面的。
另一方面,在使用上,桌面UI大幅度的简化了一些我们的命令行操作。这也意味着,桌面UI版的技术门槛是比命令行界面版的低一些的。同时,你会命令行版本的,在使用桌面UI版时再不济也可以使用终端操作,可是反过来却不一定行。
结合这两点,企业选择时,会命令行的会优于只会桌面UI的。
3、你有用虚拟机吗?用的是哪种?
其它问法:你Linux系统是安装在实体机上还是虚拟机上?
你有用过VM吗?
1 | 我有使用虚拟机,当时学习Linux的时候就是安装在VMware Workstation虚拟机上跑的。 |
扩展:
常见的虚拟机除了上述的VMware Workstation Pro外,还有:
Oracle VirtualBox这题其实就是问你平时有没有使用过虚拟机,他们是有使用虚拟机的场景的。
4、你是通过什么方式连接的Linux系统的?
其它问法: 你知道SSH吗?
如何从Windows上连接Linux?
1 | 我平时是使用第三方的软件Xshell进行连接的,它走的是SSH协议,同时在没有这款软件或者不能使用的情况下,我会使用CMD中的ssh命令进行连接。 |
扩展:
SSH(Secure Shell)是一种网络协议,主要用于提供安全的远程登录和命令行管理服务。它允许用户通过加密通道在不安全的网络上进行安全的数据传输,并且可以执行远程服务器上的命令、传输文件以及与其他网络服务交互。
这题的核心问题其实是你有没有办法从远程连接到你的Linux系统,答案就是SSH协议。这里你要确保你回答到了SSH协议才能得分。
因为我们是使用虚拟机去练习的Linux系统,因此我们可以直接对Linux系统进行操作,但现实场景却更多的是Linux服务器压根不在你身边,你必须使用你手头上的设备去连接它,操作它。
而平时最常用的Xshell只是具体的解决方案中的一种,它还是基于SSH协议的,而如果你只回答了Xshell,那么就会被认为你只是会用这个工具,而非知道其连接的底层协议。
用户和权限
为什么我们不使用root账户?
其它问法:你觉得直接使用 root 账户好吗?
1 | 在 Linux 系统中,root 账户是系统最高权限的管理员,拥有着对系统的完全访问权限。 |
扩展:
如果了解安全审计,也可以加上:从安全审计的角度出发,可以更好的跟踪用户的操作,同时也符合最小权限原则。
这个知识点背诵时,首先记住 root 是在 Linux 系统中什么都能做的管理员,在这个基础上进行扩展。
比如:安全角度,误操作角度 等。
知识点小结
1、mkdir 命令(创建目录)
基础操作:如何一次性创建多级目录(如
a/b/c)?mkdir -p a/b/c(-p递归创建父目录)。
权限控制:
mkdir -m 750 dir的作用是什么?- 创建目录
dir,权限为 所有者读/写/执行,组用户读/执行,其他用户无权限(数字权限750)。
- 创建目录
防报错创建:创建已存在的目录会报错,如何避免?
mkdir -p existing_dir(-p若目录存在则跳过,不报错)。
批量创建:如何同时创建
dir1、dir2、dir3三个目录?mkdir dir1 dir2 dir3(空格分隔多个目录名)。
对比 rmdir:
rmdir能删除非空目录吗?为什么?- 不能!
rmdir仅删除空目录;非空目录需用rm -r递归删除。
- 不能!
2、touch 命令(创建空文件/改时间)
空文件创建:如何快速创建空文件
test.txt?touch test.txt。
批量创建:如何同时创建
file1.log和file2.conf?touch file1.log file2.conf(空格分隔)。
修改时间:已有文件
data.csv,如何更新其“修改时间”为当前时间?touch data.csv(更新访问时间和修改时间)。
父目录问题:尝试用
touch dir/file.txt创建文件(父目录dir不存在),会怎样?- 报错
No such file or directory;需先建父目录(mkdir -p dir)或用touch -p?不,touch无-p,必须先建目录。
- 报错
对比 echo:
touch和echo "" > file哪种创建的文件更小?touch创建的文件大小为0(纯空文件);echo会写入空行,文件大小至少1字节(含换行符)。
3、cat 命令(查看/合并文件)
显示行号:查看
test.log并显示行号,命令是什么?cat -n test.log(-n显示行号)。
合并文件:如何将
fileA.txt和fileB.txt合并到fileC.txt?cat fileA.txt fileB.txt > fileC.txt(重定向输出)。
交互创建:用
cat交互创建hello.txt,输入Hello Linux!后如何结束?- 按 Ctrl + D 终止输入。
对比 more:查看大文件时,为什么更推荐
more而非cat?cat会一次性输出所有内容,大文件会刷屏;more支持分页查看,更友好。
管道应用:
cat /etc/passwd | grep "root"有什么作用?- 查看
/etc/passwd中包含root的行(筛选用户信息)。
- 查看
4、more 命令(分页查看)
翻页操作:用
more查看大文件时,如何翻页、回退、退出?- 空格(翻页)、
b(回退一页)、q(退出)。
- 空格(翻页)、
指定起始行:从第20行开始查看
file.txt,命令是什么?more +20 file.txt。
对比 less:
less比more强在哪里?less支持 前后翻页(如↑↓键),还能搜索内容;more只能向后翻页。
管道结合:
ls -lR / | more有什么效果?- 分页查看根目录下所有文件的详细信息(递归显示,避免刷屏)。
错误提示:用
more查看不存在的文件,会出现什么提示?- 报错
more: cannot open [文件名] for reading: No such file or directory。
- 报错
5、cp 命令(复制文件/目录)
递归复制:如何复制目录
src及其子文件到dest?cp -r src dest(-r递归处理子目录)。
保留属性:复制文件时,如何保留原文件的权限、时间戳?
cp -p source.txt target.txt(-p保留属性)。
交互复制:复制
file.txt到file_backup.txt时,若目标文件已存在,如何让系统提示是否覆盖?cp -i file.txt file_backup.txt(-i交互模式)。
对比 mv:
cp和mv的核心区别是什么?cp是复制(文件/目录保留两份);mv是移动/重命名(原文件消失)。
复制软链接:如何复制符号链接文件本身(而非指向的源文件)?
cp -d link.txt new_link.txt(-d保留软链接属性)。
6、mv 命令(移动/重命名)
重命名文件:如何将
a.txt重命名为b.txt?mv a.txt b.txt。
批量移动:如何将
file1、file2同时移动到target_dir?mv file1 file2 target_dir/(空格分隔文件,目标目录结尾加/)。
防覆盖保护:移动文件时,若目标目录已有同名文件,如何避免直接覆盖?
mv -i source.txt target_dir/(-i交互模式,提示确认)。
对比 cp+rm:为什么
mv比“cp后rm”更高效?mv是移动文件指针(仅改路径),无需复制数据;cp+rm需复制+删除,耗时更长。
通配符移动:如何将当前目录所有
.log文件移动到log_dir?mv .log log_dir/(通配符匹配,批量移动)。
7、rm 命令(删除文件/目录)
递归删目录:如何删除目录
dir及其所有子内容(包括非空目录)?rm -r dir(-r递归删除)。
强制删除:如何不提示,直接删除只读文件
readme.txt?rm -f readme.txt(-f强制删除,忽略权限和存在性检查)。
致命风险:为什么说
rm -rf /极其危险?如何避免?- 会递归强制删除根目录下所有文件(系统崩溃)!生产环境需:① 加交互(
-i);② 用别名覆盖rm(如alias rm='rm -i')。
- 会递归强制删除根目录下所有文件(系统崩溃)!生产环境需:① 加交互(
对比 rmdir:
rmdir能删除非空目录吗?怎么解决?- 不能!非空目录需用
rm -r;若要删空目录,rmdir更安全(避免误删内容)。
- 不能!非空目录需用
交互删除:删除文件时,如何每次都提示确认?
rm -i file.txt(-i交互模式,强制提示)。
8、which 命令(查找命令路径)
查找命令路径:如何查看
ls命令的绝对路径?which ls(输出如/bin/ls)。
内置命令问题:执行
which cd为什么找不到结果?cd是 Shell 内置命令(非外部可执行文件),which只查外部命令;可通过type cd查看内置属性。
对比 whereis:
which和whereis查找范围有何不同?which只查 可执行文件路径;whereis还查 手册页、源文件(如whereis ls会显示二进制、手册、源文件位置)。
验证安装:如何快速判断系统是否安装了
gcc编译器?which gcc:若输出路径,说明已安装;否则未安装。
隐藏文件查找:
which能查找隐藏文件吗?为什么?- 不能!
which只查PATH环境变量指定的目录 中的文件,隐藏文件不在PATH里(或需全路径调用)。
- 不能!
9、find 命令(强大查找)
按名查找:如何在当前目录及子目录中,查找名为
test.txt的文件?find . -name "test.txt"(.表示当前目录,-name匹配名称)。
按大小查找:如何查找系统中大于100MB的日志文件(
.log结尾)?find / -type f -name ".log" -size +100M(-type f指文件,+100M大于100MB)。
按时间查找:如何查找
/home下7天内修改过的文件?find /home -type f -mtime -7(-mtime -7表示7天内修改,+7是7天前)。
对比 grep:
find和grep的核心区别是什么?find找 文件本身(按名称、类型、属性等)grep找 文件内容(按文本匹配)。
查找并删除:如何查找
.tmp结尾的文件并直接删除?find . -name ".tmp" -exec rm -f {} \;(-exec执行删除,{}代指找到的文件)。
10、grep 命令
正则与选项:
- 如何忽略大小写查找
error?(grep -i "error" file) - 如何反向过滤空行和注释行?(
grep -v -E "^#|^$" file,解释-v和正则) - 区别
-E和-G:哪个支持扩展正则(如|)?(-E支持扩展正则,无需转义|;-G是基本正则,需转义)
- 如何忽略大小写查找
场景延伸:
- 从
ifconfig输出中提取所有 IPv4 地址,命令是什么?(ifconfig | grep -E -o "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b") grep和find的核心区别?(grep查文件内容,find查文件属性/名称)
- 从
11、wc 命令
统计类型:
wc -l、-w、-c分别统计什么?(行、单词、字节)- 如何统计当前目录下
.log文件的个数?(ls | grep "\.log$" | wc -l)
管道结合:
- 结合
grep,统计app.log中含error的行数?(grep "error" app.log | wc -l)
- 结合
12、tail 命令
实时跟踪:
- 实时监控日志文件
app.log的命令?(tail -f app.log) - 跟踪时如何退出?(
Ctrl + C)
- 实时监控日志文件
选项辨析:
- 显示文件最后10行的命令?(
tail -n 10 file或tail -10 file,-n可省略) tail和head的应用场景?(tail看最新日志,head看配置文件开头)
- 显示文件最后10行的命令?(
13、head 命令
基础操作:
- 显示文件前5行的命令?(
head -n 5 file或head -5 file) - 如何跳过首行,显示后续内容?(
head -n +2 file,或结合tail:tail -n +2 file)
- 显示文件前5行的命令?(
对比思考:
head -n -1 file有什么作用?(删除文件最后一行,-1表示“倒数第1行”)
14、管道符 |
核心原理:
- 管道的作用是什么?(连接命令,前命令
stdout传后命令stdin) - 为什么
ls | rm无效?(rm不读stdin,读命令行参数)
- 管道的作用是什么?(连接命令,前命令
进阶用法:
- 如何让错误信息也进入管道?(
cmd 2>&1 | grep "error",解释2>&1) - 对比
|和xargs:何时用xargs?(处理不支持stdin的命令,如find . -name ".txt" | xargs rm)
- 如何让错误信息也进入管道?(
15、echo 命令
转义与输出:
- 输出带换行的内容,命令是什么?(
echo -e "Line1\nLine2",解释-e启用转义) - 如何输出环境变量
HOME的值?(echo $HOME)
- 输出带换行的内容,命令是什么?(
对比辨析:
echo和printf的区别?(printf格式更灵活,支持对齐;echo更简单,依赖系统实现)
16、反引号 `(命令替换)
基础用法:
- 反引号的作用?(将命令结果作为参数/变量值,如
dir=date +%F``) - 推荐用
$()而非反引号的原因?($()支持嵌套,如echo "当前目录: $(pwd)";反引号嵌套需转义,易出错)
- 反引号的作用?(将命令结果作为参数/变量值,如
实践场景:
- 如何用反引号批量删除
.tmp文件?(rm -fls .tmp``,但需注意文件名含空格的风险)
- 如何用反引号批量删除
17、重定向符(>、>>、2>、&>)
符号辨析:
>和>>的区别?(覆盖写入 vs 追加写入)- 如何将错误信息单独写入文件?(
cmd 2> error.log,解释2代表stderr) &>的作用?(同时重定向stdout和stderr到同一文件)
安全实践:
- 如何“静默”执行命令(丢弃所有输出)?(
cmd &> /dev/null,/dev/null是“黑洞设备”)
- 如何“静默”执行命令(丢弃所有输出)?(
18、vi/vim 编辑器
模式切换:
- vi/vim 的三种模式是什么?如何切换?(命令模式
ESC、插入模式i/I/a/A、末行模式:) - 保存并退出的命令?(末行模式
:wq;强制退出:q!不保存)
- vi/vim 的三种模式是什么?如何切换?(命令模式
核心操作:
- 全局替换所有
old为new的命令?(末行模式:%s/old/new/g,%代表全文,g代表全局) - 如何快速跳转到第50行?(命令模式
50G或末行模式:50) - 异常退出后,如何恢复文件?(
vim -r file恢复交换文件)
- 全局替换所有
19、awk 命令
字段处理:
- 提取
/etc/passwd的用户名和 Shell(第1、7列),命令是什么?(awk -F: '{print $1, $7}' /etc/passwd,-F:指定分隔符) NR、NF分别代表什么?(NR是当前行号,NF是当前行字段数)
- 提取
计算与逻辑:
- 计算
nums.txt(每行一个数字)的总和?(awk '{sum+=$1} END{print sum}' nums.txt) - 筛选
score.txt中分数>90的行?(awk '$3 > 90 {print $0}' score.txt)
- 计算
对比延伸:
awk和grep的区别?(grep按行匹配,awk按字段处理,支持计算和逻辑)
20、yum 源
本地 yum 源搭建步骤:
- ① 挂载镜像(
mount /dev/cdrom /media/cdrom); - ② 编辑 repo 文件(
/etc/yum.repos.d/local.repo,配置baseurl=file:///media/cdrom); - ③ 清理缓存(
yum clean all); - ④ 生成缓存(
yum makecache)。
- ① 挂载镜像(
yum 与 apt 的核心区别:
- yum 用于 RPM 包管理(CentOS/RHEL),apt 用于 deb 包管理(Ubuntu/Debian);命令语法和仓库格式不同。
如何临时禁用某个 yum 仓库?
yum-config-manager --disable 仓库名(需安装yum-utils),或直接编辑 repo 文件将enabled=1改为0。
yum 缓存的作用及清理命令:
- 缓存已下载的包,加速重复安装;清理命令
yum clean all,重建缓存yum makecache。
- 缓存已下载的包,加速重复安装;清理命令
解决 yum 依赖冲突的思路:
① 用
yum deplist 包名查看依赖;② 尝试
yum update 冲突包升级;③ 手动下载依赖包离线安装,或强制降级(
yum downgrade 包名)。
21、软件安装和卸载
yum 安装 vs 编译安装:
- yum 自动处理依赖,快捷但版本固定;编译安装可自定义参数(如
./configure --prefix),但需手动解决依赖。
- yum 自动处理依赖,快捷但版本固定;编译安装可自定义参数(如
彻底卸载软件(含配置文件)的方法:
yum remove 包名保留配置文件,yum erase 包名彻底删除;或手动清理/etc/下的配置目录。
离线安装 RPM 包的命令及注意事项:
yum localinstall 包.rpm(自动处理依赖);需确保依赖包已下载,或提前用yum downloader --resolve 包名下载依赖。
查看软件安装路径的命令:
rpm -ql 包名(列出包内所有文件路径),或which 命令(查可执行文件路径)。
解决“依赖未满足”报错的方法:
① 启用对应 yum 仓库(如 EPEL);
② 手动下载缺失的依赖包;
③ 检查系统版本与包的兼容性。
22、日期和时区
- 修改系统时区为上海的命令:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,
- 或
timedatectl set-timezone Asia/Shanghai(systemd 环境)。
- NTP 与 Chrony 的区别:
- Chrony 更适合 网络不稳定环境(更快同步、低资源消耗),NTP 传统但兼容性好;CentOS 8+ 默认用 Chrony。
- date 命令设时间后不生效的原因:
- 可能被 NTP/Chrony 服务覆盖(需先停服务
systemctl stop chronyd),或时区配置错误。
- 可能被 NTP/Chrony 服务覆盖(需先停服务
- 解决虚拟机时间漂移的方法:
- ① 开启 VMware 时间同步(虚拟机设置→选项→时间同步);
- ② 配置 Chrony 自动校准。
- 查看时间同步状态的命令:
- Chrony 用
chronyc sources -v,NTP 用ntpq -p。
- Chrony 用
23、systemctl 命令
- systemctl 与 service 命令的区别:
- systemctl 是 systemd 工具(支持单元管理、依赖、状态查询),service 是兼容脚本(仅封装 systemctl,功能更弱)。
- 设置服务开机自启的命令及扩展:
systemctl enable 服务;若需禁止自启,用systemctl mask 服务(更彻底,阻止手动启动)。
- 查看服务依赖关系的命令:
systemctl list-dependencies 服务(递归显示依赖的单元)。
- 服务启动失败的排查步骤:
- ①
systemctl status 服务看日志; - ② 检查配置文件语法(如
nginx -t); - ③ 验证依赖服务是否正常。
- ①
- systemd target 的作用:
- 替代传统运行级别(如
multi-user.target对应 runlevel 3,graphical.target对应 runlevel 5),管理系统启动的单元集合。
- 替代传统运行级别(如
24、网络传输(nmap/netstat/ping/wget/curl)
- nmap 与 netstat 查端口的区别
- nmap 是 主动扫描工具(查目标机开放端口),netstat 查 本机监听/连接的端口(
netstat -tulnp)。
- nmap 是 主动扫描工具(查目标机开放端口),netstat 查 本机监听/连接的端口(
- ping 通但服务不可达”的原因:
- ① 防火墙封禁端口(如
firewalld阻止 80 端口); - ② 服务未启动,或监听地址为 127.0.0.1(仅本机可访问)。
- ① 防火墙封禁端口(如
- wget 和 curl 下载大文件的优势:
- wget 内置 断点续传(
-c),适合后台下载;curl 支持 复杂请求(如带 Cookie、POST 上传),更灵活。
- wget 内置 断点续传(
- 用 curl 测试 POST 接口的命令:
curl -X POST -d "username=test&password=123" http://api.example.com/login(表单提交),- 或传 JSON:
curl -H "Content-Type: application/json" -d '{"key":"value"}' URL。
- 查看端口占用进程的命令:
netstat -tulnp | grep 端口,或ss -tulnp | grep 端口;结合pidof 进程名验证。
25、进程管理(ps/kill)
- ps -ef 与 ps aux 的输出差异:
ps -ef是 System V 格式(列名如 UID、PID、PPID),
ps aux是 BSD 格式(列名如 USER、PID、%CPU),- 核心数据一致。
- kill -9 与 kill -15 的区别:
- -15(SIGTERM)优雅终止(允许进程清理资源),-9(SIGKILL)强制终止(无视进程状态,可能丢数据)。
- 批量杀死进程的方法:
- ①
pgrep 进程名 | xargs kill; - ②
pkill 进程名(更简洁,直接按名称杀进程)。
- ①
- 进程僵死(Zombie)的原因及解决:
- 子进程退出,父进程未调用
wait()回收;解决:kill 父进程(或重启服务),让 init 进程接管回收。
- 子进程退出,父进程未调用
- 查看进程资源占用的命令:
top(实时监控)、htop(更友好),或ps -eo %cpu,%mem,comm | sort -nr(按 CPU/内存排序)。
26、软链接(ln -s)
- 软链接与硬链接的核心区别:
- 软链接是特殊文件(存目标路径,Inode 不同),可跨分区、连目录;硬链接共享 Inode,不能连目录、跨分区。
- 删除软链接的正确操作:
rm -f 软链接名(不加/,否则会删除目标目录!如rm -f /link删链接,rm -f /link/会删目标目录)。
- 软链接指向的文件移动后,链接是否可用?
- 不可用!软链接存的是原路径,目标移动后路径失效,需重新创建链接。
- 创建目录软链接的命令:
ln -s 源目录 软链接名(硬链接无法创建目录链接,会报错)。
- 软链接的权限是否影响访问?
- 不影响!访问软链接时,实际权限由目标文件决定,软链接自身权限可忽略。
27、IP 和主机名
- 临时 vs 永久设置 IP 的区别:
- 临时用
ip addr add/ifconfig(重启网卡失效);
- 临时用
- 永久需编辑 网卡配置文件(
/etc/sysconfig/network-scripts/ifcfg-eth0),重启网络服务生效。
- 主机名的三种类型(systemd 环境):
- ① 静态(
/etc/hostname,永久); - ② 瞬态(
hostname 临时名,重启失效); - ③ 美观名(
hostnamectl set-hostname "Web Server",含空格,存/etc/machine-info)。
- ① 静态(
- 域名解析的优先级顺序:
- 先查
/etc/hosts,再查/etc/resolv.conf配置的 DNS 服务器(可通过nsswitch.conf调整顺序)。
- 先查
- VMware 桥接模式 vs NAT 模式的区别:
- 桥接模式:虚拟机获 独立公网 IP(与主机同网段);NAT 模式:虚拟机共享 主机 IP(通过主机转发上网,更安全)。
- 解决 DNS 解析慢的方法:
- ① 换高速 DNS(如
8.8.8.8、223.5.5.5); - ② 清理 DNS 缓存(
systemd-resolve --flush-caches); - ③ 优化
/etc/nsswitch.conf,优先用dns而非files。
- ① 换高速 DNS(如
28、主机状态(top、df、iostat、sar)
简述
top中load average的含义及“1/5/15分钟”数值的参考意义。load average表示系统平均负载(等待CPU/IO的进程数)。1分钟反映近期负载,15分钟反映长期趋势;若数值超过CPU核心数,可能系统过载。
说明
df -i的作用及适用场景。df -i显示磁盘分区的inode使用情况。当磁盘空间未满但无法创建文件时,需用它排查“inode用尽”问题。
iostat中tps指标代表什么?tps(Transactions Per Second)表示每秒IO事务数,反映磁盘IO操作频率。
如何实时监控
eth0的网络吞吐量(每秒采集1次,共5次)?- 执行
sar -n DEV -p 1 5 | grep eth0(-p显示接口别名,1间隔1秒,5采集5次,grep过滤eth0)。
- 执行
系统负载高时,如何结合
top、iostat判断是CPU还是磁盘IO瓶颈?- ① 用
top看%iowait(高则可能IO瓶颈)和CPU使用率; - ② 用
iostat看%util(磁盘利用率)、await(IO等待时间)。若%iowait和磁盘%util高,是IO瓶颈;若CPU使用率高,是CPU瓶颈。
- ① 用
29、环境变量(概念、env、PATH、$、自定义)
解释“环境变量”和“局部变量”的区别,并举例创建方式。
- 环境变量可被子进程继承,用
export VAR=value创建(如export PATH=/new/path:$PATH);局部变量仅当前Shell有效,子进程不继承,直接VAR=value创建(如local_var=test)。
- 环境变量可被子进程继承,用
命令提示“command not found”的可能原因及排查步骤?
- 原因:命令路径不在
PATH中,或命令不存在。步骤:①echo $PATH查看路径;②which 命令确认命令是否存在;③ 若存在,将路径加入PATH(export PATH=$PATH:/command/path)。
- 原因:命令路径不在
简述
$符号在Shell中的两种常见用法。- ① 引用环境变量(如
echo $HOME);② 命令替换(如current_dir=$(pwd))。
- ① 引用环境变量(如
如何临时设置
DEBUG=1并让子进程继承该变量?- 执行
export DEBUG=1,子进程会继承该环境变量。
- 执行
让
MY_CONFIG=/etc/myapp.conf对所有用户永久生效,写出配置步骤。- ① 编辑
/etc/profile; - ② 加入
export MY_CONFIG=/etc/myapp.conf; - ③ 执行
source /etc/profile让当前Shell生效(新登录用户自动加载)。
- ① 编辑
30、压缩打包(gzip、zip、bzip2、tar)
简述
tar -czf、tar -xzf、tar -tvf的作用。tar -czf用于打包并通过gzip压缩;tar -xzf用于解压gzip格式的tar包;tar -tvf用于查看tar包内的文件列表(不解压)。
gzip压缩文件后,原文件会发生什么变化?如何保留原文件?gzip会删除原文件,生成.gz压缩文件;若要保留原文件,需加-k选项(如gzip -k file)。
对比
zip和tar + gzip两种方式的优缺点。zip跨平台性好(Windows/Linux通用),但单文件压缩;tar + gzip适合打包目录,Linux生态更友好,但Windows需工具(如7-Zip)支持。
如何用
bzip2压缩文件并显示压缩进度?- 使用
bzip2 -v file(-v表示 verbose,显示详细过程,含压缩比、进度等)。
- 使用
命令
tar -cjf archive.tar.bz2 /data的作用是什么?- 将
/data目录打包并通过bzip2压缩,生成archive.tar.bz2文件。
- 将
31、用户管理(useradd、passwd、usermod、userdel)
- 简述
useradd和adduser的关系。- 在多数Linux发行版中,
adduser是useradd的符号链接(软链接),功能一致;adduser通常提供交互界面,useradd更适合脚本自动化。
- 在多数Linux发行版中,
- 普通用户修改自己密码时,对密码复杂度有要求吗?由什么决定?
- 有要求,由 PAM(可插拔认证模块) 配置(如
/etc/security/pwquality.conf)和系统密码策略决定(长度、字符类型等)。
- 有要求,由 PAM(可插拔认证模块) 配置(如
- 如何强制新用户首次登录必须修改密码?
- 使用
chage -d 0 username(设置密码过期时间为0,用户登录时会被强制改密码)。
- 使用
usermod -g group1 user1和usermod -G group2 user1的区别是什么?-g修改用户的主组;-G将用户添加到附加组(原附加组会被覆盖,若要追加需加-a,即-aG)。
- 执行
userdel -r testuser会产生哪些操作?- 会删除用户
testuser,同时删除其家目录(/home/testuser)和邮件目录(/var/spool/mail/testuser)。
- 会删除用户
32、用户组管理(groupadd、groupmod、groupdel、查看用户组)
- 简述
/etc/group文件的每行格式及含义。- 格式为
组名:密码占位符:GID:组成员。例如dev:x:1001:user1,user2表示组名dev,GID 1001,成员为user1和user2;“密码占位符”通常为x(实际密码存/etc/gshadow)。
- 格式为
- 为什么删除用户组
testgrp时提示“组非空”?如何解决?- 因为组内还有用户,需先移除组内所有成员(用
gpasswd -d user testgrp逐个删除,或usermod -G "" user清空用户附加组),再执行groupdel testgrp。
- 因为组内还有用户,需先移除组内所有成员(用
- 如何查看系统中GID为1000的用户组?
- 执行
grep ":1000:" /etc/group(匹配GID为1000的行)。
- 执行
groupmod -o -g 1000 devgrp中-o的作用是什么?-o表示允许GID重复(默认GID唯一,加-o可创建与其他组相同GID的组)。
- 新建用户时,如何指定其主组为已存在的
devgrp?- 使用
useradd -g devgrp newuser(-g指定主组)。
- 使用
33、管理用户组成员(gpasswd)
- 简述
gpasswd中-a、-d、-M、-A选项的作用。-a:添加单个用户到组;-d:从组中删除单个用户;-M:批量添加多个用户到组(用逗号或空格分隔);-A:设置组的管理员(允许该用户管理组成员)。
- 普通用户作为组管理员,能执行哪些
gpasswd操作?- 只能添加/删除组内的普通成员,无法修改组名、GID,也不能删除组本身。
- 如何查看组
testgrp的所有成员?- ① 查看
/etc/group中testgrp对应的行(如grep "testgrp" /etc/group); - ② 执行
getent group testgrp。
- ① 查看
- 对比
usermod -aG group user和gpasswd -a user group的异同。- 异:
usermod是修改用户属性(将用户添加到附加组),gpasswd是修改组的成员列表; - 同:最终效果都是用户加入组。
- 异:
- 执行
gpasswd -r testgrp的作用是什么?- 移除组
testgrp的密码(若组有密码,普通用户需密码才能加入;移除后,无需密码即可加入)。
- 移除组
34、用户和用户组配置文件
简述 Linux 中
/etc/passwd和/etc/shadow的作用。/etc/passwd存储用户基本信息(用户名、UID、GID、家目录、默认 Shell 等);/etc/shadow存储密码哈希及密码策略(过期时间等),权限更严格(仅 root 可读写),提升安全性。
说明
/etc/group文件的每行格式包含哪些字段。- 每行格式为
组名:组密码占位符:GID:组成员列表。组密码通常用x占位(实际存于/etc/gshadow);GID 是组 ID;成员列表为该组的用户(多用户用逗号分隔)。
- 每行格式为
35、免密登录
简述 SSH 免密登录的原理。
- 基于非对称加密(公钥-私钥对)。客户端生成密钥对后,公钥部署到服务端
~/.ssh/authorized_keys,私钥由客户端保管。登录时,服务端用公钥加密“挑战信息”,客户端用私钥解密并响应,验证通过则免密登录。
- 基于非对称加密(公钥-私钥对)。客户端生成密钥对后,公钥部署到服务端
生成 SSH 密钥对后,如何将公钥部署到远程服务端?
- 方法 1:用
ssh-copy-id -i 公钥文件 用户名@服务端IP,自动追加公钥到~/.ssh/authorized_keys;方法 2:手动复制公钥内容,登录服务端后,将内容追加到~/.ssh/authorized_keys(无文件则创建)。
- 方法 1:用
为什么
~/.ssh目录和authorized_keys文件需要严格的权限设置?- 为保障安全。
~/.ssh设为700(仅所有者可读写执行),authorized_keys设为600(仅所有者可读写),防止其他用户篡改公钥列表或非法读取私钥相关文件,避免未授权登录。
- 为保障安全。
36、文件属性和权限
简述 Linux 文件和目录的权限属性,以及
r、w、x分别对文件和目录的意义。- 权限分为所有者(user)、所属组(group)、其他用户(other)三类,每类包含读(
r)、写(w)、执行(x)权限。 - 对文件:
r允许读取内容;w允许修改内容;x允许执行文件(如运行程序)。 - 对目录:
r允许列出目录内文件;w允许在目录内创建/删除/重命名文件;x允许进入目录(如cd到该目录)。
- 权限分为所有者(user)、所属组(group)、其他用户(other)三类,每类包含读(
说明
chown和chgrp命令的作用及基本用法。chown:修改文件/目录的属主,也可同时改属组,格式如chown user:group 目标(例:chown alice:dev team.txt)。chgrp:仅修改文件/目录的属组,格式如chgrp group 目标(例:chgrp ops project/)。
解释 Linux 权限的数字表示法(如
755、644)的含义,并举例说明如何用chmod命令修改权限。- 数字规则:
r=4、w=2、x=1,三类用户(所有者、所属组、其他)的权限分别相加,形成三位数。 - 示例:
chmod 755 script.sh→ 所有者rwx(4+2+1=7),所属组和其他用户rx(4+1=5);chmod 644 doc.txt→ 所有者rw(4+2=6),所属组和其他用户r(4)。
- 数字规则:
系统安全加固中,“限制历史命令记录与退出清痕”的目的是什么?如何实现?
- 目的:防止历史命令中可能包含的敏感信息(如密码、系统路径)被窃取,降低安全风险。
- 实现:
- 限制历史条数:修改
/etc/profile,设置HISTSIZE=50(仅保留最近 50 条命令)。 - 退出清痕:编辑用户的
~/.bash_logout,添加history -c(清空当前会话历史缓存)和clear(清屏隐藏终端记录)。
- 限制历史条数:修改
简述强化密码策略的主要手段及对应的配置方式。
- 手段:控制密码有效期、最小长度、修改间隔、到期提示等。
- 配置:
- 修改
/etc/login.defs:设置PASS_MAX_DAYS(密码最长有效期)、PASS_MIN_DAYS(密码修改间隔)、PASS_MIN_LEN(密码最小长度)、PASS_WARN_AGE(到期前提示天数)。 - 对已有用户:用
chage命令单独配置(如chage -M 90 -m 1 -W 7 user,设置 90 天有效期、1 天修改间隔、到期前 7 天提示)。 - (可选)修改 PAM 配置(
/etc/security/pwquality.conf):强化密码复杂度(如长度、字符类型),该配置对root也有效。
- 修改
37、小结
简述
touch命令的作用及使用场景。touch命令主要用于创建新的空文件,或修改已有文件的访问时间和修改时间。场景包括:快速创建测试文件、更新文件时间戳以触发某些依赖时间的操作等。
说明
cat、more命令在查看文件时的主要区别。cat会一次性将文件内容全部输出到终端,适合小文件;more支持分页显示文件内容,通过空格翻页、q退出,适合大文件,避免内容“刷屏”。
解释Linux文件权限中
r、w、x对文件和目录的不同含义。- 对文件:
r可读取内容,w可修改内容,x可执行文件;对目录:r可列出目录内文件,w可在目录内创建/删除/重命名文件,x可进入目录(如cd)。
- 对文件:
如何使用
chmod命令将文件test.sh的权限设置为“所有者可执行,所属组可读,其他用户无权限”?- 命令为
chmod 540 test.sh。数字权限中,所有者5(r+x,即4+1)、所属组4(r)、其他用户0(无权限)。
- 命令为
简述
ps命令和top命令在查看进程时的区别。ps是“快照式”查看,显示命令执行时刻的进程状态;top是“动态监控”,实时刷新显示进程的资源占用等变化情况。
说明
kill命令中-9参数的作用。-9是强制终止信号(SIGKILL),会立即强制终止进程,不给予进程清理资源的机会,常用于无法通过普通kill终止的“顽固”进程。
top命令可以查看哪些系统关键指标?- 可查看 CPU 使用率、内存使用情况、进程的资源占用(如各进程的 CPU/内存占比)、系统负载等指标。
解释环境变量
PATH的作用。PATH环境变量存储了系统查找可执行命令的路径列表。当输入一个命令时,系统会按PATH中路径的顺序,依次查找该命令的可执行文件。
如何查看当前系统的所有环境变量?
- 执行
env命令,会列出所有环境变量及其对应的值。
- 执行
管道符
|的作用是什么?举一个使用管道符的示例。- 管道符用于将前一个命令的输出作为后一个命令的输入。示例:
ls -l | grep ".txt",将ls -l的结果筛选出包含.txt的行。
- 管道符用于将前一个命令的输出作为后一个命令的输入。示例:
说明输出重定向
>和>>的区别。>会覆盖目标文件的原有内容;>>会将内容追加到目标文件的末尾,不覆盖原有内容。
什么是命令替换?如何使用反引号实现命令替换?
- 命令替换是将命令的执行结果嵌入到另一个命令中。用反引号示例:
echo "当前日期:date",会将date命令的结果替换到字符串中。
- 命令替换是将命令的执行结果嵌入到另一个命令中。用反引号示例:
which命令的作用是什么?which命令用于查看系统中可执行命令的绝对路径,帮助确定当前使用的是哪个版本的命令。
简述
find命令的基本用法(如何按文件名搜索)。- 格式为
find 搜索路径 -name "文件名",例如find /home -name "test.txt",在/home目录下搜索名为test.txt的文件。
- 格式为
grep命令的作用是什么?如何在文件中筛选包含指定关键字的行?grep用于在文本中筛选匹配指定关键字的内容。命令格式:grep "关键字" 文件名,例如grep "error" log.txt筛选log.txt中含“error”的行。
说明
wc命令的主要功能。wc用于统计文件的行数(-l)、单词数(-w)、字节数(-c),默认同时输出这三项统计结果。
head和tail命令的作用分别是什么?tail -f有什么特殊用途?head显示文件开头部分内容(默认前10行);tail显示文件末尾部分内容(默认后10行)。tail -f可动态跟踪文件末尾的内容更新(如实时查看日志新增内容)。
简述
sed命令的工作原理。sed是流编辑器,工作原理是逐行读取待处理文本,将每行放入“模式空间”进行指定的编辑操作(如打印、删除、替换等),处理后将结果输出,直到所有行处理完毕。
如何使用
sed命令直接修改源文件中的内容(替换操作)?- 使用
-i选项结合替换脚本,格式为sed -i 's/原内容/新内容/g' 文件名。例如sed -i 's/old/new/g' test.txt,会将test.txt中所有“old”替换为“new”并直接修改源文件。
- 使用
列举至少3种Linux系统安全加固的措施,并说明其作用。
- ① 移除不必要用户:减少系统中潜在的“弱口令”或“冗余权限”用户,降低被攻击风险;
- ② 设置用户无操作自动退出(
TMOUT):防止用户离开后终端被他人冒用; - ③ 限制历史命令记录:避免敏感命令(如密码、路径)通过历史记录泄露。
38、磁盘管理
简述 MBR 和 GPT 分区表的核心区别。
- MBR 最多支持 4 个主分区,单分区最大 2TB,用 32 位地址;GPT 支持超 2TB 磁盘,最多 128 个分区,用 64 位地址,有冗余分区表,更可靠,且支持 UEFI 启动。
Linux 硬件设备(如硬盘、分区)的命名规则是什么?举例说明。
- SCSI/SATA 硬盘命名为
/dev/sdX(X 为字母,如/dev/sda是第一块硬盘);分区为/dev/sdXN(N 为数字,如/dev/sda1是第一块硬盘的第一个分区);NVMe 硬盘可能命名为/dev/nvme0n1。
- SCSI/SATA 硬盘命名为
什么是 inode?它在文件系统中的作用是什么?
- inode 是“索引节点”,存储文件的元数据(权限、所有者、大小、数据块指针等),系统通过 inode 定位文件的数据块(实际内容存在 data block 中)。
从新硬盘添加到 Linux 系统,到分区、格式化、挂载并开机自动挂载的完整流程是什么?
- ① 物理添加硬盘;
- ② 用
fdisk/parted创建分区(MBR/GPT); - ③ 用
mkfs格式化(如mkfs.ext4 /dev/sdb1); - ④ 临时挂载:
mount /dev/sdb1 /mnt/data; - ⑤ 配置自动挂载:编辑
/etc/fstab,添加(/dev/sdb1 /mnt/data ext4 defaults 0 0); - ⑥ 验证:
mount -a检查。
交换分区的作用是什么?如何创建并启用交换分区?
- 作用:物理内存不足时,临时将内存数据移到交换分区,释放物理内存。创建:用
fdisk建 swap 类型分区,或dd建交换文件;格式化:mkswap /dev/sdb2(分区)或mkswap /swapfile(文件);启用:swapon /dev/sdb2或swapon /swapfile。
- 作用:物理内存不足时,临时将内存数据移到交换分区,释放物理内存。创建:用
超级块(superblock)的作用是什么?若超级块损坏会有什么影响?
- 超级块存储文件系统的整体信息(如 inode 数量、块大小、文件系统类型)。若损坏,系统可能无法识别/挂载该文件系统,导致数据无法访问,需用备份超级块或
fsck修复。
- 超级块存储文件系统的整体信息(如 inode 数量、块大小、文件系统类型)。若损坏,系统可能无法识别/挂载该文件系统,导致数据无法访问,需用备份超级块或
Ext4 相比 Ext3 有哪些主要改进?
- 支持更大文件/分区(最大 1EB 文件、1EB 分区);引入延迟分配、多块分配提升性能;日志模式更高效;支持在线碎片整理。
什么是“挂载(mount)”?Linux 为什么需要挂载分区?
- 挂载是将文件系统(分区、光盘、网络存储等)关联到 Linux 目录树的某个目录,使内容可通过该目录访问。Linux 以统一目录树组织存储,因此需挂载才能访问不同设备的文件系统。
如何查看分区的文件系统类型?
- 用
blkid /dev/sdb1(显示块设备的 UUID、文件系统类型);或df -T(显示已挂载分区的文件系统类型);或lsblk -f。
- 用
解释 MBR 分区表中“逻辑分区”的概念,以及与主分区、扩展分区的关系。
- MBR 最多 4 个主分区,若需更多分区,需创建扩展分区,再在扩展分区内创建逻辑分区。逻辑分区是扩展分区的细分,编号从 5 开始(如
/dev/sda5);主分区和扩展分区编号为 1 - 4。
- MBR 最多 4 个主分区,若需更多分区,需创建扩展分区,再在扩展分区内创建逻辑分区。逻辑分区是扩展分区的细分,编号从 5 开始(如
简述 MBR 和 GPT 分区表的主要区别,以及各自的适用场景。
MBR(主引导记录):
- 最多支持 4个主分区(或3个主分区+1个扩展分区,扩展分区内可分多个逻辑分区);
- 单分区最大容量 2TB;
- 采用32位地址,兼容性好(支持旧版BIOS启动)。
- 适用:小容量磁盘(≤2TB)、需兼容老旧BIOS系统的场景。
GPT(全局唯一标识符分区表):
- 最多支持 128个分区;
- 单分区最大容量 超2TB(理论支持至8ZB);
- 采用64位地址,有冗余分区表(提高可靠性),支持UEFI启动。
- 适用:大容量磁盘(>2TB)、需多分区或UEFI启动的现代系统。
解释 Linux 文件系统中 inode、data block、superblock 的作用,以及它们之间的关系。
- inode(索引节点):存储文件的元数据(权限、所有者、大小、数据块指针等),每个文件对应一个 inode。
- data block(数据块):存储文件的实际内容,inode 通过指针指向这些块。默认大小4K
- superblock(超级块):存储文件系统的全局信息(如 inode 总数、块大小、文件系统类型等),是文件系统的“总控中心”。
关系:系统通过 superblock 识别文件系统整体信息 → 通过 inode 找到文件元数据和数据块指针 → 最终从 data block 读取文件内容。
描述从新硬盘添加到 Linux 系统,到最终能存储数据的完整操作流程(包括分区、格式化、挂载等步骤)。
流程如下:
物理/虚拟添加硬盘:将新硬盘接入服务器(或在虚拟机中添加虚拟磁盘)。
查看新硬盘:用
fdisk -l或lsblk确认新硬盘(如/dev/sdb)。创建分区:
- MBR 分区:
fdisk /dev/sdb→ 交互创建主分区/扩展分区。 - GPT 分区:
parted /dev/sdb mklabel gpt→ 交互或非交互创建分区。
- MBR 分区:
格式化分区:用
mkfs格式化(如mkfs.ext4 /dev/sdb1,将分区格式化为 Ext4)。临时挂载:
mount /dev/sdb1 /mnt/data(将分区挂载到/mnt/data目录)。验证存储:在
/mnt/data下创建文件(如touch /mnt/data/test.txt),测试读写。配置自动挂载:编辑
/etc/fstab,添加行(/dev/sdb1 /mnt/data ext4 defaults 0 0)→ 执行mount -a验证自动挂载。
什么是交换分区(swap)?它的主要作用是什么?如何创建并启用一个交换分区?
- 交换分区(swap):Linux 中用于“虚拟内存”的分区/文件,当物理内存不足时,将部分内存数据临时换出到 swap,释放物理内存供活跃进程使用。
- 作用:缓解物理内存不足,防止系统因内存耗尽崩溃。
- 创建与启用步骤:
- (可选)用
fdisk创建 swap 类型的分区(如/dev/sdb2)。 - 格式化 swap:
mkswap /dev/sdb2(若用文件,先dd if=/dev/zero of=/swapfile bs=1M count=2048创建 2GB 文件,再mkswap /swapfile)。 - 启用 swap:
swapon /dev/sdb2(或swapon /swapfile)。 - (可选)配置开机自动启用:在
/etc/fstab添加(/dev/sdb2 none swap defaults 0 0)。
- (可选)用
Linux 中如何实现分区的开机自动挂载?请说明配置文件和关键步骤。
通过配置
/etc/fstab文件实现,步骤如下:确认分区信息:用
blkid /dev/sdb1查看分区的 UUID、文件系统类型(如ext4)。编辑
/etc/fstab:添加一行,格式为UUID=xxx /挂载点 文件系统类型 选项 0 0(或用设备名/dev/sdb1替代 UUID,如/dev/sdb1 /mnt/data ext4 defaults 0 0)。字段含义:
UUID/设备名、挂载点、文件系统类型、挂载选项(defaults包含rw, suid, dev, exec, auto, nouser, async)、dump(备份标记)、fsck(检查顺序)。验证配置:执行
mount -a(无报错则配置正确),重启系统后分区会自动挂载。
简述硬链接与软链接的核心区别。
- 硬链接与源文件共享 inode,是同一文件的不同入口,仅能在同一文件系统创建,源文件删除后硬链接仍可访问;
- 软链接是独立文件,有自己的 inode,通过路径指向源文件,可跨文件系统,源文件删除后软链接失效。
RAID 0、RAID 1、RAID 5、RAID 10 的特点及适用场景分别是什么?
- RAID 0:条带化,无冗余,性能最优,适合对性能要求高但不要求冗余的场景(如临时缓存)。
- RAID 1:镜像,100% 冗余,读性能好、写性能一般,适合对数据安全性要求高的场景(如系统盘)。
- RAID 5:分布式校验,至少 3 块盘,兼顾性能与冗余,允许单块盘损坏,适合一般业务数据存储。
- RAID 10:先镜像(RAID 1)再条带(RAID 0),至少 4 块盘,性能与冗余俱佳,适合高 IO、高可靠性场景(如数据库)。
LVM 的主要优势是什么?
- LVM 可动态管理存储,将多个物理设备抽象为卷组(VG),再灵活划分为逻辑卷(LV);支持在线扩容/缩容逻辑卷,还能创建快照、简化存储扩展与管理。
正则表达式中元字符
.、``、+、?的作用分别是什么?.:匹配任意单个字符(除换行符)。- ``:匹配前面的元素0 次或多次。
+:匹配前面的元素1 次或多次。?:匹配前面的元素0 次或 1 次(可选)。
简述创建并挂载 10G 逻辑卷到
/data的步骤。步骤如下:
- 创建物理卷:
pvcreate /dev/sdb1(假设用/dev/sdb1分区)。 - 创建卷组:
vgcreate vg_data /dev/sdb1。 - 创建逻辑卷:
lvcreate -L 10G -n lv_data vg_data。 - 格式化:
mkfs.ext4 /dev/vg_data/lv_data。 - 挂载:
mount /dev/vg_data/lv_data /data;若需开机自动挂载,添加到/etc/fstab。
- 创建物理卷:
正则表达式
^[0-9]{3}-[0-9]{3}-[0-9]{4}$匹配什么格式?- 匹配类似
123-456-7890的格式,即北美电话号码(3位区号 + 3位前缀 + 4位号码)。
- 匹配类似
RAID 5 单块硬盘故障后,应如何处理?
- 需立即更换故障硬盘,随后让 RAID 阵列自动/手动重建,将数据恢复到新硬盘;重建过程中应减少阵列读写压力,确保数据完整恢复。
软链接的典型应用场景有哪些?
- 常用于跨文件系统链接文件、简化长路径访问(如将深目录链接到易访问位置)、版本管理(如链接不同版本的库文件)。
LVM 缩容逻辑卷时的注意事项是什么?
- 缩容前需卸载逻辑卷,用
e2fsck检查文件系统完整性;缩容后需调整文件系统大小(如resize2fs);过程存在数据丢失风险,需提前备份。
- 缩容前需卸载逻辑卷,用
写出一个匹配简单 IPv4 地址的正则表达式(不严格校验范围)。
- 基础匹配形式为
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$(更严谨的正则需校验每段为 0 - 255,此为简化版)。
- 基础匹配形式为




