歡迎您光臨本站 註冊首頁

LINUX與UNIX SHELL編程指南筆記

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
第一部分文件安全與許可權 許可權 -rwxrwxrwx rwx 讀 寫 執行 s 文件屬主和組set-ID t 粘性位 4 2 1 U G O User group other 文件類型 d 目錄 l 符號鏈接 s 套接字文件 b 塊設備文件 c 字元設備文件 p 命名管道文件 - 普通文件 改變文件許可權 chmod u文件所有者 g同組用戶 o其他用戶 a所有用戶 增加許可權 -取消許可權 =設定許可權 suid/guid why?當其它人使用有suid/guid的文件時就會有止文件所屬用戶的許可權,這是很危險的!! chown 改變所屬用戶chgrp 改變所屬組 umask 默認文件許可權設置 ,設置方法為777減去文件許可權所得的值. 第二部分find和xargs Find pathname –iptions find / -name xxx -name 按文件名查找 Find / -name 「*.txt」 -print -perm 按文件許可權 查找 Find / -perm 755 -print -prune 使find不在當前目錄查找,如果同時使用了-depth那麼-prune將被find 忽略 -user 按文件所屬用戶查找 -group 按所屬組查找 -mtime –n n 按文件更改時間來查找-n表示距現在n天內 n表更改時間距現在n天以前,另外還有-atime和-ctime選項用法和-mtime相似 -nogroup 查找不屬於任何組的用戶 -nouser 查找不屬於任何人的文件 -newer file ! fiel2 查找比file1新但比file2舊的文件 -type 查找某一類型的文件如: d -目錄 l -符號鏈接 s -套接字文件 b -塊設備文件 c -字元設備文件 p -命名管道文件 f - 普通文件 -size n[c]查找文件長度為n塊的文件,帶c時表示文件長度以位元組計. -depth 查找文件時先查找當前目錄,再查找子目錄. -fstype 查找某一類型文件系統中的文件, -mount 在查找文件時不跨越文件系統mount點. -follow 如果find命令遇到符號鏈接,就跟蹤止鏈接所指向的文件. -cpio 對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中.、 使用exec或ok來執行shell命令,在找到一些文件后使用-exec來執行相關命令 -exec 後跟要執行的命令,一對{} 一個空格和一個最后一個分號 Find . –type f –exec ls –l {} ; xargs?????

第三部分後台執行命令 at cron 和crontab & Nohup 後台運行一個命令,即使用戶退也也不受影響. * * * * * command 分 時 日 月 周 命令 Crontab [-u user] –e –l –r 用戶 編輯 例出 刪除 at [-f script] [-m –l –r ] [time] [date] -f script 命令或腳本 -l 列出 -r 刪除 -m 完成後發郵件 第四部分文件名置換 * 匹配任何字元串,包括空字元串. ?匹配任何單個字元 […] 匹配[]中所含的任何字元 [!....]匹配[]中除!之後的字元 第五部分shell輸入與輸出 echo c f t n 不換行 進紙 跳格 換行 read cat 管道 | 前一個命令的輸出做為後一個命令的輸入 tee 一個輸出到標準輸出,另一個拷到相應的文件中 標準輸入,輸出和錯誤 0 1 2 文件重定向 > >> < comm > file 2>&1 exec 替換當前shell 第六部分 && || 返回0 返回非0 () {} 當前shell 子shell 第七部分正則表達式 基本元字元及含義 ^ 只匹配行首 $ 只匹配行尾 * 一個單字元後跟*,匹配0個或多個止字元 屏蔽特殊字元 pattern{n} 匹配前面pattern出現次數,n次 pattern{n,}m 同上,但次數最少為n pattern{n,m} 同上,但pattern 在n與m 次之間.

