最常用的文件操作除了将文件列出来外,就应该是重命名,复制,删除了。正如将文件列出来一样,大多数现代操作系统为这些任务提供了用户图形界面,但是在许多场景中,用命令行还是会更方便。

使用mv命令重命名一个文件,是'move'的简写:

$ echo "test text" > test
$ mv test test_file.txt
$ ls
test_file.txt

这样test文件重新更名为test_file.txt文件。该示例的最后一步用ls来确认文件是否更名成功,但是特定系统文件并不重要,所以在输出中隐藏了。('move'一词来源于我们通常用mv命令将一个文件移至不同的目录中[第四章],可能在移动的过程中对它重命名。当移动的目标目录就是当前目录时,这样的移动就简化为重命名。)

cp用于复制一个文件,是'copy'的简写:

$ cp test_file.txt second_test.txt
$ ls
second_test.txt
test_file.txt

最后, 删除文件的命令是:rm,'remove'的简写:

$ rm second_test.txt
remove second_test.txt? y
$ ls second_test.txt
ls: second_test.txt: No such file or directory

注意:在许多操作系统中,默认地,当删除文件时系统会出现一个确认提示选项。任何以字母'y'或'Y'开始的答案会导致文件被删除,其他任何答案都会阻止本次删除操作。

顺便说下,以上提到的对cprm调用时,我通常不会手动一个字母一个字母的输入 test_file.txtsecond_test.txt,而是像这样输入test⇥sec⇥(这里的⇥代表tab键Table 1),利用tab的补全功能(Box 8)

Box 8. Tab 补全

大多数现代命令行程序(终端)支持tab补全,如果系统中只有一个有效匹配,可以自动补全一个单词。例如,如果只有一个文件test_file的名字以字母'tes'开始,我们可以像下面这样创建命令移除它:

$ rm tes⇥

上面的⇥是tab键(Table 1)。终端接下来会自动补全文件名,像rm test_file.特别对于很长的文件名(或目录),tab补全可以节省很多冗长输入。这降低了认知负荷,因为这意味着你不需要去记住文件的全名,只需要记得前几个字母就行了。

$ ls foo⇥

会被补全为:

$ ls fooba

如果我们再次敲击tab键,我们可以看到如下的匹配列表:

$ ls fooba⇥

foobarquux foobazquux

我们可以再多敲些字母来解决这种歧义场景,所以可以在fooba后面再输入一个r然后再按⇥能得到想要的结果。

$ ls foobar⇥

这就能补全foobarquux。这个场景很平常,经验丰富的命令行使用者可能会经常像这样输入f⇥⇥让终端获取所有的可能性:

$ ls f⇥⇥

figure_1.png foobarquux foobazquux

再多输入几个字母通常就能锁定唯一文件。

rm在一个未确认的Unix系统上的默认行为通常是不需要再确认,直接就删除文件,但是(因为删除了就不能再恢复)许多系统为rm命令设置了选项出现一个确认是否删除选项。(你可以通过运行man rm来确认,该选项是-i,所以事实上rmrm -i).在许多场景中确认删除选项都很不方便,例如,当你想要删除一系列文件并且不想再确认任何一个文件是否该删除。这种情景对使用通配符*(在2.2章节中提过)来说特别常见,又例如,移除所有以'.txt'结尾的文件后缀名使用一个命令而且不需要再确认任何一个文件是否需要删除,你可以这样输入:

$ rm -f *.txt

这里的-f(‘force’简写)重写了隐式的-i选项并且立即移除所有的文件。(请注意,现在你可以理解 图2中的命令了)

Unix 简写

你可能注意到在本章节和2.2章节中命令都是简写:我们用lsmv,cprm代替listmove,copyremove。因为以前的命令名更容易理解和记忆,但你可能想知道为什么实际命令不长(图16)

图16:*Unix命令的简写可以是一个混乱的根源*

答案要追溯到Unix从多数计算机用户通过慢连接登录到集中服务器的时间起,用户按下键的时间和在终端出现的时间可能会有明显的延迟。对于常用命令如列出文件(listing file),listlsremoverm之间但差异就很重要了。所以最后,最常用的Unix命令趋于只有两三个字母长。因为这样会更难记忆,这在学习它们的时候可能有些不方便,但对于命令行使用的一生来说,使用mv这样的简写节省了很多时间。

练习

1.使用echo命令和重定向操作>创建一个名叫foo.txt的文件,内容包含文本'hello,world'。然后使用cp命令,复制foo.txt到文件bar.tx。使用diff命令,确认两个文件的内容都相同。

2.组合使用cat命令和重定向操作符>,不使用cp命令创建一个foo.txt的副本,命名为baz.txt

