Linux基礎篇(一)

Linux是一種類Unix的開源操作系統,常用的常見的比較流行的linux系統主要有以下幾種:
1、Redhat
2、CentOS
3、Debian
4、Feodra
5、Mandriva
6、Ubuntu
7、Mint
其中值得一提的是,Redhat是現在企業用的比較多的,可以說是開源linux發行版裏面的領導者。也有比較完善的認證機制,學習資料也比較多。對外提供付費支持服務,其RPM管理工具已經被很多操作系統所採用。CentOS已經被redhat所收購。而CentOS是比較流行的個人用戶比較多的社區版操作系統。建議初學者使用這兩種中的某一種,由於linux核心基本沒有差異,所以使用起來差不多一樣,但是這兩種系統的學習資源會比較多,而且大部分的教材也是基於這兩種爲案例來講解的。
Debian在高級用戶裏使用量比較多,但是現在已經不再更新了好像,他有一個類似紅帽子的RPM的管理工具叫DPT也是使用很廣泛的一個管理軟件。
而漂亮一點的圖形界面的操作系統就是Ubuntu了,他是基於Debian的二次發行版本,目前應該是使用用戶數最多的linux操作系統,一般的筆記本電腦預裝的linux操作系統,就是Ubuntu。另外一個比Ubuntu做的還漂亮的操作系統是Mint。
linux的基本原則:
1、由目的單一的一堆小程序所組成,通過組合多個小程序可以完成許多很複雜的任務。
2、一切皆文件,從開始到現在,一直是linux的基本理念
3、儘量避免捕獲用戶接口
4、配置文件保存爲純文本格式
linux命令:
linux命令都是在shell上運行的,linux默認的shell是bash。
命令格式爲:
命令 [選項] 參數
選項和參數某些時候也可以省略,
選項 爲 修改命令提示方式,可以不使用,也可以同時使用多個,
選項有長選項和短選項,短選項爲字母,可以組合使用,短選項爲單詞,不能組合使用。
參數 爲 命令的作用對象。
linux的終端我們稱爲虛擬終端,Terminal。其實就是工作的區域,寫命令行的地方。
linux有三個默認的用戶,root,students,visitor。
切換用戶使用的命令爲SU,意爲swich user。# su -l root 爲完全切換。

問題一:文件名是不是文件的數據?

我們可以把一個磁盤分成一個或多個分區。每個分區可以包含一個文件系統。
i節點是固定長度的記錄項,它包含了有關文件的大部分信息。可是就是不包含文件名!

inode包含文件的元信息,具體來說有以下內容(基本上是文件屬性,後兩個比較重要,link and block,但是沒有文件名):
   size 文件字節數
  
owner 文件擁有者的User ID
   group 文件的Group ID
  
promiss 文件的讀、寫、執行權限
   time 文件的時間戳,共有三個:ctime means change time指inode上一次權限屬性等的變動的時間,mtime means modify time指文件內容上一次變動的時間,atime means access time指文件上一次打開的時間。
  
link No鏈接數,即有多少文件名指向這個inode
  * 文件數據block的位置

可以用stat命令,查看某個文件的inode信息:# stat example.txt**
總之,除了文件名以外的所有文件信息,都存在inode之中。

如果仔細得觀察硬盤中一個柱面組的i節點和數據塊部分,可以看到下圖的情況。

  1. 在圖中有兩個目錄項指向同一個i節點。每個i節點中都有一個鏈接計數,其值是指向該i節點的目錄項數。只有當鏈接計數減少至0時。纔可以刪除該文件(也就是說可以釋放該文件所佔用的硬盤空間了)。這就是爲什麼“解除對一個文件的鏈接”操作並不總是意味着“釋放該文件佔用的磁盤塊”的原因。在stat結構中,鏈接計數包含在st_nlink成員中,其基本系統數據類型是nlink_t。這種鏈接類型稱爲硬鏈接。
  2. 另外一種鏈接類型稱爲符號類型,對於這種鏈接,該文件的實際內容(在數據塊中)包含了該符號鏈接所指向的文件的名字。在下例中:

