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

使用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. 我最喜欢用的css3之2D转换之translate用法

    CSS3 2D 转换 div { transform: rotate(30deg); -ms-transform: rotate(30deg); /* IE 9 */ -webkit-transfor ...

  2. ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  3. PHP制作留言板

    做基础的留言板功能  需要三张表: 员工表,留言表,好友表 首先造一个登入页面: <form action="drcl.php" method="post" ...

  4. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  5. chrome浏览器使用chrome://inspect调试app 网页,打开空白的问题

    使用chrome浏览器,输入chrome://inspect可以调试android app里面的网页,如果inspect的时候,是空白, 问题截图: 那就在C:\Windows\System32\dr ...

  6. Android比较实用的性能优化

    Android设备作为一种移动设备,无论是内存还是CPU的性能都受到了很大的限制,这导致Android程序的性能问题异常突出,随着产品的不断更新迭代,对于性能优化提出了更高的要求.本篇文章从稳定性.流 ...

  7. springboot 学习之路 14(整合mongodb的Api操作)

    springboot整合mongodb: mongodb的安装和权限配置  请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...

  8. 目标管理之SMART原则

    SMART原则经常用于KPI制定,也可以用于个人目标管理. SMART原则: S(Specific):目标必须是具体的,需要对标特定的工作目标,不能笼统: M(Measurable):目标必须是可衡量 ...

  9. hibernate数据库操作基础

    1.根据主键查询 2.getSession().createSQLQuery(sql)和session.createQuery(sql) 3.Seeion的其他方法  4.Hibernate Crit ...

  10. 分布式事务实现-Percolator

    Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统.这里重点讨论这个系统的分布式事务实现,不讨论percolator中为 ...