一、文件安全與權(quán)限
1龟糕、文件有讀r 寫(xiě)w 可執(zhí)行x 三個(gè)權(quán)限 對(duì)應(yīng)數(shù)字 4 2 1
使用ls -l 出來(lái)的最前面的就是文件的權(quán)限位
-rwxr-x-r-- 最前面-表示普通文件,剩下的三位三位讀,分別表示文件的權(quán)限拆檬,文件所在組用戶的權(quán)限赏迟,其他用戶權(quán)限
drwxr-xr-- 最前面d表示目錄屡贺。
2、改變權(quán)限锌杀,chmod [who] operator [permission] filename
who 指的是 哪個(gè)用戶甩栈,u :指的是當(dāng)前文件屬主,g :同組用戶 糕再,o :其他組用戶 a : 所有用戶
operator 指的是 + 增加權(quán)限; - 取消權(quán)限 ; = 設(shè)定權(quán)限
permission 指的是賦予什么樣的權(quán)限量没,有 r? w? x? ,此外還有s : 文件屬主和組set-ID ;t 粘性位* ; l : 給文件加鎖突想,使其他用戶無(wú)法訪問(wèn);
如果本來(lái)是 r--r--r-- 想加可執(zhí)行權(quán)限殴蹄,則可以 chmod u + x? file 或者chmod 544 file
3究抓、umask值 :用戶設(shè)定創(chuàng)建文件或者文件夾時(shí)候的初始權(quán)限; 對(duì)于文件來(lái)說(shuō),系統(tǒng)不允許在創(chuàng)建文件時(shí)候就有可執(zhí)行權(quán)限饶套,所以一個(gè)文件的權(quán)限是666(6=4+2+0)
而文件夾是777(7=4+2+1); 如果umask值為022漩蟆,那么創(chuàng)建的新的文件 權(quán)限應(yīng)該是644; 文件夾的權(quán)限則是755 (記住:umask是從文件中拿走位的妓蛮,比如022就是拿走 0怠李,拿走2 ,拿走2 )
4蛤克、符號(hào)鏈接 ln [-s] source_path? target_path (路徑可以是目錄也可以是文件) 捺癞,多個(gè)文件可以指向一個(gè)源文件,想改變只要改一個(gè)源文件构挤,而不必每個(gè)客戶端用戶文件都改動(dòng)一遍
二髓介、find和xagrs
1、find命令
find pathname -options [-print -exec -ok] pathname表示所要查找的目錄 .表示當(dāng)前目錄筋现。/表示系統(tǒng)根目錄
-print 命令將結(jié)果打印出來(lái) 唐础。 -exec 和 -ok都是用來(lái)對(duì)匹配的文件執(zhí)行該參數(shù)所給出的shell命令 (-ok每次要確認(rèn),更加安全),相應(yīng)的命令形式為:'command' {} \
例: find . -type f -exec ls -al {} \;
2矾飞、-options 就是要操作的動(dòng)作? 例:find . -name "[A-Z]*" -print? ? 在當(dāng)前目錄下找到? 名字為A到Z開(kāi)頭的 所有文件(-name是按照文件名查找)
3一膨、-perm 按照文件權(quán)限找 find . -perm -755 -print
4、忽略某個(gè)目錄 比如在/apps下找文件 但是忽略/apps/bin下面的內(nèi)容 find /apps -name "/apps/bin" -prune -o -print
5洒沦、查找比某個(gè)文件新或舊的文件 find . -newer newfile ! -newer oldfile
查找比某個(gè)文件新的? find . -newer file -print (延伸:查找兩個(gè)小時(shí)前到現(xiàn)在的文件豹绪,新建一個(gè)文件file1? 9月6號(hào)14點(diǎn)(touch -t09061400 file1),時(shí)間改成兩小時(shí)前申眼,用此命令查即可)
6瞒津、使用xargs命令 :使用-exec命令每處理一個(gè)匹配到的文件都會(huì)啟一個(gè)相應(yīng)的進(jìn)程,而使用xargs 則只啟動(dòng)一個(gè)進(jìn)程
find . -type f -print |xargs file
三括尸、crontab
1巷蚪、可以通過(guò)cron.deny 和cron.allow 來(lái)禁止和允許用戶擁有自己的crontab
命令格式:分<>時(shí)<>日<>月<>星期<>要運(yùn)行的命令
第一列分:1-59 第二列小時(shí):1-23 (0為子夜) 第三列日:1-31 第四列月:1-12 第五列星期:0-6 (0表示周日) 第六列:要運(yùn)行的命令
例:30 21 * * * /apps/bin/cleanup.sh 表示每天晚上21.30 執(zhí)行cleanup.sh腳本
0 23 * * 6,0 /apps/bin/cleanup.sh 表示每周六周日的23點(diǎn) 執(zhí)行cleanup.sh腳本
0 23 1-4 * * /apps/bin/cleanup.sh 表示每個(gè)月的1-4號(hào)的23點(diǎn) 執(zhí)行cleanup.sh腳本
crontab 每隔5分鐘同步時(shí)間到服務(wù)器211.138.22.34 */5
*/5 * * * *? /usr/sbin/ntpdate 211.138.22.34 >> /data/ntpdate.log
crontab -e 編輯 -l 列出內(nèi)容不編輯 -u 用戶名 -r 刪除 如果用當(dāng)前用戶登錄crontab 則不需要-u命令
crontab -l -u alddms (顯示alddms 用戶下的ctontab 內(nèi)容)
四、文件名置換(用戶查找匹配文件名)
1濒翻、* 用于匹配文件名中任意字符串屁柏,包括空。
ls app* 列出app開(kāi)頭的所有文件 ls *.txt 列出以.txt為后綴的所有文件
2肴焊、? 用于匹配文件名中任何單個(gè)字符串
ls a?p* 列出ap中間有任意一個(gè)字符前联,p后面為任意字符的所有文件 如axpxx
3、[...] 用于匹配[]中包含的任意字符
ls log.[0-9] 列出以log.開(kāi)頭娶眷,后面是一個(gè)數(shù)字的 所有文件? 如 log.3
4似嗤、[!...]用于匹配[]中!后的任意字符
ls log.[!0-9]* 列出以log.開(kāi)頭届宠,.后面非數(shù)字開(kāi)頭的所有文件 如log.axxx
五烁落、輸入輸出
1乘粒、echo read cat 管道(|) tee cat test.log |tee -a t1.log 把test.log中內(nèi)容顯示在桌面并且輸入到t1.log中(-a表示追加輸入)
六、命令執(zhí)行順序
1伤塌、命令執(zhí)行控制
&& : 命令1 && 命令2 只有命令1成功后命令2才執(zhí)行
|| : 命令1 || 命令2 只有命令1失敗了才執(zhí)行命令2
2灯萍、命令組合
() : (命令1;命令2;命令3;...) 當(dāng)前命令在同一個(gè)shell中執(zhí)行
{} : {命令1;命令2;命令3;...} 當(dāng)前命令被放到一個(gè)子shell中執(zhí)行
七、正則表達(dá)式(RE)
1每聪、匹配行首和行尾
^ : 匹配行首
$ : 匹配行尾
匹配空行 ^$
匹配一個(gè)字符的 ^.$
* :一個(gè)單字符后緊跟*旦棉,匹配0個(gè)或者多個(gè)此單字符 如 123.txt中有 12345 12358? 123 12223 12456
使用命令 cat 123.txt|grep '1234*' 結(jié)果為12345 12358 123
[] : 匹配[]中字符,可以是單個(gè)字符药薯,也可以是字符序列绑洛,可以使用-表示序列范圍,如[1-5]替代[12345]
匹配任意字母數(shù)字 [a-zA-Z0-9]
[^a-zA-Z] 匹配任意非字母型字符
[^0-9] 匹配任意非數(shù)字型字符
\ : 用來(lái)屏蔽一個(gè)元字符的特殊含義
. : 匹配任意單字符
pattern\{n\} : 用來(lái)匹配前面pattern 出現(xiàn)的次數(shù)n
A\{2\}B 結(jié)果為AAB
pattern\{n,m\} : 用來(lái)匹配前面pattern出現(xiàn)的次數(shù)童本, 次數(shù)在n和m之間
A\{2,4\}B 結(jié)果為AAB,AAAB,AAAAB
pattern\{n,\}m : 用來(lái)匹配前面pattern出現(xiàn)的次數(shù)真屯,次數(shù)最少為n
A\{2,\}B 結(jié)果為AAB,AAAB,AAA...AB,...
2、特殊經(jīng)常用到的匹配
IP地址格式 nnn.nnn.nnn.nnn [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 解釋:[0-9]\{3\} 就是pattern\{n\} 表示由三位數(shù)0-9組成
日期格式 dd-mm-yyyy [0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}
匹配任意字符 [^.*$]
3穷娱、fork炸彈的概念:進(jìn)程遞歸式派生(fork绑蔫,亦即自我復(fù)制),以使系統(tǒng)拒絕服務(wù)甚至崩潰
:(){ :|:& };:
注釋如下:
:() # 定義函數(shù),函數(shù)名為":",即每當(dāng)輸入":"時(shí)就會(huì)自動(dòng)調(diào)用{}內(nèi)代碼
{ # ":"函數(shù)開(kāi)始標(biāo)識(shí)
: # 用遞歸方式調(diào)用":"函數(shù)本身
| # 并用管道(pipe)將其輸出引至...
: # 另一次遞歸調(diào)用的":"函數(shù)
# 綜上,":|:"表示的即是每次調(diào)用函數(shù)":"的時(shí)候就會(huì)生成兩份拷貝
& # 調(diào)用間脫鉤,以使最初的":"函數(shù)被殺死后為其所調(diào)用的兩個(gè)":"函數(shù)還能繼續(xù)執(zhí)行
} # ":"函數(shù)結(jié)束標(biāo)識(shí)
; # ":"函數(shù)定義結(jié)束后將要進(jìn)行的操作...
: # 調(diào)用":"函數(shù),"引爆"fork炸彈
其中函數(shù)名“:”只是簡(jiǎn)化的一例泵额,實(shí)際實(shí)現(xiàn)時(shí)可以隨意設(shè)定配深,一個(gè)較易理解(將函數(shù)名替換為“forkbomb”)的版本如下:
forkbomb(){ forkbomb|forkbomb &} ; forkbomb
八、grep和正則表達(dá)式
1梯刚、grep 用法: grep [選項(xiàng)] 基本正則表達(dá)式[文件]
-c 只輸出匹配行的計(jì)數(shù)
-i 不區(qū)分大小寫(xiě)
-h 查詢多文件時(shí)不顯示文件名
-l 查詢多文件時(shí)只輸出包含匹配字符的文件名
-n 顯示匹配行及行號(hào)
-s 不顯示不存在或無(wú)匹配的錯(cuò)誤信息
-v 顯示不包含匹配文本的所有行
2凉馆、 查詢多個(gè)文件
如果在所有的doc文件中查詢sort薪寓,則應(yīng)該這么寫(xiě):grep "sort" *.doc
匹配行:在test.txt中查詢包含48的有多少行
grep -c "48" test.txt 該結(jié)果只顯示多少行
顯示查詢的結(jié)果: grep -c "48" test.txt
顯示滿足所有匹配結(jié)果的行號(hào)及內(nèi)容
grep -n "48" test.txt ? 顯示樣式 23:48xx .....
顯示非匹配行 grep -v "48"? test.txt
精確匹配 grep "48\v"? test.txt
行首不是48 grep '^[^48]' test.txt
第九章亡资、AWK
1、三種方式調(diào)用awk 第一:awk [-F 域分隔符] 'command' inputfile 這里的command是真正的awk命令向叉,[]里是可選的锥腻,不填默認(rèn)是空格分隔
例如以:分隔 awk -F: 'command' inputfile
第二:將所有awk命令寫(xiě)到一個(gè)文件中,并使awk命令可行母谎,然后用awk命令解釋器作為腳本的首行瘦黑,通過(guò)鍵入腳本名來(lái)執(zhí)行
第三:將所有awk命令插入一個(gè)文件,然后調(diào)用: awk -f awk-script-file inputfile
2奇唤、域和記錄:瀏覽域標(biāo)記為$1,$2,$3,$4,$5 這種發(fā)發(fā)稱為域標(biāo)識(shí) $0表示全部域 awk '{print $0}' test.txt |tee log.txt
awk '{print $1,$4}' test.txt
awk 'BEGIN {print "Begin \n"} {print $1} END {"end!"}'
3幸斥、NF 打印最后一列 ll | awk '{print $NF}' 打印第一列 ll | awk '{print $1}'
不打印最后一列 ll | awk 'NF--'? ? 不打印第一列? ll |awk '{$1="";print $0}'
4、NR 用于快速查域記錄個(gè)數(shù) awk '{if (NR >0 && $4~/Brown/) print $0}' grade.txt 如果域記錄大于0咬扇,且第四列匹配Brown,就打印那一行的信息
5甲葬、利用awk打印第一行: ll | awk 'NR==1' 打印最后一行:ll | awk 'END{print}' 不打印第一行和最后一行 awk 'NR>2{print p}{p=$0}' test.txt
6、
第十章懈贺、SED
1经窖、打印第N行 sed -n '2p' test.txt 打印test.txt中的第二行 最后一行 sed -n '$p' test.txt
2坡垫、打印3-5行 sed -n '3,5p' test.txt
3、匹配god這個(gè)詞并打印該行 sed -n '/god/'p test.txt
4画侣、在第四行匹配god冰悠,有該詞就打印 sed -n '4,/god/'p test.txt
5、匹配元字符$ sed -n '/\$/'p test.txt
6配乱、打印1到最后一行 sed -n '1,$p' test.txt
7溉卓、將abc替換成def sed? 's/abc/def/g' test.txt 替換并修改test.txt文本 則 sed -i 's/abc/def/g' test.txt
8、刪除最后一行搬泥、刪除1-3行 sed '$d' test.txt sed '1,3d' test.txt
windows上寫(xiě)的腳本到shell上面會(huì)有莫名其妙的問(wèn)題的诵,按照如下操作
? vi xxxx.sh?
? ? 輸入:
set ff? ? 可以查看文件是dos還是unix 如果是dos 就執(zhí)行下面的
:set ff=unix(或者:set fileformat=unix)?
? ? :wq?
或者dos2unix file -- 不一定都有dos2unix 命令