高频Linux 面试题
| gcc的编译过程 | 预处理——编译——汇编——链接 |
| Linux文件类型 | 普通文件,目录文件,管道文件,链接文件,块设备文件,字符设备文件,套接字文件 |
| Linux系统下的软链接和硬链接有什么异同 | linux中软链接和硬链接的区别: 1、软链接以路径的形式存在,硬链接以文件副本的形式存在,但不占用实际空间; 2、软链接可以跨文件系统 ,硬链接不可以; 3、软链接可以对一个不存在的文件名进行链接,硬链接只有在同一个文件系统中才能创建; 4、软链接可以对目录进行链接,硬链接不允许给目录创建链接。 |
| Linux内核子系统有哪几个 | Linux内核有五大核心子系统,分别是进程调度系统、虚拟文件系统(VFS)、内存管理单元(MMU)、网络单元、进程间通信(IPC)。 |
| Linux的Shell是什么?常见的Shell有哪些? | Linux的Shell是指用户与操作系统内核进行交互的命令行接口,它接收用户输入的命令并将其解释执行。Shell是一个解释器,可以解释和执行用户输入的命令,同时也提供了许多内置的命令和功能,以及对系统调用和程序的调用支持。 在Linux系统中常见的Shell包括但不限于以下几种: 1. Bash(Bourne Again Shell):Bash是Linux系统中最常用的Shell,也是大多数Linux发行版的默认Shell。它是Bourne Shell的扩展版本,提供了更多功能和改进,支持脚本编程和命令行操作。 2. Zsh(Z Shell):Zsh是一个功能丰富的Shell,提供了很多高级功能和定制选项,如自动补全、主题定制、插件支持等。Zsh相对于Bash来说更加强大和灵活。 3. Fish(Friendly Interactive Shell):Fish是一个用户友好的Shell,具有语法高亮、自动补全、友好的错误提示等特性,使得命令行操作更加简单和直观。 4. Dash:Dash是一个轻量级的Shell,专注于快速执行命令和脚本,适用于系统启动脚本等需要高效执行的场景。 5. Ksh(Korn Shell):Ksh是Bourne Shell的改进版本,提供了更多的功能和特性,适用于编写复杂的脚本和程序。 6. Csh(C Shell):Csh是一种C语言风格的Shell,提供了类似C语言的语法和特性,适用于一些特定的需求。 |
| ELF中包含了哪些内容 | ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。 (1)由Section头组成的集合称为Section头表,由Program头组成的集合称为Program头表。注意:数个连续的头称之为头表,头表是虚拟出来的定义,文件中不存在头表,只有头。 (2)一个Section头指向一个Section,Section头中包括所指向Section的名字、类型、其在ELF文件中的偏移地址、大小等信息。 (3)一个Program头指向一个Segment,Program头中包括所指向Segment的类型、其在ELF文件中的偏移地址、大小,映射到内存的虚拟地址等信息。一个Segment由一系列连续的Section构成,连续的Section拥有相同的权限,如只读、读写、可读可执行等; (4)一个ELF头内包含有:Section头表的在ELF文件中的偏移地址、单个Section头的大小、Section头表中Section头的个数;Program头表的在ELF文件中的偏移地址、单个Program头的大小、Program头表中Program头的个数;该ELF文件的类型,若是可执行文件的话,还包含的有程序的入口地址。 |
| Linux中有哪些常用命令 | 1.alias 给命令起别名 2.cat 显示文本内容 3.cd 修改当前路径 4.chmod 修改文件访问权限 5.chown 修改文件所有者 6.clear 清屏 7.cp 拷贝文件 8.df 查看文件系统信息 9.diff 比较两文件的异同 10.dpkg 手工安装软件包 11.echo 显示字符串 12.find 查找文件 13.grep 查找字符串 14.ifconfig 查看或修改网络 15.kill 发送信号 16.In 创建链接文件 17.man 查找帮助信息 18.mount 挂载或卸载分区 19.more 分屏显示信息 20.ps 查看系统进程信息 21.sort 排序 22.tar 归档或释放 23.压缩或解压 24.unig 去掉相邻重复的行 25.which查找所在路径 |
| 查看system-V IPC的命令 | 查看IPC 信号量对象命令: ipcs -s 查看IPC 共享内存对象命令:ipcs -m 查看IPC 消息队列对象命令:ipcs -q 查看IPC 全部对象命令: ipcs -a 或者 ipc -pms 删除IPC 信号量对象命令:ipcrm -s semid 删除IPC 共享内存对象命令:ipcrm -m shmid 删除IPC 消息队列对象命令:ipcrm -q msgid |
| 分页和分段都是计算机系统中用于管理内存的方式。它们的主要区别在于: 1.物理单位不同: 分页是信息的物理单位,是一种离散的分配方式,以提高内存的利用率; 分段是信息的逻辑单位,是一种连续的分配方式,的目的是为了更好地满足用户的需求。 2.地址空间不同: 分页系统只有一个线性的地址空间; 分段系统具有两个地址空间,一个是段内地址空间,另一个是段地址空间。 3.地址表示不同: 分页系统中,地址被表示为页号和页内地址; 分段系统中,地址被表示为段号和段内地址。 4.实现方式不同: 分页是为实现离散分配方式而设计的,由机器硬件实现; 而分段是为实现连续分配方式而设计的,通常由编辑程序在源程序编辑时根据信息的性质进行划分。 | |
| ubuntu系统的启动步骤 | 1、BIOS自检与加载硬盘:BIOS(基本输入输出系统)进行自检,确保硬件设备正常工作,并加载指定的启动设备,通常是硬盘。 2、读取MBR与引导:BIOS读取硬盘上的主引导记录(MBR),该记录包含了磁盘分区表和一个引导程序(如GRUB)。 3、GRUB引导加载:GRUB(Grand Unified Bootloader)引导加载程序接管启动过程,并显示一个引导菜单。用户可以选择要启动的Ubuntu内核版本或其他操作系统。 4、加载内核:根据用户在GRUB菜单中的选择,Ubuntu内核被加载到内存中。 5、初始化系统:内核启动后,会进行一系列的初始化操作,包括设置内存管理、设备驱动等。 6、启动init进程:Ubuntu使用systemd或Upstart作为初始化系统,取代了传统的init进程。systemd或Upstart会管理系统的服务和进程,并根据配置文件决定启动哪些服务。 7、运行级别与服务启动:根据配置,systemd或Upstart会启动相应的服务,并设置运行级别。这些服务包括网络服务、文件系统挂载、图形界面等。 8、用户登录:系统启动完成后,会进入登录界面,等待用户输入用户名和密码进行登录。 |
| 什么是虚拟内存和页面置换 | 虚拟内存是一种计算机系统内存管理技术,它使得应用程序认为它拥有连续可用的内存,即一个连续完整的地址空间。但实际上,这个连续的内存空间是被分隔成多个物理内存碎片,并且部分数据会暂时存储在外部磁盘存储器上,在需要时进行数据交换。在Windows操作系统中,虚拟内存实际上是硬盘上的一部分空间,用于作为内存使用,这部分空间在硬盘上的文件名是PageFile.Sys。 页面置换算法则是操作系统中用于选择被换出的页面的一种策略。当物理内存空间不足以容纳所有需要运行的程序时,操作系统就会使用页面置换算法来决定哪些页面(即内存中的一部分)应该被移出内存,以便为新的页面腾出空间。常见的页面置换算法包括最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使用置换算法(LRU)和时钟置换算法(CLOCK)等。这些算法各有特点,最佳置换算法选择下一次访问时间最长的页面进行置换,先进先出置换算法选择最先进入内存的页面进行置换,最近最久未使用置换算法选择最长时间未被访问的页面进行置换,而时钟置换算法则是基于环形链表的算法,通过检查页面的访问位来进行置换。 |
| 用户态和内核态使用场景的区别 | 用户态主要用于运行用户程序,提供应用程序运行的空间。在用户态下,CPU不允许独占,也就是说CPU能够被其他程序获取。为了访问内核管理的资源,如CPU、内存、I/O等,用户态下的程序需要通过系统调用接口。这是因为处于用户态的程序没有直接访问硬件和某些受保护内存的权限,这样的设计主要是为了系统的安全和稳定。 而内核态则主要用于运行操作系统程序和操作硬件。在内核态下,CPU可以访问任意的数据,包括外围设备,如网卡、硬盘等。它还可以从一个程序切换到另一个程序,并且不会发生CPU抢占的情况。此外,内核态可以操作虚拟空间地址的完整范围,尤其是高位虚拟空间地址,这部分地址必须由内核态去操作。因此,内核态主要负责系统级的服务和管理,包括硬件驱动、内存管理、进程调度、系统调用处理等。 |
