几个操作文件和目录的命令

前面讲了 shell 是什么?如何在 Linux 写切换工作目录?还有几个对使用 Linux 系统有帮助的命令(ls、file、less/more)。如果听到这些概念你还不知道说的是什么,那建议你回过头去看看前面几天的内容,掌握了这些内容,我们也就算是能把 Linux 系统用起来了,但这还远远不够,今天我们继续学习几个操作文件和目录的 Linux 命令。

  • cp:拷贝文件和目录的命令
  • mv:移动或者重名了文件和目录的命令
  • mkdir:创建目录的命令
  • rm:删除文件或者目录的命令
  • ln:创建符号链接的命令

以上这 5 个命令在我们使用 Linux 系统的过程中经常会用到,它们都是可以操作文件或者目录的。

我们的 Ubuntu 18.04 Desktop 这个操作系统也是带图形界面的,在图形界面的文件管理器这个软件中,我们可以轻松的完成文件或者目录的移动、重命名、删除等操作,那为什么还要学习命令行工具 cp、mv、mkdir、rm、ln 呢?

答案是命令行工具比图像界面工具强大,特别是对于复杂的文件或者目录的操作,使用命令行工具往往更占优势,比如:我们要复制一个目录下的所有以 .html 结尾的文件到另一个目录,而且另一个目录如果包含相同的文件的话,只有当前目录的文件比另一个目录的文件更新时才复制,否则不复制。在这个例子中,不是说我们不能使用图形界面的文件管理器工具完成,只是会比较麻烦,但是使用命令行工具的话,就是一行命令就搞定了:cp -u *.html destination

在介绍上面 5 个操作文件或者目录的命令行工具之前,先来看看 shell 命令的一些特性,这些特性对我们操作文件或者目录相当的有用。shell 提供一些特殊的字符来匹配具有相同属性的文件或者目录,例如上面的拷贝的例子中就有 * 这个特殊字符。我们把这些特殊字符叫做通配符,下面是 shell 中常用的通配符:

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

除了通配符外,shell 还提供了字符类供 shell 命令匹配使用,如下:

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

借助通配符,为文件名构建非常复杂的选择标准成为可能。下面是一些类型匹配的范例:

  • *:所有文件
  • g*:所有文件名以 "g" 开头的文件
  • b*.txt:以 "b" 开头,中间有零个或任意多个字符,并以 ".txt" 结尾的文件
  • Data???:以 "Data" 开头,其后紧接着 3 个字符的文件
  • [abc]*:文件名以 "a", "b" , 或 "c" 开头的文件
  • BACKUP.[0-9][0-9][0-9]:以 "BACKUP." 开头,并紧接着 3 个数字的文件
  • [[:upper:]]*:以大写字母开头的文件
  • [![:digit:]]*:不以数字开头的文件
  • *[[:lower:]123]:文件名以小写字母结尾,或以 "1" , "2" 或 "3" 结尾的文件

上面这些通配符和字符类非常重要,这对我们更好的使用 Linux 系统是很有帮助的,所以一定要结合例子深入的理解。下面我们正式开始介绍今天的 5 的命令。

1. mkdir

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

  • mkdir dir1:会创建一个名为 "dir1" 的目录
  • mkdir dir1 dir2 dir3:会创建三个目录,名为 dir1, dir2,dir3。

2. cp

cp 命令,复制文件或者目录。它有两种使用方法:

  • cp item1 item2:复制单个文件或目录 "item1" 到文件或目录 "item2"
  • cp item... directory:复制多个项目(文件或目录)到一个目录下。

cp 命令也是可以带参数的,下面是一些常用的参数:

  • a:复制文件和目录,以及它们的属性,包括所有权和权限。 通常,副本具有用户所操作文件的默认属性。
  • i:在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
  • r:递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
  • u:当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
  • v:显示翔实的命令操作信息

下面是 cp 命令的写使用示例,请大家练习使用:

  • cp file1 file2:复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。
  • cp -i file1 file2:这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前, 会提示用户确认信息。
  • cp file1 file2 dir1:复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
  • cp dir1/* dir2:使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
  • cp -r dir1 dir2:复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。

3. mv

mv 命令可以执行文件移动和文件命名任务,这依赖于你怎样使用它。任何一种 情况下,完成操作之后,原来的文件名不再存在。mv 使用方法与 cp 很相像:

  • mv item1 item2:把文件或目录 "item1" 移动或重命名为 "item2"
  • mv item... directory:把一个或多个条目从一个目录移动到另一个目录中。

mv 命令的常用的参数如下:

  • i:在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。
  • u:当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
  • v:当操作 mv 命令时,显示翔实的操作信息。

mv 命令的使用示例,请大家练习使用:

  • mv file1 file2:移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 这两种情况下,file1 都不再存在。
  • mv -i file1 file2:除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
  • mv file1 file2 dir1:移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。
  • mv dir1 dir2:如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

4. rm

rm 命令用来移除(删除)文件和目录:

  • rm item...:"item" 代表一个或多个文件或目录。

rm 命令的常用参数如下:

  • i:在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地删除文件
  • r:递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
  • f:忽视不存在的文件,不显示提示信息。这选项会使 i 选项失效。
  • v:在执行 rm 命令时,显示翔实的操作信息。

rm 命令的使用示例,请大家练习使用:

  • rm file1:默默地删除文件 file1
  • rm -i file1:除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样
  • rm -r file1 dir1:删除文件 file1,,目录 dir1,及 dir1 中的内容。
  • rm -rf file1 dir1:同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。

特别注意:
类 Unix 的操作系统,比如说 Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。

尤其要小心通配符。思考一下这个经典的例子。假如说,你只想删除一个目录中的 HTML 文件。输入:rm *.html

这是正确的,如果你不小心在 “*” 和 “.html” 之间多输入了一个空格,就像这样:rm * .html

这个 rm 命令会删除目录中的所有文件,还会抱怨没有文件叫做 ".html"。

小贴士: 当你使用带有通配符的 rm 命令时(除了仔细检查输入的内容外), 先用 ls 命令来测试通配符。这会让你看到将要被删除的文件是什么。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。

5. ln

ln 命令既可创建硬链接,也可以创建符号链接。可以用其中一种方法来使用它("item" 可以是一个文件或是一个目录。):

  • ln file link:创建硬链接
  • ln -s item link:创建符号链接

5.1. 硬链接

与更加现代的符号链接相比,硬链接是最初 Unix 创建链接的方式。每个文件默认会有一个硬链接, 这个硬链接给予文件名字。我们每创建一个硬链接,就为一个文件创建了一个额外的目录项。 硬链接有两个重要局限性:

  • 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
  • 一个硬链接不能关联一个目录。

一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录 内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接 被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配), 直到所有关联这个文件的链接都删除掉。知道硬链接很重要,因为你可能有时 会遇到它们,但现在实际中更喜欢使用符号链接,下一步我们会讨论符号链接。

5.2. 符号链接

创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。在这一方面, 它们和 Windows 的快捷方式差不多,当然,符号链接早于 Windows 的快捷方式 很多年。

一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。 例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而, 当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接 删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们的存在。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容