shell 一些命令(转)

shell 一些命令(转)

https://www.cnblogs.com/amei0/p/8041989.html

参考文档

http://man.linuxde.net/

一、awk

求和 awk '{sum+=$1} END {print "Sum = ", sum}'
平均值 awk '{sum+=$1} END {print "Average = ", sum/NR}'
最大值 awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
最小值 awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
每分钟执行的总量 awk 's=substr($0,13,3){if(mm!=s){print mm":"t;t=0;mm=s};t++} END{print mm":"t;}'
查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l
二、find
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
语法
find(选项)(参数)
选项
 View Code
举个栗子
根据文件或者正则表达式进行匹配
find 列出当前目录及子目录下所有文件和文件夹
find /home -name "*.txt"  在/home目录下查找以.txt结尾的文件名
find -iname '*out'  查找文件 忽略大小写
find -name '*bin' -o -name '*ib'  查找文件 或是这样的 或是那样的
find -path '*dout*'  匹配文件路径或者文件
find  -regex ".*\(\.txt\|\.pdf\)$"  基于正则表达式匹配文件路径
find  -iregex ".*\(\.txt\|\.pdf\)$"   基于正则表达式匹配文件路径  忽略大小写
否定
find ! -name '*dout'  文件名不是dout结尾的
根据文件类型进行搜索
find -type 类型参数
类型参数列表
    f 普通文件
    l 符号连接
    d 目录
    c 字符设备
    b 块设备
    s 套接字
    p Fifo
基于目录深度搜索
find -maxdepth 3 -type f  向下最大深度限制为3
find -mindepth 2 -type f   搜索出深度距离当前目录至少2个子目录的所有文件 
根据文件时间戳进行搜索
find  -type f 时间戳 
UNIX/Linux文件系统每个文件都有三种时间戳:
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间
find -ctime -7 近7天访问过的
find -ctime 7  刚好七天前被访问过的
find -ctime +7  七天以前被访问过的
比22.txt更新修改过的:find -newer 22.txt
根据文件大小进行匹配 
find . -type f -size 文件大小单元
文件大小单元:
b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节
find  -type f -size +10k  搜索大于10KB的文件
find  -type f -size -10k  搜索小于10KB的文件
find  -type f -size 10k 搜索等于10KB的文件
删除匹配文件
find  -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配
find  -type f -perm 777 当前目录下搜索出权限为777的文件:
find  -type f -name "*.php" ! -perm 644 找出当前目录下权限不是644的php文件:
find  -type f -user tom  找出当前目录用户tom拥有的所有文件
find . -type f -group sunk  找出当前目录用户组sunk拥有的所有文件
借助-exec选项与其他命令结合使用
find -type f -user root -exec chown tom {} \; 找出当前目录下所有root的文件,并把所有权更改为用户tom 
find -type f -name '123' -exec rm {} \; 找到文件并删除
find -type f -name '123' -ok rm {} \; 找到文件并删除,删除前先提示
find . -type f -mtime +30 -name "*.log" -exec cp {} old \; 将30天前的.log文件移动到old目录中 
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 
find . -path "./sk" -prune -o -name "*.txt" -print 查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find -empty 找到空文件
三、sed
语法 sed [-nefri] ‘command’ 输入文本
常用选项:
        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
        -e∶直接在指令列模式上进行 sed 的动作编辑;
        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
        -i∶直接修改读取的档案内容,而不是由萤幕输出。       
常用命令:
        a   ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
        c   ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
        d   ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
         i   ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
         p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
         s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
 
显示第一行:sed -n '1p'
显示第5行到第10行 :sed -n '5,10p' other.log 
把文本中所有的aa换为AA,并显示文本:sed 's/aa/AA/g' aa
 sed -n '/ruby/p' ab 查询包括关键字cc所在所有行
 sed '1a 222\n333' 在第一行后面增加222换行333,只显示,并不改变源文件
sed '1c dongdong' 将第一行更改为dongdong ,只显示,并不改变源文件
sed '1i lala' 在当前行上增加一行 lala
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
sed -i '/匹配字符串/d'  filename
sed '1d' ab              #删除第一行 
sed '$d' ab              #删除最后一行
sed '1,2d' ab           #删除第一行到第二行
sed '2,$d' ab           #删除第二行到最后一行
 
cat
1、查看多个文件 cat filename1 filename2
2、创建一个文件 cat > filename 只能创建新文件,不能编辑已有文件
3、将几个文件合并成一个文件 cat filename1 filename2 > newfile
4、输出行号 cat -n filename
5、输出行号,对空白行不编号 cat -b filename
6、输出行号,多行空白行合并为一个空白行 cat -b filename
7、将文件清空 cat /dev/null > filename
 
more
more filename
空格键:下一屛
b:上一屏
enter:滚动一行
q:退出
每屏显示10行:more -10 filename
 
