工作中,历时半年汇集的常用实用的liunx命令

前言:

有没有发觉,有些linux命令,常见又常用,能理解,但是到了用的时候,又一通百度,找不到心仪的命令,故经过半年的收集,汇集下面的一些常用,实用的liunx命令,以备不时之需!

【tail tcpdump find egrep iconv】: 

tail -f a.txt | grep --line-buffer xxx | awk '{print $NF,strftime("%Y-%m-%d_%H:%M:%S",$1),$3,$7,$13,$14,$15}'

tcpdump -iany port xxx -Xnlps0 | grep yyy | grep zzz
find ./ -name "*asd*" 2> /dev/null  #在当前目录,查找含有asd的文件名称的文件
egrep "*asd*"  -Rni   #在当前的目录,查找所有的含有asd内容的文本
iconv -f gbk -t utf-8 source-file -o target-file  #把源文件的字符由gbk转为utf-8

【进程ps】:

个人感觉这个也是很靠谱的命令:linux 下 取进程占用内存(MEM)最高的前10个进程

ps aux|head -1;ps aux|grep -v PID | sort -rn -k +4 | head  

linux 下 取进程占用 cpu 最高的前10个进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head


然后根据查到的结果,可以把没用的进程杀掉(kill + PID号)

【日志空间的处理】:

访问nginx服务器产生的服务器日志文件,日志要定时清理

du -a   //可以看到文件中每个文件的大小
du -sh * | sort -nr    //按照文件大小排序

 

sort CUST.TXT | uniq > Target.TXT #对CUST.TXT文本,进行排序后,再去重,然后,写入Target.TXT

【内存free】:

取进程占用内存(MEM)最高的前10个进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

//计算内存使用率的命令

free -m | sed -n '2p' | awk  '{ print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%" }'

清理liunx的缓存

sync;echo 3> /proc/sys/vm/drop_caches
free -mh

【查找find】:

find / -type f -name "*history" 2> /dev/null |grep -v docker

-exec
    1.参数是一个一个传递的,传递一个参数执行一次rm
    2.文件名有空格等特殊字符也能处理
-xargs 
    1.一次将参数传给命令,可以使用-n控制参数个数
    2.处理特殊文件名需要采用如下方式:

find . -name "*.txt" print0 |xargs -0 rm {} 
find /opt/test/ -type f -name "*.txt" -exec cp {} /tmp \;
find /opt/test/ -type f -name "*.txt" | xargs -i cp {} /tmp
# update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.4

友情链接:https://www.zcfy.cc/article/how-to-change-from-default-to-alternative-python-version-on-debian-linux

列出当前目录及子目录下所有文件和文件夹

find / -name "error" 2> /dev/null
[root@getlnx01 u03]# find . -type f -size +800M
./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 ls -l
-rw-r----- 1 oracle oinstall 2782846976 Mar  6 11:51 ./flash_recovery_area/backup/backupsets/ora_df873513413_s46809_s1
[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 du -h
1.3G    ./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
#如果你还需要对查找结果按照文件大小做一个排序,那么可以使用下面命令
[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 du -h | sort -nr
1004M   ./flash_recovery_area/backup/backupsets/ora_df873524162_s46823_s1
8.1G    ./oradata/epps/undotbs02.dbf

#找到根目录下所有的以a开头的文件并把查找结果当做参数传给rm -rf命令进行删除: 
find / -name “a*” |xargs rm -rf 
find / -name “a*” -exec rm -rf {} \; 
rm -rf $(find / -name “a”)

#如果想指定递归深度,可以这样: 
find / -maxdepth 3 -name “*.mp3” |xargs rm -rf 
find / -maxdepth 3 -name “a*” -exec rm -rf {} \; 
rm -rf $(find / -maxdepth 3 -name “a”) 
#这样只会查找三层目录中符合条件的文件并删除掉! 

#如果你想知道flash_recovery_area目录下面有哪些大文件夹,那么可以将参数max-depth=2 ,如果你想对搜索出来的结果进行排序,那么可以借助于sort命令。如下所示
[root@getlnx01 u03]# du -h --max-depth=2 | sort -n
3.5G    ./flash_recovery_area/EPPS
16K     ./lost+found
29G     ./flash_recovery_area/backup

在/home目录下查找以.txt结尾的文件名

find /home -name "*.txt"

同上,但忽略大小写

find /home -iname "*.txt"

当前目录及子目录下查找所有以.txt和.pdf结尾的文件

find . ( -name ".txt" -o -name ".pdf" )

匹配文件路径或者文件

find /usr/ -path "local"

基于正则表达式匹配文件路径

find . -regex ".*(.txt|.pdf)$"

同上,但忽略大小写

find . -iregex ".*(.txt|.pdf)$"

查找根目录下查找文件夹名称叫www.91cnm.com的目录地址

find / -name www.91cnm.com -d

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行

find / -type f -name “*.log” | xargs grep “ERROR”

例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行

find . -name “*.in” | xargs grep “thermcontact”

【两个`倒引号妙用】:

用两个`倒引号将该命令括起来,倒引号不要嵌套使用
例1:
如 echo  `uname -s`
输出:Linux
 echo  `uname -m`
输出:x86_64
echo  this-is-`uname -s`-`uname -m`
输出:this-is-Linux-x86_64
例2:
vdate=`date +%F`
echo "today is $vdate"
输出:today is 2016-03-15

场景:mysql 数据库名中有横线,不能插入数据 的解决方案

加上两个`倒引号,就解决了

工作中,历时半年汇集的常用实用的liunx命令_第1张图片

redis

#批量替换redis.conf
sed -i -e "s#7001#7006#g" /home/fp/redis-clu/redis5/cluster/7006/redis.conf
#去除注释与空格,查看redis.conf
grep -v "^#" redis6380.conf|grep -v "^$"

netstat

netstat -ano来显示协议统计信息和TCP/IP网络连接
netstat -t/-u/-l/-r/-n【显示网络相关信息,-t:TCP协议,-u:UDP协议,-l:监听,-r:路由,-n:显示IP地址和端口号】
netstat -tlun【查看本机监听的端口】
netstat -an【查看本机所有的网络】
netstat -rn【查看本机路由表】
列出所有端口:netstat -a 
列出所有的TCP端口:netstat -at 
列出所有的UDP端口:netstat -au 
列出所有处于监听状态的socket:netstat -l 
列出所有监听TCP端口的socket:netstat -lt 
列出所有监听UDP端口的socket:netstat -lu 
找出程序运行的端口:netstat -ap | grep ssh 
找出运行在指定端口的进程:netstat -an | grep ‘:80’
几个有用查找:
1.查找请求数前20个IP(常用于查找攻来源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
 
netstat -ant |awk '/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
 
2.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” '{print $1″.”$2″.”$3″.”$4}' | sort | uniq -c | sort -nr |head -20
 
3.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
 
4.找查较多的SYN连接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
 
5.根据端口列进程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1

for循环

for i in  `ls` ;do echo $i;done
批量解压: for i in  `ls` ;do tar -xzvf  $i;done

 

你可能感兴趣的:(脚本,#,shell,liunx,常用实用的linux命令,shell中for循环,find命令加xargs参数,linux内存查找命令,tcpdump和netstat)