第八部分grep家族 grep grep 「sort」 *.doc -c 只輸出匹配行的計數 grep –c 「48」 data.f -i 不區分大小寫 -h 查詢多文件時不顯示文件名 -l 查詢多文件時只輸出包含匹配字元的文件名 -n 顯示匹配行及行號 -s 不顯示不存在或無匹配文本的錯誤信息 -v 顯示不包含匹配文本的所有行 grep 和正則表達式 grep 『48[34]』 data.f 查找483 或484 grep 『^[^48]』 data.f 查找非48開頭的行 grep 『[Ss]ept』 data.f 查找sept或Sept grpe 『K…D』 data.f 查找K開頭D結尾五個字母的單詞 grep 『4{2,}』 data.f 找4至少出現2次的行 grep 『6{2,6}3』 data.f 找6出現2到6次,並以3結尾 grep –E 『219|216』 data.f 找219或216 grep 『^$』 data.f 找空行 類名 類 等價的正則表達式 [[:upper:]] [A-Z] [[:lower:]] [a-z] [[:digit:]] [0-9] [[:alnum:]] [0-9a-zA-Z] [[:space:]] 空格或tab [[:alpha:]] [a-zA-Z] egrep 第九部分awk介紹 模式和動作:模式部分決定動作語句何時觸發及觸發事件.處理即對數據進行的操作.如果省略模式部分,動作將時刻保持執行狀態.<?xml:namespace prefix = o />

域和記錄 1 分隔 符域2 分隔符 域3 分隔符 域4及換行 Bunny # 02/99 # 48 # Yellown $1 $2 $3 $4 全文為$0 域和記錄 抽取記錄 awk 『{print $0}』 grade.txt >wow 抽取全文 awk 『{print $1}』 grade.txt >wow 抽取域1也就是第一列 awk 『{print $1,$4}』 grade.txt >wow 抽取域1和域4 awk 『BEGIN {print 「Name Beltn---------------------------」}{print$1」t」$4}』 grade.txt 列印開頭 Name

Belt --------------------------------- M.Tansley Green . . . L.Tansley Brown-3 Awk 『BEGIN {print 「Namen-----」} {print $1} END {「end-of-report」}』 grade.txt 列印開頭和結尾 Name -------- . . . end-of-report awk及正則表達式 ^ . [] | () * ? 註: 和?只適用於awk Awk條件操作符 < <= == != >= ~ 匹配正則表達式 !~ Awk內置變數 ARGC 命令行參數個數 ARGV 命令行參數排列 ENVIRON 支持隊列中系統環境變數的使用 FELENAME awk瀏覽的文件名 FNR 瀏覽文件的記錄數 FS 設置輸入域分隔符,等價於命令行-F選項 NF 瀏覽記錄的域個數 NR 己讀的記錄數 OFS 輸出域分隔符 ORS 輸出記錄分隔符 RS 控制記錄分隔符 awk 『{print NF,NR,$0}END{print FILENAME}』 grade.txt awk操作符 = = *= / = %= ^ = 賦值操作符 ? 條件表達操作符 || && ! 並,與,非 ~ !~ 匹配操作符,匹配和不匹配 < <= == != >> 關係操作符 - * / % ^ 算術操作符 -- 前綴和後綴 內置的字元串函數 gsub(r,s) $0中用s替代r gsub(r,s,t) t

中用s替代r index(s,t) 返回s中字元串t的第一位 length(s) 返回s長度 match(s,r) 測試s是否包含匹配r的字元串 split(s,a,fs) 在f上將s分成序列a sprint(fmt,exp) 返回經fmt格式化后的exp sub(r.s) 用$0中最左邊最長的子串代替s substr(s,p) 返回字元串s中從p開始的後綴部分 substr(s,p,n) 返回字元串s中從p開始的長度為n的後綴部分 awk中使用的屏蔽序列 b 退格鍵 f 走紙換頁 n 換行 r 回車鍵 t tab鍵 ddd 八進位值 c 任意其它特殊字元 awk printf修飾符 - 左對齊 Width    域的步長,用0表示0步長 -prec     最大字元串長度,或小數點左邊的位數

awk printf格式 %c ASCII字元 %d     整數 %e     浮點數,科學記數法 %f     浮點數,例如(123.44) %g awk決定使用哪種浮點數轉換e或者f %o    八進位數 %s    字元串

