Linux培训
达内IT学院

400-111-8989

2020年参加Linux运维面试要掌握的常见面试题


今天小编要跟大家分享的文章是关于2020年参加Linux运维面试要掌握的常见面试题。准备参加Linux运维面试的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。

2020年参加Linux运维面试要掌握的常见面试题

1、Linux常考的命令

(1)、Linux下面如何查找某一目录下的所有子目录文件中的图片?

find . -name "*.h" | xargs grep "*.png"

(2)、查找一串字符在该文件出现的次数?

grep -o "xxx" file.c | wc -l

(3)、将指定目录下的一系列文件,拷贝到指定目录下?

find /usr/include -name "w*.h" | xargs -i cp {} ./(必须是目录) xargs的-i参数,

将其内容指定到{}中;{}将被替换所读取出来的每一行

find /usr/include -name "w*.h" | xargs cp -t ./(必须是目录) cp的-t参数,将成为目标 源

(4)、ls是由哪个进程创建的?

init--->开启shell进程----->拉起ls进程

(5)、Vim中的替换命令?

:%s/abc/ABC/g (将abc替换为ABC)

2、Linux下面的软链接和硬链接

软链接

相当于windows的快捷方式,用一个特殊文件指向另外一个文件,这个特殊文件保存的是另一个文件的路径,操作这个特殊文件,就相当于操作那个被连接的文件

软连接文件的本质是:2个文件

ln -s 原文件名 软链接名

硬链接

inode编号:Linux文件系统中所有文件和目录都拥有唯一一个编号

硬链接文件指的是存放于文件系统中不同路径有相同inode编号的文件

本质:虽然存放在文件系统中的不同位置,但是是同一个文件,相当于文件在文件系统中的若干分身;之间不存在直接的依赖关系,但是操作其中一个文件,就相当于操作了不同位置的同一文件,只有当硬链接文件全部被rm掉,这个文件才真真的被删除

ln 原文件名 硬连接名 //同一目录下

3、Linux下面的进程环境

僵尸进程、孤儿进程、守护进程、进程组、会话、前台进程组、后台进程组

僵尸进程:子进程结束,父进程没有明确的答复操作系统内核:已收到子进程结束的消息。此时操作系统内核会一直保存该子进程的部分PCB信息,同时将进程的状态置为defunct--->僵尸进程

通过ps -ef | grep "xxx"找到僵尸进程的PID,通过kill -9 PID,也不能强制杀死;即僵尸进程是不能够被直接消除掉的

僵尸进程的危害:占用PCB资源(主要是PID资源),系统将会因为产生大量的僵尸进程,而没有可用的进程号来产生新进程,导致系统资源不足

僵尸进程的三种解决方案:

核心思想:父进程的知道子进程的结束,并且明确的回复操作系统,此时操作系统才能回收PCB资源,避免僵尸进程的产生

此时父进程需要处理子进程的结束,需要调用wait()、waitpid()函数族;wait()会等待子进程的结束,调用wait()的进程会阻塞,直到接收到子进程的消息才被唤醒;子进程结束时,会给父进程发送SIGCHLD(17)信号

(1)、wait()用的场合:只能在父子进程中,父进程等待子进程的结束,一直在阻塞,信号通知父进程,避免了子进程的僵尸状态

wait()方法只能在具有子进程的进程中使用,如果一个进程没有子进程,调用wait()方法会失败

wait()方法是用于处理子进程结束状态的,同时让父进程明确告知操作系统内核已经处理了子进程的结束,从而使得操作系统能够彻底回收子进程的PCB信息

(2)、:将僵尸进程的父进程exit()结束掉,此时僵尸进程被init进程接收;init进程会查看进程状态,发现是僵尸进程,就会通知操作系统将其回收

(3)、:写一个信号处理函数,signal(SIGCHLD, 函数指针),在信号处理函数中调用wait()即可,此时父进程就会知道子进程结束,会明确的回复操作系统(就是当子进程结束时,信号处理函数接收到SIGCHLD信号时,方才调用wait(),此时父进程才阻塞)

以上的解决方案:

方案一:使父进程长时间的阻塞

方案二:使父进程必须的结束掉

方案三:即可解决父进程的阻塞,又可避免僵尸进程的产生

孤儿进程:当父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程,由于进程不可能脱离进程树而独立存在,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。孤儿进程被收养后进行正常的释放,没有危害

守护(精灵)进程:守护一个服务,长期驻留在内存中提供服务,不能够受制于终端;

如何让一个进程成为守护进程?

让一个进程脱离前台进程组关系,如下2步:i、创建一个新的会话;ii、构成孤儿进程

pid_t pid;

pid = fork();

if(pid == 0){

setsid(); //创建一个新的会话,也就是创建一个新的进程组

while(1) { //while循环代表着长期驻留

...

}

}else if(pid > 0){ //对其父进程就是要求退出,其子进程构成孤儿进程

...

//exit(0);

}else{

perror();

}

