注意:
在下面的講解中,每個命令都有很多的參數(shù)說明(選項),我們只講其中的幾個,關(guān)鍵是讓學(xué)生掌握命令的語法;學(xué)生學(xué)習(xí)完語法后,就可以自己按照參數(shù)書寫各種命令,這也是我們最終的目的。常用命令,我們在企業(yè)級開發(fā)過程中,經(jīng)常書寫的命令。會非常被容易記住,不常用的命令,只要我們學(xué)習(xí)完了語法之后,在去查找參數(shù)手冊,會非常容易的解決我們的問題,所以,每個命令不是建立在死記硬背的基礎(chǔ)上的,要理解語法+查找參數(shù)=解決問題
3.1 Linux 文件與目錄管理
在Linux系統(tǒng)中,所有的的目錄結(jié)構(gòu)為樹狀結(jié)構(gòu),最頂級的目錄為根目錄 /。
在實(shí)際開發(fā)過程中,文件的操作是非常頻繁也是非常重要的
下面的章節(jié)我們將學(xué)習(xí)下Linux系統(tǒng)所有的系統(tǒng)目錄和文件通過命令是如何進(jìn)行管理的
3.1.1 目錄常用命令
- ls: 列出目錄
- cd: 切換目錄
- pwd: 顯示目前的目錄
- mkdir:創(chuàng)建一個新的目錄
- rmdir:刪除一個空的目錄
- cp: 復(fù)制文件或目錄
- rm: 移除文件或目錄
- mv: 移動文件與目錄或修改文件與目錄的名稱
自動補(bǔ)全
- 在敲出 文件/ 目錄 / 命令 的前幾個字母之后, 按下
tab鍵 - 如果還存在其他 文件 / 目錄 / 命令, 再按一下tab鍵, 系統(tǒng)會提示可能存在的命令
1) ls (列出目錄)
ls命令相當(dāng)于我們在Windows系統(tǒng)中打開磁盤、或者打開文件夾看到的目錄以及文件的明細(xì),如下圖
【查看磁盤下的目錄與文件】

【查看文件夾下的目錄與文件】

注意:在Linux系統(tǒng)當(dāng)中, ls 命令算是比較常用的命令
使用者權(quán)限:所有使用者都可使用。
語法如下:
ls [選項] 目錄名稱
選項與參數(shù):
- -a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)
- -d :僅列出目錄本身,而不是列出目錄內(nèi)的文件數(shù)據(jù)(常用)
- -l :長數(shù)據(jù)串列出,包含文件的屬性與權(quán)限等等數(shù)據(jù);(常用)
將根目錄下的所有文件列出來(含屬性與隱藏檔)
ls -al ~
執(zhí)行效果如下

ls -l
ls -l 可以查看文件夾下文件的詳細(xì)信息, 從左到右 依次是:
-
權(quán)限(A區(qū)域), 第一個字符如果是
d表示目錄 - 硬鏈接數(shù)(B區(qū)域), 通俗的講就是有多少種方式, 可以訪問當(dāng)前目錄和文件
- 屬主(C區(qū)域), 文件是所有者、或是叫做屬主
- 屬組(D區(qū)域), 文件屬于哪個組
- 大?。‥區(qū)域):文件大小
- 時間(F區(qū)域):最后一次訪問時間
- 名稱(G區(qū)域):文件的名稱
ls

總結(jié)
以上三種是經(jīng)常被使用到的命令
它們之間的區(qū)別是
ls 顯示不隱藏的文件與文件夾
ls -l 顯示不隱藏的文件與文件夾的詳細(xì)信息
ls -al 顯示所有文件與文件夾的詳細(xì)信息
2) pwd顯示當(dāng)前目錄
執(zhí)行pwd命令相當(dāng)于我們在Windows系統(tǒng)路徑導(dǎo)航欄中查看到的當(dāng)前瀏覽位置信息
如下圖

pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在當(dāng)前目錄的命令。
使用者權(quán)限:所有使用者都可使用。
查看當(dāng)前所在目錄
pwd -P
執(zhí)行效果如下

