Linux 命令行的世界 :4.操作文件和目录

此时此刻,我们已经准备好了做些真正的工作!这一章节将会介绍以下命令:

• cp —复制文件和目录

• mv —移动/重命名文件和目录

• mkdir —创建目录

• rm —删除文件和目录

• ln —创建硬链接和符号链接

图形文件管理器能轻松地实现简单的文件操作,但是对于复杂的文件操作任务,则使用命令行程序比较容易完成。例如,怎样拷贝一个目录下所有的 HTML 文件到目标目录, 同时保证只拷贝目标目录不存在或者版本比目标目录的文件更新的文件?要完成这个任务,使用文件管理器相当难,使用命令行相当容易:
cp -u *.html destination

通配符

在开始使用命令之前,我们需要介绍一个使命令行如此强大的 shell 特性。因为shell 频繁地使用文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。使用通配符允许你依据字符的组合模式来选择文件名。表1列出这些通配符以及它们所选择的对象,表2列出了最常使用的字符类:
表4-1: 通配符

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

表4-2: 列出了最常使用的字符类:

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

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

字符类意义
*所有文件
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” 结尾的文件

接受文件名作为参数的任何命令,都可以使用通配符。

mkdir - 创建目录

mkdir 命令是用来创建目录的。它这样工作:

# 会创建一个名为”dir1”的目录
mkdir dir1#会创建三个目录,名为 dir1, dir2, dir3。
mkdir dir1 dir2 dir3
cp - 复制文件和目录
# 复制单个文件或目录”item1”到文件或目录”item2”
cp item1 item2#复制多个项目(文件或目录)到一个目录下
cp item... directory

表4-4:cp选项

选项意义
-a, --archive复制文件和目录,以及它们的属性,包括拥有者和所有权。 通常情况下,文件拷贝具有执行拷贝操作的用户的默认属性。
-i, --interactive在覆盖已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认覆盖文件。
-r, --recursive递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者 -a 选项)。
-u, --update当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在文件的内容的文件。
-v, --verbose显示翔实的命令操作信息

表4-5: 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 中。
mv - 移动和重命名文件

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

# 把文件或目录 “item1” 移动或重命名为 “item2”
mv item1 item2#  把一个或多个条目从一个目录移动到另一个目录中
mv item... directory

表4-6: mv 选项

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

表4-7: 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。
rm - 删除文件和目录

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

# “item”代表一个或多个文件或目录。
rm item...

表4-8: rm 选项

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

表4-9: rm 实例

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。

tips: Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。 当你使用带有通配符的 rm 命令时(除了仔细检查输入的内容外), 先用 ls 命令来测试通配符。这会让你看到将要被删除的文件是什么。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。

思考一下这个经典的例子。假如说,你只想删除一个目录中的 HTML 文件。输入:
rm .html
这是正确的,如果你不小心在 “
” 和 “.html” 之间多输入了一个空格,就像这样:
rm * .html
这个 rm 命令会删除目录中的所有文件,还会抱怨没有文件叫做 “.html”。

ln — 创建链接

ln 命令既可创建硬链接,也可以创建符号链接。可以用两者中的任意一种形式来使用它:

#创建硬链接
ln file link# 创建符号链接,”item” 可以是一个文件或是一个目录。
ln -s item link

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

硬链接有两个重要局限性:
1.一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
2.一个硬链接不能关联一个目录。

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

符号链接

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

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

实战演习
#下面我们将要做些真正的文件操作,让我们先建立一个安全地带, 来玩一下文件操作命令。
#首先,我们需要一个工作目录。在我们的 家目录下创建一个叫做“playground”的目录。
[SI@localhost /]$ mkdir playground#在 playground 目录下创建一对目录 ,分别叫做 “dir1” 和 “dir2”。
[SI@localhost /]$ cd playground/
[SI@localhost playground]$ mkdir dir1 dir2
[SI@localhost playground]$ ls
dir1  dir2#我们使用 cp 命令从 /etc 目录复制 passwd 文件到当前工作目录下:
[SI@localhost playground]$ cp /etc/passwd .#请注意,我们使用命令末尾的一个圆点来简化当前工作目录的写法。如果我们执行 ls 命令, 可以看到我们的文件:
[SI@localhost playground]$ ls -l
总用量 4
drwxr-xr-x 2 root root    6 220 17:35 dir1
drwxr-xr-x 2 root root    6 220 17:35 dir2
-rw-r--r-- 1 root root 2742 220 17:36 passwd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页数据的解析提取(正则表达式----re库详解)

前面,我们已经可以用requests库来获取网页的源代码,得到HTML代码。但我们真正想要的数据是包含在HTML代码之中的。要怎样才能从HTML代码中获取想要的信息呢?正则表达式是一个万能的方法!!! 目录 正则表达…

多维时序 | Matlab实现基于VMD-DBO-GRU、VMD-GRU、GRU的多变量时间序列预测

多维时序 | Matlab实现基于VMD-DBO-GRU、VMD-GRU、GRU的多变量时间序列预测 目录 多维时序 | Matlab实现基于VMD-DBO-GRU、VMD-GRU、GRU的多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于VMD-DBO-GRU、VMD-GRU、GRU的多变量时间序列预测…

辽宁博学优晨教育:视频剪辑培训,开启创意新篇章

