2018年秋招面试常见Linux运维知识点总结

Linux中常见命令:

    ping命令:可测试网络是否通畅。ping命令使用的是网络层的ICMP协议,但从命令本身来看是属于第七层应用层。
    traceroute:电脑网络工具,可显示数据包在IP网络经过的路由器的IP地址。
    iostat命令可以查看磁盘IO状态。
    free命令查看的是内存占用情况,可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
    uptime命令:能够打印系统总共运行了多长时间和系统的平均负载。uptime可以显示的信息依次为:现在时间,
    系统已经运行了多长时间,目前有多少个登录用户,系统在过去1,5,15分钟内的平均负载。
    uptime -v 指定版本信息
    lsof命令:一个列出当前系统的打开文件工具,Linux一切皆文件,每行显示一个打开的文件,若不指定条件默认
    将显示进程的所有文件。
    mount命令:可以查看磁盘的挂载状态。
    du:统计目录(或文件)所占磁盘空间的大小。
    df:用于显示文件系统的磁盘使用情况。
    vmstat:命令报告关于内核线程,虚拟内存,磁盘陷阱和CPU活动的统计信息。
    getconf PAGE_SIZE查看Linux内存页,一般为4KB。

find命令:

    find命令删除指定大小的文件:
    find /var/mail/ -size +50M -exec rm -fr {} \;
    find命令查找最近修改的当前目录下的.php文件:
    find . -name '*.php' -mtime 0
    查找指定大小和类型
    find /etc -size +1M -type f

tcpdump抓包工具:

tcpdump可以将网络层中的数据包的头完全截获下来提供分析。
抓包存取:
tcpdump -i eth1 host 172.16.7.206 and port 80 -w /tmp/

shell中的特殊字符:

$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用

iptables的四表五链:

  Filter表:过滤数据包 
  NAT表:用于网络地址转换(IP、端口) 
  Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS 
  Raw表:决定数据包是否被状态跟踪机制处理
  INPUT链——进来的数据包应用此规则链中的规则 
  OUTPUT链——外出的数据包应用此规则链中的规则 
  FORWARD链——转发数据包时应用此规则链中的规则 
  PREROUTING链——对数据包作路由选择前应用此链中的规则 
  POSTROUTING链——对数据包作路由选择后应用此链中的规则
iptables -A INPUT  -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 
iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
-j 指定ACCEPT接受,或者DROP不接受
--dport目标端口,当数据从外部进入服务器为目标端口,反之,数据从服务器出去,使用--sport

在这里插入图片描述

静态变量和非静态变量的区别:

静态变量被所有的对象所共享,在内存中只有一个副本,当且仅当类在初次加载会被初始化。
非静态常量是对象所拥有的,在创建对象的时候被初始化存在多个副本,static在不同实例中地址一样,存在全局区。

僵尸进程和孤儿进程:

僵尸进程:一个子进程在其父进程还没有调用wait或waitpid()情况下退出。
孤儿进程:一个父进程在子进程运行时退出,孤儿进程将被init进程所收养。
僵尸进程会导致浪费资源,孤儿进程不会。

TCP的三次握手和四次挥手:

三次握手过程:

1.建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
2.服务器收到SYN包,必须确认客户端的SYN,同时自己也发送一个SYN-ACK包,此时服务器进入SYN-RECV状态。
3.客户端收到ACK+SYN包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四次挥手过程:

A发送释放请求:

TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双向的,因此在四次挥手中,
前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接.
第一次挥手:
若A认为数据发送完成,则它需要向B发送连接释放请求FIN=1,A将进入FIN-WAIT-1状态.FIN=1表示该报文段是一个连接释放请求.

B回应释放的应答,A到B连接已经断掉:

第二次挥手:
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放.
此时B进入CLOSE-WAIT状态

B发送释放请求:

第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。
但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手:
当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:
FIN=1,随后B进入LAST-ACK状态

A回应释放的应答,B到A连接已经断掉:

第四次挥手:
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会持续2MSL时间,
若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB.

在第四次挥手时,为什么A要先进入TiME-WAIT状态,等待2MSL时间才进入closed状态?