3) cd (切換目錄)
Linux的cd切換目錄,相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵點(diǎn)開不同的目錄
注意:在Linux系統(tǒng)當(dāng)中, cd 命令算是比較常用的命令
cd是Change Directory的縮寫,這是用來變換工作目錄的命令
使用者權(quán)限:所有使用者都可使用。
語法如下:
cd [相對路徑或絕對路徑]
在正式學(xué)習(xí)cd命令前面,我們通過下面一個座位圖的形式講解下相對路徑和絕對路徑是怎么表現(xiàn)的。

-
絕對路徑:
路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。 -
相對路徑:
路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd ../man 這就是相對路徑的寫法啦!
1、使用相對路徑定位目標(biāo)
- 特征: 相對路徑 輸入路徑時, 最前面不是以 "/" 開始的, 表示相對 當(dāng)前目錄 所在的位置
- 缺點(diǎn): 參照工作目錄 發(fā)生變化 相對路徑也要發(fā)生變化
需求1: 當(dāng)前工作目錄是 /usr, 使用相對路徑 切換到 /usr/tmp 目錄下
需求2: 當(dāng)前工作目錄是 /root, 使用相對路徑 切換到 /usr/tmp 目錄下

執(zhí)行效果如下
注意:
cd ~ 表示回到根目錄

2、使用絕對路徑定位目標(biāo)
- 特征: 絕對路徑 在輸入路徑時, 最前面是以
/開始的, 表示 從 根目錄 開始的具體目錄位置 - 優(yōu)點(diǎn): 定位準(zhǔn)確, 不會因?yàn)?工作目錄變化 而變化
需求1: 當(dāng)前工作目錄是 /usr, 使用絕對路徑 切換到 /usr/tmp 目錄下
需求2: 當(dāng)前工作目錄是 /root, 使用絕對路徑 切換到 /usr/tmp 目錄下

執(zhí)行效果如下

總結(jié)
-
相對路徑 在輸入路徑時, 最前面不是以
/開始的 , 表示相對 當(dāng)前目錄 所在的目錄位置 -
絕對路徑 在輸入路徑時, 最前面是以
/開始的, 表示 從 根目錄 開始的具體目錄位置
4) mkdir(創(chuàng)建目錄)
引子:
Linux的mkdir命令相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵新建文件夾
mkdir命令用于建立名稱為 dirName 之子目錄
使用權(quán)限:于目前目錄有適當(dāng)權(quán)限的所有使用者
語法
mkdir [-p] dirName
參數(shù)說明:
- -p 確保目錄名稱存在,不存在的就建一個
建立一個名為jinyanlong 的子目錄
mkdir jinyanlong
執(zhí)行效果如下

查看新建的 文件

