哪怕我們配不上自己的野心扑媚,也不要辜負了現(xiàn)在所受的苦難。
Linux shell 是個交互式工具,使用戶可以啟動程序圾浅、管理文件以及管理Linux系統(tǒng)上的進程。shell的核心是命令行提示符憾朴,是shell的交互部分狸捕,它允許你輸入文本命令,之后解釋命令并在內(nèi)核中執(zhí)行众雷。
shell包含了一組內(nèi)置命令灸拍,可以用來完成一系列的操作,比如復制文件砾省、移動文件鸡岗、重命名文件以及顯示和終止系統(tǒng)上正在運行的程序。
shell命令也可以寫入文件中作為程序來執(zhí)行编兄,這些文件被稱作shell腳本轩性。
1.啟動shell
大多數(shù)Linux發(fā)行版的默認shell都是GNU bash shell,它是作為常規(guī)程序運行的,通常是在用戶登錄終端時啟動翻诉,登錄時系統(tǒng)啟動的shell取決于用戶賬戶的配置炮姨。
/etc/passwd 文件中包含了所有用戶列表以及每個用戶的基本配置信息捌刮。
2.shell提示符
默認的shell提示符是美元符號$,這個符號表明shell在等待用戶輸入舒岸。
3.Linux文件系統(tǒng)
首先我們先了解一下Linux的文件系統(tǒng)的構建方式绅作,這和Windows有很大區(qū)別。
Windows為每個物理磁盤驅(qū)動器分配一個盤符蛾派,每個驅(qū)動器都會有自己的目錄結構俄认,以便訪問存儲在其上的文件。區(qū)別于Windows洪乍,Linux在路徑名中不使用驅(qū)動器盤符眯杏,Linux將文件存儲在單個目錄結構中,這個目錄我們稱之為 虛擬目錄壳澳。
虛擬目錄結構包含一個稱為根(root)目錄的基礎目錄岂贩,根目錄下的目錄和文件會按照訪問它們的目錄路徑一一列出,這點和Windows類似巷波。
舉個例子萎津,Linux文件路徑/home/valie/Document/read.txt,表明read.txt位于Document目錄,Document又位于valie目錄抹镊,valie則在home目錄中锉屈,但并沒有說明home目錄存在于哪個物理磁盤中。
Linux的根驅(qū)動器一般用來存儲系統(tǒng)文件垮耳,而用戶文件通常存儲在另一個驅(qū)動器里颈渊,上面所舉例的home目錄就是位于這個驅(qū)動啟器中,那么在沒有給出驅(qū)動器盤符的情況下终佛,系統(tǒng)又是如何訪問到home目錄的呢俊嗽?
這里就要提到 ‘掛載點 ’的概念,那么什么是掛載點查蓉?
Linux會在根驅(qū)動器中創(chuàng)建一些特別的目錄乌询,這些目錄稱之為‘掛載點’,但事實上這些目錄并不是存儲在根驅(qū)動器上豌研,而是存儲在另一個驅(qū)動器上妹田。
- / : 虛擬目錄的根目錄,通常不會在這里存儲文件
- /usr :用戶安裝軟件的目錄
- /var :可變目錄鹃共,用以存放經(jīng)常變化的文件鬼佣,比如日志文件
- /bin :二進制目錄,存放許多GNU用戶級的工具
- /dev :設備目錄霜浴,Linux在這里創(chuàng)建設備節(jié)點
- /home :主目錄晶衷,Linux在這里創(chuàng)建用戶目錄
- /etc :系統(tǒng)配置文件目錄
- /boot :啟動目錄,存放啟動文件
- /opt :可選目錄,通常用于存放可選的軟件包
- /lib :庫目錄晌纫,存放系統(tǒng)和應用程序的庫文件
- /tmp :臨時目錄税迷,可以在該目錄創(chuàng)建和刪除臨時工作文件
在啟動一個新的shell提示符后,會話通常是從用戶的主目錄開始锹漱。
4.切換目錄
cd + 絕對路徑
cd .. //切換到當前目錄的父目錄
5.文件和目錄列表
-
ls
顯示當前目錄下的文件和目錄 -
ls -F
添加-F參數(shù)用于區(qū)分目錄和文件箭养,它會在目錄名后添加正斜線/,另外會在可執(zhí)行文件后加星號* -
ls -a
顯示當前目錄下的全部文件哥牍,包括隱藏文件(以點.開頭毕泌,通常用來保存配置信息) -
ls -R
列出當前目錄下的所有文件和目錄,包括子目錄下的文件和目錄 -
ls -l
參數(shù)-l會以長列表的格式輸出嗅辣,每一行都列出了單個文件或目錄的更多信息撼泛。
6.ls命令的兩種命令行參數(shù)
- 單字母參數(shù):以英文破折號開始
- 全字母參數(shù):以雙英文破折號開始
大部分參數(shù)都有單字母和雙字母兩種版本,而有的則只有一種澡谭,部分列舉如下:
單字母 | 全字母 | 含義 |
---|---|---|
-a | --all | 輸出包括以.開頭的隱藏文件 |
-F | --classify | 給條目追加文件類型標識符 |
-R | --recursive | 遞歸地列出子目錄內(nèi)容 |
-i | --inode | 顯示每個文件的索引節(jié)點 |
-h | --human-readable | 輸出文件或目錄的大小愿题,以字節(jié)為單位 |
-s | --size | 輸出每個文件的塊大小 |
-l | 按長列表格式輸出 | |
--author | 輸出每個文件的作者 |
另外,也可以一次使用多個參數(shù)蛙奖。多個雙破折線參數(shù)必須分開輸入抠忘,而多個單破折線可以組合成一個字符串,如用-s參數(shù)列出文件的塊大小外永,用-a參數(shù)列出所有文件,用-i參數(shù)列出每個文件的索引點拧咳,用-l參數(shù)產(chǎn)生一個長列表伯顶,組合起來就是:
ls -sail
7.過濾輸出列表
ls + 文件名
:當使用文件名作為過濾器時,ls命令只顯示這個文件的信息骆膝;
有時候我們并不確定文件的確切名稱祭衩,或者文件的類型,這時候可以使用標準通配符來輸出滿足要求的文件:
- 問號?代表一個字符
- 星號*代表零個或多個字符
比如我想查找Applet文件阅签,但是并不確定它的文件類型掐暮,這時候可以這樣使用過濾方法:
ls Applet*
8.創(chuàng)建文件
有時,在寫入數(shù)據(jù)之前我們希望這個文件就已經(jīng)存在政钟,這時可以用touch命令來創(chuàng)建空文件路克。
touch + 文件名
,例如:
9.復制文件
- cp命令用于將文件或目錄復制到另一個位置养交,最基本的用法就是cp+源文件名+目標文件名精算,例如:
從上圖可以看出碎连,time.txt是一個全新的文件灰羽,有自己的索引節(jié)點。
另外,也可以采用絕對路徑來復制文件:
- 在cp命令中使用命令行參數(shù),以下是部分參數(shù)
參數(shù) | 含義 |
---|---|
-a | 歸檔文件玫镐,并保留原有的屬性 |
-b | 創(chuàng)建已存在的目標文件的備份,而非覆蓋它 |
-f | 強制覆蓋已存在的目標文件怠噪,不提示 |
-p | 保留文件屬性恐似,如訪問時間、修改時間等 |
-r | 遞歸地復制文件 |
-R | 遞歸地復制目錄 |
從上圖可以看出對于已經(jīng)存在的time1.txt文件舰绘,強行復制之后擁有和源文件time.txt一樣的修改時間蹂喻。
10.使用ln命令創(chuàng)建鏈接文件
有時捂寿,我們需要在系統(tǒng)上維護同一份文件的一到多個副本口四,用上面?zhèn)€的cp命令復制多個副本并同時維護的方式雖然可行,但很費時費力秦陋。這時我們可以用創(chuàng)建虛擬副本的方法來完使維護工作變得輕松起來蔓彩,這個虛擬副本就稱為鏈接。鏈接是目錄中指向文件真實位置的占位符驳概。
Linux下的兩種不同類型的文件鏈接:
- 硬鏈接赤嚼,創(chuàng)建方式:
ln + 源文件名 + 目標文件名
- 軟連接,即符號鏈接顺又,創(chuàng)建方式:
ln -s + 源文件名 + 目標文件名
硬鏈接與軟鏈接的區(qū)別在于更卒,硬鏈接只能在同種存儲媒體上的文件之間創(chuàng)建,不能在不同掛載點下的文件間創(chuàng)建稚照,也就是說不在同一個磁盤分區(qū)中文件之間不能創(chuàng)建硬鏈接蹂空,而是使用軟鏈接。
從上圖可以看出果录,time1.txt和time.txt文件的索引節(jié)點號是相同的上枕,表明實際上它們是同一個文件,并且在我修改了time.txt文件后(time.txt中添加了一行‘This is the first modification.’)弱恒,time1.txt文件中的內(nèi)容也同步改變了辨萍。
從上圖看到,文件time2.txt的索引節(jié)點號與time.txt不同返弹,說明time2.txt是一個單獨的文件锈玉,并且文件變小了,是因為它只需要存儲源文件的信息琉苇,并不需要存儲文件中的數(shù)據(jù)嘲玫。
10.重命名/移動文件或目錄
在Linux中,文件和目錄的重命名和移動使用的是mv命令(moving),例如:
需要注意的是并扇,移動一個有軟鏈接指向的文件會使得它的軟鏈接失效去团,如下圖time1.txt是一個指向time.txt的硬鏈接,time2.txt是一個指向time.txt的軟鏈接,當time.txt重命名為time3.txt后土陪,time2.txt軟鏈接已不再是一個有效鏈接昼汗,已經(jīng)無法訪問到它所指向的源文件中的內(nèi)容:
另外mv命令也用于將文件移動到別的目錄中顷窒,如下:
11.刪除文件
刪除文件的操作命令是rm,常用參數(shù)如下:
參數(shù) | 含義 |
---|---|
-i | interactive源哩,即刪除前詢問是否確認刪除 |
-f | force 鞋吉,即無視提示符,強制刪除 |
-r | recursive励烦,刪除目錄谓着,在刪除這一目錄前會事先刪除目錄中的內(nèi)容 |
同樣需要注意的是,當刪除一個帶有軟鏈接的文件時坛掠,它的軟鏈接會失效赊锚,硬鏈接保持有效。這是因為硬鏈接文件具有和源文件相同的索引節(jié)點號屉栓,硬鏈接會維持這個索引節(jié)點號來保留數(shù)據(jù)舷蒲,直到你刪除了最后一個指向這個索引節(jié)點的硬鏈接。這一點類似于OC中的引用計數(shù)友多。軟鏈接存放的是源文件的路徑牲平,當源文件已經(jīng)不存在時,軟鏈接中所指向的源文件路徑也就不可用了域滥,所以軟鏈接失效欠拾。
12.創(chuàng)建目錄
創(chuàng)建目錄不能使用touch命令骗绕,而是使用mkdir命令,如:
mkdir dir
13.刪除目錄
· 刪除目錄的基本命令是rmdir资昧, 但是rmdir只能刪除空目錄酬土,當目錄下有文件時,這個目錄就不能被刪除:
要想刪除一個非空目錄格带,我們得用到rm命令撤缴,rm -r + 目錄名稱
會遞歸地刪除目錄中的文件,最后再刪除目錄本身:
14.查看文件信息
stat + 文件名
可以查看文件的所有狀態(tài)信息
file + 文件名
查看文件類型
file命令將文件分為3類:
- 文本文件:包含可打印字符的文件
- 可執(zhí)行文件:可在系統(tǒng)上運行的文件
- 數(shù)據(jù)文件:包含不可打印的二進制字符叽唱,又不能在系統(tǒng)上運行的文件
15.查看文件內(nèi)容
- 使用cat命令查看文件所有數(shù)據(jù)內(nèi)容屈呕,cat命令常用的參數(shù)如下:
參數(shù) | 含義 |
---|---|
-n | 給所有行添加行號 |
-b | 只給有文本的行添加行號 |
-s | 將多個空白行壓縮成單個空白行 |
-e | 在每行結束處添加美元符$ |
-t | 用^+豎線去替代文中的制表符(ps:簡書寫作格式bug) |
使用cat命令會打印出文件的全部內(nèi)容,但是如果文件內(nèi)容非常多棺亭,那么查看文件內(nèi)容非常不便虎眨,這時可以使用more命令。
- 使用more命令查看文件內(nèi)容 -- 實現(xiàn)分頁查看
more命令常用的參數(shù)列舉:
參數(shù) | 含義 |
---|---|
+n | 從第n行開始顯示 |
-n | 設置每屏大小為n行 |
-s | 將多個空白行壓縮成單個空白行 |
使用的常用操作符有:
操作命令 | 含義 |
---|---|
Enter | 向下n行,默認為1行嗽桩,需要設置 |
cmd + F | 向下滾動一屏 |
空格鍵 | 向下滾動一屏 |
cmd + B | 返回上一屏 |
= | 輸出當前行的行號 |
V | 調(diào)出vi編輯器 |
Q | 退出more命令 |
- 使用head命令查看文件的開頭內(nèi)容岳守,默認顯示10行
- 使用tail命令查看文件的尾部內(nèi)容,默認顯示10行