面试(1)

目录

1、DHCP服务 是哪四种报文

2、你们公司一般会使用shell脚本做什么

3、shell脚本常问的题目

① 冒泡排序:

② shell脚本如何开启多进程/多线程运行:使用for 、while 循环语句的时候放在后台执行、

③ 需求:便利一个指定目录下的所有文件,并打印出来(要求将编写思路和内容说出来)

④ 需求:过滤出日访问量最多的IP来源(前10个),并打印(要求将编写思路和内容说出来)

⑤ shell脚本咋调试

4、linux系统 常用的运维命令有哪些 (查询类)

5、常用的抓包工具/命令有哪些

6、服务器性能分析命令有哪些

7、常用的查看系统硬件资源命令

8、tcpdump 可以获取那些信息(tcpdump的使用场景)

9、Linux 系统启动过程

 10、检查端口占用情况

11、查询日志的方式/命令有哪些

12、如何配置可分配的端口范围

13、硬盘空间满,删除了大文件之后空间没有释放

1、 tmp 目录的权限是什么?延申:t代表什么

2、如何查看磁盘 I/O状态

3、shell脚本如何删除空白行

4、/etc/passwd 和/etc/shadow 有什么不同

5、top -n 啥意思

6、你遇到过什么故障、如何处理(linux)

7、你会做哪些内核优化和文件句柄限制【系统、主要使用的应用服务】

8、linux网络中,如果我无法ssh登陆会有哪些可能

9、如何限制程序用户的权限/如何开启

10、你有没有写过200/500/1000+行的shell,写的是什么

11、对称与非对称加密有什么区别,同时和证书、令牌加密有什么区别(一面)

12、IOWAIT 是做什么的,什么时候会用

13、netstat 怎么筛选TCP协议的各种连接状态

14、shell脚本筛选出文本中所有IP,并去重(IP没有规律排列,不能直接用$1 筛选)

15、使用正则表达式,筛选出netstat -natp中的各种连接状态,输出连接数


1、DHCP服务 是哪四种报文

客户端广播DHCP发现(DHCP Discovery)

服务器回应DHCP响应(DHCP Offer)

客户端广播DHCP请求(DHCP Request)

服务器回应DHCP确认(DHCP ACK)

2、你们公司一般会使用shell脚本做什么

① 巡检:巡检资源(cpu、I/O、磁盘、内存、网络流量)

② 自动化部署:DHCP、nginx、tomcat、mysql、redis服务等

③ 日志分割:当日志达到特定的大小,按照时间日期、大小进行分隔,防止日志内存过大

④ 耦合两个服务(rsync +inotify / keepalived +检测脚本)等等

⑤ 告警:遇到高并发状态或服务出现错误进行邮箱告警

3、shell脚本常问的题目

① 冒泡排序:

对于一组要排序的元素列,依次比较相邻的两个数,

将比较小的数放在前面,比较大的数放在后面,直到比较到最后的两个数,

将小数放在前面,大数放在后面,重复步骤,一直到全部排序完成

② shell脚本如何开启多进程/多线程运行:使用for 、while 循环语句的时候放在后台执行、

使用 | 结合文件操作符

③ 需求:便利一个指定目录下的所有文件,并打印出来(要求将编写思路和内容说出来)

遍历一个目录,该目录下有可能存在 

子目录,所以我们要先定义一个递归函数进行遍历。

然后使用read -p提示用户进行输入一个目录,并判断输入的是否为目录,若为目录,

则调用上面定义的递归函数,否则提示用户输入错误

④ 需求:过滤出日访问量最多的IP来源(前10个),并打印(要求将编写思路和内容说出来)

1.首先要查看日志,从日志中提取出所有的IP:cat  a.txt | grep awk -F "" '{print $1}'

2.在对IP进行统计,看看IP出现过多少次:cat  aa.txt | grep awk -F "" '{print $1}'| uniq -c

3.按IP出现次数从大到小排列:cat  a.txt | grep awk -F "" '{print $1}'| uniq -c| sort -r

4.最后就提取出前10个出现最多的IP:cat a.txt |awk -F " " '{print $1}' |uniq -c |sort -r |awk '{print $2}' |head -10

⑤ shell脚本咋调试

 在命令行中提供参数;在脚本开头提供参数;使用set命令禁用或启用参数

⑥ 过滤并杀死僵尸进程(要求写出来)

ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

4、linux系统 常用的运维命令有哪些 (查询类)

find:查找;

\tail -f;head;

top:查看动态进程;
ps -aux:静态;

vmstat:查看虚拟内存;

iotop:监控磁盘I/O;

mpstat:查看cpu平均负载;

