目录
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中的各种连接状态,输出连接数
客户端广播DHCP发现(DHCP Discovery)
服务器回应DHCP响应(DHCP Offer)
客户端广播DHCP请求(DHCP Request)
服务器回应DHCP确认(DHCP ACK)
① 巡检:巡检资源(cpu、I/O、磁盘、内存、网络流量)
② 自动化部署:DHCP、nginx、tomcat、mysql、redis服务等
③ 日志分割:当日志达到特定的大小,按照时间日期、大小进行分隔,防止日志内存过大
④ 耦合两个服务(rsync +inotify / keepalived +检测脚本)等等
⑤ 告警:遇到高并发状态或服务出现错误进行邮箱告警
对于一组要排序的元素列,依次比较相邻的两个数,
将比较小的数放在前面,比较大的数放在后面,直到比较到最后的两个数,
将小数放在前面,大数放在后面,重复步骤,一直到全部排序完成
使用 | 结合文件操作符
遍历一个目录,该目录下有可能存在
子目录,所以我们要先定义一个递归函数进行遍历。
然后使用read -p提示用户进行输入一个目录,并判断输入的是否为目录,若为目录,
则调用上面定义的递归函数,否则提示用户输入错误
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
在命令行中提供参数;在脚本开头提供参数;使用set命令禁用或启用参数
⑥ 过滤并杀死僵尸进程(要求写出来)
ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
find:查找;
\tail -f;head;
top:查看动态进程;
ps -aux:静态;
vmstat:查看虚拟内存;
iotop:监控磁盘I/O;
mpstat:查看cpu平均负载;
taskset:查看进程;
sar:系统资源;
cpuinfo:查看cpu
tcpdump:
是Linux下常用的抓包工具,它是一个命令行工具,可以抓取和Wireshark类似的数据,而且保存的数据包,可以放到Wireshark中分析;
Wireshark:
Windows Linux macOS 都可以使用。它不仅可以分析http/https的数据,它还可以tcp的三次握手等
top;
free -m:显示内存使用;
fidsk -l:查看机器所挂硬盘个数及分区情况;
df -h:查看磁盘大小;
iostat -x:显示和I/O相关的数据;
vmstat:可对虚拟内存、进程、cpu活动进行监控;
mpstat: 查看cpu的相关数据
磁盘占用:du;df
内存信息:free -m
CPU信息:cpuinfo;top;mpstat
I/O信息:iostat;iotop;lsof;ifstat
场景:
① 我会在巡检的时候使用到以上的命令,检测出系统/服务器的负载量,并输出到文档中,便于我平时的巡检检测
性能问题: SSH 连接服务器缓慢,网络程序性能低--分析数据流走向
网络故障:数据包分析
(1)ssh连接缓慢,通过tcpdump抓包,可以快速定位到具体原因
(2)可以快速定位到故障原因
(3)当我们新开发的网络程序,没有按照预期工作时,通过 tcpdump 收集相关数据包,从包层面分析具体原因,让问题迎刃而解
(4)可以分析数据流特征,进行网络数据优化,提高网络性能
引导过程:开机自检、mbr引导、grub菜单、linux内核、init进程初始化
启动过程:加载bios 读取mbr、boot loader、加载内核、用户init根据inittab文件设定运行级别--
--》init进程指向 rc.sysinit---->启动内核---》指向不同运行级别的脚本程序--》指向/etc/rc.d/rc.local--->指向/bin/login程序,进入登录状态
netstat -antup:检查所有在使用的端口
方式:查看实时变化的日志:tail -f filename (默认最后10行,相当于增加参数 -n 10)
搜索关键字附近的日志:cat -n filename |grep “关键字”
进入编辑查找:vi(vim)
命令:tail命令、head命令、cat命令
Linux系统的端口号的范围为0–65535,0 不使用
1–1023 系统保留,只能由root用户使用
1024—4999 由客户端程序自由分配
5000—65535 由服务器端程序自由分配
修改后,可以使用以下命令重新加载:
sysctl -p /etc/sysctl.conf
原因是使用rm 删除大文件之后,但该文件还被某个进程占用中,没有得到释放,可以使用 lsof | grep -i delete查看出删除的内容依然被进程占用,
找到相应的进程kill掉即可完成释放。
###添加(一面)
linux下的tmp目录是一个系统产生临时文件的存放目录,其权限是drwxrwxrwt(777),就是对每个用户都可以对他进行读写操作。
其中t的权限比较特殊,特指tmp和/var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,
去浏览、删除和移动文件。为特殊权限。
iostat用于监视系统I/O设备负载。iostat通过观察设备处于活动状态的时间(相对于其平均传输速率)来整理实时报告输出 。
主要用于监视nfs网络文件系统和本地文件系统
iostat 主要用于输出磁盘IO 和 CPU的统计信息。
iostat [选项] [<时间间隔>] [<次数>]
(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}
/etc/passwd是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息.。
/etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件。
影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户root可读。
这使破译口令更困难,以此增加系统的安全性。
top -n :将会在刷新输出几次后退出
inode耗尽故障:当iNode耗尽后,磁盘虽然有剩余空间,但也会出现 no space left 的报错,用 df -i 命令可以查看所有分区对应inode的使用情况
用 ls -i nginx.log 能查看对应文件的inode编号。详细信息用 stat nginx.log 查看
针对inode耗尽的情况,清理删除那些无用的文件就可以了,尤其是那些碎小的文件
删除文件后空间不释放问题:文件系统的数据分为两个部分:数据部分和指针部分,当有进程正在使用某个文件时,执行删除命令,
空间是不会释放的,删除的是数据文件部分,指针部分并未删除,所以空间并不释放
用 lsof |grep delete 查看已删除的文件,找到对应文件 执行清空命令 echo " " > /tmp/nginx.log 空间就会得到释放
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及其启动的进程的可用文件句柄的控制。这是进程级别的
查看是否是网络的原因、查看防火墙配置、是否安装ssh服务、查看ssh服务是否成功开启、22端口被其它服务占用
sudo、修改文件的权限chmod 、修改用户所属主和属组chown创建一个组在组中加入组成员并给组提升权限,这样组成员就会获得权限
lamp一键部署脚本、lnmp一键部署脚本
对称加密就是加密解密都用同一个秘钥
非对称加密就是加密和解密不是用的同一种秘钥
证书:类似驾照,记载信息,由认证机构施加数字签名
令牌加密:a 系统进行页面跳转到 b系统,并携带相关参数信息
iowait 表示等待IO完成,在此期间 CPU 不能接受其他任务、iowait 高表示 IO 存在瓶颈
系统进程处理缓慢的时候会用
netstat -natp | awk '{print $6}' | sort | uniq -c | sort -r
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
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