lrwxrwxrwx 1 root 7 Sep 1 12:33 lib -> usr/lib
1
該目錄項中的文件名是3字符的字符串lib,而在該文件中包含了7個數據字節usr/lib。該i節點的文件類型是S_IFLNK,於是系統知道這是個符號鏈接。
引入符號鏈接的原因是爲了避開硬鏈接的一些限制:
(1)硬鏈接通常要求鏈接和文件位於同一文件系統中。
(2)只有root用戶才能創建目錄的硬鏈接

  1. i節點包含了大多數與文件有關的信息:文件系統、文件訪問權限位、文件長度等等信息。stat結構中的大多數信息都取自i節點。只有兩項數據存放在目錄項中:文件名和i節點編號。
  2. 每個文件系統各自對他們的i節點進行編號,因此目錄項中的i節點編號數指向同一文件系統中的相應i節點,不能使一個目錄項指向另一個文件系統的i節點。這就是爲什麼ln命令不能跨文件系統的原因。

Linux基礎篇(一)

如果仔細得觀察硬盤中一個柱面組的i節點和數據塊部分,可以看到上圖的情況。

  1. 在圖中有兩個目錄項指向同一個i節點。每個i節點中都有一個鏈接計數,其值是指向該i節點的目錄項數。只有當鏈接計數減少至0時。纔可以刪除該文件(也就是說可以釋放該文件所佔用的硬盤空間了)。這就是爲什麼“解除對一個文件的鏈接”操作並不總是意味着“釋放該文件佔用的磁盤塊”的原因。在stat結構中,鏈接計數包含在st_nlink成員中,其基本系統數據類型是nlink_t。這種鏈接類型稱爲硬鏈接。
  2. 另外一種鏈接類型稱爲符號類型,對於這種鏈接,該文件的實際內容(在數據塊中)包含了該符號鏈接所指向的文件的名字。在下例中:

lrwxrwxrwx 1 root 7 Sep 1 12:33 lib -> usr/lib
1
該目錄項中的文件名是3字符的字符串lib,而在該文件中包含了7個數據字節usr/lib。該i節點的文件類型是S_IFLNK,於是系統知道這是個符號鏈接。
引入符號鏈接的原因是爲了避開硬鏈接的一些限制:
(1)硬鏈接通常要求鏈接和文件位於同一文件系統中。
(2)只有root用戶才能創建目錄的硬鏈接

  1. i節點包含了大多數與文件有關的信息:文件系統、文件訪問權限位、文件長度等等信息。stat結構中的大多數信息都取自i節點。只有兩項數據存放在目錄項中:文件名和i節點編號。
  2. 每個文件系統各自對他們的i節點進行編號,因此目錄項中的i節點編號數指向同一文件系統中的相應i節點,不能使一個目錄項指向另一個文件系統的i節點。這就是爲什麼ln命令不能跨文件系統的原因。

另一個問題:改變文件名會不會改變MD5

答:計算MD5只針對數據區的文件內容,而與文件名無關。所以改變文件名不會影響到MD5數值

