美文网首页大数据进击之路
原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录

原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录

作者: cuteximi_1995 | 来源:发表于2018-10-09 00:13 被阅读0次

    背景:
    阅读英文原作只为了更好地理解书中的精髓,当然也是为了更好地掌握书中的技巧。我们会坚持阅读全书,并记录书中的精髓。

    从本章节开始,开始真正的实战。

    主要学习以下命令:

    • cp
    • mv
    • mkdir
    • rm
    • ln
    • 一些练习
      以上命令用来操作文件和目录。

    图形化界面,可以简单且轻松的完成文件的复制粘贴等操作,为什么我们还要学习使用命令行呢?一些简单的任务,图形化界面更占优势,但是当遇到很复杂的操作时,使用命令行更加方便。比如复制当前目录下以 .html 结尾的文件,图形化界面是不是要一个一个用手去选择?命令行就很简单了

    cp -u *.html destination 
    

    通配符

    在开始学习上述命令之前,先来了解一下通配符的重要性以及用法。因为 shell 频繁地使用 文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。列一个表格:

    通配符 意义
    * 匹配任意多个字符(包括零个或一个)
    ? 匹配任意一个字符(不包括零个)
    [characters] 匹配任意一个属于字符集中的字符
    [!characters] 匹配任意一个不是字符集中的字符
    [[:class:]] 匹配任意一个属于指定字符类中的字符

    普遍使用的字符类:

    字符类 意义
    [:alnum:] 匹配任意的字母或数字
    [:alpha:] 匹配任意的字母
    [:digit:] 匹配任意一个数字
    [:lower:] 匹配任意一个小写字母
    [:upper:] 匹配任意一个大写字母

    我们可以借助通配符来构建复杂的文件名查找规则。下面举一些例子:

    * 代表查找所有文件
    g* 代表查找所有以 “g” 开头的文件
    b*.txt 代表查找以 “b” 开头,中间任意字符,以 .txt 结尾的文件
    Data??? 代表查找以 Data 开头,后面紧跟 3 个字符的文件
    [a, b, c]* 代表查找以 a 或 b 或 c 开头的文件
    g[0-9][0-9][0-9] 代表查找以 g 开头,并且紧跟着三个数字的文件
    [[:lower:]123] 代表查找以小写字母结尾 或者 以 1 或 2 或 3 结尾的文件

    mkdir 创建目录

    用法:

    mkdir directory...
    
    mkdir dir
    

    此时会创建一个目录,名为 dir。

    注意表示法: 在描述一个命令时(如上所示),当有三个圆点跟在一个命令的参数后面, 这意味着那个参数可以重复,就像这样:

    mkdir dir1 dir2 dir3
    

    此时会创建三个目录,名为 dir1, dir2, dir3。

    有用的参数说明

    -m 指定权限
    -p 用于创建多级目录,若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录

    cp 复制文件和目录

    复制,有两种用法:
    1.复制单个项目
    2.复制多个项目

    cp item1 item2
    

    复制 文件或目录 item1 到文件或目录 item2

    cp item... directory
    

    复制多个项目到一个目录下。

    有用的参数

    -a , --archive , 复制文件时,带上属性。
    -i , --interactive, 重写文件之前,会提示用户是否重写,默认 cp 是重写文件的。
    -r , --recursive , 递归地复制目录以及目录里面的内容。
    -u , --update ,当把文件从一个目录复制到另一个目录中时,只复制不存在的文件。或者文件内容更新于已存在的文件中。
    -v, --verbose, 显示详细的复制操作。

    cp 命令的几个例子展示

    • cp file1 file2 如果file2 存在的话,cp 命令把 file1 的内容重写到 file2 中。如果 file2 不存在,则创建。
    • cp -i file1 file2 如果 file2 存在,在重写之前会提示用户确认 “是否重写?”,其他的,同上。
    • cp file1 file2 dir1 复制 file1 和 file2 到目录 dir1 中,目录 dir1 必须存在
    • cp dir1/* dir2 使用通配符,将 dir1目录下的内容全部复制到 dir2 目录下,目录 dir2 必须存在
    • cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2目录中,目录 dir 不存在则创建。

    mv 移动和重命名

    mv 的使用方法和 cp 一样。

    mv item1 item2
    

    移动(重命名)item1 为 item2

    mv item... directory
    

    移动多个项目到一个目录下。

    有用的参数

    -i , --interactive, 重写文件之前,会提示用户是否重写,默认 cp 是重写文件的。
    -u , --update ,当把文件从一个目录移动到另一个目录中时,只移动不存在的文件。或者文件内容更新于已存在的文件中。
    -v, --verbose, 显示详细的操作信息。

    mv的例子:

    • mv file1 file2 如果file2 存在的话,cp 命令把 file1 的内容重写到 file2 中。如果 file2 不存在,则创建。
    • mv -i file1 file2 如果 file2 存在,在重写之前会提示用户确认 “是否重写?”,其他的,同上。
    • mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中,目录 dir1 必须存在
    • mv dir1 dir2 如果目录 dir2 不存在,则创建目录 dir2 ,并且移动 dir1 的内容到目录 dir2 中,同时删除目录 dir1 。如果存在 dir2 , 移动目录 dir1以及它的内容到目录 dir2 。

    rm 删除文件和目录

    rm 命令用来删除文件和目录。

    rm item...
    

    前面提到过这种表达方式,代表参数可以一个或多个,可以删除一个或多个项目。

    有用的参数

    -i, --interactive, 删除的时候,提示用户确认信息,如果不带此参数,rm 会默默直接删掉文件。
    -r, --recursive, 递归的删除文件。要删除目录时,必须要指定此参数,代表全部清空。
    -f, --force, 忽视不存在的信息,不显示提示信息,会覆盖 -i参数
    -v,verbose, 显示详细的操作信息。

    提个醒!

    类 Unix 的操作系统,比如说 Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。Linux 假定你很聪明,你知道你在做什么。尤其要小心使用通配符。

    ln 创建链接

    ln 既可以创建硬链接,也可以创建符号链接(软链接)。

    • 硬链接是最初 Unix 创建链接的方式。每个文件都默认都有一个硬链接,这个硬链接给予文件名字。我们每建立一个硬链接,都相当于新增一个额外的目录项。硬链接有两个额外的局限性:
      1.一个硬链接不能关联不同文件系统 的文件。2.硬链接不能关联目录

    • 符号链接是为了解决上述局限性,通过创建一个特殊类型的文件,这个文件包含一个关联文件或目录的文件指针。这种方式和 Windows 的快捷方式差不多,但是比 Windows 要早很多年!删除符号链接的时候,只是链接被删除,而不是文件本身。如果文件先被删除,链接依然会存在,只是不指向任何东西。

    练习

    首先创建一个领地,执行命令 mkdir playground

    [me@linuxbox ~]$ mkdir playground
    

    然后,进入 playground 目录创建两个目录 dir1 和 dir2

    [me@linuxbox ~]$ cd playground
    [me@linuxbox playground]$ mkdir dir1 dir2
    

    接下来,复制一些数据来这个目录。

    [me@linuxbox playground]$ cp /etc/passwd .
    

    再次执行上面的命令,只不过这一次加上了参数 -v 来显示详细的操作信息:

    [me@linuxbox playground]$ cp -v /etc/passwd .
    `/etc/passwd' -> `./passwd'
    

    如果换成参数 -i 会显示上面呢?来试试

    [me@linuxbox playground]$ cp -i /etc/passwd .
    cp: 是否覆盖 './passwd'?
    

    接着输入 y 就会被重写,输入背的字符(n什么的),会保留。

    这样,我们就有了 一个 playground 目录下 有一个文件 passwd和 两个目录 dir1dir2

    我们给 passwd 改一个名字:改成 dog

    [me@linuxbox playground]$ mv passwd  dog
    

    首先把 dog 文件移动到 dir1 木目录中。

    me@linuxbox playground]$ mv dog dir1
    

    接着把 dir1 移动到目录 dir2 中。

    me@linuxbox playground]$ mv dir1 dir2
    

    因为 dir2 存在,所以 dir1 以及它里面的内容都会移动到 dir2中。
    如果 dir2 不存在, dir1 会重命名为 dir2 。

    最后将 dog 文件再移动到 playground 目录下。

    me@linuxbox playground]$ cd dir2/dir1
    me@linuxbox dir1]$ mv dog ~/playround
    

    建立符号链接(软链接)

    me@linuxbox playground]$ ln -s  /home/me/playground/dog dog-system
    

    使用ll,查看一下:

    lrwxrwxrwx 1 me me 6 2008-01-15 15:17 dog-system -> /home/me/playground/dog

    根据我们前面所学的文件解析,可知这一个符号链接文件,指向 /home/me/playground/dog 文件。

    提示:创建符号链接的时候,最好使用绝对路径。

    上面演示的是创建文件的符号链接,同样也可以创建的目录的符号链接。

    对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接本身。 而 rm 命令是个特例。当你删除链接的时候,删除链接本身,而不是链接的对象。

    相关文章

      网友评论

        本文标题:原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录

        本文链接:https://www.haomeiwen.com/subject/unozoftx.html