-exec和|xargs的差別
-exec将前指令輸出的結果作為後續指令的參數逐個執行,會啟用多個程序
|xargs将前指令輸出的結果作為後續指令的整體參數執行,但後續指令必須支援多參數,
比如:rm、mv、tar、du等。預設情況下,xargs隻是把\n轉換成了空格。
find /apsara/kvm/corefile/ -type f -name "i-*" -delete
find . -type d -name ".svn" | xargs tar -czf benfei.tar.gz
#find /tmp/corefilebak -name "*tar.gz*" -exec ls {} \;
/tmp/corefilebak1表示
第2清單示小時0~23(0表示0點)
第3清單示日期1~31
第4清單示月份1~12
第5列辨別号星期0~6(0,7都可表示星期天)
第6列要運作的指令
綜合起來就是: 分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 指令
從上面可以看出,crontab最小的時間機關: 1分鐘。如果要每30秒執行一次腳本,要麼寫個小腳本,要麼在crontab增加延遲。
方法一: 小腳本實作
#!/bin/bash
while :
do
/var/script/run.sh
sleep 30 # 延遲30秒執行
done
方法二:crontab中增加延遲30秒來實作
[[email protected] ~]# cat log.txt
2018-11-21 09:00:00
2018-11-21 09:00:30
2018-11-21 09:01:00
2018-11-21 09:01:30
[[email protected] ~]# crontab -l
* * * * * /var/script/run.sh >> log.txt
* * * * * sleep 30; /var/script/run.sh >> log.txt
[[email protected] ~]# cat run.sh
#!/bin/bash
date +'%Y-%m-%d %H:%M:%S'
解決定時任務不執行的問題
在crontab檔案中定義多個排程任務時,需要特别注意的一個問題就是環境變量的設定,因為我們手動執行某個腳本時,是在目前shell環境下進行的,程式能找到環境變量;而系統自動執行任務排程時,除了預設的環境,是不會加載任何其他環境變量的。是以就需要在crontab檔案中指定任務運作所需的所有環境變量。
讀取其他變量檔案,腳本開頭添加如下代碼:
#!/bin/bash
source /etc/profile
source ~/.bash_profile
檢測磁盤空間
df |grep -vi mounted |awk '{pct=substr($(NF-1),0,length($(NF-1))-1);if (pct*1>60) exit 1;}'
if [ $? -ne 0 ];then
echo "磁盤空間超過60%.請用df指令檢查!"
fi
Linux中程序概述和ps檢視程序工具
程序:程式運作的過程
PID為1的程序:centos5、6:init、centos7:systemd
僵屍程序:父程序退出子程序沒退出,子程序沒有父程序進行管理
無法通過kill殺死子程序隻能通過重新開機來釋放僵屍程序
程序屬性:
程序ID:唯一的數值,用來區分程序
父程序ID:PPID
程序狀态:運作R、休眠S、僵屍Z
檢視程序工具
BSD格式顯示程序:ps -aux
a:顯示跟目前終端關聯的所有程序
u:基于使用者格式顯示,U顯示使用者ID的所有程序
x:顯示所有程序,不以終端區分
标準格式顯示程序:ps -ef
e:顯示所有程序
f:顯示完整格式輸出
[[email protected] /root]
#ps aux|head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.1 0.0 193328 8032 ? Ss 2019 10072:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 2019 4:09 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2019 182:21 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2019 33:18 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/1]
root 11 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/2]
Ctrl+c:發送SIGINT信号,終止程序
Ctrl+z:發送SIGSTOP信号,挂起程序,将作業放置到背景,暫停
Ctrl+d:不發送信号,表示二進制EOF,代表輸入完成或者登出
watch -n1 -d 指令
-n:更新間隔
-d:高亮顯示變化
watch -n1 -d free
Every 1.0s: free Mon Dec 7 13:10:49 2020
total used free shared buff/cache available
Mem: 396126200 206600840 3621368 1067992 185903992 179545264
Swap: 0 0 0
netstat - 列印系統開啟的端口号、網絡連接配接、路由表、連接配接的資料統計、僞裝連接配接以及廣播域成員。
netstat -nptl | egrep "8190|9190"
tcp 0 0 0.0.0.0:9190 0.0.0.0:* LISTEN 93787/python
端口
計算機的端口範圍是從0号端口到65535号端口,可分為3大類:
(1)公認端口(Well Known Ports):從0到1023,它們緊密綁定于一些服務。通常這些端口的通訊明确表明了某種服務的協定。例如:80端口實際上總是HTTP通訊。
(2)注冊端口(Registered Ports):從1024到49151。它們松散地綁定于一些服務。也就是說有許多服務綁定于這些端口,這些端口同樣用于許多其它目的。例如:許多系統處理動态端口從1024左右開始。
(3)動态和/或私有端口(Dynamic and/or Private Ports):從49152到65535。理論上,不應為服務配置設定這些端口。實際上,機器通常從1024起配置設定動态端口。但也有例外:SUN的RPC端口從32768開始。
tar 指令常用參數總結
-c: 建立壓縮檔案
-x:解壓
-t:檢視内容
-r:向壓縮歸檔檔案末尾追加檔案
-u:更新原壓縮包中的檔案
這五個是獨立的指令,壓縮解壓都要用到其中一個,可以和别的指令連用但隻能用其中一個。下面的參數是根據需要在壓縮或解壓檔案時可選的。
-z:有gzip屬性的
-j:有bz2屬性的
-Z:有compress屬性的
-v:顯示所有過程
-O:将檔案解開到标準輸出
下面的參數-f是必須的
-f: 使用檔案名字,切記,這個參數是最後一個參數,後面隻能接檔案名。
tar -cf all.tar *.jpg
這條指令是将所有.jpg的檔案打成一個名為all.tar的包。-c是表示産生新的包,-f指定包的檔案名。
tar -rf all.tar *.gif
這條指令是将所有.gif的檔案增加到all.tar的包裡面去。-r是表示增加檔案的意思。
tar -uf all.tar logo.gif
這條指令是更新原來tar包all.tar中logo.gif檔案,-u是表示更新檔案的意思。
tar -tf all.tar
這條指令是列出all.tar包中所有檔案,-t是列出檔案的意思
tar -xf all.tar
這條指令是解出all.tar包中所有檔案,-x是解開的意思
壓縮
tar –cvf jpg.tar *.jpg 将目錄裡所有jpg檔案打包成tar.jpg
tar –czf jpg.tar.gz *.jpg 将目錄裡所有jpg檔案打包成jpg.tar後,并且将其用gzip壓縮,生成一個gzip壓縮過的包,命名為jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg 将目錄裡所有jpg檔案打包成jpg.tar後,并且将其用bzip2壓縮,生成一個bzip2壓縮過的包,命名為jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg 将目錄裡所有jpg檔案打包成jpg.tar後,并且将其用compress壓縮,生成一個umcompress壓縮過的包,命名為jpg.tar.Z
rar a jpg.rar *.jpg rar格式的壓縮,需要先下載下傳rar for linux
zip jpg.zip *.jpg zip格式的壓縮,需要先下載下傳zip for linux
解壓
tar –xvf file.tar 解壓 tar包
tar -xzvf file.tar.gz 解壓tar.gz
tar -xjvf file.tar.bz2 解壓 tar.bz2
tar –xZvf file.tar.Z 解壓tar.Z
unrar e file.rar 解壓rar
unzip file.zip 解壓zip
總結
*.tar、.tar.gz和.tgz 用 tar –xf 解壓
*.gz 用 gzip -d或者gunzip 解壓
*.bz2 用 bzip2 -d或者用bunzip2 解壓
*.tar.bz2用tar –xjf 解壓
*.Z 用 uncompress 解壓
*.tar.Z 用tar –xZf 解壓
*.rar 用 unrare 解壓
*.zip 用 unzip 解壓
lsof -i 用以顯示符合條件的程序情況,lsof(list open files)是一個列出目前系統打開檔案的工具
加端口号,檢視端口被誰占用
lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 12211 root 3u IPv6 34817 TCP *:ssh (LISTEN)
sshd 12211 root 4u IPv4 34819 TCP *:ssh (LISTEN)
sshd 30585 root 3r IPv4 2835367518 TCP 306a13103.cloud.a14.am87:ssh->10.33.11.94:45518 (ESTABLISHED)
sshd 36345 root 3r IPv4 2764580602 TCP 306a13103.cloud.a14.am87:ssh->dns-slave-list.tbsite.net:58727 (ESTABLISHED)
sshd 53845 root 3r IPv4 3151849794 TCP 306a13103.cloud.a14.am87:ssh->10.33.11.95:34089 (ESTABLISHED)
netstat -tunlp指令用于顯示tcp,udp的端口和程序等相關情況,會顯示端口和所對應的程式
netstat -antp|grep -w 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 12211/sshd
tcp 0 0 10.33.1.71:22 10.33.1.65:58727 ESTABLISHED 36345/1
tcp 0 0 10.33.1.71:22 10.33.11.94:45518 ESTABLISHED 30585/sshd: [email protected]
tcp 0 0 10.33.1.71:22 10.33.11.95:34089 ESTABLISHED 53845/sshd: [email protected]
tcp 0 0 :::22 :::* LISTEN 12211/sshd
basename:擷取檔案名
#basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
dirname:擷取檔案所在路徑
#dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
指令文法的通用格式:
[[email protected] /root]#
[[email protected] path]# command options arguments
發起一個指令:請求核心将某個二進制程式運作為一個程序
靜态程式——>動态程序(有生命周期)
多數系統程式檔案存放在:
普通指令:/bin、/usr/bin、/usr/local/bin
管理指令:/sbin、/usr/sbin、/usr/local/sbin
file:檢視檔案類型
#file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=61c6a7e6c1f7806e50de1f780f60f9d8dde61d50, stripped
history:檢視曆史指令
history n:檢視最後n條指令
!cmid:執行第幾個指令
Ctrl +r:根據關鍵字搜尋曆史指令
!command,執行最近執行的指令
globbing:檔案名比對
比對模式:元字元
*:比對任意長度的任意字元
?:比對任意單個字元
[ ]:比對指定範圍内的任意單個字元,[a-z]:比對a-Z,不區分大小寫;[0-9]:0-9
[[:upper:]]:大寫字母
[[:lower:]]:小寫字母
#ll [[:upper:]][0-9]?a
-rw-r--r-- 1 root root 0 Dec 13 11:49 P12a
[^]:比對指定範圍外的任意單個字元
[^[:upper:]]:非大寫字母
[^[:lower:]]:非小寫字母
[^0-9]:非數字
[^a-z]:非字母
\:轉義,表示本來應有的意義;如建立名為"a b"的檔案,則touch a\ b,将空格轉義為空格而非建立a和b兩個檔案
IO重定向及管道
程式:指定+資料
程式的資料流有三種: fd:檔案描述符
輸入資料流:<--标準輸入(stdin)0,鍵盤
輸出資料流:-->标準輸出(stdout)1,顯示器
錯誤輸出流:-->錯誤輸出(stderr)2,顯示器
IO重定向:
輸出重定向:>,覆寫;>>,追加;&>/dev/null合并輸出,正确錯誤都重定向/dev/null
輸入重定向:<
cat <<eof >>或者>fliename
how are you
how old are you
eof
cat >>或>fliename<<eof
how are you
how old are you
eof
管道:連接配接程式,實作将前一個指令的輸出直接定向到後一個程式當做輸入資料流
tee:讀取标準輸入并将标準輸出到檔案
-a:追加
cat /etc/passwd |tee test.txt
nano編輯界面最下方黑底白字表示快捷鍵操作,其中 ^ 代表 Ctrl。M 表示 Alt鍵
常用快捷鍵:
儲存:Ctrl+O
退出:Ctrl+X
粘貼:Ctrl+U
移動:Ctrl + 行号
設定全局變量:/etc/nanorc
#grep ^set /etc/nanorc
set autoindent 自動縮進
set mouse 使用滑鼠
set smarthome home鍵至行首
{ }擴充:
cp file{,_`date +%F`}
touch file{1..10}