經常使用的Linux命令片斷

1. 查看登陸用戶  
$ who -a | grep -Ev "tty|system boot|run-level"
2. 列出當前CPU佔用排名前五的進程信息  
$ ps aux | sort -k3,3nr | head -5  
3. 列出當前內存佔用排名前五的進程信息  
$ ps aux | sort -k4,4nr | head -5  
4. 動態監控命令執行狀況  
$ watch -n 1 -d "#監控的命令"  
5.查詢當前佔用設備的進程信息    
$ fuser  
6.查找7天前的文件進行批量刪除  
$ find . -type f -mtime +7 | xargs rm -f  
7.按進程名kill進程  
ps aux | grep ${PNAME} | grep -v grep | cut -c 9-15 | xargs kill -9  
8.打印GC信息 
$JAVA_HOME/bin/jstat -gcutil  PID  1000 100  
9.查看堆內存的情況信息和導出內存快照
$ $JAVA_HOME/bin/jmap -heap ${PID}  
$ $JAVA_HOME/bin/jmap -dump:format=b,file=edwfms-8084_108.bin  $PID  
10. find使用  
$ find . -size -200k -type f | xargs -I {}  cp -rp {}  /tmp/history_file/

說明: -I 將xargs的每項參數,通常是一行一行賦值給 {},能夠用 {} 代替 -size -200k  文件小於200K  redis

11.查看本機公網IP

```bash  
$ curl ifconfig.me ubuntu

##### 12.刪除空目錄

```bash  
$ find . -empty -type d | xargs rmdir  
13.JAVA_OPTS配置 
JAVA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"  
14.網絡鏈接數查看

```bash  
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' centos

網絡鏈接狀態統計: netstat

分析解決網絡鏈接問題和檢查接口/端口統計數據、路由表、協議狀態等等的

**語法:**

netstat -l 顯示全部處於監聽狀態的端口列表
netstat -a 顯示全部端口;若是去指定僅顯示 TCP 端口,使用 -at(指定信顯示 UDP 端口,使用 -au)
netstat -r 顯示路由表
netstat -s 顯示每一個協議的狀態總結
netstat -i 顯示每一個接口傳輸/接收(TX/RX)包的統計數據

centos7 默認不帶該命令,須要手動 安裝

```bash
$ yum install net-tools

查看系統鏈接數bash

$ netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} \
END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'

--系統參數TCP標識
CLOSED:無鏈接是活動的或正在進行中的
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個鏈接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個鏈接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另外一邊已贊成釋放
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另外一邊已初始化一個釋放。(數據鏈接已經連上的)
LAST_ACK:等待全部分組死掉 查看Apache的併發請求數及其TCP鏈接狀態服務器

15.監控中斷狀態 

```bash 
$ watch -d  cat /proc/softirqs 網絡

##### 16.強制卸載NFS設備
```bash
$ mount -l /nfs掛載目錄
17. 文件佔用狀況統計

1) 從根目錄開始分析,用如下命令找到佔比最大的二級目錄併發

$ cd /
#第一種命令
$ find / -maxdepth 1 | grep -vE 'proc|lost|upload|cgroup' | sed  's#/##g' | awk '{print $0}' | xargs du -a --max-depth=0 | sort -nr | awk '{print $2}' | xargs du -sh

#第二種方法
$ find / -maxdepth 1 ! -path /  | grep -vE 'proc|lost|upload|cgroup' | awk '{print $0}' | xargs du -a --max-depth=0 |  sort -nr | awk '{print $2}' | xargs du -sh
18. 將相同文件類型的圖片文件移動到image_dir目錄
$ ls | grep -E 'jpg|png' | xargs -I {} mv {} image_dir/
19. 統計物理CPU個數
$ cat /proc/cpuinfo | grep "core id" | awk -F ':' '{print $2}' | sort -rn | uniq  | wc -l
20.命令行查看北京時間
$ curl http://quan.suning.com/getSysTime.do
21.sed替換行
#整行處理模式
$ sed -i 's/要被取代的字串/新的字串/g' 文件名 

