2、Linux文件、文件夾管理

1 ls

藍(lán)色:文件夾
黑色:普通文件
綠色:可執(zhí)行文件,命令、腳本
青色:軟鏈接
紅底黑字、黃底黑字:具有特殊權(quán)限的文件

options
-R遞歸顯示,將子目錄以及以下的目錄全都顯示
-d顯示文件本身信息,而不是文件夾內(nèi)部文件信息
-i顯示文件的inode信息

[root@node1 ~]$ ll -d /root/ 
dr-xr-x---. 10 root root 4096 Oct 31 11:51 /root/

[root@node1 ~]$ ls -i anaconda-ks.cfg 
33575004 anaconda-ks.cfg

2 ll文件信息詳解

每一條記錄共分7個(gè)部分,每個(gè)部分含義如下

  1. 10位信息12345678910:
    1表示文件類型:-普通文件,d文件夾,c/b字符/塊文件,s socket文件,l 鏈接文件
    234表示文件所有者權(quán)限
    567表示文件所有組權(quán)限
    8910表示其他用戶權(quán)限
    如果設(shè)置特殊權(quán)限如facl,將出現(xiàn)第11位+,表示文件有特殊權(quán)限
    -rw-rwxr--+ 1 root root 0 Oct 29 12:16 服務(wù)器.txt
    對(duì)于文件:rwx代表讀、寫、執(zhí)行
    對(duì)于文件夾:r能夠讀取文件夾下文件名,w能在文件夾下進(jìn)行文件的創(chuàng)建和刪除,x能夠進(jìn)入文件夾。對(duì)于文件夾一般都要賦予r+x的權(quán)限。
  2. 鏈接數(shù),創(chuàng)建硬鏈接會(huì)+1,軟鏈接不會(huì)。如果文件是文件夾,鏈接數(shù)等于文件夾下的子文件夾數(shù)。

創(chuàng)建目錄時(shí),默認(rèn)會(huì)生成兩個(gè)目錄項(xiàng):"."和".."。前者的inode號(hào)碼就是當(dāng)前目錄的inode號(hào)碼,等同于當(dāng)前目錄的"硬鏈接";后者的inode號(hào)碼就是當(dāng)前目錄的父目錄的inode號(hào)碼,等同于父目錄的"硬鏈接"。所以,任何一個(gè)目錄的"硬鏈接"總數(shù),總是等于2加上它的子目錄總數(shù)(含隱藏目錄),這里的2是父目錄對(duì)其的“硬鏈接”和當(dāng)前目錄下的".硬鏈接“。

  1. 文件所有者
  2. 文件所有組
  3. 文件大小,單位是字節(jié)
  4. 文件的mtime
  5. 文件絕對(duì)路徑

2.1 特殊權(quán)限 suid、sgid、stick

suid:
屬主的執(zhí)行位變成s,屬主須有x權(quán)限,否則顯示S,不生效
含義:將文件屬主擁有的能力,分配給所有能夠執(zhí)行這個(gè)文件的人
設(shè)置方法:

  • chmod 4777
  • chmod u+/-s

sgid:
屬組的執(zhí)行位變成s,屬組須有x權(quán)限,否則顯示S,不生效
含義:將文件屬組擁有的能力,分配給所有能夠執(zhí)行這個(gè)文件的人
設(shè)置方法:

  • chmod 2777
  • chmod g+/-s

sticky bit:
其他用戶的執(zhí)行位變成t,一般配置給777權(quán)限的共享文件夾
含義:賦予文件夾,實(shí)現(xiàn)將不同用戶的文件放入共享文件夾,不同用戶數(shù)據(jù)可以相互查看,但不能修改
設(shè)置方法:

  • chmod 1777
  • chmod o+/-t

3 cp

options
-r遞歸拷貝,將文件夾及其目錄下的全部文件拷貝,否則cp不能拷貝文件夾
-p保留權(quán)限和時(shí)間戳

4 mv

可以移動(dòng)文件和文件夾,保留時(shí)間戳信息

5 mkdir

options
-p遞歸創(chuàng)建父文件夾,如mkdir -p /a/b/c/d,會(huì)依次創(chuàng)建/a、/a/b、/a/b/c、/a/b/c/d文件夾

6 rm

不加參數(shù)只能刪除文件,不能刪除文件夾
-r遞歸刪除,可以刪除文件夾
-fforce,強(qiáng)制刪除,不詢問

