Java面试题(最全、最新)九、Linux

发布于 2025-08-26 15:32:14 浏览 30 次

九、Linux

1. 什么是Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix 的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工 具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网 络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2. Unix和Linux有什么区别?
Linux和Unix都是功能强大的操作系统,都是应用广泛的服务器操作系统,有很 多相似之处,甚至有一部分人错误地认为Unix和Linux操作系统是一样的,然 而,事实并非如此,以下是两者的区别。

  • 开源性 Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知 识产权保护的传统商业软件,使用需要付费授权使用。
  • 跨平台性 Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系 统跨平台性能较弱,大多需与硬件配套使用。
  • 可视化界面 Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
  • 硬件环境 Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛 刻,按照难度较大。
  • 用户群体 Linux的用户群体很广泛,个人和企业均可使用;Unix的用户群体比较窄,多是 安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使 用,如Sun等。

相比于Unix操作系统,Linux操作系统更受广大计算机爱好者的喜爱,主要原因 是Linux操作系统具有Unix操作系统的全部功能,并且能够在普通PC计算机上实 现全部的Unix特性,开源免费的特性,更容易普及使用!
3. 什么是 Linux 内核?
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要 时分配硬件,并根据需要执行软件。

系统内存管理

应用程序管理

硬件设备管理

文件系统管理

4. Linux的基本组件是什么?
就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和 GUI,系统实用程序和应用程序。Linux比其他操作系统更具优势的是每个方面 都附带其他功能,所有代码都可以免费下载。

5. Linux 的体系结构
从大的方面讲,Linux 体系结构可以分为两块:
image.png

  • 用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
  • 内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-Dependent Kernel Code) 。

为什么 Linux 体系结构要分为用户空间和内核空间的原因?

  • 现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问 的寄存器不同。
  • Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。

用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成 用户空间到内核空间的转移:
1)系统调用;
2)硬件中断。

6. Linux 有哪些系统日志文件?
比较重要的是 /var/log/messages 日志文件。 该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入 侵。

另外,如果胖友的系统里有 ELK 日志集中收集,它也会被收集进去。

7. 什么是CLI?
命令行界面(英语:command-line interface,缩写]:CLI)是在图形用户界面得到普及之前使用 为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面

(CUI)通常认为,命令行界面
(CLI)没有图形用户界面
(GUI)那么方便用户操作

因为命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。

8. Linux 的目录结构是怎样的?
这个问题,一般不会问。更多是实际使用时,需要知道。

Linux 文件系统的结构层次鲜明,就像一棵倒立的树, 顶层是其根目录:
image.png
常见目录说明:

  • /bin: 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
  • /etc: 存放系统管理和配置文件;
  • /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
  • /usr : 用于存放系统应用程序;
  • /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把
  • tomcat等都安装到这里;
  • /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
  • /root: 超级用户(系统管理员)的主目录(特权阶级o);
  • /sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
  • /dev: 用于存放设备文件;
  • /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
  • /boot: 存放用于系统引导时使用的各种文件;
  • /lib : 存放着和系统运行相关的库文件 ;
  • /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
  • /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
  • /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。

9.什么是 inode ?
一般来说,面试不会问 inode 。但是 inode 是一个重要概念,是理解 Unix/Linux 文件系统和硬盘储存的基础。

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的 小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的 小单位。"块"的大小, 常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

10.一台 Linux 系统初始化环境后需要做一些什么安全工作?
添加普通用户登陆,禁止 root 用户登陆,更改 SSH 端口号。修改 SSH 端口不一定绝对哈。

当然,如果要暴露在外网,建议改下:

  • 服务器使用密钥登陆,禁止密码登陆。
  • 开启防火墙,关闭 SElinux ,根据业务需求设置相应的防火墙规则。
  • 装 fail2ban 这种防止 SSH 暴力破击的软件。
  • 设置只允许公司办公网出口 IP 能登陆服务器(看公司实际需要)
  • 也可以安装 VPN 等软件,只允许连接 VPN 到服务器上。
  • 只允许有需要的服务器可以访问外网,其它全部禁止。
  • 做好软件层面的防护。
  • 设置 nginx_waf 模块防止 SQL 注入。
  • 把 Web 服务使用 www 用户启动,更改网站目录的所有者和所属组为 www 。

11.什么叫 CC 攻击?什么叫 DDOS 攻击?
攻击:即是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。

CC 攻击:主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。

DDOS 攻击:DDoS攻击一般指分布式拒绝攻击,是一种攻击者操纵大量计算机,或位于不同位置的多个攻击者,在短时间内通过将攻击伪装成大量的合法请求,向服务器资源发动的攻击,导致请求数量超过了服务器的处理能力,造成服务器运行缓慢或者宕机。通常由僵尸网络用于执行此恶意任务,由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击。

怎么预防 CC 攻击和 DDOS 攻击?
防 CC、DDOS 攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。

