linux常用命令积累(常更新)

时间:2022-12-10 15:14:46

手动清理内存缓存

echo 1 > /proc/sys/vm/drop_caches

批量替换文件夹中多个文件中的字符串

sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`    注意grep前面和最后面的引号为反引号就是tab键上面的引号

列出当前文件夹目录大小,以G,M,K显示。
du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf"%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"):$1>=2**10? ($1/2**10, "K"): ($1, "")}e'

查看linux系统最近重启时间命令

last reboot

linux下搜索文件中包含指定字符串的方法

例如我们想搜索当前目录下所有文件中包含字符串test 的方法如下

方法1: find . -name "*.*"|xargs grep "test"

方法2: grep -n "test" -r ./

fc-cache -fv   更新字体信息缓存

find -type f -size 0 -exec rm -rf {} /;   删除0字节文件

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'     查看http的并发请求数及其TCP连接状态

取IP地址:ifconfig eth0|sed -n '2p'|awk '{print $2}'|cut -c 6-30

 截取文件件指定行内容 例如截取a.txt中的2-6行

awk '{if(NR>=2&&NR<=6) print $0}' a.txt    或者用sed -n '2,6' a.txt

统计日志客户端ip总流量排序

#linux apache nginx
awk '{a[$1]=a[$1]+$10}END{for(i in a)print a/1024/1024"MB",i}' access.log|sort -nr >ip_tarffic.log


pv统计问题
原始日志格式文本如下:
#cat a.lst

10.10.1.1        http://www.hao.com/1.html
10.10.1.2        http://www.hao.com/2.html
10.10.1.3        http://www.hao.com/3.html
10.10.1.4        http://www.hao.com/4.html
10.10.1.2        http://www.hao.com/1.html
10.10.1.1        http://www.hao.com/1.html
10.10.1.1        http://www.hao.com/2.html
10.10.1.2        http://www.hao.com/3.html
10.10.1.1        http://www.hao.com/1.html
10.10.1.3        http://www.hao.com/2.html

求教一 shell脚本或 perl脚本处理后生成如下报表:

url                                        独立ip                  pv
--------------------------------------------------------------------
http://www.hao.com/1.html        2                4
http://www.hao.com/2.html        3                3
http://www.hao.com/3.html        2                2
http://www.hao.com/4.html        1                1


总结:即通过url计算每个url的独立ip数和pv数,并可按pv数或者独立ip数量进行排序
awk '!($0 in a){a[$0];a[$2]++}{b[$2]++}END{for(i in b)print i,a[i],b[i]}' urfile | sort


清除僵死进程 ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9

tcpdump 抓包 ,用来防止80端口被人攻击时可以分析数据# tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts

 

检查IP的重复数 并从小到大排序 注意 "-t/ +0"  中间是两个空格

# less pkts | awk {'printf $3"/n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"/n"'} | sort -n -t/ +0

 

利用iptables对应简单攻击

netstat -an | grep -v LISTEN | awk ‘{print $5}’ |grep -v 127.0.0.1|grep -v 本机ip|sed  “s/::ffff://g”|awk ‘BEGIN { FS=”:” } { Num[$1]++ } END { for(i in Num) if(Num>8) { print i} }’ |grep ‘[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}’|  xargs -i[] iptables -I INPUT -s [] -j DROP

 

打开文件数目  # lsof | wc -l
检查打开文件总数是否过多

 

统计var目录下文件以M为大小,以列表形式列出来。
find /var -type f | xargs ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s/n", size,$2);}' | head


查找var目录下文件大于100M的文件,并统计文件的个数
find /var -size +100M -type f | tee file_list | wc -l

 

sed 's/foo/bar/g' filename         # 标准替换命令


sed '/foo/ s/foo/bar/g' filename   # 速度更快


sed '/foo/ s//bar/g' filename      # 简写形式



日期命令 

昨天 # date -d -1day +%Y%m%d    前天 # date -d -2day +%Y%m%d   上月 # date -d -1month +%Y%m%d

明天 # date -d 1day +%Y%m%d    后天 # date -d 2day +%Y%m%d     下月 # date -d 1month +%Y%m%d  
 

编译当前目录下的所有.c文件:

 for file in *.c; do echo $file ; gcc -o $(basename $file .c) $file  ; sleep 2;  done > compile 2>&1
最受欢迎的10个 Linux 单行命令
1  sudo !!

以 root 帐户执行上一条命令。

2  python -m SimpleHTTPServer

利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。

3 :w !sudo tee %

在 Vim 中无需权限保存编辑的文件。

4  cd -

更改到上一次访问的目录。

5  ^foo^bar

将上一条命令中的 foo 替换为 bar,并执行。

6  cp filename{,.bak}

快速备份或复制文件。

7 mtr google.com

traceroute + ping。

8 !whatever:p

搜索命令历史,但不执行。

9  ssh-copy-id user@host

将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。

10  ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

把 Linux 桌面录制为视频。

清空linux buffer cache
sync && echo 3 > /proc/sys/vm/drop_caches

.将当前目录文件名全部转换成小写
for i in *; do mv "$i" "$(echo $i|tr A-Z a-z)"; done

清除所有arp缓存
arp -n|awk '/^[1-9]/ {print "arp -d "$1}'|sh

绑定已知机器的arp地址
cat /proc/net/arp | awk '{print $1 " " $4}' |sort -t. -n +3 -4 > /etc/ethers

 
统计文件中所有单词出现的次数
方法一  tr " \011" "\012\012" < filename |tr -dc "[a-z][A-Z]\012" |sort |uniq -c|sort -nr
 

tr " \011" "\012\012" < filename 读入文件filename,并将空格和tab(\011)转换为回车(\012)

tr -dc "[a-z][A-Z]\012" 删除文件中非字母以及回车的其他字符(-c按条件取反,-d删除)

方法二  cat filename | xargs -n1 | tr A-Z a-z | sed -e 's/\.//g' -e 's/\,//g' -e 's///g' | sort | uniq -c | sort -nr
 
统计web日志中来源域名个数
cat web.log|awk '{split($11,domain,"/");print domain[3]}'|sort|uniq -c|sort -nr
linux date命令 时间戳与时间互换
date -d "2011-10-10" +%s 
$ 1318176000
$ date -d "1970-01-01 UTC 1318176000 seconds"  
$ 2011年 10月 10日 星期一 00:00:00 CST  
 
 
显示字符的转义码命令 $ showkey -a 然后输入需要转义的字符即可显示八进制 十进制 十六进制 的转义码
 

使用 rsync 解决scp 无法续传

rsync -avzP -e ssh *.tgz cikuu@www.host.com: /home/user/

多服务器日志合并 sort -m -t " " -k 4 -o log_all log1 log2 log3 先按照时间排序再合并
 
提取一定时间范围的日志 awk '{split($4,a,":");if (a[1]>=18&&a[1]<19) print $0}' nginx.log 去18-19点之间的日志
多线程下载工具
lftp加了一个参数c之后据说可以断点续传,实际上,它是默认不断点续传的,然后在其配置文件
/etc/lftp.conf
添加这一行
set xfer:clobber on
 lftp -c "pget -c -n 10 http://www.domain.com/test.tar.gz" 
vim编辑器中的列编辑模式
vim file 打开文件后 按[ctrl]+v 进入可视化模式 按方向键选取多行,按d 键删除多列 ,按 I 键 进入列编辑输入插入内容,按esc两次即可
当前目录文件以每行一个文件形式输出方法(1) ls -1 (2)ls|tr -s "\t" "\r\n"
多字段排序:
Sort -t: +2n -3 +5n -6 //以:为分隔符,对第3字段以数字方式,第6字段以数字方式排序
说明:  指定第m个字段的方法是: +(m-1) -m 字段后跟n表示数字序

linux 快速格式化硬盘

在Linux系统中挂载SCSI盘阵,且分区大小超过2TB时,无法使用mk2fs命令进行格式化,而在使用mkfs.ext3命令格式化时,需要增加-T largefile参数,否则格式化过程将非常缓慢。(超过2TB分区软件可以使用parted,使用方法见知识库中《Redhat linux支持超过2TB分区的方法》文档,知识编号:28700)      例: 
     #mkfs.ext3 -T largefile /dev/sdXX
显示所有用户的crontab任务
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
根据进程名显示进程号 #pidof java

Linux设置代理上网

在linux中的用户变量中有关于代理环境设置,如ftp_proxy、http_proxy、RSYNC_PROXY。 我举个例子吧!假如我们要通过以下代理服务器的http代理方式接入网络,设置如下: proxy.debian.org:8080  账号:debian 密码:123456 #export http_proxy=debian:123456@proxy.debian.org:8080