1.使用者與群組
1.1 文件擁有者
提問:Linux有這么多使用者,還分什么群組观谦,有什么用绑改?
由于Linux是個多人多任務(wù)的系統(tǒng),因此可能常常會有多人同時使用這部主機(jī)來進(jìn)行工作作谭,為了考慮每個人的隱私權(quán)以及每個人喜好的工作環(huán)境,因此奄毡,文件擁有者的角色就顯得相當(dāng)重要了折欠。
1.2 群組概念
假設(shè)有一家人,家里有三兄弟:大毛吼过、二毛和三毛锐秦。這個家庭是登記在大毛名下的,所以是"大毛家有三個人盗忱,分別是大毛酱床、二毛、三毛"趟佃,這三個人都有自己的房間扇谣,并且共同擁有一個客廳。
使用者:由于大毛家三個人各自擁有自己的房間闲昭,所以二毛雖然可以進(jìn)入三毛的房間罐寨,但是二毛不能翻三毛的東西。因?yàn)槿块g是私人的序矩。
群組:由于共同擁有客廳衩茸,所以這三兄弟可以共享這個客廳。只有是客廳的東西贮泞,三兄弟都可以使用。
這么說來幔烛,"大毛家"就是所謂的"群組"啃擦,"三兄弟"就是分別為三個"使用者",而這個三個使用者是在同一個群組里的饿悬。雖然他們在同一個群組令蛉,但是我們也可以設(shè)定權(quán)限保護(hù)私有空間;也可以設(shè)定群組共享狡恬,群組里的讓共同分享珠叔。
1.3 其他人的概念
今天又有個人,叫小豬弟劲,與大毛家沒關(guān)系祷安。除非大毛家認(rèn)識小豬,才能讓小豬進(jìn)入大毛家兔乞。小豬就是所謂的"其他人"汇鞭。
因此凉唐,在Linux里面任何一個文件都具有"User、Group霍骄、Others"三種身份的權(quán)限台囱。
1.4 用戶身份與群組記錄的文件
在Linux系統(tǒng)中,默認(rèn)的情況下读整,所有的系統(tǒng)上的賬號與一般身份使用者簿训,還有root的信息都記錄在/etc/passwd文件內(nèi);個人密碼記錄在/etc/shadow文件內(nèi)米间;Linux所有的組名都記錄在/etc/group文件內(nèi)强品。
2.Linux文件權(quán)限概念
2.1 Linux文件屬性
命令"ls -al"就可以查看文件的權(quán)限屬性:
第一欄代表這個文件的類型與權(quán)限
-
第一自負(fù)代表文件是什么(目錄、文件车伞、鏈接文件等):
[d]:表示目錄择懂;
[-]:表示文件;
[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)"-"號而已。
第一組為"文件擁有者可具備的權(quán)限"药有,以上圖中"initial-setup-ks.cfg"文件為例毅戈,該文件的擁有者可以讀寫,但不可執(zhí)行愤惰;
第二組為"加入此群組的賬號的權(quán)限"苇经;
第三組為"非本人且沒有加入本群組的其他賬號的權(quán)限"。
第二欄表示又多少檔名連接到此節(jié)點(diǎn)(i-node):
每個文件都會將它的權(quán)限與屬性記錄到文件系統(tǒng)的i-node中宦言,因?yàn)槟夸洏涫褂梦募麃碛涗浬鹊ィ虼嗣總€檔名就連接到一個i-node。這個屬性記錄的奠旺,就是有多少不同的檔名連接到相同的一個i-node號碼令花。第七章詳解阻桅。
第三欄表示這個文件(或目錄)的擁有者賬號
第四欄表示這個文件的所屬群組
第五欄為這個文件的容量大小,默認(rèn)單位為bytes
第六欄為這個文件的建黨日期或修改日期
第七欄為這個文件的檔名
2.2 如何改變文件屬性與權(quán)限
這里先介紹幾個常用于群組兼都、擁有者嫂沉、各種身份的權(quán)限修改指令:
改變所屬群組:chgrp
注意:要被改變的組名必須要在/etc/group文件內(nèi)存在才行,否則會顯示錯誤扮碧。
用法:
改變文件擁有者:chown
注意:用戶必須是已經(jīng)存在系統(tǒng)中的賬號趟章,在/etc/passwd文件中有記錄的用戶名稱才能改變。
用法:
我們知道如何改變文件的群組與擁有者了慎王,那么什么時候用chown惡化chgrp呢蚓土?最常見的例子就是復(fù)制文件給其他人時,這里用cp指令來說明:
假設(shè)你要將.bashrc文件拷貝稱為.bashrc_test檔名赖淤,然后給bin這個賬號蜀漆,你可以這樣做:
所以,這怎么做呢咱旱?.bashrc_test還是屬于root所擁有确丢,所以就需要將這個文件的擁有者與群組修改一下!通過上述知道如何修改了吧吐限。
改變權(quán)限:chmod
權(quán)限的設(shè)定方法有兩種鲜侥,分別可以使用數(shù)字和符號來進(jìn)行權(quán)限的變更:
- 數(shù)字類型改變文件權(quán)限
Linux文件的基本權(quán)限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權(quán)限诸典。例如描函,文件的權(quán)限字符為"-rwxrwx---",這九個權(quán)限三個一組狐粱,其中舀寓,"r"代表數(shù)字"4","w"代表數(shù)字"2"肌蜻,"x"代表數(shù)字"1":
owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
所以互墓,該文件的權(quán)限數(shù)字就是770了。變更權(quán)限的指令chmod語法如下:
例如宋欺,如果將.bashrc這個文件所有的權(quán)限都設(shè)定啟用:
- 符號類型改變文件權(quán)限
九個權(quán)限分別是user、group胰伍、others三種身份齿诞,我們分別用u、g骂租、o代表三種身份的權(quán)限祷杈;此外,a則代表all表示全部的身份:
例如我們要設(shè)定一個文件的權(quán)限是"-rwxr-xr-x"時渗饮,可以做以下操作:
此外但汞,如果我們不知道原先的文件屬性宿刮,而我們只想增加.bashrc這個文件的每個人均可寫入的權(quán)限,可以做以下操作:
2.3 目錄與文件的權(quán)限意義
- 權(quán)限對文件的重要性
文件是實(shí)際有數(shù)據(jù)的地方私蕾,包括一般文本文件僵缺、數(shù)據(jù)庫內(nèi)容文件、二進(jìn)制可執(zhí)行文件等踩叭。因此磕潮,權(quán)限對于文件,它的意義是:
r :可讀取本文件的實(shí)際內(nèi)容容贝,如讀取文本文件的文字內(nèi)容等自脯。
w:可以編輯、新增或修改該文件的內(nèi)容(不包含刪除該文件)斤富。
x : 該文件具有可以被系統(tǒng)執(zhí)行的權(quán)限膏潮。
- 權(quán)限對目錄的重要性
r :表示具有讀取目錄結(jié)構(gòu)列表的權(quán)限。
w:表示你具有移動該目錄結(jié)構(gòu)列表的權(quán)限:建立新的文件與目錄满力;刪除已經(jīng)存在的文件與目錄(無論該文件的權(quán)限為何)焕参;將已存在的文件或目錄進(jìn)行更名;搬移該目錄內(nèi)的文件脚囊、目錄位置龟糕。
x:用戶能否進(jìn)入該目錄稱為工作目錄。
總結(jié)一下就是:
- 用戶操作功能與權(quán)限
有兩個檔名:
/dir1/file1
/dir2
假設(shè)現(xiàn)在在系統(tǒng)使用dmtsai這個賬號讲岁,那么這個賬號對/dir1,/dir1/file1衬以,/dir2這三個檔名來說分別需要哪些最小的權(quán)限缓艳?
2.4 Linux文件種類與擴(kuò)展名
文件種類
- 正規(guī)文件(regular file):第一個字符為"-",例如"-rwxrwxrwx"看峻。
純文本擋(ASCII):幾乎所有文件都是這種類型阶淘。
二進(jìn)制文件(binary):就是Linux可執(zhí)行文件。
數(shù)據(jù)格式文件(data):程序在運(yùn)行中會讀取某些特定格式的文件互妓。舉例來說溪窒,Linux在使用者登入時,會將登錄的數(shù)據(jù)保存在/var/log/wtmp文件冯勉,該文件就是(data file)澈蚌,可以使用"last"指令讀出來。但是使用"cat"指令時灼狰,會讀出亂碼宛瞄。
目錄(directory):第一個屬性為"d",例如"drwxrwxrwx"交胚。
連結(jié)檔(link):類似windows中的快捷方式份汗,第一個屬性為"l"盈电。例如"lrwxrwxrwx"。
設(shè)備與裝置文件(device):與系統(tǒng)周邊及存儲等相關(guān)的一些文件杯活,通常集中在/dev這個目錄下匆帚。分為兩種:
區(qū)塊(block)設(shè)備檔:一些存儲數(shù)據(jù),以提供系統(tǒng)隨機(jī)存取的接口設(shè)備轩猩。例如硬盤和軟盤卷扮。可以隨機(jī)的在硬盤的不同區(qū)塊讀寫均践,這種裝置就是組設(shè)備晤锹。第一個屬性為"b"。
字符(character)設(shè)備文件:一些串行端口的設(shè)備彤委,例如鍵盤鞭铆、鼠標(biāo)等。這些設(shè)備的特點(diǎn)是一次性讀取的焦影,不能夠截斷輸出车遂。第一個屬性為"c"。
資料接口文件(sockets):通常被用于網(wǎng)絡(luò)上的數(shù)據(jù)連接斯辰。我們可以啟動一個程序來堅(jiān)挺客戶端的要求舶担,而客戶端可以透過這個socket來進(jìn)行數(shù)據(jù)的溝通。第一個屬性為"s"彬呻。通常在/run或/tmp這些目錄中看到這種文件類型衣陶。
數(shù)據(jù)輸送文件(FIFO,pipe):一種特殊的文件類型闸氮,主要目的在解決多個程序同時存取一個文件所造成的錯誤問題剪况。第一個屬性為"p"。
Linux文件擴(kuò)展名
Linux沒有所謂的擴(kuò)展名的 蒲跨,一個Linux文件能不能被執(zhí)行译断,與他的可執(zhí)行權(quán)限有關(guān)。
"可執(zhí)行的權(quán)限"和"可執(zhí)行的程序代碼"是兩回事或悲。例如有一個文本文件test.txt孙咪,你具有"可執(zhí)行的權(quán)限",但是這個文件顯然無法執(zhí)行巡语,因?yàn)樗痪邆淇蓤?zhí)行的程序代碼翎蹈。
不過通常還是會以適當(dāng)?shù)臄U(kuò)展名來表示該文件是什么種類的:
*.sh :腳本或批處理文件。
Z捌臊,.tar杨蛋,.tar.gz兜材,.zip理澎,*.tgz:進(jìn)過打包的壓縮文件逞力。
.html,.php:網(wǎng)頁相關(guān)文件糠爬。
Linux文件長度限制
在Linux下寇荧,使用傳統(tǒng)的Ext2/Ext3/Ext4文件系統(tǒng)及被CentOS7當(dāng)作預(yù)設(shè)文件系統(tǒng)的xfs而言,針對文件的檔名長度限制為:
- 單一文件或目錄的最大容許文件名為255bytes执隧,以一個ASCII英文占用一個bytes來說揩抡,大約是255個字符長度。
3. Linux目錄配置
3.1 Linux目錄配置的依據(jù)—FHS
使用Linux開發(fā)產(chǎn)品或distributions的社群與個人實(shí)在太多了镀琉,后來就有了Filesystem Hierarchy Standard(FHS)標(biāo)準(zhǔn)出爐了峦嗤。
FHS依據(jù)文件系統(tǒng)使用的頻繁與否和是否允許使用者隨意改動,將目錄定義成四種交互作用的形態(tài):
事實(shí)上屋摔,F(xiàn)HS針對目錄樹架構(gòu)僅定義出三層目錄底下應(yīng)該放置什么數(shù)據(jù):
/(root烁设,根目錄):與開機(jī)系統(tǒng)有關(guān);
/usr(unix software resource):與軟件安裝/執(zhí)行有關(guān)钓试;
/var(variable):與系統(tǒng)運(yùn)作過程有關(guān)装黑;
根目錄(/)的意義和內(nèi)容
根目錄很重要,所有的目錄都是由根目錄衍生出來的弓熏,同時也與開機(jī)/還原/系統(tǒng)修復(fù)等動作有關(guān)恋谭。因此FHS要求根目錄不要放在大分區(qū)槽內(nèi),因?yàn)樵酱蟮姆謪^(qū)槽你會放越多的數(shù)據(jù)挽鞠,這樣可能會有較多發(fā)生錯誤的機(jī)會疚颊。
所以FHS建議:根目錄所在分區(qū)槽應(yīng)該越小越好,且應(yīng)用程序所安裝的軟件最好不要與根目錄放在同一個分區(qū)槽滞谢,不容易發(fā)生問題串稀。
第一部分:FHS要求必須要存在的目錄
/bin:它放置的是在單人維護(hù)模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般賬號所使用狮杨,主要有cat母截,chmod,chown橄教,date清寇,mv,mkdir护蝶,cp华烟,bash等。
/boot:這個目錄主要放置開機(jī)要使用的文件持灰。
/dev:在Linux系統(tǒng)上盔夜,任何裝置與接口設(shè)備都是以文件的形態(tài)存在于這個目錄當(dāng)中的。只要透過存取這個目錄底下的某個文件,就等于存取某個裝置了喂链。
/etc:系統(tǒng)主要配置文件幾乎都放在這里返十。例如人員的賬號密碼文件、各種服務(wù)的啟動檔等椭微。一般來說洞坑,這個目錄下的文件可以讓一般使用者查詢,但是只有root可以修改蝇率。
/lib:系統(tǒng)的函式庫非常多迟杂,/lib放的是開機(jī)時會使用的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫本慕。
/media:這個目錄下放置的是可移除的裝置排拷。包括軟盤、光盤锅尘、DVD等都暫時掛載于此攻泼。
/mnt:如果想暫時掛載某些額外的裝置,一般放在這個目錄鉴象。
/opt:這個是給第三方協(xié)力軟件放置的目錄忙菠。
/run:FHS規(guī)定系統(tǒng)開機(jī)后所產(chǎn)生的各項(xiàng)信息配置到這個目錄。
/sbin:Linux有很多指令用來設(shè)定系統(tǒng)環(huán)境纺弊,這些指令只有root才能使用來設(shè)定系統(tǒng)牛欢,其他用戶最多只能查詢。放在/sbin底下的為開機(jī)過程中所需要的淆游,里面包括了開機(jī)傍睹、修復(fù)、還原系統(tǒng)需要的指令犹菱。
/srv:一些網(wǎng)絡(luò)服務(wù)啟動之后拾稳,這些服務(wù)所需要取用的目錄。常見的服務(wù)如www腊脱,ftp等访得。www服務(wù)器需要的網(wǎng)頁資料可以放在/srv/www里面。
/tmp:一般用戶或正在執(zhí)行的程序暫時放置文件的地方陕凹。這個目錄任何人都可以存取的悍抑。
/usr:的二層FHS設(shè)定。
/var:第二層FHS設(shè)定杜耙,主要放變動性的數(shù)據(jù)搜骡。
第二部分:FHS建議可以存在的目錄
/home:是系統(tǒng)默認(rèn)的用戶家目錄。
/lib<qual>:存放與/lib不同格式的二進(jìn)制函式庫佑女,例如支持64位的/lib64函式庫等记靡。
/root:系統(tǒng)管理員(root)的家目錄谈竿。如果進(jìn)入單人模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄摸吠,我們希望root的家目錄與根目錄放置在同一個分區(qū)槽中榕订。
/lost+found:這個目錄是使用ext2/ext3/ext4文件系統(tǒng)格式才會產(chǎn)生的一個目錄,目的在于當(dāng)文件發(fā)生錯誤時蜕便,將一些遺失的片段放到這個目錄下。
/proc:這個目錄本事是一個虛擬文件系統(tǒng)贩幻。放置的數(shù)據(jù)都在內(nèi)存中轿腺,例如系統(tǒng)核心、行程信息丛楚、周邊裝置的狀態(tài)及網(wǎng)絡(luò)狀態(tài)等族壳。因?yàn)樗臄?shù)據(jù)在內(nèi)存中,所以本身不占用任何硬盤空間趣些。
/sys:這個目錄也是一個虛擬的文件系統(tǒng)仿荆,主要也是記錄核心與系統(tǒng)硬件信息較相關(guān)的信息。也是在內(nèi)存中的坏平。
/usr的意義和內(nèi)容
依據(jù)FHS定義拢操,/usr里面放置的數(shù)據(jù)屬于不可分享與不可變動的。如果你知道如何透過網(wǎng)絡(luò)進(jìn)行分區(qū)槽的掛載舶替,那么/usr確實(shí)可以分享給局域網(wǎng)絡(luò)內(nèi)的其他主機(jī)來使用令境。
FHS建議所有開發(fā)者,應(yīng)該將他們的數(shù)據(jù)合理的分別放置在/usr目錄的此目錄下顾瞪,而不要自行建立該軟件自己獨(dú)立的目錄舔庶。
一般來說,/usr的此目錄建議有以下這些:
FHS要求必須存在的目錄
/usr/bin:所有一般用戶能夠使用的命令都放在這里陈醒。也就是說/usr/bin與/bin是一模一樣了惕橙。另外,F(xiàn)HS要求此目錄下不應(yīng)該有子目錄钉跷。
/usr/lib:基本上與/lib功能相同弥鹦,所以/lib就是鏈接到此目錄中的。
/usr/local:系統(tǒng)管理員在本機(jī)自行安裝自己下載的軟件爷辙,建議安裝到此目錄惶凝。
/usr/sbin:非系統(tǒng)正常運(yùn)作所需要的系統(tǒng)指令。最常見的就是某些網(wǎng)絡(luò)服務(wù)器軟件的服務(wù)指令(daemon)犬钢〔韵剩基本功能與/sbin一樣,所以也是/sbin鏈接到此目錄中國的玷犹。
/usr/share:主要放置只讀的數(shù)據(jù)文件混滔,也包括共享文件洒疚。
第二部分:FHS建議可以存在的目錄
/usr/games:與游戲相關(guān)的數(shù)據(jù)放置處。
/usr/include:C/C++等程序語言的檔頭與包含檔放置處坯屿。當(dāng)我們以*.tar.gz的方式安裝軟件時油湖,會使用到里面的許多包含檔。
/usr/libexec:某些不被一般使用者慣用的執(zhí)行檔或腳本放在這里领跛。例如大部分的X窗口底下的操作命令乏德。
/usr/lib<qual>:與/lib<qual>功能相同,所以/lib<qual>鏈接到此目錄中吠昭。
/usr/src:一般原始碼建議放在這里喊括,核心原始碼建議放在/usr/src/linux目錄下。
/var的意義與內(nèi)容
/var是在系統(tǒng)運(yùn)作后才會逐漸占用硬盤容量的目錄矢棚。因?yàn)?var目錄主要針對常態(tài)性變動的文件郑什,包括快取(cache)、登錄檔(log file)以及某些軟件運(yùn)作所產(chǎn)生的文件蒲肋,包括程序文件(lock file蘑拯,run file),或者例如mysql數(shù)據(jù)庫的文件等兜粘。
第一部分:FHS要求必須存在的目錄
/var/cache:應(yīng)用程序本身運(yùn)作過程中會產(chǎn)生的一些暫存檔申窘。
/var/lib:程序本身執(zhí)行的過程中,需要使用到的數(shù)據(jù)文件放置的目錄孔轴。在此目錄下各自的軟件應(yīng)該要有各自的目錄偶洋。例如mysql的數(shù)據(jù)庫放置在/var/lib/mysql而rpm的數(shù)據(jù)庫放到/var/lib/rpm。
/var/lock:某些裝置或是文件資源一次只能被一個應(yīng)用程序所使用距糖,如果同時有兩個程序使用該裝置玄窝,可能產(chǎn)生一些錯誤。因此需要給該裝置上鎖悍引,確保該裝置只會給單一軟件使用恩脂。
/var/log:很重要,登錄文件放置的目錄趣斤。里面比較重要的文件如/var/log/messages俩块,/var/log/wtmp(記錄登入者信息)等。
/var/mail:放置個人電子郵箱的目錄浓领。
/var/run:某些程序或者服務(wù)啟動后玉凯,會將他們的PID放置在這個目錄下。與/run相同联贩,這個目錄鏈接到/run了漫仆。
/var/spool:通常放置一些隊(duì)列數(shù)據(jù),這些數(shù)據(jù)被使用過后通常都會被刪除泪幌。