进程组:在Linux下进程除了具有父子关系这样的组织关系以外,还具有分组的组织关系。任何一个进程都需要隶属于某个进程组

每一个进程组都拥有一个独立的进程组编号,可以通过getpgid()方法得到。

每一个进程组都拥有且只拥有一个组长进程。可以通过该组长管理其组内的其他进程的统一行为。(例如:组长进程若获取一个特殊的信号,该信号可以传递给组内所有进程)

进程组ID就是进程组组长的进程ID

进程组内的成员都是组长的子及子孙

创建:setpgid()

会话:是进程组之间的某种关系,即每一个进程除了要归属于一个进程组以外,还需要归属于一个会话之中,会话的概念主要是从终端登陆到计算机之后得到的

当一个终端登录到计算机之后,为了方便将不同的终端隔离开,同时又能够充分合理的管理一个终端下产生的所有进程,因此而提出了会话的概念。换句不准确描述来说:会话就是用户登录之后从登录服务进程到shell进程所组成的集合

一个会话通常是由多个进程组组成的,分为两部分(前台进程组,后台进程组)。

会话具有一个会话首进程。操作系统通过会话的首进程来管理整个会话中的所有进程组。

创建会话:setsid()方法来创建一个新的会话,从而就会出现新的进程组

前台进程组:前台进程组是和终端服务进程、bash进程捆绑在一起的,和终端直接相关。那么,终端的任何操作都会影响到所有的前台进程组

在shell交互环境中执行一个命令,就会产生一个新的进程来执行这个命令,不仅如此,还会产生一个新的进程组,该进程组的组长就是被执行命令而形成的新进程

前台进程组的最大问题就在于:由终端控制,终端只需要让进程组的组长停止,其组内的所有进程都会停止

后台进程组:断开与终端的关系(并非输入、输出、错误输出关系),进程组关系,不再受制于终端而存在,这种进程与进程组被称之为后台的

后台进程存在的理由:需要常驻内存,提供一个服务

4、创建进程

(1)、创建进程:execv()和fork()

execv():不能使得进程数目增加,只是将外存以进程方式加载一个可执行文件到内存;这就相当于”替换“之术

fork():分身之术

pid = fork()

此时pid > 0,是父进程执行的代码段,但是此时的pid是子进程的PID

pid == 0,是子进程执行的代码段,表示创建子进程成功

pid < 0 创建进程失败,子进程返回-1,父进程返回错误编号

fork()得到的子进程和父进程的数据段、代码段、栈等数据内容是一样的

但是进程是高度独立的,所以其数据并没有共享;

每个进程所能进行的内存操作都是站在虚拟内存基础上的,一个进程在没有特殊手段的前提下,它只能看到自身,而看不到其他进程的存在!!!

因为虚拟内存的存在,进程以为自己所能访问的内存大小是:整个计算机的内存

进程的消亡:exit()

进程的消亡过程:进程通过调用exit告知操作系统内核其要结束。这是因为PCB的管理权是操作系统内核的,操作系统内核需要知道进程的结束,以便:(1)、告知该进程的父进程"你的子进程要结束了" (2)、回收PCB资源

(2)、fork()的优化

子进程并不需要父进程的所有数据,从父进程复制的数据都是无效的

优化:

i、当调用fork()产生子进程时,主要是将PCB先进行复制

ii、得到PCB之后,并为其分配了物理地址映射之后,并不会立即将父进程的内容复制给子进程

iii、而是进行了指向引用技术(子进程的代码段内容直接指向父进程的代码段),子进程的数据段内容一开始也是指向引用,堆段也是如此

iiii、Copy On Write技术:如果子进程或父进程要修改数据段/堆段的内容,则立即将要修改的部分内存拷贝出一份,然后才可以修改;从而在逻辑上保证了进程的逻辑性和封闭性

经过如上4个步骤的调整,fork()之后不会消耗过大的CPU和内存资源

技术的实现关键:进程的虚拟地址与计算机的物理地址映射关系的管理

此时就不会因为fork()而产生巨大的浪费

以上就是小编今天为大家分享的关于2020年参加Linux运维面试要掌握的常见面试题的文章,希望本篇文章能够对准备参加Linux运维面试的小伙伴们有所帮助,想要了解更多Linux相关知识记得关注达内Linux培训官网,最后祝愿小伙伴们工作顺利,面试成功!

文章来源于编程剑谱 ,作者大胜归来

【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:2020年Linux面试题汇总之实战篇
下一篇:Linux运维人员面试必备网络运维面试题汇总

Linux运维工程师面试题目及答案汇总

Linux常见面试题汇总,建议收藏

Linux面试题目及答案解析汇总

给Linux运维工程师的面试建议

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省