有没有发觉,有些linux命令,常见又常用,能理解,但是到了用的时候,又一通百度,找不到心仪的命令,故经过半年的收集,汇集下面的一些常用,实用的liunx命令,以备不时之需!
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
个人感觉这个也是很靠谱的命令: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
取进程占用内存(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 / -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 数据库名中有横线,不能插入数据 的解决方案
加上两个`倒引号,就解决了
#批量替换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 -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 i in `ls` ;do echo $i;done
批量解压: for i in `ls` ;do tar -xzvf $i;done