3.创建一个叫做quux.txt的文件,包含foo.txtbar.txt的内容,bar.txt的内容在后面。注意:正如2.1.1章节中备注的那样,cat可以有多个参数。

4.对一个不存在的文件,使用rm nonexistent rm -f nonexistent的区别.(nonexistent:不存在的文件名)

2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除的更多相关文章

  1. 4.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—链接到目录

    在4.2章中我们已经会用cd进入到指定的目录中.这是导航最常见的用途之一,但是它还有几个值得关注的用途.第一个是使用cd ..(读作'see-dee 点点')返回当前目录级别的上一级: $ pwd / ...

  2. 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件

    已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...

  3. 1.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——运行终端

    终端是个允许我们运行命令行的程序,运行命令前,先打开它.在MacOS系统上,可以使用macOS应用 Spotlight来打开终端窗口,Spotlight也有其他两种方式触发,一种是键入⌘␣(comma ...

  4. 1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页

    我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令.这个工具本身就是个称作'man'的命令('manual'的简写).它的参数是 ...

  5. 2.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结

    下Table 3本章重要命令小结 命令 描述 示例 > 将输出内容重定向到指定文件中 $ echo foo > foo.txt >> 将输出内容添加到指定问价中 $ echo ...

  6. 3.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——下载文件

    首先,为了不手动创建一个长文件(这太麻烦了),我们将使用强大的curl(有时也写作"cURL")工具从网上下载一个文件,这个命令可以让命令行与URL交互.尽管这不是Unix核心命令 ...

  7. 1.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——开始第一条命令

    现在开始准备运行我们的第一条命令了,在屏幕上打印'hello'.(字符打印的地方被称为'标准输出',通常指的是屏幕,很少指真的物理打印机设备).这条命令就是echo,这条命令的参数是想要输出的字符串或 ...

  8. 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令

    在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...

  9. 4.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第四章小结

    本章相关重要命令总结在Table 6. 命令 描述 示例 mkdir <name> 创建某目录 $ mkdir foo pwd 显示当前所在目录 $ pwd cd <dir> ...

随机推荐

  1. 反射和动态加载bean 完成 通用servie

    最近我们部门有个小项目,用来管理这个公司所有项目用到的代码表,例如国家代码.行政区划代码等.这个项目的功能其实很少,就是简单的修改.查询.新增和逻辑删除.但是为每张表都写一套增删改查的页面和一套ser ...

  2. FineReport连接多维数据库示例及操作

    1. 描述 FineReport连接多维数据库,首先要通过数据连接将多维数据库与FineReport连接起来,然后在数据连接的基础上新建多维数据库XMLA数据集,用于模板设计. 2.XMLA数据连接 ...

  3. vue与原生混合开发

    前段时间,做了一个混合开发的项目,主要是以vue框架开发h5页面,使用cordova作为中间沟通桥梁,实现了h5与安卓.iOS的混合开发,由于从事iOS开发,h5也是刚接触不久,很多深入原理还不太清楚 ...

  4. 对Controller的单元测试

    在ASP.NET MVC项目的Controller中存在逻辑代码,也需要单元测试.查阅到的资料上,有说ASP.NET MVC框架在设计时便考虑到了满足可测试性,所以相对aspx.Winform来说针对 ...

  5. unityShader CGINCLUDE关键字

    unityshader中经常见到CGPROGRAM,除此之外还有一个CGINCLUDE关键字. 二个关键字都是用ENDCG来结束,但是用法完全不一样. CGINCLUDE和ENDCG内可以插入一些sh ...

  6. Windows10系统的Linux子系统中安装MySQL数据库心得

    后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...

  7. LeetCode题解之Number of Segments in a String

    1.题目描述 2.题目分析 找到字符串中的空格即可 3.代码 int countSegments(string s) { ){ ; } vector<string> v; ; i < ...

  8. Oracle 与 mysql 建立透明网关

    1.1.1.   文档编写目的 项目上需要做与Mysql数据库的对接,然而Oracle与Mysql数据库是异构的,因此这里采用透明网关的方式来解决. 另,项目上的环境为APP:12.2.6 ; DB: ...

  9. winform中容器是如使用的

    1.容器 (1)FlowLayouPanel 普通容器[内部流式布局] (2)Groupbox 带有标题的普通容器[内部普通布局,超出范围隐藏] (3)Panel 普通容器[内部普通布局,超出范围隐藏 ...

  10. 【转】Mysql学习---MySQL悲观锁中的排它锁

    [原文]https://www.toutiao.com/i6595305814087434760/ 悲观锁中的排它锁. 排它锁关键字:for update 特点:会锁住行或者表,防止其他事务进行修改操 ...