由於博客官網存在圖片上傳失敗的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下面的` 不爲'
用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
所以這兩種方法都可以查看。
待續