示例:php
env變量值以下,須要得到pkg_url的連接值:html
{"name": "michael", "sex": "male", "pkg_url": "www.github.com", "number": "888"}
pkg_url=$(echo $env | awk -F "pkg_url\": \"" '{print $2}' | awk -F "\"," '{print $1}') echo $pkg_url www.github.com
-F
指定分隔規則,由於分隔規則中包含了雙引號,因此須要用轉義符號。java
# 格式 $ awk 動做 文件名 # 示例 $ awk '{print $0}' demo.txt $ echo 'hello:michael:xiang'|awk -F ':' '{print $1}' # 若是隻是顯示/etc/passwd的帳戶 $ cat /etc/passwd |awk -F ':' '{print $1}'
basename
命令用於打印目錄或者文件的基本名稱linux
[root@HGH1000059721 test]# basename a.tar .tar #後綴:可選參數,指定要去除的文件後綴字符串。 a [root@HGH1000059721 test]# basename /tmp/test/a.tar #不帶後綴,獲取文件名 a.tar
參考:git
將目錄src
複製到dest
目錄下,複製好後,dest/src
:github
cp -r src dest
將目錄src
下的內容複製到dest
目錄下:web
cp -r src/* dest
複製文件,覆蓋不詢問:正則表達式
cp -nrf a.txt b.txt
系統默認給cp
命令設置了別名cp -i
,因此,複製時有衝突須要確認,使用以下方式便可不改變別名,也實現默認覆蓋:sql
/bin/cp xx yy
參考:docker
# For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
在以上各個字段中,還可使用如下特殊字符:
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。
任務執行文件所在位置:
/var/spool/cron/crontabs
命令參數:
-u
user:用來設定某個用戶的crontab服務;-e
:編輯某個用戶的crontab文件內容。若是不指定用戶,則表示編輯當前用戶的crontab文件。-l
:顯示某個用戶的crontab文件內容,若是不指定用戶,則表示顯示當前用戶的crontab文件內容。-r
:從/var/spool/cron目錄中刪除某個用戶的crontab文件,若是不指定用戶,則默認刪除當前用戶的crontab文件。-i
:在刪除用戶的crontab文件時給確認提示每隔2分鐘執行/tmp/test.sh
腳本:
crontab -e # 使用crontab -e命令,編輯的是/var/spool/cron下對應用戶的 cron 文件 */2 * * * * /tmp/test.sh
第星期6、星期日的時10分重啓smb-也就是每週6、週日:
10 1 * * 6,0 /etc/init.d/smb restart >> /tmp/run.log 2>&1
實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行:
3,15 8-11 */2 * * myCommand
實例5:清理httpd服務日誌超過3天的內容:
0 5 * * * /usr/bin/find /var/log/httpd/ -type f -mtime +3 -exec rm -rf {} \;
實例6:經過正則清理指定文件夾的內容
#update-20181122: clean dir +120 days 0 6 * * * find /data/michael -maxdepth 7 -type d -mtime +120 -regextype posix-egrep -regex '.*/[0-9]{2}/[0-9]{6}$' -exec rm -rf {} \;
啓動 / 中止 / 重啓 crontab
$ /etc/init.d/crond start $ /etc/init.d/crond stop $ /etc/init.d/crond restart
查看日誌
$ tail -f /var/log/cron
參考:
選項:
不加: 顯示當前的時間.
-d <字符串> :顯示字符串所指的日期與時間。字符串先後必須加上雙引號;
-s <字符串> :根據字符串來設置日期與時間。字符串先後必須加上雙引號;
-u:顯示GMT;
--help:在線幫助;
--version:顯示版本信息。
參數 <+時間日期格式>:指定顯示時使用的日期時間格式。
就是格式化字符串處理.當須要用到空格時要使用雙引號,如"+%Y-%m-%d %H:%M:%S"
.
通常,%Y %m %d %H %M %S
是最基本的. 使用星期月份時也會用到%a %b
示例
VERSION=$(date +%Y%m%d%H%M%S) #20180410192702 #date後面有空格 time=$(date "+%Y-%m-%d %H:%M:%S") #時間格式中有空格,須要加引號 » date "+%Y-%m-%d %T %a %A" 2018-06-04 11:31:25 Mon Monday
參考:
經過df
命令很容易發現那個磁盤的存儲空間快沒了。查看掛載狀態和硬盤使用量信息:
df -hT
dig 和 nslookup 做用有些相似,都是DNS查詢工具。dig,實際上是一個縮寫,即 Domain Information Groper
。
查看域名的信息。通常一個域名都會綁定到多個 IP 上,ping 命令只能一次看到一個 ip,這個能夠看到域名解析的信息。
dig baidu.com
可能機器上沒有這個命令,能夠以下方式安裝:
yum install -y bind-utils
參考:
du
命令能夠顯示某個特定目錄(默認狀況下是當前目錄)的磁盤使用狀況。這一方法能夠判斷系統上某個目錄下是否是有超大的文件。
查看當前文件夾的文件大小:
du -sh * du -sh /usr/* | sort -rn # 按M大小排序
查看環境變量值,例:
查看帶有SVN的環境變量值:
env|grep SVN
實例:刪除當前目錄下全部的swp文件
find . -type f -name "*.swp" -delete
實例:定時清理httpd服務日誌超過3天的內容:
0 5 * * * /usr/bin/find /var/log/httpd/ -type f -mtime +3 -exec rm -rf {} \;
實例: 經過正則清理指定文件夾的內容
#update-20181122: clean dir +120 days 0 6 * * * find /data/michael -maxdepth 7 -type d -mtime +120 -regextype posix-egrep -regex '.*/[0-9]{2}/[0-9]{6}$' -exec rm -rf {} \;
實例:搜索/etc目錄下第一層的conf配置文件,文件夾下層的不須要
find /etc/ -maxdepth 1 -name "*.conf" # 最好加上引號
實例:只搜索當前目錄,可是不包括.git目錄,統計目錄數
find . -maxdepth 1 -mindepth 1 -type d | grep -v .git |wc -l
實例:僅列出目錄
find . -type d -maxdepth 1
參考:
fdisk -l
看到目前系統中全部分區的信息
https://blog.csdn.net/cc_net/article/details/2894510
free命令能夠顯示Linux系統中空閒的、已用的物理內存及swap內存,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最常用的命令之一。
free -h -s 2 -t
-h
單位會更人性化-s
每2秒,顯示內存使用信息-t
顯示內存總和# 結果 total used free shared buff/cache available Mem: 7.6G 935M 6.1G 9.7M 631M 6.4G Swap: 7.5G 0B 7.5G Total: 15G 935M 13G
從應用程序角度來看,對於應用程序來講,buffers/cached 是等於可用的,由於buffer/cached 是爲了提升文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached 會很快地被回收。
因此從應用程序的角度來講 可用內存=系統free memory+buffers+cached
咱們看linux,只要不用swap的交換空間,就不用擔憂本身的內存太少.若是經常swap用不少,可能你就要考慮加物理內存了.這也是linux看內存是否夠用的標準.
+buffers/cache,即對應用程序來講free的內存太少了,也是該考慮優化程序或加內存了
參考:
fuser一般被用在診斷系統的「resource busy」問題,一般是在你但願umount指定的掛載點得時候遇到。 若是你但願kill全部正在使用某一指定的file, file system or sockets的進程的時候,你可使用-k option
fuser –k –i /path/to/your/filename # 加上-i 表示殺死以前,需確認
whoami # 查看用戶名 groups # 查看當前用戶所屬組
文本搜索命令
語法:
grep [options] pattern [file]
# 遞歸、顯示行號、忽略大小寫、顯示搜到的匹配內容上下2行 搜索範圍是當前目錄下 grep -rni 'github.com' -C 2 .
grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件後綴 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配
實例:-c
統計文件中包含文本的次數
grep -c "text" filename
參考:
gzip是GNU項目的產物。這個軟件下買呢含有下面的工具:
gzip xxx gzip -l <filename> # list compressed file contents
顯示前n行內容:
head -n
https://www.linuxdaxue.com/linux-command-intro-head.html
在more
的時候,咱們並無辦法向前面翻,只能日後面看,但若使用了less
時,就可使用 [pageup] [pagedown]
等按鍵的功能來往前日後翻看文件。
locate GPG-KEY # find /etc -name '*GPG-KEY*' 等同
可能系統沒有自帶locate
命令,可使用yum install mlocate -y
安裝,安裝結束執行updatedb
命令。
僅顯示目錄:
ll -d
ls命令顯示文件大小,會根據文件大小本身決定單位,M或者Kb或者G
ll -h
mount
能夠顯示所有掛載狀況。
將分區掛載到目錄:
mount /dev/xvde /data
mkdir sysadmin/admim_{1,2,3,4,5}
參考:
檢查端口占用
netstat -anp|grep 80
只刪除當前文件夾下的隱藏文件和隱藏文件夾:
rm -rf .*
https://blog.csdn.net/ficksong/article/details/52447729
個人系統中安裝了那些rpm軟件包
rpm -qa
若是要查找全部安裝過的包含某個字符串sql的軟件包
rpm -qa | grep sql
一個rpm包中的文件安裝到那裏去了?
rpm -ql 包名
軟件包的卸載
rpm -e
參考:http://man.linuxde.net/rpm
RPM 包解壓縮:
# 注意,要加上 cpio -div,不然終端會打印多餘的內容出來 rpm2cpio xxxx.rpm | cpio -div
你的 Linux 下可能沒有rpm2cpio這個命令,用過簡單指令安裝便可:
sudo apt-get install rpm2cpio sudo yum install rpm2cpio
eg1:截取日誌中的兩行之間的內容,同時去掉匹配的首尾行:
cat mock.log |sed -n '/tee/,/find/p' mock.log|sed -n '1!p'|sed -n '$!p'|awk '{print $2,$3}'
eg2:
nl passwd|sed "1d;10d" #刪除第1行,第10行
eg3:
sed -i -e "1i%define upstream_version $UPSTREAMVERSION\\" *.spec #第一行插入 sed -i -e "s/UPSTREAMVERSION/$UPSTREAMVERSION/g" *.spec #替換
參考:
sestatus [-v] # 查看selinux開啓狀態 getenforce # 查看當前selinux的狀態
selinux開啓經常影響其餘一些服務,好比httpd等,因此,運維每每通常拿到機器就會默認將其關閉。
setenforce 1 # 設置SELinux 成爲enforcing模式 setenforce 0 # 設置SELinux 成爲permissive模式 不重啓關閉selinux的解決辦法
開機重啓後,上面利用setenforce
方式修改的值會失效,因此,開機重啓也有效的話,須要修改以下文件:
/etc/selinux/config # 文件的軟連接是/etc/sysconfig/selinux 是
對以前提到的密碼文件/etc/passwd
根據用戶ID進行數值排序。-k
和-t
參數在對安字段分割的數據進行排序時很是有用。
sort -t ":" -k 3 -n /etc/passwd
任務 | 舊指令 | 新指令 |
---|---|---|
使某服務自動啓動 | chkconfig –level 3 httpd on | systemctl enable httpd.service |
使某服務不自動啓動 | chkconfig –level 3 httpd off | systemctl disable httpd.service |
檢查服務狀態 | service httpd status | systemctl status httpd.service |
顯示全部已啓動的服務 | chkconfig –list | systemctl list-units –type=service |
啓動某服務 | service httpd start | systemctl start httpd.service |
中止某服務 | service httpd stop | systemctl stop httpd.service |
重啓某服務 | service httpd restart | systemctl restart httpd.service |
生成文件對應的sha256值:
sha256sum FusionSphere_Upgrade_6.2.50.4001.tar.gz > a.sha256sum # 校驗 sha256sum -c <(grep FusionSphere_Upgrade_6.2.50.4001.tar.gz a.sha256sum) # 校驗
參考:
目前Unix和Linux上最普遍使用的歸檔工具是 tar 命令。
tar function [options] object1 object2 ……
首先,建立一個歸檔文件:
tar -cvf test.tar test/ test2/
建立了名爲test.tar歸檔文件,含有 test 和 test2 目錄內容。
接着,列出 tar 文件 test.tar 內容(但並不提取文件):
tar -tf test.tar
最後用命令提取文件:
tar -xvzf test.tar
tar命令是給整個目錄建立歸檔文件的簡便方法
竅門:下載開源軟件以後,常常會看到文件名以.tgz結尾。這些事gzip壓縮過的tar文件,能夠用tar -zxvf filename.tgz來解壓
tee命令用於將數據重定向到文件,另外一方面還能夠提供一份重定向數據的副本做爲後續命令的stdin。簡單的說就是把數據重定向到給定文件和屏幕上。
eg1 在終端打印stdout同時重定向到文件中:
ls | tee out.txt | cat -n
eg2 建立daemon.json文件,EOF之間內容做爲stdin:
tee /etc/docker/daemon.json << EOF { "insecure-registries" : [ "", ""] } EOF
<< EOF …… EOF
的做用是在命令執行過程當中用戶自定義輸入,它相似於起到一個臨時文件的做用,只是比使用文件更方便靈活。
EOF妙用:
它的做用就是將兩個delimiter
之間的內容(Here Document Content 部分) 傳遞給cmd
做爲輸入參數。
cmd << delimiter Here Document Content delimiter
[root@ecs-6b86 tmp]# cat << EOF >tt.sh 123123123 345345 asdfasds EOF
自定義EOF,好比自定義爲michael
[root@slave-server opt]# cat << michael > haha.txt
ggggggg
4444444
6666666
michael
<<
變爲 <<-
。 使用 <<-
的惟一變化就是Here Document 的內容部分每行前面的 tab
(製表符)將會被刪除掉,這種用法是爲了編寫Here Document的時候能夠將內容部分進行縮進,方便閱讀代碼。
有時腳本內容裏變量不想被系統環境變量替換掉,能夠經過在起始的 delimiter的先後添加 " 來實現
參考:
tree -FCL 2 FusionUpgrade
time nslookup michael.com nslookup: can't resolve '(null)': Name does not resolve Name: micahel.com Address 1: 10.248.250.158 real 0m 5.00s user 0m 0.00s sys 0m 0.00s
help test
查看-z STRING True if string is empty. -n STRING STRING True if string is not empty.
示例:
#!/bin/sh STRING="" # -z if [ -z "$STRING" ]; then echo "STRING is empty" fi if [ -n "$STRING" ]; then echo "STRING is not empty" fi # STRING is empty
首先,先用 tcpdump -D
命令列出能夠抓包的網絡接口:
$ tcpdump -D 1.virbr0 2.docker0 3.bluetooth0 (Bluetooth adapter number 0) 4.nflog (Linux netfilter log (NFLOG) interface) 5.nfqueue (Linux netfilter queue (NFQUEUE) interface) 6.usbmon1 (USB bus number 1) 7.usbmon2 (USB bus number 2) 8.wlp3s0 9.enp5s0 10.any (Pseudo-device that captures on all interfaces) 11.lo [Loopback]
其中, lo
就是 localhost
。其中特殊接口 any 可用於抓取全部活動的網絡接口的數據包。
$ sudo tcpdump -i any -c5 -nn icmp port 80 -A -w webserver.pcap tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 22:10:51.809330 IP 192.168.3.43.22 > 192.168.3.66.50051: Flags [P.], seq 2040167007:2040167203, ack 59350146, win 1432, options [nop,nop,TS val 89942170 ecr 111122685], length 196 22:10:51.812472 IP 192.168.3.43.22 > 192.168.3.66.50051: Flags [P.], seq 196:416, ack 1, win 1432, options [nop,nop,TS val 89942173 ecr 111122685], length 220 22:10:51.833093 IP 192.168.3.66.50051 > 192.168.3.43.22: Flags [.], ack 0, win 23490, options [nop,nop,TS val 111123121 ecr 89942122], length 0 22:10:51.833193 IP 192.168.3.43.22 > 192.168.3.66.50051: Flags [P.], seq 416:612, ack 1, win 1432, options [nop,nop,TS val 89942194 ecr 111123121], length 196 22:10:51.835541 IP 192.168.3.66.50051 > 192.168.3.43.22: Flags [.], ack 196, win 23487, options [nop,nop,TS val 111123121 ecr 89942170], length 0 5 packets captured 7 packets received by filter 0 packets dropped by kernel
-c
選項能夠用於限制 tcpdump 抓包的數量-n
選項顯示 IP 地址,-nn
選項顯示端口號icmp
這裏用做過濾條件,只要抓取 ICMP
報文port
指定端口號,根據端口號來篩選數據包-X
以十六進制打印出數據報文內容,-A
打印數據報文的 ASCII 值-w
選項來保存數據包而不是在屏幕上顯示出抓取的數據包tcpdump 將數據包保存在二進制文件中,因此不能簡單的用文本編輯器去打開它。使用 -r
選項參數來閱讀該文件中的報文內容:
tcpdump -nn -r webserver.pcap
用 host 參數只抓取和特定主機相關的數據包:
sudo tcpdump -i any -c5 -nn host 54.204.39.132
可使用括號來建立更爲複雜的過濾規則,但在 shell 中請用引號包含你的過濾規則以防止被識別爲 shell 表達式:
$ sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
src
抓取源 IP 地址dst
就是按目的 IP/主機名來篩選數據包and
以及 or
邏輯操做符來建立過濾規則參考:
unzip -l demo1-0.1-py2.7.egg
unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解壓到 /home/sunny/
-o
:不提示的狀況下覆蓋文件;
-d
:-d /home/sunny 指明將文件解壓縮到/home/sunny目錄下;
參考:
wc [-clw][--help][--version][文件...]
參數:
-c或--bytes或--chars 只顯示Bytes數。 -l或--lines 只顯示行數。 -w或--words 只顯示字數。 --help 在線幫助。 --version 顯示版本信息。
who //顯示當前登陸系統的用戶
顯示標題欄
# who -H
只顯示當前用戶
# who -m -H
將遠程目錄下的所有內容下載到save目錄下
。-nd
參數表示,若是遠程目錄下也有子目錄,會將子目錄中的文件下載下來而不建立多餘目錄。
wget -r -np -nd -R "index.html*" -P test http://xxx/FusionUpgrade/master/euler/20181101130551/ # 注意,URL末尾須要有/,不然會遞歸下載的
示例2:
將遠程文件夾原封不動下載下來,而且下載下來的本地路徑也是遠程目錄,而不會建立多級目錄。-nH
表示不會建立
xxx.com
目錄,--cut-dirs
將其他多餘層級目錄不下載,實現效果下載到本地就只是DLRN_RPMS
目錄。
wget -r -p -k -np -nH --cut-dirs=4 http://xxx.com/cps/FusionNetwork-for-fc/master/suse/DLRN_RPMS/
參考:
watch -d 'ls -l|grep scf' # 監測當前目錄中 scf' 的文件的變化 watch -n 10 'cat /proc/loadavg' # 10秒一次輸出系統的平均負載 watch -n 1 -d netstat -ant # 命令:每隔一秒高亮顯示網絡連接數的變化狀況
參考:
xargs 可以將輸入數據轉化爲特定命令的命令行參數;這樣,能夠配合不少命令來組合使用。好比grep,好比find。
實例:快速修改後綴名字
源文件夾下:
CentOS-base.repo.repo.bak epel.repo.repo.bak
方法一:
ls *.bak|awk -F. '{print $1}'|xargs -t -i mv {}.repo.repo.bak {}.repo
參考
小夥伴們以爲有用的話,動動手指點個「推薦」吧 :)