运维常用技巧!!!!!!!!!

运维必备的17个技巧

网络工程师笔记 运维网工 2023-02-09 09:00 发表于重庆

1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录:

find . -name “*.tar” -exec mv {}./backup/ ;

注解:find –name 主要用于查找某个文件名字,-exec 、xargs 可以用来承接前面的结果,然后将要执行的动作,一般跟 find 在一起用的很多,find 使用我们可以延伸 -mtime 查找修改时间、-type 是指定对象类型(常见包括 f 代表文件、d代表目录),-size 指定大小,例如经常用到的:查找当前目录30天以前大于100M的LOG文件并删除。

find . -name "*.log" –mtime +30 –type f –size +100M | xargs rm –rf {};

2、批量解压当前目录下以 .zip 结尾的所有文件到指定目录:

for i  in  `find . –name “*.zip”–type f `

do

unzip –d $i /data/www/img/

done

注解:for i in (command); do … done 为 for 循环的一个常用格式,其中I为变量,可以自己指定。

3、sed常用命收集:test.txt做测试

如何去掉行首的.字符:

sed -i ‘s/^.//g’ test.txt

在行首添加一个a字符:

sed’s/^/a/g’    test.txt

在行尾添加一个a字符:

sed’s/$/a/‘     tets.txt

在特定行后添加一个c字符:

sed ‘/wuguangke/ac’ test.txt

在行前加入一个c字符:

sed’/wuguangke/ic’ test.txt

更多sed命令请查阅相关文档。

4、如何判断某个目录是否存在,不存在则新建,存在则打印信息。

if

[! –d /data/backup/];then

Mkdir–p /data/backup/

else

echo  "The Directory alreadyexists,please exit"

fi

注解:if…;then …else ..fi:为if条件语句,!叹号表示反义“不存在“,-d代表目录。

5、监控linux磁盘根分区,如果根分区空间大于等于90%,发送邮件给Linux SA

(1)、打印根分区大小

df -h |sed -n '//$/p'|awk '{print $5}'|awk –F ”%” '{print $1}'

注解:awk ‘{print $5}’意思是打印第5个域,-F的意思为分隔,例如以%分隔,简单意思就是去掉百分号,awk –F. ‘{print $1}’分隔点.号。

(2)、if条件判断该大小是否大于90,如果大于90则发送邮件报警

while sleep 5m

do

for i in `df -h |sed -n '//$/p' |awk '{print $5}' |sed 's/%//g'`

do

echo $i

if [ $i -ge 90 ];then

echo “More than 90% Linux of disk space ,Please LinuxSA Check Linux Disk !” |mail -s “Warn Linux / Parts is $i%” 

XXX@XXX.XX

fi

done

done

6、统计 Nginx 访问日志,访问量排在前20 的 ip地址:

cat access.log |awk '{print $1}'|sort|uniq -c |sort -nr |head -20

注解:sort排序、uniq(检查及删除文本文件中重复出现的行列 )

7、sed另外一个用法找到当前行,然后在修改该行后面的参数:

sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

Sed冒号方式 sed -i ‘s:/tmp:/tmp/abc/:g’test.txt意思是将/tmp改成/tmp/abc/。

8、打印出一个文件里面最大和最小值:

cat a.txt |sort -nr|awk ‘{}END{print} NR==1′

cat a.txt |sort -nr |awk ‘END{print} NR==1′

这个才是真正的打印最大最小值:sed ‘s/ / /g’ a.txt |sort -nr|sed -n ’1p;$p’

9、使用snmpd抓取版本为v2的cacti数据方式:

snmpwalk -v2c -c public 192.168.0.241

10、修改文本中以jk结尾的替换成yz:

sed -e ‘s/jk$/yz/g’ b.txt

11、网络抓包:Tcpdump

tcpdump -nn host 192.168.56.7 and port 80 抓取56.7通过80请求的数据包。

tcpdump -nn host 192.168.56.7 or ! host 192.168.0.22 and port 80 排除0.22 80端口!

tcp/ip 7层协议物理层–数据链路层-网络层-传输层-会话层-表示层-应用层。

12、显示最常用的20条命令:

cat .bash_history | grep -v ^# | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head-20

13、写一个脚本查找最后创建时间是3天前,后缀是*.log 的文件并删除。

find . -mtime +3  -name "*.log" |xargs rm -rf {} ;

14、写一个脚本将某目录下大于100k的文件移动至/tmp下。

find . -size +100k -exec mv {} /tmp ;

15、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。

iptables -F

iptables -X

