A. 甯哥敤鐨凩inux shell鍛戒護璇﹁В鏀墮泦鏁寸悊
1 鏂囦歡涓庣洰褰曟搷浣滃懡浠
1.1鏂囦歡鍐呭規煡璇㈠懡浠 grep銆乫grep銆乪grep
璇娉曪細grep[閫夐」][鏌ユ壘妯″紡][鏂囦歡鍚1錛屾枃浠跺悕2,鈥︹]
閫夐」錛
-E 姣忎釜妯″紡浣滀負涓涓鎵╁睍鐨勬e垯琛ㄨ揪寮忓瑰緟
-F 姣忎釜妯″紡浣滀負涓緇勫滻瀹氬瓧絎︿覆瀵瑰緟錛岃屼笉浣滀負姝e垯琛ㄨ揪寮
-i 姣旇緝鏃朵笉鍖哄垎澶у皬鍐
-l 鏄劇ず棣栨″尮閰嶅尮閰嶄覆鎵鍦ㄧ殑鏂囦歡鍚嶅苟鐢ㄦ崲琛岀﹀皢鍏跺垎寮銆傚綋鍦ㄦ枃浠朵腑澶氭″嚭鐜板尮閰嶄覆鏃訛紝涓嶉噸澶嶆樉紺烘℃枃浠跺悕錛
-x 鍙鏄劇ず鏁磋屼弗鏍煎尮閰嶇殑琛
1.2鏂囦歡鏌ユ壘鍛戒護 find銆乴ocate
璇娉曪細
find 璧峰嬬洰褰 瀵繪壘鏉′歡 鎿嶄綔浠ュ悕縐板拰鏂囦歡灞炴ф煡鎵
閫夐」: -name鈥樺瓧涓測 鏌ユ壘鏂囦歡鍚嶅尮閰嶆墍緇欏瓧涓茬殑鎵鏈夋枃浠訛紝瀛椾覆鍐呭彲鐢ㄩ氶厤絎*銆侊紵銆乕]銆
-lname鈥樺瓧涓測 鏌ユ壘鏂囦歡鍚嶅尮閰嶆墍緇欏瓧涓茬殑鎵鏈夌﹀彿閾炬帴鏂囦歡錛屽瓧涓插唴鍙鐢ㄩ氶厤絎*銆侊紵銆乕]銆
-gid n 鏌ユ壘灞炰簬ID鍙蜂負n鐨勭敤鎴風粍鐨勬墍鏈夋枃浠躲
-uid n 鏌ユ壘灞炰簬ID鍙蜂負n鐨勭敤鎴風殑鎵鏈夋枃浠躲
-group鈥樺瓧涓測 鏌ユ壘灞炰簬鐢ㄦ埛緇勫悕涓烘墍緇欏瓧涓茬殑鎵鏈夌殑鏂囦歡銆
-user鈥樺瓧涓測 鏌ユ壘灞炰簬鐢ㄦ埛鍚嶄負鎵緇欏瓧涓茬殑鎵鏈夌殑鏂囦歡銆
-path鈥樺瓧涓測 鏌ユ壘璺寰勫悕鍖歸厤鎵緇欏瓧涓茬殑鎵鏈夋枃浠訛紝瀛椾覆鍐呭彲鐢ㄩ氶厤絎*銆侊紵銆乕]銆
-perm 鏉冮檺 鏌ユ壘鍏鋒湁鎸囧畾鏉冮檺鐨勬枃浠跺拰鐩褰曪紝鏉冮檺鐨勮〃紺哄彲浠ュ711銆644銆
-type x 鏌ユ壘綾誨瀷涓 x鐨勬枃浠訛紝
璇娉曪細locate 鐩稿叧瀛
1.3鏂囦歡鐨勫嶅埗銆佸垹闄ゅ拰縐誨姩鍛戒護 鏂囦歡澶嶅埗鍛戒護
[閫夐」] 婧愭枃浠舵垨鐩褰 鐩鏍囨枃浠舵垨鐩褰
閫夐」錛
- a 閫氬父鍦ㄦ嫹璐濈洰褰曟椂浣跨敤
-d 鎷瘋礉鏃朵繚鐣欒繛鎺
-f 鍒犻櫎宸茬粡瀛樺湪鐨勭洰鏍囨枃浠惰屼笉鎻愮ず
-i 鍜宖閫夐」鐩稿弽
-p 姝ゆ椂cp闄ゅ嶅埗婧愭枃浠跺唴瀹瑰栵紝榪樺皢鍏朵慨鏀圭殑鏃墮棿鍜岃塊棶鏉冮檺涔熷嶅埗鍒版柊鏂囦歡涓
-r 鑻ョ粰鍑虹殑婧愭枃浠舵槸涓鐩褰曟枃浠訛紝姝ゆ椂cp灝嗛掑綊澶嶅埗璇ョ洰褰曚笅鐨勬墍鏈夌殑瀛愮洰褰曞拰鏂囦歡錛屾ゆ椂鐩鏍囨枃浠跺繀欏諱負涓涓鐩褰曞悕錛
-l 涓嶄綔鎷瘋礉錛屽彧鏄閾炬帴鏂囦歡鏂囦歡縐誨姩鍛戒護
mv[閫夐」] 婧愭枃浠舵垨鐩褰 鐩鏍囨枃浠舵垨鐩褰
-i 浜や簰寮忔搷浣
-f 紱佹浜や簰寮忔搷浣滄枃浠跺垹闄ゅ懡浠
[閫夐」] 鏂囦歡鈥
-f 蹇界暐涓嶅瓨鍦ㄧ殑鏂囦歡錛屼粠涓嶇粰鍑烘彁紺
-r 鎸囩ずrm灝嗗弬鏁頒腑鍒楀嚭鐨勫叏閮ㄧ洰褰曞拰瀛愮洰褰曞潎閫掑綊鍦板垹闄
-i 榪涜屼氦浜掑紡鍒犻櫎 1.4鏂囦歡閾炬帴鍛戒護
ln [閫夐」] 鐩鏍 [閾炬帴鍚峕 鎴 ln [閫夐」] 鐩鏍 鐩褰
閫夐」錛
- s 寤虹珛絎﹀彿閾炬帴
1.5鐩褰曠殑鍒涘緩鍜屽垹闄ゅ懡浠 mkdir 鍒涘緩涓涓鐩褰
璇娉曪細 [閫夐」] dirname
閫夐」錛 - m 瀵規柊寤虹洰褰曡劇疆瀛樺彇鏉冮檺
-p 鍙浠ユ槸涓涓璺寰勫悕縐般傛ゆ椂鑻ヨ礬寰勪腑鐨勬煇浜涚洰褰曞皻涓嶅瓨鍦錛屽姞涓婃ら夐」鍚庯紝緋葷粺灝嗚嚜鍔ㄥ緩絝嬪ソ閭d簺灝氫笉瀛樺湪鐨勭洰褰曪紝鍗充竴嬈″彲浠ュ緩絝嬪氫釜鐩褰曘
rmdir 鍒犻櫎絀虹洰褰
璇娉曪細 rmdir [閫夐」] dirname
閫夐」錛
- p 閫掑綊鍒犻櫎鐩褰昫irname,褰撳瓙鐩褰曞垹闄ゅ悗鍏剁埗鐩褰曚負絀烘椂錛屼篃涓鍚岃鍒犻櫎銆
1.6鏀瑰彉宸ヤ綔鐩褰曪紝鏄劇ず鐩褰曞唴瀹瑰懡浠
1銆佹敼鍙樺伐浣滅洰褰曪細 cd [directory]
2銆佹樉紺哄綋鍓嶅伐浣滅殑鐩褰曠殑緇濆硅礬寰勶細 pwd
3銆佹樉紺虹洰褰曞唴瀹癸細 ls [閫夐」] [鐩褰曟垨鏄鏂囦歡]
閫夐」錛
- a 鏄劇ず鎸囧畾鐩褰曚笅鎵鏈夊瓙鐩褰曚笌鏂囦歡錛屽寘鎷闅愯棌鏂囦歡錛
-c 鎸夌収鏂囦歡鐨勪慨鏀規椂闂存帓搴
-C 鍒嗘垚澶氬垪鏄劇ず鍚勯」
-d 濡傛灉鍙傛暟鏄鐩褰曪紝鍙鏄劇ず鍏跺悕縐拌屼笉鏄劇ず鍏朵笅鐨勪釜鏂囦歡
-F 鍦ㄧ洰褰曞悕鍚庨潰鏍囪扳/鈥濓紝鍙鎵ц屾枃浠跺悗闈㈡爣璁扳*鈥濓紝絎﹀彿閾炬帴鍚庨潰鏍囪扳淍鈥濓紝綆¢亾錛堟垨FIFO錛夊悗闈㈡爣璁扳渱鈥濓紝socket鏂囦歡鍚庨潰鏍囪扳=鈥濄
-l 浠ラ暱鏍煎紡鏉ユ樉紺烘枃浠剁殑璇︾粏淇℃伅
-L 鑻ユ寚瀹氱殑鍚嶇О涓轟竴涓絎﹀彿閾炬帴錛屽垯鏄劇ず閾炬帴鎵鎸囧悜鐨勬枃浠
-t 鏄劇ず鏃舵寜淇鏀規椂闂磋屼笉鏄鍚嶅瓧鎺掑簭
-u 鏄劇ず鏃舵寜鏂囦歡涓婃″瓨鍙栫殑鏃墮棿鑰屼笉鏄鍚嶅瓧鎺掑簭
4銆佹敼鍙樻枃浠舵垨鐩褰曠殑璁塊棶鏉冮檺鍛戒護chmod [who] [+| - | = ] [mode] 鏂囦歡鍚嶏紵
Who閫夐」錛
- u琛ㄧず鐢ㄦ埛錛屽嵆鏂囦歡鍜岀洰褰曠殑鎵鏈夎
-g琛ㄧず鍚岀粍鐢ㄦ埛
-o錛坥ther錛夎〃紺哄叾浠栫敤鎴
-a 錛坅ll錛夎〃紺烘墍鏈夌敤鎴
鎿嶄綔絎﹀彿錛 + 娣誨姞鏌愪釜鏉冮檺 - 鍙栨秷鏌愪釜鏉冮檺 = 璧嬩簣緇欏畾鏉冮檺騫跺彇娑堝叾浠栨墍鏈夌殑鏉冮檺錛堝傛灉鏈夌殑璇濓級
mode 閫夐」錛
- r 鍙璇
-w 鍙鍐
-x 鍙鎵ц chgrp [-R] group filename? 鏀瑰彉鐩褰曟垨鏂囦歡鎵灞炵殑緇
chown [-Rv] 鐢ㄦ埛鎴栫粍 鏂囦歡
1.7澶囦喚涓庡帇緙╁懡浠
1銆乼ar鍛戒護 涓烘枃浠跺拰鐩褰曞壋寤烘。妗堣娉曪細
tar [涓婚夐」+杈呭姪閫夐」] 鏂囦歡鎴栬呯洰褰 : u 涓婚夐」
-c 鍒涘緩鏂扮殑妗f堟枃浠躲傚傛灉鐢ㄦ埛鎯沖囦喚涓涓鐩褰曟垨鏄涓浜涙枃浠訛紝鍒欓夋ら」
-r 鎶婅佸瓨妗g殑鏂囦歡榪藉姞鍒版。妗堟枃浠剁殑鏈灝
-t 鍒楀嚭妗f堟枃浠剁殑鍐呭癸紝鏌ョ湅宸茬粡澶囦喚浜嗗摢浜涙枃浠訛紱
-u 鏇存柊鏂囦歡
-x 浠庢。妗堟枃浠朵腑閲婃斁鏂囦歡錛
-u 杈呭姪閫夐」
-b 璇ラ夐」涓虹佸甫鏈鴻懼畾鐨勶紝鍏跺悗璺熶竴浣嶆暟瀛楋紝鐢ㄦ潵璇存槑鍖哄潡鐨勫ぇ灝忥紝緋葷粺棰勮懼間負20
-f 浣跨敤妗f堟枃浠舵垨璁懼囷紝榪欎釜閫夐」閫氬父鏄蹇呴夌殑
-k 淇濆瓨宸茬粡瀛樺湪鐨勬枃浠躲備緥濡傛妸鏌愪釜鏂囦歡榪樺師錛屽湪榪樺師鐨勮繃紼嬩腑錛岄亣鍒扮浉鍚岀殑鏂囦歡錛屼笉浼氳繘琛岃嗙洊錛
-m 鍦ㄨ繕鍘熸枃浠舵椂錛屾妸鎵鏈夋枃浠剁殑淇鏀規椂闂磋懼畾涓虹幇鍦錛
-M 鍒涘緩澶氬嵎鐨勬。妗堟枃浠訛紝浠ヤ究鍦ㄥ嚑涓紓佺洏涓瀛樻斁錛
-v 璇︾粏鎶ュ憡tar澶勭悊鐨勬枃浠朵俊鎮
-w 姣忎竴姝ラ兘瑕佹眰紜璁
-z 鐢╣zip鏉ュ帇緙/瑙e帇緙╂枃浠
2銆乬zip鍛戒護 鍘嬬緝/瑙e帇緙╁懡浠
璇娉曪細gzip [閫夐」] 鍘嬬緝錛堣В鍘嬬緝錛夌殑鏂囦歡鍚
閫夐」錛
-c 灝嗚緭鍑哄啓鍒版爣鍑嗚緭鍑轟笂錛屽苟淇濈暀鍘熸湁鏂囦歡
-d 灝嗗帇緙╂枃浠惰В鍘
-l 鏄劇ず姣忎釜鍘嬬緝鏂囦歡鐨勮︾粏淇℃伅
-r 閫掑綊寮忓湴鏌ユ壘鎸囧畾鐩褰曞苟鍘嬬緝鍏朵腑鐨勬墍鏈夋枃浠舵垨鑰呮槸瑙e帇緙
-t 嫻嬭瘯銆佹鏌ュ帇緙╂枃浠舵槸鍚﹀畬鏁
-v 瀵規瘡涓涓鍘嬬緝鍜岃В鍘嬬殑鏂囦歡錛屾樉紺烘枃浠跺悕鍜屽帇緙╂瘮
3銆乽nzip 鍛戒護 鐢∕S windows涓嬬殑鍘嬬緝杞浠秝inzip鍘嬬緝鐨勬枃浠跺湪linux緋葷粺涓嬪睍寮
璇娉曪細unzip [閫夐」] 鍘嬬緝鏂囦歡鍚.zip
閫夐」錛 -x 鏂囦歡鍒楄〃 瑙e帇緙╂枃浠訛紝浣嗕笉鍖呮嫭鎸囧畾鐨刦ile鏂囦歡
-v 鏌ョ湅鍘嬬緝鏂囦歡鐩褰曪紝浣嗕笉瑙e帇
-t 嫻嬭瘯鏂囦歡鏈夋棤鎹熷潖 錛屼絾涓嶈В鍘
-d 鐩褰 灝嗗帇緙╂枃浠惰В鍒版寚瀹氱洰褰曚笅
-z 鍙鏄劇ず鍘嬬緝鏂囦歡鐨勬敞瑙
-n 涓嶈嗙洊宸茬粡瀛樺湪鐨勬枃浠
-o 瑕嗙洊宸茬粡瀛樺湪鐨勬枃浠朵笖涓嶈佹眰鐢ㄦ埛紜璁
-j 涓嶉噸寤烘枃妗g殑鐩褰曠粨鏋勶紝鎶婃墍鏈夋枃浠惰В鍘嬪埌鍚屼竴鐩褰曚笅
1.8鍦↙INUX鐜澧冧笅榪愯孌OS鍛戒護 linux緋葷粺鎻愪緵浜嗕竴緇勭О涓簃tools鐨勫彲縐繪嶅伐鍏鳳紝鍙浠ヨ╃敤鎴瘋交鏉懼湴浠庢爣鍑嗙殑DOS杞鐩樹笂璇誨啓鏂囦歡鍜岀洰褰曘
mcd 鐩褰曞悕 鏀瑰彉MSDOS鐩褰 m 婧愭枃浠 鐩鏍囨枃浠 鍦∕SDOS鍜孶NIX涔嬮棿澶嶅埗鏂囦歡錛
mdel 鐩褰曞悕 鍒犻櫎MSDOS鐩褰 mdir 鐩褰曞悕 鏄劇ずMSDOS鐩褰 mformat 椹卞姩鍣ㄥ彿 鍦ㄤ綆綰ф牸寮忓寲鐨勮蔣鐩樹笂鍒涘緩MSDOS鏂囦歡緋葷粺 rnlabel 椹卞姩鍣ㄥ彿 浜х敓MSDOS鍗鋒爣 mmd 鐩褰曞悕 鍒犻櫎MSDOS鐩褰 mren 婧愭枃浠 鐩鏍囨枃浠 閲嶆柊鍛藉悕宸插瓨鍦ㄧ殑MSDOS鏂囦歡 mtype 鏂囦歡鍚 鏄劇ずMSDOS鏂囦歡鐨勫唴瀹
2 璁懼囩$悊鍛戒護
1)linux閲囩敤涓嬮潰鐨勫艦寮忓畾涔変竴涓狪DE紜鐩橈細/dev/hd[drive][partition]
2)SCSI紜鐩樹嬌鐢ㄥ悓鏍風殑鏈哄埗琛ㄧず錛 /dev/sd[drive][partition]
3)瀵逛簬涓鑸鐨凩INUX鍒嗗尯錛屽彲浠ョ敤mkfs灝嗗叾鏍煎紡鍖栧苟鐢熸垚鏂囦歡緋葷粺錛屽懡浠ゅ備笅錛 mk2fs 鈥揷;
4)瑁呰澆鏂囦歡緋葷粺錛
mount 鈥搕 ext2 [-o optioms] partition mountpiont 鍏朵腑錛
-t涓烘寚瀹氳呰澆鏂囦歡緋葷粺鐨勭被鍨嬶紱
-o鎸囧畾涓浜涢夐」錛屽傚彧璇籸o錛屽彲璇誨彲鍐檙w絳夌瓑錛 partition瀹氫箟鍒嗗尯鍚嶇О錛 mountpiont瀹氫箟鏂囦歡緋葷粺琚瑁呰澆鐨勭洰褰曞悕縐般
5)瑁呰澆CD-ROM鏂囦歡緋葷粺錛歮ount 鈥搕 iso9660 鈥搑 /dev/cdrom /mnt/cdrom
6)瑁呰澆杞椹辨枃浠剁郴緇燂細 CODE:[Copy to clipboard]mount 鈥搕 msdos 鈥搑w /dev/fd0 /dev/mnt/floppy
7)鍗歌澆鏂囦歡緋葷粺 CODE:[Copy to clipboard]umount /mnt/cdrom 紓佸甫璁懼囩殑瀹夎呰佹敞鎰忎互涓嬪嚑鐐癸細
1銆 棣栧厛瑕侀夋嫨涓涓鍞涓鐨凷CSI ID鍙鳳紝鐒跺悗鍐嶅皢璁懼囬摼鎺ュ埌閫傚綋鐨勪綅緗
2銆 閫夋嫨椹卞姩紼嬪簭銆
3銆 鐢熸垚璁懼囨枃浠躲係CSI紓佸甫璁懼囩殑涓昏佽懼囧彿鏄9錛屾¤佽懼囧彿鏄0銆傝懼囨枃浠跺悕閫氬父鏄/dev/nrst0錛堜笉鏀鎸佸洖緇曠殑紓佸甫璁懼囷級鎴/dev/nst0錛堟敮鎸佸洖緇曠殑紓佸甫璁懼囷級 鐢 ls /dev/*rst* 媯鏌ョ佸甫璁懼囨枃浠舵槸鍚﹀瓨鍦錛屽傛灉涓嶅瓨鍦錛岀敤 mknod 鈥搈 666 /dev/nrst0 c 9 9 mknod 鈥搈 666 /dev/rst0 c 9 0 鐢熸垚
4銆 鍙浠ュ瑰潡闀垮害銆佺紦瀛樸佺佸甫瀵嗗害絳夊弬鏁拌繘琛屼竴浜涜劇疆錛屼緥濡 mt setblk 20 灝嗗潡闀垮害鎸囧畾涓20 mt setblk 0 鎸囧畾鍧楃▼搴︽病鏈夐檺鍒
5銆 閫氳繃媯鏌ョ郴緇熺殑鍚鍔ㄤ俊鎮鍙浠ョ『瀹氱郴緇熸槸鍚﹁瘑鍒浜嗘柊鐨勭佸甫璁懼囥傜敤dmesg鍛戒護錛屾煡鐪嬫槸鍚︽湁浠ヤ笅綾諱技鐨勪俊鎮錛 aha274x:target 4now synchronous at 4.4Mb/s Vendor:TANDBERG Model:TDC 3800 Rev: =05: Type: Sequential-Access ANSI SCSI revision: 02 Detected scsi tape st0 at scsi0, id4, lun0 Scsi : detected 1 SCSI tape 1 SCSI crom 1 SCSI disk total
3 杞浠跺寘綆$悊鍛戒護
3.1杞浠跺畨瑁呯殑姝ラ 鍦↙INUX緋葷粺涓婂畨瑁呰蔣浠剁殑姝ラゆ湁錛
1銆 鏌ユ壘鎵瑕佸畨瑁呰蔣浠剁殑婧愭枃浠
2銆 鎶婃簮鏂囦歡瑙e紑鏀懼埌涓涓鐩褰曚腑錛屽懡浠ゅ備笅錛 tar zxvf 婧愭枃浠跺悕;
3銆 閽堝規湰鎿嶄綔緋葷粺閰嶇疆婧愭枃浠躲傚彲浠ユ槸緙栬緫make鏂囦歡鎴栧叾浠栨枃浠訛紝涔熷彲鑳芥槸榪愯岃ヨ蔣浠惰嚜甯︾殑鑷鍔ㄩ厤緗宸ュ叿錛屽./configure
4銆 make婧愭枃浠訛紝閫氬父鏄榪愯宮ake鍛戒護錛屽嵆鎵ц make
5銆 瀹夎呬簩榪涘埗鏂囦歡鍜屽叾浠栨敮鎾戞枃浠訛紝榪愯屽懡浠わ細 make install
6銆 鏈鍚庯紝瀹屾垚鎵鏈夊叾浠栧繀欏葷殑閰嶇疆
3.2杞浠跺寘綆$悊鍛戒護 QUOTE: rpm 鈥搃vh 杞浠跺寘; // 瀹夎呮寚瀹氱殑杞浠跺寘錛屽苟鍦ㄥ畨瑁呰繃紼嬩腑鐢#琛ㄧず瀹夎呯殑榪涘害 rpm 鈥揢vh 杞浠跺寘; // 鏇存柊涓涓宸茬粡瀛樺湪鐨勬垨榪樻病瀹夎呭ソ鐨勮蔣浠跺寘錛屽苟鍒犻櫎鎵鏈夎ヨ蔣浠跺寘鐨勬棫鐗堟湰銆 rpm 鈥揺 //鍗歌澆涓涓猺pm杞浠跺寘 rpm 鈥搎a // 鏌ョ湅緋葷粺涓宸茬粡瀹夎呯殑杞浠跺寘 rpm 鈥搎 杞浠跺寘; // 鏌ョ湅緋葷粺涓鏌愪釜杞浠跺寘鐨勭増鏈鍙鳳紱 rpm 鈥搎lp 杞浠跺寘; //鍒楀嚭鏌愪釜杞浠跺寘涓鐨勬墍鏈夋枃浠 rpm 鈥搎f 杞浠跺寘; //鎵懼嚭涓涓鏂囦歡灞炰簬鍝涓杞浠跺寘
4 LINUX緋葷粺甯哥敤鍛戒護
4.1 涓庣郴緇熺$悊鏈夊叧鐨勫懡浠 Wall (Write All) 瀵瑰叏閮ㄥ凡 鐧誨綍鐨勭敤鎴峰彂閫佷俊鎮錛岀敤鎴峰彲浠ュ厛鍙嶈佸彂閫佺殑淇℃伅鍐欏ソ瀛樺叆涓涓鏂囦歡涓錛岀劧鍚庤緭鍏ワ細 # wall FileName 渚嬶細Wall 鈥楾hank you !鈥 Write 鍚戞煇涓鐢ㄦ埛鍙戦佷俊鎮銆 Write xxq hello 杈撳叆Ctrl+C緇勫悎鍗沖彲緇堟 Shutdown鍛戒護 Shutdown [閫夐」] [鏃墮棿] [璀﹀憡淇℃伅]
-k 騫朵笉鐪熸e叧鏈猴紝鑰屽彧鏄鍙戝嚭璀﹀憡淇℃伅緇欐墍鏈夌殑鐢ㄦ埛銆
-r 鍏蟲満鍚庣珛鍗抽噸鏂板惎鍔ㄣ
-h 鍏蟲満鍚庝笉閲嶆柊鍚鍔ㄣ
-f 蹇閫熷叧鏈猴紝鍚鍔ㄦ椂璺寵繃fsck銆
-n蹇閫熷叧鏈猴紝涓嶇粡榪噄nit紼嬪簭銆
-c 鍙栨秷涓涓宸茬粡榪愯岀殑shutdown 渚嬶細緋葷粺椹涓婂叧鏈猴細Shutdown 鈥搵 now Free鍛戒護鏌ョ湅褰撳墠緋葷粺鍐呭瓨鐨勪嬌鐢ㄦ儏鍐碉紝 CODE:[Copy to clipboard]Free [-b] [-k] [-m] CODE:[Copy to clipboard]-b 浠ュ瓧鑺備負鍗曚綅鏄劇ず銆
-k 浠K瀛楄妭涓哄崟浣嶆樉紺恆
-m 浠M瀛楄妭涓哄崟浣嶆樉紺恆 Uptime QUOTE: 鏄劇ず緋葷粺宸茬粡榪愯屼簡澶氶暱鐨勬椂闂達細鐜板湪鏃墮棿銆佺郴緇熷凡緇忚繍琛岀殑鏃墮棿銆佺洰鍓嶆湁澶氬皯鐧誨綍鐢ㄦ埛銆佺郴緇熷湪榪囧幓鐨1鍒嗛挓銆5鍒嗛挓鍜15鍒嗛挓鍐呯殑騫沖潎璐熻澆銆
4.2涓庣敤鎴鋒湁鍏崇殑鍛戒護 Passwd鍛戒護璁劇疆銆佹洿鎹㈢敤鎴峰彛浠ゃ
Passwd [鐢ㄦ埛鍚峕 Su 浣誇竴涓鏅閫氱殑鐢ㄦ埛鍏鋒湁瓚呯駭鐢ㄦ埛鐨勬潈鍒╋紝紱誨紑鍙鐢‥XIT鍛戒護銆 4.3鍏跺畠鍛戒護 Echo鍛戒護鍦ㄦ樉紺哄櫒涓婃樉紺轟竴孌墊枃瀛楋紝涓鑸璧峰埌涓涓鎻愮ず鐨勪綔鐢ㄣ
echo [-n] 瀛楃︿覆 Cal鍛戒護鏄劇ず鏌愬勾鏌愭湀鐨勬棩鍘嗐
cal [閫夐」] [鏈圼騫碷]
閫夐」鐨勫惈涔夛細
-j 鏄劇ず涔熺粰瀹氭湀涓鐨勬瘡涓澶╂槸涓騫翠腑鐨勫拰鍑犲ぉ錛堜粠1鏈1鏃ョ畻璧鳳級銆
-y 鏄劇ず涔熸暣騫寸殑鏃ュ巻銆 Date鍛戒護 date鍛戒護鐨勫姛鑳芥槸鏄劇ず鍜岃劇疆緋葷粺鏃ユ湡鍜屾椂闂淬 4.4紓佺洏綆$悊 紓佺洏絀洪棿綆$悊 df鍛戒護媯鏌ユ枃浠剁郴緇熺殑紓佺洏絀洪棿鍗犵敤灞閮ㄣ
Df [閫夐」]
-a 鏄劇ず鎵鏈夋枃浠剁郴緇熺殑紓佺洏浣跨敤鎯呭喌錛屽寘鎷0鍧楋紙block錛夌殑鏂囦歡緋葷粺錛屽/proc鏂囦歡緋葷粺銆
-k 浠K瀛楄妭涓哄崟浣嶆樉紺恆
-i 鏄劇ずi鑺傜偣淇℃伅錛岃屼笉鏄紓佺洏鍧椼
- t 鏄劇ず鍚勬寚瀹氱被鍨嬬殑鏂囦歡緋葷粺鐨勭佺洏絀洪棿浣跨敤鎯呭喌銆
-x 鍒楀嚭涓嶆槸鏌愪竴鎸囧畾綾誨瀷鏂囦歡緋葷粺鐨勭佺洏紿ㄤ嬌鐢ㄦ儏鍐碉紙涓巘鐩稿弽錛夈
-T 鏄劇ず鏂囦歡緋葷粺綾誨瀷銆 鍛戒護 鐨勮嫳鏂囧師鎰忎負disk usage錛屽惈涔変負鏄劇ず紓佺洏絀洪棿鐨勪嬌鐢ㄦ儏鍐點傚姛鑳芥槸緇熻$洰褰曪紙鎴栨枃浠訛級鎵鍗犵佺洏絀洪棿鐨勫ぇ灝忋
[閫夐」] [Names鈥]
-s 瀵規瘡浜篘ames 鍙傛暟鍙緇欎篃鍗犵敤鐨勬暟鎹鍧楁繪暟銆
-a 閫掑綊鍦版樉紺烘寚瀹氱洰褰曚腑鍚勬枃浠剁敤瀛愬瓩鐩褰曚腑鐨勫悇鏂囦歡鍗犵敤鐨勬暟鎹鍧楁繪暟銆
-b 浠ュ瓧鑺備負鍗曚綅鍒椾篃紓佺洏紿ㄤ嬌鐢ㄦ儏閮錛堢己鐪佷互K瀛楄妭涓哄崟浣嶏級
-k 浠1024瀛楄妭涓哄崟浣嶅垪涔熺佺洏絀洪棿浣跨敤鎯呭喌銆
-c 鏈鍚庡啀鍔犱笂涓涓鎬昏★紙緋葷粺緙虹渷錛
-l 璁$畻鎵鏈夌殑鏂囦歡澶у皬錛屽圭‖閾炬帴鏂囦歡錛屽垯璁$畻澶氭°
-x 璺寵繃鍦ㄤ笉鍚屾枃浠剁郴緇熶笂鐨勭洰褰曚笉浜堢粺璁° dd鍛戒護鎶婃寚瀹氱殑杈撳叆鏂囦歡鎷瘋礉鍒版寚瀹氱殑杈撳嚭鏂囦歡涓錛屽苟涓斿湪鎷瘋礉鐨勮繃紼嬩腑鍙浠ヨ繘琛屾牸寮忚漿鎹銆
璇娉曪細 dd 銆旈夐」銆 if =杈撳叆鏂囦歡錛堟垨璁懼囧悕縐幫級銆 of =杈撳嚭鏂囦歡錛堟垨璁懼囧悕縐幫級銆 ibs = bytes 涓嬈¤誨彇bytes瀛楄妭錛屽嵆璇誨叆緙撳啿鍖虹殑瀛楄妭鏁般 skip = blocks 璺寵繃璇誨叆緙撳啿鍖哄紑澶寸殑ibs*blocks鍧椼 obs = bytes 涓嬈″啓鍏bytes瀛楄妭錛屽嵆鍐 鍏ョ紦鍐插尯鐨勫瓧鑺傛暟銆 bs = bytes 鍚屾椂璁劇疆璇/鍐欑紦鍐插尯鐨勫瓧鑺傛暟錛堢瓑浜庤劇疆obs鍜宱bs錛夈 cbs = bytes 涓嬈¤漿鎹bytes瀛楄妭銆 count = blocks 鍙鎷瘋礉杈撳叆鐨刡locks鍧椼 conv = ASCII 鎶奅BCDIC鐮佽漿鎹涓篈SCII鐮併 conv = ebcdic 鎶夾SCII鐮佽漿鎹涓篍BCDIC鐮併 conv = ibm 鎶夾SCII鐮佽漿鎹涓篴lternate EBCDIC鐮併 conv = blick 鎶婂彉鍔ㄤ綅杞鎹㈡垚鍥哄畾瀛楃︺ conv = ublock 鎶婂滻瀹氫滑杞鎹㈡垚鍙樺姩浣 conv = ucase 鎶婂瓧姣嶇敱灝忓啓鍙樹負澶у啓銆 conv = lcase 鎶婂瓧姣嶇敱澶у啓鍙樹負灝忓啓銆 conv = notrunc 涓嶆埅鐭杈撳嚭鏂囦歡銆 conv = swab 浜ゆ崲姣忎竴瀵硅緭鍏ュ瓧鑺傘 conv = noerror 鍑洪敊鏃朵笉鍋滄㈠勭悊銆 conv = sync 鎶婃瘡涓杈撳叆璁板綍鐨勫ぇ灝忛兘璋冨埌ibs鐨勫ぇ灝忥紙鐢╥bs濉鍏咃級銆 fdformat鍛戒護浣庣駭鏍煎紡鍖栬蔣鐩樸
format [-n] device QUOTE: -n 鏍煎紡鍖栧悗涓嶅仛媯楠
4.5甯哥敤鐨勭綉緇滃懡浠 FTP鍛戒護 Telnet鍛戒護銆
Netstat鍛戒護
-a 鏄劇ず鎵鏈夌殑scoket錛屽寘鎷姝e湪鐩戝惉鍜屻
-c 姣忛殧1縐掑氨閲嶆柊鏄劇ず涓閬嶏紝鐩村埌鐢ㄦ埛涓鏂瀹冦
-i 鏄劇ず鎵鏈夌綉緇滄帴鍙g殑淇℃伅錛屾牸寮忓悓鈥漣fconfig 鈥揺鈥
-n 浠ョ綉緇淚P鍦板潃浠f浛鍚嶇О錛屾樉紺轟篃緗戠粶榪炴帴鎯呭艦銆
-r 鏄劇ず鏍稿績璺鐢辮〃錛屾牸寮忓悓鈥漴oute 鈥揺:銆
-t 鏄劇ずTCP鍗忚鐨勮繛鎺ユ儏鍐點
-u 鏄劇ずUDP鍗忚鐨勮繛鎺ユ儏鍐點
-v 鏄劇ず姝e湪榪涜岀殑宸ヤ綔銆 nslookup鍛戒護銆 finger鍛戒護錛屽姛鑳芥槸鏌ヨ㈢敤鎴風殑淇℃伅銆 ping鍛戒護銆傦紙鐢ㄦ埛鍜岀粍鐨勭$悊鍙浠ヤ嬌鐢ㄥ伐鍏鳳細TurboUserCfg鎴栨槸XturboUserCfg銆傦級
4.6鏈夊叧榪涚▼鐨勫懡浠ゃ 榪涚▼鍜屽惎鍔 at [-V] [-q] [-f鏂囦歡鍚峕 [-mldbv]鏃墮棿 at 鈥揷 浣滀笟 [浣滀笟鈥.] AT鍛戒護鍚鍔ㄧ殑榪涚▼緋葷粺鍙鎵ц屼竴嬈° batch [-V] [-q 闃熷垪] [-f 鏂囦歡鍚峕 [-mv] [鏃墮棿] 鍦ㄧ郴緇熻礋杞借緝灝忔椂錛岃祫婧愭瘮杈冪┖闂叉椂鎵ц屻 cron鍛戒護鎸変竴瀹氱殑鏃墮棿闂撮殧鎵ц屽懡浠ゃ crontab鍛戒護鐢ㄤ簬瀹夎呫佸垹闄ゆ垨鍒楀嚭鐢ㄤ簬椹辨敮cron鍚庡彴榪涚▼鐨勮〃鏍箋傝繘紼嬫煡鐪
who鍛戒護銆 w鍛戒護鏄涓涓姣攚ho鍛戒護鏇村己澶х殑鍛戒護 w
鈥揫husfV] [user] -h 涓嶆樉紺烘爣棰樸
-u 褰撳垪鍑哄綋鍓嶈繘紼嬪拰CPU鏃墮棿鏃跺拷鐣ョ敤鎴峰悕銆
-s 浣跨敤鐭妯″紡銆備笉鏄劇ず鐧誨綍鏃墮棿JCPU鍜孭CPU鏃墮棿銆
-f 鍒囨崲鏄劇ずFROM欏癸紝涔熷氨鏄榪滅▼涓繪満鍚嶉」銆
-V 鏄劇ず鐗堟湰淇℃伅銆 user 鍙鏄劇ず鎸囧畾鐢ㄦ埛鐨勬儏鍐點 ps鍛戒護銆
-e 鏄劇ず鎵鏈夎繘紼嬨
-f 鍏ㄦ牸寮
-h 涓嶆樉紺烘爣棰樸
-l 闀挎牸寮忋
-w 瀹借緭鍑恆 a 鏄劇ず緇堢涓婃墍鏈夎繘紼嬶紝鍖呮嫭鍏朵粬鐢ㄦ埛鐨勮繘紼嬨 r 鍙鏄劇ず姝e湪榪愯岀殑榪涚▼銆 x 鏄劇ず娌℃湁鎺у埗緇堢鐨勮繘紼嬨 top 鍛戒護鍔ㄦ佹樉紺虹郴緇熷綋鍓嶇殑榪涚▼鍜屽叾浠栫姸鍐點 5緋葷粺鐨勫惎鍔ㄨ繃紼嬨
5.1鍒濆嬪惎鍔 鍦≒C鏈哄惎鍔ㄦ椂錛孊IOS浠庢寚瀹氱殑鍚鍔ㄨ懼囦腑璇誨叆鈥滀富寮曞艱板綍鈥濓紙MBR錛夈侻BR鐨勬牸寮忔槸錛氬湴鍧鍋忕Щ閲 鍐呭 澶у皬 +00 h 鍙鎵ц岀殑浠g爜錛堝惎鍔ㄦā鍧楋級 鍙鑳藉彉鍖 +1BE h 絎涓鍒嗗尯琛ㄩ」 16瀛楄妭 +1CE h 絎浜屽垎鍖鴻〃欏 16瀛楄妭 +1DE h 絎涓夊垎鍖鴻〃欏 16瀛楄妭 +1EE h 絎鍥涘垎鍖鴻〃欏 16瀛楄妭 +1FE h 鍙鎵ц岀殑鏍囪幫紙AA55 h錛 2瀛楄妭 鍚鍔ㄦā鍧楀寘鍚瓚充互瑁呭叆鎿嶄綔緋葷粺鐨勪唬鐮侊紝鎴栬呮槸絎浜屾ョ殑鍔犺澆浠g爜鐨勪綅緗銆傚惎鍔ㄦā鍧楅渶瑕佷嬌鐢˙IOS璋冪敤鏉ヤ粠紓佺洏瑁呭叆鏁版嵁錛岃岃繖浜涗腑鏂璋冪敤錛屽侷NT 13h絳夛紝闄愬埗浜嗘渶澶х佺洏鏌遍潰鍙蜂負1023銆傝繖涔熷氨鏄璇村惎鍔ㄦā鍧楅渶瑕佸姞杞界殑涓鍒囧唴瀹癸紝濡傚垵濮嬪唴瀛樼佺洏銆佸唴鏍搞佸惎鍔ㄧ殑鏃墮棿淇℃伅絳夛紝蹇呴』瀛樻斁鍦1024涓鏌遍潰浠ュ唴銆傚湪MBR涓鍙鏈夊洓涓鍒嗗尯琛ㄩ」錛屾瘡涓琛ㄩ」鐨勬牸寮忓備笅錛 鍦板潃鍋忕Щ 鍐呭 澶у皬 +00h 鍒嗗尯鐘舵侊細00浠h〃闈炲惎鍔ㄥ垎鍖猴紝80h浠h〃鍚鍔ㄥ垎鍖 1瀛楄妭 +01h 鍒嗗尯鐨勮搗濮嬩綅緗 紓佸ご 1瀛楄妭 +02h 鍒嗗尯鐨勮搗濮嬩綅緗 鏌遍潰鍜屾墖鍖 1瀛楄妭 +04h 鍒嗗尯鐨勭被鍨 1瀛楄妭 +05h 鍒嗗尯鐨勭粨鏉熶綅緗 紓佸ご 1瀛楄妭 +06h 鍒嗗尯鐨勭粨鏉熶綅緗 鏌遍潰鍜屾墖鍖 1瀛楄妭 +08h 鍦ㄤ富寮曞煎尯鍜屾湰鍒嗗尯鐨勭涓涓鎵囧尯闂寸殑鎵囧尯鏁扮洰 4瀛楄妭 +0Ch 鍒嗗尯鍐呯殑鎵囧尯鏁扮洰 4瀛楄妭
5.2 Linux鐨勫惎鍔ㄨ繃紼
1鍚鍔ㄧ殑鍛戒護琛屽弬鏁 鍦↙inux鍚鍔ㄦ椂錛屽畠澶勭悊鎵鏈変紶閫掔粰瀹冪殑鍛戒護琛屽弬鏁般傝繖鍙浠ュ獎鍝峀inux鐨勮繍琛屾柟寮忋
鍛戒護琛屽弬鏁板寘鎷錛 mem=xxxM錛氬畾Linux鍙浠ヤ嬌鐢ㄧ殑鍐呭瓨澶у皬銆傝繖鍦ㄧ敤鎴風殑璁$畻鏈虹郴緇熸湁瓚呰繃64MB鐨勫唴瀛樻椂鎵嶉渶瑕併傚洜涓轟粠鍓嶇殑涓繪澘鍙瀵圭涓涓64MB鍐呭瓨榪涜岀紦瀛橈紝浣跨敤瓚呰繃64MB鐨勫唴瀛樹細浣挎暣涓璁$畻鏈虹殑鎬ц兘涓嬮檷錛屾墍鏈夊唴瀛樺潎鎸夋棤緙撳瓨鐨勯熷害榪愯屻 single錛氫嬌Linux鎸夊崟鐢ㄦ埛鏂瑰紡鍚鍔錛岀己鐪佹柟寮忔槸澶氱敤鎴鋒柟寮忋 root=/dev/xxx錛氭寚瀹歀inux瑕佸畨瑁呬負鏍規枃浠剁郴緇熺殑璁懼囥 init=;錛氭寚瀹氫綔涓哄垵濮嬪寲榪涚▼鐨勬枃浠躲 initrd=;錛氭寚瀹氫綔涓哄垵濮嬪唴瀛樼佺洏鐨勮懼囥 ro錛氭寚瀹氭牴鏂囦歡緋葷粺涓哄彧璇匯 rw錛氭寚瀹氭牴鏂囦歡緋葷粺涓哄彲璇誨彲鍐欍
2 Init榪涚▼ 鍦ㄥ唴鏍稿垵濮嬪寲鑷韜鍜屾壘鍒扮殑紜浠惰懼囧悗錛屽湪鍚庡彴鍚鍔ㄨ繘紼媔nit(/sbin/init)錛宨nit榪涚▼鍙1榪愯屻傚湪UNIX涓栫晫涓鏈夎稿氬惎鍔ㄨ繃紼嬬殑鐗堟湰錛屼竴浜涙槸鍩轟簬緋葷粺V錛屼竴浜涙槸鍩轟簬BSD銆傚ぇ澶氭暟Linux鐗堟湰浣跨敤緋葷粺V鐨勫疄鐜版柟娉曪紝鍦ㄨ繖閲屾弿榪扮殑灝辨槸榪欐牱銆 init鏄鐢辨枃浠/etc/inittab鍐呭瑰拰鍔熻兘鎺у埗鐨勶紝闅忓惎鍔ㄦā寮忔槸鍗曠敤鎴鋒垨澶氱敤鎴瘋屼笉鍚屻 QUOTE: 鍗曠敤鎴鋒ā寮忥細init榪涚▼蹇界暐/etc/inittab鏂囦歡錛屽湪鎵ц屽皯鏁板嚑涓鑴氭湰紼嬪簭鍚庤皟鐢/dev/console shell銆傝繖鏍鳳紝鐢ㄦ埛灝卞彲浠ユ湁浜嗕竴涓猻hell錛岃屼笖鍙浠ユ墽琛屼竴瀹氶檺搴︾殑浠誨姟銆傚氱敤鎴鋒ā寮忥細init榪涚▼鎶婄郴緇熷甫鍏/etc/inittab鏂囦歡鎸囧畾鐨勮繍琛岀駭鍒銆侷nit閫氳繃鏍囧噯鐨凩inux鏂規硶榪涘叆涓涓鎸囧畾鐨勮繘琛岀駭鍒銆
3錛庤繘琛岀駭鍒 Linux涓庡叾浠朥NIX鎿嶄綔緋葷粺涓鏍鳳紝鍙浠ヤ換浣曟椂鍒誨勪簬浠諱綍涓涓榪愯岀駭鍒銆傝繖浜涜繍琛岀駭鍒鎻愪緵鐨勫姛鑳戒笉鍚岋紝涓轟富瑕佹槸鐢變簬鍏惰繍琛岀殑鏈嶅姟鏂圭▼搴忥紙鍚庡彴daemon錛夌殑涓嶅悓閫犳垚鐨勩侺inux鍏辨湁6縐嶈繍琛岀駭鍒銆
0錛氬叧闂璁$畻鏈烘垨緇堟㈣$畻鏈鴻繍琛岋紝榪欎釜綰у埆灝辨槸緋葷粺鍋滄㈣繍琛屻
1錛氬崟鐢ㄦ埛鍚鍔ㄧ駭鍒錛岀郴緇熷彧鏈変竴涓鐢ㄦ埛錛屽氨鏄痳oot錛岃ョ敤鎴峰湪鎺у埗鍙扮櫥褰曘
2錛氬氱敤鎴瘋繍琛岀駭鍒錛屼絾鏃犵綉緇滃姛鑳姐傚湪榪欎釜榪愯岀駭鍒錛岀綉緇滃姛鑳芥病鏈夊惎鍔錛屼絾鏄緋葷粺鍏佽稿氫釜鐢ㄦ埛鐧誨綍錛屽彲浠ラ氳繃鉶氭嫙鎺у埗鍙版垨涓茶岀嚎璺銆
3錛氬氱敤鎴鋒ā寮忥紝鏈夌綉緇滃姛鑳姐傚湪榪欎釜榪愯岀駭鍒錛屾墍鏈夋爣鍑嗙綉緇滄湇鍔″潎琚鍚鍔ㄣ
4錛氱洰鍓嶆病鏈夊疄鐜般
5錛歑11榪愯岀駭鍒錛屽湪榪欎釜榪愯岀駭鍒錛孹鏈嶅姟鍣ㄨ蔣浠惰繍琛岋紝鎻愪緵鍥懼艦鐣岄潰鐨勭櫥褰曟柟寮忋
6錛氱郴緇熼噸鏂板惎鍔ㄣ傛煡璇㈠綋鍓嶈繍琛岀駭鍒錛歳unlevel錛
4鍦ㄥ惎鍔ㄨ繃紼嬩腑榪愯岀殑鑴氭湰鍦╥nit榪涚▼榪愯屾椂錛屽畠璐熻矗鏌ョ湅緙虹渷鐨勮繍琛岀駭鍒錛屽苟榪涘叆璇ヨ繍琛岀駭鍒銆傝繖鏄閫氳繃榪愯屽湪/etc/rc.d/rcX.d鐩褰曚笅鐨勮剼鏈紼嬪簭鏉ュ疄鐜扮殑錛屽叾涓璛浠h〃榪愯岀殑綰у埆錛屽嵆涓涓榪愯岀駭鍒瀵瑰簲涓涓鐩褰曘備笉鍚岀殑瀛楁瘝寮澶寸殑鏂囦歡鏈変笉鍚岀殑浣滅敤銆傚叾涓錛氫互K寮澶寸殑鑴氭湰紼嬪簭鏄緋葷粺紱誨紑鏌愪釜榪愯岀駭鍒鏃舵墽琛岀殑錛屼綔鐢ㄦ槸鍋滄㈡煇縐嶆湇鍔°傚綋緋葷粺浠庢煇涓鏀鎸佺駭鍒鍙樹負鍏朵粬綰у埆鏃訛紝棣栧厛瑕佽繘琛屽師榪愯岀駭鍒鎵瀵瑰簲鐨勬墍鏈塊紼嬪簭銆備互S寮澶寸殑鑴氭湰紼嬪簭鏄緋葷粺榪涘叆鏌愪釜榪愯岀駭鍒鏃舵墍鎵ц岀殑錛屼綔鐢ㄦ槸鍚鍔ㄦ煇縐嶆湇鍔°傚綋緋葷粺鏀瑰彉涓烘煇涓榪愯岀駭鍒鏃訛紝灝辮佽繍琛屾柊榪愯岀駭鍒鎵瀵瑰簲鐨勬墍鏈塖紼嬪簭銆
5澧炲姞鍚鍔ㄨ剼鏈紼嬪簭鐢ㄦ埛鍙鑳芥湁涓浜涚壒瀹氱殑紜浠惰懼囪佸垵濮嬪寲錛屾垨闇瑕佸湪緋葷粺鍚鍔ㄦ椂鍒濆嬪寲涓浜涘叾浠栧簲鐢ㄧ▼搴忥紝鐢ㄦ埛鍙浠ュ炲姞鑷宸辯殑鍒濆嬪寲鑴氭湰紼嬪簭鏉ュ畬鎴愯繖浜涘伐浣溿傞氬父姝ラゆ槸錛氬嶅埗涓涓宸茬粡瀛樺湪鐨勮剼鏈錛岃繖鏍峰彲浠ュ緱鍒頒竴涓閫氱敤鐨勬嗘灦鏍煎紡銆備慨鏀硅繖涓鑴氭湰錛屼互瀹屾垚鑷宸辯殑闇奼傦紝瑕佹敞鎰忎嬌紼嬪簭鍙浠ュ勭悊鍚鍔ㄥ拰鍏抽棴鐨勫弬鏁幫紝灝界″彲鑳藉叧闂澶勭悊浠涔堜篃涓嶉渶瑕佸共銆傛妸榪欎釜鑲㈡湰鎷瘋礉鍒/etc/rc.d/init.d鐩褰曚笅錛屽懡鍚嶄負鈥漵erv鈥濄傛寜涓嬮潰鐨勬柟娉曞湪鐩稿簲鐨勭洰褰曚笅寤虹珛榪愯屾帶鍒墮摼鎺ワ細 CODE:[Copy to clipboard]ln 鈥搒 ../init.d/serv/etc/rc.d/rc3.d/s99 serv 榪涜屾祴璇曘
6 LILO鍜屽叾浠栫殑鍚鍔ㄦā鍧楄佸惎鍔↙inux錛屽惎鍔ㄦā鍧楁槸蹇呴』鐨勩備竴鑸鐢ㄤ簬Linux鐨勫惎鍔ㄦā鍧楁槸LILO錛孡ILO鐢ㄨ嚜宸辯殑涓誨紩瀵煎尯浠f浛涓鑸鐨勪富寮曞煎尯銆侺ILO鍙浠ラ氳繃淇鏀/etc/lilo.conf鏂囦歡鍐呭規潵榪涜岄厤緗錛屽瑰紩瀵煎尯鍐呭圭殑鏇存柊閫氳繃lilo鍛戒護鏉ュ畬鎴愩備笅闈㈢粰涔熶簡涓涓瑁呮湁DOS錛孴urboLinux3.4.0鍜孯edHat
5.2緋葷粺鐨勮$畻鏈虹殑lilo.conf鏂囦歡銆
鍦ㄤ緥瀛愪腑鐨勬暟瀛楁爣鍙鋒槸鐢ㄦ埛鍔犱笂鍘誨苟瑕佸湪鏂囦腑璇︾粏瑙i噴鐨勩 CODE:[Copy to clipboard]# more /etc/lilo.conf boot=dev/had map=/boot/map instll/boot/boot.b prompt #琛ㄧず鍚鍔ㄧ洏鏄/dev/had錛岃繖鏄涓籌DE紜鐩樸 timeout=50 #琛ㄧず絳夊緟鐢ㄦ埛杈撳叆鐨勬椂闂存槸50縐掋 default=TL3.4 other=dev/hda1 #琛ㄧず濡傛灉鍦ㄤ笂榪扮殑鏃墮棿鍐呮病鏈夎緭鍏ワ紝緙虹渷鐨勫惎鍔ㄧ郴緇熸槸TL3.4錛屽嵆TurboLinux 3.4.0 label=dos table=dev/had #琛ㄧず濡傛灉鍦↙ILO鎻愮ず鐢ㄦ埛杈撳叆鍚鍔ㄧ郴緇熸椂錛岀敤鎴鋒寜浜;閿錛屽悇涓緋葷粺灝嗕互label鐨勫唴瀹規樉紺哄嚭鏉ワ紝渚涚敤鎴烽夋嫨銆 image=/mnt/tl3.4/boot/vmlinuz label=TL3.4 root=/dev/hda3 read-only TurboLinux鐨勫惎鍔ㄦ枃浠訛紝/mnt/tl3.4/boot/vmlinuz琚紜瀹氾紝鏍規枃浠剁郴緇熷湪/dev/hda3錛屾牴鏂囦歡緋葷粺鏄鍙璇繪柟寮忕殑銆 CODE:[Copy to clipboard]image=/mnt/rh5.2/boot/vmlinuz-2.0.36-0.7 label=RH5.2 root=/dev/hda4 read-only RedHat鐨勫惎鍔ㄦ枃浠訛紝/mnt/rh5.2/boot/vmlinuz-2.0,36-0.7琚紜瀹氾紝鏍規枃浠剁郴緇熷湪/dev/hda4錛屾牴鏂囦歡緋葷粺鍙璇誨啓銆
B. linux 求助shell腳本 ping命令延遲超過100ms的包就發郵件 恢復正常也發個郵件 之後不用發
我的需求是PING這個地址 只要延遲高於100ms就發送個郵件 然後正常後在發個郵件通知 之後正常不發 一有延遲就發 我這個老是重復 求高人指點 #!/bin/bashIP=`ping 8.8.8.8 -c 3|sed -n "2p" |awk '{print $7}'|cut -f 2 -d "="|cut -f 1 -d "."`L='100'a='tail -1 /opt/text.txt' | sed -n '1p'i='tail -1 /opt/text1.txt' | sed -n '1p'echo "$IP" >> /opt/text.txtecho "$IP" >> /opt/text1.txtif [[ $a -le $L ]]thenmail -s 'yanchi' 郵箱 < ar/log/boot.logelif [[ $a -ge $L ]];thenmail -s 'huifu' 郵箱 < ar/log/boot.logelseecho "ok"fi~我是想把這個延遲數寫進一個文件里進行對比 延遲是會報 但是正常後不報 ,而且正常情況下運行還會發送 誰能幫忙看看
C. Linux命令、編輯器與Shell編程的目錄
第1篇 Linux命令
第1章 Linux簡介與安裝(教學視頻:52分鍾)2
1.1 Linux系統簡介2
1.1.1 Linux能做什麼2
1.1.2 Linux的主要發行版3
1.1.3 Linux系統的優勢4
1.2 Linux的存儲設備和目錄結構5
1.2.1 Linux系統中的存儲設備5
1.2.2 Linux系統中的目錄結構7
1.3 虛擬化技術的應用8
1.3.1 虛擬化和VMware公司9
1.3.2 VMware Workstation簡介10
1.3.3 VMware Workstation的網路連接方式11
1.3.4 VMware Workstation的使用技巧13
1.3.5 VMware ESX Server簡介13
1.4 Linux安裝過程14
1.4.1 安裝前的准備工作14
1.4.2 創建虛擬機並使用光碟引導15
1.4.3 安裝模式和光碟檢測18
1.4.4 圖形安裝環境配置19
1.4.5 磁碟分區21
1.4.6 引導程序和網路配置23
1.4.7 設置時區和根用戶密碼25
1.4.8 定製軟體包並開始安裝26
1.4.9 第一次啟動27
1.5 小結30
第2章 Linux系統入門(教學視頻:109分鍾)31
2.1 如何使用本書學習31
2.1.1 本書的知識結構和約定31
2.1.2 學習Linux系統的建議33
2.2 登錄系統33
2.2.1 圖形界面登錄33
2.2.2 命令行登錄35
2.2.3 SSH遠程登錄36
2.2.4 Telnet遠程登錄38
2.2.5 VNC遠程登錄38
2.2.6 SFTP登錄39
2.3 關閉、重啟系統41
2.3.1 關閉系統命令之shutdown41
2.3.2 關閉系統命令之poweroff41
2.3.3 掛起系統命令halt42
2.3.4 重啟系統命令reboot42
2.3.5 切換系統運行級別命令init42
2.4 Linux命令基礎及幫助43
2.4.1 Linux系統中的命令43
2.4.2 幫助之help命令和選項45
2.4.3 幫助之man手冊46
2.4.4 幫助之info信息頁48
2.5 系統與用戶的交互程序Shell50
2.5.1 Shell分類50
2.5.2 更改默認Shell51
2.6 Bash中的命令基本操作54
2.6.1 命令行編輯功能54
2.6.2 綁定快捷鍵和命令55
2.6.3 命令行補全功能59
2.6.4 命令歷史功能61
2.6.5 命令別名功能63
2.7 管道和輸入/輸出65
2.7.1 管道65
2.7.2 命令的輸入/輸出和錯誤66
2.7.3 重定向命令的輸入/輸出和錯誤66
2.8 小結69
第3章 常用命令(教學視頻:115分鍾)70
3.1 Linux基本命令70
3.1.1 切換工作目錄命令cd70
3.1.2 查看當前路徑命令pwd71
3.1.3 查看文件列表命令ls72
3.1.4 文件鏈接命令ln75
3.2 文件操作命令76
3.2.1 文件命名規則76
3.2.2 創建文件命令touch77
3.2.3 創建目錄命令mkdir77
3.2.4 移動、重命名文件命令mv78
3.2.5 復制文件命令cp79
3.2.6 刪除文件命令rm80
3.2.7 刪除空目錄命令rmdir81
3.2.8 查看文件類型命令file81
3.3 文本文件內容相關命令82
3.3.1 查看文本文件內容命令cat82
3.3.2 從文本尾查看文本內容命令tail83
3.3.3 從文本首行查看文本內容命令head84
3.3.4 分屏顯示文本內容命令more和less85
3.3.5 文本內容比較命令diff87
3.3.6 文本統計命令wc89
3.4 日期時間命令89
3.4.1 查看日期時間命令date90
3.4.2 查看日歷命令cal90
3.4.3 修改日期時間命令date和clock91
3.5 聯線用戶命令92
3.5.1 查看聯線用戶命令who、finger和w92
3.5.2 與聯線用戶通信的命令wall、write和mesg93
3.5.3 斷開聯線用戶命令fuser94
3.6 切換用戶命令94
3.6.1 臨時切換用戶命令su94
3.6.2 以root用戶身份運行命令sudo95
3.7 定位和查找96
3.7.1 搜索命令 which96
3.7.2 文件搜索命令locate96
3.7.3 特殊文件搜索命令whereis97
3.7.4 關鍵字搜索命令apropos97
3.8 輸入/輸出相關命令98
3.8.1 回顯命令echo98
3.8.2 接收用戶輸入命令read99
3.8.3 顯示並保存文本命令tee102
3.8.4 郵件命令mail103
3.8.5 啟動新Shell命令exec106
3.9 小結107
第4章 Linux命令中的特殊字元和正則表達式(教學視頻:48分鍾)108
4.1 命令中的特殊字元108
4.1.1 字元串引用符雙引號和單引號108
4.1.2 命令引用符反引號110
4.1.3 變數引用和命令轉換符美元符號111
4.1.4 反斜線屏蔽符111
4.2 文件名通配符111
4.2.1 單字元匹配元字元「?」112
4.2.2 多字元匹配元字元「*」112
4.2.3 字元范圍匹配符「[]」113
4.2.4 排除范圍匹配符「[!]」114
4.3 多條命令中的邏輯運算符和括弧115
4.3.1 邏輯或「||」115
4.3.2 邏輯與「&&」116
4.3.3 括弧116
4.4 命令中的正則表達式117
4.4.1 單字元匹配符「.」117
4.4.2 單字元或字元串重復匹配符「*」118
4.4.3 行首匹配符「^」118
4.4.4 行尾匹配符「$」119
4.4.5 反斜杠屏蔽符「」119
4.4.6 范圍匹配符「[]」和排除范圍匹配符「[^]」120
4.4.7 詞首、詞尾匹配符「<」和「>」120
4.4.8 重復次數匹配符「x{}」120
4.4.9 組合並使用正則表達式121
4.5 小結121
第5章 查找和篩選工具(教學視頻:93分鍾)123
5.1 查找文件工具find123
5.1.1 find的基本格式123
5.1.2 按文件名稱查找125
5.1.3 按文件許可權查找125
5.1.4 按文件類型查找126
5.1.5 按文件的時間戳記和大小查找126
5.1.6 按文件屬主或屬組查找127
5.1.7 find工具的其他參數128
5.1.8 使用exec和ok處理查找到的文件128
5.1.9 使用xargs命令處理查找到的文件129
5.1.10 find工具應用實例130
5.2 查找文本工具grep131
5.2.1 grep的基本格式131
5.2.2 使用grep查找文本132
5.2.3 行首、行尾匹配查找134
5.2.4 配合常用的正則表達式查找135
5.2.5 使用或、與多匹配模式查找136
5.2.6 grep工具應用實例137
5.3 流編輯器sed138
5.3.1 sed基本格式138
5.3.2 顯示和刪除行140
5.3.3 插入和修改文本142
5.3.4 替換文本和其他編輯指令145
5.3.5 處理文本中的控制字元148
5.3.6 分支結構149
5.4 格式化文本數據抽取工具awk152
5.4.1 awk命令基本格式152
5.4.2 正則表達、元字元、運算符和關系運算符153
5.4.3 在awk命令中使用變數156
5.4.4 在awk命令中使用流程式控制制159
5.4.5 awk命令中的函數162
5.5 轉換和刪除重復命令tr170
5.5.1 tr命令的基本格式170
5.5.2 字元轉換171
5.5.3 刪除字元172
5.6 合並和分割工具173
5.6.1 排序命令sort174
5.6.2 數據剪切命令cut179
5.6.3 數據粘貼命令paste181
5.6.4 數據連接命令join183
5.6.5 去除重復命令uniq186
5.6.6 分割文件命令split188
5.7 小結190
第6章 用戶和文件許可權管理(教學視頻:73分鍾)191
6.1 用戶管理191
6.1.1 系統用戶文件概述191
6.1.2 添加用戶命令useradd193
6.1.3 設置用戶密碼命令passwd196
6.1.4 刪除用戶命令userdel197
6.1.5 用戶管理命令usermod197
6.2 用戶組管理199
6.2.1 用戶組文件概述199
6.2.2 添加用戶組命令groupadd201
6.2.3 刪除用戶組命令groupdel201
6.2.4 用戶組管理202
6.3 基本許可權及管理命令203
6.3.1 文件的屬主和屬組203
6.3.2 修改文件屬主和屬組命令chown、chgrp203
6.3.3 文件許可權及表示方法205
6.3.4 文件許可權管理命令chmod207
6.3.5 suid、sgid和sticky許可權概述208
6.3.6 許可權掩碼命令umask211
6.4 POSIX ACL許可權系統及其管理命令212
6.4.1 POSIX ACL許可權系統概述213
6.4.2 ACL許可權管理和查看命令setfacl、getfacl213
6.4.3 ACL許可權管理214
6.5 小結217
第7章 磁碟和文件系統管理(教學視頻:70分鍾)218
7.1 磁碟及分區管理218
7.1.1 查看磁碟設備列表命令fdisk218
7.1.2 查看磁碟設備命令hdparm220
7.1.3 磁碟分區工具fdisk221
7.1.4 利用fdisk工具對磁碟分區222
7.2 文件系統管理225
7.2.1 Linux系統支持的文件系統225
7.2.2 創建文件系統命令mkfs226
7.2.3 查看和修改卷標命令e2label227
7.2.4 掛載文件系統228
7.2.5 卸載文件系統命令umount231
7.2.6 利用fstab自動掛載文件系統232
7.3 RAID設備233
7.3.1 磁碟陣列的種類233
7.3.2 磁碟陣列級別234
7.3.3 創建組成陣列的磁碟分區236
7.3.4 創建磁碟陣列237
7.3.5 為陣列添加熱備盤239
7.3.6 使用熱備盤替換損壞磁碟239
7.3.7 擴展陣列240
7.4 LVM邏輯卷管理241
7.4.1 LVM的基本概念241
7.4.2 創建物理卷243
7.4.3 創建卷組244
7.4.4 創建邏輯卷245
7.4.5 添加物理卷247
7.4.6 擴充邏輯卷248
7.4.7 減小邏輯卷249
7.4.8 移動數據並移除物理卷250
7.4.9 邏輯卷快照252
7.5 磁碟配額管理253
7.5.1 為磁碟配額提供支持253
7.5.2 檢查磁碟配額命令quotacheck254
7.5.3 查看磁碟使用情況命令repquota255
7.5.4 建立磁碟配額命令edquota255
7.5.5 開啟磁碟配額命令quotaon257
7.5.6 關閉磁碟配額命令quotaoff258
7.5.7 管理磁碟配額258
7.6 文件系統維護基礎259
7.6.1 查看文件系統使用情況命令df259
7.6.2 追蹤大文件命令260
7.6.3 修復文件系統命令fsck261
7.7 小結264
第8章 Linux系統管理(教學視頻:70分鍾)265
8.1 系統服務管理265
8.1.1 查看系統服務265
8.1.2 設置服務自啟動狀態267
8.1.3 添加刪除系統服務269
8.1.4 啟動和關閉服務命令service270
8.2 進程管理命令271
8.2.1 查看進程命令ps271
8.2.2 進程樹274
8.2.3 實時顯示進程命令top274
8.2.4 將任務放在後台執行277
8.2.5 查看後台任務命令jobs277
8.2.6 後台任務調至前台命令fg278
8.2.7 終止進程命令kill278
8.2.8 查看進程優先順序281
8.2.9 指定進程運行優先順序命令nice282
8.2.10 改變進程優先順序命令renice283
8.3 計劃任務命令crontab、at284
8.3.1 為計劃任務提供支持284
8.3.2 cron計劃任務格式285
8.3.3 添加計劃任務命令crontab286
8.3.4 備份及恢復計劃任務288
8.3.5 用戶計劃任務288
8.3.6 系統計劃任務289
8.3.7 使用at執行一次性計劃任務289
8.4 日誌管理292
8.4.1 syslogd守護進程及其配置文本292
8.4.2 日誌消息的格式295
8.4.3 記錄日誌消息命令logger295
8.4.4 日誌輪循296
8.4.5 監視系統日誌297
8.5 小結299
第9章 數據備份和應用程序管理(教學視頻:74分鍾)301
9.1 數據備份基礎301
9.1.1 數據備份概述301
9.1.2 備份數據存放的介質302
9.1.3 備份類型302
9.1.4 備份時間選擇304
9.2 tar備份工具304
9.2.1 tar命令的基本格式304
9.2.2 tar歸檔和備份文件305
9.2.3 查看歸檔文件中的文件列表306
9.2.4 從歸檔文件中還原文件306
9.3 cpio備份命令307
9.3.1 cpio命令的基本格式308
9.3.2 使用cpio歸檔文件308
9.3.3 查看歸檔文件中的文件列表309
9.3.4 恢復cpio歸檔文件310
9.4 壓縮工具和整盤備份工具dd311
9.4.1 使用gzip壓縮文件311
9.4.2 使用bzip2壓縮文件313
9.4.3 整盤備份命令dd314
9.5 RPM包管理命令rpm317
9.5.1 RPM包管理器簡介317
9.5.2 rpm命令基本格式318
9.5.3 使用rpm命令查詢軟體包319
9.5.4 使用rpm命令安裝軟體包321
9.5.5 使用rpm命令卸載軟體包323
9.5.6 使用rpm命令升級軟體包324
9.6 編譯安裝相關命令和工具324
9.6.1 安裝編譯環境324
9.6.2 獲取軟體工具wget、links325
9.6.3 編譯前的配置327
9.6.4 編譯軟體命令make329
9.6.5 安裝命令make install329
9.6.6 運行及環境配置330
9.6.7 卸載軟體命令make uninstall332
9.7 利用yum工具安裝應用程序332
9.7.1 yum簡介333
9.7.2 配置yum333
9.7.3 查詢源上的軟體包336
9.7.4 利用yum安裝軟體包337
9.7.5 利用yum卸載軟體包339
9.7.6 安裝、卸載軟體包組339
9.8 小結341
第10章 網路管理(教學視頻:81分鍾)343
10.1 網路介面配置命令343
10.1.1 查看網路介面信息343
10.1.2 配置網路介面347
10.1.3 重新啟用網路介面351
10.1.4 配置DNS伺服器地址352
10.2 路由命令route354
10.2.1 查看系統中的路由表355
10.2.2 添加默認路由356
10.2.3 添加路由條目357
10.3 主機名稱命令hostname360
10.3.1 查看主機名稱360
10.3.2 修改主機名稱361
10.4 設置網路冗餘363
10.4.1 bonding簡介364
10.4.2 bonding的模式365
10.4.3 設置網路介面366
10.4.4 載入模塊生成新的網路連接367
10.4.5 驗證設置368
10.5 網路工具370
10.5.1 測試連通命令ping370
10.5.2 網路路徑測試命令traceroute374
10.5.3 查看網路狀態命令netstat374
10.5.4 域名解析工具dig和nslookup377
10.5.5 排除網路故障380
10.6 小結382
第2篇 文本編輯器
第11章 Vi和Vim文本編輯器(教學視頻:37分鍾)386
11.1 文本編輯器概述386
11.1.1 文本編輯器的發展及分類386
11.1.2 Linux系統中的文本編輯器387
11.2 認識Vi和Vim編輯器388
11.2.1 啟動Vim編輯器388
11.2.2 Vim編輯器幫助390
11.2.3 退出Vim編輯器391
11.2.4 Vim編輯器的模式391
11.2.5 Vim編輯器的工作界面392
11.3 向Vim編輯器邁出第1步393
11.3.1 讀取文件393
11.3.2 保存文件394
11.3.3 進入插入模式並插入文本394
11.3.4 移動游標395
11.3.5 刪除文本396
11.3.6 撤銷和恢復396
11.4 快速移動游標396
11.4.1 按單詞移動游標396
11.4.2 快速移動游標至行首和行尾397
11.4.3 移動游標至指定的行397
11.4.4 滾動屏幕398
11.4.5 使用滑鼠移動游標398
11.4.6 其他移動游標的技巧399
11.5 Vim編輯器的查找和替換功能400
11.5.1 簡單的查找功能401
11.5.2 反向查找401
11.5.3 查找時忽略大小寫402
11.5.4 高亮顯示查找結果403
11.5.5 增量查找403
11.5.6 簡單的查找替換功能404
11.5.7 區域性查找替換405
11.5.8 謹慎的查找替換405
11.6 Vim編輯器中的窗口操作406
11.6.1 分割窗口406
11.6.2 關閉窗口409
11.6.3 控制窗口大小409
11.6.4 窗口中的操作410
11.6.5 移動窗口410
11.7 Vim編輯器的高級技巧411
11.7.1 復制和粘貼411
11.7.2 剪切和粘貼411
11.7.3 編輯多個文件411
11.7.4 Visual模式413
11.7.5 在Vim編輯器中執行Shell命令415
11.8 定製Vim編輯器及災難恢復415
11.8.1 定製文件vimrc416
11.8.2 定製Vim編輯器416
11.8.3 災難恢復417
11.9 小結418
第12章 Emacs編輯器(教學視頻:28分鍾)419
12.1 Emacs編輯器概述與入門419
12.1.1 Emacs編輯器概述419
12.1.2 啟動Emacs編輯器420
12.1.3 Emacs編輯器啟動界面421
12.1.4 退出Emacs編輯器423
12.2 Emacs基本操作424
12.2.1 使用Emacs菜單欄424
12.2.2 打開新文件425
12.2.3 保存文件426
12.2.4 簡單編輯操作426
12.3 快速移動游標427
12.3.1 按字元移動游標427
12.3.2 按句子移動游標428
12.3.3 按單詞移動游標428
12.3.4 按段落移動游標428
12.3.5 滾動屏幕428
12.3.6 其他移動游標的技巧429
12.4 Emacs編輯器的常用功能430
12.4.1 撤銷與恢復430
12.4.2 搜索功能431
12.4.3 查找並替換432
12.4.4 復制、剪切和粘貼433
12.5 Emacs編輯器的高級技巧434
12.5.1 刪除環435
12.5.2 編輯文本區域436
12.5.3 書簽功能436
12.5.4 災難恢復440
12.5.5 使用多窗口441
12.6 目錄模式444
12.6.1 查看文件445
12.6.2 刪除、復制、重命名文件446
12.6.3 操作壓縮文件447
12.6.4 其他文件操作447
12.7 Emacs編輯器的其他功能448
12.7.1 在Emacs編輯器中執行Shell命令449
12.7.2 發送電子郵件450
12.7.3 閱讀電子郵件450
12.8 小結453
第13章 Eclipse編輯器(教學視頻:29分鍾)454
13.1 Eclipse開發平台概述與安裝454
13.1.1 Eclipse平台概述454
13.1.2 Eclipse平台安裝前的准備455
13.1.3 安裝Eclipse平台457
13.2 Eclipse界面入門459
13.2.1 第1次啟動459
13.2.2 Eclipse界面介紹460
13.2.3 操作窗口461
13.3 使用Eclipse開發Java程序463
13.3.1 建立編程項目463
13.3.2 建立Java類464
13.3.3 輸入編程內容465
13.3.4 運行Java程序467
13.3.5 調試程序468
13.4 小結470
第14章 常用的文本編輯器(教學視頻:28分鍾)471
14.1 Nano編輯器471
14.1.1 Nano編輯器簡介471
14.1.2 安裝Nano編輯器471
14.1.3 Nano啟動及工作界面472
14.1.4 快速移動游標474
14.1.5 復制粘貼文本474
14.1.6 查找和替換475
14.2 Gedit文本編輯器477
14.2.1 Gedit文本編輯器概述477
14.2.2 Gedit工作界面介紹478
14.2.3 快速移動游標479
14.2.4 顯示行號479
14.2.5 語法高亮480
14.2.6 拼寫檢查480
14.2.7 查找和替換482
14.3 Kate編輯器482
14.3.1 Kate編輯器概述483
14.3.2 Kate基本界面484
14.3.3 快速移動游標485
14.3.4 查找和替換485
14.3.5 拼寫檢查487
14.3.6 語法高亮488
14.3.7 腳本編程環境488
14.4 小結490
第3篇 Shell編程
第15章 Shell腳本編程基礎、變數(教學視頻:56分鍾)492
15.1 Bash腳本編程基礎492
15.1.1 Shell腳本概述492
15.1.2 Shell腳本的基本內容493
15.1.3 腳本的運行方式495
15.1.4 接收用戶輸入496
15.1.5 向腳本傳遞參數497
15.2 Tcsh腳本編程498
15.2.1 輸出字元串Hello的示例腳本498
15.2.2 Tcsh與Bash腳本的區別499
15.3 Shell中的變數499
15.3.1 保存系統運行情況的環境變數500
15.3.2 傳遞參數的位置變數503
15.3.3 系統預先定義的變數504
15.3.4 用戶自定義變數505
15.4 Shell中的數組509
15.4.1 數組的定義509
15.4.2 數組的使用510
15.4.3 清除數組512
15.5 小結512
第16章 系統腳本和登錄環境(教學視頻:32分鍾)513
16.1 系統啟動過程513
16.1.1 Linux系統的啟動步驟513
16.1.2 引導裝載程序GRUB514
16.2 系統初始化過程518
16.2.1 INIT進程的配置文件518
16.2.2 設置系統默認運行級別519
16.2.3 初始化系統腳本520
16.2.4 啟動系統服務520
16.2.5 重啟快捷鍵522
16.2.6 UPS選項522
16.2.7 運行終端523
16.3 系統初始化過程中使用的腳本523
16.3.1 系統初始化腳本524
16.3.2 rc.local腳本525
16.4 用戶環境526
16.4.1 全局用戶配置文件/etc/profile526
16.4.2 個人用戶配置文件.bash_profile527
16.4.3 定製用戶環境529
16.5 小結529
第17章 函數和腳本參數(教學視頻:22分鍾)531
17.1 Shell中的函數531
17.1.1 在腳本中定義函數531
17.1.2 在腳本中使用函數532
17.1.3 向函數傳遞參數和返回值533
17.1.4 返回函數執行狀態535
17.2 在Shell中使用函數文件536
17.2.1 函數文件的編寫536
17.2.2 函數文件的調用537
17.3 兩個示例腳本538
17.3.1 示例1:檢查包的依賴性538
17.3.2 示例2:監控文件系統541
17.4 向腳本傳遞參數545
17.4.1 使用shift命令處理參數545
17.4.2 使用shift命令處理選項參數548
17.5 小結549
第18章 控制Shell腳本執行順序(教學視頻:29分鍾)550
18.1 條件測試和捕獲信號550
18.1.1 退出狀態550
18.1.2 文件測試553
18.1.3 變數測試558
18.1.4 字元串和數值測試559
18.1.5 邏輯操作符561
18.1.6 捕獲系統信號562
18.2 條件判斷語句if564
18.2.1 簡單if語句的使用564
18.2.2 if else語句的使用566
18.2.3 if elif語句的使用569
18.2.4 多if語句嵌套572
18.3 多條件判斷語句case573
18.3.1 多條件判斷語句case的基本格式573
18.3.2 利用case語句處理選項參數574
18.3.3 利用case語句處理用戶輸入577
18.4 步進循環語句for578
18.4.1 for語句的基本格式578
18.4.2 利用for語句處理數組579
18.4.3 一個設置防火牆的例子580
18.5 循環語句until581
18.5.1 until語句的基本格式581
18.5.2 利用until語句監控文件系統狀態582
18.6 while循環語句583
18.6.1 while語句的基本格式583
18.6.2 while語句與until語句的區別584
18.6.3 利用while語句監控系統網路狀態585
18.7 利用break和continue控制循環586
18.7.1 使用break語句控制循環586
18.7.2 使用continue語句控制循環588
18.8 小結589
第19章 Shell編程技巧和應用實例(教學視頻:56分鍾)591
19.1 運行級別腳本591
19.1.1 運行級別腳本的結構591
19.1.2 編寫運行級別腳本593
19.1.3 添加和管理運行級別腳本595
19.2 怎樣寫好Shell腳本596
19.2.1 一般性原則596
19.2.2 良好的編程習慣596
19.2.3 Shell腳本的安全性597
19.3 調試腳本599
19.3.1 排除錯誤599
19.3.2 腳本調試601
19.4 Shell編程實例——自動備份文件腳本603
19.4.1 需求和設計思路603
19.4.2 完全備份模塊604
19.4.3 差異備份模塊605
19.4.4 遠程備份模塊606
19.4.5 主體和日誌功能607
19.4.6 自動運行備份腳本610
19.5 Shell編程實例——防火牆快速配置腳本610
19.5.1 設置防火牆狀態610
19.5.2 添加防火牆規則612
19.5.3 保存防火牆規則616
19.6 快速初始化系統腳本617
19.6.1 初始化系統網路617
19.6.2 更改SSH服務的埠625
19.6.3 設置SELinux狀態626
19.6.4 關閉不必要的系統服務626
19.7 服務監控和主備切換腳本627
19.7.1 測試主伺服器狀態627
19.7.2 切換備用伺服器狀態628
19.8 小結629
D. 如何編寫一個shell腳本
如何編寫一個shell腳本
本文結合大量實例闡述如何編寫一個shell腳本。
為什麼要進行shell編程
在Linux系統中,雖然有各種各樣的圖形化介面工具,但是sell仍然是一個非常靈活的工具。Shell不僅僅是命令的收集,而且是一門非常棒的編程語言。您可以通過使用shell使大量的任務自動化,shell特別擅長系統管理任務,尤其適合那些易用性、可維護性和便攜性比效率更重要的任務。
下面,讓我們一起來看看shell是如何工作的:
建立一個腳本
Linux中有好多中不同的shell,但是通常我們使用bash (bourne again shell) 進行shell編程,因為bash是免費的並且很容易使用。所以在本文中筆者所提供的腳本都是使用bash(但是在大多數情況下,這些腳本同樣可以在bash的大姐,bourne shell中運行)。
如同其他語言一樣,通過我們使用任意一種文字編輯器,比如nedit、kedit、emacs、vi
等來編寫我們的shell程序。
程序必須以下面的行開始(必須方在文件的第一行):
#!/bin/sh
符號#!用來告訴系統它後面的參數是用來執行該文件的程序。在這個例子中我們使用/bin/sh來執行程序。
當編輯好腳本時,如果要執行該腳本,還必須使其可執行。
要使腳本可執行:
chmod +x filename
然後,您可以通過輸入: ./filename 來執行您的腳本。
注釋
在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程序中使用注釋。如果您使用了注釋,那麼即使相當長的時間內沒有使用該腳本,您也能在很短的時間內明白該腳本的作用及工作原理。
變數
在其他編程語言中您必須使用變數。在shell編程中,所有的變數都由字元串組成,並且您不需要對變數進行聲明。要賦值給一個變數,您可以這樣寫:
變數名=值
取出變數值可以加一個美元符號($)在變數前面:
#!/bin/sh
#對變數賦值:
a="hello world"
# 現在列印變數a的內容:
echo "A is:"
echo $a
在您的編輯器中輸入以上內容,然後將其保存為一個文件first。之後執行chmod +x first
使其可執行,最後輸入./first執行該腳本。
這個腳本將會輸出:
A is:
hello world
有時候變數名很容易與其他文字混淆,比如:
num=2
echo "this is the $numnd"
這並不會列印出"this is the 2nd",而僅僅列印"this is the ",因為shell會去搜索變數numnd的值,但是這個變數時沒有值的。可以使用花括弧來告訴shell我們要列印的是num變數:
num=2
echo "this is the ${num}nd"
這將列印: this is the 2nd
有許多變數是系統自動設定的,這將在後面使用這些變數時進行討論。
如果您需要處理數學表達式,那麼您需要使用諸如expr等程序(見下面)。
除了一般的僅在程序內有效的shell變數以外,還有環境變數。由export關鍵字處理過的變數叫做環境變數。我們不對環境變數進行討論,因為通常情況下僅僅在登錄腳本中使用環境變數。
Shell命令和流程式控制制
在shell腳本中可以使用三類命令:
1)Unix 命令:
雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對更常用的命令。這些命令通常是用來進行文件和文字操作的。
常用命令語法及功能
echo "some text": 將文字內容列印在屏幕上
ls: 文件列表
wc –l filewc -w filewc -c file: 計算文件行數計算文件中的單詞數計算文件中的字元數
cp sourcefile destfile: 文件拷貝
mv oldname newname : 重命名文件或移動文件
rm file: 刪除文件
grep 'pattern' file: 在文件內搜索字元串比如:grep 'searchstring' file.txt
cut -b colnum file: 指定欲顯示的文件內容範圍,並將它們輸出到標准輸出設備比如:輸出每行第5個到第9個字元cut -b5-9 file.txt千萬不要和cat命令混淆,這是兩個完全不同的命令
cat file.txt: 輸出文件內容到標准輸出設備(屏幕)上
file somefile: 得到文件類型
read var: 提示用戶輸入,並將輸入賦值給變數
sort file.txt: 對file.txt文件中的行進行排序
uniq: 刪除文本文件中出現的行列比如: sort file.txt | uniq
expr: 進行數學運算Example: add 2 and 3expr 2 "+" 3
find: 搜索文件比如:根據文件名搜索find . -name filename -print
tee: 將數據輸出到標准輸出設備(屏幕) 和文件比如:somecommand | tee outfile
basename file: 返回不包含路徑的文件名比如: basename /bin/tux將返回 tux
dirname file: 返迴文件所在路徑比如:dirname /bin/tux將返回 /bin
head file: 列印文本文件開頭幾行
tail file : 列印文本文件末尾幾行
sed: Sed是一個基本的查找替換程序。可以從標准輸入(比如命令管道)讀入文本,並將結果輸出到標准輸出(屏幕)。該命令採用正則表達式(見參考)進行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus 替換為 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
awk: awk 用來從文本文件中提取欄位。預設地,欄位分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'這里我們使用,作為欄位分割符,同時列印第一個和第三個欄位。如果該文件內容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令輸出結果為:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
這些不是系統命令,但是他們真的很重要。
管道 (|) 將一個命令的輸出作為另外一個命令的輸入。
grep "hello" file.txt | wc -l
在file.txt中搜索包含有」hello」的行並計算其行數。
在這里grep命令的輸出作為wc命令的輸入。當然您可以使用多個命令。
重定向:將命令的結果輸出到文件,而不是標准輸出(屏幕)。
> 寫入文件並覆蓋舊文件
>> 加到文件的尾部,保留舊文件內容。
反短斜線
使用反短斜線可以將一個命令的輸出作為另外一個命令的一個命令行參數。
命令:
find . -mtime -1 -type f -print
用來查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。如果您想將所有查找到的文件打一個包,則可以使用以下腳本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3) 流程式控制制
"if" 表達式 如果條件為真則執行then後面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字元串、判斷文件是否存在及是否可讀等等…
通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括弧的空格。
[ -f "somefile" ] :判斷是否是一個文件
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權
[ -n "$var" ] :判斷$var變數是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
執行man test可以查看所有測試表達式可以比較和判斷的類型。
直接執行以下腳本:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
變數$SHELL包含了登錄shell的名稱,我們和/bin/bash進行了比較。
快捷操作符
熟悉C語言的朋友可能會很喜歡下面的表達式:
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
這里 && 就是一個快捷操作符,如果左邊的表達式為真則執行右邊的語句。您也可以認為是邏輯運算中的與操作。上例中表示如果/etc/shadow文件存在則列印」 This computer uses shadow passwors」。同樣或操作(||)在shell編程中也是可用的。這里有個例子:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder
該腳本首先判斷mailfolder是否可讀。如果可讀則列印該文件中的"From" 一行。如果不可讀則或操作生效,列印錯誤信息後腳本退出。這里有個問題,那就是我們必須有兩個命令:
-列印錯誤信息
-退出程序
我們使用花括弧以匿名函數的形式將兩個命令放到一起作為一個命令使用。一般函數將在下文提及。
不用與和或操作符,我們也可以用if表達式作任何事情,但是使用與或操作符會更便利很多。
case表達式可以用來匹配一個給定的字元串,而不是數字。
case ... in
...) do something here ;;
esac
讓我們看一個例子。 file命令可以辨別出一個給定文件的文件類型,比如:
file lf.gz
這將返回:
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
我們利用這一點寫了一個叫做smartzip的腳本,該腳本可以自動解壓bzip2, gzip 和zip 類型的壓縮文件:
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac
您可能注意到我們在這里使用了一個特殊的變數$1。該變數包含了傳遞給該程序的第一個參數值。也就是說,當我們運行:
smartzip articles.zip
$1 就是字元串 articles.zip
select 表達式是一種bash的擴展應用,尤其擅長於互動式使用。用戶可以從一組不同的值中進行選擇。
select var in ... ; do
break
done
.... now $var can be used ....
下面是一個例子:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
下面是該腳本運行的結果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
您也可以在shell中使用如下的loop表達式:
while ...; do
....
done
while-loop 將運行直到表達式測試為真。will run while the expression that we test for is true. 關鍵字"break" 用來跳出循環。而關鍵字」continue」用來不執行餘下的部分而直接跳到下一個循環。
for-loop表達式查看一個字元串列表 (字元串用空格分隔) 然後將其賦給一個變數:
for var in ....; do
....
done
在下面的例子中,將分別列印ABC到屏幕上:
#!/bin/sh
for var in A B C ; do
echo "var is $var"
done
下面是一個更為有用的腳本showrpm,其功能是列印一些RPM包的統計信息:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
這里出現了第二個特殊的變數$*,該變數包含了所有輸入的命令行參數值。如果您運行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時 $* 包含了 3 個字元串,即openssh.rpm, w3m.rpm and webgrep.rpm.
引號
在向程序傳遞任何參數之前,程序會擴展通配符和變數。這里所謂擴展的意思是程序會把通配符(比如*)替換成合適的文件名,它變數替換成變數值。為了防止程序作這種替換,您可以使用引號:讓我們來看一個例子,假設在當前目錄下有一些文件,兩個jpg文件, mail.jpg 和tux.jpg。
#!/bin/sh
echo *.jpg
這將列印出"mail.jpg tux.jpg"的結果。
引號 (單引號和雙引號) 將防止這種通配符擴展:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
這將列印"*.jpg" 兩次。
單引號更嚴格一些。它可以防止任何變數擴展。雙引號可以防止通配符擴展但允許變數擴展。
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
運行結果為:
/bin/bash
/bin/bash
$SHELL
最後,還有一種防止這種擴展的方法,那就是使用轉義字元——反斜桿:
echo *.jpg
echo $SHELL
這將輸出:
*.jpg
$SHELL
Here documents
當要將幾行文字傳遞給一個命令時,here documents(譯者註:目前還沒有見到過對該詞適合的翻譯)一種不錯的方法。對每個腳本寫一段幫助性的文字是很有用的,此時如果我們四有那個here documents就不必用echo函數一行行輸出。 一個 "Here document" 以 << 開頭,後面接上一個字元串,這個字元串還必須出現在here document的末尾。下面是一個例子,在該例子中,我們對多個文件進行重命名,並且使用here documents列印幫助:
#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ] ; then
cat <<HELP
ren -- renames a number of files using sed regular expressions
USAGE: ren 'regexp' 'replacement' files...
EXAMPLE: rename all *.HTM files in *.html:
ren 'HTM$' 'html' *.HTM
HELP
exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
# command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
if [ -f "$file" ] ; then
newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ]; then
echo "ERROR: $newfile exists already"
else
echo "renaming $file to $newfile ..."
mv "$file" "$newfile"
fi
fi
done
這是一個復雜一些的例子。讓我們詳細討論一下。第一個if表達式判斷輸入命令行參數是否小於3個 (特殊變數$# 表示包含參數的個數) 。如果輸入參數小於3個,則將幫助文字傳遞給cat命令,然後由cat命令將其列印在屏幕上。列印幫助文字後程序退出。 如果輸入參數等於或大於3個,我們就將第一個參數賦值給變數OLD,第二個參數賦值給變數NEW。下一步,我們使用shift命令將第一個和第二個參數從參數列表中刪除,這樣原來的第三個參數就成為參數列表$*的第一個參數。然後我們開始循環,命令行參數列表被一個接一個地被賦值給變數$file。接著我們判斷該文件是否存在,如果存在則通過sed命令搜索和替換來產生新的文件名。然後將反短斜線內命令結果賦值給newfile。這樣我們就達到了我們的目的:得到了舊文件名和新文件名。然後使用mv命令進行重命名。
函數
如果您寫了一些稍微復雜一些的程序,您就會發現在程序中可能在幾個地方使用了相同的代碼,並且您也會發現,如果我們使用了函數,會方便很多。一個函數是這個樣子的:
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
您需要在每個程序的開始對函數進行聲明。
下面是一個叫做xtitlebar的腳本,使用這個腳本您可以改變終端窗口的名稱。這里使用了一個叫做help的函數。正如您可以看到的那樣,這個定義的函數被使用了兩次。
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat <<HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [-h] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#
在腳本中提供幫助是一種很好的編程習慣,這樣方便其他用戶(和您)使用和理解腳本。
命令行參數
我們已經見過$* 和 $1, $2 ... $9 等特殊變數,這些特殊變數包含了用戶從命令行輸入的參數。迄今為止,我們僅僅了解了一些簡單的命令行語法(比如一些強制性的參數和查看幫助的-h選項)。但是在編寫更復雜的程序時,您可能會發現您需要更多的自定義的選項。通常的慣例是在所有可選的參數之前加一個減號,後面再加上參數值 (比如文件名)。
有好多方法可以實現對輸入參數的分析,但是下面的使用case表達式的例子無遺是一個不錯的方法。
#!/bin/sh
help()
{
cat <<HELP
This is a generic command line parser demo.
USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
exit 0
}
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"
您可以這樣運行該腳本:
cmdparser -l hello -f -- -somefile1 somefile2
返回的結果是:
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2
這個腳本是如何工作的呢?腳本首先在所有輸入命令行參數中進行循環,將輸入參數與case表達式進行比較,如果匹配則設置一個變數並且移除該參數。根據unix系統的慣例,首先輸入的應該是包含減號的參數。
實例
一般編程步驟
現在我們來討論編寫一個腳本的一般步驟。任何優秀的腳本都應該具有幫助和輸入參數。並且寫一個偽腳本(framework.sh),該腳本包含了大多數腳本都需要的框架結構,是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執行一下命令:
cp framework.sh myscript
然後再插入自己的函數。
讓我們再看兩個例子:
二進制到十進制的轉換
腳本 b2d 將二進制數 (比如 1101) 轉換為相應的十進制數。這也是一個用expr命令進行數學運算的例子:
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat <<HELP
b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
will return 58
HELP
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
lastchar()
{
# return the last character of a string in $rval
if [ -z "$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
# now cut out the last char
rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
# remove the last character in string and return it in $rval
if [ -z "$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
if [ "$numofchar" = "1" ]; then
# only one char in string
rval=""
return
fi
numofcharminus1=`expr $numofchar "-" 1`
# now cut all but the last char:
rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
--) shift;break;; # end of options
-*) error "error: no such option $1. -h for help";;
*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
lastchar "$binnum"
if [ "$rval" = "1" ]; then
sum=`expr "$weight" "+" "$sum"`
fi
# remove the last position in $binnum
chop "$binnum"
binnum="$rval"
weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
#
該腳本使用的演算法是利用十進制和二進制數權值 (1,2,4,8,16,..),比如二進制"10"可以這樣轉換成十進制:
0 * 1 + 1 * 2 = 2
為了得到單個的二進制數我們是用了lastchar 函數。該函數使用wc –c計算字元個數,然後使用cut命令取出末尾一個字元。Chop函數的功能則是移除最後一個字元。
文件循環程序
或許您是想將所有發出的郵件保存到一個文件中的人們中的一員,但是在過了幾個月以後,這個文件可能會變得很大以至於使對該文件的訪問速度變慢。下面的腳本rotatefile 可以解決這個問題。這個腳本可以重命名郵件保存文件(假設為outmail)為outmail.1,而對於outmail.1就變成了outmail.2 等等等等...
#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
cat <<HELP
rotatefile -- rotate the file name
USAGE: rotatefile [-h] filename
OPTIONS: -h help text
EXAMPLE: rotatefile out
This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
and create an empty out-file
The max number is 10
version $ver
HELP
exit 0
}
error()
{
echo "$1"
exit 1
}
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;;
--) break;;
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
# input check:
if [ -z "$1" ] ; then
error "ERROR: you must specify a file, use -h for help"
fi
filen="$1"
# rename any .1 , .2 etc file:
for n in 9 8 7 6 5 4 3 2 1; do
if [ -f "$filen.$n" ]; then
p=`expr $n + 1`
echo "mv $filen.$n $filen.$p"
mv $filen.$n $filen.$p
fi
done
# rename the original file:
if [ -f "$filen" ]; then
echo "mv $filen $filen.1"
mv $filen $filen.1
fi
echo touch $filen
touch $filen
這個腳本是如何工作的呢?在檢測用戶提供了一個文件名以後,我們進行一個9到1的循環。文件9被命名為10,文件8重命名為9等等。循環完成之後,我們將原始文件命名為文件1同時建立一個與原始文件同名的空文件。
調試
最簡單的調試命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方列印任何變數值。這也是絕大多數的shell程序員要花費80%的時間來調試程序的原因。Shell程序的好處在於不需要重新編譯,插入一個echo命令也不需要多少時間。
shell也有一個真實的調試模式。如果在腳本"strangescript" 中有錯誤,您可以這樣來進行調試:
sh -x strangescript
這將執行該腳本並顯示所有變數的值。
shell還有一個不需要執行腳本只是檢查語法的模式。可以這樣使用:
sh -n your_script
這將返回所有語法錯誤。
E. linux下的 shell到底是什麼啊
在計算機科學中,是指「提供用戶使用界面」的軟體,通常指的是命令行界面的解析器。一般來說,是指操作系統中,提供訪問內核所提供之服務的程序。
F. linux 下如何使用shell 把處理好的csv文件導入到資料庫下
linux 下,可以使用cli程序把csv文件導入到資料庫。具體代碼如下:
$ORACLE_HOME/bin/sqlplus-Susername/password@instanceName>/dev/null2>&1<<!!
#對sqlplus作一些設置,使之只輸出我們需要的文本
setechooff
setpagesize0
setverifyoff
setfeedbackoff
settermoutoff
setlinesize3000
settrimspoolon
#查詢輸出到臨時文件
spool/tmp/some_tmp.csv
#select語句
selectcolumn1||','||column2||','||column3....
fromsome_tablewherecondition
spooloff
#這里可以添加多個查詢,且每個查詢可輸出到不同的文件,如下面注釋
#spool/tmp/some_tmp.csv
#selectcolumn1||','||column2||','||column3....
#fromsome_tablewherecondition
#spooloff
setmarkupHTMLoff
quit
!!
#計算記錄總行數,如果是0則不發郵件
NUM=`cat/tmp/some_tmp.csv|wc-l`
if[$NUM-gt0]
then
#先寫excel的每列的title
echo'Title_Of_Column1,Title_Of_Column2,....Title_Of_ColumnN'>/tmp/attachement.csv
#數據正文
cat/tmp/some_tmp.csv>>/tmp/attachement.csv
#發郵件
(
echo"From:[email protected]"
echo"To:[email protected]"
echo"MIME-Version:1.0"
echo"Content-Type:multipart/mixed;"
echo'boundary="A_Boundary_Name_You_Can_Change_It"'
echo"Subject:Subject"
echo""
echo""
#附件分隔符,上面的boundary前面加--
echo"--A_Boundary_Name_You_Can_Change_It"
echo'Content-Transfer-Encoding:x-uuencode'
echo'Content-Type:text/csv;'
echo'name="attachement.csv"'
echo'Content-Disposition:attachment;'
echo'filename="attachement.csv"'
echo""
uuencode/tmp/attachement.csvattachement.csv
echo"--A_Boundary_Name_You_Can_Change_It"
#附件結束
)|mailx-t
fi
#刪除臨時文件
rm-f/tmp/*.csv
exit0