日志相关
查看最后100行日志  tail -100  /tail  tail -n 100  /head
查看日志前面100行  head -n 100
从第100行开始显示 tail -n -100
显示100行到300行  cat other.log |head -n 300|tail -n 100 / cat other.log |tail -n -100 |head -n 200
 
 
 
查看cpu 每个线程的使用情况
ps -eo pid,pcpu | sort -n -k 3 cpu最高的进程号24998 ,线程号25206
top -H 找到cpu占比最高的线程号 25206
ps -aux |grep 24998 找到该进程号的服务 ava -Xmx3G -Xms3G com.bfd.mf.crawler.parse_large.ServerStart
将线程号转换为16进制 25206 > 6276
jstack 24998 |grep -10 6276 在堆栈信息中找到该线程
 
查看当前linux发型版本信息
cat /etc/issue
在jar中查找类
jar tf save2.3.jar |grep 'DupliClient'
查看所有tcp状态
netstat -nat|grep -i "80"
 
查看所有tcp请求状态的集合
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
结果:
TIME_WAIT 202
CLOSE_WAIT 1582
FIN_WAIT1 2
SYN_SENT 13
ESTABLISHED 427
LAST_ACK 1
 
 
pwdx pid 查看进程路径
按照磁盘空间使用大小排序
du -h * | sort -n
 
字符串分割
a="parse/parse.2017-04-10"
echo $a|cut -d \. -f 2
 
判断字符串包含指定字符的个数
echo "10-010-01" | awk -F '-' '{print NF-1}'
 
1、求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
 
2、求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
 
3、求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
 
4、求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
 
5、求访问次数的Top 10 Resource,可以根据此进行优化
cat output/logs/cookie_logs/`date +%u`/cookie_log|grep -v '172.16'|grep -v '127.0.0.1' |awk -F' '  '{ if(index($1,"219.141.246")!=0) print $2; else print $1  } '|sort|uniq -c|sort -n |tail -n 10
显示行号:
vi   :set nu
 
bin/kafka-topics.sh --create --zookeeper ip:port/chroot --replication-factor num --partitions num --topic topic-name
 
每分钟执行的个数
awk 's=substr($0,12,6){if(mm!=s){print mm":"t;t=0;mm=s};t++}'
awk -F '[: ,]+' '{s[$2":"$3]++}END{l=asorti(s,b);for(i=1;i<=l;i++){print b[i],s[b[i]]}}'|awk '{if($2>0){print}}'
 
awk -F '[: ,]+' '{s[$2":"$3":"$4]++}END{l=asorti(s,b);for(i=1;i<=l;i++){print b[i],s[b[i]]}}'|awk '{if($2>0){print}}'
 
pwdx 12336 通过进程号 查找部署路径
 
 grep 'template plugin' ../logs/parse/parse.log |awk -F '[:]' '{if($4>5000) print $4 $5 $6 $7}' 
求平均值
grep 'autoparse execute time :' ../logs/parse/parse.log |awk -F '[:]' '{print $4}'|awk  '{sum+=$1} END {print "Average = ", sum/NR}' 
grep 'template plugin execute time ' ../logs/parse/parse.log |awk -F '[:]' '{print $2}'|  awk  '{sum+=$1} END {print "Average = ", sum/NR}'
 
内存调试:
ps -aux|grep 1976  查看分配内存
jmap -histo pid 查看当前内存对象
jmap -histo:live pid 查看存活对象
cat /proc/meminfo  查看系统内存
jstat -gcutil -h 10 26840  1s  查看gc情况
 
 
 grep 'sendredis time:' schedule.log | awk -F '[:]' '{print $4}' | awk  '{sum+=$1} END {print "Average = ", sum/NR}' 
jmap -heap
grep 'send redis' logs/news/schedule.log | awk 's=substr($0,12,6){if(mm!=s){print mm":"t;t=0;mm=s};t++}' 
 
  查看进程的内存和gc
ps -eo pid,lstart,etime | grep 5176 查看进程的启动时间
 
 
/etc/init.d/iptables stop  关闭防火墙
 chkconfig  --level 2345 iptables off  重启时不开防火墙
 
 setenforce 0   关闭安全验证
 sed -i "s/enforcing/disabled/g" /etc/selinux/config  重启时不开安全验证
 
 
截取字符串  按照字符串分割。并输出指定index。并消重
grep 'is task start' save.log|grep 'keyword:同洲电子' |grep 'baiduNews' | awk '{ split($0,c,"is task start"); print c[2]}' |sort|uniq|wc -l
 
 
tar -czvf crawler_old.tar.gz --exclude=/opt/crawler/logs --exclude=/opt/crawler/data --exclude=/opt/crawler/bin/.urldedup.dat.swap /opt/crawler
 
sed -i 's/news19/news20/g' crawl-config.properties 批量修改
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l  查看物理cpu核数
cat /proc/cpuinfo| grep "processor"| wc -l  查看逻辑cpu核数
 
