回想起來,從事linux運維工作已近5年之久了,日常工作中會用到很多常規命令,之前簡單羅列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html
今天在這裡,詳細總結下運維工作中常常用到的一些操作命令(依據本人使用經驗而言):
檔案系統結構和基本操作命令
chmod命令:改變許可權
常用用法:chmod -R xxxx FILE 含義:設定檔案或者目錄的許可權屬性,加上R選項,表示遞迴設定目錄下檔案和目錄的許可權屬性 上面有4個x,每個x的值為0-7,如果少於4個,那麼預設在前面用0值補全,即“77”等價於“0077”。為了簡單起見,我們每次使用的時候,都指定4個x好了。 第一個"x":設定SUID(4),SGID(2),STICKY(1) 第二個"x":設定檔案屬主的r許可權(4),w寫許可權(2),x執行許可權(1) 第三個"x":設定檔案所屬組的r許可權(4),w寫許可權(2),x執行許可權(1) 第四個"x":設定其他使用者的r許可權(4),w寫許可權(2),x執行許可權(1) 備註: 設定了SUID,會把檔案屬主的"rwx"中的x替換為s[檔案屬主具有x許可權]或者S[檔案屬主不具有x許可權] 設定了SGID,會把檔案所屬組的"rwx"中的x替換為s[檔案所屬組具有x許可權]或者S[檔案所屬組不具有x許可權] 設定了STICKY,會把其他使用者的"rwx"中的x替換為t[其他使用者具有x許可權]或者T[其他使用者不具有x許可權] 另外有一個問題需要注意: 1)在清除一般檔案的SUID,SGID,STICKY許可權的時候,可以使用"chmod 0xxx"的形式 2)在清除目錄的SUID,SGID許可權的時候,不可以使用"chmod 0xxx"的形式。在[1]中也提到了一個解決方案, 就是在原先的4個x的基礎上,再加一個或多個前置x,我們取1位0好了,即"0xxxx"的形式。 綜上,我們使用"0xxxx"(指定5位)來設定檔案屬主,檔案所屬組,其他使用者的rwx許可權和SUID,SGID,STICKY許可權。
chown命令:改變屬主
常用用法:chown [-R] OWNER FILE 含義:改變檔案的所有者,加上R選項,表示遞迴 通常使用時會加上改變所屬組的部分,即"所屬者.所屬組" 或者 "所屬者:所屬組" chown [-R] OWNER.GROUP FILE chown [-R] OWNER:GROUP FILE
chgrp命令:改變屬組
常用用法:chgrp [-R] GROUP FILE 含義:將FILE的使用者組改為GROUP,如果指定了-R選項,那麼遞迴改變
rm命令:刪除檔案
常用用法:rm -rf FILE 含義:刪除檔案 -r:如果FILE是目錄,那麼遞迴刪除目錄; -f:如果FILE是隻讀檔案,不再提醒,直接刪除
find命令:查詢檔案
一、常用用法 find path [-maxdepth N] test 二、含義與選項 2.1、含義 在指定路徑下,找到符合條件的檔案和目錄。 2.2、選項表示的意思 "path":表示查詢範圍的路徑。 "-maxdepth N":表示查詢的最深深度為N層。 "test":查詢需要滿足的條件。 三、常用的test 3.1、關於檔案時間的幾個test test 說明 -amin n 以最後訪問檔案block節點中資料的時間為判斷依據,以多少個分鐘為單位 -atime n 以最後訪問檔案block節點中資料的時間為判斷依據,以多少個24小時為單位 -cmin n 以最後修改檔案inode節點中後設資料的時間為判斷依據,以多少個分鐘為單位 -ctime n 以最後修改檔案inode節點中後設資料的時間為判斷依據,以多少個24小時為單位 -mmin n 以最後修改檔案block節點中資料的時間為判斷依據,以多少個分鐘為單位 -mtime n 以最後修改檔案block節點中資料的時間為判斷依據,以多少個24小時為單位 需要注意:在以上6個選項中,數字"n"有3種形式,分別是:n,+n,-n 為了更加透徹完整地理解,可以歸納得到如下結論。 3.1.1)以"多少個分鐘"為單位的選項 第一種情況"n"為"n" (FileTime-(NowTime-n*UNIT))>0 && (FileTime-(NowTime-n*UNIT))<=UNIT 第二種情況"n"為"+n" (FileTime-(NowTime-n*UNIT))<0 第三種情況"n"為"-n" (FileTime-(NowTime-n*UNIT))>0 "n"和"-n"的情況具有一定的重複區域,即某個時刻"n"能夠找到某個檔案,"-n"也能夠找到相同的檔案。 3.1.2)以"多少個24小時"為單位的選項 第一種情況"n"為"n" (FileTime-(NowTime-(n+1)*UNIT))>0 && (FileTime-(NowTime-(n+1)*UNIT))<=UNIT 第二種情況"n"為"+n" (FileTime-(NowTime-(n+1)*UNIT))<0 第三種情況"n"為"-n" (FileTime-(NowTime-n*UNIT))>0 注意:這裡沒有"n+1",避免了"n"和"-n"的情況下的重複區域。 特別備註: 1)在上述描述中,系統當前時間(NowTime)和檔案相應欄位的時間(FileTime)都表示成以秒為單位;在以"多少個分鐘"為單位的選項中, UNIT=60(1分鐘有60秒),在以"多少個24小時"為單位的選項中,UNIT=24*60*3600(24小時有24*60*3600秒) 2)加了"-daystart"選項後,NowTime就變為當日午夜時間 3.1.3)舉一些例子來看 先假設系統當前時間是"2015-06-09 13:35:50"。 示例1 那麼find . -amin 10命令,查詢的檔案的"atime"範圍: 2015-06-09 13:25:51 -- 2015-06-09 13:26:50 示例2 那麼find . -amin -10命令,查詢的檔案的"atime"範圍: 2015-06-09 > 13:25:50[因此,"2015-06-09 13:26:30"就既能通過-amin 10得到,也能通過-amin -10得到] 示例3 那麼find . -amin +10命令,查詢的檔案的"atime"範圍: 2015-06-09 < 13:25:50 示例4 那麼find . -atime 5命令,查詢的檔案的"atime"範圍: 2015-06-03 13:35:51 -- 2015-06-04 13:35:50 示例5 那麼find . -atime -5命令,查詢的檔案的"atime"範圍: 2015-06-04 > 13:35:50 示例6 那麼find . -atime +5,查詢的檔案的"atime"範圍 2015-06-03 < 13:35:50 3.2、關於檔案許可權的test test 說明 -perm mode 目的檔案的許可權跟"mode"一致 -perm -mode 目的檔案的許可權包含了"mode" -perm /mode 目的檔案的許可權跟"mode"有交集 3.3、關於檔案型別的test 關於檔案型別的test為"-type c",其中"c"表示檔案型別特徵碼,對於檔案型別特徵碼的介紹: b block (buffered) special c character (unbuffered) special d directory p named pipe (FIFO) f regular file l symbolic link; s socket D door (Solaris) 3.4、關於檔案所屬使用者的test "-user uname":表示屬於"uname"這個使用者的檔案,"uname"可以是"使用者名稱稱",也可以是"使用者ID,即uid"。 3.5、關於檔案所屬使用者組的test "-group gname":表示屬於"gname"這個使用者組的檔案,"gname"可以是"使用者組名稱",也可以是"使用者組ID,即gid"。 3.6、關於檔名稱的test "-name pattern":檔名符合"pattern"這個正規表示式的檔案。 四、其他 "find"命令的完整定義: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 但是在使用"find"命令的時候,一般不解析遇到的軟符號連結檔案,如果解析的話很容易造成遞迴死迴圈,而我們一般也不使用除錯和優化選項, 因此"-H","-L","-P","-D","-O"這些選項一般不常用。 "expression"中包括了"options","tests","actions",以及它們之間的"operators"這四個部分。但是"options"一般也沒有什麼用,除了 "-maxdepth"這個"option"],"actions"也比較複雜,因而我們可以選擇先使用簡單的"find"命令,找出符合條件的檔案,然後再通過管道或者 指令碼的方式進行操作。 因此,最終"-H","-L","-P","-D","-O","expression"中的"options","actions","operators"都不需要。
ln命令:建立符號連結檔案
常用用法:ln [-s] TARGET LINK_NAME 含義: 有-s選項,表示建立到TARGET的軟符號連結檔案,軟符號連結檔案的檔名為LINK_NAME 沒有-s選項,表示建立到TARGET的硬符號連結檔案,硬符號連結檔案的檔名為LINK_NAME 注意:當一個區分比如/分割槽空間快爆滿時,可以將這個分割槽下的大檔案先mv到別的大分割槽下(比如home區分),然後再將這個大檔案從home分割槽軟連結回到/分割槽下
mount命令
格式:mount [-引數] [裝置名稱] [掛載點] 其中常用的引數有: -a 安裝在/etc/fstab檔案中類出的所有檔案系統。 -f 偽裝mount,作出檢查裝置和目錄的樣子,但並不真正掛載檔案系統。 -n 不把安裝記錄在/etc/mtab 檔案中。 -r 講檔案系統安裝為只讀。 -v 詳細顯示安裝資訊。 -w 將檔案系統安裝為可寫,為命令預設情況。 -t 指定裝置的檔案系統型別,常見的有: ext2 linux目前常用的檔案系統 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 網路檔案系統 iso9660 CD-ROM光碟標準檔案系統 ntfs windows NT/2000/XP的檔案系統 auto 自動檢測檔案系統 -o 指定掛載檔案系統時的選項,有些也可寫到在/etc/fstab中。常用的有: defaults 使用所有選項的預設值(auto、nouser、rw、suid) auto/noauto 允許/不允許以 –a選項進行安裝 dev/nodev 對/不對檔案系統上的特殊裝置進行解釋 exec/noexec 允許/不允許執行二進位制程式碼 suid/nosuid 確認/不確認suid和sgid位 user /nouser 允許/不允許一般使用者掛載 codepage=XXX 內碼表 iocharset=XXX 字符集 ro 以只讀方式掛載 rw 以讀寫方式掛載 remount 重新安裝已經安裝了的檔案系統 loop 掛載迴旋裝置 需要注意: 掛載點必須是一個已經存在的目錄,這個目錄可以不為空,但掛載後這個目錄下以前的內容將不可用,umount以後會恢復正常。 使用多個引數的時候,-o只用一次,引數之間用半形逗號隔開: [root@redis-new01 ~]# mount –o remount,rw / 例如要掛載windows下檔案系統為FAT32的D盤,一般而言在Linux下這個分割槽對應/dev/hda5,根據具體的分割槽情況會有不同, 這裡就以hda5來舉例說明: [root@redis-new01 ~]# mkdir /mnt/hda5 //建立hda5的目錄作為掛載點,位置和目錄名可自定義// [root@redis-new01 ~]# mount -t vfat /dev/hda5 /mnt/hda5 一般而言,Linux會自動探測分割槽的檔案系統,除非讓你指定時,否則-t vfat 可以省掉。 [root@redis-new01 ~]# mount /dev/hda5 /mnt/hda5 這樣就可以進入/mnt/hda5目錄去訪問分割槽中的資源了。 =====為什麼mount上分割槽後顯示不了中文檔案為問號/亂碼?===== 顯示問號表明你的系統中沒有可識別使用的中文字型,請先安裝中文字型。確保你的系統已經可以很好的顯示中文。顯示為亂碼一般是mount預設 使用的檔案系統編碼和檔案系統中檔案的實際編碼不一致造成的。要想正常顯示中文檔案,mount時需要用到 -o 引數裡的codepage和iocharset 選項。codepage指定檔案系統的內碼表,簡體中文中文程式碼是936;iocharset指定字符集,簡體中文一般用cp936或gb2312。 [root@redis-new01 ~]# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5 一般來說 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5 就可以解決問題了。 如果這樣做了以後還有問題,請嘗試UTF-8編碼: [root@redis-new01 ~]# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5 =====為什麼mount上去以後分割槽普通使用者不可寫?===== mount時加上 –o umask=000 即可: [root@redis-new01 ~]# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5 =====為什麼mount上去後的分割槽中的檔案都變成短檔名了?===== 這是檔案系統掛錯的原因,將FAT32掛載成FAT16時就會出現這種情況,先umount,然後用 –t vfat 重新掛載即可解決問題。 [root@redis-new01 ~]# mount –t vat /dev/hda5 /mnt/hda5 =====為什麼不能mount ntfs分割槽?====== 這是核心不支援NTFS檔案系統的原因,請重新編譯核心或者安裝核心的NTFS檔案系統支援包,以使得核心有NTFS檔案系統的支援。 =====如何掛載U盤和mp3?===== 如果計算機沒有其它SCSI裝置和usb外設的情況下,插入的U盤的裝置路徑是 /dev/sda1,用命令: [root@redis-new01 ~]# mkdir /mnt/u [root@redis-new01 ~]# mount /dev/sda1 /mnt/u 掛載即可。 =====可以直接使用iso檔案嗎?===== 可以,就是mount的這一選項使得Linux下有免費虛擬光碟機的說法,具體用法是: [root@redis-new01 ~]# mkdir /mnt/iso [root@redis-new01 ~]# mount –o loop linux.iso /mnt/iso 當然,掛載以後掛載點/mnt/iso也是隻讀的。 =====怎麼不可以mount iso檔案?===== 一般而言,大多數的發行版使用的核心均已將loop裝置的支援編譯進去了,但是也有沒有的情況,所以請確保系統所使用的核心支援loop裝置。 第二種情況是iso檔案被放置到了NTFS或其它只讀檔案系統中了。掛載loop 裝置必須要求掛載到一個可寫的分割槽中,目前Linux核心對NTFS 檔案系統的寫支援非常有限,請將iso檔案複製到其它可寫檔案系統中後再掛載。 =====如何掛載光碟機和軟碟機===== 一般來說CDROM的裝置檔案是/dev/hdc,軟碟機的裝置名是/dev/fd0 [root@redis-new01 ~]# mkdir /mnt/cdrom [root@redis-new01 ~]# mount /dev/hdc /mnt/cdrom //掛載光碟機 // [root@redis-new01 ~]# mkdir /mnt/floppy [root@redis-new01 ~]# mount /dev/fd0 /mnt/floppy //掛載軟碟機 // =====為何掛載的CD-ROM不能顯示中文檔案?===== 使用 –o iocharset=cp936 選項一般能解決問題,否則使用utf-8編碼。 [root@redis-new01 ~]# mount –o iocharset=cp936 /dev/hdc /mnt/cdrom =====如何開機自動掛載分割槽?===== 每次掛載都要輸入那麼長的命令的確是繁瑣了些,只要將分割槽資訊寫到/etc/fstab檔案中即可實現系統啟動的自動掛載,例如對於/dev/hda5的自動掛載新增如下的行即可: /dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0 ===== 如何掛載samba 分割槽?===== [root@redis-new01 ~]# mkdir /mnt/share [root@redis-new01 ~]# mount -t smbfs -o username=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share 如果中文顯示不正常請嘗試UTF-8編碼。當然可以寫到fstab中實現自動掛載。 =====mount --bind是什麼意思?===== mount --bind 是將一個目錄中的內容掛載到另一個目錄上,用法是 [root@redis-new01 ~]# mount --bind olddir newdir 該命令使得自己搭建的FTP要共享某個目錄的時候變得特別方便。如果要取消mount用命令: [root@redis-new01 ~]# mount --move olddir newdir 即可。 如果mount --bind 也想寫入fstab中的話格式如下: olddir newdir none bind 0 0 =====umount基本用法是?===== 譬如 /dev/hda5 已經掛載在/mnt/hda5上,用一下三條命令均可解除安裝掛載的檔案系統 [root@redis-new01 ~]# umount /dev/hda5 [root@redis-new01 ~]# umount /mnt/hda5 [root@redis-new01 ~]# umount /dev/hda5 /mnt/hda5 =====為什麼umount的時候老顯示 device busy?===== 這是因為有程式正在訪問這個裝置,最簡單的辦法就是讓訪問該裝置的程式退出以後再umount。 可能有時候使用者搞不清除究竟是什麼程式在訪問裝置,如果使用者不急著umount,則可以用: [root@redis-new01 ~]# umount -l /mnt/hda5 來解除安裝裝置。選項 –l 並不是馬上umount,而是在該目錄空閒後再umount。 還可以先用命令 ps aux 來檢視佔用裝置的程式PID,然後用命令kill來殺死佔用裝置的程式,這樣就umount的非常放心了。 方法一: # fuser -m -v /nfs_old/ /nfs_old/: root 2699 ..c.. bash root 2999 ..c.. su 如上所示,有兩個程式佔用了,將其kill掉,再重新取消掛載。 # kill -9 2699 2999 # umount /nfs_old/ 方法二: # umount -l /nfs_old/ 方法三: # fuser -km /nfs_old/ =========================案例說明========================= 在做專案時,客戶需要FTP同時訪問兩個目錄,即實現一個ftp賬號同時訪問兩個目錄。要清楚,在建FTP時,都是一個使用者對應一個目錄, 當FTP使用者登入後,就只訪問當前目錄。但如果需要訪問到其他目錄,這個該如何解決呢? 剛開始以為使用連結可以實現這個功能,但是發現連結成功了,但是使用ftp是不可以訪問的,不成功。 最終解決方法:使用mount的方法,把目錄掛到,原來的目錄中。 例如: 使用者test要同時訪問到目錄/data1、/data2 在test使用者家目錄下新建兩個目錄test1、test2 然把把/data1、/data2掛到對應的test1、test2 [root@huanqiu ~][root@redis-new01 ~]# mkdir /home/test/{test1,test2} [root@huanqiu ~][root@redis-new01 ~]# mount --bind /data1 /home/test/test1 [root@huanqiu ~][root@redis-new01 ~]# mount --bind /data2 /home/test/test2 這樣就可以使用test賬號登陸ftp後,同時訪問到/data1、/data2目錄了。
mkdir命令:建立目錄
常用用法: 含義:建立目錄; 如果是建立層次目錄結構(即建立連級目錄),就加上-p引數。 例如: mkdir test1 test2 ... mkdir -p test/test1/test2/test3 mkdir test/test{1,2,3,4,5}
tar命令:打包
解壓 語法:tar [主選項+輔選項] 檔案或者目錄 使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。 主選項: c 建立新的檔案檔案。如果使用者想備份一個目錄或是一些檔案,就要選擇這個選項。相當於打包。 x 從檔案檔案中釋放檔案。相當於拆包。 t 列出檔案檔案的內容,檢視已經備份了哪些檔案。 特別注意,在引數的下達中, c/x/t 僅能存在一個!不可同時存在!因為不可能同時壓縮與解壓縮。 輔助選項: -z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮或解壓? 一般格式為xx.tar.gz或xx. tgz -j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮或解壓?一般格式為xx.tar.bz2 -v :壓縮的過程中顯示檔案!這個常用 -f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加其他引數! -p :使用原檔案的原來屬性(屬性不會依據使用者而變) --exclude FILE:在壓縮的過程中,不要將 FILE 打包! --remove-files:打包後將原始檔刪除 常常使用的結構: tar tar.gz tar.bz2 比如將檔案file1打包上上面三種格式,分別是: tar -vcf file.tar file #將檔案file打包成tar格式,打包引數-c tar -vxf file.tar -C /mnt #將file.tar包解壓到目標目錄/mnt上,解包引數-x,-C是解壓到哪個目標目錄下 tar -zvcf file.tar.gz file tar -zvxf file.tar.gz -C /mnt tar -jvcf file.tar.bz2 file tar -jvxf file.tar.bz2 -C /mnt 示例一: [root@localhost ~]# ll /mnt/kevin.txt -rw-r--r--. 1 root root 0 Jun 8 03:03 /mnt/kevin.txt [root@localhost ~]# tar -zvcf /opt/kevin-`date +%Y%m%d`.tar.gz /mnt/kevin.txt --remove-files tar: Removing leading `/' from member names /mnt/kevin.txt [root@localhost ~]# ll /opt/ -rw-r--r--. 1 root root 118 Jun 8 03:03 kevin-20180608.tar.gz [root@localhost ~]# ll /mnt/kevin.txt ls: cannot access /mnt/kevin.txt: No such file or directory 示例二:將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar [root@linux ~]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮! [root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮 特別注意: 在引數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識。 如果加 z 引數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~ 如果加 j 引數,則以 .tar.bz2 來作為附檔名啊~ 上述指令在執行的時候,會顯示一個警告訊息: tar: Removing leading `/" from member names 這是關於絕對路徑的特殊設定。 示例三:查閱上述 /tmp/etc.tar.gz 檔案內有哪些檔案? [root@linux ~]# tar -ztvf /tmp/etc.tar.gz 由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的檔案時, 就得要加上 z 這個引數了!這很重要的! 示例四:將 /tmp/etc.tar.gz 檔案解壓縮在 /usr/local/src 底下 [root@linux ~]# cd /usr/local/src [root@linux src]# tar -zxvf /tmp/etc.tar.gz 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個示例來說 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz 則解開的目錄會在 /usr/local/src/etc ,另外,如果您進入 /usr/local/src/etc 則會發現,該目錄下的檔案屬性與 /etc/ 可能會有所不同喔! 示例五:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已 [root@linux ~]# cd /tmp [root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd 我可以透過 tar -ztvf 來查閱 tarfile 內的檔名稱,如果單隻要一個檔案, 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了! 示例六:我要備份 /home, /etc ,但不要 /home/dmtsai [root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc 另外:tar命令的C引數 [root@linux ~]# tar -cvf file2.tar /home/usr2/file2 tar: Removing leading '/' from members names home/usr2/file2 該命令可以將/home/usr2/file2檔案打包到當前目錄下的file2.tar中, 需要注意的是:使用絕對路徑標識的原始檔,在用tar命令壓縮後,檔名連同絕對路徑(這裡是home/usr2/,根目錄'/'被自動去掉了)一併被壓縮排來。使用tar命令解壓縮後會出現以下情況: [root@linux ~]# tar -xvf file2.tar [root@linux ~]# ls …… …… home …… …… 解壓縮後的檔名不是想象中的file2,而是home/usr2/file2。 [root@linux ~]# tar -cvf file2.tar -C /home/usr2 file2 該命令中的-C dir引數,將tar的工作目錄從當前目錄改為/home/usr2,將file2檔案(不帶絕對路徑)壓縮到file2.tar中。 注意:-C dir引數的作用在於改變工作目錄,其有效期為該命令中下一次-C dir引數之前。 使用tar的-C dir引數,同樣可以做到在當前目錄/home/usr1下將檔案解壓縮到其他目錄, 例如: [root@linux ~]# tar -xvf file2.tar -C /home/usr2 而tar不用-C dir引數時是無法做到的: [root@linux ~]# tar -xvf file2.tar /home/usr2 tar: /tmp/file: Not found in archive tar: Error exit delayed from previous errors
unrar命令:解壓RAR檔案
一、常用用法 unrar x "rar檔名" 二、含義與選項 2.1、含義 解壓rar檔案到當前目錄,並儲存原壓縮檔案目錄結構。 2.2、選項 “x”:解壓時儲存原壓縮檔案目錄結構 示例: 檢視rar包中的內容: [root@redis-new01 ~]# unrar l *.rar 或者 [root@redis-new01 ~]# unrar v *.rar 測試rar包是否能解壓成功: [root@redis-new01 ~]# unrar t *.rar 解壓到當前資料夾: [root@redis-new01 ~]# unrar e *.rar 解壓到指定資料夾: [root@redis-new01 ~]# unrar x *.rar /tmp =========================================================== zip命令用來壓縮檔案。gzip是個使用廣泛的壓縮程式,檔案經它壓縮過後,其名稱後面會多處“.gz”副檔名。 1)用法: gzip [選項引數][-s <壓縮字尾字串>] [檔案...] 或 gzip [選項引數][-s <壓縮字尾字串>] [目錄] 2)功能: gzip是個使用廣泛的解壓縮程式,它用於解開被gzip壓縮過的檔案,這些壓縮檔案預設最後的副檔名為".gz"。 事實上gzip就是gzip的硬連線,因此不論是壓縮或解壓縮,都可通過gzip指令單獨完成。 3)選項引數: -d --decompress --uncompress 解開壓縮檔案; -v --verbose 顯示指令執行過程; -l --list 列出壓縮檔案的相關資訊; -r --recursive 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理; -A --catenate: 新增檔案到已存在的備份檔案; -B 設定區塊大小 -c 把解壓後的檔案輸出到標準輸出裝置 示例一 [root@redis-new01 ~]# gzip * [root@redis-new01 ~]# ll 總用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz 示例二 [root@redis-new01 ~]# gzip -d * //解壓當前目錄的所有檔案 [root@redis-new01 ~]# gzip * //解壓並不能像壓縮時那樣什麼引數都不帶,需要帶解壓命令-d gzip: head_text.gz already has .gz suffix -- unchanged gzip: less1.gz already has .gz suffix -- unchanged gzip: less2.gz already has .gz suffix -- unchanged [root@redis-new01 ~]# gzip -d * [root@redis-new01 ~]# ll 總用量 12 -r-xr-xr-x. 1 sunjimeng root 664 5月 9 07:59 head_text -r-xr-xr-x. 1 root sunjimeng 45 5月 9 08:15 less1 -r-xr-xr-x. 1 root sunjimeng 57 5月 9 08:16 less2 示例三 [root@redis-new01 ~]# gzip -v * head_text: 42.3% -- replaced with head_text.gz less1: 4.4% -- replaced with less1.gz less2: 1.8% -- replaced with less2.gz [root@redis-new01 ~]# gzip -dv * head_text.gz: 42.3% -- replaced with head_text less1.gz: 4.4% -- replaced with less1 less2.gz: 1.8% -- replaced with less2 示例四 [root@redis-new01 ~]# gzip -l * [root@redis-new01 ~]# gzip -l * compressed uncompressed ratio uncompressed_name 411 664 42.3% head_text 67 45 4.4% less1 80 57 1.8% less2 558 766 30.3% (totals) [root@redis-new01 ~]# ll 總用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz 示例五 [root@redis-new01 ~]# tar -cvf Dir.tar Dir Dir/ Dir/head_text.gz Dir/less1.gz Dir/less2.gz [root@redis-new01 ~]# ll 總用量 12 dr-xr-xr-x. 2 root sunjimeng 55 5月 24 07:28 Dir -rw-r--r--. 1 root root 10240 5月 24 07:34 Dir.tar [root@redis-new01 ~]# gzip -v Dir.tar Dir.tar: 92.1% -- replaced with Dir.tar.gz [root@redis-new01 ~]# gzip -l Dir.tar.gz compressed uncompressed ratio uncompressed_name 833 10240 92.1% Dir.tar 示例六 [root@redis-new01 ~]# tar cvf Dir1.tar -R Dir 塊 0:Dir/ 塊 1:Dir/head_text.gz 塊 3:Dir/less1.gz 塊 5:Dir/less2.gz [root@redis-new01 ~]# tar -cvf Dir2.tar Dir Dir/ Dir/head_text.gz Dir/less1.gz Dir/less2.gz [root@redis-new01 ~]# tar -cvf Dir3.tar -R Dir 塊 0:Dir/ 塊 1:Dir/head_text.gz 塊 3:Dir/less1.gz 塊 5:Dir/less2.gz 示例七 [root@redis-new01 ~]# gzip -vr findDir //遞迴的壓縮子資料夾下的檔案 gzip: findDir/Dir/head_text.gz already has .gz suffix -- unchanged gzip: findDir/Dir/less1.gz already has .gz suffix -- unchanged gzip: findDir/Dir/less2.gz already has .gz suffix -- unchanged gzip: findDir/Dir.tar.gz already has .gz suffix -- unchanged findDir/Dir1.tar: 92.1% -- replaced with findDir/Dir1.tar.gz findDir/Dir2.tar: 92.1% -- replaced with findDir/Dir2.tar.gz findDir/Dir3.tar: 92.1% -- replaced with findDir/Dir3.tar.gz [root@redis-new01 ~]# ls -l findDir 總用量 16 -rw-r--r--. 1 root root 833 5月 24 07:34 Dir.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:43 Dir3.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:39 Dir2.tar.gz -rw-r--r--. 1 root root 834 5月 24 07:39 Dir1.tar.gz dr-xr-xr-x. 2 root sunjimeng 55 5月 24 07:28 Dir [root@redis-new01 ~]# ls -l findDir/Dir 總用量 12 -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz 示例八 [root@redis-new01 ~]# gzip -rdv Dir //遞迴的解壓目錄下的所有.gz的檔案 [root@redis-new01 ~]# ls -l Dir 總用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz [root@redis-new01 ~]# gzip -rdv Dir Dir/head_text.gz: 42.3% -- replaced with Dir/head_text Dir/less1.gz: 4.4% -- replaced with Dir/less1 Dir/less2.gz: 1.8% -- replaced with Dir/less2 [root@redis-new01 ~]# ls -l Dir 總用量 12 -r-xr-xr-x. 1 sunjimeng root 664 5月 9 07:59 head_text -r-xr-xr-x. 1 root sunjimeng 45 5月 9 08:15 less1 -r-xr-xr-x. 1 root sunjimeng 57 5月 9 08:16 less2 [root@redis-new01 ~]# gzip -r Dir [root@redis-new01 ~]# ls -l Dir 總用量 12 -r-xr-xr-x. 1 sunjimeng root 411 5月 9 07:59 head_text.gz -r-xr-xr-x. 1 root sunjimeng 67 5月 9 08:15 less1.gz -r-xr-xr-x. 1 root sunjimeng 80 5月 9 08:16 less2.gz [root@redis-new01 ~]# gzip -dv Dir gzip: Dir is a directory -- ignored
zip/unzip
命令名:zip 功能說明:壓縮檔案。 語 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工 作目錄>][-ll][-n <字 尾字串>][-t <日 期時間>][-<壓 縮效率>][壓 縮檔案][檔案...][-i <範本樣式>][-x <範本樣式>] 補充說明:zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外產生具 有".zip"副檔名 的壓縮檔案。 參 數: -A 調 整可執行的自動解壓縮檔案。 -b<工作目錄> 指 定暫時存放檔案的目錄。 -c 替 每個被壓縮的檔案加上註釋。 -d 從 壓縮檔案內刪除指定的檔案。 -D 壓 縮檔案內不建立目錄名稱。 -f 此 引數的效果和指定"-u"參 數類似,但不僅更新既有檔案,如果某些檔案原本不存在於壓縮檔案內,使用本引數會一併將其加入壓縮檔案中。 -F 嘗 試修復已損壞的壓縮檔案。 -g 將 檔案壓縮後附加在既有的壓縮檔案之後,而非另行建立新的壓縮檔案。 -h 在 線幫助。 -i<範本樣式> 只 壓縮符合條件的檔案。 -j 只 儲存檔名稱及其內容,而不存放任何目錄名稱。 -J 刪 除壓縮檔案前面不必要的資料。 -k 使 用MS-DOS相容格 式的檔名稱。 -l 壓 縮檔案時,把LF字元 置換成LF+CR字 符。 -ll 壓 縮檔案時,把LF+CR字 符置換成LF字元。 -L 顯 示版權資訊。 -m 將 檔案壓縮並加入壓縮檔案後,刪除原始檔案,即把檔案移到壓縮檔案中。 -n<字尾字串> 不 壓縮具有特定字尾字串的檔案。 -o 以 壓縮檔案內擁有最新更改時間的檔案為準,將壓縮檔案的更改時間設成和該檔案相同。 -q 不顯 示指令執行過程。 -r 遞 歸處理,將指定目錄下的所有檔案和子目錄一併處理。 -S 包 含系統和隱藏檔案。 -t<日期時間> 把 壓縮檔案的日期設成指定的日期。 -T 檢 查備份檔案內的每個檔案是否正確無誤。 -u 更 換較新的檔案到壓縮檔案內。 -v 顯 示指令執行過程或顯示版本資訊。 -V 保 存VMS作業系統的文 件屬性。 -w 在 檔名稱裡假如版本編號,本引數僅在VMS操 作系統下有效。 -x<範本樣式> 壓 縮時排除符合條件的檔案。 -X 不 儲存額外的檔案屬性。 -y 直 接儲存符號連線,而非該連線所指向的檔案,本引數僅在UNIX之 類的系統下有效。 -z 替 壓縮檔案加上註釋。 -$ 保 存第一個被壓縮檔案所在磁碟的卷冊名稱。 -<壓縮效率> 壓 縮效率是一個介於1-9的 數值。 示例1: 壓縮test.MYI [root@mysql test]# zip test1.zip test.MYI adding: test.MYI (deflated 42%) [root@mysql test]#ll -rw-r--r-- 1 root root 1033755 09-24 10:03 test1.zip 壓縮率為8的 [root@mysql test]# zip test2.zip -8 test.MYI adding: test.MYI (deflated 42%) [root@mysql test]#ll -rw-r--r-- 1 root root 1033451 09-24 10:03 test2.zip 示例2: 將當前目錄下的所有檔案和資料夾全部壓縮成test.zip檔案,-r表示遞迴壓縮子目錄下所有檔案 [root@mysql test]# zip -r test.zip ./* 打包目錄 [root@mysql test]# zip test2.zip test2/* 示例3: 刪除壓縮檔案test1.zip中test.MYI檔案 [root@mysql test]# zip -d test1.zip test.MYI 刪除打包檔案目錄下的檔案 [root@mysql test]# zip -d test2.zip test2/ln.log deleting: tests/ln.log 示例4: 向壓縮檔案中test1.zip中新增test. MYI檔案 [root@mysql test]# zip -m test1.zip test. MYI 示例5: 壓縮檔案時排除某個檔案 [root@mysql test]# zip test3.zip tests/* -x tests/ln.log ===================================================== 命令名: unzip 功 能說明:解壓縮zip文 件 語 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密 碼>][.zip文 件][檔案][-d <目錄>][-x <檔案>] 或 unzip [-Z] 補充說明:unzip為.zip壓縮檔案的解壓縮程式。 參 數: -c 將 解壓縮的結果顯示到螢幕上,並對字元做適當的轉換。 -f 更 新現有的檔案。 -l 顯 示壓縮檔案內所包含的檔案。 -p 與-c引數類似,會將解壓縮的結果顯示到螢幕上,但不會執行任 何的轉換。 -t 檢 查壓縮檔案是否正確。,但不解壓。 -u 與-f引數類似,但是除了更新現有的檔案外,也會將壓縮檔案中 的其他檔案解壓縮到目錄中。 -v 執 行是時顯示詳細的資訊。或檢視壓縮檔案目錄,但不解壓。 -z 僅 顯示壓縮檔案的備註文字。 -a 對 文字檔案進行必要的字元轉換。 -b 不 要對文字檔案進行字元轉換。 -C 壓 縮檔案中的檔名稱區分大小寫。 -j 不 處理壓縮檔案中原有的目錄路徑。 -L 將 壓縮檔案中的全部檔名改為小寫。 -M 將 輸出結果送到more程 序處理。 -n 解 壓縮時不要覆蓋原有的檔案。 -o 不 必先詢問使用者,unzip執 行後覆蓋原有檔案。 -P<密碼> 使 用zip的密碼選項。 -q 執 行時不顯示任何資訊。 -s 將 檔名中的空白字元轉換為底線字元。 -V 保 留VMS的檔案版本信 息。 -X 解 壓縮時同時回存檔案原來的UID/GID。 [.zip檔案] 指定.zip壓縮檔案。 [檔案] 指定 要處理.zip壓縮文 件中的哪些檔案。 -d<目錄> 指 定檔案解壓縮後所要儲存的目錄。 -x<檔案> 指 定不要處理.zip壓 縮檔案中的哪些檔案。 -Z unzip -Z等 於執行zipinfo指 令。 示例1:將壓縮檔案text.zip在當前目錄下解壓縮。 [root@mysql test]# unzip test.zip 示例2:將壓縮檔案text.zip在指定目錄/tmp下解壓縮,如果已有相同的檔案存在,要求unzip命令不覆蓋原先的檔案。 [root@mysql test]# unzip -n test.zip -d /tmp 示例3:檢視壓縮檔案目錄,但不解壓。 [root@mysql test]# unzip -v test.zip 示例4:將壓縮檔案test.zip在指定目錄tmp下解壓縮,如果已有相同的檔案存在,要求unzip命令覆蓋原先的檔案。 [root@mysql test]# unzip -o test.zip -d tmp/
pwd命令:列印當前目錄
常用用法:pwd [-P] 含義: 列印當前目錄 不含"-P"選項,表示列印當前目錄,如果目錄路徑中包含連結檔案,不進行解析 含有"-P"選項,表示列印當前目錄,如果目錄路徑中包含連結檔案,則進行解析 #echo $PWD 列印當前所在路徑
umask命令:檔案預設許可權
常用用法:umask [mask] 含義: 1、沒有"mask"引數,表示列印當前的mask設定值 2、有"mask"引數,表示設定當前的mask值為"mask" 3、mask值的用途 mask值表示建立檔案時預設需要減去的許可權 建立一般檔案時,預設的許可權是"0666-mask",即0666減去umask碼值 建立目錄時,預設的許可權是"0777-mask",即0777減去umask碼值 注意,以上的相減操作不能通過數字形式直接相減,這會產生錯誤,需要通過對應的rwx形式進行操作 比如"0666-0003" 數字直接相減結果是:0663 正確的方式是:"rw-rw-rw-"減去"-------wx",結果為"rw-rw-r--" 4、mask設定值是跟當前的shell環境相關聯的設定
which命令:在$PATH變數指定的路徑中查詢檔案
常用用法:which -a filename 含義: 在$PATH變數指定的路徑中查詢所有檔名為filename的檔案,並將所有找到的檔案的路徑列印出來 備註: 1)需要全部匹配,而不能是部分匹配 比如 “which ps”的結果是"/bin/ps" "which p"的結果是空白,"/bin/ps"不是合法結果 2)需要匹配檔名,與路徑中的目錄名匹配不符合要求 比如 "which bin"的結果是空白,"/bin/ps"不是合法結果
whereis命令:在標準的Linux下的幾個目錄中查詢檔案相關聯的原始碼,幫助文件,二進位制檔案
常用用法:whereis filename 含義:基於"/var/lib/mlocate/mlocate.db"資料庫,在標準的Linux下的幾個目錄中查詢filename相關聯的原始碼,幫助文件,二進位制檔案 比如"whereis man",匹配到的幫助文件為"/usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz",匹配到的二進位制檔案為"/usr/bin/man /usr/bin/X11/man /usr/local/man /usr/share/man" 比如"whereis kernel",匹配到的原始碼"/usr/src/linux-headers-3.16.0-30/kernel /usr/src/linux-headers-3.16.0-30-generic/kernel" 備註: 1)由於是在標準的幾個目錄中查詢,因而擴充套件性不強 2)通過整體匹配,而不是部分匹配 "whereis ma"不能匹配到"/usr/bin/man" 3)匹配檔名,而不是匹配路徑中的目錄名 "whereis bin"不能匹配到"/bin/ps"
locate命令:基於“/var/lib/mlocate/mlocate.db”這個資料庫查詢檔案
常用用法:locate [-i] PATTERN 含義: 1)查詢包含"PATTERN"的檔案路徑 2)整個查詢過程基於"/var/lib/mlocate/mlocate.db"這個資料庫 3)系統每天更新一次"/var/lib/mlocate/mlocate.db"資料庫 4)可以通過"updatedb"命令手動更新"/var/lib/mlocate/mlocate.db"資料庫
file命令:列印推測得到的檔案型別
常用用法:file -i filename 含義: 列印filename指代的檔案的型別和編碼格式,沒有命令能夠確切知道某個檔案的編碼格式,只能是推測,因此得到的最終檔案編碼格式不一定是正確的 -i選項:以“mime type”形式列印檔案型別和編碼格式
stat命令:列印檔案資訊
常用用法:stat 檔案路徑 含義:列印檔案的一些詳細資訊 比如現在有一個"readme"檔案,執行"stat readme"命令,可得如圖1所示結果。有一個"Desktop"目錄,執行"stat Desktop"命令,可得 [root@huanqiu ~]# stat web.xml File: `web.xml' Size: 2438 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 2764173 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-08 17:25:51.994707928 +0800 Modify: 2016-09-08 17:25:48.595682668 +0800 Change: 2016-09-08 17:25:48.595682668 +0800 [root@huanqiu ~]# stat sudoers/ File: `sudoers/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: fd00h/64768d Inode: 2817544 Links: 2 Access: (0700/drwx------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-10-20 15:05:06.551702069 +0800 Modify: 2016-01-21 18:35:44.286016733 +0800 Change: 2016-01-21 18:35:44.286016733 +0800 輸出資訊中屬性的解釋如下: File:檔名稱 Size:檔案的大小,這個大小是檔案的使用大小(關於檔案的“使用大小”和“佔用大小”可見《Ext檔案系統中,檔案的“佔用大小”和“使用大小”》)。注意,如果是目錄檔案,該屬性值並沒有累加統計該目錄檔案下的子檔案的使用大小 Blocks:這個Blocks不是指"inode/block"體系中的block數量。其實指的是某種容量單元的數量。不過可以通過公式“Blocks*單個該種容量單元所含位元組數/一個block節點所含位元組數”換算得到需要的block節點數量,其中單個該種容量單元所含位元組數,可通過"stat --format=%B readme"獲得。假如單個該種容量單元的含有位元組數為512B,一個block節點含有位元組數為4096B,現在Blocks=8,那麼block節點數量=1。注意,這個屬性極易混淆 IO Block:optimal I/O transfer size hint "regular file":該值表示檔案型別 Device:裝置號 Inode:Inode節點號 Links:檔案的硬連結計數 Access:檔案讀取執行許可權相關資訊 Uid:檔案所屬使用者的資訊 Gid:檔案所屬組的資訊 Access:atime Modify:mtime Change:ctime Birth:檔案建立時間,一般情況下不存在該屬性值
basename命令:去除路徑字首和字尾
常用用法:basename NAME [SUFFIX] 含義: 給定一個檔名路徑,除去前導的目錄名,如果指定了SUFFIX,那麼也除去SUFFIX指定的字尾,把最終結果列印出來 比如 basename include/stdio.h .h 除去前導的目錄名"include/",得到stdio.h 指定SUFFIX=.h,那麼除去.h字尾,最後得到stdio 列印stdio
dirname命令:獲取路徑的目錄部分
常用用法:dirname NAME 含義: 給定一個檔名路徑,除去最後一部分名稱內容,接著除去冗餘的後導"/",列印最終結果; 如果檔名路徑中不包含"/",那麼最後列印"." -------------------------------------------------------------------------------------------------- 擴充套件小提示: 擷取目錄的方法,有以下兩種: 1)dirname命令:用於取給定路徑的目錄部分。這個命令很少直接在shell命令列中使用,一般把它用在shell指令碼中,用於取得指令碼檔案所在目錄, 然後將當前目錄切換過去。 其實就是取所給路徑的倒數第二級及其之前的路徑部分,如下: [root@jenkins-server Shell]# dirname main/protected/xqsjmob/themes/tpl2/common/page_statistics.tpl main/protected/xqsjmob/themes/tpl2/common [root@jenkins-server Shell]# dirname /usr/local/tomcat7/webapps/jenkins/scripts/Shell /usr/local/tomcat7/webapps/jenkins/scripts [root@jenkins-server Shell]# dirname FF_Online.sh #取的結果既是當前路徑目錄下 . 2)可以用${pathname%/*}擷取掉pathname後面的檔案部分。 下面比較下這兩種方法的效果:即dirname取的是倒數第二級及其以上級的路徑,而${pathname%/*}取的是"刪除最後一個/符號後的路徑部分" [root@jenkins-server Shell]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*} /usr/bin /usr/bin You have new mail in /var/spool/mail/root [root@jenkins-server Shell]# pathname=/usr/bin/sort/; echo $(dirname $pathname) ${pathname%/*} /usr/bin /usr/bin/sort [root@jenkins-server Shell]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*} / /usr [root@jenkins-server Shell]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*} /
du命令:檢視檔案大小
一、常用用法 du -sh [--apparent-size] 檔案路徑(檔案可以是目錄,也可以是一般檔案) 二、含義與選項 2.1、含義 當檔案為一般檔案時,估算該一般檔案的大小;當檔案為目錄時,估算"該目錄自身的大小+目錄下所有子檔案(遞迴進行)的大小"。 2.2、選項表示的意思 "-s":當du命令的操作物件是一個目錄時,不列印該目錄下子檔案的大小統計情況,只列印目錄總體的大小統計情況 "-h":以人類可讀形式展示檔案大小 "--apparent-size":當不加該選項時,"檔案大小"是指檔案的"佔用大小";當加了該選項後,"檔案大小"是指檔案的"使用大小"。 三、實驗 現在有一個"test1"目錄,其下有一個"test2"目錄,"test2"目錄下有一個"test3"目錄,在"test3"目錄下有一個"test4.txt"檔案,如下所示: [root@redis-new01 ~]# ll -d test1 drwxr-xr-x 3 root root 4096 Oct 27 21:17 test1 [root@redis-new01 ~]# ls test1/ test2 [root@redis-new01 ~]# ls test1/test2/ test3 [root@redis-new01 ~]# ls test1/test2/test3/ test4.txt "test1"目錄對應1個block節點(大小為4096B),"test2"目錄也對應1個block節點(大小為4096B),"test3"目錄也對應1個block節點(大小為4096B), "test4.txt"檔案也對應1個block節點(大小為4096B),而"test4.txt"這個一般檔案對應的block節點中實際使用的空間大小為12B。 1)如下命令 [root@redis-new01 ~]# du -h test1 8.0K test1/test2/test3 12K test1/test2 16K test1 這是因為: 16K=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的4K。 2)如下命令 [root@redis-new01 ~]# du -sh test1 16K test1 這是因為: 16K=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的4K,並且只顯示最終的test1目錄的總體大小。 3)如下命令 [root@redis-new01 ~]# du -sh --apparent-size test1 13K test1 這是因為: 根據右側值向上取整得到13K=12K+12B=test1自身的4K+test2自身的4K+test3自身的4K+test4.txt的12B,並且只顯示最終的test1目錄的總體大小。