#參數 -i 表示替換,若是不加 -i 則表示只預覽替換是否正確,不實際修改文件
22. 統計文件數量
$ find . -type f | wc -l
23. Ubuntu查看發行版本
$ lsb_release -a
24.移除用戶所屬組
$ sudo gpasswd -d root ubuntu
Removing user root from group ubuntu
25. fuser
#查詢當前佔用設備的進程信息&剔除進程
$ fuser -m -v /media/USB/ 
$ fuser -m -v -i -k /media/USB/
26. kill
#手動過濾出進程號再Kill掉
ps aux | grep send_jvm.sh | grep -v grep | cut -c 9-15 | xargs kill -9
9-15 是進程ID所在的列位置xargs 將結果解析成參數

#過濾出進程號再
kill pgrep httpd | xargs kill -9
27.nc
#!/bin/bash 
ip=$1 #服務器IP 
port=$2 #服務器端口 
while : 
do 
echo -e "$(date +%H:%M:%S)--$(nc -v -w 5 -z $1 $2)" 
sleep 1 
done #-w 5 表示超時時間
29.ps
#顯示消耗內存/CPU最多的10個進程
$ ps aux | sort -nk +4 | tail -10 ps aux | sort -nk +3 | tail -10
#使用ps 查看進程使用的環境變量信息
$ ps -eo pid,cmd e | tail -n 1
30.taskset

taskset用來查看和設定「CPU親和力」,說白了就是查看或者配置進程和cpu的綁定關係,讓某進程在指定的CPU核上運行,便是「綁核」curl

0) 適用場景

redis進程運行綁定jvm

1) 顯示進程運行的CPU

taskset -p pid
注意,此命令返回的是十六進制的,轉換成二進制後,每一位對應一個邏輯CPU,低位是0號CPU,依次類推。若是每一個位置上是1,表示該進程綁定了該CPU。例如,0101就表示進程綁定在了0號和3號邏輯CPU上了tcp

2) 綁核設定

taskset -pc 3 pid 表示將進程pid綁定到第3個核上(注:不用將3弄成二進制的)taskset -c 3 command 表示執行command命令,並將command啓動的進程綁定到第3個核上。

31.ulimit

背景
使用物業OA grguser用戶登陸其生產OA應用服務器時,執行命令報錯以下
-bash: fork: retry: Resource temporarily unavailable

排查
#提示符 root用戶執行$提示符 grguser用戶執行
1)查看當前用戶運行的進程/線程數量
#lsof -u grguser | wc -l
1450
2)查看當前用戶最大能夠運行的進程、線程數量,若是該值在當前終端窗口小於運行的進程/線程數量,將會報資源沒法分配的錯誤"-bash: fork: retry: Resource temporarily unavailable"

# cat /etc/security/limits.d/90-nproc.conf
*          soft    nproc     1024 #系統安裝時默認是1024
root       soft    nproc     unlimited
$ ulimit -a
max user processes              (-u) 1024

解決

root用戶下修改/etc/security/limits.d/90-nproc.conf文件,將nproc的值調大 ,調整爲8192

$ulimit -a
max user processes              (-u) 8192

若是沒有發生改變,最好重啓下服務器

注意,通常的搜索結果都是說要改/etc/security/limits.conf這個文件,實際上我修改了以後,發現仍是沒有生效,最終修改/etc/security/limits.d/90-nproc.conf文件後生效

32.vmstat

查看具體vmstat文檔

33starce

跟蹤程序打開的文件命令

$ strace -e open netstat #跟蹤netstat命令打開的文件數
34. lsof

列出當前進程打開的文件

lsof abc.txt 顯示開啓文件abc.txt的進程
lsof -i :22 知道22端口如今運行什麼程序
lsof -c abc 顯示abc進程如今打開的文件
lsof -p 12 看進程號爲12的進程打開了哪些文件
35.流量查看

nload
iftop
iptraf
nethogs #該工具能夠看到進程的通訊流量狀況
bmon
slurm
tcptrack
vnstat

查看每一個鏈接的實時流量狀況的工具
$ pktstat -i eth3 -nt
36. rsync

查看具體rsync文檔

37. grep

按文件內容搜索,xxx是文件內容, '.' 是搜索範圍,在當前目錄下

$ grep -rin xxx .
相關文章
相關標籤/搜索