目錄
- 前言
- 一、Linux的檔案權限
- 1.用戶與用戶組
- 2.檔案權限初識
- 3.修改檔案屬性與權限
- 4.目錄與檔案的權限意義
- 5.Linux檔案種類與擴展名
- (1)檔案種類
- (2)Linux的擴展名與檔案名相關限制
- 二、Linux的目錄配置
- 1.目錄配置依據--FHS
- 2.目錄樹(directory tree)
- 3.絕對路徑與相對路徑
- 總結
前言
第五章、第六章與第七章是初開始接觸Linux精髓–檔案、目錄與磁盤格式的一隅,可以真正體會到Linux組織檔案的特性,第五章這里鳥哥在他的書中給出了很多有趣的樣例,一定要親自嘗試才有豁然開朗的感覺,
一、Linux的檔案權限
1.用戶與用戶組
任何一個檔案都具有用戶(User)、所屬群組(Group)、及其他人(Others)三種身份的個別權限
1.檔案擁有者:設定適當的權限后,他人無法指導該檔案的內容,只有檔案擁有者,才能查看修改
2.用戶與用戶組:鳥哥舉出了一個很形象的例子:王家兄弟三人,三人又各有各的房間,又共有一個客廳,三人可進入對方的房間但不能亂翻對方的抽屜,這意味著每個用戶有自己的私人空間,三人在客廳則可以隨意使用物品,因為這是三兄弟的家,這個家就是用戶組,房子在老大的名下,即老大是用戶組的擁有者,用戶組的存在是為了方便團隊協同作業,三個用戶雖然在同一用戶組內,但可以設定某些權限,好讓某些用戶個人的資訊不被用戶組的擁有者查詢,保留私人的空間,
3.其他人:王家之外與王家無關的人
4.root:萬能的天神,可以到達任何他想要到達的地方
5.用戶加入用戶組:當某個Linux賬號,即該用戶加入某個用戶組,該賬號就可以使用該用戶組能夠讀寫的資源,每個賬號可以加入的用戶組個數基本上沒有限制
6.記錄上述資訊的檔案:所有系統上的賬號與一般身份用戶,還有root的相關資訊,都記錄在/etc/passwd這個檔案內,個人的密碼記錄在/etc/shadow這個檔案內,Linux所有的組名都記錄在/etc/group中,三個檔案是賬號、密碼、用戶組資訊的集中地,切勿隨意洗掉
2.檔案權限初識
經常操作檔案時出現的Permission deny肯定是設定權限錯誤,先了解檔案屬性,再看看其中的大頭:權限、擁有者、用戶組,本節鳥哥建議使用root身份學習,因為許多命令只有他才能操作,但不建議直接登錄root,而建議用su -這個命令切換身份,
ls -al旨在列出所有的檔案詳細的權限與屬性(包含隱藏檔案,即以.開頭的檔案),從左往右每一列依次代表檔案型別權限、連接數、檔案擁有者、檔案所屬用戶組、檔案大小、檔案最后被修改的時間、檔案名,
1.第一列的第一個字符代表這個檔案是:(d)目錄、(-)檔案、(|)鏈接檔案、(b)設備檔案里面的可供存盤的周邊設備、(c)設備檔案里面的串行埠設備如鍵盤、滑鼠
2.緊跟著的九個字符,三個為一組,且均為rwx的三個引數的組合,r-read、w-write、x-execute,可讀、可寫、可執行的三個權限位置不變,沒有該權限就顯示-而已
3.三組權限第一組文檔案擁有者可具備的權限,第二組為加入此用戶組之賬號的權限,第三組為非本人且沒有加入本用戶組的其他賬號的權限,不論是哪一組權限,都是針對賬號本身才會談權限這個概念,
4.第二串列示又多少檔案名鏈接到此節點(inode),即又多少不同的檔案名鏈接到同一個inode號碼
5.第三串列示這個檔案(或目錄)的擁有者賬號,第四串列示這個檔案所屬用戶組,第五串列示檔案容量大小,第六串列示檔案的創建日期或是最近的修改日期,第七列為檔案名
6.改變系統默認的語系,可以通過nano文本編輯器修改系統組態檔/etc/locale.conf,改變LANG變數
7.檔案名之前帶.的,是隱藏檔案,單純使用ls命令列出非隱藏檔案名,ls -a列出所有檔案名
8./etc/shadow這一個檔案因為記錄了系統中所有賬號的資料,是極其重要的組態檔,不能讓任何人讀取,只有root可以讀取,檔案的權限是- - - - - - - - - -
3.修改檔案屬性與權限
chgrp:修改檔案所屬用戶組,使用選項-R,可進行遞回(recursive)修改,即聯通子目錄下的所有檔案,目錄都更新成為這個用戶組之意,常常用在修改某一目錄內所有的檔案的情況
[root@study ~]# chgrp [-R] dirname/filename
chown:修改檔案擁有者,還可以順便直接修改用戶組的名稱,賬號名稱放在冒號左側,用戶組名稱放在右側(見下),遞回修改同上
[root@study ~]# chown [-R] 賬號名稱 檔案或目錄
[root@study ~]# chown root:root initial-setup-ks.cfg
也可以使用chwon user.group file來進行修改,但鑒于賬號中可能含有“.”,為避免誤判,建議采用“:”,
chmod:修改檔案的權限(含SUID、SGID、SBIT等特性)
#數字型別修改
[root@study ~]# chmod [-R] xyz 檔案或目錄
#xyz即數字型別的權限屬性,r:4,w:2,x:1,累加型記錄
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 ……
[root@study ~]# chmod 755 filename
#不想讓別人修改檔案就設定成755
[root@study ~]# chmod 740 filename
#不希望別人看到檔案就設定成740
#符號型別修改
#三種身份權限用u、g、o代替,還可以用all代表全部身份,用+(加入)、-(移除)、=(設定)
[root@study ~]# chmod u=rwx,go=rx .bashrc
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root
[root@study ~]# chmod a+x filename
#想要一個程式可以擁有執行的權限,又不知道原有的權限可以直接加
cp:復制檔案給你之外的其他人,由于復制操作回復制執行者的屬性與權限,不一定利于其他人的使用,需要搭配chmod
[root@study ~]# cp 源檔案 目標檔案
4.目錄與檔案的權限意義
檔案權限:
r:可讀取此檔案的實際內容,如讀取文本檔案的文字內容
w:可以編輯、新增或是修改該檔案的內容(但不洗掉該檔案)
x:該檔案具有可以被系統執行的權限,Linux下一個檔案的執行能力交友此權限判斷,與檔案名無關(不同于Windows的擴展名)
檔案的rwx與檔案名的存在與否沒有關系,因為檔案記錄的是實際的資料,與檔案名有緊密聯系的是目錄權限,
目錄權限:
r:表示具有讀取目錄結構串列的權限,擁有即可查詢該目錄下的檔案名資料,就可以利用ls這個命令列出目錄里的內容
w:表示具有改動該目錄結構串列的權限:建立新的檔案與目錄、洗掉已經存在的檔案與目錄(不論該檔案的權限)、將已經存在的檔案或目錄進行更名、移動該目錄內的檔案和目錄位置
x:代表的是用戶能進入該目錄成為作業目錄的用途,常用的變換目錄的命令是cd(change directory),r乍看之下好像具有可以進入此目錄都權限,但事實上能不能進入某一個目錄僅由該目錄的x權限決定,如果少了此權限,基本用戶擁有該目錄下的r或w的權限,也無法執行該目錄下的任何命令
要開放目錄給任何人瀏覽時,至少要給予r及x的權限,
可否洗掉一個檔案僅取決于用戶對該檔案所在目錄的權限,而非對該檔案的權限,
很多時候,把目錄比作抽屜,檔案比作抽屜里的小盒子,有r的權限可以理解為抽屜里有光,有x的權限可以理解為有打開抽屜的鑰匙,r對于操作小盒子是非必備的,但沒有r,使用tab鍵無法自動幫住補齊檔案名,
5.Linux檔案種類與擴展名
(1)檔案種類
常規檔案(regular file)(-):純文本檔案(ASCII),比如可以執行cat ~/.bashrc查看檔案內容;二進制檔案(binary),系統其實僅認識且可執行這類檔案,Linux當中的可執行檔案(scripts,腳本檔案不算),剛剛的命令cat就是一個二進制檔案;資料檔案(data),有些程式在運行的程序當中回讀取某些特定格式的檔案,那些特定格式的檔案可被稱為資料檔案,它能夠通過last命令讀出,用cat讀時回出現亂碼,因為它是屬于一種特殊格式的檔案,
目錄(d):存放檔案的“抽屜”
鏈接檔案(l):類似Windows下面的快捷方式
設備與設備檔案(device):區塊設備檔案(b):一些存盤資料,以提供系統隨機存取的介面設備,比如/dev/sda的第一個屬性;字符設備檔案(c):一些穿行埠的介面設備,例如鍵盤、滑鼠等,這些設備不能夠截斷輸出(就是不能讓滑鼠在界面上跳躍的移動),設備檔案是我們系統中很重要的檔案,最好不要隨意修改(通常也改不了)
資料介面檔案(sockets)(s):通常被用在網路上的資料交換,最常在/run或/tmp這些個目錄中看到這種檔案型別
資料輸送檔案(FIFO,pipe)(p):解決多個程式同時讀寫一個檔案所造成的錯誤問題
(2)Linux的擴展名與檔案名相關限制
鳥哥特別強調:一個Linux的檔案能不能被執行,與它的第一欄的是個屬性有關,與檔案名根本一點關系也沒有,另外具有可執行的權限以及具有可執行的程式代碼是兩回事,比如檔案有了x權限僅代表當前用戶對該檔案具有可執行的能力,能不能執行成功,由檔案內容決定,
但Linux中仍會使用擴展名來表示該檔案是什么種類,檔案的用途等:
sh:腳本或批處理檔案(scripts)
Z、.tar、.tar.gz、.zip、.tgz:經過打包的壓縮檔案
.html、.php:網頁相關檔案
從網路上下載到你的Linux系統中,檔案的屬性與權限是會被修改的,因此遇到網上下載的可執行檔案無法執行,就可能是檔案的屬性被修改了,
Linux的檔案名通常很長,
檔案名長度限制:單一檔案或目錄的最大容許檔案名為255位元組,以一個ASCII英文占用1位元組來說,大約可達255個字符長度,以每個漢字2位元組來說,最大檔案名大約128個漢字
檔案名的字符限制:避免出現:*、?、>、<、;、&、!、[、]、|、’、"、`、(、)、{、},因為它們在命令列模式下由特殊意義,又鑒于命令中的option會有+、-,因此也不建議使用
二、Linux的目錄配置
1.目錄配置依據–FHS
FHS:Filesystem Hierarchy Standard是一種標準,重點在于規范每個特定的目錄下應該要防止什么樣子的資料,FHS將目錄定義成為四種互動作用的形態,可分享(可以分享給其他系統掛載使用的目錄,包括執行檔案與用戶的郵件等資料)、不可分享(設備檔案或是與程式有關的socket檔案)、不變(函式庫、檔案說明、系統管理員所管理的主機服務組態檔)、可變動(經常修改的資料,如日志檔案,一般用戶可自行接收的新聞組),事實上FHS僅定義出三層目錄下面應該放置什么資料而已,剩下的都交由各開發者的自行發揮了,
三層目錄:如下三層目錄中每層下面要放置的目錄由特別規定
/(root):不但所有目錄都由根目錄衍生出來,同時其與啟動、還原、系統修復等操作有關,FHS建議根目錄所在磁區越小越好,且應用程式安裝的軟體最好不要與根目錄放在同一個磁區內,保證性能,
鳥哥詳細列舉了其下屬目錄及目錄應放置檔案內容,這里簡略說明:
| 目錄 | 應放置檔案內容 |
|---|---|
| /bin | 有許多用戶可用的常見命令,cat、chmod、chown等 |
| /boot | 放置啟動會使用到的檔案(內核常用檔案名:vmlinuz) |
| /dev | 通過讀寫這個目錄下面的某個檔案就等于讀寫某個設備 |
| /etc | 放系統主要的組態檔,檔案屬性一般用戶可看,但只要root用戶可改,建議其中不放可執行檔案,其下必須有/etc/opt放置第三方輔助軟體/opt的相關組態檔 |
| /lib | 放置啟動時會用到的函式庫,及在/bin或/sbin下面的命令會呼叫的函式庫,其下必須有/lib/modules,放置可抽換式的內核相關模塊 |
| /media | 放置可洗掉的設備,包括光碟等設備都暫時掛載于此 |
| /mnt | 放置想要暫時掛載的某些額外設備 |
| /opt | 放置第三方輔助軟體,比如想要自行安裝額外的軟體(非原本發行版提供),也可以安裝至此 |
| /run | 放置啟動后所產生的各項資訊 |
| /sbin | 放置啟動程序中所需要的,包括了啟動、修復、還原系統所需要的命令,如:fdisk、fsck、ifconfig、mkfs |
| /srv | 一些網路服務啟動之后所需使用的資料目錄 |
| /tmp | 讓一般用戶或是正在執行的程式暫時放置檔案的地方,絕不可放重要資料 |
| /usr | 見下 |
| /var | 見下 |
上面是FHS要求必須存在的目錄,FHS還建議可存在的有/home、/lib (帶"qual"用來存放與上表中的/lib不同格式的二進制函式庫)、/root目錄,
/目錄中,/sbin、/bin、/lib以鏈接檔案形式顯示,因為它們現在通通移到了/usr中
/usr(unix software resource):與軟體安裝/執行有關,放置的資料屬于可分享與不可變動,它的縮寫是指UNIX作業系統軟體資源所放置的目錄,不要誤認,這個目錄像是Windows中"C:\windows\(當中的一部分)+C:\Program Files"這兩個目錄的合體
| 目錄 | 應放置檔案內容 |
|---|---|
| /usr/bin/ | 一般用戶能夠使用的命令都放在此,此目錄下不應該有子目錄,鏈接了/bin |
| /usr/lib/ | 基本同/lib,鏈接了/lib |
| /usr/local/ | 系統管理員在本機安裝自己下載的軟體(非發行版默認提供者),建議安裝到此 |
| /usr/sbin/ | 非系統正常運行所需要的系統命令,最常見的是某些網路服務器軟體的服務命令(daemon) |
| /usr/share/ | 放置只讀的資料檔案,包括共享檔案,此目錄下放置第資料幾乎不分硬體架構均可讀取的資料,其下常見:/usr/share/man:在線幫助檔案,/usr/share/doc:軟體的說明檔案,/usr/share/zoneinfo:與時區有關的檔案 |
上面是FHS要求必須存在的目錄,FHS還建議可存在的有/usr/games/(與游戲相關)、/usr/include/(c/c++等程式語言的頭檔案與包含檔案放置處,使用Tarball安裝某些程式時會用)、/usr/libexec/(某些不被一般用戶常用的執行檔案或腳本)、/usr/lib/(,帶“qual”,同/lib/,鏈接到此)、/usr/src/(源代碼建議放置到此,內核源代碼建議放置到/usr/src/Linux/)
/var(variable):與系統運行程序有關,如果說/usr是安裝時會占用較大硬碟容量的目錄,/var就是在系統運行后才會漸漸占用硬碟容量的目錄,其主要針對經常性變動的檔案,包括快取(cache)、日志檔案(log file)以及某些軟體運行所產生的檔案,包括程式檔案,或例如MySQL資料庫的檔案,
| 目錄 | 應放置檔案內容 |
|---|---|
| /var/cache/ | 應用程式本身運行程序中會產生的一些快取 |
| /var/lib/ | 程式本身執行的程序中,需要使用的資料檔案放置在此 |
| /var/lock/ | 某些設備或是檔案資源一次只能被一個應用程式所使用,如果同時有兩個程式使用該設備時,就可能產生一些錯誤的狀況,因此就得要將該設備上鎖(lock),一曲包該設備只會給單一軟體所使用 |
| /var/log/ | 日志檔案放置在此,極其重要的目錄,其下比較重要的檔案有:/var/log/messages、/var/log/wtmp |
| /var/mail/ | 放置個人電子郵箱的目錄,也放置到/var/spool/mail/目錄中,互為鏈接檔案 |
| /var/run/ | 某些程式或是服務啟動后,會將它們的PID放置在此 |
| /usr/spool/ | 通常放置一些佇列資料 |
還有一些非常重要的目錄,
| 目錄 | 應放置檔案內容 |
|---|---|
| /lost+found | 使用標準ext2、ext3、ext4檔案系統格式才會產生的一個目錄,目的在于當檔案系統發生錯誤時,將一些遺失的片段放置到這個目錄下 |
| /proc | 本身是一個虛擬檔案系統(virtual filesystem),它放置的資料都在記憶體當中,本身不占任何硬碟空間 |
| /sys | 也是一個虛擬的檔案系統,像/proc,主要也是記錄內核與系統硬體資訊相關的內推,同樣不占硬碟容量 |
還有FHS官方英文檔案FHS 3.0供參考,
通過前面的表格和描述可以發現CentOS 7將許多原本應該要在根目錄里的目錄,將它內部資料全部移動到/usr里了,然后進行鏈接設定,
PS:Linux還有個LSB標準
2.目錄樹(directory tree)
所有檔案與目錄都是由根目錄開始的,然后再一個一個分支下來,這種目錄配置方式稱為目錄樹,
特性:
1.目錄樹的起始點為根目錄
2.每一個目錄不止能使用本地磁區的檔案系統,也可以使用網路上的檔案系統
3.每一個檔案在此目錄樹中的檔案名(包含完整路徑)都是獨一無二的
這是根目錄下的實際情況:
在第二章鳥哥曾建議過有經驗的選手將/var獨立出來,這樣對于系統的資料還有一些安全性的保護,因為至少/var死掉時,根目錄依然活著,能夠進入恢復模式,
3.絕對路徑與相對路徑
絕對路徑:由根目錄開始寫起的檔案名或目錄名稱,如/home/xxxx/.bashrc
相對路徑:相對于目前路徑的檔案名寫法,如./home/xxxx或…/…/home/xxxx/,開頭不是/,就是相對路徑,".“代表當前的目錄,也可以使用./表示,想要進入當前目錄的下一級目錄時可用此替代前面所有級目錄,后面直接跟下級的目錄即可;”…"代表上一層目錄,也可以使用…/表示,想要進入上一級目錄下與當前目錄平級的目錄,或是更下一級的目錄(非當前目錄的下一級)時使用,
使用相對路徑時非常方便快捷的,冗長的檔案名不用從根目錄寫起,
網路檔案常提到類似“./run.sh”的資料:由于命令的執行需要變數的支持,若你的執行檔案放置在本目錄,并且本目錄并非常規的執行檔案目錄,此時要執行命令就得要嚴格指定該執行檔案,“./”代表“本目錄”,“./run.sh”代表執行本目錄下名為run.sh的檔案,
總結
本想將5、6章一起劃重點,但發現第五章光是談權限內容就不少,第6章的各色命令留作下一篇再體味,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263736.html
標籤:其他
上一篇:MySQL主從復制與讀寫分離