%x    十六進位數 awk數組 第十部分sed用法介紹 Sed是一個非交互性的文本流編輯器. Sed在文件中定位文本的方式 x x為一行號,如1 x,y 表示行號範圍從x到y如2,5表示從第2到第5行 /pattern/ 查詢包含模式的行 /pattern/pattern/ 查詢包含兩個模式的行 pattern/,x 在給定的行號上查詢包含模式的行 x,/pattern/ 通過行號和模式查詢匹配行 x,y! 查詢不包含指定行號x和y的行 sed的編輯命令 p 列印匹配行 = 顯示文件行號 a 在定位行號后附加新文件信息 i 在定位行號后插入新的文本信息 d 刪除定位行 c 用新文本替換定位文本 s 使用替換模式替換相應模式 r 從另一個文件中讀文本 w 寫文本到一個文件 q 第一個模式匹配完成後退出或立即退出 l 顯示與八進位ASCII代碼等價的控制字元 {} 在定位行招待的命令組 n 從另一個文件中讀文本下一行,並附加在下一行 g 將模式2粘貼到/pattern n/ y 傳送字元 n 延續到下一輸入行:允許跨行的模式匹配語句 sed 『2p』 quote.txt 列印第二行 sed –n 『2p』 quote.txt 列印匹配行 sed –n 『1,3p』 quote.txt sed –n 『/Neave/』p quote.txt

列印匹配Neave的行 sed –n 『4,/The/p』 quote.txt 列印第4 行中有The的行 sed –e 『/music/=』 quote.txt 列印music所在的行號 sed 『s/night/NIGHT/』 quote.txt 將第一個night換成NIGHT sed 『s/$//』 quote.txt 刪除第一個$ sed 『s/The/Wow!/g』 quote.txt 將文件中所有The換成Wow! sed –n 『s/played/from Hockering &/p』 quote.txt 將played 換成字元串from Hockering sed –n 『s/played/」Hello」 &/p』 quote.txt 將played 換成字元串」Hello」 sed常用命令集[]表空格 [ ]表示tab 『s/.$/g/』 刪除以.結尾的行 『-e /abc/d』 刪除包含abc的行 『s/[][][]/[ ]/』 刪除一個以上的空格以一個空格代替 『s/^[][]*//g』 刪除行首空格 『s/.[][]*/[]/g』 刪除句點后兩個或更多空格,以一個空格代替 『/^$/d』 刪除空行 『s/^.//g』 刪除第一個字元 『s/COL(…)//g』 刪除緊跟COL后的三個字元 『s/^///g』 從路徑中刪除第一個 『s/[]/[ ]/g』 刪除所有空格用tab代替 『s/^[ ]//g』 刪除行首所有tab鍵 『s/[ ]*//g』 刪除所有tab鍵 第十一部分合併與分割 實用的分類sort操作

簡要介紹Sort的參數 -c   測試文件是否己分類 -m   合併兩個分類文件 -u   刪除所有複製行 -o   存儲sort結果的輸出文件名 -b   使用域進行分類時,忽略第一個空格 -n   指定分類是域上的數字分類 -t

   域分隔符;用非空格或tab鍵分融域
-r   對分類次序或比較求逆 n   n為域號,使用此域號開始分類 n n為域號,在分類比較時忽略此域,一般與+n一起使用 Post1 傳遞到m,n.m為域號,n為開始分類字元數;例如4,6意即以第5域分類,從第7個字元開始. Sort

默認為空格或多個空格為分隔符,要加入其它方式分隔,使用-t選項.
Field 0 Field 1 Field 2 Field 3 Star Wars HK 301 4102 A Few Good Men KL 445 5851 head -20 file_name 20 tail -7  file_name 未尾7行 tail -f file_name  實時更新file文件(常用查看日誌)

uniq -u 只顯示不重複行 -d  只顯示有重複數據行,每種重複行只顯示其中一行 -c  列印每一重複行出現資料 -f  n為數字,前n個域被忽略 一些系統不識別-f 選項,這時替代使用-n

