• Linux运维笔记-日常操作命令总结(2)


    回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html
    今天在这里,详细总结下运维工作中常常用到的一些操作命令(依据本人使用经验而言):

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

    错误提示:没有可用的临时目录
    可能原因:系统的inodes或磁盘空间占满了。清理下inodes空间即可,比如发现/var/spool/clientmqueue/目录里面有大量小文件,清理下一些无用文件。

    文件系统结构和基本操作命令                                                                                                                                              

    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目录的总体大小。
  • 相关阅读:
    介绍几个程序员常去的网站
    你这辈子,为什么富不起来?!
    Bug解决:mysql 创建表字段Double类型长度
    RedisTemplate5种数据结构操作
    StringRedisTemplate与RedisTemplate区别
    Redis客户端信息的存取
    Anaconda安装pygame
    springboot启动报错
    idea上传项目到github
    Docker安装报错
  • 原文地址:https://www.cnblogs.com/kevingrace/p/6046463.html
Copyright © 2020-2023  润新知