流量清洗这一块,主要是买 ISP 服务商的防攻击的服务就可以,机房一般有空余流量,我们一般是买服务,毕竟攻击不会是持续长时间。

12.请问当用户反馈网站访问慢,你会如何处理?
有哪些方面的因素会导致网站网站访问慢?
1、服务器出口带宽不够用

本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。
跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。
2、服务器负载过大,导致响应不过来
可以从两个方面入手分析:

  • 分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。
  • 如果这二者都正常,再去使用 sar 命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。

3、数据库瓶颈

  • 如果慢查询比较多。那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
  • 如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等。然后,也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。

4、网站开发代码没有优化好

  • 例如 SQL 语句没有优化,导致数据库读写相当耗时。

针对网站访问慢,怎么去排查?
1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。不要上来就看服务端的问题。一定要从源头开始,逐步逐步往下。
2、如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢。
3、针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。
4、如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看 MySQL慢查询的日志,看看是不是某条 SQL 语句查询慢,导致网站访问慢。怎么去解决?

  • 如果是出口带宽问题,那么久申请加大出口带宽。
  • 如果慢查询比较多,那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
  • 如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等等。然后也可以搭建MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
  • 申请购买 CDN 服务,加载用户的访问。
  • 如果访问还比较慢,那就需要从整体架构上进行优化咯。做到专角色专用,多台服务器提供同一个服务。

13. 命令
1、文件管理命令 cat 命令
cat 命令用于连接文件并打印到标准输出设备上。

cat 主要有三大功能:

1.一次显示整个文件:

cat filename

2.从键盘创建一个文件

cat > filename

只能创建新文件,不能编辑已有文件

3.将几个文件合并为一个文件:

cat file1 file2 > file

2. chmod 命令
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以控制文件如何被他人所调用。

用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。

3. chown 命令
chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

1    ‐c 显示更改的部分的信息
2    ‐R 处理指定目录及子目录

实例:

(1) 改变拥有者和群组 并显示改变信息

1 chown ‐c mail:mail log2012.log

(1) 改变文件群组

(2) 改变文件夹及子文件目录属主及属组为 mail

1 chown ‐cR mail: test/

4. cp 命令
将源文件复制至目标文件,或将多个源文件复制至目标目录。

注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!

1    ‐i 提示
2    ‐r 复制目录及目录内所有项目
3    ‐a 复制的文件与原文件时间一样

实例:

(1) 复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。

1 cp ‐ai a.txt test

(2) 为 a.txt 建议一个链接(快捷方式)

1 cp ‐s a.txt link_a.txt

5.find 命令
用于在文件树中查找文件,并作出相应的处理。

6. head 命令
head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。常用参数:

1 ‐n<行数> 显示的行数(行数为复数表示从最后向前数)

实例:

(1) 显示 1.log 文件中前 20 行

1 head 1.log ‐n 20

(2) 显示 1.log 文件前 20 字节

1 head ‐c 20 log2014.log

(3) 显示 t.log 后 10 行

1 head ‐n ‐10 t.log

7.mv 命令
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。

当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

实例:

(1) 将文件 test.log 重命名为 test1.txt

1 mv test.log test1.txt

(2) 将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中

1 mv llog1.txt log2.txt log3.txt /test3

(3) 将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖

1 mv ‐i log1.txt log2.txt

(4) 移动当前文件夹下的所有文件到上一级目录

1 mv * ../

8. rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

1 rm[选项] 文件…

实例:

(1) 删除任何 .log 文件,删除前逐一询问确认:

1 rm ‐i *.log

(2) 删除 test 子目录及子目录中所有档案删除,并且不用一一确认:

1 rm ‐rf test

(3) 删除以 -f 开头的文件

1 rm ‐‐ ‐f*

9.tail 命令
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。常用参数:

1    ‐f 循环读取(常用于查看递增的日志文件)
2    ‐n<行数> 显示行数(从后向前)

(1)循环读取逐渐增加的文件内容

1 ping 127.0.0.1 > ping.log &

后台运行:可使用 jobs -l 查看,也可使用 fg 将其移到前台运行。

1 tail ‐f ping.log

10. vim 命令
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

11. mkdir 命令
mkdir 命令用于创建文件夹。

可用选项:

-m: 对新建目录设置存取权限,也可以用 chmod 命令设置;

-p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

(1) 当前工作目录下创建名为 t的文件夹

1 mkdir t

(2) 在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建:

1 mkdir ‐p /tmp/test/t1/t

12.pwd 命令
pwd 命令用于查看当前工作目录路径。

实例:

(1) 查看当前路径

1 pwd

(2) 查看软链接的实际路径

1 pwd

13.rmdir 命令
从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

注意:不能删除非空目录实例:

(1)当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除:

1 rmdir ‐p parent/child/child11

14. netstat 命令
Linux netstat命令用于显示网络状态。

15. ping 命令
Linux ping命令用于检测主机。

执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。指定接收包的次数

ping ‐c 2 www.baidu.com
0 条评论

发布
问题