为了保证B能收到A的确认应答,若A发送完应答直接进入CLOSED状态,如果该应答丢失,B等待超时后会重新发送释放请求,
但此时A已经关闭,不会有任何响应,因此B永远无法正常关闭。

TCP和UDP的区别:

TCP--传输控制协议,面向连接,可靠的字节流服务,在客户端和服务器交换数据前,必须在双方建立一个TCP连接才
可以传输数据,TCP提供超时重发,丢弃重复数据,检验数据,流量控制,保证数据从一端到另外一端。
UDP---用户数据报协议,面向无连接的,是一个简单的面向数据报的传输协议,UDP不提供可靠性,只是把应用程序
传递给IP层的数据报发送出去,并不可保证是否到达,UDP传输不需要建立连接,且没有超时重发等机制,传输速度快。
TCP		 ------   UDP
打电话  ------     发短信

TCP和UDP的应用场景:

	若通信数据完整性需让位于通信实时性,则应该选择TCP协议。(文本传输,重要状态的更新等),反之则使用
	UDP协议(如视频传输,实时通信等)
	
	TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景下;而UDP
	协议适用于对效率要求相对高,对准确性要求相对低的场景。
	
	TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢)远程登录(TELNET SSH 对数据
	准确性有一定要求,有连接的概念)等等;UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,
	但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受
	的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。
	
	比如,TCP可以用于网络数据库,分布式高精度计算系统的数据传输;UDP可以用于服务系统内部之间的
	数据传输,因为数据可能比较多,内部系统局域网内的丢包错包率又很低,即便丢包,顶多是操作无效,
	这种情况下,UDP经常被使用。

TCP的流量控制:

	如果发送方发送数据过快,接收方来不及接受不造成数据的丢失。
	TCP的流量控制利用滑动窗口机制来实现的,接收方在返回的ACK包中会包含自己的接受窗口大小,以控制发送方的数据发送。
问题:当ACK报文丢失,出现A等待B确认,B等待A发送数据的死锁状态。
	利用rwnd值实现接收方对发送方的流量控制。
	当A收到rwnd=0时,启用持续计时器,时间到了则发送一个探测报文,询问B是否很忙或者ACK丢失,B回应自身接受窗口大小
	,若返回仍为0,则重复步骤。

TCP的拥塞控制:

网络的需求超过自己的工作极限出现拥塞,拥塞控制是为了防止过多的数据注入到网络中,可以使网络中的路由器或者链路不过载。
1.慢开始和拥塞避免结合。
慢开始是指发送数据开始,并不清楚网络中的负荷情况,会先发送一个字节试探报文,以指数类推。
小于门槛值,使用慢开始算法加倍。
大于门槛值使用拥塞避免算法缓慢加1。

快重传和快恢复算法:

快重传和快恢复算法旨在快速恢复丢失的数据包。快重传当接受方发现M3丢失,则立即发送对M2的重复确认,一旦发送方
接连收到三个M2的重复确认,立即重传M3,也就是发送方收到第四个确认时。
快恢复算法:
当发送方在cmnd=24连续收到三确认,把慢开始门限值减半为12.
用拥塞避免算法替换慢开始算法使拥塞窗口缓慢放大。

SYN攻击以及解决办法:

SYN攻击就是利用TCP协议的缺陷,来导致系统服务器停止正常的响应。
SYN攻击原理:
TCP在发送数据前需要经过三次握手,SYN攻击的原理就是向服务器发送SYN数据包,并伪造源IP地址,在服务器收到SYN包
时,会将连接加入backlog队列,并向源IP发送SYN-ACK数据包并等待ACK,以完成三次连接。由于源IP地址是伪造的不存在的
主机IP,所以服务器无法收到ACK包并不断重发,同时backlog队列会被不断攻击的SYN连接占满,导致无法处理正常的连接。
SYN攻击处理:
1.减少ACK包的重发次数。
2.使用SYN cookie技术,返回SYN-ACK包时,不分配专门的数据包,根据SYN包计算出一个cookie值,在服务器收到SYN-ACK
包时,利用cookie值检测是否合法,若合法再分配数据包。
3.增加backlog队列(默认为1024)
4.限制SYN并发数。

后退n帧协议和选择重传协议:

