第八節 Linux 文件的屬性(下半部分)
標籤(空格分隔): Linux教學筆記java
---更多相關資料請點我查看node
第1章 連接的概念
在linux系統中,連接可分爲兩種:一種爲硬連接(Hard Link),另外一種爲軟鏈接或符號連接(Symbolic Link or Soft link)。咱們在前面講解過ln這個命令就是建立連接文件的,在默認不帶參數的狀況下,執行ln命令建立的連接是硬連接。mysql
第2章 硬連接
- 硬連接是指經過索引節點(Inode)來進行鏈接。在Linux(ext2,ext3,ext4)文件系統中,保存在磁盤分區中的文件無論是什麼類型都會給它分配一個編號,這個編號被稱爲索引節點編號(Index Inode)簡稱Inode,即在系統中文件的編號。
- 在Linux文件系統中,多個文件名指向同一個索引節點(inode號相同)是正常且容許的。這種狀況的文件就稱爲硬連接。
- 提示:硬連接文件就至關於文件的另一個入口。硬連接的做用之一是容許一個文件擁有多個有效路徑名(多個入口),這樣用戶就能夠創建硬連接到重要的文件,以防止「誤刪除」源數據(不少硬件存儲,如netapp存儲中的快照功能就應用了這個原理,增長一個快照就多了一個硬連接)。爲何一個文件創建了硬連接就會防止數據誤刪呢?
- 由於文件系統(ext2)的原理是,只要文件的索引節點(Inode Index)還有一個以上的硬連接。只刪除其中一個硬連接(即僅僅刪除了該文件的連接指向)並不影響索引節點自己和其餘的連接(即數據文件實體並未被刪除),只有當文件的最後一個連接被刪除後,此時若是有新數據要存儲到硬盤上時或者系統經過相似fsck作磁盤檢查的時候。被刪除文件的數據塊及目錄的連接纔會被釋放,空間被新數據佔用並覆蓋。此時,數據就再也沒法找回了。
- 也就是說,在linux系統中,刪除靜態文件(沒有進程調用)(目錄也是文件)的條件是與之相關的全部硬連接文件均被刪除(暫時這樣理解便可,後文會講和進程的佔用也有關)
- 下面給出一個文件多個連接的形象圖幫助你們理解:
- 硬連接示意圖:若是使用ln -s 建立連接則爲軟連接,前面文件類型爲1(字母L)的是軟連接。
硬連接:ln 源文件 目標文件
軟連接:ln -s 源文件 目標文件(目標文件不能事先存在
硬連接的建立
直接執行命令「ln 源文件 硬連接文件」,便可完成建立硬連接。linux
2.1 硬連接知識小結
1,如何建立及含義:ios
- 經過執行命令「ln 源文件 硬連接文件」,便可完成建立硬連接。
- 具備相同inode節點號的多個文件是互爲硬連接文件。
2,硬連接與刪除nginx
- 刪除硬連接文件或者刪除源文件任意之一,文件實體(block 數據 文件內容)並未被刪除。
- 只有刪除了源文件及全部對應的硬連接文件,文件實體(block 數據 文件內容)纔會被刪除
- 當全部的硬連接文件及源文件被刪除後,再存放新的數據會佔用這個文件的空間,或者磁盤fsck檢查的時候,刪除的數據也會被系統回收(養成刪除及多套環境測試的好習慣)
3,硬連接文件就是文件的另外一個入口(至關於超市的前門,後門同樣)。web
4,能夠經過給文件設置硬連接文件,來防止重要文件被誤刪。面試
5,硬連接文件是普通文件,所以能夠用rm命令刪除redis
6,文件完全刪除:sql
對於靜態文件(沒有進程正在調用的文件)來說,當對應硬連接數爲0(i_link),文件就被刪除。 i_link的查看方法(ls -lhi結果的第三列就是)
7,查看文件的硬連接數ls -lhi/stat,i_link的查看方法(ls -lhi結果的第三列就是)
2.2 軟鏈接
- 軟鏈接(Soft Link)也稱爲符號連接(Symbolic Link)。linux裏的軟連接文件就相似於Windows系統中的快捷方式。linux裏的軟連接文件其實是一個特殊的文件,文件類型是l。軟連接文件實際上能夠理解爲一個文本文件,這個文件中包含有軟連接指向另外一個源文件的位置信息內容,所以,經過訪問這個「快捷方式」就能夠迅速定位到軟連接所指向的源文件實體。
- 下面給出一個軟鏈接文件的形象圖幫助你們理解:
查看軟連接的value:
[root@chensiqi1 ~]# ll annn
lrwxrwxrwx. 1 root root 15 12月 30 07:48 annn -> anaconda-ks.cfg
[root@chensiqi1 ~]#
軟連接的建立
- 執行命令「ln -s 源文件 軟連接文件」,便可完成建立軟連接。
- 誤區:建立軟連接的源文件是須要存在的,要建立的軟連接文件是不能存在的,是要用ln命令建立的
2.3 企業面試題
在配置apache時,執行了./configure --prefix=/application/apache2.2.17來編譯apache,在make install 完成後,但願用戶的訪問路徑更簡單,須要給/application/apache2.2.17目錄作一個軟連接/application/apache,使得內部開發或管理人員經過/application/apache就能夠訪問到apache的安裝目錄/application/apache2.2.17下的內容,請你給出實現的命令。(提示:apache爲一個httpd web服務)
思路:
軟件的安裝位置
/application/apache2.2.17
給開發人員使用的位置
/application/apache2.2.17
升級軟件,新的軟件的安裝位置
/application/apache2.4.17
思考:如何給別人使用的始終是一個路徑,即便更新了軟件
因此,咱們要作軟連接,這樣不論軟件如何更新,經過修改軟連接的指向就能夠,而後軟連接的路徑始終不變。
1,建立軟連接
2,軟件更新了,從新建立軟連接
3,如圖軟連接的地址始終不變,不會影響開發人員的使用,這就是實際工做中軟連接的意義
軟連接知識小結
1,軟連接相似windows的快捷方式(能夠經過readlink查看指向)
2,軟連接相似一個文本文件,裏面存放的是源文件的路徑(ls -l),指向源文件實體。
3,刪除源文件,軟連接文件依然存在,可是沒法訪問指向的源文件路徑內容。
4,失效的時候通常是白字紅底閃爍提示。
5,執行命令「ln -s 源文件 軟連接文件」,便可完成建立軟連接(目標不能存在)
6,軟連接和源文件是不一樣類型的文件,也是不一樣的文件。inode號也不相同
7,軟連接文件的文件類型爲「1(字母1)」,能夠用rm命令刪除
2.4 示例演示
2.4.1 文件軟硬連接示例
目錄的軟連接在實際生產場景中常常用到,硬連接用的很少。
思考:下圖爲什麼不能建立硬連接
分析:
- 硬連接的本質其實就是有多個入口,均可以看到目標文件的內容。這些入口就是門,也就是硬連接。
- 硬連接其實也就至關於作備份--超市A ---超市A.bak
- 軟連接就至關於windows的快捷方式,這就如同超市並無多開新的門,仍舊用的舊門,只不過告訴你經過多條路均可以來到這個門而已。
- 所以,對linux來講,硬連接須要系統將目標文件作備份,刪除其中的任何一個,文件內容都不會消失,只不過是刪除了其中的一份備份而已;而軟連接並無作備份,他只是多增長了一條來到門前的通路而已。
- 故,假如linux容許給目錄作硬連接的話,他就同時須要給目錄下的全部文件在作一個硬連接,這樣會致使系統不斷的進行遍歷,拖慢系統的運行速度。
測試
經過軟硬連接都能看到目標內容,所以,對其中的一個的內容作出改變,全部都改變。
當刪除源文件後,硬連接的文件不受影響,可是軟連接文件失效
測試結論:
- 軟連接和硬連接都指向相同的文件內容,所以其中一個的文件內容發生改變,全部的連接文件內容都發生改變
- 當源文件chensiqi被刪除,軟連接受到影響,進入失效狀態,由於軟連接是經過源文件做爲入口才能看到文件內容的,入口沒了,軟連接天然失效。
- 而源文件被刪除,硬連接不受影響,是由於,硬連接單獨開闢了一個可以看到文件內容的入口,源文件的入口沒了,不影響硬連接的入口的正常使用。
2.6 連接總結
2.6.1 軟硬連接小結
經過測試,咱們能夠獲得如下幾個結論:
1,刪除軟連接,對源文件和硬連接文件無影響
2,刪除硬連接,對源文件和軟連接無影響
3,刪除源文件,對硬連接無影響,可是軟連接失效
4,同時刪除源文件和硬連接,整個文件就會真正的被刪除
5,源文件和硬連接文件具備相同的索引節點號,能夠認爲是同一個文件或一個文件的多個入口。
6,源文件和軟連接文件索引節點號不一樣,是不一樣的文件,軟連接至關於源文件的快捷方式,含有源文件的位置指向。
2.6.2 有關目錄連接小結
1,對於目錄,不能夠建立硬連接,但能夠建立軟連接
2,對於目錄的軟連接是生產場景運維中經常使用的技巧
3,目錄的硬連接不能跨越文件系統(從硬連接原理能夠理解)
4,每一個目錄下面都有一個硬連接「.」號,和對應上級目錄的硬連接「..」
5,再父目錄裏建立一個子目錄,父目錄的連接數增長1(每一個子目錄裏都有..來指向父目錄)
可是在父目錄立建立文件,父目錄的連接數不會增長。
2.6.3 企業面試題
描述linux下軟連接和硬連接的區別
解答:
1,默認不帶參數狀況下,ln命令建立的是硬連接,帶-s參數的ln命令建立的事軟連接
2,硬連接文件與源文件的inode節點號相同,而軟連接文件的inode節點號與源文件不一樣。
3,ln命令不能對目錄建立硬連接,但能夠建立軟連接,對目錄的軟連接會常常被用到。
4,刪除軟連接文件,對源文件及硬連接文件無任何影響
5,刪除文件的硬連接文件,對源文件及軟連接文件無任何影響
6,刪除連接文件的源文件,對硬連接文件無影響,會致使其軟連接失效
7,同時刪除源文件及硬連接文件,整個文件纔會被真正的刪除
8,軟連接能夠跨文件系統,硬連接不能夠跨文件系統
2.6.4 連接知識擴展
李小龍說過一句話,他不怕一千個動做只練一遍的人,而怕一個動做練一千遍的人
簡單的事情重複作就是高手,不斷重複下去就是專家
綜上:請千萬記得,正在使用當中的文件,即使你刪除了i_nlink(硬連接數),文件實際上也並無被刪除,由於,文件還正在處於讀寫狀態。只有i_count的數也爲零時,文件纔會被完全刪除。
再生產環境中,有時會遇到apache等相似服務,磁盤滿了的狀況,會要求你去刪掉些日誌,若是此時你去刪除了,你會發現磁盤空間佔用沒有改變,仍是滿的,並且查詢不到。這是由於,後臺進程仍舊在佔用着被刪掉了的日誌文件,所以linux並無將內容刪除(block),你的刪除只是清除了inode和文件名而已。解決這個問題就須要從新啓動apache
較好的處理方案,清空日誌而不刪除日誌>/app/logs/access_log
第3章 文件的權限
3.1 文件權限概述
- Linux中每一個文件或目錄都有一組共9個基礎權限位,每三位字符被分爲一組,他們分別是屬主權限位(佔三個字符),用戶組權限位(佔三個字符),其餘用戶權限位(佔三個字符)。好比rwxr-xr-x,在linux中正是這9個權限位來控制文件屬主,用戶組以及其餘用戶權限。
3.2 權限位說明
- Linux文件或目錄的權限位是由9個權限位來控制,每三位爲一組:
- 文件的全部者權限:Owner的讀寫執行
- 文件全部者屬於的組的權限:Group用戶組的讀寫執行
- 其餘人Other其餘用戶的讀寫執行
- r(read)可讀權限,對應數字4
- w(write)可寫權限,對應數字2
- x(Execute)可執行權限,對應數字1
- 沒有任何權限,對應數字0
3.3 linux多用戶多任務介紹
Linux/Unix是一個多用戶,多任務的操做系統;在講Linux帳號及帳號組管理以前,咱們先簡單瞭解下多用戶,多任務操做系統的基本概念。
- 鑑於你們對windows比較熟悉了,所以咱們先以windows系統爲例闡述。當咱們以管理員帳號administrator用戶登陸windows系統後,我可能須要編輯word文檔內容,但在編輯文件的過程當中,又可能會同時打開音樂播放器聽音樂;同時還可能會打開MSN/QQ。其中編輯word文檔,開播放器,MSN/QQ,這些操做每種都是一項任務。所以,在以上過程當中,咱們同時執行了幾個任務。一個用戶如administrator用戶,爲了完成工做和相關任務,同時執行了幾個服務或進程;那麼,Linux也是這樣的一個操做系統,當你登錄後,你也能夠同時開啓不少的服務任務和進程,而各自服務都會跑的很好卻對其餘任務沒有任何影響,這種一個用戶登錄系統執行多個服務任務和進程的狀況,就稱爲單用戶多任務。
- 有時多是不少用戶同時用同一個系統,如老男孩所在公司幾十個運維人員,每臺機器均可以被若干個運維人員登錄部署或解決相關故障問題,但並非全部的運維人員都要作同一件事,因此這就有多用戶,多任務的狀況。
- 舉個例子,好比etiantian.org服務器,上面有系統管理員root用戶,apache用戶,常規普通用戶等。在同一時刻,可能有的人正在上傳軟件包部署apache服務;有的查看服務器日誌,有的人正在登錄編寫shell程序;不一樣的維護人員對系統的維護或查看,用的能夠是不一樣的普通帳戶或超級帳戶root;不一樣用戶所具備的權限也不一樣,不一樣的任務工做由不一樣的維護人員來完成,也能夠說是不一樣的用戶。
- 值得注意的是:多用戶,多任務並非你們同時擠到一塊兒在一臺機器的鍵盤和顯示器前來操做機器,多用戶多是經過SSH客戶端工具等遠程登錄服務器來進行,好比對服務器的遠程控制,只要具備相關用戶的權限,任何人都是能夠上去操做訪問服務器。
3.4 linux系統中用戶角色劃分
-
在linux系統中用戶是分角色的,在linux系統中,因爲角色不一樣,權限和所完成的任務也不一樣;值得注意的是,對於linux系統來講,用戶的角色是經過UID和GID識別的;
-
特別是UID,在linux系統運維工做中,一個UID是惟一標識一個系統用戶的帳號(至關於咱們的身份證)。用戶系統帳號的名稱(如chensiqi)其實給人(管理員)看的,linux系統可以識別的僅僅是UID和GID這樣的數字。
用戶的UID就至關於咱們的身份證號同樣,用戶名就至關於咱們的名字。
- 超級用戶:root(皇帝)
- 默認是root用戶,UID和GID均爲0.root用戶在每臺unix/linux操做系統中都是惟一且真實存在的,經過它能夠登陸系統,能夠操做系統中任意文件和命令,擁有最高的管理權限
- 在生產環境中,通常會禁止root帳號經過SSH遠程鏈接服務器,固然了,也會更改默認的SSH端口,以增強系統安全。
- 最小化安全:1,安裝系統(最小化安裝+必要的包組)2,開啓的服務最小化
- 企業工做中:沒有特殊需求,應該儘可能在普通用戶下操做任務,而不是root
- 再linux系統中,uid爲0的用戶就是超級用戶。可是一般不這麼作,而是sudo管理提權,能夠細到每一個命令權限分配怒。
- 普通用戶:爲普通用戶受權(sudo)
su -root:角色切換,切換超級用戶
sudo ls:申請提權,臨時提升本身的權限
虛擬用戶
與真實普通用戶區分開來,這類用戶最大的特色是安裝系統後默認就會存在,且默認狀況大多數不能登陸系統,可是,他們是系統正常運行不可缺乏的,他們的存在主要是方便系統管理,知足相應的系統進程對文件屬主的要求。例如:系統默認的bin,adm,nobody,mail用戶等。因爲服務器業務角色的不一樣,有部分用不到的系統服務被緊緻開機執行,所以,在作系統安全優化時,被禁止開機啓動了的服務對應的虛擬用戶也是能夠處理掉的(刪除或註釋)
虛擬用戶角色傀儡:
linux安全優化:
1,安裝系統後能夠刪除用不到的虛擬用戶,但最好不刪而是註釋掉,萬一出問題能夠恢復回來。
2,咱們本身部署服務的時候,也會建立虛擬用戶,知足服務的需求!例如;apache,nginx,mysql,nfs,rsync,nagios,zabbix,redis
3.5 linux系統中不一樣角色對應的UID說明
服務的運行須要用戶角色,能夠不用登錄,所以,工做中咱們須要運行如mysql數據庫,能夠建立以下虛擬用戶:
命令被linux啓動的過程:
1,linux先在$PATH環境變量裏找這個命令的腳本的位置
2,找到之後經過shell來執行
3,shell執行(bash + 命令)
- 所以,useradd-s/bin/bash(的本質意思就是-s 讓shell 用 bin目錄下的bash腳原本進行登陸)
- 而,useradd -s /sbin/nologin(的本質意思就是-s 讓shell用sbin目錄下的nologin腳原本登陸)
3.6 多用戶操做系統的安全
多用戶系統從實際來講使得系統管理更爲方便了。從安全角度來講,多用戶系統也更爲安全,好比普通用戶chensiqi下的某個文件不想讓其餘用戶看到,只是設置一下該文件的權限爲只有普通用戶chensiqi一個用戶可讀可寫可編輯(後文會詳細講權限)就好了,這樣一來只有普通用戶chensiqi一個用戶能夠對其私有文件進行操做,從而達到了保護每一個用戶的私有數據安全。
第4章 帳戶(user)和帳戶組(group)
4.1 用戶(user)介紹
- 經過上文對Linux系統多用戶特徵的理解,咱們知道Linux是一個多用戶,多任務的分時操做系統,若是要使用系統資源,就必須向系統管理員申請一個帳戶,而後經過這個帳戶進入系統。這個帳戶和用戶是一個概念,經過創建不一樣屬性的用戶,一方面,能夠合理的利用和控制系統資源,另外一方面也能夠幫助用戶組織文件,提供對用戶文件的安全性保護。
- 每一個用戶都有一個惟一的用戶名和用戶口令,在登錄系統時,只有正確輸入了用戶名和密碼,才能登入系統和相應的目錄(除了密碼驗證外,還能夠是密鑰驗證)。
- 在生產環境中,咱們通常會爲每一個有權限管理服務器的運維人員分配一個獨立的普通用戶帳號及8位(包含數字,字母,特殊字符)以上的密碼,如chensiqi。該人員只能經過創建的這個帳號登錄到系統中進行維護,當須要超級用戶權限時,能夠經過「sudo + 命令名」的方式來執行僅有root用戶才容許執行的權限。固然,sudo權限要儘可能小。還有,當運維人數很少時,如2-3個,也能夠直接su - 切換到超級用戶root下,在執行相應的維護工做,在這裏要特別提醒你們,維護時,若是不須要root權限,就不要進入root用戶下操做,以減小誤操做對系統帶來的損失,請謹記!
提示:
sudo 和su是兩個重要切換用戶角色的命令,之後會詳細講解
4.2 用戶組(group)介紹
- 簡單的說,linux系統中的用戶組(group)就是具備相同特徵的用戶(user)集合;爲了便於你們理解,我作個比喻:一個公司,一個家庭就是一個集合,相似這裏的用戶組,公司的員工和家庭中的成員就至關於這裏的用戶。
- 有時咱們須要讓多個用戶具備相同的權限,好比查看,修改某一文件或目錄,若是不用用戶組,這種需求在受權時就很難實現。若是使用用戶組就方便多了,只須要把受權的用戶都加入到同一用戶組裏,而後經過修改該文件或目錄的對應的用戶組的權限,讓用戶組具備符合需求的操做權限,這樣用戶組下的全部用戶對該文件或目錄就會具備相同的權限,這就是用戶組的用途。
- 將用戶分組是Linux系統(windows中也是同樣)中對用戶進行管理及控制訪問權限的一種手段,經過定義用戶組,在很大程度上簡化了運維管理工做。
- 實際上,在平常生活中,對人類的分組也是無處不在的,大到國家,小到公司,家庭,學校,班級等等都相似linux中用戶組的概念,而其中的成員就相似linux用戶組中用戶的概念。
4.3 用戶和用戶組的對應關係
用戶和用戶組的對應關係有:一對一,一對多,多對一和多對多,方便你們理解,經過下圖進行展現:
- 一對一:即一個用戶能夠存在一個組中,也能夠是組中的惟一成員。如:root
- 一對多:即一個用戶能夠存在於多個用戶組中。好比,上圖中普通用戶chensiqi能夠是sa組成員,也能夠是java用戶組成員,還能夠是tech用戶組成員,這裏的chensiqi用戶具備sa,java,tech多個組的共同權限。
- 多對一:多個用戶能夠存在於一個組中,這些用戶具備和組相同的權限,這條是上文講過的。
- 多對多:多個用戶能夠存在多個組中。而且幾個用戶能夠歸屬相同的組;其實多對多的關係是前面三條的擴展;理解了上面三條,這條也就好理解了。
4.4 用戶及用戶組配置文件介紹
linux系統下的帳戶文件主要有/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow 四個文件
4.4.1 與用戶相關的配置文件
- /etc/passwd #用戶的配置文件
- /etc/shadow #用戶影子口令文件
(1) 用戶的配置文件:/etc/passwd:
/etc/passwd文件中每行定義一個用戶帳號,有多少行就表示多少個帳號,在一行中能夠清晰的看出,各內容之間又經過「:」號劃分了多個字段,共7個部分,這7個部分分別定義了帳號的不一樣屬性,passwd文件實際內容以下:
提示:
passwd文件中有不少虛擬賬號,如bin,daemon等,通常來講,這些帳號是系統正常運行所須要的,在不肯定的狀況下,請不要隨意刪改此類帳號。
小結論:
1,useradd 添加用戶會更改/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow
2,passwd爲用戶設置密碼會更改/etc/shadow
(2)用戶的影子口令文件/etc/shadow
前面提到了,因爲passwd文件必需要被全部的用戶讀,因此會帶來安全隱患。而shadow文件就是爲了解決這個安全隱患而增長的。咱們來看下/etc/shadow文件的權限:
- passwd -n 7 -x 60 -w 10 -i 30 chensiqi
chage -m 7 -M 60 -W 10 -I 30 chensiqi
chage -m 7 -M 60 -W 10 -I 30 chensiqi
小結論
1,useradd 添加用戶會更改/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow
2,passwd爲用戶設置密碼會更改/etc/shadow
4.4.2 與用戶組相關的配置文件
/etc/group #用戶組配置文件
/etc/gshadow #用戶組的影子文件
用戶組配置文件/etc/group:
- /etc/group文件是用戶組的配置文件,內容包括用戶和用戶組,而且能顯示出用戶歸屬哪一個用戶組,由於一個用戶能夠歸屬一個或多個不一樣的用戶組;同一用戶組的用戶之間具備類似的特徵。好比咱們把某一用戶加入到root用戶組,那麼這個用戶就能夠瀏覽root用戶家目錄的文件,若是root用戶把某個文件的讀寫執行權限開放,root用戶組的全部用戶均可以修改此文件,若是是可執行的文件(好比腳本),root用戶組的用戶也是能夠執行的;用戶組的特性在系統管理中爲系統管理員提供了極大的方便,但安全性也是值得關注的,如某個用戶下有對系統管理有最重要的內容,最好讓用戶擁有獨立的用戶組,或者是把用戶下的文件的權限設置爲徹底私有;另外root用戶組通常不要輕易把普通用戶加入進去。
- /etc/group文件就是前面提到的記錄GID與用戶組名稱的。/etc/group文件同/etc/passwd相似,其文件權限也是644
小結論
1,groupadd 添加用戶組會更改/etc/group,/etc/gshadow
/etc/gshadow是/etc/group的加密諮詢文件,好比用戶組(Group)管理密碼就是存放在這個文件。/etc/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對不少用戶和組,定製一些關係結構比較複雜的權限模型,設置用戶組密碼是極有必要的。好比咱們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時咱們能夠經過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用到用戶組密碼:/etc/gshadow格式以下,每一個用戶組獨佔一行;