在工作目錄下的 aaa目錄中,建立一個名為 bbb的子目錄。 若 aaa目錄原本不存在,則建立一個。(注:本例若不加 -p,且原本 aaa目錄不存在,則產(chǎn)生錯誤。)
mkdir -p aaa/bbb
執(zhí)行效果如下
這里為了顯示更直觀,我們使用了tree命令
后面在講解到y(tǒng)um的時候,會詳細(xì)講解
此處先使用
image.png
由上圖我們發(fā)現(xiàn),aaa目錄被強(qiáng)制創(chuàng)建,里面包含了bbb文件。
5) rmdir(刪空目錄)
Linux的rmdir命令相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵刪除文件夾。
稍微有點(diǎn)不同的就是在Linux中刪除子目錄的時候,如果主目錄下沒有了目錄以及文件,會連同主目錄同時刪除了(需要寫Linux帶有P的參數(shù))
rmdir命令刪除空的目錄
使用權(quán)限:于目前目錄有適當(dāng)權(quán)限的所有使用者。
語法
rmdir [-p] dirName
參數(shù):
- -p 是當(dāng)子目錄被刪除后使它也成為空目錄的話,則順便一并刪除。
將工作目錄下,名為 jinyanlong 的子目錄刪除 :
rmdir jinyanlong
在工作目錄下的 aaa目錄中,刪除名為 bbb的子目錄。若 bbb刪除后,aaa目錄成為空目錄,則 aaa同時也會被刪除
rmdir -p aaa/bbb
總結(jié):
rmdir -p aaa/bbb也就是說
在刪除bbb目錄完成后,發(fā)現(xiàn)aaa目錄也是空目錄了,在刪除完bbb后aaa也同時被刪除了。
6) cp(文件復(fù)制)
Linux的cp命令相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵復(fù)制文件或者目錄
cp命令主要用于復(fù)制文件或目錄。
使用權(quán)限:于目前目錄有適當(dāng)權(quán)限的所有使用者
語法
cp [options] source dest
或
cp [options] source... directory
參數(shù)說明:
- -a:此選項通常在復(fù)制目錄時使用,它保留鏈接、文件屬性,并復(fù)制目錄下的所有內(nèi)容。其作用等于dpR參數(shù)組合。
- -d:復(fù)制時保留鏈接。這里所說的鏈接相當(dāng)于Windows系統(tǒng)中的快捷方式。
- -f:覆蓋已經(jīng)存在的目標(biāo)文件而不給出提示。
- -i:與-f選項相反,在覆蓋目標(biāo)文件之前給出提示,要求用戶確認(rèn)是否覆蓋,回答"y"時目標(biāo)文件將被覆蓋。
- -p:除復(fù)制文件的內(nèi)容外,還把修改時間和訪問權(quán)限也復(fù)制到新文件中。
- -r/R:若給出的源文件是一個目錄文件,此時將復(fù)制該目錄下所有的子目錄和文件。
- -l:不復(fù)制文件,只是生成鏈接文件。
我們將當(dāng)前目錄"aaa/"下的所有目錄以及文件復(fù)制到新目錄"ccc"下,輸入如下命令:
1、數(shù)據(jù)準(zhǔn)備
創(chuàng)建aaa目錄并且aaa下包含bbb目錄
mkdir -p aaa/bbb
mkdir -p ccc
執(zhí)行效果如下