后退n帧协议:
发送窗口的大小为n,接收的大小仍为1,这里假设n=9,发送方一次发送10个帧,前两个帧已经正确返回,后面的帧出现错误,
发送方要重新发送2-8,接收方也必须丢失之前接受的3-8这几个帧。
选择重传协议:
为了解决后退n帧协议的总要重发该帧之后的所有帧,会导致进一步恶化网络,接收方首先缓存所有收到的帧,某个帧出现错误时
只重传该帧,只有当某个序号之后所有帧正确收到后,才一起提交给高层应用,缺点在于需要更多的缓存。

nginx为啥叫做反向代理服务器?:

	反向代理方式是指以代理服务器来接受客户端的连接请求,然后将请求转发到网络上的web服务器(apache,nginx等),
	并将从web服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个服务器。而且nginx作为
	反向代理服务器可以根据用户请求的内容转发到不同的后端服务器。

正向代理:

一个标准的代理缓冲器用于缓冲静态网页,当页面被再次访问时,浏览器将直接从本地代理服务器获取请求数据
而不向原web站点请求数据,只需在每一个内部主机指明IP地址和端口号,客户端上网时,每次交给代理服务器即可。

BGP和OSPF的区别:

BGP:用来处理不同网络之间的协议。
OSPF:用来处理同一网络内部的链路协议。

什么是IPV4和IPV6?

IPV4指的是地址位数是32位,最多有2的32次方位主机可以连接到Internat。
IPV6采用128位地址空间,几乎不受限制的提供地址。

redis和memcache的区别:

1.redis中,并不是所有的数据都一直存储在内存中的,这是和memcache的最大区别。
2.redis多方面具备数据库的特征,或者说是一个数据库系统,而memcache只是一个简单的k/v缓存。
3.他们的扩展都需要做集群。
4.redis和memcache都是内存数据库。
5.memcache只支持简单的key/value的数据结构。无法进行持久化数据不能备份。redis支持多种数据结构,支持持久化操作。

如何交换a和b的数值:

1.不引入第三变量交换:
a=a+b
b=a-b
a=a-b
2.引入第三个变量交换:
c=a
a=b
b=c

Linux开机启动过程:

1.BIOS加电自检。
2.读取MBR主引导记录
3.运行引导程序grub加载kernel镜像初始化。
4.根据/etc/inittab中系统初始化配置执行/etc/rc.sysinit脚本。
5.根据第三步读到的运行级别(runlevel)值启动对应服务。

0:关机
1:单用户
2:无网络的多用户
3:命令行模式
4:未用
5:GUI图形化模式
6:重启
who -r 显示当前运行级别以及系统当前时间。
runlevel显示当前运行级别
init3/init5切换模式

6.运行/etc/rc.d/rc.local
7.生成终端等待用户登录。

Linux进程的三种状态:

运行态:占有CPU,并在CPU上运行。
就绪态:已经具备运行条件,但由于没有空闲CPU,暂时不能运行。
等待态:因等待某一件事而暂时不能运行,如等待读盘结果。

OSI四层模型:

应用层
传输层
网络互连层
网际层

OSI七层模型以及各层对应服务:
在这里插入图片描述

软链接和硬链接的区别:

硬链接:
文件有相同的inode及data block。
不能交叉文件系统进行硬链接的创建。
不可对目录,只可对文件创建。
删除硬链接并不影响其他有相同inode号文件。
软链接:
软链接有自己的文件属性和权限。
可对不存在的文件和目录创建软链接。
软链接可交叉文件系统。
软链接可对文件/目录创建。
创建软链接时,链接计数i_nlink不会增加。
删除软链接并不影响被指向的文件,但若被指向的文件被删除,则相关软链接就变成了死链接,若被指向路径的文件被重
新创建,死链接可以恢复。

Linux下的压缩命令:

1.gzip etc.tar压缩成gz格式。
  gunzip etc.tar.gz 解压gz格式的压缩包
2.bzip2 etc.tar 压缩成bz2的格式
   bunzip2 etc.tar.bz2 解压bz2格式压缩包
3.xz etc.tar 压缩成xz格式
   unxz etc.tar.xz 解压xz格式压缩包
4.zip -r etc.tar.zip etc.tar 压缩成zip格式
   unzip etc.tar.zip 解压zip格式压缩包
