标签搜索

第1阶段综合测试面试题-答案

lilymaxyz
2025-03-04 / 0 评论 / 5 阅读 / 正在检测是否收录...

M63期第一阶段综合测试面试题

学号: 姓名: 成绩:

​ 说明:共12题需要作答,每题10分,共120分。其中前十题是必答题,满分100,60分及格。第11/12两题为附加题,希望同学们能认真对待每一题。最后阅读篇为运维面试情况分析,请认真阅读。

1.如何在 /data 下找到大小超过1G的文件并且inode修改时间在7天以前的普通文件,找到后结合xargs 把他移动到 /backup目录下
find /data -size +1G -ctime +7 -type f | xargs mv -t /backup

find /data -size +1G -ctime +7 -type f -print0 | xargs -0 mv -t /backup
答案解析:
/data :指定查找的起始目录为 /data。
-size +1G :查找文件大小大于 1GB 的文件。
-ctime +7 :查找 inode 信息修改时间超过 7 天的文件。
-type f :只查找普通文件。
xargs 部分:
xargs 用于将 find 命令的输出作为参数传递给 mv 命令。
mv -t /backup :-t 选项用于指定目标目录,这里将满足条件的文件移动到 /backup 目录下。

知识点:
atime ,ctime ,mtime
atime:文件最后一次被访问的时间,即文件内容被读取的时间。如使用 cat 命令查看文件内容,或在文本编辑器中打开文件查看,都会更新 atime。
修改时间(mtime,:是文件内容最后一次被修改的时间。当文件内容发生变化并保存时,mtime 会更新,如编辑文档后保存或用程序修改文件数据等操作。
状态改变时间(ctime,Change Time):表示文件的 inode 节点信息最后一次改变的时间。文件权限、所有者、所属组等元数据变化,或文件内容变化引起 inode 信息更新时,ctime 都会更新。例如执行 chown 改变文件所有者,或文件系统因写入操作更新 inode 的分配信息等情况。

注意:
目标目录存在性:确保 /backup 目录已经存在,否则 mv 命令会报错。
文件名包含特殊字符:如果文件名中包含空格、换行符等特殊字符,上述命令可能会出现问题。可以使用 -print0 和 xargs -0 来处理包含特殊字符的文件名,示例如下:
2. 已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令?
 find /app/logs -type f -mtime +7 -delete
 
 find /app/logs/ -type f -mtime +7 -name "*.log"|xargs rm  -f  
##也可以使用-exec rm -f {} \;进行删除

crontab -e
0 0 * * * find /app/logs -type f -mtime +7 -delete
分时日月周
3. 每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)
cat /root/backup_script.sh
#!/bin/bash
cd /var/www/ && /bin/tar -zcf /data/html-`date +%m-%d%H`.tar.gz html/
# crontab –e
00 00 * * * /bin/sh /root/backup_script.sh
或着:【29号学员的答案】
0 0 * * * tar -czf
/data/backup_$(date+\%Y\%m\%d_\%H\%M\%S).tar.gz -C /var/www/html
或者:【6号学员的答案】
(1)写脚本
#!/bin/bash 
# 定义站点目录和备份目录
 SOURCE_DIR="/var/www/html" 
BACKUP_DIR="/data" 
# 获取当前日期时间,用于生成备份文件名 
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz" 
# 打包站点目录到备份文件 
tar -zcvf $BACKUP_FILE $SOURCE_DIR 
# 检查打包是否成功
 if [ $? -eq 0 ]; then 
echo "备份成功:$BACKUP_FILE" 
else 
echo "备份失败" 
fi

(2)设置权限
chmod +x /root/backup_script.sh

(3)定时任务
crontab -e

(4)执行脚本
4. 写一条192.168.10.0网段从网关192.168.9.1出去的路由?
route add -net 192.168.10.0/24 gw 192.168.9.1
或者:
ip route add 192.168.10.0/24 via 192.168.9.1
5. 找出僵死进程并杀死僵尸进程的方法?
用下面的命令找出僵死进程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
命令注解:
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数,因为状态为 z或者Z 的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
Kill -9 各个僵死进程的pid 。

#如果一台服务器上产生了100多少僵死进程,而且每一僵死进程的父进程都不一样,如果用上面的方法,一条一条的杀,那还不得累死。那么就应该想一条简单的命令,直接查找僵死进程,然后将父进程杀死~
所以最佳答案:
 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