一、Linux文件系統

  1、創建文件系統

  Linux中當磁盤格式化創建文件系統時,會創建一定數量的節點索引Inode以及一定數量的塊block,其中inode具有存儲文件屬性以及指向文件實體block的指針的功能,而block則具有存放文件內容的功能,CentOS6.X系統中非啓動分區的默認Inode大小爲256字節,啓動分區的inode默認大小爲128字節。Linux讀取文件的過程是先通過文件名找到對應的inode,再通過inode訪問其指向的block,最後從block中讀取文件內容輸出到屏幕上。

  

  2、刪除文件的原理

  Linux刪除文件的依據是檢查文件的i_link和i_count是否都爲0,其中i_count指的是文件的硬鏈接數,而i_link指的是調用文件的進程數,當源文件和所有硬鏈接被刪除且沒有進程調用該文件時,該文件的磁盤空間將會在存儲新數據時被佔用或在磁盤fsck檢查時被系統回收。

  二、文件屬性

  Linux系統中我們使用ls -lhi命令可以查看到目錄下所有文件以及文件對應的屬性,每個文件共有十列數據,除了最後一列的文件名外都是文件的屬性,因此文件名不存儲在inode中而是存儲在目錄的block中。所有十列數據的具體含義如下:

  第一列:Inode編號    

    1、inode稱爲索引節點,它的作用時存放文件的屬性信息以及作爲文件的索引
    2、inode是磁盤上的一塊存儲空間,CentOS非啓動分區默認256字節,啓動分區默認128字節
    3、inode的表現形式是一串數字,不同的文件對應的inode在文件系統中是唯一的
    4、inode節點號相同的文件,互爲硬鏈接文件,可以認爲是一個文件的不同入口
    5、ext3/ext4文件系統下,一般情況一個文件被創建後佔用一個inode和至少一個block
    6、block的大小一般有1K,2K,4K幾種,其中引導分區等爲1K,其他普通分區爲4K
    7、如果一個文件很大,可能佔多個block,如果文件很小,至少佔用一個並且剩餘空間浪費了
    8、查看inode以及block的大小和總量 dumpe2fs /dev/sda3|grep -iE 'inode size|block size' dumpe2fs /dev/sda3|grep -iE 'inode count|block count'
    9、查看inode總量以及使用量 df -i
    10、查看文件inode信息 ls -li stat 文件名
    11、格式化時指定inode以及block的大小 mkfs.ext4 -l 256 -b 2048 /dev/sda5

    12、Inode編號在系統中是唯一的

    與inode關聯的block知識總結如下:  

    1、磁盤讀取數據是按block爲單位讀取的
    2、一個文件可能佔用多個block,每讀取一個block就會消耗一次磁盤I/O
    3、如果要提升磁盤I/O性能,那麼就要儘可能一次性讀取數據儘量多
    4、一個block只能存放一個文件的內容,無論文件有多小。
    5、block並非越大越好,block太大對於小文件存放就會浪費磁盤空間
    6、大文件(大於16K)一般設置block大一點,小文件(小於1K)一般設置block小一點
    7、如果文件都是小文件而block太大就會浪費磁盤空間
    8、如果文件都是大文件而block太小就會浪費磁盤I/O、
    9、文件較大時,block設置大一些會提升磁盤訪問效率
    10、ext3/ext4文件一般設置爲4K
    11、block大小在格式化時設置

  第二列:文件類型及文件權限

    第一位代表的是文件類型

      Linux系統不像Windows系統一樣以擴展名區別文件類型,Linux文件類型在文件創建時就已經確定了,無法修改。

      Linux系統中常用的文件類型有普通文件以“-”表示、目錄以“d”表示、符號鏈接以“l”表示、塊設備以"b"表示,除此之外還有字符設備以“c”表示、套接字文件以“s”表示和管道文件以“c”表示

      Linux系統中普通文件大致分爲文本文件、二進制文件比如系統命令文件、數據格式文件,數據格式文件只能用命令讀取比如/var/log/wtmp文件只能用last命令讀取

    第二到四位代表的是文件屬主的權限

    第五到七位代表的是文件屬組的權限

    第八到十位代表的是其他用戶的權限

      文件權限的設置通過chmod命令

      文件的默認權限通過umask命令,目錄的默認權限是777-umask的值,文件的默認權限是666-umask的值

      文件權限分爲普通權限和特殊權限,普通權限有r讀取權限數字表示爲4、w寫入權限數字表示爲2、x執行權限數字表示爲1,特殊權限有suid、sgid、t

      數字方式設置權限,將三個位置各自的權限轉爲數字然後相加得出一組三位數字或四位數字,如rw-r--r--的數字表示就是42-4--4--,所以設置權限就是chmod 644

      字符方式設置權限,字符方式設置權限時用u代表文件屬主的權限,g代表文件屬組的權限,o代表其他用戶的權限,+代表增加權限,-代表取消權限,=代表修改權限,於是rw-r--r--的權限設置就是chmod u=rw,g=r,o=r

      目錄的普通權限r代表可以瀏覽目錄的內容,沒有x權限時會提示不能訪問目錄下的文件和子目錄但仍可以看到文件名和目錄名,w代表增加,刪除,修改目錄下文件名,需要有x權限才能實際操作,x代表可以進入目錄

      suid顯示在文件屬主的x權限位上,當沒有x權限時顯示爲S,否則顯示爲s,該權限只對命令和二進制程序文件有效,讓非root用戶可以以root身份運行只有root才能使用的命令

      被設置suid的命令在運行時,用戶具有root對該命令的所有權限

      sgid與suid不同,不僅可以對文件設置,也可以對目錄設置,對目錄設置時可以讓其他用戶在該目錄下創建的文件和目錄具有和該目錄相同的組設置

      suid與sgid是一把雙刃劍,對系統安全有一定威脅,應該取消不必要的系統默認suid和sgid命令,通過find命令的perm參數可以找出suid和sgid命令

      t權限讓其他用戶不能刪除文件

      特殊權限還有i不可修改權限和a只追加權限,需要通過chattr設置,lsattr查看,i權限讓任何人不可以修改文件,a權限讓文件只能被動追加不能認爲主動追加內容

  第三列:文件硬鏈接數

    創建鏈接的方式  ln  -s  源文件名  鏈接文件名    -s  創建軟鏈接

    硬鏈接知識點:

      1、具有相同Inode節點號的多個文件互爲硬鏈接文件
      2、刪除硬鏈接文件或源文件任意之一,文件實體並未被刪除
      3、只有刪除源文件與所有硬鏈接文件,文件實體纔會被刪除
      4、當所有硬鏈接文件及源文件被刪除後,在存放新數據時會佔用該文件空間或者磁盤fsck檢查時空間被系統回收
      5、硬鏈接文件就是文件的另一個入口
      6、可以通過創建硬鏈接來防止重要文件被誤刪
      7、通過命令ln 源文件名 鏈接文件名 來創建硬鏈接
      8、硬鏈接文件可以用rm命令刪除
      9、對於沒有進程調用的文件,硬鏈接數爲0,文件就會被刪除

    

    軟鏈接知識點:

      1、軟連接類似Windows的快捷方式(可以用readlink命令查看其指向)
      2、軟連接類似一個文本文件,裏面存放的時源文件的路徑,指向源文件實體
      3、刪除源文件,軟連接文件依然存在,但是無法訪問指向的源文件路徑內容了
      4、失效的時候一般是白字紅底閃爍提示
      5、軟連接文件可以用命令ln -s 源文件名 鏈接文件名 來創建
      6、軟連接和源文件是不同類型的文件,也是不同的文件,inode號不相同
      7、刪除軟連接文件可以用rm命令

    文件鏈接結論:

      1、刪除軟連接文件對源文件和硬鏈接文件無任何影響
      2、刪除硬鏈接文件對源文件和軟連接文件無任何影響
      3、刪除源文件對硬鏈接文件無影響,但是軟連接文件會失效
      4、同時刪除源文件和硬鏈接文件會使文件真正被刪除
      5、很對硬件設備的快照功能就是利用了硬鏈接的原理
      6、源文件和硬鏈接文件具有相同的inode節點號,可以認爲是一個文件或一個文件的多個入口
      7、源文件和軟連接文件inode節點號不相同,是不同的文件,軟連接相當於源文件的快捷方式,含有源文件的位置指向

    目錄鏈接結論:

      1、目錄不能創建硬鏈接但是可以創建軟連接
      2、目錄的軟連接是運維中的常用技巧,可以生成一個固定的訪問路徑又不影響軟件升級
      3、目錄的硬鏈接不能跨越文件系統
      4、每個目錄都有一個硬鏈接"."號,以及對應上級目錄的硬鏈接".."
      5、在父目錄裏創建子目錄,父目錄的連接數加一,但是在父目錄創建文件,父目錄的鏈接數不會增加

  

  第四列:文件屬主

  第五列:文件屬組

    useradd命令創建用戶,會修改passwd,shadow,group,gshadow四個文件

    groupadd命令創建組

    chown命令修改文件屬主,也可以修改屬組

    chgrp命令修改文件屬組

    Linux角色通過UID和GID區分
    在Linux中UID爲0的用戶即爲超級用戶
    Linux用戶分爲超級用戶,普通用戶和虛擬用戶
    超級用戶UID爲0,GID也爲0
    虛擬用戶UID爲1~499,GID也爲1~499
    普通用戶UID爲500~65535,GID也爲500~65535

    

    /etc/passwd文件即用戶賬號信息文件,必須瞭解,文件中每行以冒號分隔共有七列
    第一列爲賬號名稱
    第二列爲賬號密碼
    第三列爲賬號UID
    第四列爲賬號GID
    第五列爲用戶說明
    第六列爲用戶家目錄
    第七列爲shell解釋器

    /etc/shadow文件即用戶密碼文件,文件中每行以冒號分隔共有九列
    第一列賬號名稱
    第二列賬號密碼
    第三列最近更改密碼的時間
    第四列禁止修改密碼的天數
    第五列用戶必須更改密碼的天數
    第六列警告更改密碼的期限
    第七列不活動時間
    第八列失效時間
    第九列標誌

    /etc/group文件即組信息文件,文件中每行以冒號分隔共四列
    第一列組名
    第二列組密碼
    第三列GID
    第四列組成員

    /etc/gshadow文件即組密碼文件,文件中每行以冒號分隔共四列
    第一列組名
    第二列組密碼
    第三列組管理員賬號
    第四列組成員

  第六列:文件大小

  第七、八、九列:文件修改時間

    stat命令查看文件詳細屬性

    文件訪問時間:文件內容被訪問就改變

    文件修改時間:文件內容被修改就改變

    文件改變時間:文件屬性改變時就改變

  第十列:文件名

  三、相關面試題

  1、軟鏈接和硬鏈接的區別,答題思路從以下四方面回答:

    1)軟硬鏈接的概念
    2)軟硬鏈接的創建方式
    3)軟硬鏈接對於文件的區別
    4)軟硬鏈接對於目錄的區別

  2、一個100M(100000K)的磁盤分區,分別寫入1K的文件或寫入1M的文件,分別可以寫多少個

    假設block爲4K的情況下,寫入1K的文件分兩種情況
    inode足夠,那麼寫入文件數量就是block的數量,浪費3/4的容量
    inode數量小於block數量,那麼寫入文件數量就是inode的數量,浪費3/4的容量

    寫入1M的文件的數量等於總的block數量/(1M/block大小),基本可以寫入250個1M的文件

  3、如果向磁盤寫入數據提示如下錯誤:No sapce left on device,通過df -h查看磁盤空間發現沒有滿,可能是什麼原因,發生這種情況的原因是什麼

    磁盤空間滿了有兩種情況,一是inode消耗完了,二是block消耗完了,根據df -h結果可知block沒有消耗完,那麼可能就是inode消耗完了,產生的原因可能是系統臨時郵件目錄生成了太多小文件

出處:
    https://blog.csdn.net/qq_22080999/article/details/81570571
    https://www.cnblogs.com/lfpython/p/8361781.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章