5.compress压缩.z文件
  uncompress解压.z文件

Linux可以查阅全部文件的三个命令:

cat,more,less
more命令:可以让屏幕在显示满一个屏幕时,按空格键可以继续显示下一个画面或按Q键停止。
less命令:可以分页显示文件。
cat命令:一次显示整个文件。

定时任务:

* * * * * command表示格式
分钟 小时 天 月 周 命令

交换分区:

在内存小于2G的情况下,交换分区为内存的2倍,超过2倍的话,交换分区为物理内存的两倍。

运维的工作用途:

1.保障系统的正常用途。
2.保障数据的安全可靠。
3.负责服务的稳定性,确保服务可以7*24小时不间断的为用户提供服务。
4.确保系统架构的优化来节约成本。
5.确保自动化部署。

man的级别:

1.查看命令的帮助
2.查看可被内核调用函数的帮助。
3.查看函数和函数库的帮助。
4.查看特殊文件的帮助。
5.查看配置文件的帮助。
6.查看游戏的帮助。
7.查看其它杂项的帮助。
8.查看系统管理员可用命令的帮助。

DNS高速缓存服务:

DNS解析过程:
1.本地客户机提出域名解析请求,查找本地HOST文件后将该请求发送给本地域名服务器。
2.当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该记录项
服务器返回查询结果。
3.如果本地DNS缓存没有该记录,则本地域名服务器将请求发给根域名服务器,然后根域名服务器
再返回给本地域名服务器一个所查询的主域名服务器地址。
4.本地域名服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存。
5.重复第4步。
6.本地域名服务器把返回的结果保存到缓存以备下一次使用,将结果返回客户机。

输入一个URL之后,发生的事情:

1.浏览器向DNS服务器查找输入URL对应的IP地址。
2.DNS服务器返回网站的IP地址。
3.浏览器根据IP地址与目标web服务器在80端口上建立TCP连接。
4.浏览器获取请求页面的HTML页码。
5.浏览器在显示窗口渲染HTML
6.窗口关闭时,浏览器终止与服务器的连接。

DHCP:动态主机配置协议

作用于OSI的应用层,可以从指定的DHCP服务器获取配置信息的协议(IP地址,子网掩码,dns,网关)
DHCP的运作方式:(53端口)
	客户端传播广播包给整个物理网段内的所有主机,如局域网内有DHCP服务器时,才会响应客户端的IP参数要求
所以DHCP服务器与客户端应在同一个物理网段内。

常见的HTTP状态码:

200-ok     服务器成功返回网页
301 			请求的网页已经永久跳转到新位置
403-Forbidden  		禁止访问,服务器拒绝请求
404- Not found   		服务器找不到请求的页面
500以及500之后的都是内部服务器错误
可以用 curl -I www.baidu.com 查看状态码

HTTP长连接和短连接:

短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束中断连接。
长连接:用以保持连接特性,当一个网页打开完成,客户端和服务器的连接不会关闭,
再次访问时会继续使用已建立的连接。

HTTP协议中Get和Post的区别:

Get用于获取查询/获取信息,Post方法用于资源的更新。
1.get提交的数据放在url之后,以?分割url和传输数据,post方法把提交的数据放在HTTP包的Body中。
2.get提交的数据大小有限制,post方法提交的数据无限制。
3.get方法涉及安全问题。

HTTPS和HTTP的区别:

HTTPS以安全为目标HTTP通道,HTTP是超文本传输协议,无状态,信息明文传输。HTTPS是HTTP+SSL
协议构建的可进行加密传输,身份认证的网络协议,比HTTP协议安全

阻塞,非阻塞,同步,异步:

阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成。
非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成。
同步:用户进程发起IO(就绪判断后),轮询内核状态。
异步:用户进程发起IO后,可以做其他事情等待内核通知。

FTP服务的工作原理:

		FTP服务是一种有连接的文件传输服务,采用的传输层协议是TCP协议。FTP服务的基本过程是:
		建立连接、传输数据与释放连接。由于FTP服务的特点是数据量大、控制信息相对较少,因此在
		设计时采用分别对控制信息与数据进行处理的方式,这样用于通信的TCP连接也相应地分为两种
		类型:控制连接与数据连接。其中,控制连接用于在通信双方之间传输FTP命令与响应信息,完
		成连接建立、身份认证与异常处理等控制操作;数据连接用于在通信双方之间传输文件或目录信息。

