Linux常用命令for QA-數據脫敏版2

由於博客官網存在圖片上傳失敗的bug  https://blogdev.blog.csdn.net/article/details/94006575   故此我之前的【Linux常用命令】的博客不可以編輯了https://blog.csdn.net/weixin_42498050/article/details/81037479,故此新建個博客吧~~

8. 批量替換文件夾子文件夾的文件xx爲yy

sed -i 's/xx/yy/g' `grep xx -rl ./`

注:後面爲esc下面的` 不爲'

 

7. linux命令統計文件中某個字符串出現的次數

用vim打開目標文件,在命令模式下,輸入::%s/object/&/gn

&代表s// 搜索出來的內容
g代表全局替換(而非僅僅當前行)
n代表不執行,只是預覽一下會有什麼情況發生

執行前效果和執行後效果如圖所示:

:%s/xx/&/gn

非vim模式:

zgrep -c 'xx' 1.txt

grep -c 'xx' 1.txt

grep 'xx' 1.txt |wc -l

6. top命令

用 'top -i' 看看有多少進程處於 Running 狀態,可能系統存在內存或 I/O 瓶頸,用 free 看看系統內存使用情況,swap 是否被佔用很多,用 iostat 看看 I/O 負載情況...

還有一種辦法是 ps -ef | sort -k7 ,將進程按運行時間排序,看哪個進程消耗的cpu時間最多

free
1.作用
free命令用來顯示內存的使用情況,使用權限是所有用戶


**2.格式 **

free [-b-k-m] [-o] [-s delay] [-t] [-V] 

**3.主要參數 **

-b -k -m -g:分別以字節(KB、MB、GB)爲單位顯示內存使用情況。 
-s delay:顯示每隔多少秒數來顯示一次內存使用情況。 
-t:顯示內存總和列。 
-o:不顯示緩衝區調節列。 

uptime

18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21 
現在的時間 
系統開機運轉到現在經過的時間 
連線的使用者數量 
最近一分鐘,五分鐘和十五分鐘的系統負載 
參數: -V 顯示版本資訊。 

vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- 
r b swpd free buff cache si so bi bo in cs us sy id wa 
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70 

**1 觀察磁盤活動情況 **
磁盤活動情況主要從以下幾個指標瞭解:

bi:表示從磁盤每秒讀取的塊數(blocks/s)。數字越大,表示讀磁盤的活動越多。 
bo:表示每秒寫到磁盤的塊數(blocks/s)。數字越大,表示寫磁盤的活動越多。 
wa:cpu等待磁盤I/O(未決的磁盤IO)的時間比例。數字越大,表示文件系統活動阻礙cpu的情況越嚴重,因爲cpu在等待慢速的磁盤系統提供數據。wa爲0是最理想的。如果wa經常大於10,可能文件系統就需要進行性能調整了。 

**2 觀察cpu活動情況 **
vmstat比top更能反映出cpu的使用情況:

us:用戶程序使用cpu的時間比例。這個數字越大,表示用戶進程越繁忙。 
sy: 系統調用使用cpu的時間比例。注意,NFS由於是在內核裏面運行的,所以NFS活動所佔用的cpu時間反映在sy裏面。這個數字經常很大的話,就需要注 意是否某個內核進程,比如NFS任務比較繁重。如果us和sy同時都比較大的話,就需要考慮將某些用戶程序分離到另外的服務器上面,以免互相影響。 
id:cpu空閒的時間比例。 
wa:cpu等待未決的磁盤IO的時間比例。 

iostat
用於統計CPU的使用情況及tty設備、硬盤和CD-ROM的I/0量

查看RAM使用情況最簡單的方法是通過/proc/meminfo。這個動態更新的虛擬文件實際上是許多其他內存相關工具(如:free / ps / top)等的組合顯示。/proc/meminfo列出了所有你想了解的內存的使用情況。進程的內存使用信息也可以通過/proc/<pid>/statm 和 /proc/<pid>/status 來查看

$ cat /proc/meminfo
MemTotal:        8388608 kB
MemFree:           19404 kB
MemAvailable:    8647836 kB
Buffers:               0 kB
Cached:          3883764 kB
SwapCached:            0 kB
Active:          6426584 kB
Inactive:        1942564 kB
Active(anon):    4485496 kB
Inactive(anon):     1008 kB
Active(file):    1941088 kB
Inactive(file):  1941556 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:             16880 kB
Writeback:             0 kB
AnonPages:      114106472 kB
Mapped:          3026292 kB
Shmem:            301604 kB
Slab:            7141536 kB
SReclaimable:    6245764 kB
SUnreclaim:       895772 kB
KernelStack:      350208 kB
PageTables:       484640 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    98901520 kB
Committed_AS:   273028180 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      714472 kB
VmallocChunk:   34358872316 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      343960 kB
DirectMap2M:    41486336 kB
DirectMap1G:    161480704 kB

 

5. 根據端口號查找進程號查找程序路徑

netstat -nlp | grep 端口號

如下圖所示,查詢28180端口對應的進程PID-netstat -nlp | grep 28180

得到的8161就是進程PID

然後通過下面命令查詢對應的程序路徑

ll /proc/進程號/cwd

cwd — 指向當前進程運行目錄的一個符號鏈接 

exe — 指向啓動當前進程的可執行文件(完整路徑)的符號鏈接,通過/proc/N/exe可以啓動當前進程的一個拷貝 

 

4 .在文件最後一列加,逗號

sed 's/$/\,/g' a.txt   

sed 's/$/\,/g' -i a.txt

或者不需要轉義   sed 's/$/,/g' a.txt

"^"代表行首,"$"代表行尾

字符g代表每行出現的字符全部替換

如果想導出文件,在命令末尾加"> outfile_name"

sed 's/$/,/g' a.txt > b.txt

vim模式:

:%s/$/,/g

3. 去除文件第一列和最後一列

 瞭解 Hadoop,Hive,Hbase。
 瞭解前端技術 html,css 和 javascript 以及基本的使用。
 熟練掌握core Java 。

以上文本想實現效果:

瞭解 Hadoop,Hive,Hbase
瞭解前端技術 html,css 和 javascript 以及基本的使用
 熟練掌握core Java

sed -e "s/ /""/g" -e "s/。/""/g" 1.txt   

-e :直接在命令行模式上進行sed動作編輯,此爲默認選項  -e : 可以在同一行裏執行多條命令

awk '{$1="";print $0}' 1.txt   去除第一列

公司解析簡歷的系統很。。。。。。。
去除文件的第一列以及最後一列

sed -e "s/[^ ] /""/g" -e "s/。/""/g" 1.txt  

2. Mac下解壓rar文件

使用Homebrew安裝unrar(有關Homebrew的安裝和使用見Homebrew)

brew install unrar  

unrar x filename.rar

1. 打開自動化運行後的測試報告,除了直接在idea中右擊report.html文件Reveal in Finder外,還可以Copy Path,在iterm中用命令打開。不是說這個有多難,而是換一種思維方式,多種方法思考問題

open /Users/lishan/Desktop/code/UICheck/report.html

 

統計文件夾下文件個數

ls -LR|grep -i 'jpg'|wc -l

ls |grep -i 'jpg'|wc -l

參考ls博客:https://blog.csdn.net/zhouxiangbai/article/details/80510834

-L 列出鏈接文件名而不是鏈接到的文件。 
-N 不限制文件長度。 
-Q 把輸出的文件名用雙引號括起來。 
-R 列出所有子目錄下的文件。 
-S 以文件大小排序。 
-X 以文件的擴展名(最後一個 . 後的字符)排序。 
-1 一行只輸出一個文件

 

xattr 複製的文件屬性去除  發現複製或者下載的文件屬性爲-rw-------@

這裏的@貌似是mac特有的,第一次使用file_put_contents往根目錄添加文件成功,
再次添加就提示
failed to open stream: Permission denied

解決方法:
mac終端下執行
xattr -c -r *

 

 

執行完merge操作後,沒有修改代碼

1、命令

1. git reflog
查看merge操作的上一個提交記錄的版本號

2. git reset –hard 版本號
這樣可以回滾到merge之前的狀態

2、示例
誤將dev合併到了master分支,現要回滾merge操作
1. 首先git reflog
ee0ee93 HEAD@{0}: merge dev: Merge made by the ‘recursive’ strategy.
7335548 HEAD@{1}: checkout: moving from dev to master
可以看到需要回滾到 7335548 這個提交記錄上

2. 執行git reset --hard 7335548
再次查看提交記錄:
7335548 HEAD@{0}: reset: moving to 7335548
ee0ee93 HEAD@{1}: merge dev: Merge made by the ‘recursive’ strategy.

 

親自實踐:

master代碼合併到自己的分支clientreq,但想回滾 

git reflog
git reset --hard d91b25a
 

 

統計字符串出現次數Linux

這裏統計某個字符串在文件裏出現的次數使用到了-c參數,請見下圖案例:

語法:grep -c  'object'   fileName

 

如何通過端口查找出進程所在目錄?

一、找到端口對應的進程的號(PID)

[root@benbang ~]# ss -lntup|grep 6379
tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=914,fd=6))

二、顯示/proc/進程號/cwd

cwd符號鏈接的是進程運行的目錄

[root@benbang ~]# ll /proc/914/cwd
lrwxrwxrwx 1 redis redis 0 Aug  1 15:53 /proc/914/cwd -> /usr/local/redis/var

exe符號鏈接的是執行程序的絕對路徑;

[root@benbang ~]# ll /proc/914/exe 
lrwxrwxrwx 1 redis redis 0 Jul 22 21:57 /proc/914/exe -> /usr/local/redis/bin/redis-server

cmdline就是程序運行時輸入的命令行命令;
environ記錄了進程運行時的環境變量;
fd目錄下是進程打開或使用的文件的符號連接

複製代碼

[root@benbang ~]# ll /proc/914/fd
total 0
lrwx------ 1 redis redis 64 Jul 22 21:58 0 -> /dev/null
lrwx------ 1 redis redis 64 Jul 22 21:58 1 -> /dev/null
lrwx------ 1 redis redis 64 Jul 22 21:58 2 -> /dev/null
lr-x------ 1 redis redis 64 Jul 22 21:58 3 -> pipe:[13725]
l-wx------ 1 redis redis 64 Jul 22 21:58 4 -> pipe:[13725]
lrwx------ 1 redis redis 64 Jul 22 21:58 5 -> anon_inode:[eventpoll]
lrwx------ 1 redis redis 64 Jul 22 21:58 6 -> socket:[13739]

 

1、lsof -i

lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後臺都爲該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符爲應用程序與基礎操作系統之間的交互提供了通用接口。因爲應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。

COMMAND     PID        USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME init          1        root  cwd       DIR                8,1     4096          2 / init          1        root  rtd       DIR                8,1     4096          2 / init          1        root  txt       REG                8,1   150584     654127 /sbin/init udevd       415        root    0u      CHR                1,3      0t0       6254 /dev/null udevd       415        root    1u      CHR                1,3      0t0       6254 /dev/null udevd       415        root    2u      CHR                1,3      0t0       6254 /dev/null udevd       690        root  mem       REG                8,1    51736     302589 /lib/x86_64-linux-gnu/libnss_files-2.13.so syslogd    1246      syslog    2w      REG                8,1    10187     245418 /var/log/auth.log syslogd    1246      syslog    3w      REG                8,1    10118     245342 /var/log/syslog dd         1271        root    0r      REG                0,3        0 4026532038 /proc/kmsg dd         1271        root    1w     FIFO               0,15      0t0        409 /run/klogd/kmsg dd         1271        root    2u      CHR                1,3      0t0       6254 /dev/null

 

 詳細瞭解lsof,可以參考:https://www.cnblogs.com/sparkbj/p/7161669.html

2、netstat命令是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息

     netstat -tunlp 顯示tcp,udp的端口和進程等相關情況

     netstat -anp 也可以顯示系統端口使用情況

netstat [選項]
 
-a或--all:顯示所有連線中的Socket; 
-A<網絡類型>或--<網絡類型>:列出該網絡類型連線中的相關地址; 
-c或--continuous:持續列出網絡狀態; 
-C或--cache:顯示路由器配置的快取信息; 
-e或--extend:顯示網絡其他相關信息; 
-F或--fib:顯示FIB; 
-g或--groups:顯示多重廣播功能羣組組員名單; 
-h或--help:在線幫助; 
-i或--interfaces:顯示網絡界面信息表單; 
-l或--listening:顯示監控中的服務器的Socket; 
-M或--masquerade:顯示僞裝的網絡連線; 
-n或--numeric:直接使用ip地址,而不通過域名服務器; 
-N或--netlink或--symbolic:顯示網絡硬件外圍設備的符號連接名稱; 
-o或--timers:顯示計時器; 
-p或--programs:顯示正在使用Socket的程序識別碼和程序名稱; 
-r或--route:顯示Routing Table; 
-s或--statistice:顯示網絡工作信息統計表; 
-t或--tcp:顯示TCP傳輸協議的連線狀況; 
-u或--udp:顯示UDP傳輸協議的連線狀況; 
-v或--verbose:顯示指令執行過程; 
-V或--version:顯示版本信息; 
-w或--raw:顯示RAW傳輸協議的連線狀況; 
-x或--unix:此參數的效果和指定"-A unix"參數相同; 
--ip或--inet:此參數的效果和指定"-A inet"參數相同。
方法1: lsof -i 用以顯示符合條件的進程情況,lsof(list open files)是一個列出當前系統打開文件的工具。

            以root用戶來執行lsof -i命令,如下:

[root@hadoop01 yum.repos.d]# lsof -i
COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    1873     rpc    6u  IPv4  15228      0t0  UDP *:sunrpc 
rpcbind    1873     rpc    7u  IPv4  15230      0t0  UDP *:wpages 
rpcbind    1873     rpc    8u  IPv4  15231      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1873     rpc    9u  IPv6  15233      0t0  UDP *:sunrpc 
rpcbind    1873     rpc   10u  IPv6  15235      0t0  UDP *:wpages 
rpcbind    1873     rpc   11u  IPv6  15236      0t0  TCP *:sunrpc (LISTEN)
rpc.statd  2017 rpcuser    5r  IPv4  15556      0t0  UDP *:921 
rpc.statd  2017 rpcuser    8u  IPv4  15563      0t0  UDP *:32846 
rpc.statd  2017 rpcuser    9u  IPv4  15567      0t0  TCP *:42335 (LISTEN)
rpc.statd  2017 rpcuser   10u  IPv6  15571      0t0  UDP *:41231 
rpc.statd  2017 rpcuser   11u  IPv6  15575      0t0  TCP *:56522 (LISTEN)
cupsd      2072    root    6u  IPv6  15795      0t0  TCP localhost:ipp (LISTEN)

nginx     11914  nobody   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
 加端口號,查看端口被誰佔用

lsof -i:端口號
例如:

注意:這裏的9999端口是我自己打開的一個,前面博客提到過,如果自己沒有此端口,請更換端口號

[root@hadoop01 yum.repos.d]# lsof -i:9999
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    3953   root   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
nginx   11914 nobody   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
 

方法2: netstat -tunlp命令用於顯示tcp,udp的端口和進程等相關情況

[root@hadoop01 yum.repos.d]# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx          
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1873/rpcbind        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2191/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2072/cupsd          
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      11504/sshd          
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      11716/sshd          
tcp        0      0 0.0.0.0:42335               0.0.0.0:*                   LISTEN      2017/rpc.statd      
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2379/mysqld         
tcp        0      0 :::111                      :::*                        LISTEN      1873/rpcbind        
tcp        0      0 :::22                       :::*                        LISTEN      2191/sshd           
tcp        0      0 ::1:631                     :::*                        LISTEN      2072/cupsd          
tcp        0      0 ::1:6010                    :::*                        LISTEN      11504/sshd          

netstat -tunlp 會顯示所有端口和所有對應的程序,用grep管道可以過濾出想要的關鍵字段,

列一下9999端口占用的程序:

注意:這裏的9999端口是我自己打開的一個,前面博客提到過,如果自己沒有此端口,請更換端口號

netstat -tunplp | grep 端口號
例如:

[root@hadoop01 yum.repos.d]# netstat -tunplp | grep 9999
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx  
使用netstat -anp進行查看

[root@hadoop01 yum.repos.d]# netstat -anp|grep 9999
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx  
所以這兩種方法都可以查看。
 

 

待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章