天天看點

日常linux指令總結

-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}