FTP的20和21端口:

一个是数据端口,一个是控制端口,控制端口为21,数据端口不一定为20,如果主动模式为20,如果是
被动模式,需要服务器和客户端商定即可。

路由器和交换机有什么区别:

1.路由器可以给你的局域网自动分配IP,虚拟拨号,交换机只是用来分配网络数据的。
2.路由器在网络层,根据IP寻址,路由器可以处理TCP/IP协议,交换机不可以,交换机
在中继层,根据MAC寻址。
3.路由器可以把一个IP分配给很多主机使用,这些主机对外只表现出一个IP,交换机可以
把很多主机连接起来,这些主机对外表现不同IP。
4.路由器可以提供防火墙,交换机不提供该功能。

进程和线程的区别:

1.进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。
2.同一个进程可以包含多个线程,并且线程共享整个进程的所有资源,一个进程至少包含一个线程。
3.进程结束后所有线程都会销毁,而线程的结束不会影响进程中其他线程的约束。
4.线程是轻两级的进程,他的创建和销毁所需时间比进程小很多。
5.线程的执行一般都需要进行同步和互斥,因为他们共享同一个进程的所有资源。

死锁的概念以及产生原理

概念:多个并发进程因争夺资源而产生相互等待的现象。发生死锁的进程进行不下去,所持有资源无法释放,导致
CPU吞吐量下降会浪费系统资源影响CPU性能。
原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,产生死锁。
本质原因:
1.系统资源有限
2.进程推送顺序不合理
死锁产生的4个必要条件:
1.互斥:某种资源只允许一个进程访问,其他进程不可访问。
2.占有且等待:一个进程本身占有资源,同时还有资源未满足等待其他进程释放资源。
3.不可抢占:别人已经占有了某项资源。
4.循环等待:存在一种进程链,使得每个进程占有下一个进程所需的至少一种资源。
避免死锁的方法:
1.死锁的预防----确保系统不会进入死锁
由于互斥是非共享必须的,破坏其他的三个条件。
2.避免死锁-----在使用前进行判断,只允许不会产生死锁的进程申请资源。
3.死锁的检测与解除-----在检测到运行系统进入死锁进行恢复。

操作系统常见的进程调度算法:

1.先来先服务(FCFS)
2.最短作业优先,时间短的进程优先分派(SJF)
3.最高响应比优先法(HRRN)
4.时间片轮转算法(RR)
5.多级反馈调度算法

分页和分段有什么区别:

1.页是信息的物理单位,分页是为了实现离散分配方式,分段的目的是为了更好地满足用户需要。
2.页的大小固定,段的长度不固定。
3.分页是单一的线性空间,分段是二维的作业地址。

nginx的几种算法:

1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器。如果后端服务器down掉,则自动剔除。
2.weight:指定轮询几率,weight和访问几率成正比,用于后端不均的情况。
3.ip_hash:每个请求按访问的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
4.fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5.url_hash(第三方):按访问的url的hash结果来分配请求,使每个url定向到一个后端服务器,后端服务器为缓存时有效。

nginx和apache的对比:

nginx相对于apache的优点: 
轻量级,同样起web 服务,比apache 占用更少的内存及资源 
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 
高度模块化的设计,编写模块相对简单 

apache 相对于nginx 的优点: 
rewrite ,比nginx 的rewrite 强大 模块超多,基本想到的都可以找到 ,少bug ,nginx 的bug 相对较多 ,超稳定 。

存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。
后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll网络IO 
模型是nginx 处理性能高的根本理由。

Nginx 配置简洁, Apache 复杂 
Nginx 静态处理性能比 Apache 高 3倍以上 
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用 
Apache 的组件比 Nginx 多 
现在 Nginx 才是 Web 服务器的首选 

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 

nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。 

Ansible和Saltstack的简单对比:
在这里插入图片描述

文件权限位:
在这里插入图片描述

LVS的调度算法:

1.RR,轮叫调度,通过轮叫算法将外部请求按顺序分配到集群中的真实服务器。
2.WRR,

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/82950672