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'