用ps -el看出的进程状态如果是Z,就是僵尸进程。
6. 写一个脚本,实现批量添加20个用户,用户名为:user1-20,密码为user后面跟着5个随机字符或数字
[root@rock8 ~]# cat useradd.sh
name="user"
for number in $(seq 1 20)
do
    password=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
    useradd $name$number
    echo "user$password" | passwd --stdin user$number &> /dev/null
    echo "$name$number user$password" >> userinfo.txt
done

解读:
/dev/urandom 是 Linux 系统中的一个特殊字符设备文件,其作用是提供随机字节流。它从系统的熵池中获取随机数据,能满足大多数对随机性要求不是特别高的场景。
cat 命令用于读取文件内容并输出到标准输出。所以 cat /dev/urandom 会不断输出 /dev/urandom 中的随机字节流。
2. | head -1
| 是管道符号,它的功能是将前一个命令的输出作为后一个命令的输入。
head -1 表示从输入中提取第一行内容。由于 /dev/urandom 输出的是连续的字节流,没有明显的行分隔,这里提取的 “第一行” 实际上是连续的一段随机数据。
3. | md5sum
md5sum 是一个用于计算文件或输入数据的 MD5 哈希值的工具。它会对输入的随机数据进行哈希计算,生成一个 32 位的十六进制字符串。MD5 哈希函数是一种单向哈希函数,相同的输入会产生相同的输出,但不同的输入几乎不可能产生相同的输出,这有助于增加随机性。
4. | head -c 5
同样使用了管道符号,将 md5sum 的输出作为 head -c 5 的输入。
head -c 5 表示从输入中提取前 5 个字符。最终得到的这 5 个字符就是生成的随机字符串。
5. password=$(...)
$() 是命令替换的语法,它会先执行括号内的命令,然后将命令的输出结果赋值给变量 password。
扩展面试:你写过的shell脚本有多少?说一个你认为比较复杂的shell脚本。
7. 当根目录硬盘写满时,如何定位到那个目录使用硬盘最多的?如果发现某个大文件导致空间占满,如何快速删除释放空间
答:du –sh /* 命令即可,找到根目录下占用磁盘较大的目录之后,再进入此目录继续执行du –sh * 命令一直找到最终目录即可。本题还可以配合--max-depth参数来查找。

大文件导致空间占满,快速释放空间。
cat /dev/null > xx.log   或者用echo "" > xx.log
不要用rm -rf rm后的空间不会立即释放
8. TCP/IP协议三次握手的过程四次挥手
三次握手:
第一次握手是客户端为了建立连接,客户端发送SYN报文,且seq设置为零,并进入SYN_SEDN状态,等待服务器确认
第二次握手是服务器端对收到的SYN报文进行确认,同时发送ACK响应报文,且响应报文的ACK设置为1. 服务器端也需要发送SYN请求,SYN同样设置为0进行发送。 服务器这时候进入SYN_RECV状态
第三次握手是客户端收到了服务器端发来的ack和SYN, 确认完了之后将seq设置为1,ack设置为1, 向服务器发送ACK报文,这个报文发送完毕后,客户端和服务器端就都进入了ESTABLISHED状态,完成了三次握手
四次挥手的过程:
四次挥手也是客户端开始的
第一次挥手是客户端向服务器发送一个FIN报文段,将seq设置为160,ack设置为112, 此时客户端进入FIN_WAIT_1状态,表示客户单没有数据要发送了,请求关闭连接
第二次是服务器端收到了客户端发来的FIN报文,并向客户端回一个ACK报文,ack设置为1,seq设置为112; 服务器进入CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态
第三次挥手,服务器会观察自己是否还有数据没有发送给客户端的,如果没有,就发送FIN报文给客户端,请求关闭连接,同时服务器进入LAST_ACK状态;
第四次挥手是客户端收到了服务器端发来的FIN报文段,并向服务器发送ACK报文,将sep设置为161,ack设置为113, 然后客户端进入TIME_WAIT状态,服务器收到客户端的ACK报文以后,就关闭连接;
此时,客户端等待2MSL后依然没有收到回复,就证明server端已经关闭了,客户端也就可以正常关闭连接了
9 网站访问慢的故障排查
1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如
果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。
· 

2、检查服务器负载情况。
    查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。
· 
3、如果发现硬件资源消耗都不高,那么检查与网站相关联的服务 是否异常。比如
    a) 网站与数据库的连接是否变慢
  查看数据库日志文件,慢查询日志等,看看是不是某条 SQL 语句查询慢,导致网站访问慢。
    b) 网站与存储的访问是否变慢
    c) 查看负载均衡到web是否变慢
    d) 在web网站上放一个静态网页和php动态 查看是动态数据慢还是静态数据慢
4) 使用chrome浏览器开发者工具排查网站打开慢的情况
    - 打开谷歌浏览器,键盘上输入F12,打开开发者工具 然后选择【network】-> ctrl+F5 强制刷新,查看资源的加载情况,然后点击time进行排序,会找到消耗时间最长的资源
5) 死链问题,网站改版或者升级后,残留下来的不存在的页面,而这些页面又被百度给收录了,用户通过这些页面登陆会出现空白或者打不开。 我们可以将死链加入404文件并提交给百度站长平台。    
6) 访问量过高,并发过大,也会导致服务器卡顿,这个时候可以考虑加缓存或增加服务器。

但总结下来,无非就是,网络问题: 系统问题,数据库问题, 访问慢的服务器与其他关联的服务器或者服务的调用之间出现了问题,被攻击。

? 怎么去解决?
· 1、如果是出口带宽问题,那么久申请加大出口带宽· 
 2、如果慢查询比较多,那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
· 3、如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等等。然后也可以搭建MySQL 主从,
一台 MySQL 服务器负责写,其他几台从数据库负责读。
· 4、申请购买 CDN 服务,加载用户的访问。
· 5、如果访问还比较慢,那就需要从整体架构上进行优化咯。做到专角色专用,多台服务器提供同一个
服务。
10. 办公室同事反馈网站打不开,请简述一下排查故障的思路或解决方法?
参考:
A. 先ping一下域名,看看网络是否通
B. Telnet 一下服务器的80端口,看是否通
C. 查看服务器流量是否正常,借助sar或者nload
D. 查看服务器是否有负载,用w,查看服务是否开启,用ps
E. 抓包查看数据包是否正常,看是否有攻击,用tcpdump
F. 查看配置是否正确 
拓展:
网站无法打开的排查思路和方法?
1)首先检查域名解析
 ping www.baidu.com,然后查看返回结果,如果返回的结果是“Ping 请求找不到主机 www.sdfjkdasjfkl.com。请检查该名称,然后重试。”表示解析有问题,需要解析域名;如果能够正常的返回IP地址,需要判断解析的IP地址和客户提供的服务器IP地址是否一致,如果不一致,重新解析(CDN除外),如果一致,进行下一步检查。
2)检查服务器网络是否正常
通过ping 和telnet来判断服务器网络是否正常,如果不正常,让机房本地检查服务器网络;如果都正常,就需要通过远程连接到服务器检查服务器。
3)检查是否是服务器防火墙拦截。
在服务器上访问域名,看能否访问到网站,如果访问得到,可能是防火墙拦截,需要在防火墙中放行80端口,如果访问不到,就进行下一步检查web应用。
4)检查各服务器的负载情况,是否过高负载导致了网站无法访问。若是高负载引起,查明原因再处理。
5)首先检查web应用服务是否正常运行,如果没有正常运行,需要启动web服务;如果正常运行,需要检查web服务内的站点的配置或根据访问返回的状态码,如404,500等,并结合研发检查是否是程序代码问题
11. 结合目前所学回答:linux 系统中病毒怎么解决?
1)最简单有效的方法就是重装系统
2)要查的话就是找到病毒文件然后删除
      中毒之后一般机器cpu、内存使用率会比较高,机器向外发包等异常情况,排查方法简单介绍下:
top 命令找到cpu使用率最高的进程
一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置 ,kill 可疑进程
rm -f  命令删除病毒文件
检查计划任务、开机启动项和病毒文件目录有无其他可疑文件等
3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下
12. 结合目前所学,运维安全需要注意哪些事项?
1)创建普通用户,禁止root登录,合理使用sudo提权,只允许普通用户使用su命令切换到root
这样做的好处是双重密码保护,黑客就算知道了普通用户的密码,如果没有root密码,对服务器上攻击也比较有限.
2)修改ssh的默认端口22,因为ssh的端口是22,我们如果修改了该端口,他们就需要花费一点时间来扫描,稍微增加了点难度.
最好选择10000-65535内的端口.
3)使用一些类似DenyHosts预防SSH暴力破解的软件(不详细介绍).
其实就是一个python脚本或服务,查看非法的登录,次数超过设置的次数自动将ip加入黑名单。
4) 删除特殊的不需要的账户和账户组.
Linux提供了各种不同角色的系统账号,在系统安装完成后,默认会安装很多不必要的用户和用户组,如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,很可能被黑客利用,进而威胁到服务器的安全。
Linux系统中可以删除的默认用户和组大致有如下这些:
可删除的用户,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。
可删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等。
5)关闭系统不需要的服务.只保留本机器使用的服务。
Linux在安装完成后,绑定了很多没用的服务,这些服务默认都是自动启动的。对于服务器来说,运行的服务越多,系统就越不安全,越少服务在运行,安全性就越好,因此关闭一些不需要的服务,对系统安全有很大的帮助
具体哪些服务可以关闭,要根据服务器的用途而定,一般情况下,只要系统本身用不到的服务都认为是不必要的服务。
例如:某台Linux服务器用于www应用,那么除了httpd服务和系统运行是必须的服务外,其他服务都可以关闭。下面这些服务一般情况下是不需要的,可以选择关闭: anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ip6tables、ipsec、isdn、lpd、mcstrans、messagebus、netfs、nfs、nfslock、nscd、pcscd portmap、readahead_early、restorecond、rpcgssd、rpcidmapd、rstatd、sendmail、setroubleshoot、yppasswdd ypserv
6)密码安全策略,采用复杂的密码,或使用本地秘钥+密码方式认证登录 (本地秘钥可防止暴力破解)
7)删减系统登录欢迎信息,防止泄露系统版本等信息,给黑客机会。
可以修改或删除某些系统文件,需要修改或删除的文件有4个,分别是:/etc/issue、/etc/issue.net、/etc/redhat-release和/etc/motd。
/etc/issue和/etc/issue.net文件都记录了操作系统的名称和版本号。
/etc/redhat-release文件也记录了操作系统的名称和版本号,为了安全起见,可以将此文件中的内容删除。
/etc/motd文件是系统的公告信息。每次用户登录后,/etc/motd文件的内容就会显示在用户的终端。通过这个文件系统管理员可以发布一些软件或硬件的升级、系统维护等通告信息,但是此文件的最大作用就、是可以发布一些警告信息,当黑客登录系统后,会发现这些警告信息,进而产生一些震慑作用。看过国外的一个报道,黑客入侵了一个服务器,而这个服务器却给出了欢迎登录的信息,因此法院不做任何裁决。
8)锁定系统重要文件 chattr 
在Linux下锁定文件的命令是chattr,通过这个命令可以修改ext2、ext3、ext4文件系统下文件属性,但是这个命令必须有超级用户root来执行。和这个命令对应的命令是lsattr,这个命令用来查询文件属性。
对重要的文件进行加锁,虽然能够提高服务器的安全性,但是也会带来一些不便。
虽然通过chattr命令修改文件属性能够提高文件系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var等目录。
根目录不能有不可修改属性,因为如果根目录具有不可修改属性,那么系统根本无法工作:
/dev在启动时,syslog需要删除并重新建立/dev/log套接字设备,如果设置了不可修改属性,那么可能出问题;
/tmp目录会有很多应用程序和系统程序需要在这个目录下建立临时文件,也不能设置不可修改属性;
/var是系统和程序的日志目录,如果设置为不可修改属性,那么系统写日志将无法进行,所以也不能通过chattr命令保护。
9)文件权限检查和修改
不正确的权限设置直接威胁着系统的安全,因此运维人员应该能及时发现这些不正确的权限设置,并立刻修正,防患于未然。

以下是必读篇。无需作答

【运维面试】面试官: 说一下OSI七层模型吧?

前言

运维面试过程中经常会被问到OSI七层模型,目前大多数的运维,对于OSI七层模型,都是一知半解,甚至就根本不知道OSI七层模型。

运维这个岗位涉及的面广,有的公司需要运维懂点网络,大部分公司有自己的网络工程师,对于运维的网络要求其实并不高。

不过面试还是要会的,毕竟网络是运维的基础

OSI的七层协议主要包括:
物理层(physical layer)
数据链路层(data link layer)
网络层(network layer)
运输层(transport layer)
会话层(session layer)
表示层(presentation layer)
应用层(application layer)

每一层的协议:
物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器),ISO2110,光导纤维,双绞线
数据链路层:wi-fi, ATM, DTM,令牌环,以太网,PPPoE ,PPP、FR、HDLC、VLAN、MAC(网桥、
交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(交换机)
传输层:TCP(T/TCP · Fast Open) UDP DCCP SCTP RSVP PPTP TLS/SSL
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:DHCP(v6) DNS FTP Gopher HTTP(SPDY、HTTP/2) IMAP4 IRC NNTP XMPP POP3
SIP SMTP SNMP SSH TELNET RPC RTCP RTP RTSP SDP SOAP GTP STUN NTP SSDP

故事版OSI七层模型

一封邮件的自白:

我是一封邮件, 目的地是广州的一个地址,我来到应用层,找到了SMTP邮件协议,来到表示层的进行处理。

表示层要把主人写好的邮件,进行编码和转换,变成我们传输通道里的伙伴们都认识的一种形式。

等待表示层把数据处理完后,其实就已经把数据都知准备好了,这时候我会联系我的代言人会话层进行与主机通话,相当于打电话那样的,目的是把我的主机和服务器建立连接,方便我把数据传输去。

主机: 你好,我是主机,请问你是邮件服务器吗?,我需要和你建立连接。

服务器:你好,我是邮件服务器,连接已经建立。

建立连接后,就开始传输数据了,传输层的任务比较艰巨,他不但要传输数据,还要处理在传输过程中可能出现的异常,比如数据丢包。

在传输的过程中,数据就开始顺着网络层指定的路线进行传输了, 网络错综负责,稍有不慎就走错路,所以网络层在这里就起到了规划路线的作用,相当于快递公司,告诉数据从哪里走最近。

数据到了广州后,就到了数据链路层的手里,数据链路层相当于快递员, 快递员可以精准的找到每个本地网络中的设备,然后把数据精准到传送到相应的设备上去。

剩下的就是物理层了,物理层主要做信号转换和物理传输。

相关面试题:

  1. tcp 和udp 的区别
  2. TCP对应的应用层协议有哪些?UDP对应的应用层协议有哪些?
  3. 常见的http动词有哪些?
  4. ping命令基于哪一层协议的原理是什么?

    参考答案:可自己总结一份更容易记忆的
    1.tcp 和udp 的区别  
        TCP是面向有连接型,UDP是面向无连接型;
        TCP是一对一传输,UDP支持一对一、一对多、多对一和多对多的交互通信;
        TCP是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并添加TCP首部;UDP是面向报文的,对应用层传下来的报文不拆分也不合并,仅添加UDP首部;
    TCP支持传输可靠性的多种措施,包括保证包的传输顺序、重发机制、流量控制和拥塞控制;UDP仅提供最基本的数据传输能力。
    
    2.  TCP对应的应用层协议有哪些?UDP对应的应用层协议有哪些? 
        TCP对应的典型的应用层协议:
        FTP:文件传输协议;
        SSH:远程登录协议;
        HTTP:web服务器传输超文本到本地浏览器的超文本传输协议。
        UDP对应的典型的应用层协议:
        DNS:域名解析协议;
        TFTP:简单文件传输协议;
        SNMP:简单网络管理协议
        
    3.  常见的http动词有哪些?  
        GET: 从服务器获取资源
        POST: 在服务器新建资源
        PUT: 在服务器更新资源
        DELETE: 在服务器删除资源
        HEAD: 获取资源的元数据
        OPTIONAL: 查询对指定的资源支持的方法
        
    4.  ping命令基于哪一层协议的原理是什么?
        ping命令是基于网络层的命令,是基于ICMP协议工作的。


**总结:** 

关于运维面试,你了解这么多就可以了,但是关于OSI七层模型,你如果要学习的话,还需要不少内容,有时间还是在看一下其他的内容比较好。
0

评论

博主关闭了所有页面的评论