在数字化时代,视频已成为信息传播的重要载体。辽宁博学优晨教育紧跟时代步伐,推出全新的视频剪辑培训课程,为广大学员开启创意之旅,探索视频剪辑的无限可能。 一、视频剪辑:时代的选择与技能的进阶 随着互联网的普及和…

Stable diffusion UI 介绍-文生图

1.提示词: 你希望图中有什么东西 2.负面提示词:你不希望图中有什么东西 选用了什么模型 使用参数 1.采样器 sampling method 使用什么算法进行采样 2.采样迭代步数 sampling steps 生成图像迭代的步数,越多越好,但是生成速度越大越…

【C语言】socket 层到网络接口的驱动程序之间的函数调用过程

一、socket 层到网络接口的驱动程序之间的函数调用过程概述 在 Linux 操作系统中,socket 层到网络接口的驱动程序之间的函数调用过程相对复杂,涉及多个层次的交互。以下是一个简化的概述,描述数据从 socket 传递到硬件驱动,再到硬…

uniapp播放mp4省流方案

背景: 因为项目要播放一个宣传和讲解视频,视频文件过大,同时还为了节省存储流量,想到了一个方案,用m3u8切片替代mp4。 m3u8:切片播放,可以理解为一个1G的视频文件,自行设置文…

【微服务生态】Dubbo

文章目录 一、概述二、Dubbo环境搭建-docker版三、Dubbo配置四、高可用4.1 zookeeper宕机与dubbo直连4.2 负载均衡 五、服务限流、服务降级、服务容错六、Dubbo 对比 OpenFeign 一、概述 Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力&#…

总结Rabbitmq的六种模式

RabbitMQ六种工作模式 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 RabbitMQ有六…

算法刷题day16

目录 引言一、小朋友排队二、仓库规划三、股票买卖II 引言 关于这个树状数组和线段树还是挺重要的,主要题目不会直接问你求哪个区间的和什么的,题目往往是给出一个真实的例子,隐藏这些操作条件,需要让你自己去抽象出来这些操作&a…

9.vue学习笔记(组件传递Props校验+组件事件-组件传递数据+组件事件-配合“v-model”使用)

文章目录 1.组件传递Props校验1.1.默认值1.2.必选项1.3.注意事项:props 是只读的 2.组件事件-组件传递数据2.1.温馨提示:组件之间传递数据的方案 3.组件事件-配合“v-model”使用 1.组件传递Props校验 Vue组件可以更细致地声明对传入的 props 的校验要求…

Java,SpringBoot中对Stream流的运用

详细参考:java 1.8 stream 应用-22种案例_java1.8 流案例-CSDN博客 准备条件 public class Books implements Serializable {private static final long serialVersionUID 1L;/*** 图书记录ID,自增*/private Integer bookId;/*** 图书号*/private Str…

顺序表经典算法及其相关思考

27. 移除元素 - 力扣(LeetCode) 思路一 利用顺序表中的SLDestroy函数的思想,遇到等于val值的就挪动 思路二 双指针法:不停的将和val不相等的数字往前放。此时的des更像一个空数组,里面存放的都是和val不相等、能够存…

【人工智能学习思维脉络导图】

曾梦想执剑走天涯,我是程序猿【AK】 目录 知识图谱1. 基础知识2.人工智能核心概念3.实践与应用4.持续学习与进展5.挑战与自我提升6.人脉网络 知识图谱 人工智能学习思维脉络导图 1. 基础知识 计算机科学基础数学基础(线性代数、微积分、概率论和统计学…

先进语言模型带来的变革与潜力

用户可以通过询问或交互方式与GPT-4这样的先进语言模型互动,开启通往知识宝库的大门,即时访问人类历史积累的知识、经验与智慧。像GPT-4这样的先进语言模型,能够将人类历史上积累的海量知识和经验整合并加以利用。通过深度学习和大规模数据训…

第十四章[面向对象]:14.5:访问限制/属性

一,动态添加属性/方法 1,动态添加实例属性和实例方法 from types import MethodTypeclass Student:passs = Student()# 动态添加属性 s.name = Tom print(s.name) print(s.__dict__)# 定义一个函数作为实例方法 def set_age(self, age):self.age = age# 动态添加方法 s.set_…

Nginx基础入门

一、Nginx的优势 nginx是一个高性能的HTTP和反向代理服务器,也是一个SMTP(邮局)服务器。 Nginx的web优势:IO多路复用,时分多路复用,频分多路复用 高并发,IO多路复用,epoll&#xf…

【LeetCode】70. 爬楼梯(简单)——代码随想录算法训练营Day38

题目链接:70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到…

[OpenGL教程05 ] glAccum() 函数对累积缓存设置

Accumulation Buffer:累积缓存 一、说明 openGL编程之所以困难,是因为它是三维图表示;简简单单加入一个Z轴,却使得几何遮挡、光线过度、运动随影等搞得尤其复杂。它的核心处理环节是像素缓存,本篇的积累缓存就是其一个…

【MySQL】学习连接查询和案例演示

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-KOxr1rwR9cQTlydJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

OD(8)之Mermaid流程图(flowcharts)使用详解

OD(8)之Mermaid流程图(flowcharts)使用详解 Author: Once Day Date: 2024年2月20日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文章: 关于 Mermaid | Mermaid 中文网 (nodejs.cn)Mermaid | Diagramming and charting tool‍…