join join |options| input-file1 input-file2 an n為文件號,m為域號.如-a1顯示第一個文件的不匹配行 -a2從第二個文件中顯示不匹配行 o n,m n 為文件號,m為域號. 每個n, m必須用逗號分隔如1,3表示文件1第三個域 j n m n為文件號, m為域號.使用其他域做連接域.

t 域分隔符.用來設置非空格或tab鍵的域分隔符.如-t:指定冒號為分隔符. cut:從標準輸入或文本文件中前切列或域.格式為cut [options] file1 file2 -c list 指定剪切字元數 -c1,5-7 剪切第一個,然後是57個字元 -c1-50剪切前50個字元 -f field 指定剪綵切域數 格式與-c相同 -f 1,5 剪切第一和第五域

-d 指定與空格和tab不同的域分隔符 paste:將按行將不同文件進行信息放在一行,默認以空格或tab為分隔符除非用-d選項指定. paste -d -s -file1 file2 -d 指定不同的域分隔符如-d@ -s 將每個文件合併成行而不是按行粘貼

- 使用標準輸入 如ls -l | paste
split:將大文件分割成小文件 split -output_file-size input-filename output-filename 最多1000 $split bigone.txt (2800) xaa 1000 xab 1000

xac 800 第十二部分tr 用法(所有功能都可以用sed來完成,好好學學sed吧!) 第十三部分登錄環境 /etc/profile ~/.profile ./logout 第十四部分環境和shell變數 變數:可以保存路徑,文件名,或數字 本地變數只對當前用戶起作用的變數. 顯示變數#echo $variable-name 清除變數或環境變數

#unset variable-name 設置只讀變數 variable-name=value readonly variable-name 查看只讀變數 readonly 環境變數:一般所有環境變數均為大寫,環境變數應用於用戶進程前必須用export命令導出設置方法與本地變數方法相同. 位置變數(只讀的) $0 $1 $2 $3 $4 $5

$6 $7 $8 $9 文件名 did you see the full moon shell特定變數 $# 傳遞到腳本的參數個數 $* 以一個單字元串顯示所有向腳本傳遞的參數,止選項參數可超過9個 $$ 腳本運行的當前進程ID號 $! 後台運行的最后一個進程的進程ID號 $@ 與$#相同,但是使用時加引號,並在引號中返回每個參數 $- 顯示shell使用的當前選項,與set命令功能相同 $? 顯示最后命令的退出狀態,0表示沒有錯誤,其它任何值表示有錯誤 第十五部分引號 「」 引用字元串 『』 去掉所有特殊字元特殊含義 ``

告訴腳本,這裡一段shell命令 屏蔽特殊字元 第十六部分shell腳本介紹 chmod u x xxx ./xxx 第十七部分條件測試 對文件,字元串和數字使用test命令 對數字和字元串使用expr命令 文件狀態測試表 -d 目錄 -f 正規文件 -L 符號鏈接 -r 可讀 -s 文件長度大於0 ,非空 -w 可寫 -u 文件有suid位設置 -x 可執行 [ -w scores.txt ] 邏輯操作符 -a -o ! 邏輯與 邏輯或 邏輯非 測試數值 -eq 數值相等 -ne 數值不相等 -gt 第一個數大於第二個數 -lt 第一個數小於第二個數 -le 第一個數小於等於第二個數 -ge 第一個數大於等於第二個數 Expr $expr 10 10 20 $expr 30 / 3 10 $LOOP=0 $LOOP=』expr $LOOP 1』 第十八部分控制流結構 退出狀態 echo $? 流控制 if the else case 循環 for循環 Until循環 while循環 if 條件1 then 命令1 elif 條件2 then 命令2 else 命令3 fi 註:if語句命令部分不能為空,

如果沒事可做那麼必須加上":"
case 值 in 模式1) 命令1 …… ;; 模式2) 命令2 ……. ;; 模式3) 命令3 ….. ;; . . . *) 預設命令 ….. ;; Esac For循環,依次執行命令 for 變數名in列表 do 命令1 命令2 命令3 命令N done until循環,直到條件為真時停止 until 條件 命令1 命令2 命令n done while循環直到條件為假進停止 while 命令 do 命令1 命令2 命令n done 使用breakcontinue控制循環 break:此命令允許跳出循環,如在兩層循環內,用break2剛好跳出整個循環.

