例子:
成都做網(wǎng)站、網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風(fēng)格、經(jīng)驗豐富的設(shè)計團(tuán)隊。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
對于上面的語法 chmod 【{ugoa}{+-=}{rwx}】【文件或目錄】,我們要知道ugoa分別是:u:表示所有者,g:表示所屬組,o:表示其他人,a:表示所有人。而rwx表示的意思如下:
對于【mode=421】【文件或目錄】,這是我們將權(quán)限用數(shù)字表示,其中 r 表示4,w表示2,x表示1,分別是2的0次方,1次方,2次方。那么我們可以這樣理解:具有 rwx 權(quán)限的數(shù)字就是 7,具有 rw- 權(quán)限的數(shù)字是 6,具有 r-- 權(quán)限的數(shù)字是 4。
示例1:我們賦予 tmp 目錄下的 tmp.log 所有者 x 的權(quán)限;賦予 所屬組 w 權(quán)限,其他人 w 權(quán)限。
將上面例子改為用 數(shù)字來操作,也就是說我們要給 tmp.log賦予的文件權(quán)限是 rwxrw-rw-,用數(shù)字表示是766。
我們還可以遞歸賦予權(quán)限,也就是加上 -R 參數(shù)給指定目錄下的所有文件或目錄賦予指定權(quán)限。
示例2:給 tmp 目錄下所有文件和目錄賦予 776 的權(quán)限
這里我們通過useradd【用戶名】命令創(chuàng)建用戶,然后通過passwd【用戶名】輸入密碼,這兩個命令后面會將。我們通過這兩個命令創(chuàng)建 vae 用戶
然后我們將tmp.log的所有者更改為 vae 用戶:chown vae tmp.log
其中umask 執(zhí)行顯示結(jié)果是 0022,第一個0表示特殊權(quán)限,后面我們會單獨(dú)進(jìn)行講解有哪幾種特殊權(quán)限。022表示權(quán)限的掩碼值,我們用7 7 7 減去 0 2 2得到755(是每一位相減),表示的就是下面通過加上-S輸出的rwxr-xr-x,這個值用數(shù)字表示就是755.
這個意思說明創(chuàng)建一個文件的默認(rèn)權(quán)限所有者為rwx,所屬組為rx,其他人為rx。也就是說創(chuàng)建一個新文件默認(rèn)權(quán)限為 rwxr-xr-x,我們創(chuàng)建一個文件來驗證一下:
我們發(fā)現(xiàn)使用touch命令創(chuàng)建了一個文件a.txt,然后發(fā)現(xiàn)權(quán)限并不是rwxr-xr-x,而是rw-r--r--。對比發(fā)現(xiàn)少了三個x,也就是少了可執(zhí)行權(quán)限。這是為什么呢?
這是因為在Linux系統(tǒng)中,所有新創(chuàng)建的文件都是沒有可執(zhí)行權(quán)限的。這是出于Linux系統(tǒng)的一種自我保護(hù),因為類似的病毒木馬程序都是具有可執(zhí)行權(quán)限的。所以在Linux系統(tǒng)中,新創(chuàng)建的文件是沒有可執(zhí)行權(quán)限的。
那么我們?nèi)绾卧O(shè)置默認(rèn)權(quán)限呢?比如我們想將新創(chuàng)建的文件權(quán)限設(shè)置為rwxr-xr--,也就是754。我們用777減去754得到023。也就是通過執(zhí)行 umask 023 來完成默認(rèn)權(quán)限設(shè)置。
1. 先來了解一下Linux數(shù)據(jù)是如何保存和查詢的
對操作系統(tǒng)來說,數(shù)據(jù)分為兩種:1. 用戶數(shù)據(jù) (user data) 2.元數(shù)據(jù) (metadata)。用戶數(shù)據(jù)就是保存和記錄文件的內(nèi)容。比如一個1M的ppt文件,500K的txt文件。這都屬于用戶數(shù)據(jù)。這個文件總有屬性吧,比如大小、修改時間、訪問時間、創(chuàng)建時間、存儲的位置(文件所在的inode)、文件創(chuàng)建者等等信息。這些屬性信息或者理解為匯總信息,我們稱它為元數(shù)據(jù)。一句話,用戶數(shù)據(jù)是文件的真實(shí)內(nèi)容,而元數(shù)據(jù)則是匯總信息。
在 Linux 中,元數(shù)據(jù)中的 inode 號(inode 號即索引節(jié)點(diǎn)號)才是文件的唯一標(biāo)識而非文件名。文件名僅是為了方便人們的記憶和使用,系統(tǒng)或程序通過 inode 號尋找正確的文件數(shù)據(jù)塊。
2. 查看文件對應(yīng)的inode號
134474678 latest.tar.gz
linux查看文件對應(yīng)的inode號
可以看出latest.tar.gz這個文件, inode 號是134474678,Linux查找讀寫該文件時,以為個inode號碼為標(biāo)識,而不是文件名。文件名類似于網(wǎng)站域名,僅僅是方便人類記憶。
也就是說, inode134474678有一個硬鏈接,它就是latest.tar.gz。
3. 根據(jù)inode號查找對應(yīng)的文件
那么,問題來了,系統(tǒng)上有沒有第二個文件,它的inode號碼也是13447467。
使用find查找一下:
查找結(jié)果如下:
/root/latest.tar.gz
/root/latest2.tar.gz
linux根據(jù)inode號查找對應(yīng)的文件
硬盤上真的有第二個文件它的inode號碼也是134474678,像這種情況,我們認(rèn)為inode134474678有兩個硬鏈接。當(dāng)然,這是本文作者提前準(zhǔn)備好的。
為解決文件的共享使用,Linux 系統(tǒng)引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統(tǒng)解決了文件的共享使用,還帶來了隱藏文件路徑、增加權(quán)限安全及節(jié)省存儲等好處。
4. 確認(rèn)硬鏈接的數(shù)量
查看一下文件latest.tar.gz
輸出結(jié)果如下:
-rwxr-xr-x. 2 root root 8743850 Oct 11 15:00 latest.tar.gz
請留意輸出的結(jié)果中的數(shù)字2,表示該文件存在2個硬鏈接。
正常情況下,一個inode只有一個鏈接,如下例
輸出結(jié)果:
-rw-r--r--. 1 root root 9 Nov 21 11:39 abc.txt
請留意輸出的結(jié)果中的數(shù)字1,表示該文件只存在1個硬鏈接,默認(rèn)情況下,文件都是只有一個硬鏈接的。
5. 查看軟鏈接
再來看一個文件
lrwxrwxrwx. 1 root root 15 Sep 26 15:57 /dev/stdout - /proc/self/fd/1
linux查看軟鏈接
我們發(fā)現(xiàn),/dev/stdout實(shí)際上指向另一個文件/proc/self/fd/1,這就是軟鏈接。類似于Windows系統(tǒng)上的快捷方式。
6. 軟鏈接與硬鏈接的區(qū)別
6.1 軟鏈接特點(diǎn)
6.2 硬鏈接特點(diǎn)
ln鏈接符原理如下:
Linux ln鏈接符原理圖
7. 創(chuàng)建文件的鏈接
Linux ln命令是一個非常重要而且常用命令,它用于為文件或者目錄創(chuàng)建鏈接。
7.1 創(chuàng)建軟鏈接
創(chuàng)建一個文件,用于演示軟鏈接。
創(chuàng)建軟鏈接示例:
檢查結(jié)果:
輸出文件屬性
lrwxrwxrwx. 1 root root 8 Nov 26 17:48 soft123.txt - soft.txt
linux創(chuàng)建軟鏈接
可以看出這個文件指向當(dāng)前目錄soft.txt,配置成功。7.2 創(chuàng)建硬鏈接
創(chuàng)建一個文件,用于演示硬鏈接。
創(chuàng)建硬鏈接,沒有使用選項
檢查結(jié)果:
輸出文件屬性:
-rw-r--r--. 2 root root 0 Nov 26 17:47 hard123.txt
linux創(chuàng)建硬鏈接
留意以上輸出數(shù)字2,表明該文件有2個副本。
8. 總結(jié)
ln命令可以創(chuàng)建文件的副本,也可以創(chuàng)建軟鏈接。
Linux 命令連接符大全:
1、 ; (分號)這個連接符是依次順序執(zhí)行寫出的命令,空格可有可無,圖中是大家要了解的。
2、如圖,先用ls查看目錄文件內(nèi)容,在寫入命令 date;pwd;touch one ?(查看系統(tǒng)時間;查看當(dāng)前目錄;創(chuàng)建名為one的文件。)命令執(zhí)行完成后在用ls查看是否有one文件。
3、 邏輯與關(guān)系,第一個命令成功 第二個命令才會執(zhí)行,如果第一個命令執(zhí)行失敗第二個不執(zhí)行,具體如圖是大家要理解的;
4、如圖 命令為:# ls -l date (查看相信信息與系統(tǒng)時間),發(fā)現(xiàn)兩個命令全部執(zhí)行了。
5、如圖命令為:# ok date(ok這個命令是沒有的,date查看系統(tǒng)時間),得到的結(jié)果是兩個命令都沒有執(zhí)行。
6、|| 是邏輯或的關(guān)系,第一個命令成功 第二個命令不執(zhí)行,如果第一個命令執(zhí)行失敗第二個執(zhí)行,具體如圖是大家要理解的。
7、如圖 命令為:# ls -l || date (查看相信信息或系統(tǒng)時間),發(fā)現(xiàn)只是執(zhí)行了查看相信信息的命令。
8、如圖命令為:# ok || date(ok這個命令是沒有的,date查看系統(tǒng)時間),得到的結(jié)果是ok是錯誤的命令所以不能執(zhí)行,而date執(zhí)行了得到了系統(tǒng)時間。
1 . 使用方式 :ln [option] source_file dist_file (source_file是待建立鏈接文件的文件,dist_file是新創(chuàng)建的鏈接文件)
-f 建立時,將同檔案名刪除.
-i 刪除前進(jìn)行詢問.
ln -s abc cde 建立abc 的軟連接
ln abc cde 建立abc的硬連接,
對于一個文件來說,有唯一的索引接點(diǎn)與之對應(yīng),而對于一個索引接點(diǎn)號,卻可以有多個文件名與之對應(yīng)。因此,在磁盤上的同一個文件可以通過不同的路徑去訪問該文件。注意在Linux下是一切皆文件的啊,文件夾、新加的硬盤 ...都可以看著文件來處理的啊。
連接有軟連接和硬連接(hard link)之分的,軟連接(symbolic link)又叫符號連接。符號連接相當(dāng)于Windows下的快捷方式。
不可以對文件夾建立硬連接的,我們通常用的還是軟連接比較多。
eg:
ln -s source dist # 建立軟連接
ln source dist # 建立硬連接
軟鏈接實(shí)際上只是一段文字,里面包含著它所指向的文件的名字,系統(tǒng)看到軟鏈接后自動跳到對應(yīng)的文件位置處進(jìn)行處理;相反,硬聯(lián)接為文件開設(shè)一個新的目錄 項,硬鏈接與文件原有的名字是平權(quán)的,在Linux看來它們是等價的。由于這個原因,硬鏈接不能連接兩個不同文件系統(tǒng)上的文件。
(1)軟連接可以 跨文件系統(tǒng) ,硬連接不可以 。實(shí)踐的方法就是用共享文件把windows下的 aa.txt文本文檔連接到linux下/root目錄 下 bb,cc . ln -s aa.txt /root/bb 連接成功 。ln aa.txt /root/bb 失敗 。
(2)關(guān)于 I節(jié)點(diǎn)的問題 。硬連接不管有多少個,都指向的是同一個I節(jié)點(diǎn),會把 結(jié)點(diǎn)連接數(shù)增加,只要結(jié)點(diǎn)的連接數(shù)不是 0,文件就一直存在,不管你刪除的是源文件還是 連接的文件 。只要有一個存在 ,文件就 存在 (其實(shí)也不分什么源文件連接文件的 ,因為他們指向都是同一個 I節(jié)點(diǎn))。 當(dāng)你修改源文件或者連接文件任何一個的時候 ,其他的文件都會做同步的修改。軟鏈接不直接使用i節(jié)點(diǎn)號作為文件指針,而是使用文件路徑名作為指針。所以 刪除連接文件 對源文件無影響,但是刪除源文件,連接文件就會找不到要指向的文件 。軟鏈接有自己的inode,并在磁盤上有一小片空間存放路徑名.
(3)軟連接可以對一個不存在的文件名進(jìn)行連接 。
(4)軟連接可以對目錄進(jìn)行連接。
備 注:I節(jié)點(diǎn) :它是UNIX內(nèi)部用于描述文件特性的數(shù)據(jù)結(jié)構(gòu).我們通常稱I節(jié)點(diǎn)為文件索引結(jié)點(diǎn)(信息結(jié)點(diǎn)).i節(jié)點(diǎn)含有關(guān)于文件的大部分的重要信息,包括文件數(shù)據(jù)塊在 磁盤上的地址.每一個I節(jié)點(diǎn)有它自己的標(biāo)志號,我們稱為文件順序號.I節(jié)點(diǎn)包含的信息 1.文件類型 2.文件屬主關(guān)系 3.文件的訪問權(quán)限 4.文件的時間截.
最后 刪除符號鏈接,有創(chuàng)建就有刪除
rm -rf symbolic_name 注意不是rm -rf symbolic_name/
在Linux系統(tǒng)中,內(nèi)核為每一個新創(chuàng)建的文件分配一個Inode(索引結(jié)點(diǎn)),每個文件都有一個惟一的inode號。文件屬性保存在索引結(jié)點(diǎn)里,在訪問文件時,索引結(jié)點(diǎn)被復(fù)制到內(nèi)存在,從而實(shí)現(xiàn)文件的快速訪問。
鏈接是一種在共享文件和訪問它的用戶的若干目錄項之間建立聯(lián)系的一種方法。Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。符號連接相當(dāng)于Windows下的快捷方式。
硬鏈接說白了是一個指針,指向文件索引節(jié)點(diǎn),系統(tǒng)并不為它重新分配inode??梢杂?ln命令來建立硬鏈接。
語法:
ln [options] existingfile newfile(sexistingfile 待建立鏈接文件的文件,newfile是新創(chuàng)建的鏈接文件)
ln [options] existingfile-list directory
-f 建立時,將同檔案名刪除.
-i 刪除前進(jìn)行詢問.
ln -s abc cde 建立abc 的軟連接
ln abc cde 建立abc的硬連接,
用法:
第一種:為”existingfile”創(chuàng)建硬鏈接,文件名為”newfile”。
第二種:在”directory”目錄中,為”existingfile-list”中包含的所有文件創(chuàng)建一個同名的硬鏈接。
常用可選[options] –f 無論”newfile”存在與否,都創(chuàng)建鏈接。-n 如果”newfile”已存在,就不創(chuàng)建鏈接。
下面舉一些例子:
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
[ root@rekfan.com test]# ln file2 file2hand
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[ root@rekfan.com test]#
注意在創(chuàng)建鏈接前,file1 顯示的鏈接數(shù)目為1,創(chuàng)建鏈接后file1和file1hard的鏈接數(shù)目都變?yōu)?;file1和file1hard在inode號是一樣的file1和file1hard顯示的文件大小也是一樣。可見進(jìn)行了ln命令的操作結(jié)果:file1和file1hard是同一個文件的兩個名字,它們具有同樣的索引節(jié)點(diǎn)號和文件屬性,建立文件file1的硬鏈接,就是為file1的文件索引節(jié)點(diǎn)在當(dāng)前目錄上建立一個新指針。你可以刪除其中任何一個,如rm file2 ,每次只會刪除一個指針,鏈接數(shù)同時減一,當(dāng)鏈接數(shù)減為0時,內(nèi)核才會把文件內(nèi)容從磁盤上刪除。
還可以在不同目錄,但同一文件系統(tǒng)中建立文件的硬鏈接。設(shè)file1、file2在目錄/home/root/dir1中,下面的命令,在/home/root中建立file2的硬鏈接。
ln file2 /home/root/file2hard
下面的程序,是將dir1目錄中所有文件,在目錄dir2中建立硬鏈接
如果使用了 ln –f existingfile newfile,如果newfile已經(jīng)存在,則無論原來newfile是什么文件,只用當(dāng)前用戶對它有寫權(quán)限,newfile就成為exisitngfile的硬鏈接文件。
盡管硬鏈接節(jié)省空間,也是Linux系統(tǒng)整合文件系統(tǒng)的傳統(tǒng)方式,但是存在一下不足之處:
(1)不可以在不同文件系統(tǒng)的文件間建立鏈接
(2)只有超級用戶才可以為目錄創(chuàng)建硬鏈接。
軟鏈接克服了硬鏈接的不足,沒有任何文件系統(tǒng)的限制,任何用戶可以創(chuàng)建指向目錄的符號鏈接。因而現(xiàn)在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機(jī)器、不同網(wǎng)絡(luò)對文件進(jìn)行鏈接。
建立軟鏈接,只要在ln后面加上選項 –s,下面舉個例子
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[ root@rekfan.com test]# ln -s file1 file1soft
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft - file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
從上面鏈接后的結(jié)果可以看出來軟鏈接與硬鏈接,區(qū)別不僅僅是在概念上,在實(shí)現(xiàn)上也是不同的。區(qū)別:硬鏈接原文件&鏈接文件公用一個inode號,說明他們是同一個文件,而軟鏈接原文件&鏈接文件擁有不同的inode號,表明他們是兩個不同的文件;在文件屬性上軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出來,因為在本質(zhì)上硬鏈接文件和原文件是完全平等關(guān)系;鏈接數(shù)目是不一樣的,軟鏈接的鏈接數(shù)目不會增加;文件大小是不一樣的,硬鏈接文件顯示的大小是跟原文件是一樣的,這用強(qiáng)調(diào),因為是等同的嘛,而這里軟鏈接顯示的大小與原文件就不同了,file1大小是48B,而file1soft是5B,這里面的5實(shí)際上就是“file1”的大小。
總之,建立軟鏈接就是建立了一個新文件。當(dāng)訪問鏈接文件時,系統(tǒng)就會發(fā)現(xiàn)他是個鏈接文件,它讀取鏈接文件找到真正要訪問的文件。
在不同系統(tǒng)之間建立軟鏈接、對目錄建立鏈接,這里就不舉例了,讀者可以自己去嘗試,我也是在不斷實(shí)踐中學(xué)習(xí)的。
當(dāng)然軟鏈接也有硬鏈接沒有的缺點(diǎn),因為鏈接文件包含有原文件的路徑信息,所以當(dāng)原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統(tǒng)就找不到了~~,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移(呵呵);還有它要系統(tǒng)分配額外的空間用于建立新的索引節(jié)點(diǎn)和保存原文件的路徑。
補(bǔ)充一下:可以通過symlink來查看鏈接文件,可以用 man symlink來學(xué)習(xí)。
三、刪除鏈接
有創(chuàng)建就有刪除
rm -rf symbolic_name 注意不是rm -rf symbolic_name/
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft - file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[ root@rekfan.com test]# rm -rf file1soft
[ root@rekfan.com test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[ root@rekfan.com test]#
————————————
linux 軟連接和硬鏈接的區(qū)別:
————————————
4點(diǎn)不同 :
(1)軟連接可以 跨文件系統(tǒng) ,硬連接不可以 。
實(shí)踐的方法就是用共享文件把windows下的 aa.txt文本文檔連接到linux下/root目錄 下 bb,cc . ln -s aa.txt
/root/bb 連接成功 。ln aa.txt /root/bb 失敗 。
(2)關(guān)于 I節(jié)點(diǎn)的問題 。硬連接不管有多少個,都指向的是同一個I節(jié)點(diǎn),會把 結(jié)點(diǎn)連接數(shù)增加 ,只要結(jié)點(diǎn)的連接數(shù)不是 0,文件就一直存在 ,不管你刪除的是
源文件還是 連接的文件 。只要有一個存在 ,文件就 存在 (其實(shí)也不分什么 源文件連接文件的 ,因為他們指向都是同一個 I節(jié)點(diǎn))。 當(dāng)你修改源文件或者連接文件
任何一個的時候 ,其他的 文件都會做同步的修改 。軟鏈接不直接使用i節(jié)點(diǎn)號作為文件指針,而是使用文件路徑名作為指針。所以 刪除連接文件 對源文件無影響,但
是 刪除 源文件,連接文件就會找不到要指向的文件 。軟鏈接有自己的inode,并在磁盤上有一小片空間存放路徑名.
(3)軟連接可以對一個不存在的文件名進(jìn)行連接 。
(4)軟連接可以對目錄進(jìn)行連接。
備注:I節(jié)點(diǎn) :它是UNIX內(nèi)部用于描述文件特性的數(shù)據(jù)結(jié)構(gòu).我們通常稱I節(jié)點(diǎn)為文件索引結(jié)點(diǎn)(信息結(jié)點(diǎn)).i節(jié)點(diǎn) 含有關(guān)于文件的大部分的重要信 息,包括文件數(shù)據(jù)塊在
磁盤上的地址.每一個I節(jié)點(diǎn)有它自己的標(biāo)志號,我們稱為文件順序號.I節(jié)點(diǎn)包含的信息 1.文件類型 2.文件屬主關(guān)系 3.文件的訪問權(quán)限 4.文件的時間截.