taskset:查看进程;

sar:系统资源;

cpuinfo:查看cpu

5、常用的抓包工具/命令有哪些

tcpdump:

是Linux下常用的抓包工具,它是一个命令行工具,可以抓取和Wireshark类似的数据,而且保存的数据包,可以放到Wireshark中分析;

Wireshark:

Windows Linux macOS 都可以使用。它不仅可以分析http/https的数据,它还可以tcp的三次握手等

6、服务器性能分析命令有哪些

top;

free -m:显示内存使用;

fidsk -l:查看机器所挂硬盘个数及分区情况

df -h:查看磁盘大小;

iostat -x:显示和I/O相关的数据;

vmstat:可对虚拟内存、进程、cpu活动进行监控;

mpstat: 查看cpu的相关数据

7、常用的查看系统硬件资源命令

磁盘占用:du;df

内存信息:free -m

CPU信息:cpuinfo;top;mpstat

I/O信息:iostat;iotop;lsof;ifstat

场景:

① 我会在巡检的时候使用到以上的命令,检测出系统/服务器的负载量,并输出到文档中,便于我平时的巡检检测

8、tcpdump 可以获取那些信息(tcpdump的使用场景)

性能问题: SSH 连接服务器缓慢,网络程序性能低--分析数据流走向

网络故障:数据包分析

(1)ssh连接缓慢,通过tcpdump抓包,可以快速定位到具体原因

(2)可以快速定位到故障原因

(3)当我们新开发的网络程序,没有按照预期工作时,通过 tcpdump 收集相关数据包,从包层面分析具体原因,让问题迎刃而解

(4)可以分析数据流特征,进行网络数据优化,提高网络性能

9、Linux 系统启动过程

引导过程:开机自检、mbr引导、grub菜单、linux内核、init进程初始化

启动过程:加载bios  读取mbr、boot loader、加载内核、用户init根据inittab文件设定运行级别--

--》init进程指向 rc.sysinit---->启动内核---》指向不同运行级别的脚本程序--》指向/etc/rc.d/rc.local--->指向/bin/login程序,进入登录状态

 10、检查端口占用情况

netstat -antup:检查所有在使用的端口

11、查询日志的方式/命令有哪些

方式:查看实时变化的日志:tail -f filename (默认最后10行,相当于增加参数 -n 10)

          搜索关键字附近的日志:cat -n filename |grep “关键字”

          进入编辑查找:vi(vim)

命令:tail命令、head命令、cat命令

12、如何配置可分配的端口范围

Linux系统的端口号的范围为0–65535,0 不使用

1–1023 系统保留,只能由root用户使用

1024—4999 由客户端程序自由分配

5000—65535 由服务器端程序自由分配

修改后,可以使用以下命令重新加载:

sysctl -p  /etc/sysctl.conf

13、硬盘空间满,删除了大文件之后空间没有释放

原因是使用rm 删除大文件之后,但该文件还被某个进程占用中,没有得到释放,可以使用 lsof | grep -i delete查看出删除的内容依然被进程占用,

找到相应的进程kill掉即可完成释放。

###添加(一面)

1、 tmp 目录的权限是什么?延申:t代表什么

linux下的tmp目录是一个系统产生临时文件的存放目录,其权限是drwxrwxrwt(777),就是对每个用户都可以对他进行读写操作。

其中t的权限比较特殊,特指tmp和/var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,

去浏览、删除和移动文件。为特殊权限。

2、如何查看磁盘 I/O状态

iostat用于监视系统I/O设备负载。iostat通过观察设备处于活动状态的时间(相对于其平均传输速率)来整理实时报告输出 。

主要用于监视nfs网络文件系统和本地文件系统

iostat 主要用于输出磁盘IO 和 CPU的统计信息。

iostat [选项] [<时间间隔>] [<次数>] 

3、shell脚本如何删除空白行

(1)cat 文件名 |tr  -s  “\n”             tr -d “\n” 是删除回车        

(2)sed  ”/^$/d“ 文件名                加-i修改原文件