aaa目錄下有bbb
ccc下面沒有目錄和文件
2、執(zhí)行復(fù)制
cp –r aaa/* ccc
執(zhí)行效果如下
我們將aaa下面的所有文件、目錄復(fù)制到了目錄c下面

總結(jié):
用戶使用該指令復(fù)制目錄時,必須使用參數(shù)"-r"或者"-R"。
如果不加參數(shù)"-r"或者"-R",只復(fù)制文件,而略過目錄
7) rm(刪除目錄)
Linux的rm命令相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵刪除文件或者目錄
rm命令用于刪除一個文件或者目錄。
使用權(quán)限:于目前目錄有適當(dāng)權(quán)限的所有使用者
語法
rm [options] name...
參數(shù):
- -i 刪除前逐一詢問確認(rèn)。
- -f 即使原檔案屬性設(shè)為唯讀,亦直接刪除,無需逐一確認(rèn)。
- -r 將目錄及以下之檔案亦逐一刪除。
如果我們要刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項"-r",例如:

rm -r ccc
執(zhí)行刪除,如下圖

注意
文件一旦通過rm命令刪除,則無法恢復(fù),所以必須格外小心地使用該命令
如果刪除文件(比如.sh 、.txt)
直接使用rm name.txt
8) mv(移動文件)
Linux的mv命令相當(dāng)于我們在Windows中通過鼠標(biāo)或者快捷鍵剪切(+重命名)+粘貼文件或者目錄
mv 命令用來為文件或目錄改名、或?qū)⑽募蚰夸浺迫肫渌恢?/p>
語法
mv [options] source dest
mv [options] source... directory
參數(shù)說明:
- -i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
-
-f: 在 mv 操作要覆蓋某已有的目標(biāo)文件時不給任何指示;
image.png
將文件 aaa 更名為 bbb :
image.png
1、創(chuàng)建aaa目錄、
mkdir aaa
2、開始重命名
mv aaa bbb
執(zhí)行后

將ccc目錄放入ddd目錄中。
注意,如果ddd目錄不存在,則該命令將ccc改名為ddd。
創(chuàng)建ccc
mkdir ccc

開始移動
mv ccc/ ddd

由上圖我們發(fā)現(xiàn),由于ddd目錄不存在,所以在mv的時候?qū)cc目錄改名為了ddd。
3.2 Linux 文件基本屬性
在Wndows系統(tǒng)中,我們可以選中一個文件,右鍵屬性,可以查看到這個文件的文件類型(基本信息),以及文件的權(quán)限信息,在Linux中,它是通過不同字符的排序順序來表示文件的類型以及權(quán)限所屬信息的。
Linux系統(tǒng)是一種典型的多用戶系統(tǒng),不同的用戶處于不同的地位,擁有不同的權(quán)限。為了保護(hù)系統(tǒng)的安全性,Linux系統(tǒng)對不同的用戶訪問同一文件(包括目錄文件)的權(quán)限做了不同的規(guī)定。
下面我們就一起學(xué)習(xí)下Linux系統(tǒng)不同權(quán)限的文件和目錄在怎么表示的
在Linux中我們可以使用ll或者ls –l命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:
ls -l

實(shí)例中,bin文件的第一個屬性用"d"表示。"d"在Linux中代表該文件是一個目錄文件。
在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等。
- 當(dāng)為[ d ]則是目錄
- 當(dāng)為[ - ]則是文件;
- 若是[ l ]則表示為鏈接文檔(link file);
- 若是[ b ]則表示為裝置文件里面的可供儲存的接口設(shè)備(可隨機(jī)存取裝置);
- 若是[ c ]則表示為裝置文件里面的串行端口設(shè)備,例如鍵盤、鼠標(biāo)(一次性讀取裝置)。
接下來的字符中,以三個為一組,且均為『rwx』 的三個參數(shù)的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執(zhí)行(execute)。 要注意的是,這三個權(quán)限的位置不會改變,如果沒有權(quán)限,就會出現(xiàn)減號[ - ]而已。
每個文件的屬性由左邊第一部分的10個字符來確定(如下圖)。

從左至右用0-9這些數(shù)字來表示。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權(quán)限。
第4-6位確定屬組(所有者的同組用戶)擁有該文件的權(quán)限,第7-9位確定其他用戶擁有該文件的權(quán)限。
其中,第1、4、7位表示讀權(quán)限,如果用"r"字符表示,則有讀權(quán)限,如果用"-"字符表示,則沒有讀權(quán)限;
第2、5、8位表示寫權(quán)限,如果用"w"字符表示,則有寫權(quán)限,如果用"-"字符表示沒有寫權(quán)限;第3、6、9位表示可執(zhí)行權(quán)限,如果用"x"字符表示,則有執(zhí)行權(quán)限,如果用"-"字符表示,則沒有執(zhí)行權(quán)限。
3.3 Linux文件屬主和屬組
引子:
對于一個文件來說,它都有一個特定的所有者,也就是對該文件具有所有權(quán)的用戶。
也就是所謂的屬主,它屬于哪個用戶的意思。
除了屬主,還有屬組,也就是說,這個文件是屬于哪個組的(用戶所屬的組)。
文件的【屬主】有一套【讀寫執(zhí)行權(quán)限r(nóng)wx】
文件的【屬組】有一套【讀寫執(zhí)行權(quán)限r(nóng)wx】
還有它權(quán)限,下面我們在介紹

在以上實(shí)例中,aaa文件是一個目錄文件,屬主和屬組都為 itcast,屬主有可讀、可寫、可執(zhí)行的權(quán)限(rwx);與屬主同組的其他用戶有可讀可寫和可執(zhí)行的權(quán)限(rwx);其他用戶也有可讀和可執(zhí)行的權(quán)限(r-x)。
3.3.1 chgrp更改屬組
實(shí)際開發(fā)中我們經(jīng)常會創(chuàng)建新建目錄和文件,一般情況下,通過命令進(jìn)行新建,
在創(chuàng)建完成后,使用不同的用戶訪問,可能就會出現(xiàn)報錯,無法訪問等等問題。
然后經(jīng)過一番這查找,發(fā)現(xiàn)該有的文件都在,大小寫也沒問題,路徑也沒問題
其實(shí)并不是這些問題。而是權(quán)限問題導(dǎo)致我們無法訪問!是因?yàn)橐粋€文件默認(rèn)隸屬于一個屬組,而使用其他用戶訪問這個文件肯定無法訪問(因?yàn)樵L問用戶所屬的組和文件所在的不是同一個組)
那么怎么可以正常訪問呢?其實(shí)就是通過更改用戶組(用戶組、文件組)來解決這些問題
chgrp命令用于變更文件或目錄的所屬群組。
文件或目錄權(quán)限的的擁有者由所屬群組來管理。您可以使用chgrp指令去變更文件與目錄的所屬群組,設(shè)置方式采用群組名稱或群組識別碼皆可
為了方便初學(xué)者記憶,可以將 chgrp 理解為是 "change group" 的縮寫
語法如下
chgrp [-cfhRv][--help][--version][所屬群組][文件或目錄...] 或 chgrp [-cfhRv][--help][--reference=<參考文件或目錄>][--version][文件或目錄...]
改變文件的群組屬性
我們通過root用戶進(jìn)入(如下圖),上接上面的例子
我們的aaa文件的屬主和屬組都屬于itcast(如下圖)

我們現(xiàn)在通過chgrp命令將文件aaa的屬組更改成root(其他也可以)
chgrp -v root aaa
執(zhí)行效果如下

我們通過下面的命令查詢文件aaa的屬組是否發(fā)生了變化,執(zhí)行
ls -l

由上圖我們發(fā)現(xiàn),文件aaa的屬組由itcast變成了root
這樣的話,文件的屬組就發(fā)生了變化。
3.3.2 chown更改屬主和屬組**
我們?yōu)榱俗屢恍┯脩粲袡?quán)限查看某一文檔,比如是一個時間表,而編寫時間表的人要具有讀寫執(zhí)行的權(quán)限(屬主)
我們想讓一些用戶知道這個時間表的內(nèi)容,而不讓他們修改,所以我們可以把這些用戶都劃到一個組(屬組),然后來修改這個文件的權(quán)限,讓用戶組可讀,這樣用戶組下面的每個用戶都是可讀的
Linux是多任務(wù)操作系統(tǒng),所有的檔案皆有擁有者。利用 chown 可以將檔案的擁有者加以改變。一般來說,這個指令只有是由系統(tǒng)管理者(root)所使用,一般使用者沒有權(quán)限可以改變別人的檔案擁有者,也沒有權(quán)限可以自己的檔案擁有者改設(shè)為別人。只有系統(tǒng)管理者(root)才有這樣的權(quán)限
使用權(quán)限 : 管理員賬戶
語法如下
chown [–R] 屬主名 文件名
chown [-R] 屬主名:屬組名 文件名
我們通過root用戶進(jìn)入(如下圖),上接上面的例子
我們的aaa文件的屬主屬于itcast、屬組屬于root
我們現(xiàn)在通過chgrp命令將文件aaa的屬主更改成root,執(zhí)行
chown root aaa
效果如下

我們通過下面的命令查詢文件aaa的屬主是否發(fā)生了變化,執(zhí)行
ls -l

由上圖我們發(fā)現(xiàn),文件aaa的屬主和屬組都變成了root。
我們將aaa文件的擁有者與群組改回為itcast:
注意:chown命令可以更改屬主和屬組
chown itcast:itcast aaa
我們通過下面的命令查詢文件aaa的屬主是否發(fā)生了變化,執(zhí)行
ls -l

由上圖可知,aaa文件的屬主和屬組都被更改回來了。
3.3.3 chmod權(quán)限命令
Linux文件屬性有兩種設(shè)置方法,一種是數(shù)字,一種是符號
Linux的文件調(diào)用權(quán)限分為三級 : 文件屬主、屬組、其他。利用 chmod 可以控制文件如何被他人所調(diào)用。
使用權(quán)限 : 所有使用者
語法
chmod [-cfvR] [--help] [--version] mode file...
參數(shù)說明
mode : 權(quán)限設(shè)定字串,格式如下
[ugoa...][[+-=][rwxX]...][,...]
解釋:
u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬于同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+表示增加權(quán)限、- 表示取消權(quán)限、= 表示唯一設(shè)定權(quán)限。
r 表示可讀取,w 表示可寫入,x 表示可執(zhí)行,X 表示只有當(dāng)該檔案是個子目錄或者該檔案已經(jīng)被設(shè)定過為可執(zhí)行。
1) 數(shù)字權(quán)限
Linux文件的基本權(quán)限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權(quán)限。
先復(fù)習(xí)一下剛剛上面提到的數(shù)據(jù):文件的權(quán)限字符為:『-rwxrwxrwx』, 這九個權(quán)限是三個三個一組(owner/group/others就是所說的三個一組 )的,我們也可以使用數(shù)字來代表各個權(quán)限,各權(quán)限的分?jǐn)?shù)對照表如下
各權(quán)限的數(shù)字對照表:[r]:4;[w]:2;[x]:1;[-]:0

每種身份(owner/group/others)各自的三個權(quán)限(r/w/x)分?jǐn)?shù)是需要累加的,例如當(dāng)權(quán)限為: [-rwxrwx---] 分?jǐn)?shù)則是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= --- = 0+0+0 = 0
所以等一下我們設(shè)定權(quán)限的變更時,該文件的權(quán)限數(shù)字就是770啦,變更權(quán)限的指令chmod的語法是這樣的
chmod [-R] xyz 文件或目錄
選項與參數(shù):
- xyz : 就是剛剛提到的數(shù)字類型的權(quán)限屬性,為 rwx 屬性數(shù)值的相加。
- -R : 進(jìn)行遞歸(recursive)的持續(xù)變更,亦即連同次目錄下的所有文件都會變更
上面的 可以表示如下
chmod -R 770 檔案或目錄
上面說了這么多,我們舉例說明一下:
我們進(jìn)入itcast用戶創(chuàng)建文件czbk.txt
touch as.txt
然后切換到root
比如,我們?nèi)绻獙s.txt這個文件所有的權(quán)限都設(shè)定啟用

那么命令如下:
chmod -R 777 as.txt

由此可見,as.txt的屬主權(quán)限、屬組權(quán)限、其他權(quán)限都發(fā)生了改變
由之前的【-rw-rw-r--】變成【-rwxrwxrwx】
根據(jù)前面的換算我們已經(jīng)知道如何將一個文件的屬主、屬組、其他權(quán)限換算成數(shù)字了,換算成數(shù)字后,我們只需要通過chmod命令即可更改文件的權(quán)限
2) 符號權(quán)限
還有一個改變權(quán)限的方法,就是 符號權(quán)限,我們先回顧下之前提到的9個權(quán)限
- (1)user 屬主權(quán)限
- (2)group 屬組權(quán)限
- (3)others 其他權(quán)限
那么我們就可以使用 u, g, o 來代表三種身份的權(quán)限!
此外, a 則代表 all,即全部的身份。讀寫的權(quán)限可以寫成 r, w, x,也就是可以使用下表的方式來看

如果我們需要將文件權(quán)限設(shè)置為 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設(shè)定:
上接上面的例子,如下圖
我們將as.txt的權(quán)限設(shè)置為-rwxr-xr--
執(zhí)行
chmod u=rwx,g=rx,o=r as.txt

由上圖我們發(fā)現(xiàn),as.txt的權(quán)限變成了-rwxr-xr--
假如我們要將權(quán)限去掉而不改變其他已存在的權(quán)限呢?舉個例子,比如我要拿掉全部人的可讀權(quán)限,則
chmod a-r as.txt
執(zhí)行如下

由此可見,as.txt的其他權(quán)限都沒有了,變成了【---】
3.4 綜合案例
在前面的章節(jié)中我們講解了用戶、用戶組、文件屬主、屬組以及權(quán)限,知識點(diǎn)比較零散,下面,我們就通過一個簡單小案例把這些知識點(diǎn)串聯(lián)起來
需求:
比如一個公司的開發(fā)團(tuán)隊有三個用戶:java、erlang、golang有一個文件目錄tmp/work供他們開發(fā),如何實(shí)現(xiàn)讓這三個用戶都對其具有寫權(quán)限
1、首先,我們創(chuàng)建三個賬戶(切換到root)
adduser java
adduser erlang
adduser golang
執(zhí)行效果如下

2、增加用戶組
groupadd -g 8888 dev-group
執(zhí)行效果如下

3、創(chuàng)建公共文件并設(shè)置權(quán)限
給文件/tmp/project2019/設(shè)置屬組為dev-group
mkdir /tmp/project2019
chown -R :dev-group /tmp/project2019/
或者
chgrp -R dev-group /tmp/project2019/
執(zhí)行效果如下

4、將用戶添加到組
gpasswd -a java dev-group
gpasswd -a erlang dev-group
gpasswd -a golang dev-group
執(zhí)行效果如下

查詢dev-group組下所有用戶
grep 'dev-group' /etc/group
執(zhí)行效果如下

5、切換到j(luò)ava用戶
切換到j(luò)ava用戶看看是否有寫入權(quán)限
su java

新建文件
在我們上面創(chuàng)建的目錄tmp/project2019/下面創(chuàng)建文件
mkdir java-files-new

由此發(fā)現(xiàn),我們在tmp/project2019/下面創(chuàng)建文件發(fā)生了權(quán)限不足,我們?nèi)ゲ榭聪聇mp/project2019/的文件屬性,如下圖
我們在/tmp目錄下執(zhí)行
ls -l
執(zhí)行效果如下

我們發(fā)現(xiàn)目錄project2019的文件屬性為【drwxr-xr-x】
根據(jù)前面學(xué)的知識,我們拆分如下
【d】:文件類型
【rwx】:屬主
【r-x】:屬組
【r-x】:其他
現(xiàn)在答案就出來了,也就是說我們的屬組權(quán)限是【r-x】,只有讀和執(zhí)行權(quán)限,沒有寫入權(quán)限,那么下面我們就給project2019目錄增加寫入權(quán)限。
6、增加寫入權(quán)限
給project2019目錄增加寫入權(quán)限,執(zhí)行下面的命令(前面已經(jīng)學(xué)習(xí)過了)
記得切換到root下執(zhí)行
chmod -R 770 project2019
執(zhí)行效果如下

此時我們發(fā)現(xiàn)project2019目錄的屬組權(quán)限變成了【rwx】即可讀、可寫、可執(zhí)行
7、切換用戶,繼續(xù)寫入
su java
mkdir java-files-new
ls -l
執(zhí)行效果如下

由此發(fā)現(xiàn),這個時候我們有了寫入權(quán)限,java-files-new文件被成功寫入
那么,其他兩個用戶golang、erlang也是和java一個組的,他們能不能正常寫入呢,我們試試(從root切換過去)
su
su erlang
mkdir erlang-files-new
==============================
su
su golang
mkdir golang-files-new
ls -l
執(zhí)行效果(erlang新建文件)

執(zhí)行效果(golanglang新建文件)

查看所有文件

由此可見,我們組的三個用戶都成功創(chuàng)建了文件(擁有了寫入權(quán)限)
8、驗(yàn)證結(jié)論
為了驗(yàn)證上面的結(jié)論,我們新增一個用戶itbeijing
看看能否正常新建文件
useradd itbeijing
su itbeijing
mkdir itbeijing-files-new
執(zhí)行效果如下

由上圖我們發(fā)現(xiàn),我們剛剛新創(chuàng)建的用戶在創(chuàng)建文件的時候發(fā)現(xiàn)了權(quán)限不足。
由此說明用戶itbeijing用戶的屬組和文件的屬組不一樣,所以沒有權(quán)限。
3.5 總結(jié)
在企業(yè)級開發(fā)過程中,實(shí)際操作目錄是最經(jīng)常出現(xiàn)的,對于目錄常用命令我們要熟練掌握并能熟練編寫
因?yàn)長inux是多用戶系統(tǒng),所以權(quán)限也是非常核心和重要的,我們要熟練編寫權(quán)限(屬主、屬組、其他權(quán)限)的常用命令。


