1. 程式人生 > >linux系統自帶函數庫介紹

linux系統自帶函數庫介紹

函數庫 函數

1 概述

/etc/init.d/functions這個這個系統自帶的函數庫在/etc/init.d裏,很多腳本執行的時候會調用這裏的函數。

這個文件首先會設置umask,path,還有語言環境等,然後會設置success,failure,warning,normal四種情況下的字體顏色。

該文件共定義了33個函數

本文將針對CentOS6S上的一些函數的用法進行介紹

2 函數介紹

daemon

啟動某個服務。這裏的服務名 都是放置/etc/init.d路徑下的啟動腳本的文件名,如ntpd

函數的$1為服務名

默認用法 函數 服務名

如:daemon ntpd

函數的$1如果不是服務名,可以有其他的選項,如下

進程服務名放置第4個位置參數$3位,$2可以任意參數

--check,--user, --pidfile

如:daemon --check start ntpd

進程服務名放置第3個位置參數$2位:

--check=?*,--user=?*,--pidfile=?*,--force,[-+][0-9]*

daemon --check=ntpd ntpd

killproc

殺死某個進程。和 daemon相反的作用

這裏$1是服務名,則是放置/etc/init.d路徑下的啟動腳本的文件名,如ntpd

用法 函數名 服務名

如 killproc ntpd

這裏$1不是服務名,為其他參數,如-p,$2是放在在/var/run/服務名.pid的這類文件

用法 killproc -p pid_file

如 killproc -p /var/run/ntpd.pid

status

返回一個服務的狀態,

$1如果是服務名,用法如下

用法 函數 服務名

如 status ntpd 結果為 ntpd (pid 23767) is running...的提示

如果$1不是函數名,如-p或-l,用法如下

$1=-p,pid_file=$2 $2是文件:/var/run/服務名.pid

$1=-l,lock_file=$2 ,$2是/var/lock/subsys下的文件名

$3為進程名

用法 status $1 $2 $3

如 status -l /var/lock/subsys/atd.pid atd

或 status -p /var/run/atd.pid atd

action

打印$1,然後向左移動一位後,將所有的參數([email protected])作為一個命令來執行

[email protected]組成的這個命令的返回值如果為真,就打印 $1 [ok],這裏的$1是原來的$1

[email protected]組成的這個命令的返回值如果為假,就打印 $1 [FAILED],這裏的$1是原來的$1

如ntpd這個指定本身會啟動ntp服務,本身執行這個命令就是會成功開啟ntpd服務,所有當執行

action start ntpd

這個命令[email protected]就是 ntpd,顯示為如下,可以正確表達了意思

start [OK]

如果移動位置後的[email protected]不是一個命令,那麽就是會顯示失敗

所有用action這個函數,要知道當$1被移動位置後的[email protected]執行的結果,再指定$1的內容,這樣才能正確表示意思

執行如下語句,service ntpd stop&>/dev/null本身是一條完整的停止服務的命令

這裏$1是stop ntpd,把$1移動位置後,[email protected]是service ntpd stop&>/dev/null,這是一條完整的命令

action "stop ntpd" `service ntpd stop&>/dev/null`

執行結果如下,命令執行後就可以正確命令執行的結果

stop ntpd [ OK ]

checkpid

驗證pid對應的服務是否存在,檢查路徑/proc下是否已存在pid,如果有一個存在,函數返回值是0,否則函數返回值是1

用法 函數 pid(這裏的pid是數字,代表/proc目錄下的某個進程文件名稱,也是進程號)

如 checkpid 1

__pids_var_run

查看某個服務名是否存在,存在返回狀態碼0,不存在返回1,3或4

如果$1是進程的服務名

用法 __pids_var_run $1

如 __pids_var_run atd 進程存在,返回狀態碼0,這裏會把進程號賦值給pid這個變量,但是不打印出來

如果$1不是進程的服務名,就檢查$2,$2是放在/var/run/服務名.pid

用法 __pids_var_run $1 /var/run/服務名.pid

如 __pids_var_run -a /var/run/atd.pid 進程存在,返回狀態碼0

pidfileofproc

尋找進程服務名的pid,因為調用了__pids_var_run $1用法,所以僅僅通過pid_file來查找進程id

用法 pidfileofproc 服務名

如 pidfileofproc atd ,結果顯示pid的進程id

__pids_pidof

通過pidof命令查看進程id

用法 __pids_pidof 服務名

如 __pids_pidof atd 結果會顯示進程id

pidofproc

調用了兩個函數來查找進程id,如果要查看服務的進程id,建議用這個腳本來查看更詳細

__pids_var_run和__pids_pidof兩個函數

用法 pidofproc 進程名

如 pidofproc atd

echo_success,echo_failure,echo_passed,echo_warning

分別輸出各類信息,

如成功綠色OK,失敗紅色FAILED,通過藍色PASSED,警告黃色WARNING

用法 直接運行函數

如 echo_success

__readlink

將函數後面的每個參數用一行讀出,如果參數不存在,則忽略該參數

用法 __readlink $1 $2 $3 ...

如 __readlink aa aa.bak test.sh 如果這三個參數文件存在,就一行行顯示,不存在就直接忽略

strstr

判斷$1是否含有$2,如果$1含有$2,那麽返回值$?為0,否則為1

用法 strstr $1 $2

如 strstr abcd bc ,結果為真,返回0

strstr abxcd bc ,結果為假,返回1

confirm

確認是否真的要運行此服務,如果是y|Y就返回0,C返回2,n|N返回1,我們可以判斷返回值來確定是否要進行下一步

用法 confirm

顯示 "Start service $1 (Y)es/(N)o/(C)ontinue? [Y]"的提示信息,輸入y,Y,n,N,C等

is_ignored_file :檢查文件$ 1是備份還是rpm生成的文件,並且應該被忽略

用法 is_ignored_file $1 如果是要被忽略的,就返回0.否則返回1

get_numeric_dev

將設備轉換為用10進制或者16進制的格式的數值現在,格式為major:minor

$1可以指定為 指定為fmt或者hex,fmt為10進制,hex為16進制,$2為設備,如/dev/sda

用法 get_numeric_dev $1 $2

如 get_numeric_dev hex /dev/sr0

get_numeric_dev dev /dev/sr0

is_true

判斷函數的$1是否為 [tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE] 是的話,返回值為0,否則返回值為1

用法 is_true $1

如 is_true y 結果返回值為0

is_false

判斷函數的$1是否為 [fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE] 是的話,返回值為0,否則返回值為1

用法 is_false $1

如 is_false n 結果返回值為0

3 小結

以上只是函數庫的一部分,函數在運行的過程可以互相調用。更詳細的函數用法,請參考系統文件/etc/init.d/functions

本文出自 “自學linux” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1962335

linux系統自帶函數庫介紹