#刪除/tmp/root文件夾及文件夾內(nèi)文件
[root@node1 ~]$ rm -rf /tmp/root
[root@node1 ~]$ rm -rf /tmp/root/
#只刪除/tmp/root文件夾下的文件,保留文件夾
[root@node1 ~]$ rm -rf /tmp/root/*

7 文件系統(tǒng)詳解

Linux文件系統(tǒng)(如ext2、ext3)規(guī)定,一個(gè)文件由目錄項(xiàng)、inode和數(shù)據(jù)塊組成:

  • 目錄項(xiàng):包括文件名和inode節(jié)點(diǎn)號(hào)。
  • Inode:又稱文件索引節(jié)點(diǎn),包含文件的基礎(chǔ)信息以及數(shù)據(jù)塊的指針。
  • 數(shù)據(jù)塊:包含文件的具體內(nèi)容。

目錄項(xiàng)

Linux系統(tǒng)中,目錄(directory)也是一種文件。打開目錄,實(shí)際上就是打開目錄文件。
目錄文件的結(jié)構(gòu)非常簡(jiǎn)單,就是一系列目錄項(xiàng)(dirent)的列表。每個(gè)目錄項(xiàng),由兩部分組成:

  • 所包含文件的文件名。(目錄r權(quán)限)
  • 以及該文件名對(duì)應(yīng)的inode號(hào)碼。(目錄x權(quán)限)

inode

理解inode,要從文件儲(chǔ)存說起。文件儲(chǔ)存在硬盤上,硬盤的最小存儲(chǔ)單位叫做"扇區(qū)"(Sector),每個(gè)扇區(qū)儲(chǔ)存512字節(jié)(相當(dāng)于0.5KB)。

操作系統(tǒng)讀取硬盤的時(shí)候,不會(huì)一個(gè)扇區(qū)一個(gè)扇區(qū)地讀取,這樣效率太低,而是一次性連續(xù)讀取多個(gè)扇區(qū),即一次性讀取一個(gè)"塊"(block)。這種由多個(gè)扇區(qū)組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續(xù)八個(gè) sector組成一個(gè) block。

文件數(shù)據(jù)都儲(chǔ)存在"塊"中,那么很顯然,我們還必須找到一個(gè)地方儲(chǔ)存文件的元信息,比如文件的創(chuàng)建者、文件的創(chuàng)建日期、文件的大小等等。這種儲(chǔ)存文件元信息的區(qū)域就叫做inode,中文譯名為"索引節(jié)點(diǎn)"。

inode包含文件的元信息,具體來說有以下內(nèi)容:

  • 文件的字節(jié)數(shù)。
  • 文件擁有者的User ID。
  • 文件的Group ID。
  • 文件的讀、寫、執(zhí)行權(quán)限。
  • 文件的時(shí)間戳,共有三個(gè):ctime指inode上一次變動(dòng)的時(shí)間,mtime指文件內(nèi)容上一次變動(dòng)的時(shí)間,atime指文件上一次打開的時(shí)間。
  • 鏈接數(shù),即有多少文件名指向這個(gè)inode。
  • 文件數(shù)據(jù)block的位置。

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

8 ln

硬鏈接

一般情況下,文件名和inode號(hào)碼是"一一對(duì)應(yīng)"關(guān)系,每個(gè)inode號(hào)碼對(duì)應(yīng)一個(gè)文件名。但是,Linux系統(tǒng)允許,多個(gè)文件名指向同一個(gè)inode號(hào)碼。這意味著,可以用不同的文件名訪問同樣的內(nèi)容;對(duì)文件內(nèi)容進(jìn)行修改,會(huì)影響到所有文件名;但是,刪除一個(gè)文件名,不影響另一個(gè)文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。

ln source_file target_file

軟鏈接

除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號(hào)碼雖然不一樣,但是文件A的內(nèi)容是文件B的路徑。讀取文件A時(shí),系統(tǒng)會(huì)自動(dòng)將訪問者導(dǎo)向文件B。因此,無論打開哪一個(gè)文件,最終讀取的都是文件B。這時(shí),文件A就稱為文件B的"軟鏈接"(soft link)或者"符號(hào)鏈接(symbolic link)。

這意味著,文件A依賴于文件B而存在,如果刪除了文件B,打開文件A就會(huì)報(bào)錯(cuò):"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號(hào)碼,文件B的inode"鏈接數(shù)"不會(huì)因此發(fā)生變化。

ln -s source_file target_file

區(qū)別

硬鏈接:

  • 不同路徑的文件指定的是同一個(gè)inode
  • 硬鏈接不能跨分區(qū)存在
  • 硬鏈接不能鏈接到目錄(要避免循環(huán)引用)
  • 刪除硬鏈接只會(huì)減少文件被硬鏈接的次數(shù),源文件不會(huì)動(dòng).

軟鏈接:

  • 是一個(gè)獨(dú)立的文件,有自己獨(dú)立的inode,引用的是路徑本身,不是inode
  • 刪除軟鏈接,跟源文件沒任何關(guān)系
  • 軟鏈接沒有存儲(chǔ)任何數(shù)據(jù),只是存儲(chǔ)了訪問文件的另一種路徑.
  • 軟鏈接可以對(duì)目錄創(chuàng)建,也可以跨分區(qū)
  • 源文件被刪除,軟連接將不可用。

9 touch

創(chuàng)建一個(gè)空文件,刷新文件的時(shí)間戳,默認(rèn)atime、mtime、ctime全部刷新

touch [OPTION]... FILE...
A FILE argument that does not exist is created empty, unless -c or -h
is supplied.

A FILE argument string of - is handled specially and causes touch to
change the times of the file associated with standard output.

Mandatory arguments to long options are mandatory for short options too.
  -a                     change only the access time
  -c, --no-create        do not create any files
  -d, --date=STRING      parse STRING and use it instead of current time
  -f                     (ignored)
  -h, --no-dereference   affect each symbolic link instead of any referenced
                         file (useful only on systems that can change the
                         timestamps of a symlink)
  -m                     change only the modification time
  -r, --reference=FILE   use this file's times instead of current time
  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
      --time=WORD        change the specified time:
                           WORD is access, atime, or use: equivalent to -a
                           WORD is modify or mtime: equivalent to -m
      --help     display this help and exit
      --version  output version information and exit

10 stat

查看文件的詳細(xì)信息

[root@node1 ~]$ stat f1.txt 
  File: ‘f1.txt’
  Size: 4402            Blocks: 16         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34690030    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 11:59:42.914676527 +0800
Modify: 2020-10-26 12:23:46.584552943 +0800
Change: 2020-10-26 12:23:46.584552943 +0800
 Birth: -

10.1 文件的時(shí)間戳

Access Time:文件最后的訪問時(shí)間
Modify Time:文件內(nèi)容最后的修改時(shí)間
Change Time:文件狀態(tài)最后的變更時(shí)間,包括文件的大小、權(quán)限等

10.2 atime的更新規(guī)則

為了防止文件被頻繁訪問,atime頻繁更新,增大系統(tǒng)寫IO的負(fù)擔(dān),atime的更新有兩個(gè)限定條件。

  • 當(dāng)mtime和ctime大于等于atime時(shí),發(fā)生文件訪問操作時(shí)更新atime
  • 不停的訪問該文件,atime不會(huì)一直更新,atime每24h更新一次

11 chown

改變文件的所有者

chown [OPTION]... [OWNER][:[GROUP]] FILE

Options:
  -R, --recursive        operate on files and directories recursively

12 chgrp

改變文件的所有組

chgrp [OPTION]... GROUP FILE...

Options:
  -R, --recursive        operate on files and directories recursively

13 chmod

改變文件權(quán)限
字符方式修改:
user(u)、group(g)、other(o)、all(a)
+添加權(quán)限,-減少權(quán)限,=賦予權(quán)限

chmod [OPTION]... MODE[,MODE]... FILE...
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
Options:
  -R, --recursive        operate on files and directories recursively

[root@node1 ~]$ chmod a+r anaconda-ks.cfg
[root@node1 ~]$ chmod o=rx anaconda-ks.cfg 

#參考復(fù)制RFILE的權(quán)限給FILE
chmod [OPTION]... --reference=RFILE FILE...

數(shù)字方式修改
r=4、w=2、x=1
特殊權(quán)限
suid=4、sgid=2、sitck=1
特殊權(quán)限的數(shù)字放在開頭

[root@node1 ~]$ chmod 3777 anaconda-ks.cfg 

14 umask

默認(rèn)是0022,設(shè)定命令umask 值
默認(rèn)文件權(quán)限:666-umask

umask是奇數(shù):666-033 = 633 + 011 = 644
umask是偶數(shù):666-022 = 644

默認(rèn)目錄權(quán)限:777-umask

umask是奇數(shù):777-033 = 744
umask是偶數(shù):777-022 = 755

永久修改/etc/profile

15 chattr 給文件設(shè)置特殊權(quán)限

chattr +i 文件 給文件加鎖,任何用戶不能修改
chattr -i 文件 給文件解鎖

16 lsattr查看文件特殊權(quán)限

17 md5sum 校驗(yàn)文件完整性

md5sum file能夠生產(chǎn)文件的MD5值,文件內(nèi)容的改動(dòng)會(huì)導(dǎo)致文件MD5值變化

[root@backup ~]$ md5sum f1.txt 
b026324c6904b2a9cb4b88d6d61c81d1  f1.txt

可以配合find和輸出重定向直接生成帶有絕對(duì)路徑的校驗(yàn)文件:
find /backup/ -type f  -exec md5sum {} \; > /backup/finger.txt

md5sum -c 校驗(yàn)文件比對(duì)本機(jī)文件的MD5值與校驗(yàn)文件中記錄的值是否一致

校驗(yàn)文件的格式為:
MD5值    文件(相對(duì)路徑或絕對(duì)路徑)

md5sum -c 讀取本機(jī)文件時(shí),會(huì)按照校驗(yàn)文件記錄的路徑進(jìn)行讀取,所以校驗(yàn)文件推薦使用絕對(duì)路徑。

18 mktemp創(chuàng)建臨時(shí)文件

創(chuàng)建一個(gè)臨時(shí)文件或目錄,并打印名字。名字的后綴至少帶有3個(gè)X。
-d 創(chuàng)建目錄

mktemp 111.XXX
111.X9B
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容