continue:此命令類似bread命令,只是它不會跳出循環,只是跳過這個循環步. 菜單:可用於大量的屏幕輸出,很方便的哦 cat << WORD Any input WORD 註:這個any input 可以輸入好多排版漂亮的選項,而不用不停的

"echo"第二個WORD前面不要有任何空格.如下
cat <<MAYDAY ----------------------------------------------------------------------------------- user:$USER Host:$THIS_HOST Date:$MYDATE ----------------------------------------------------------------------------------- 1: list file in current directory 2: Use the vi editor 3: See who is on the system

H: Help screen Q: exit Menu ----------------------------------------------------------------------------------- MAYDAY 第十九部分函數 最大作用就是可以反覆調用, 可以節省大量重複勞動 函數名() { 命令1 命令2 } 第二十部分向腳本傳遞參數???? 第二十一部分創建屏幕輸出????(目前還真用不上) Tupt 可以增強應用外觀及腳本的控制.也可以對腳本增加顏色.可以控制游標,可以看起來更專業. 第二十二部分創建屏幕輸入????(目前還真用不上) 第二十三部分調式腳本 set –n 讀命令但並不執行 set –v 顯示讀取的所有行 set –x 顯示所有的命令及參數

第二十四部分shell嵌入命令(常用的命令聽說是比系統里相同的命令要快,有用么?) 第二十五部分深入討論<< command <<word text Word 可以用來發郵件,連FTP,連接資料庫.連接某些應用程序,也可以靈活的使用<<來運行以前編寫的腳本,功能很強大. 第二十六部分shell工具 創建日誌文件, 時間顯示格式 $ date %d%m%y 090699 $ date %d-%m-%y 09-06-99 $ date %R 10:07 $date %A" "%R" "%p Wednesday 10:09 AM $ date %T 10:29:41 $ date %A" "%T Wednesday 10:31:19
創建臨時性文件??? 信號 信號名 含義 1 SIGHUP 掛起或父進程被殺死
2 SIGINT 來自鍵盤的中斷信號,一般是CTRL-C
3 SIGQUIT 從鍵盤退出
9 SIGKILL 無條件終止
11 SIGSEGV 段(內存)衝突
15 SIGTERM 軟體終止(預設殺進程信號) 檢測信號:只需關心信號1、2、3和15當捕捉到一個信號后可能會有下面三種操作
1、不採取任何行動,由系統處理
2、捕獲該信號,但忽略它
3、捕獲信號,並採取相應行動 要採取另兩種方法,必須使用trap命令,命令形式為:trap name signal(s)常見的包括 1、清除臨時文件


2、忽略此信號
3、詢問用戶是否終止此腳本的運行
下表是常見的trap命令的用法
trap""2 3 忽略信號2和信號3,用戶不能終此此腳本
trap"commands"2 3 如果捕捉到信號2或3,就執行相應的commands命令
trap 2 3 複位信號2和3,用戶可以終止此腳本 Logger:可以像/var/adm或/var/log中加入日誌信息.從而在腳本出問題的時候可以看系統日誌.此命令的一般格式為logger -p -I message -p:為優先順序,這裡只涉及到提示用戶注意的優先順序,也是預設值.
-i:在每個消息中記錄發送消息的進程號. 第二十七部分幾個腳本的例子 第二十八部分運行級別腳本 rc.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d /etc/inittab 運行級別 0 停止 1 單用戶模式 2 多用戶模式 3 正常模式 4 用戶自定義模式 5 X 6 重啟 S 啟動 K 殺死 第二十九部分cgi腳本??? http://www.resurl.com/

本文出自 「我的圈圈」 博客,請務必保留此出處http://17610376.blog.51cto.com/366886/441716


[火星人 ] LINUX與UNIX SHELL編程指南筆記已經有682次圍觀

http://coctec.com/docs/linux/show-post-49802.html