Linux運維筆記-平常操做命令總結(2)

 

回想起來,從事linux運維工做已近5年之久了,平常工做中會用到不少常規命令,以前簡單羅列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html
今天在這裏,詳細總結下運維工做中經常用到的一些操做命令(依據本人使用經驗而言):html

[Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/var']node

錯誤提示:沒有可用的臨時目錄
可能緣由:系統的inodes或磁盤空間佔滿了。清理下inodes空間便可,好比發現/var/spool/clientmqueue/目錄裏面有大量小文件,清理下一些無用文件。

文件系統結構和基本操做命令                                                                                                                                              mysql

chmod命令:改變權限linux

經常使用用法: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命令:改變屬主web

經常使用用法:chown [-R] OWNER FILE
含義:改變文件的全部者,加上R選項,表示遞歸

一般使用時會加上改變所屬組的部分,即"所屬者.所屬組" 或者 "所屬者:所屬組"
chown [-R] OWNER.GROUP FILE
chown [-R] OWNER:GROUP FILE

chgrp命令:改變屬組正則表達式

經常使用用法:chgrp [-R] GROUP FILE
含義:將FILE的用戶組改成GROUP,若是指定了-R選項,那麼遞歸改變

rm命令:刪除文件redis

經常使用用法:rm -rf FILE 
含義:刪除文件 
-r:若是FILE是目錄,那麼遞歸刪除目錄; 
-f:若是FILE是隻讀文件,再也不提醒,直接刪除

find命令:查找文件sql

1、經常使用用法
find path [-maxdepth N] test

2、含義與選項
2.一、含義
在指定路徑下,找到符合條件的文件和目錄。

2.二、選項表示的意思
"path":表示查找範圍的路徑。 
"-maxdepth N":表示查找的最深深度爲N層。 
"test":查找須要知足的條件。

3、經常使用的test
3.一、關於文件時間的幾個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.二、關於文件權限的test
test                               說明
-perm mode                 目的文件的權限跟"mode"一致
-perm -mode                目的文件的權限包含了"mode"
-perm /mode                目的文件的權限跟"mode"有交集

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.四、關於文件所屬用戶的test
"-user uname":表示屬於"uname"這個用戶的文件,"uname"能夠是"用戶名稱",也能夠是"用戶ID,即uid"。

3.五、關於文件所屬用戶組的test
"-group gname":表示屬於"gname"這個用戶組的文件,"gname"能夠是"用戶組名稱",也能夠是"用戶組ID,即gid"。

3.六、關於文件名稱的test
"-name pattern":文件名符合"pattern"這個正則表達式的文件。

4、其餘
"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命令:創建符號連接文件shell

經常使用用法: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要同時訪問到目錄/data一、/data2
在test用戶家目錄下新建兩個目錄test一、test2
然把把/data一、/data2掛到對應的test一、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後,同時訪問到/data一、/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文件

1、經常使用用法
unrar x "rar文件名"

2、含義與選項
2.一、含義
解壓rar文件到當前目錄,並保存原壓縮文件目錄結構。

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]
含義:
一、沒有"mask"參數,表示打印當前的mask設置值
二、有"mask"參數,表示設置當前的mask值爲"mask"
三、mask值的用途
mask值表示建立文件時默認須要減去的權限
建立通常文件時,默認的權限是"0666-mask",即0666減去umask碼值
建立目錄時,默認的權限是"0777-mask",即0777減去umask碼值
注意,以上的相減操做不能經過數字形式直接相減,這會產生錯誤,須要經過對應的rwx形式進行操做
好比"0666-0003"
數字直接相減結果是:0663
正確的方式是:"rw-rw-rw-"減去"-------wx",結果爲"rw-rw-r--"
四、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命令:查看文件大小

1、經常使用用法
du -sh [--apparent-size] 文件路徑(文件能夠是目錄,也能夠是通常文件)
 
2、含義與選項
2.一、含義
當文件爲通常文件時,估算該通常文件的大小;當文件爲目錄時,估算"該目錄自身的大小+目錄下全部子文件(遞歸進行)的大小"。
 
2.二、選項表示的意思
"-s":當du命令的操做對象是一個目錄時,不打印該目錄下子文件的大小統計狀況,只打印目錄整體的大小統計狀況
"-h":以人類可讀形式展現文件大小
"--apparent-size":當不加該選項時,"文件大小"是指文件的"佔用大小";當加了該選項後,"文件大小"是指文件的"使用大小"。
 
3、實驗
如今有一個"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目錄的整體大小。
相關文章
相關標籤/搜索