0. {基礎知識}[tap] 自動補全功能,當文件名第一個字符爲.時,表示該文件爲隱藏文件;
windows系統不識別linux系統文件原因在於windows核心不識別linux文件系統
dos文件回車爲\n\r,linux爲\n,:%s/\r//g轉換.也可以用dos2linux -k filename轉換
1. man 關鍵字 查詢在線幫組
2. sync 數據同步寫入磁盤
3. shutdown -h now 關掉服務後立即關機
4. chgrp root filename 更改文件所屬組
5. chown 更改文件所屬用戶
6. chmod 更改文件屬性:d(表示是目錄文件還是一般文件)rwxrwxrwx分別爲4+2+1=7,7+7+7; 第一個屬性表示該文件類型,d=directory,l=link,b=block,c=character(bc爲設備文件devce). ..
7. mkdir [-mp] filename 是建立目錄用的命令,make directory的縮寫,-m:設置文件權限,直接設置,不要管默認權限.-p:幫組直接建立所需要的目錄遞歸.
例:mkdir -p test1/test2/test3/test4 加了-p參數後,可以建立多層目錄.
mkdir -m 711 test2 加了-m參數後可直接設置權限
8. touch [-acdemt] filename 修改文件時間與創建新文件.
status time(ctime,-c),access time(atime,-a)指文件狀態
-a:公修改access time
-c:公修改時間,而不建立文件
-d:後面可以接日期,也可以使用 --date="日期或時間"
-m:公修改mtime
-t:後面可以接時間,格式爲[YYMMDDhhmm]
9. su 用來"變換身份"
10. cat 將文件內容讀出來
11. ls -al 可簡單通過文件第一屬性來了解這個文件的類型.查看當前目錄所有文件,及其屬性.
12. cd [path] Change Directory的縮寫,用來切換工作目錄的命令
13. pwd [-p] Print Working Directory,顯示當前所在的目錄,-p:顯示出實際中徑,而非使用link路徑
14. rmdir [-p] filename 刪除"空"目錄,只能刪除空目錄,加上-p參數後能將一個路徑目錄一次刪除,但必須爲空目錄
15. rm [-fir] 文件或目錄 -f:(force)強制刪除, -i:刪除前詢問, -r:遞歸刪除,常用在目錄的刪除
rm -rf test 將目錄下的東西全都刪除
16. ll =ls -l 簡略寫法
17. cp [-adfilprsu] source destination
18. mv [-fiv] source destination 移動文件與目錄,或重命名 -u(update)若文件已存在,且源文件比較新,纔會更新.
mv [options] s1 s2 s3. .. directory
mv filename1 filename2 這樣就將filename1重命名了.
19. basename path 獲取最後的文件名
dirname path 獲取目錄名
20. cat:由第一行開始顯示文件內容
tac:從最後一行開始顯示,可以看出tac與cat字母相反
nl:顯示的時候輸出行號
more:一頁一頁地顯示文件內容
less:與more類似,但它可以向前翻頁
tail:只看最後幾行
od:以二進制方式讀取文件內容
21. head [-n number] filename,-n:表示顯示幾行的意思,顯示前幾行
22. tail [-n number] filename,-n:表示顯示幾行的意思,顯示後幾行
23. od [-t TYPE] 可以查看執行類文件,-t:後面可以接各種"類型"的輸出
a:使用默認的字符來輸出
c:使用ASCII字符來輸出
d[size]:使用十制進來輸出
o[size]:使用浮點數值來輸出
x[size]:使用十六進制輸出
這個命令對普通用戶來說作用不大,但對工程師來說非常有用,他們能讀懂二進制內容
24. umask [-S],-S:加上S參數以字符形式顯示默認權限,指定的是"該默認值需要減掉的權限",r w x分別是4 ,2, 1,也就是說,當要去掉寫權限時,就輸入2,要去掉讀權限時,就輸入4,要去掉讀與寫的權限時,就輸入6,要去掉讀與執行的權限就輸入5,如:umask
022
25. chattr [+-=] [ASacdistu] filename 設置文件隱藏屬性
+:增加某個特殊參數,其它原本存在的參數不動
-:刪除某個特殊參數,其他原本存在的參數不動
=:設置一定,且公有後面接的參數
A:當設置了A屬性時,這個文件或目錄的訪問時間aime將不能被修改,例如可避免手提電腦有磁盤I/O錯誤的情況
發生
S:這個功能有類似sync,就是將數據同步寫入磁盤中
a:設置a之後,這個文件將只能增加數據,而不能刪除,只有root才能設置這個屬性.
c:這個屬性設置後,將會自動將此文件"壓縮",在讀取的時候將會自動解壓縮
d:當執行dump(備份)程序的時候,設置d屬性將可使該文件或目錄具有轉儲功能
i:i的作用很大,它可以讓一個文件"不能被刪除.改名,設置連接,也無法寫入或新增數據"對於系統安全有很大幫組
j:當使用ext3文件系統格式時,設置j屬性會使文件在寫入時先記錄在journal中,但是,當文件系統設置參數爲
data=journalled時,由於已經設置了日誌,所以這個屬性無效
s:當文件設置了s參數時,它將會從這個硬盤空間完全刪除
u:與s相反,當使用u來設置文件時,數據內容其實還存在磁盤中,可以用來還原刪除
26.chmod xyz filename, 設置文件或目錄的SUID SGID Stichy Bit屬性.1爲Sticky Bit,2爲SGID,4爲SUID. 例:chmod 1777 filename.前面1表示設置Sticky Bit屬性
27.file filename: 如果想知道某個文件的基本信息,例如屬於ASCII,數據文件還是二進制文件且其中是否使用動態函數庫等信息.
28. which [-a] command 尋找執行文件.-a:將所有可找到命令均列出而不僅僅列出第一個找到的命令名稱.
29. whereis [-hmsu] filename/directory 尋找特定文件
-b:只找二進制文件
-m:只找在幫組文件manual路徑下的文件
-s:只找源文件
-u:沒有幫組文件的文件
30. locate filename: locate,whereis都是通過數據庫來搜索的,所以速度比較快,但有一個缺點就是默認數據庫
是每天更新一次的.也可以手動更新.
31. find [PATH] [option] [action]: 功能強大的搜索功能.PS:要指定在哪個目錄下搜索,否則默認當前目錄.
-atime n:在n天之前的"一天之內"訪問過的文件
-ctime n:在n天之前的"一天之內"修改過狀態的文件
-mtime n:在n天之前的"一天之內"修改過的文件
-newer file:file爲一個存在的文件,意思是"只要文件比file要新就列出來"
例: find / -perm +7000 -exec ls -l {} \
-exec後面的ls -l是額外的命令,{}表示"由find找到的內容","\;"表示-exec命令到此爲止.
不知道全名的時候,可能過通配符*,如:find -name '*fly*': 則會查找名字含有'fly'的文件
32. df [-ahikHTm] [directory/filename] 查看當前磁盤最大允許容量,已用的容量,當前所在目錄的已用容量.
du :同上
33. ln [-sf] 源文件 目標文件 :建立連接文件,不加-s建立硬連接,加-s建立符號連接.
34. fdisk [-l] 磁盤分區
fdisk /dev/hdb 分驅/dev/hdb,這裏進入fdisk畫面中.
35. mke2fs [-bioLj] 設備名稱
36. fsck [-Atcary] 設備名稱
37. badblocks [-svw] 設備名稱,和fsck一樣,都是用來檢查硬盤錯誤的命令
38. mount 磁盤的載入與卸載 mount -o loop .iso directory:可以將鏡像文件掛載
39. mknod 修改磁盤參數
40. gzip [-cdt#] filename : 壓縮與解壓縮
-c:將壓縮的數據輸出到屏幕上,可通赤婁據流重導來處理
-d:解壓縮的參數
-t:可以用來檢驗一個壓縮文件的一致性,看文件有無錯誤
-#:壓縮等級,-1最快,但壓縮比最差,-9最慢.
zcat filename :查看一個壓縮文件內容
41. bzip2,bzcat:同上,compress擴展名爲.Z,gzip爲.gz,bzip2爲.bz2.
42. tar [-cxtzjvfpPN] filename\directory
-c:建立壓縮文件的參數命令(create的意思)
-x:解壓縮文件的參數命令
-t:查看tarfile裏的文件,前三個參數只能有一個存在,不能同時存在.
-z:是否需要用gzip壓縮
-j:是否同時具有bzip2的屬性,是否要用bzip2壓縮.
-v:壓縮的過程中顯示文件
-f:使用文件名,在f後要立即接文件名,不要再加參數
-p:使用原文件的原來屬性,很重要
-N:
tar -cvf /tmp/etc.tar /etc 僅打包,不壓縮.
tar -zcvf /tmp/etc.tar.gz /etc 打包後,以gzip壓縮
tar -ztvf /tmp/etc.tar.gz 查看壓縮文件內容,加上前面對應的方式z或j很重要
43. dd if="input_file" of="outptu_file" bs="block_size" count="number"
if:是輸入文件,也可以是設備
of:輸出
bs:規劃的一個塊的大小,如果沒有設置時,默認是512字節
count:多少個bs的意思
例: dd if=/etc/passwd of=/tmp/passwd.back
一般用來備份文件.
44. dos2unix -k -n hosts.dos hosts.linux將範例一已經變成DOS格工的hosts轉換
linux格式到hosts.linux
unix2dos 相反
在不同系統中共用文件時必須經過這兩個轉換. 不同系統中的換行符不同,windows的DOS是CRLF,linux是LF,windows佔用空間大.
45. alias lm='ls -al' 命令別名設置功能
46. type [-tpa] name 不加任何參數時,type會顯示出name是外部命令還是bash內置命令.
加入-t參數時,type會將name通過下面這些文字顯示出它的意義
file: 表示爲外部命令
alias: 表示該命令爲命令別名所設置的名稱.
builtin:表示該命令爲bash內置的命令功能.
-p:如果後面接的name爲命令,會顯示完整文件名或顯示爲內置命令
-a:在PATH變量定義的路徑中,列出所有含有name的命令,包含alias
47. 變量的使用:
顯示變量值, echo $variable 只需在變量名前加上$就能顯示變量的值
例: myname=Kenfly && echo $myname 會顯示Kenfly
當一個變量名稱尚未設置時,默認的內容是"空"的,變量設置是要符合某些規定,否則會失效:
1.變量與變量內容以等號"="來連接
2.等號兩邊不能直接接空格符
3.變量名稱只能是英文字毌與數字,但數字不能是開頭字符
4.若有空格符,可以使用雙引號""或單引號將變量內容結合起來,但要特別注意,雙引號內的特殊字符可以保持變量特性,但單引號內的特殊字符則僅爲一般字符
5.必要時需要以轉義符"\"將特殊符號(如Enter,$,\,空格符,等)變成一般符號
6.在一串命令中,還需要通過其他命令提供的信息,可以使用這樣的方式`command`(特別注意,`是鍵盤上方的數字鍵1左邊的那個鍵,非單引號)
7.若變量爲擴展變量內容,需要以雙引號及$變量名稱如"$PATH":/home繼續類加內容
8.若該變量需要在其他子程序中執行,則需要用export使變量變成環境變量,如"export PATH"
9.通常大寫字毌爲系統默認變量,自行設置變量可以使用小寫字毌,便於判斷
10.取消變量的方法:"unset 變量名稱"
48. 在這串命令中,`之內的命令將先執行,而其執行出來的結果將作爲外部輸入信息
如: ls -l `locate crontab`,它的含義是,先用locate將文件名數據都列出來,再用ls命令來處理
49. 環境變量的使用:
env:列出所有變量的信息:
HOME:代表用戶的家目錄,我們使用的cd ~到用戶的家目錄就是用這個功能
SHELL:告訴我們,當前的這個環境使用的shell是哪個程序
HISTSIZE:與"歷史命令"有關,即我們曾經執行過的命令可以被記錄下來的數目
ENV:這個是用戶所遙的個性化環境設置文件的讀取文件
MAIL:當使用mail命令收信時,系統會去讀取的郵件信箱文件
PATH:就是執行文件搜索的路徑,目錄之間以冒號:分隔,文件的搜索是按順序由PATH的變量內的目錄來查詢
LANG:這個很重要,就是語系文件
RANDOM:這是隨機數變量,能產生介於0~32767這間的數,要使用0~9之間的數值時,可以用declare聲明數值類型:
declare -i number=$RANDOM*10/32767 ; echo $number
PS1:提示符的設置
\d:代表日期
\H \h:代表主機名稱
\t \T \A:顯示時間
\u:當前用戶的賬號名稱
\v:bash的版本信息
\w \W:利用basename取得工作目錄名稱
\#:執行的第幾個命令
\$:提示符,如果是root時,提示符爲#,否則就是$.
如: PS1='[\u@\h \w \A #\#]\$'
$: 這個表示"當前這個Shell的進程號",即爲PID
?: 表示上一個執行命公的回傳碼,成功一般返回0,否則返回非0值
50. read [-pt] variable(變量)
-p:後面可以接提示符
-t:後面可以接等待的"秒數",這個比較有意思,不會一直等待用戶.
read var : 讓用戶通過鍵盤輸入內容,將內容變成var變量值
60. declare [-aixr] variable
-a:將後面的variable定義爲數組(array)
-i:將後面的variable定義爲整數數字(integer)
-x:用法與export一樣,就是將後面的variable變成環境變量
-r:將一個variable的變量設置成只讀,該變量不可更改內容,也不能取消設置(unset)
範例:讓變量sum對100+300+50求和
# sum=100+300+50 && echo $sum :這命令將顯示100+300+50,而不是我們想要的結果,這是因爲sum是文字變量
正確做法是應先聲明sum爲整型
: declare -i sum=100+300+50 && echo $sum
61. var=${str-newvar} :若str這個變量內容存在,剛var設置爲str,否則設置爲"newvar"
62. alias rm='rm -i' :命令別名
unalias rm :取消命令別名
63. history:列出當前內存的所有歷史記憶
history 3:列出當前最近的3個命令
history -w:在默認的情況下,會將歷史記錄寫入~/.bash_history中
!number: 執行第幾條命令的意思.
!command: 由最近的命令向前搜索"命令串開頭爲command"的命令,並執行.
64. 如果想讓用戶登錄後獲取一些消息,可以將消息加入/etc/motd中 例:
vi /etc/motd
hello
用戶登錄後會顯示"hello"消息
65. /etc/profile :這個文件設置了幾個重要的變量,例如"PATH,USER,MAIL,HOSTNAME,HISTSIZE,umask"
/etc/inputrc :這個文件設置了鍵盤熱鍵設置的數據內容.
/etc/bashrc :這個文件確定umask的功能,同時也確定了提示符的內容(就是那個PS1)
~/.bash_profile,~/.bash_login,~/.profile 這3個文件通常只要一個即可
~/.bashrc : 一般將自己的需要輸入到這個文件,個性化設置等,命令別名,路徑,每次執行shell腳本時都會重新讀取這個文件,而~/.bash_profile則只有在登錄時纔讀取一次
~/.bash_logout這個文件記錄"當我註銷bash後,系統再幫我做完什麼操作後才離開"
66. source file:讓設置文件立即生效.也可以以小數點.代替source
67. stty [-a]:(setting tty終端的意思) stty也可以幫組設置終端的輸入按鍵代表的意義
例: stty erase ^h :從此之後,刪除字符就得要使用[Ctrl]+H鍵 執行stty erase ^?就可恢復[backspace]
68. 通配符的使用:
cp *[A-Z]* /tmp :只要文件名裏含有至少一個大寫字母就可以將文件複製出來.
[],僅表示一個字符,而這個字符的定義可以是範圍
ls -lda /etc/*[0-9]* :找出/etc下所有含有數字的文件
ls -lda /etc/*[35]* : 只想找出含有3及5的文件名的文件
ls -lda /etc/[!a-z]* :不想要有小寫字母開頭的文件
` `(非' '),的功能也可以利用$()來替換:
例:cd /lib/modules/$(uname -r)/kernel 在$()裏的命令會先執行
69. [數據流重導向]
"1>","1>>" ("1"可省)標準輸出,stdin 前者是重建輸出,後者是在原文件添加輸出,都有創建文件功能.
"2>","2>>" 錯誤輸出,stderr.
例:
find / -neme sbin 1>./Desktop/right.txt 2> ./Desktop/wrong.txt
PS: /dev/null 它的功能有點像"黑洞"的垃圾桶功能,當輸入的任何東西導向到這個虛擬的垃圾桶設備時,"它就會憑空消失不見了".
輸入同一文件的正確寫法: find /home -name testing >list 2>&1
"<":解釋是"將原本需要由鍵盤輸入的數據通過文件來讀入"
如: cat > catfile :通過鍵盤輸入數據保存在catfile上,按下C+D結束輸入.
可以: cat > catfile < somefile :將文件somefile內容輸入到catfile
"<<":表示"結束輸入字符" 如: cat > catfile << eof : 當鍵盤輸入eof時結束輸入,不需要按下C+D.很方便.PS:eof不會寫入文件中
70. [管道命令]: 每個管道的前後都是"命令",後一個命令的輸入是前一個命令的輸出.
"|" : ls -al /etc | less :
cut: [-d] 後面接分隔符,與-f一起使用
[-f]根據-d的分隔符將一段消息分爲數段,用-f取出第幾段的意思.
[-c] 以字符爲單位取出固定的字符範圍.
例: echo $PATH | cut -d ':' -f 5
echo $PATH | cut -c 4- 將第4個字符後的全部輸出 還可以 4-5 -4...
last | cut -d ' ' -f 1: 用last將這個月登錄的信息中,僅留下用戶名稱.
grep:
grep [-acinv] '搜索字符串' filename
-a: 將二進制文件以文本文件的方式搜索數據
-c: 計算找到'搜索字符串' 的次數
-i: 忽略大小寫的不同,所以大小寫視爲相同.
-n: 順便輸出行號.
-v: 反向選擇,即顯示出沒有'搜索字符串'內容的那一行
例: last | grep 'root' : 將last中出現root的一行取出來.
sort: [重要]
sort [-fbMnrtuk] [file or stdin]
-f: 忽略大小寫的差異.
-b: 忽略最前面的空格符部分.
-M: 以月份的名字來排序,
-n: 使用"純數字"進行排序(默認是以文字類型來排序的).
-r: 反向排序.
-u: 就是uniq,相同的數據中,僅出現一行表示.
-t: 分隔符,默認是tab鍵.
-k: 按那個字段(field)來進行排序.
例: cat /etc/passwd | sort -t ':' -k 3 :以':'來分隔,以第三欄來排序.
uniq:
-i: 忽略大小寫
-c: 進行計數
例: last | cut -d ' ' -f 1 | sort | uniq -c 使用last顯示賬號,僅取出賬號欄,進行排序後令取出一位.
wc:
wc [-lwm] 可以知道文件有多少字,多少行,多少字符
-l: 僅顯示多少行.
-w: 僅顯示多少字(英文單詞)
-m: 多少字符.
cat /etc/man.config | wc 輸出的三個數字分別表示"行數,字數,字符數"
[雙向重導向]: tee [-a] file :當想將一段數據流保存進文件裏又想馬上顯示在stdout上.
-a: 以累加(append)的方式將數據加入file中.
例: last | tee last.list | cut -d " " -f1 :將last的輸出存一份到last.list文件中.
tr:
tr [-ds] SET1 ...
-d: 刪除消息中的SET1字符串.
-s: 替換重複的字符.
例: last | tr '[a-z]' 'A-z' :將last輸出的消息中,所有小寫變成大寫字母
cat /home/test/dostxt | tr -d '\r' > dostxt-noM: 將DOS文件的換行符^M符號刪除.
col:
-x: 將tab鍵轉換成對等的空格鍵.
例: cat -A /etc/man.config 此時會看到很多^I的符號,那就是tab.
cat /etc/man.config | col -x | cat -A | more 如此一來,[tab]就會被替換成爲空格鍵,輸出美觀多了.
join, paste,expand 未看.
[拆分命令][重要]
split [-bl] file PREFIX : 可以將一個大文件,根據文件大小或行數來拆分,將大文件拆分爲小文件,快速又有效.
-b: 後接要拆分的文件大小,可加單位,如b,k,m等.
-l: 按行數進行拆分.
例: cd /tmp; split -b 300k /etc/termcap termcap(文件前綴名,將會生成XXXa,XXXb...).
要將上面生成的3個小文件合成一個文件,文件名爲termcapback.可以:
cat termcap* >> termcapback
例: ls -al / | split -l 10 - lsroot :使用ls輸出的作息中,每10行記錄成一個文件.重點在"-", 一般來說如果需要stdout/stdin時,
但偏偏又沒有文件,有的只是-,那麼-就會被當成stdin或stdout.
71. grep [-acinv] '搜索字符串' filename
-a: 在二進制文件中,以文本文件的方式搜索數據
-c: 計算找到'搜索字符串' 的次數
-i: 忽略大小寫的不同,所以大小寫視爲相同
-n: 輸出行號
-v: 反向選擇,即顯示出沒有'搜索字符串'內容的那一行
例: grep 'root' /var/log/secure
last | grep root :用last顯示最近登錄信息,只顯示行裏有root的那些行
72. 臨時修改語系: LANG=en; export LANG
73. [正則表達式]:
[1]. 利用"[]"來搜過集合字符."[]"中不論有幾個字符,都只代表"一個"字符.當要搜索test 或taste這兩個單詞時: [grep -n 't[ae]st' regular_express.txt]
[2] 如果想搜索到有"oo"字符,則:[grep -n 'oo' regular_express.txt].
[3] 如果不想前面有"g"的話,可以利用集合字符的反向選擇"[^]"來實現: [grep -n '[^g]oo' regular_express.txt].
[4] 如果不想前面有小寫字母可以 :[grep -n '[^a-z]oo' regular_express.txt].
[5] [a-z],[A-Z],[0-9],[a-zA-Z0-9].
[6]行首與行尾字符^$.
^:查詢一行字符串裏有the,如果只想讓the在行首列出:[grep -n '^the' regular_express.txt]
("^"在[]內和在[]外是不同的,在內表示反選,在外表示字位在行首)
$:如果想查出行尾結束爲小數點(.)的一行,處理方法爲:[grep -n '\.$' regular_express.txt],注意小數點有特別含義,所以必須使用轉義符.
找出哪一行是空白行: [grep -n '^$' regular_express.txt].
[GOOD]: 假設已經知道在一個shell腳本或設置文件中,空白行與開頭爲#的那一行是註釋,如果將數據提供給別人參考時,可以將這些數據略掉,
以節省紙張: [grep -v '^$' ~kenfly/.vimrc | grep -v '^#'] (-v表示反向選擇輸出)
[7]任意一個字符(.)與重複字符(*): (要與通配符區別開來)
(.):表示"絕對有一個任意字符"
假設要找出g??d字符串: [grep -n 'g..d' regular_express.txt]
(*)表示"重複0個或多個前面的RE字符"
如果:[grep -n 'o*' file]將會把所有數據顯示出來
如果要顯示到少兩個o以上的字符串時: [grep -n 'ooo*' file].
如果要找出"任意數字"的行: [grep -n '[0-9][0-9]*' file].
".*" 表示"零個或多個任意字符"
如要顯示兩邊爲g的字符即 "g......g" : [grep -n 'g.*g' file]
[8]限定連續重複字符範圍{}
74. sudo apt-get remove --purge XX: 連配置文件一起清除
75. 終止一個進程可以使用[ services 服務名 stop ] 或[ kill 進程標識符 ]\
查看進程可以用ps,pstree,top等.