(3)grep -v “^$” 文件名                条件有多个正则的时候  “(^#)|(^$)”

(4)cat 文件名 |awk ‘{if($0!=”")print}'

         cat 文件名 |awk ‘{if(length !=0) print $0}

4、/etc/passwd 和/etc/shadow 有什么不同

/etc/passwd是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息.。

/etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件。

影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户root可读。

这使破译口令更困难,以此增加系统的安全性。

5、top -n 啥意思

top -n :将会在刷新输出几次后退出

6、你遇到过什么故障、如何处理(linux)

 inode耗尽故障:当iNode耗尽后,磁盘虽然有剩余空间,但也会出现 no space left 的报错,用 df -i 命令可以查看所有分区对应inode的使用情况

                用 ls -i nginx.log   能查看对应文件的inode编号。详细信息用 stat nginx.log 查看

              针对inode耗尽的情况,清理删除那些无用的文件就可以了,尤其是那些碎小的文件

删除文件后空间不释放问题:文件系统的数据分为两个部分:数据部分和指针部分,当有进程正在使用某个文件时,执行删除命令,

                                           空间是不会释放的,删除的是数据文件部分,指针部分并未删除,所以空间并不释放

                                           用 lsof |grep delete    查看已删除的文件,找到对应文件 执行清空命令  echo " " > /tmp/nginx.log  空间就会得到释放

7、你会做哪些内核优化和文件句柄限制【系统、主要使用的应用服务】

net.ipv4.ip_forward=1 开启路由功能

net.ipv4.tcp_keepalive_time = 30

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl = 3

//如果某个TCP连接在空闲30秒后,内核才发起probe(探查);

//如果probe 3次(每次3秒既tcp_keepalive_intvl值)不成功,内核才彻底放弃,认为该连接已失效;

ulimit -n 控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的

8、linux网络中,如果我无法ssh登陆会有哪些可能

查看是否是网络的原因、查看防火墙配置、是否安装ssh服务、查看ssh服务是否成功开启、22端口被其它服务占用

9、如何限制程序用户的权限/如何开启

sudo、修改文件的权限chmod 、修改用户所属主和属组chown创建一个组在组中加入组成员并给组提升权限,这样组成员就会获得权限

10、你有没有写过200/500/1000+行的shell,写的是什么

lamp一键部署脚本、lnmp一键部署脚本

11、对称与非对称加密有什么区别,同时和证书、令牌加密有什么区别(一面)

对称加密就是加密解密都用同一个秘钥

非对称加密就是加密和解密不是用的同一种秘钥

证书:类似驾照,记载信息,由认证机构施加数字签名

令牌加密:a 系统进行页面跳转到 b系统,并携带相关参数信息

12、IOWAIT 是做什么的,什么时候会用

iowait 表示等待IO完成,在此期间 CPU 不能接受其他任务、iowait 高表示 IO 存在瓶颈

系统进程处理缓慢的时候会用

13、netstat 怎么筛选TCP协议的各种连接状态

netstat -natp | awk '{print $6}' | sort | uniq -c | sort -r

14、shell脚本筛选出文本中所有IP,并去重(IP没有规律排列,不能直接用$1 筛选)

ip_regex="[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"

find . "1.txt" -type f -print | xargs cat | egrep -o $ip_regex | sort | uniq

15、使用正则表达式,筛选出netstat -natp中的各种连接状态,输出连接数

netstat -natp|awk '{print $6}'|sort|uniq -c|sort -rn

16、检测shell 2000台主机的使用信息(CPU、内存、磁盘)————》进阶是ansible

#!/bin/bash

function cpu() {

    NUM=1

    while [ $NUM -le 3 ]; do

        util=`vmstat |awk '{if(NR==3)print 100-$15"%"}'`

        user=`vmstat |awk '{if(NR==3)print $13"%"}'`

        sys=`vmstat |awk '{if(NR==3)print $14"%"}'`

        iowait=`vmstat |awk '{if(NR==3)print $16"%"}'`

        echo "CPU - 使用率: $util , 等待磁盘IO响应使用率: $iowait"

        let NUM++

        sleep 1

    done

}

function mem() {

    total=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}'`

    used=`free -m |awk '{if(NR==2) printf "%.1f",($2-$NF)/1024}'`

    available=`free -m |awk '{if(NR==2) printf "%.1f",$NF/1024}'`

    echo "内存 - 总大小: ${total}G , 使用: ${used}G , 剩余: ${available}G"

}

function fdisk() {

    fs=$(df -h |awk '/^\/dev/{print $1}')

    for p in $fs; do

        mounted=$(df -h |awk '$1=="'$p'"{print $NF}')

        size=$(df -h |awk '$1=="'$p'"{print $2}')

        used=$(df -h |awk '$1=="'$p'"{print $3}')

        used_percent=$(df -h |awk '$1=="'$p'"{print $5}')

        echo "硬盘 - 挂载点: $mounted , 总大小: $size , 使用: $used , 使用率: $used_percent"

    done

}

function tcp_status() {

    summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i":"status[i]" "}')

    echo "TCP连接状态 - $summary"

}

cpu

mem

fdisk

tcp_status

你可能感兴趣的:(Linux,服务器,网络,linux)