运维面试题
运维
[TOC]
运维
Linux系统比Windows系统好在哪里?
Linux开源,并且大多数的发行版本免费,其中甚至包括了部分企业级的服务器版本。
同时由于开源的特性,其安全问题会更透明,社区能够快速的发现并修复漏洞,整体安全性较高,在服务器场景中往往有更好的表现。
另一方面,其开源特性使得有更丰富的版本选择,可以根据不同的需求进行剪裁和定制。
在多用户多任务方面,Linux支持多用户同时登录并执行各自的任务,同时权限管理严格,资源分配合理。
而且因为可以选择舍弃图形化界面,使得其资源占用更低。
当然,Windows也不是没有优势的,其在图形化界面、办公软件的兼容性、游戏的支持上就比Linux好得多。
为什么我们不使用root账户?
在 Linux 系统中,root 账户是系统最高权限的管理员,拥有着对系统的完全访问权限。
如果我们直接使用 root 账户,从安全角度来说有着巨大的安全风险。另外,因为权限过大,因此也有着误操作的风险。
IP地址 和 域名的关系是什么?
IP 地址是计算机在网络上的唯一标识符,类似于门牌号。
域名则是互联网上主机或者网络服务的一种易于记忆、具有层次结构的名称标识。
IP 地址与域名互相映射,1个域名对应1个IP 地址,1个 IP 地址对应多个域名。
DNS 服务器是什么?
DNS 服务器是在网络上提供将域名转换为对应 IP 地址的一种服务设备。
其核心作用就是提供域名解析服务,而域名解析就是将域名转换为对应 IP 地址。
为什么IP地址到现在还没有分配完?
在IPv4 地址紧张的当下,私有IP地址范围(如10.0.0.0/8、172.16.0.0/12和192.168.0.0/16等)被广泛使用于内部网络。当内部网络设备需要与公网通信时,会利用NAT技术将私有IP地址映射到公共IP地址上。
通过这种方式极大地增加了单个公共IPv4地址可以支持的内部设备数量。
而运营商则使用大规模的NAT系统,允许大量用户共享一个或几个公网IPv4地址,这样也同样减缓了IP短缺的问题。
你知道OSI七层网络模型吗?
OSI七层网络模型其层次从下至上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
其中物理层是最底层,是用于规范数据在物理媒介上传输的规范的一层。
其次是数据链路层,其负责将电信号转换为我们的数据并校验,同时负责了物理层面的选择转发的设备(地址管理和访问控制)。
然后是网络层,负责选择将数据发送到哪台设备上。
传输层则是数据到了我们系统中,开始确认接收信息的服务端口,TCP和UDP就是这一层的。
会话层则是我们服务对通信的管理。
表示层则将我们的数据转换为对应的格式。
最后则是应用层,开始处理我们的业务。
请说下TCP协议和UDP协议的区别。
TCP协议是传输控制协议,UDP协议是用户数据报协议。
TCP协议通过三次握手四次挥手和其它方案确保了数据的可靠性和完整性,而UDP协议则没有这一点。
TCP协议同时还有完善的流量控制和拥塞控制机制,而UDP协议也没有。
但是TCP协议的这些机制带来了更高的开销和延迟以及更低的吞吐量,而UDP协议则是有更低的延迟和更高的吞吐量。
基于以上特点,TCP协议更适合需要高可靠性的服务,比如:网页、电子邮件、文件传输;而UDP协议则更适合实时性要求高但可以接受数据丢失的一些服务,比如:语音通话、实时流媒体等。
请说下TCP连接的流程。
TCP的连接需要经历三次握手、传输数据和结束的四次挥手。
首先,当需要建立TCP连接时,会向目标发送一个请求报文,目标接收后,会回复一个带有同意标志的请求报文,然后我们则回复一个同意报文过去,三次握手就结束了。
当需要结束连接时,会首先发送一个结束报文到对方那边去,对方接收后,会先回复一个确认报文,等对方连接的剩余工作完成后,再发送一个结束报文,而这边接收到结束报文后就会回复一个确认报文,至此,TCP连接就结束了。
你知道哪些常用的端口号?
HTTP 协议使用的默认端口号为80;
HTTPS 协议默认使用的端口号为443;
SSH 协议默认使用的端口号为22;
FTP 协议默认使用的端口号为21;
MySQL 默认使用的端口号为3306。
HTTPS 中的 S 是什么意思?
HTTPS中的“S”代表“Secure”(安全),它表明该连接使用了安全套接字层(SSL)或其后继者传输层安全(TLS)协议来加密和保护通信数据。
SSL(Secure Sockets Layer)是一种早期的网络安全协议,用于在互联网上实现客户端与服务器之间的信息加密、身份验证以及消息完整性校验。
随着技术发展,SSL逐渐被TLS(Transport Layer Security)协议取代,但为了保持兼容性和普遍认知,许多场合仍沿用SSL的说法。
总之,SSL/TLS都是用于保障信息安全的方案。
你用的是什么发行版本?
我使用的是CentOS7 这个发行版本。
其它发行版本我还知道Ubuntu、Debian。
你用的是图形化界面的还是命令行界面的?
我是使用的命令行界面的CentOS7。
你有用虚拟机吗?用的是哪种?
我有使用虚拟机,当时学习Linux的时候就是安装在VMware Workstation虚拟机上跑的。
你是通过什么方式连接的Linux系统的?
我平时是使用第三方的软件Xshell进行连接的,它走的是SSH协议,同时在没有这款软件或者不能使用的情况下,我会使用CMD中的ssh命令进行连接。
文件管理命令有哪些?
文件管理命令有:查看当前绝对路径的pwd 、切换当前所在目录的cd 、展示出指定目录下的文件有哪些的ls 、创建目录的mkdir 、删除空目录的rmdir 、创建及刷新文件的touch 、删除文件的rm 、复制文件的cp 、移动文件和重命名文件的mv 、查找指定目录下的文件的find 。
进程如何查看?
查看全部进程可以使用ps aux、ps -ef和top来查询。如果是要查询指定的进程则可以使用ps aux | grep 待查询进程的关键字 来查询。
如何关闭进程?
我们可以使用kill 信号 待关闭的进程编号 来关闭进程。
怎样确定CPU占用最高的进程?
我们可以使用top命令动态查看,按大写P键可以调整成按CPU占用率排序。
也可以在查看全部进程的ps aux的基础上使用sort长选项进行排序,然后使用head命令提取前几行,即:ps aux –sort=-%cpu | head -n 2。
如何查看内存占用情况?
我们可以使用top命令查看动态的内存情况,也可以使用ps命令查看每个进程的内存使用情况,还可以使用free命令查看整体的内存使用情况。
其中查看具体某进程的内存使用情况可以通过ps命令的-p选项或者top的-p选项进行查看,具体命令分别是:ps -p 要查看进程的PID -o rss=,%mem= 和 top -p 要查看进程的PID。
面试题1.20怎样查看硬盘的使用情况?
我们可以使用df -h命令来查看硬盘的使用情况。
如何查看当前系统的端口使用情况?
我们可以使用netstat -anlp | grep 想要查询的端口或者程序 来查看端口的使用情况,也可以使用ss -anlp | grep 想要查询的端口 来查询端口的使用情况。
如何挂载设备?
对于要挂载的设备,我们首先要将其连接到系统上,然后判断其是否有做文件系统,像U盘,一般来说是已经做好了文件系统的。如果没有文件系统,如:新到手的硬盘,则我们首先要对其进行分区和创建文件系统。
检查完毕后我们可以使用mount 待挂载的设备路径 挂载到哪个目录上 来挂载设备到指定目录。
如何在两台设备之间传输文件?
我们可以使用scp命令在两台设备之间传输文件,当然,前提条件是这两台设备是网络连通的。
而在网络不连通的场景下,我们如果物理接触方便的话可以考虑使用U盘这类存储介质进行传递。
Linux有几种安装软件的方式?
Linux有4种安装方式,分别是:源码安装、二进制安装、rpm安装和yum安装。
源码安装是下载软件的源代码,编译后使用。
二进制安装是下载编译好了的软件的代码,解压后即可使用。
rpm安装则是直接下载软件的rpm包,使用 rpm 命令直接安装。
而yum安装则是要求计算机连接网络,它会在网络上对应的yum仓库下载你要的软件和依赖,并进行安装。
在Linux中怎样控制服务?
我们可以通过systemctl命令控制服务。
systemctl start 服务名 是开启服务,systemctl stop 服务名 是停止服务,systemctl restart 服务名 是重启服务,systemctl status 服务名 是查看服务状态,systemctl enable 服务名 是开机启动服务,systemctl disable 服务名 是开机不启动服务。
怎样查看防火墙开放情况?
我们可以通过firewall-cmd命令管理防火墙。
其中firewall-cmd -zone=public –list-ports可以查看防火墙开放情况;
而firewall-cmd -zone=public -add-port=待添加的放行端口号 -permanent 则可以永久放行指定端口。
如何安装Linux系统?
首先,安装的方式和要安装的地方有关。
如果是要安装在虚拟机上,我会去对应的Linux发行版本的官网或者是镜像网站上下载好ISO镜像文件,然后按照虚拟机的提示和系统的提示一步步安装,这个步骤中,ISO镜像文件是作为虚拟机的CD/DVD的加载项加载的。
如果是要安装在物理机上,我首先会去了解物理机的硬件情况,然后再去对应的Linux发行版本的官网或者是镜像网站上下载好对应的ISO镜像文件。同时准备好1个U盘,通过工具将ISO镜像文件写入到U盘中制作为可引导的安装盘。然后将U盘插入到物理机中,从BIOS中设置从U盘启动,然后按照系统的提示一步步安装即可。
如何查看当前系统的内核版本?
使用uname -r可以获取到当前的系统的内核版本。
如果当前磁盘空间不足该怎么排查占用最多的文件?
我们可以通过du -h –max-depth=1 要查看的目录 | sort -hr | head -n 1 来查看指定目录下占用空间最大的文件或文件夹。其中的–max-depth长选项是控制递归查询深度的,而在查询完毕之后,如果认为需要,可以从中找到最大的目录,然后再次查询。
网络如果连不通怎么办?
首先检查物理连接,以确保所有线缆都已正确且牢固地插入。
然后检查网络设置,确认在操作系统中配置的网络设置是否正确,例如IP地址、子网掩码、默认网关和DNS服务器等。
如果无误再测试网络连接,使用ping命令测试网络连通性,如:ping www.baidu.com。
如果无法ping通,则可能是互联网连接出现问题。
项目如何部署?
首先,不同的项目有不同的部署方式。如果有文档的话,我会依照文档上的内容进行部署;对于没有文档的项目,则会依照项目的需求进行部署。
我的这个项目的部署流程,首先是准备好了一台Linux系统的设备,然后配置系统的网络设置,使其变更为静态网络,同时更新现有的系统环境。
准备完毕后,安装项目所需的MySQL、Nginx、jre等所需的应用。
然后启动MySQL服务,配置好MySQL服务针对项目所需的用户,导入项目所需的数据库结构;
启动Nginx服务,配置开机自启,添加前端静态资源,对应后端服务,配置好反向代理;
书写一个项目的外置配置文件,同时配置一个项目的启动服务,创建一个用户,专门运行项目的启动服务,并使其使用外置配置文件启动项目,以覆盖项目现有的数据库资源信息。
至此,项目的服务全部配置完毕。然后放行项目的前端端口和被反向代理后的API端口。
使用另外一台设备,访问配置好项目的服务器的IP地址和端口号以作测试。测试通过则部署完毕。
你用过哪些中间件?
我用过的中间件有:Tomcat、Nginx、Redis。
页面404怎么办?
首先,我会查看请求的资源到底是否存在,是否将资源放错了位置。然后,我会去查看日志文件,看看日志文件中有什么帮助信息,比如:文件权限不足、资源找不到等。如果有日志信息则先解决日志信息中所报的问题,如果没有则会去检测资源是否放行,路由规则是否正确,重定向是否正确等操作。基本上做完这一步操作后,就可以解决问题了。
如何查找当前日志目录中的全部报错信息?
我们可以使用 grep -ir “error” 待查找的日志目录 来查找日志目录中的全部报错信息。
对于查找含有IPv4地址的所有的文件名,我们可以使用 grep -rlE ‘\b((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}\b’ 待查找的目录 来进行查找。
至于查找含有错误或者警告信息的文件名则可以通过 grep -rliE ‘warn|error’ 待查找的目录 来进行查找。
统计当前日志目录中所记载的报错的日志条数则通过 grep -c “error” 待统计的日志目录 来进行统计。
docker是什么?
Docker是一个应用容器引擎。其通过容器化技术,可以让开发者打包他们的应用及其依赖包到一个可移植的容器中,然后在任何支持Docker的环境上运行这个容器,保证应用在不同环境下的一致性和可移植性。
而容器化技术则是一种虚拟化技术。虚拟机需要模拟整个操作系统,而容器则是在一个操作系统内划分出一个个独立的空间,每个空间(也就是容器)里的应用程序都认为自己独占着整个操作系统,但实际上它们共享了大部分底层资源,这就使得容器启动更快、占用资源更少。
如何运行一个docker容器?
在运行docker容器前先确认docker安装且正在运行,并且拉取好或加载好等下要运行的镜像。之后我们通过docker run -d 镜像名称:版本号 /sbin/init 就可以运行起这个镜像了。
如何查看docker的日志?
首先我们可以通过docker logs 容器ID或者容器名称 来获取指定容器的日志信息。同时,也可以使用 -f 选项来实现让查看的日志滚动更新,而 –tail=行数 选项来指定显示最后几行日志, –since=”查看的日志的起始时间” 来指定查看的日志的时间范围。
另一方面,这些日志文件其存放在宿主机的 /var/lib/docker/containers/容器ID/容器ID-json.log 文件之中。




