1. 程式人生 > >第四章:Linux基礎之程序和服務

第四章:Linux基礎之程序和服務

什麼是程序?從使用者的角度來看程序是程式的一次執行過程。從作業系統的核心來看,程序是作業系統分配的記憶體、CPU時間片等資源的基本單位。程序是資源分配的最小單位,每一個程序都有自己獨立的地址空間與執行狀態。像UNIX這樣的多工作業系統能夠讓許多程式同時執行,每一個執行著的程式就構成了一個程序。

程序管理

程序:linux自身執行的獨立程式
互動程序:有一個shell啟動的程序,可以再前臺執行,也可以在後臺執行
批處理程序:是一個程序序列,和終端沒有聯絡
守護程序(監控程序):linux系統啟動時,啟動並在後臺執行的程序

1.PID:程序的ID(每一個新程序都有一個唯一的PID)
2.PPID:父程序的ID
3.任何一個程序都可以建立一個子程序
4.在redhat 7以上,所有的父程序:systemd;在redhat 5,6中,所有程序的父程序:init

top命令:檢視實時的程序狀態

[[email protected] ~]# top

ps命令:顯示當前程序的狀態
常用選項:
-aux:列出所有程序
-ef:列出所有程序(-aux格式不同)
-l:列出和當前使用者有關的程序
-u:檢視某一使用者的程序狀態

