【秋招必备】Linux面试题(2021最新版)
前言
作为 Java 的从业者,在找工作的时候,一定会被问及关于Linux 相关的知识。Linux知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目, 提供给大家学习参考。
小编分享的这份Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【已完结】
完整版Java面试题地址:2021最新面试题合集集锦。
1. 什么是Linux
Linux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署都是放在Linux操作系统上面。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2. Windows和Linux的区别
- Windows是微软开发的操作系统,民用操作系统,可用于娱乐、影音、上网。 Windows操作系统具有强大的日志记录系统和强大的桌面应用。好处是它可以帮我们实现非常多绚丽多彩的效果,可以非常方便去进行娱乐、影音、上网。
- Linux的应用相对单纯很多,没有什么绚丽多彩的效果,因此Linux的性能是非常出色的,可以完全针对机器的配置有针对性的优化,
- 简单来说Windows适合普通用户进行娱乐办公使用,Linux适合软件开发部署
3. Unix和Linux有什么区别?
4. 什么是 Linux 内核?
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- 系统内存管理
- 应用程序管理
- 硬件设备管理
- 文件系统管理
5. Linux的基本组件是什么?
就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和GUI,系统实用程序和应用程序。Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。
6. Linux 的体系结构
从大的方面讲,Linux 体系结构可以分为两块:
7. BASH和DOS之间的基本区别是什么?
8. Linux 开机启动过程?
- 1、主机加电自检,加载 BIOS 硬件信息。
- 2、读取 MBR 的引导文件(GRUB、LILO)。
- 3、引导 Linux 内核。
- 4、运行第一个进程 init (进程号永远为 1 )。
- 5、进入相应的运行级别。
- 6、运行终端,输入用户名和密码。
9. Linux系统缺省的运行级别?
- 关机。
- 单机用户模式。
- 字符界面的多用户模式(不支持网络)。
- 字符界面的多用户模式。
- 未分配使用。
- 图形界面的多用户模式。
- 重启。
10. Linux 使用的进程间通信方式?
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信号(signal) 。
- 3、消息队列。
- 4、共享内存。
- 5、信号量。
- 6、套接字(socket) 。
11. Linux 有哪些系统日志文件?
比较重要的是 /var/log/messages 日志文件。
12. Linux系统安装多个桌面环境有帮助吗?
通常,一个桌面环境,如KDE或Gnome,足以在没有问题的情况下运行。尽管系统允许从一个环境切换到另一个环境,但这对用户来说都是优先考虑的问题。有些程序在一个环境中工作而在另一个环境中无法工作,因此它也可以被视为选择使用哪个环境的一个因素。
13. 什么是交换空间?
交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
14. 什么是root帐户
root帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装Linux时都是默认帐户。
15. 什么是LILO?
LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。
16. 什么是BASH?
BASH是Bourne Again SHell的缩写。它由Steve Bourne编写,作为原始Bourne Shell(由/ bin /sh表示)的替代品。它结合了原始版本的Bourne Shell的所有功能,以及其他功能,使其更容易使用。从那以后,它已被改编为运行Linux的大多数系统的默认shell。
17. 什么是CLI?
18. 什么是GUI?
19. 开源的优势是什么?
开源允许你将软件(包括源代码)免费分发给任何感兴趣的人。然后,人们可以添加功能,甚至可以调试和更正源代码中的错误。它们甚至可以让它运行得更好,然后再次自由地重新分配这些增强的源代码。这最终使社区中的每个人受益。
20. GNU项目的重要性是什么?
这种所谓的自由软件运动具有多种优势,例如可以自由地运行程序以及根据你的需要自由学习和修改程序。它还允许你将软件副本重新分发给其他人,以及自由改进软件并将其发布给公众。
21. 简单 Linux 文件系统?
22. Linux 的目录结构是怎样的?
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
23. 什么是 inode ?
24. 什么是硬链接和软链接?
25. RAID 是什么?
26. 一台 Linux 系统初始化环境后需要做一些什么安全工作?
27. 什么叫 CC 攻击?什么叫 DDOS 攻击?
28. 什么是网站数据库注入?
29. Shell 脚本是什么?
一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
30.如何选择 Linux 操作系统版本?
31. 如何规划一台 Linux 主机,步骤是怎样?
32. 请问当用户反馈网站访问慢,你会如何处理?
33. Linux 性能调优都有哪几种方法?
- 1、Disabling daemons (关闭 daemons)。
- 2、Shutting down the GUI (关闭 GUI)。
- 3、Changing kernel parameters (改变内核参数)。
- 4、Kernel parameters (内核参数)。
- 5、Tuning the processor subsystem (处理器子系统调优)。
- 6、Tuning the memory subsystem (内存子系统调优)。
- 7、Tuning the fifile system (文件系统子系统调优)。
- 8、Tuning the network subsystem(网络子系统调优)。
34. 基本命令
- cd (change directory:英文释义是改变目录)切换目录
- pwd (print working directory:显示当前工作目录的绝对路径)
- ls (ls:list的缩写,查看列表)查看当前目录下的所有文件夹(ls 只列出文件名或目录名)
- ll (ll:list的缩写,查看列表详情)查看当前目录下的所有详细信息和文件夹(ll 结果是详细,有时间,是否可读写等信息)
- touch (touch:创建文件)创建文件
- mkdir (mkdir:创建目录) 创建目录
- cat (concatenate:显示或把多个文本文件连接起来)查看文件命令(可以快捷查看当前文件的内容)(不能快速定位到最后一页)
- more (more:更多的意思)分页查看文件命令(不能快速定位到最后一页)
- tail(尾巴) 查看文件命令(看最后多少行)
- cp(copy单词缩写,复制功能)
- mv(move单词缩写,移动功能,该文件名称功能)
- rm(remove:移除的意思)删除文件,或文件夹
- fifind (fifind:找到的意思)查找指定文件或目录
- 回车:向下n行,需要定义,默认为1行。
- 空格键:向下滚动一屏或Ctrl+F
- B:返回上一层或Ctrl+B
- q:退出more
- less -m 显示类似于more命令的百分比。
- less -N 显示每行的行号。(大写的N)
- 两参数一起使用如:less -mN 文件名,如此可分页并显示行号。
- 空格键:前下一页或page down。
- 回车:向下一行。
- b:后退一页 或 page up。
- q:退出。
- d:前进半页。
- u:后退半页
- tail -10 ;文件名 看最后10行
- cp /opt/java/java.log /opt/logs/ ;把java.log 复制到/opt/logs/下
- cp /opt/java/java.log /opt/logs/aaa.log ;把java.log 复制到/opt/logs/下并且改名为
- aaa.log
- cp -r /opt/java /opt/logs ;把文件夹及内容复制到logs文件中
- mv /opt/java/java.log /opt/mysql/ ;移动文件到mysql目录下
- mv java.log mysql.log ;把java.log改名为mysql.log
- -f或--force 强制删除文件或目录。删除文件不包括文件夹的文件
- -r或-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并删除。
- -rf 强制删除文件夹及内容
- rm 文件名 ;安全删除命令 (yes删除 no取消)
- rm -rf 强制删除文件夹及内容
- rm -rf * 删除当前目录下的所有内容。
- rm -rf /* 删除Linux系统根目录下所有的内容。系统将完蛋。vi (VIsual:视觉)文本编辑器 类似win的记事本 (操作类似于地下的vim命令,看底下vim 的操
- 作)
- vim (VI IMproved:改进版视觉)改进版文本编辑器 (不管是文件查看还是文件编辑 按 Shift + 上或
- 者下可以上下移动查看视角)
- | 管道命令(把多个命令组合起来使用)
- * 表示0~多个任意字符。
- find -name 文件名;按照指定名称查找在当前目录下查找文件
- find / -name 文件名按照指定名称全局查找文件
- find -name '*文件名' ;任意前缀加上文件名在当前目录下查找文件
- find / -name '*文件名*' ;全局进行模糊查询带文件名的文件
- 输入”vim 文件名” 打开文件,刚刚时是”一般模式”。
- 一般模式:可以浏览文件内容,可以进行文本快捷操作。如单行复制,多行复制,单行删除,多行删除,(退
- 出)等。
- 插入模式:可以编辑文件内容。
- 底行模式:可以进行强制退出操作,不保存 :q!
- 可以进行保存并退出操作 :wq
- 按下”i”或”a”或”o”键,从”一般模式”,进入”插入模式(编辑模式)”。
- 在编辑模式下按”Esc” 即可到一般模式
- 在一般模式下按”:”,冒号进入底行模式。
- 在一般模式下的快捷键
- dd ;删除一整行
- X ;向前删除 等同于windowns系统中的删除键
- x ;向后删除和大写x相反方向
- Ctrl + f ;向后看一页
- Ctrl + b ;向前看一页
- u ;撤销上一步操作
- /word ;向下查找word关键字 输入:n查找下一个,N查找上一个(不管是哪个查找都是全局查找 只不过
- n的方向相反)
- ?log ;向上查找log关键字 输入:n查找上一个,N查找下一个
- :1,90s/redis/Redis/g ;把1-90行的redis替换为Redis。语法n1,n2s/原关键字/新关键字/g,n1
- 代表其实行,n2代表结尾行,g是必须要的
- :0 ;光标移动到第一行
- 😒 ;光标移动到最后一行
- :300 ;光标移动到300行,输入多少数字移动到多少行
- :w ;保存
- :w! ;强制保存
- :q ;退出
- :q! ;强制退出
- 5dd ;删除后面5行,打一个参数为自己填写
- 5x ;删除此光标后面5个字符
- d1G ;删除此光标之前的所有
- d0 ;从光标当前位置删除到此行的第一个位置
- yy ;复制
- p ;在光标的下面进行粘贴
- P ;在光标的上门进行粘贴grep (grep :正则表达式)正则表达式,用于字符串的搜索工作(模糊查询)。不懂可以先过
- yum install -y lrzsz 命令(实现win到Linux文件互相简单上传文件)
- tar (解压 压缩 命令)
- ps (process status:进程状态,类似于windows的任务管理器)
- 管道命令的语法:命令1 | 命令2 | 命令3。
- 单独使用:
- grep String test.java ;在test.java文件中查找String的位置,返回整行
- 一般此命令不会单独使用下面列几个常用的命令(地下通过管道命令组合起来使用)
- ps aux|grep java ;查找带java关键字的进程
- ll |grep java ;查找带java关键字的文件夹及文件
-
(实际上就是在Linux系统中下载了一个插件)下了了此安装包后就可以实现win系统到linux之间拉文件拉
- 文件
-
等待下载完了就可以输入:
- rz 从win系统中选择文件上传到Linux系统中
- sz 文件名 选择Linux系统的文件复制到win系统中
- 常用的组合命令:
- -z 是否需要用gzip压缩。
- -c 建立一个压缩文件的参数指令(create) –压缩
- -x 解开一个压缩文件的参数指令(extract) –解压
- -v 压缩的过程中显示文件(verbose)
- -f 使用档名,在f之后要立即接档中(file)
- 常用解压参数组合:zxvf
- 常用压缩参数组合:zcvf
- 解压命令:
- tar -zxvf redis-3.2.8.tar.gz ;解压到当前文件夹
- tar -zxvf redis-3.2.8.tar.gz -C /opt/java/ ;解压到指定目录
- 压缩命令:(注意 语法有点反了,我反正每次都搞反)
- tar -zcvf redis-3.2.8.tar.gz redis-3.2.8/ ;语法 tar -zcvf 压缩后的名称 要压缩的
- 文件
- tar -zcvf 压缩后的文件(可指定目录) 要压缩的文件(可指定目录)
- 常用组合:ps -ef 标准的格式查看系统进程
- ps -aux BSD格式查看系统进程
- ps -aux|grep redis BSD格式查看进程名称带有redis的系统进程(常用技巧)
- //显示进程的一些属性,需要了解(ps aux)
- USER //用户名
- PID //进程ID号,用来杀死进程的
- %CPU //进程占用的CPU的百分比
- %MEM //占用内存的的百分比clear 清屏命令。(强迫症患者使用)
- ifconfifig命令
- ping (用于检测与目标的连通性)语法:ping ip地址
- free 命令 (显示系统内存)
- top 命令
- netstat 命令
- VSZ //该进程使用的虚拟內存量(KB)
- RSS //该进程占用的固定內存量(KB)
- STAT //进程的状态
- START //该进程被触发启动时间
- TIME //该进程实际使用CPU运行的时间
- kill 命令用来中止一个进程。(要配合ps命令使用,配合pid关闭进程)
- (ps类似于打开任务管理器,kill类似于关闭进程)
- kill -5 进程的PID ;推荐,和平关闭进程
- kill -9 PID ;不推荐,强制杀死进程
- 用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,使用权限是超级用户。(一般是用来查看的,很少更改)
35.Linux 中主要有哪几种内核锁?
36.Linux 中的用户模式和内核模式是什么含意?
37.怎样申请大块内核内存?
38.用户进程间通信主要哪几种方式?
39.通过伙伴系统申请内核内存的函数有哪些?
在物理页面管理上实现了基于区的伙伴系统(zone based buddy system)。对不同区的内存使用单独的伙伴系统(buddy system)管理,而且独立地监控空闲页。相应接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等。
40.Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)
struct super_block,struct inode,struct file,struct dentry;
41.对文件或设备的操作函数保存在那个数据结构中?
struct file_operations
42.Linux 中的文件包括哪些?
执行文件,普通文件,目录文件,链接文件和设备文件,管道文件。
43.创建进程的系统调用有那些?
clone(),fork(),vfork();系统调用服务例程:sys_clone,sys_fork,sys_vfork;
44.调用 schedule()进行进程切换的方式有几种?
- 1.系统调用 do_fork();
- 2.定时中断 do_timer();
- 3.唤醒进程 wake_up_process
- 4.改变进程的调度策略 setscheduler();
- 5.系统调用礼让 sys_sched_yield();
45.Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
Liunx 调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用 CPU 资源,导致其他进程不能占有 CPU, 所以引用动态优先级概念。
46.进程调度的核心数据结构是哪个?
struct runqueue
47.如何加载、卸载一个模块?
insmod 加载,rmmod 卸载
48.模块和应用程序分别运行在什么空间?
模块运行在内核空间,应用程序运行在用户空间
49.Linux 中的浮点运算由应用程序实现还是内核实现?
应用程序实现,Linux 中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后 调用,不能被内核链接调用。这些运算是在应用程序中运行的,然后再把结果反馈给系统。 Linux 内核如果一定要进行浮点运算,需要在建立内核时选上 math-emu,使用软件模拟计算 浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的应用程序,使得这些应用程序在做浮点运算的时候也使用 math-emu,大大的降低了效率。
50.模块程序能否使用可链接的库函数?
模块程序运行在内核空间,不能链接库函数。
51.TLB 中缓存的是什么内容?
TLB,页表缓存,当线性地址被第一次转换成物理地址的时候,将线性地址和物理地址的对应 放到 TLB 中,用于下次访问这个线性地址时,加快转换速度。
52.Linux 中有哪几种设备?
字符设备和块设备。网卡是例外,他不直接与设备文件对应,mknod 系统调用用来创建设备文件。
53.字符设备驱动程序的关键数据结构是哪个?
字符设备描述符 struct cdev,cdev_alloc()用于动态的分配 cdev 描述符,cdev_add()用于注册一个 cdev 描述符,cdev 包含一个 struct kobject 类型的数据结构它是核心的数据结构
54.设备驱动程序包括哪些功能函数?
open(),read(),write(),llseek(),realse();
55.如何唯一标识一个设备?
Linux 使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用 dev_t 来表示设备编号,一般它是 32 位长度,其中 12 位用于表示主设备号,20 位用于表示次设备号, 利用 MKDEV(int major,int minor);用于生成一个 dev_t 类型的对象。
56.Linux 通过什么方式实现系统调用?
靠软件中断实现的,首先,用户程序为系统调用设置参数,其中一个编号是系统调用编号,参数设置完成后,程序执行系统调用指令,x86 上的软中断是有 int 产生的,这个指令会导致一个异常,产生一个事件,这个事件会导致处理器跳转到内核态并跳转到一个新的地址。并开始处理那里的异常处理程序,此时的异常处理就是系统调用程序。
57.Linux 软中断和工作队列的作用是什么?
Linux 中的软中断和工作队列是中断处理。
- 1.软中断一般是“可延迟函数”的总称,它不能睡眠,不能阻塞,它处于中断上下文,不能进城切换,软中断不能被自己打断,只能被硬件中断打断(上半部),可以并发的运行在多个 CPU 上。所以软中断必须设计成可重入的函数,因此也需要自旋锁来保护其数据结构。
- 2.工作队列中的函数处在进程上下文中,它可以睡眠,也能被阻塞,能够在不同的进程间切换。已完成不同的工作。可延迟函数和工作队列都不能访问用户的进程空间,可延时函数在执行时不可能有任何正在运行的进程,工作队列的函数有内核进程执行,他不能访问用户空间地址。