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

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

主要学习以下命令:

  • 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 | 操作文件和目录相关推荐

  1. 【转】Linux命令行下svn ignore忽略文件或文件夹用法

    转自:Linux命令行下svn ignore忽略文件或文件夹用法 - 陌上归人的博客 - 博客园 一.忽略单个目录 1.忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的, ...

  2. 如何在Linux命令行中替换多个文件中的字符串

    本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...

  3. linux 命令行看图片,骚操作:用终端打开图片

    导读 Linux 上有许多 GUI 图片浏览器.但我尚未听说或使用过任何在终端中显示图片的应用程序.幸运的是,我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器.FIM 引起了我的注意 ...

  4. linux命令行u盘备份,linux命令行挂载U盘拷贝文件

    挂u盘之前,运行命令cat /proc/partitions,看看现在系统中有哪些分区.插上u盘以后,再次运行上述命令,看看多出来什么分区(通常是sda1,PS由于偶是在虚拟机下装的,所以是sdb1) ...

  5. linux命令行下的ftp 多文件下载和目录下载

    目标ftp服务器是一个非标准端口的ftp 1.通过shell登录#ftp    //shell下输入ftp命令,进入到ftp提示符>open IP  PORT   //IP ,PORT对应为服务 ...

  6. python程序命令行输出记录到log文件中

    $ python xxx.py args1 >> data/log.txt第一条命令的含义是:将xxx.py这个python文件中print()原本输出到console的内容重定向到&qu ...

  7. du 查看使用 linux命令,Linux命令(17)du 查看文件和目录磁盘使用情况

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  8. Linux 命令之 chown -- 用来变更文件或目录的拥有者或所属群组

    命令介绍 Linux/Unix 属于多用户多任务操作系统,所有的文件皆有拥有者.利用 chown 命令可以将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID,组可以是组名或者组ID,文 ...

  9. L9.linux命令每日一练 -- 第二章 文件和目录操作命令 -- ln和readlink命令

    2.11.1 命令详解 ​ [命令星级] ★★★★★ ​ [功能说明] ​ ln命令可用理解为英文单词link的缩写,其功能是创建文件间的链接(make links between files),链接 ...

最新文章

  1. 假如时光倒流,你依然会变成现在的你
  2. C语言字符串排序!_只愿与一人十指紧扣_新浪博客
  3. ESP8266/ESP32自动下载电路分析
  4. linux 进程数量限制,LINUX下每进程限制线程数量
  5. Linux防火墙iptables学习
  6. 若计算机内存的地址从00H,2003计算机科学导论课程试卷A
  7. Deep learning:十九(RBM简单理解)
  8. redis为什么这么火该怎么用
  9. 8.Using Categorical Data with One Hot Encoding
  10. 牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!
  11. mysql 备库,【MySQL】数据库备库策略与脚本
  12. 面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
  13. Android将ScrollView移动到最底部
  14. 【bzoj5133】[CodePlus2017年12月]白金元首与独舞 并查集+矩阵树定理
  15. Pictures Test
  16. php求add函数,PHP函数每日一贴之字符串函数-addcslashes()函数
  17. 拓端tecdat|R语言马尔可夫转换模型研究交通伤亡人数事故预测
  18. DockPanel的使用
  19. vrep中接近开关与激光雷达
  20. 分享好用的日常记账软件

热门文章

  1. ExchangeServer2016 HAB 分层通讯簿 设置教程
  2. quick-cocos2d-x for mac开发环境安装配置
  3. php执行多个存储过程
  4. 详细介绍JAVA中的字符串
  5. Android的Dalvik虚拟机的一个小BUG
  6. JavaScript玩转机器学习:模型转换
  7. 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
  8. 容器编排技术 -- Kubernetes JSONpath Support
  9. 使用 Docker Stack 部署多服务集群
  10. Redis面试 - redis 的雪崩和穿透?