[[email protected] ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   3689   3656  0  80   0 - 51025 wait   pts/0    00:00:00 su
4 S     0   3698   3689  0  80   0 - 29035 wait   pts/0    00:00:00 bash
0 R     0   4150   3698  0  80   0 - 30315 -      pts/0    00:00:00 ps
[
[email protected]
~]#

程序狀態:

執行中:
R:該程序正在執行或等待執行
睡眠:
S:正在休眠但是可以被喚醒
D:正在休眠,而且不可以被喚醒,該程序被中斷,可能會導致裝置的異常狀態
K:正在休眠,而且不可以被喚醒,該程序可以被中斷
已停止:
T:程序被停止,但是可以通過其他程序來進行恢復(或者正在被除錯的程序)
僵死:
Z:子程序在退出時向父程序發出訊號,除PID外,所有資源全部釋放
X:父程序獲取子程序的結構,子程序可以完全釋放,該狀態程序中是看不到的

程序優先順序:

<:高優先順序
n:低優先順序
s:包含子程序
+:位於後臺的程序組

ps -aux引數解釋:

%CPU:佔用CPU使用率
%MEN:佔用記憶體使用率
VSZ:佔用的虛擬記憶體大小
RSS:佔用的實際記憶體大小
TTY:終端的次要裝置號碼(minor device number of tty)
STAT:該程序的狀態
START:程序開始時間
TIME:程序執行時間
COMMAND:所執行的命令

會話和作業

作業:一個正在執行的程序,而且作業可以包含一個或多個程序
作業控制:控制正在執行的程序的行為。如:掛起一個程序,等一會再執行。這樣就可以在多個作業之間切換。

&:在命令後面使用該符號,可以讓命令在後臺執行

jobs:檢視正在後臺執行的作業

sleep 1000 延遲1000秒
ctrl+c:中斷
ctrl+z:掛起

[[email protected] ~]# jobs
[[email protected] ~]# sleep 1000
^Z
[1]+  Stopped                 sleep 1000
[[email protected] ~]# sleep 2000 &
[2] 3252
[[email protected] ~]# jobs
[1]+  Stopped                 sleep 1000
[2]-  Running                 sleep 2000 &
[[email protected] ~]# jobs -l
[1]+  3238 Stopped                 sleep 1000
[2]-  3252 Running                 sleep 2000 &
[[email protected] ~]# 

fg命令:將後臺的命令調到前臺繼續執行,不能再放到後臺了(%作業編號)

[[email protected] ~]# jobs -l 
[1]+  3827  stop               sleep 10000
[2]-  3856  running            sleep 30000 &
[[email protected] ~]#  fg 2
sleep 30000
^Z                                     //ctrl+z 掛起程序
[2]+ stop               sleep 30000 
[[email protected] ~]# jobs
[1]-  stop               sleep 10000
[2]+  stop               sleep 30000

bg命令:將後臺暫停的作業繼續執行(%作業編號)

[[email protected] ~]#  bg 2
[2]+ sleep 30000 &
[[email protected] ~]# jobs
[1]+  stop                  sleep 10000
[2]-  running               sleep 30000 &
[[email protected] ~]#

ps -j:顯示當前作業程序資訊(TGID:執行緒組ID號 SID:會話ID號)

[[email protected] ~]# ps -j

kill命令:殺死程序
kill -l:顯示可以傳遞給linux程序的所有訊號
kill -9 PID:強制殺死一個程序
kill -15 PID:正常的方式終止一個程序
kill -2:ctrl+c中斷程序操作一樣

[[email protected] ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
[[email protected] ~]# ps -j
  PID  PGID   SID TTY          TIME CMD
 3207  3207  3207 pts/1    00:00:00 bash
 3238  3238  3207 pts/1    00:00:00 sleep
 3252  3252  3207 pts/1    00:00:00 sleep
 3370  3370  3207 pts/1    00:00:00 ps
[[email protected] ~]# jobs -l
[1]-  3238 Stopped                 sleep 1000
[2]+  3252 Stopped                 sleep 2000
[[email protected] ~]# kill -9 3252
[2]+  Killed                  sleep 2000
[[email protected] ~]# jobs
[1]+  Stopped                 sleep 1000
[[email protected] ~]# 

控制服務和守護程序

system:是所有程序的父程序(linux核心3.0以上版本)
systemctl:使用者管理各種型別的systemd物件,這些物件稱為:單元(常用單元:.service(服務單元).socket(套接字).path(路徑單元))

ssh:是一個協議
sshd:是一個程序

systemctl status sshd.service顯示中有幾個關鍵字—紅帽7

loaded:單元配置檔案以處理
active(running):正在執行
active(exited):配置成功
active(waiting):執行中,但正在等待事件
inactive:不在執行
enable:開機自啟動
disable:開機不啟動
static:無法啟動,但可以通過某一個已經啟動的單元來啟動

[[email protected] ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Fri 2018-05-18 19:50:20 EDT; 1h 27min ago
  Process: 1293 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
 Main PID: 1336 (sshd)
   CGroup: /system.slice/sshd.service
           └─1336 /usr/sbin/sshd -D

May 18 19:50:20 localhost systemd[1]: Started OpenSSH server daemon.
May 18 19:50:20 localhost sshd[1336]: Server listening on 0.0.0.0 port 22.
May 18 19:50:20 localhost sshd[1336]: Server listening on :: port 22.
[[email protected] ~]#

控制服務:


start:在系統中啟動一項服務
stop:等待程式需處理完畢後再stop
restart:直接關閉程式再開啟
reload:重新載入配置檔案,程序暫停,然後把配置檔案載入進去後,繼續執行後續操作。(程序的PID不會發生改變)
enable:設定開機自啟
disable:關閉開機自啟
status:檢視某一單元的狀態

[[email protected] ~]# systemctl enable sshd
[[email protected] ~]#

備註:在紅帽5,6中,Service sshd status:檢視服務狀態用 Chkconfig ssh on/off:開機自動啟動

分析和儲存日誌

日誌:用於系統稽核和故障排除
在Redhat 7中,系統日誌訊息由兩個服務(systemd-journald和rsyslogd)負責處理。

日誌檔案都儲存在/var/log目錄中:

/var/log/messages //大多數系統日誌訊息記錄的日誌
/var/log/secure //安全和身份驗證的訊息和錯誤日誌
/var/log/maillog //與郵件伺服器相關的日誌
/var/log/cron //與定時執行任務相關的日誌
/var/log/boot.log //記錄和系統啟動有關的日誌

[[email protected]t ~]# ll /var/log/
total 696
drwxr-xr-x. 2 root   root     4096 May 18 12:09 anaconda
drwxr-x---. 2 root   root       22 May 18 12:11 audit
-rw-r--r--. 1 root   root     9930 May 18 19:50 boot.log
-rw-------. 1 root   utmp        0 May 18 11:57 btmp
drwxr-xr-x. 2 chrony chrony      6 Feb  5  2014 chrony
-rw-r--r--. 1 root   root     2343 May 18 21:40 cron
drwxr-xr-x. 2 lp     sys        54 May 18 12:14 cups
-rw-r--r--. 1 root   root    31979 May 18 19:50 dmesg
-rw-r--r--. 1 root   root    32014 May 18 19:39 dmesg.old
drwx--x--x. 2 root   gdm        49 May 18 19:50 gdm
-rw-r--r--. 1 root   root   292292 May 18 19:50 lastlog
drwx------. 5 root   root       37 May 18 11:58 libvirt
-rw-------. 1 root   root      594 May 18 19:50 maillog
-rw-------. 1 root   root   319277 May 18 21:46 messages
drwxr-xr-x. 3 root   root       17 May 18 11:58 pluto
-rw-r--r--. 1 root   root        0 May 18 19:50 pm-powersave.log
drwx------. 2 root   root        6 Jan 26  2014 ppp
drwxr-xr-x. 2 root   root        6 Apr  2  2014 qemu-ga
drwxr-xr-x. 2 root   root       41 May 18 12:13 rhsm
drwxr-xr-x. 2 root   root       17 May 18 12:11 sa
drwx------. 3 root   root       16 May 18 11:58 samba
-rw-------. 1 root   root     5250 May 18 21:46 secure
drwx------. 2 root   root        6 Jan 27  2014 speech-dispatcher
-rw-------. 1 root   root        0 May 18 11:58 spooler
-rw-------. 1 root   root        0 May 18 11:56 tallylog
drwxr-xr-x. 2 root   root       22 May 18 12:11 tuned
-rw-rw-r--. 1 root   utmp     8832 May 18 19:53 wtmp
-rw-r--r--. 1 root   root    55616 May 18 20:08 Xorg.0.log
-rw-r--r--. 1 root   root    55551 May 18 19:39 Xorg.0.log.old
-rw-r--r--. 1 root   root    56080 May 18 12:14 Xorg.9.log
-rw-r--r--. 1 root   root    56080 May 18 12:13 Xorg.9.log.old
[[email protected] ~]# 

許多程式使用syslog協議將事件記錄到系統,每一個日誌都會根據訊息型別和嚴重性分類:

編碼 優先權 嚴重性
0 emerg 系統不可用
1 alert 必須立即採取措施
2 crit 嚴重
3 err 非嚴重錯誤
4 warning 警告
5 notice 正常但重要的事件
6 info 訊息性事件
7 debug 除錯級別訊息

大多數日誌由四個部分組成:

1.記錄在日誌的時間
2.傳送該日誌的主機
3.傳送該日誌訊息的程式或程序
4.傳送的實際訊息

[[email protected] ~]# cat /var/log/messages
………….
………….
May 18 22:03:33 localhost dbus[685]: [system] Successfully activated service ‘org.freedesktop.hostname1′
May 18 22:03:33 localhost systemd: Started Hostname Service.
May 18 22:04:01 localhost fprintd: ** Message: No devices in use, exit
May 18 22:04:08 localhost dbus-daemon: dbus[685]: [system] Activating service name=’org.freedesktop.PackageKit’ (using servicehelper)
May 18 22:04:08 localhost dbus[685]: [system] Activating service name=’org.freedesktop.PackageKit’ (using servicehelper)
May 18 22:04:09 localhost dbus-daemon: dbus[685]: [system] Successfully activated service ‘org.freedesktop.PackageKit’
May 18 22:04:09 localhost dbus[685]: [system] Successfully activated service ‘org.freedesktop.PackageKit’
May 18 22:04:16 localhost kernel: e1000: enp0s3 NIC Link is Down
May 18 22:04:16 localhost NetworkManager[822]: (enp0s3): link disconnected (deferring action for 4 seconds)
May 18 22:04:18 localhost kernel: e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
May 18 22:04:18 localhost NetworkManager[822]: (enp0s3): link connected
[[email protected] ~]#

tail -f /var/log/secure :實時顯示日誌最後10行

[[email protected] ~]# tail -f /var/log/secure

打包和壓縮

tar命令:打包

c:建立文件
t:列出存檔內容
x:提取存檔
f filename:要操作的存檔的檔名
v:詳細資訊

注意:1.選項前不用加- 2.建立之前請檢查有沒有重名檔案(覆蓋且不提示) 3.要使tar可以打包選定的檔案,執行tar命令的使用者必須要能夠讀取這些檔案

[[email protected] tmp]# tar cf a.tar /etc/     //打包/etc/
tar: Removing leading `/' from member names
[[email protected] tmp]# ll
total 29280
-rw-r--r--. 1 root root 29982720 May 18 22:55 a.tar
[[email protected] tmp]# tar tf a.tar       //列出存檔內容
........
........
........
[[email protected] tmp]#

tar支援三種不同的壓縮方式:

gzip:壓縮速度最快,歷史最久,應用最廣泛
bzip2: 壓縮成的存檔檔案小,可用性不如gzip
xz:最新的方式,提供最佳的壓縮率

實際環境中3種情況都可能遇到,所以要建立不一樣格式的歸檔檔案就有自己的選項。

z用於gzip壓縮:filename.tar.gz
j用於bzip2壓縮:filename.tar.bz2
J用於xz壓縮:filename.tar.xz

[[email protected] tmp]# ll -h
total 29M
-rw-r--r--. 1 root root 29M May 18 22:55 a.tar
[[email protected] tmp]# tar zcf a.tar.gz a.tar      //gzip壓縮
[[email protected] tmp]# tar jcf a.tar.bz2 a.tar     //bzip2壓縮
[[email protected] tmp]# tar Jcf a.tar.xz a.tar      //xz壓縮
[[email protected] tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[[email protected] tmp]# rm a.tar
rm: remove regular file ‘a.tar’? y
[[email protected] tmp]# tar xf a.tar.bz2 
[[email protected] tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[[email protected] tmp]# rm a.tar
rm: remove regular file ‘a.tar’? y
[[email protected] tmp]# tar xf a.tar.bz2     //解壓
[[email protected] tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[[email protected] tmp]#

定時任務

cron:是一個程序。可以讓linux週期性的執行某一個命令。

crontab命令:設定linux週期性的執行某一個命令

-u:設定某一個使用者的週期性任務—root許可權
-e:編輯crontab的工作內容
-l:查閱crontab的工作內容
-r:移除所有的crontab的工作內容,若僅要移除一項,請用-e去編輯

crontab基本格式 :

*  *  *  *  *  command
分  時  日  月  周  命令第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要執行的命令

crontab配置舉例:

/1 * * * * command              //每1分鐘執行一次
15,30,45 * * * * command        //每小時的15,30,45分鐘執行
10,50 7-10 * * * command        //7點到10點的第10,50分鐘執行
20,40 7-11 */1 * * command      //每隔一天的7點的第20和第40分鐘執行
25,50 7-11 * * 1 command        //每隔一週的7點的第25和第50分鐘執行
30 3 * * * command              //每天的3:30執行
30 3 1,10,20 * * command        //每月1,10,20日的3:30執行
30 3 * * 6,7 command            //每週六,週日的3:30執行
/15 9-16 * * * command          //每天9點到16點之間每隔15分鐘執行

備註:
*:代表任何時候
,:代表分隔欄位
-:代表一段時間範圍內
/n:n代表數字,也就是每隔n單位間隔的意思

問:每個晚上10點,提示使用者可以去睡覺了。

[[email protected] ~]# crontab -e -u linux00    //* */10 * * * go to sleep
crontab: installing new crontab
[[email protected] ~]# tail /var/log/cron        //檢視任務日誌檔案
May 19 00:50:01 localhost CROND[1737]: (root) CMD (/usr/lib64/sa/sa1 1 1)
May 19 00:52:31 localhost crontab[1798]: (root) BEGIN EDIT (linux00)
May 19 00:56:11 localhost crontab[1798]: (root) REPLACE (linux00)
May 19 00:56:11 localhost crontab[1798]: (root) END EDIT (linux00)
May 19 00:56:35 localhost crontab[1844]: (root) BEGIN EDIT (linux00)
May 19 00:57:01 localhost CROND[1849]: (linux00) CMD (go to sleep)
May 19 00:57:20 localhost crontab[1844]: (root) REPLACE (linux00)
May 19 00:57:20 localhost crontab[1844]: (root) END EDIT (linux00)
May 19 00:58:01 localhost crond[705]: (linux00) RELOAD (/var/spool/cron/linux00)
May 19 00:58:02 localhost CROND[1871]: (linux00) CMD (go to sleep)
[[email protected] ~]# 

vim /etc/crontab:檢視計劃任務配置檔案

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

第一行SHELL變數指定了系統要使用哪個shell,這裡是bash
第二行PATH變數指定了系統執行命令的路徑
第三行MAILTO變數指定了crond的任務執行資訊將通過電子郵件傳送給root使用者,如果MAILTO變數的值為空,則表示不傳送任務執行資訊給使用者。

crontab配置原理

當使用者使用 crontab 這個命令來建立工作排程之後,該項工作就會被紀錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的喔!舉例來說, css使用 crontab 後, 他的工作會被紀錄到 /var/spool/cron/css 中,但請注意,不要使用 vi 直接編輯該檔案, 因為可能由於輸入語法錯誤,會導致無法執行 cron 喔!另外, cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登入檔中.crond服務的最低偵測限制是分鐘,所以 cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron 裡面的資料內容 ,因此,只要你編輯完 /etc/crontab 這個檔案,並且將他儲存之後,那麼 cron 的配置就自動的會來運行了,

如果你修改完的crontab或者新增的crontab沒有馬上的執行起來,那麼你可以用 crontab restart crond來重啟.

輸入輸出重定向

>file 標準輸出重定向到檔案(覆蓋)
>>file 標準輸出重定向到檔案(追加)
2> 標準錯誤重定向到檔案(覆蓋)
2>> 標準錯誤重定向到檔案(追加)
2>/dev/null 標準錯誤重定向到回收站
&>file 標準輸出和標準錯誤重定向到檔案(覆蓋)
>>file 2>&1 標準輸出和標準錯誤重定向到檔案(追加)

[[email protected] tmp]# date > msg //覆蓋
[[email protected] tmp]# cat msg
Tue May 29 21:57:26 EDT 2018
[[email protected] tmp]# date > msg //覆蓋
[[email protected] tmp]# cat msg
Tue May 29 22:09:36 EDT 2018
[[email protected] tmp]# date >> msg //追加
[[email protected] tmp]# cat msg
Tue May 29 22:09:36 EDT 2018
Tue May 29 22:09:48 EDT 2018
[[email protected] tmp]# abc //錯誤命令
bash: abc: command not found…
[[email protected] tmp]# abc 2> msg //錯誤覆蓋
[[email protected] tmp]# cat msg
bash: abc: command not found…
[[email protected] tmp]# abc 2>> msg //錯誤追加
[[email protected] tmp]# cat msg
bash: abc: command not found…
bash: abc: command not found…
[[email protected] tmp]# date &> msg //標準輸出覆蓋
[[email protected] tmp]# cat msg
Tue May 29 22:32:33 EDT 2018
[[email protected] tmp]# abc &> msg //錯誤輸出覆蓋
[[email protected] tmp]# cat msg
bash: abc: command not found…
[[email protected] tmp]# date >> msg 2>&1 //標準輸出追加
[[email protected] tmp]# abc >> msg 2>&1 //錯誤輸出追加
[[email protected] tmp]# cat msg
bash: abc: command not found…
Tue May 29 22:34:14 EDT 2018
bash: abc: command not found…
[[email protected] tmp]#

輸入輸出重定向配合計劃任務:

[[email protected] tmp]# touch msg //建立msg檔案
[[email protected] tmp]# crontab -e //編輯計劃任務 (*/1 * * * * date>>/tmp/msg)
no crontab for root – using an empty one
crontab: installing new crontab
[[email protected] tmp]# systemctl restart crond.service //重啟計劃任務
[[email protected] tmp]# tail -f msg //實時檢視msg檔案
Tue May 29 22:56:01 EDT 2018
Tue May 29 22:57:01 EDT 2018
Tue May 29 22:58:01 EDT 2018
Tue May 29 22:59:01 EDT 2018
^C
[[email protected] tmp]#

管道符

|:管道符
管道符作用:1、承上啟下,把上一個指令的輸出作為下一個指令的輸入來執行。 2、搭配grep命令實現過濾功能。

[[email protected] tmp]# ll /etc/ | more
[[email protected] tmp]# ps -aux | grep cron
root 4867 0.0 0.1 126300 1700 ? Ss 22:56 0:00 /usr/sbin/crond -n
root 5877 0.0 0.0 112640 980 pts/0 R+ 23:14 0:00 grep –color=auto cron
[[email protected] tmp]# ps -aux | grep cron > msg
[[email protected] tmp]# cat msg
root 4867 0.0 0.1 126300 1700 ? Ss 22:56 0:00 /usr/sbin/crond -n
root 5926 0.0 0.0 112640 976 pts/0 R+ 23:15 0:00 grep –color=auto cron
[[email protected] tmp]#

正則表示式和萬用字元

萬用字元:它是由shell解析,並且一般用於匹配檔名。如 ls命令

常用萬用字元:

*:匹配任意多個字元
?:匹配任意一個字元
[…]:匹配括號內任意一個字元
[!…]:不匹配括號內任意一個字元

正則表示式:是一個字元的匹配標準,可以匹配文字中的內容
一般命令工具按此標準實現字元匹配,常用於支援正則表示式的工具,如grep,sed等。一般匹配檔案中的內容。

檢視/etc/下面以pa開頭的檔案或目錄:

[[email protected] etc]# ls pa*
passwd passwd-

pam.d: //下面列的是pam.d目錄中所有的檔案和目錄
atd gdm-launch-environment pluto smartcard-auth su-l
chfn gdm-password polkit-1 smartcard-auth-ac system-auth
chsh gdm-pin postlogin smtp system-auth-ac
config-util gdm-smartcard postlogin-ac smtp.postfix systemd-user
crond liveinst ppp sshd vlock
cups login remote su vmtoolsd
fingerprint-auth other rhn_register subscription-manager xserver
fingerprint-auth-ac passwd runuser subscription-manager-gui
gdm-autologin password-auth runuser-l sudo
gdm-fingerprint password-auth-ac setup sudo-i
[[email protected] etc]# ls pass??
passwd
[[email protected] etc]# ls pass?
ls: cannot access pass?: No such file or directory
[[email protected] etc]# ls passw[abcd]
passwd
[[email protected] etc]# ls passw[!abce]
passwd
[[email protected] etc]#

正則表示式

字元匹配:

.:匹配任意單個字元
*:匹配其前面一個字元出現任意次
?:匹配其前面的字元1次或0次
+:匹配其前面一個字元出現至少一次(在擴充套件正則表示式中)

位置匹配:

^:錨定行首
$:錨定行尾
\<或\b:錨定詞首,其後面的任意字元必須作為單詞首部出現
\>或\b:錨定詞尾,其前面的任意字元必須作為單詞尾部出現
\B:非單詞的開頭或結尾
\:通常用於開啟或關閉後續字元的特殊含義

分組():

(ab)*:匹配ab這個分組出現任意次
\1:應用第一個左括號以及與之對應的右括號所包括的所有內容,同理還有\2,\3

特殊子字元類:

[:alnum:] :任何字母和數字
[:alpha:] :任何字母
[:cntrl:] :控制字元,在ASCII表中對應八進位制000 到 037, 和177(’DEL’)
[:digit:] :任何數字
[:graph:] :匹配列印字元,相當於[:alnum:] + [:punct:]
[:lower:] :小寫字母
[:print:] :可列印字元,相當於[:alnum:],[:punct:],和space
[:punct:] :標點符號,’!”#$%&'()*+,-./:;<=>[email protected][\]^_'{|}~’
[:space:] :空白字元,tab、newline、vertical tab、form feed、carriage return、and space
[:upper:] :大寫字母
[:xdigit:] :任何16進位制的數字,相當於[0-9a-fA-F]