iptables -A INPUT -p tcp --dport 80 -j accept

iptables -A INPUT -p tcp -j REJECT

或者

iptables -A INPUT -m state --state NEW-m tcp -p tcp --dport 80 -j ACCEPT

16、写一个脚本进行 Nginx 日志统计,得到访问 IP 最多的前10个(nginx日志路径:

/home/logs/nginx/default/access.log)。

cd /home/logs.nginx/default

sort -m -k 4 -o access.logok access.1 access.2 access.3 .....

cat access.logok |awk '{print $1}'|sort -n|uniq -c|sort -nr |head -10

17、替换文件中的目录

sed 's:/user/local:/tmp:g' test.txt

或者

sed -i 's//usr/local//tmp/g' test.txt

作者: 网络工程师笔记

 


 

运维网工
分享网络运维、运维规划、运维开发、Python运维、Linux运维、devops工具链、k8s容器化技术、自动化监控、日志收集等知识,推广围绕DevOps理念的自动化运维、高效运维、智能运维等优秀实践,让运维工程师更加专注于自动化。

 

收录于合集 #网络运维
 10
上一篇上手世界上最小的操作系统MenuetOS,仅有1.4M,安装运行全教程

超实用的 Linux 高级命令

编程资料分享 2023-01-31 13:52 发表于山西




前言


在运维的坑里摸爬滚打好几年了,我还记得我刚开始的时候,我只会使用一些简单的命令,写脚本的时候,也是要多简单有多简单,所以有时候写出来的脚本又长又臭。

像一些高级点的命令,比如说 Xargs 命令、管道命令、自动应答命令等,如果当初我要是知道,那我也可能写出简洁高效的脚本。

不管出于任何原因,我都想对一些 Linux 使用的高级命令进行用法说明,利人利己,以后不记得的话,我也可以回头翻来看看。







一、实用的 xargs 命令


在平时的使用中,我认为 xargs 这个命令还是较为重要和方便的。我们可以通过使用这个命令,将命令输出的结果作为参数传递给另一个命令。

比如说我们想找出某个路径下以 .conf 结尾的文件,并将这些文件进行分类,那么普通的做法就是先将以 .conf 结尾的文件先找出来,然后输出到一个文件中,接着 cat 这个文件,并使用 file 文件分类命令去对输出的文件进行分类。

这个普通的方法还的确是略显麻烦,那么这个时候 xargs 命令就派上用场了。
例1:找出 / 目录下以 .conf 结尾的文件,并进行文件分类
命令:

find / -name *.conf -type f \-print | xargs file

输出结果如下所示:

图片

xargs 后面不仅仅可以加文件分类的命令,你还可以加其他的很多命令,比如说实在一点的tar命令,你可以使用find命令配合tar命令,将指定路径的特殊文件使用find命令找出来,然后配合tar命令将找出的文件直接打包,命令如下:

find / -name *.conf -type f \-print | xargs tar cjf test.tar.gz






二、命令或脚本后台运行


有时候我们进行一些操作的时候,不希望我们的操作在终端会话断了之后就跟着断了,特别是一些数据库导入导出操作,如果涉及到大数据量的操作,我们不可能保证我们的网络在我们的操作期间不出问题,所以后台运行脚本或者命令对我们来说是一大保障。

比如说我们想把数据库的导出操作后台运行,并且将命令的操作输出记录到文件,那么我们可以这么做:(反斜杠代表换行,可以忽略)

nohup mysqldump -uroot -pxxxxx \all-databases > \./alldatabases.sql &(xxxxx是密码)

当然如果你不想密码明文,你还可以这么做:

nohup mysqldump -uroot -pxxxxx \all-databases \> ./alldatabases.sql (后面不加&符号)

执行了上述命令后,会提示叫你输入密码,输入密码后,该命令还在前台运行,但是我们的目的是后天运行该命令,这个时候你可以按下Ctrl+Z,然后在输入bg就可以达到第一个命令的效果,让该命令后台运行,同时也可以让密码隐蔽输入。

命令后台执行的结果会在命令执行的当前目录下留下一个nohup.out文件,查看这个文件就知道命令有没有执行报错等信息。







三、找出当前系统内存使用量较高的进程


在很多运维的时候,我们发现内存耗用较为严重,那么怎么样才能找出内存消耗的进程排序呢?
命令:

ps -aux | sort -rnk 4 | head -20

图片

输出的第4列就是内存的耗用百分比。最后一列就是相对应的进程。

 







四、找出当前系统CPU使用量较高的进程

 