jar -tvf kafka8-1.0.0.jar  查看jar的class   
 
zkCli.sh   -server 127.0.0.1:2181  远程调用
 
Resource temporarily unavailable   修改用户进程数
 
df -hl  查看磁盘空间
 
reboot重启
netstat -nap |grep 3306  正在访问这个端口的进程
 
kafka写数据 sh kafka-console-producer.sh --broker-list 172.24.5.73:9092 --topic test
linux上查看端口号是否通 nc -z -w 1 192.168.189.82 2181
 
关闭防火墙:setenforce 0
给crawl用户增加权限:chmod 777 -R /etc/ crawl
给组指定家目录:useradd  -g  testcloud  -d  /opt/testcloud
 
创建组:groupadd  testcloud
 
立即执行:idconfig   (针对 /etc/ld.so.conf.d/ 下面的文件)
 
安装kazoo模块(python访问zk):pip install kazoo
 
启动redis客户端:./redis-cli  -h 172.24.5.72 -n 0 -p 6379
 
安装wget:yum -y install wget
 
查看端口号是否被占用:netstat -npl| grep 2181
 
查看卡死进程:jstack 23312 > /tmp/stack
 
删除包含指定字符串的行: sed -i '/www.baidu.com/d' test 
 
查看硬盘分配:  df -h
 
查看每个线程的cpu占有率:ps -mp 29744  -o THREAD,tid,time
 
修改数据库字段类型:alter table flowquota modify column beginTime varchar(10) ;
导出maven依赖:dependency:copy-dependencies
获取表结构:desc tableName;
cmd中文设置:
chcp 936
maven打包
mvn assembly:assembly
 
maven引入本地jar:
mvn install:install-file -Dfile=D:\code\jar\jedis-2.6.2.jar -DgroupId=com.bfd.crawler.service -DartifactId=harpc -Dversion=4.0.0 -Dpackaging=jar
 
 
查询指定文件夹下(包含子文件夹) 包含字符串的 所有行数
find /tmp/222/ -type f -exec grep -H "发表于" {} \; | wc -l
 
GHzw6l28wds=
 
导入sql文件:mysql –uroot –p123456 -Dtest<d:\test\ss.sql   
 
读kafka
sh kafka-console-consumer.sh --zookeeper 192.168.67.35:2182,192.168.67.36:2182,192.168.67.37:2182/kafka08 --topic show_news25_download_queue--from-beginning   
写kafka
sh kafka-console-producer.sh --broker-list 172.24.5.73:9092 --topic test
 
 
scp /opt/crawl/crawl-install-2.1-centOS5.8/crawl-2.1/service/crawler-cfg-3.2.1-1.8.jar.bak crawl@172.18.1.158:/opt/crawl/crawl-install-2.1-centOS6.5/crawl-2.1/service/   跨服务器复制文件
 
wc -l filename  查看文件的行数
ln -sf 被指向的文件 软链
 
diff filename filename2  比较两个文件的差异
netstat  查询网络端口使用情况
nc 
strace  系统调用跟踪器
passwd  设置用户登录密码  
sudo  可以使用root的密令  ,使用者必须是超级用户设置过的
su    切换用户
perftop 性能调优工具  非默认,需要自己装
htop  更强大的top工具
iostat  io性能
awk  文本处理引擎
sed
gbd 进程调试
 
 
chmod +x ./test.sh   使脚本具有执行权限
netstat -ntlp|grep 8082 查看端口号是否被占用
 
chmod +x startup.sh  增加文件的写权限
 
 
netstat -an|grep 9000
telnet localhost 9000
lsof -i:9000
按i进入编辑模式
按esc :wq保存退出
          :q!不保存退出
          :w保存,但不退出
          :w filename  用其他文件名保存
 
 
rm -rf 删除文件夹
rm -f 删除文件
rm -be 上传  b二进制 e 忽略特殊字符
 
 
crontab -e 添加定时任务
sudo chown -R weixin:weixin solrfeed2   修改目录solrfeed2访问权限  
 
sudo chown -R admin:admin ok_122420150604176666.xml
copy file ./xxx  复制
ls -lt   查看文件夹下的文件和文件属性
cat -n file  查看第几行
 
free -m  查看内存 
 
 
查看对应外网ip:
ifconfig
use 库名;
mysql -uroot -p'bfD5m5F!5@' --socket=/opt/mysql/mysql.sock(指向sock)
iostat -x -k(查看磁盘io)
 
 
 
cmd命令
ping ip -t  持续ping
 
 
 
 
 
*/30 * * * * ?   每隔30秒 跑一次  起始时间就是你启动的时间
0/30 * * * * ?    每隔30秒 跑一次  执行时间是   0:30    1:00  1:30
 
posted @ 2018-11-09 19:26  千米屠苏  阅读(497)  评论(0编辑  收藏  举报