• 2.7 文件目录管理命令

    2.7 文件目录管理命令

    目前为止,我们学习Linux命令就像是在夯实地基,虽然表面上暂时还看不到成果,但其实大家的内功已经相当雄厚了。在Linux系统的日常运维工作中,还需要掌握对文件的创建、修改、复制、剪切、更名与删除等操作。

    1.touch命令

    touch命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。

    在创建空白的文本文件方面,这个touch命令相当简捷,简捷到没有必要铺开去讲。比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。touch命令的参数及其作用如表2-11所示。

    表2-11 touch命令的参数及其作用

    参数作用
    -a仅修改“读取时间”(atime)
    -m仅修改“修改时间”(mtime)
    -d同时修改atime与mtime

    接下来,我们先使用ls命令查看一个文件的修改时间,然后修改这个文件,最后再通过touch命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):

    1. [root@linuxprobe ~]# ls -l anaconda-ks.cfg
    2. -rw-------. 1 root root 1213 May 4 15:44 anaconda-ks.cfg
    3. [root@linuxprobe ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
    4. [root@linuxprobe ~]# ls -l anaconda-ks.cfg
    5. -rw-------. 1 root root 1260 Aug 2 01:26 anaconda-ks.cfg
    6. [root@linuxprobe ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg
    7. [root@linuxprobe ~]# ls -l anaconda-ks.cfg
    8. -rw-------. 1 root root 1260 May 4 15:44 anaconda-ks.cfg

    2.mkdir命令

    mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”。

    在Linux系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。

    1. [root@linuxprobe ~]# mkdir linuxprobe
    2. [root@linuxprobe ~]# cd linuxprobe
    3. [root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e
    4. [root@linuxprobe linuxprobe]# cd a
    5. [root@linuxprobe a]# cd b
    6. [root@linuxprobe b]#

    3.cp命令

    cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。大家对文件复制操作应该不陌生,在Linux系统中,复制操作具体分为3种情况:

    如果目标文件是目录,则会把源文件复制到该目录中;

    如果目标文件也是普通文件,则会询问是否要覆盖它;

    如果目标文件不存在,则执行正常的复制操作。

    cp命令的参数及其作用如表2-12所示。

    表2-12 cp命令的参数及其作用

    参数作用
    -p保留原始文件的属性
    -d若对象为“链接文件”,则保留该“链接文件”的属性
    -r递归持续复制(用于目录)
    -i若目标文件存在则询问是否覆盖
    -a相当于-pdr(p、d、r为上述参数)

    接下来,使用touch创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:

    1. [root@linuxprobe ~]# touch install.log
    2. [root@linuxprobe ~]# cp install.log x.log
    3. [root@linuxprobe ~]# ls
    4. install.log x.log

    4.mv命令

    mv命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。

    剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:

    1. [root@linuxprobe ~]# mv x.log linux.log
    2. [root@linuxprobe ~]# ls
    3. install.log linux.log

    5.rm命令

    rm命令用于删除文件或目录,格式为“rm [选项] 文件”。

    在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面加一个-r参数才可以,否则删除不掉。我们来尝试删除前面创建的install.log和linux.log文件:

    1. [root@linuxprobe ~]# rm install.log
    2. rm: remove regular empty file install.log’? y
    3. [root@linuxprobe ~]# rm -f linux.log
    4. [root@linuxprobe ~]# ls
    5. [root@linuxprobe ~]#

    6.dd命令

    dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。

    dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如表2-13所示。

    表2-13 dd命令的参数及其作用

    参数作用
    if输入的文件名称
    of输出的文件名称
    bs设置每个“块”的大小
    count设置要复制“块”的个数

    例如我们可以用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:

    1. [root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
    2. 1+0 records in
    3. 1+0 records out
    4. 587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s

    dd命令的功能也绝不仅限于复制文件这么简单。如果您想把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像:

    1. [root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
    2. 7311360+0 records in
    3. 7311360+0 records out
    4. 3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s

    考虑到有些读者会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即bs块大小,而用勺子盛饭的次数即count块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。由上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。

    7.file命令

    file命令用于查看文件的类型,格式为“file 文件名”。

    在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。

    1. [root@linuxprobe ~]# file anaconda-ks.cfg
    2. anaconda-ks.cfg: ASCII text
    3. [root@linuxprobe ~]# file /dev/sda
    4. /dev/sda: block special

    出现问题?大胆提问!

    因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

    Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群。

    *本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。