在很多运维的时候,我们发现CPU耗用较为严重,那么怎么样才能找出CPU消耗的进程排序呢?
命令:

ps -aux | sort -rnk 3 | head -20

图片

输出的第3列为CPU的耗用百分比,最后一列就是对应的进程。

我想大家应该也发现了,sort 命令后的3、4其实就是代表着第3列进行排序、第4列进行排序。







五、同时查看多个日志或数据文件


在日常工作中,我们查看日志文件的方式可能是使用tail命令在一个个的终端查看日志文件,一个终端就看一个日志文件。包括我在内也是,但是有时候也会觉得这种方式略显麻烦,其实有个工具叫做multitail可以在同一个终端同时查看多个日志文件。

首先安装multitail:

wget ftp://ftp.is.co.za/mirror/ftp.rpmforge.net/redhat/el6/en/x86_64/dag/RPMS/multitail-5.2.9-1.el6.rf.x86_64.rpm
yum -y localinstall multitail-5.2.9-1.el6.rf.x86_64.rpm

multitail工具支持文本的高亮显示,内容过滤以及更多你可能需要的功能。

如下就来一个有用的例子:
此时我们既想查看secure的日志指定过滤关键字输出,又想查看实时的网络ping情况:
命令如下:

multitail -e "Accepted" \/var/log/secure -l "ping baidu.com"

 

图片

不是很方便?如果平时我们想查看两个日志之间的关联性,可以观察日志输出是否有触发等。如果分开两个终端可能来回进行切换有点浪费时间,这个multitail工具查看未尝不是一个好方法。

 







六、持续ping并将结果记录到日志


很多时候,运维总会听到一个声音,是不是网络出什么问题了啊,导致业务出现怪异的症状,肯定是服务器网络出问题了。这个就是俗称的背锅,业务出了问题,第一时间相关人员找不到原因很多情况下就会把问题归结于服务器网络有问题。

这个时候你去ping几个包把结果丢出来,人家会反驳你,刚刚那段时间有问题而已,现在业务都恢复正常了,网络肯定正常啊,这个时候估计你要气死。

你要是再拿出zabbix等网络监控的数据,这个时候就不太妥当了,zabbix的采集数据间隔你不可能设置成1秒钟1次吧?小编就遇到过这样的问题,结果我通过以下的命令进行了ping监控采集。

然后再有人让我背锅的时候,我把出问题时间段的ping数据库截取出来,大家公开谈,结果那次被我叼杠回去了,以后他们都不敢轻易甩锅了,这个感觉好啊。

命令:

ping api.jpush.cn | awk '{ print $0 " " strftime(“%Y-%m-%d %H:%M:%S”,systime()) }' >> /tmp/jiguang.log &

输出的结果会记录到/tmp/jiguang.log 中,每秒钟新增一条ping记录,如下:

图片







七、查看tcp连接状态


指定查看80端口的tcp连接状态,有利于分析连接是否释放,或者攻击时进行状态分析。

命令:

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

 

图片







八、查找80端口请求数最高的前20个IP


有时候业务的请求量突然上去了,那么这个时候我们可以查看下请求来源IP情况,如果是集中在少数IP上的,那么可能是存在攻击行为,我们使用防火墙就可以进行封禁。命令如下:

netstat -anlp|grep 80|grep tcp|awk '{print $5}' \|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

图片

 







九、ssh实现端口转发


可能很多的朋友都听说过ssh是linux下的远程登录安全协议,就是通俗的远程登录管理服务器。但是应该很少朋友会听说过ssh还可以做端口转发。其实ssh用来做端口转发的功能还是很强大的,下面就来做示范。

实例背景:我们公司是有堡垒机的,任何操作均需要在堡垒机上进行,有写开发人员需要访问ELasticSearch的head面板查看集群状态,但是我们并不想将ElasticSearch的9200端口映射出去,依然想通过堡垒机进行访问。所以才会将通往堡垒机(192.168.1.15)的请求转发到服务器ElasticSearch(192.168.1.19)的9200上。

例子:
将发往本机(192.168.1.15)的9200端口访问转发到192.168.1.19的9200端口

ssh -p 22 -C -f -N -g -L \9200:192.168.1.19:9200 \ihavecar@192.168.1.19

记住:前提是先进行秘钥传输。

命令执行完后,访问192.168.1.15:9200端口则真实是访问192.168.1.19:9200端口。

 

阅读 693
编程资料分享
6篇原创内容
 
 
 
posted @ 2023-02-09 11:04  往事已成昨天  阅读(132)  评论(0编辑  收藏  举报