jvmhtml
sudo -u admin /opt/ifeve/java/bin/jstack 31177 > /home/tengfei.fangtf/dump17java
grep java.lang.Thread.State dump17 | awk '{print $2$3$4$5}' | sort | uniq -c linux
44 RUNNABLE 22 TIMED_WAITING(onobjectmonitor) 9 TIMED_WAITING(parking) 36 TIMED_WAITING(sleeping) 130 WAITING(onobjectmonitor) 1 WAITING(parkingandroid
在这里可能会出现三种状况: 第一种状况,某个线程一直CPU利用率100%,则说明是这个线程有可能有死循环,那么请记住这个PID。 第二种状况,某个线程一直在TOP十的位置,这说明这个线程可能有性能问题。 第三种状况,CPU利用率TOP几的线程在不停变化,说明并非由某一个线程致使CPU偏高。 若是是第一种状况,也有多是GC形成,咱们能够用jstat命令看下GC状况,看看是否是由于持久代或年老代满了,产生Full GC,致使CPU利用率持续飙高,命令以下。
sudo netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n 1 established) 1 Foreign 1 SYN_RECV 4 TIME_WAIT 9 ESTABLISHED 10 LISTEN
在处理一个CSV文件时,须要给每行的结尾加上某个字符串,使用sed 's/$/xxx/g' 或者awk '{print $0"wtf"}'都不成功,替换后,把行首的几个字符也给替换了,用vim打开,发现行尾有个^M,百度了一下,而后用dos2unix工具处理了一下,再替换就能够成功了。使用grep过滤以xxx开头或者结尾的数据。grep -E '^wtf.*$|^.*wtf$',,,,sed命令将 ' 替换成 \' 命令为 sed "s/'/\\\'/g"ios
[root@wtf tmp]# sed "s/a/'/g" wtf wtfh'h'wtf1 wtfh'h'wtf2 [root@wtf tmp]# sed "s/a/'/g" wtf | sed "s/'/\\\'/g" wtfh\'h\'wtf1 wtfh\'h\'wtf2
linux 行尾 ^M 是什么 这和Linux与Windows断行格式有关。DOS (Windows 系统)使用的断行字符为 ^M$ ,咱们称为 CR 与 LF 两个符号。 而在 Linux 底下,则是仅有 LF ($) 这个断行符号。 在 Linux 底下打开Windows的档案时,因为 DOS 的断行符号是 CRLF ,就会多了一个 ^M 的符号出来。 在这样的状况下,若是是一个 shell script 的程序档案,将可能形成“程序没法执行”的状态~ 由于他会误判程序所下达的指令内容。 可使用dos2unix来转换: dos2unix file
在shell中判断一个数是否是另外一个数的整数倍mongodb
#!/bin/sh num=`expr $1 % 5` if [ ${num} -eq 0 ] then echo "ok" else echo "not ok" fi
tcp各个数据shell
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 5009 FIN_WAIT1 19 ESTABLISHED 3 FIN_WAIT2 2 SYN_RECV 14 CLOSING 146 LAST_ACK 1
删除大量小文件express
rsync --delete-before -a -H --stats test/ cache-bak/
json
for循环vim
applist=(app1 app2 app3);for app in ${applist[@]};do echo $app;done;
获取IP地址
ifconfig |grep -Po '(?<=addr:).*(?=Bc)'
ifconfig|awk -F"[: ]+" '$4~/[0-9].+[^0-9]+/{print $4}/lo/{exit}'
ifconfig|sed -nr 's/^[[:space:]]+inet addr:(.*) Bcast.*/\1/p'
ifconfig | grep -o '\([1-9]\{1,3\}\.\)\{3\}[0-4]\{3,\}'
格式化输出文档
cat xxxx | awk '{print "n"NR"="$1,"m"NR"="$2}'|column -t 将格式化输出文档
输出某段时间内的日志 日志切割
sed -n '/2015-07-27 11:00/,/2015-07-27 11:20/p' xxx_server_log > dsadsads.log
sed -n '/06\/Dec\/2016:20:30:00/,/06\/Dec\/2016:21:00:00/p' json_access.log.2016-12-06 > dsadsads.log #加了转义
输出第几行到第几行 sed -n "5,10p" ln.sh > /tmp/aa
echo不换行输出
echo -n "xx";
awk或者echo中输出换行符或者Tab键
echo -e "123\t345" > /tmp/123.txt;cat /tmp/123.txt | awk '{ print $1 "\t,\n" $2 }'
移动非空目录
mv -b xx /tmp/xx.`date +%s`
强制覆盖
mv -f xx /tmp/xx
替换文件
将/tmp/xx文件里的android全替换成ios;
app=ios; sed -i "s/android/$app/g" /tmp/xx
获取系统当前时间
echo `date +%Y%m%d%H%M%S` #注意大小写,获取当前时间20170425100834
echo `date +%s` #注意大小写,获取当前时间秒值
echo `date +%s_%N` #当前系统秒值及纳秒值
vim 删除当前行到最后一行
进入命令模式
:,$d #删除当前行到最后一行
:9,.d #删除第9行到当前行
:set nu! #显示行数
shell中的
脚本名称叫test.sh,入参三个: 1 2 3
$*为"1 2 3" 一块儿被引号包含
$@为"1" "2" "3" $@表示入参组成的数组,好比说在脚本中定义了paraArr=$@,入参是1 2 3,那么para=$@,实际上表示的是paraArr=(1 2 3),固然能够给每一个参数加双引号,可是画蛇添足.
$#为3表示参数数量
查看用户所在的组
有用户wtf,要查看用户所在的组,好比使用命令chown <username>:<usergroup> <files> 时
id wtf或者groups wtf均可以了.
grep -q
grep -q主要用来判断参数或者输入中是否包含某些字符,进而根据判断结果执行某些逻辑,以下示
if echo "x" | grep -q "qwer" ;then echo yes;else echo no; fi
no
if echo "xqwer" | grep -q "qwer" ;then echo yes;else echo no; fi
yes
grep过滤文本,输入文本上几行,下几行,或者上下几行
grep -C 10 "wtf" xxx.txt; #输出wtf字符所在行的上下10行
grep -B 10 "wtf" xxx.txt; #输出wtf字符所在行的上10行,或者叫前10行,before
grep -A 10 "wtf" xxx.txt; #输出wtf字符所在行的下10行,或者叫后10行,after
问,怎么同时输入前10行,后5行 :-)
查找相关文件并执行删除操做
参考了这个连接: http://blog.csdn.net/done58/article/details/50151399
sudo find /tmp/xx/ -name wtf -type f -exec mv -bf {} /tmp/wtf`date +%Y%m%d%H%M%S` \; 这个命令从目录/tmp/xx/及其子目录中查找名为wtf的文件,-type f 限制查找出的目标为文件而不是文件夹,,而后将其移动到/tmp目录下,注意这个命令必定要带最后的 \;
find . -mtime +90 -exec mv {} /var/tmp/date_90 \; 查看大于90天的文件并移动;
find . -type f | xargs -I '{}' mv {} /opt/shell 这个命令把当前目录下的全部文件夹都移动到/opt/shell里,没有用-exec可是用了管道,也实现了一样的效果
find /tmp -name wtf -type d | xargs rm -rf; 查找名为wtf的文件夹,而后将其删除;
find / -size +50M -type f| xargs du -h; 查找大于50M的文件并查看其具体大小
find /tmp -mtime +1 -type f | grep -v autorun.sh | xargs sudo rm ; 查找/tmp目录内1天前的
sudo find / -size +50M -type f| grep -E "out|log"| xargs sudo rm 查询大于50M,且包含out或者log的文件,并删除
ps -ef |grep storm | grep -v grep | awk '{print $2}' | xargs sudo kill ; 杀掉一批进程
文件(不包括文件夹) 且排除autorun.sh,而后将其删除
+表示大于 -表示小于
若是查询时遇到异常,来源于: http://blog.csdn.net/yabingshi_tech/article/details/46604615
find: paths must precede expression
进行查找资料,多文件的查找的时候须要增长单引号
rm: missing operand 若是遇到这个问题,缘由之一是由于没有匹配find条件的结果.
find同时匹配多个文件, find ./lib/ -name 'log4j*' -o -name 'logback*'
项目里的log4j日志级别配置的是info可是部署后仍然打印debug日志,百度了一下,多是由于项目里没有排除logback包,因此用命令在lib里同时查找logback和log4j的jar包
忽略命令的输出
>/dev/null 2>&1
ls | sed "s:^:`pwd`/:" # 就是在每行记录的开头加上当前路径 ps: #在全部行以前/后加入某个字符串 sed 's/^/string/g' file sed 's/$/string/g' file find $PWD -maxdepth 1 | xargs ls -ld # 列出当前目录下的全部文件(包括隐藏文件)的绝对路径, 对目录不作递归 find $PWD | xargs ls -ld # 递归列出当前目录下的全部文件(包括隐藏文件)的绝对路径
windows powershell 列出目录下的全部文件及路径
dir /s /b /a
在CMD中可用“dir /s /b /a”来得到当前目录及子目录全部文件,且显示这些文件的路径
C:\Users\much\AppData\Local\ACD Systems\Catalogs
C:\Users\much\AppData\Local\ACD Systems\data
C:\Users\much\AppData\Local\ACD Systems\GeoTag
C:\Users\much\AppData\Local\ACD Systems\ICMCache
C:\Users\much\AppData\Local\ACD Systems\Logs
jstat Could not attach to
这个多是权限的问题.好比该进程是由root用户启动的,而你用普通用户执行
jstat -gcutil <pid> <时间间隔>
即会报jstat Could not attach to ,换到root用户下执行就能够了.
windows 查看端口命令参考自:http://wenku.baidu.com/view/681f0332a32d7375a4178046.html
netstat -aon|findstr "80" 由此可看到80的端口号
再用命令查看这个端口号对应的进程 tasklist|findstr "2044",这个就是查看端口号对应的进程了
linux crontab相关
每分钟执行一次 * * * * *
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
天天执行 0 0 * * *
每周执行 0 0 * * 0
每个月执行 0 0 1 * *
每一年执行 0 0 1 1 *
安装: sudo yum -y install crontabs
若是运行时遇到错误提示/tmp/crontab.ZIgBhN: No such file or directory,那多是/tmp目录被删除或者没有权限,给/tmp 777的权限便可. sudo chmod 777 /tmp
若是遇到Reloading crond: [FAILED]的错误,看看是否是权限不够,用sudo试试或者直接到root用户下执行命令
/etc/init.d/crond reload
/etc/init.d/crond restart/start/stop
列出文件并按时间顺序排列
出自: http://www.cnblogs.com/wangkongming/p/3994962.html
按照时间升序 ls -lrt
按照时间降序(最新修改的排在前面)ls -lt
linux安装zookeeper
配置好java环境变量
下载zookeeper-3.4.8.tar.gz并解压; cd 到conf目录,cp zoo_sample.cfg zoo.cfg;修改zoo.cfg,指定dataDir,能够设置autopurge.snapRetainCount=3和autopurge.purgeInterval=1,取消注释.
启动应用: sudo sh zkServer.sh -start;
ps -ef | grep java;
export JAVA_HOME=/home/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
windows相似grep的命令 conda list | findstr "pandas"; 从命令结果中过滤出包含pandas的纪录
windows杀进程的命令
[c:\~]$ netstat -aon|findstr 1099 TCP 0.0.0.0:1099 0.0.0.0:0 LISTENING 10012 TCP [::]:1099 [::]:0 LISTENING 10012 [c:\~]$ taskkill /pid 10012 错误: 没法终止 PID 为 10012 的进程。 缘由: 只能强行终止这个进程(带 /F 选项)。 [c:\~]$ taskkill /F /pid 10012 成功: 已终止 PID 为 10012 的进程。 [c:\~]$ netstat -aon|findstr 1099
28. 看mongodb是否在运行
找到mongod文件: sudo find / -name 'mongod' 配置文件通常能够用这个命令找到: sudo find / -name "mongo*.conf"
启动命令: ./mongod --config /etc/mongod.conf 若是启动失败mongod.conf里通常就有日志文件,必定要去看日志
$ ./mongod --config /etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 27187 ERROR: child process failed, exited with error number 48
查看mongodb有没有启动: sudo netstat -apn | grep 27017 若是有LISTEN的状态即启动,前提是mongodb用的这个端口; 或者用 ps -ef | grep mongod 有返回: supdev 1998 43451 0 Oct13 pts/6 04:24:37 mongod,便可
mongodb必定不要用kill -9来杀进程,必定要用./mongod --shutdown,参考 http://www.cnblogs.com/joshua317/articles/5190385.html
mongo正常启动的日志显示:
$ ./mongod --config /etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 35363 child process started successfully, parent exiting
29. 软连接的区别
对普通文件而言cp -s 与 ln -s效果彻底相同。cp -s 不能为目录建立符号连接而 ln -s 则能够。cp -sa能够递归为一个目录内的全部文件分别建立软连接而ln则不能。(注意这门课说的“软连接”正确翻译应该叫“符号连接”)
30. 今天发现有个服务器不纪录历史命令
echo $HISTSIZE 这个变量的值是1000. 查看了~/.bash_history,这个文件是有的,可是我看权限是-rw------,感受应该是权限有问题,因而直接给了777权限,关掉链接再打开发现已经能记录历史命令了,完美解决了这个问题。
31. grep条件 OR 日志,打印太多乱七八糟的东西,淹没了正常的日志,过滤之
tail -fn200 /xxxx/catalina.out |grep -vE "异步通知|x1|x2|x3|x4|x5"
32.sed命令 :https://www.cnblogs.com/linux-wangkun/p/5745584.html
# 替换文件中的全部匹配项
sed -i 's/原字符串/替换字符串/g' filename
# 同时执行两个替换规则
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g'