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

使用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. 【读书笔记】iOS-网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  2. css选取table元素的第一列

    table tr td:first-child

  3. phpstudy集成下Apache配置部署https安全证书

    一..先申请到安全证书.(腾讯云或者阿里云申请免费1年的安全证书),怎么申请这里也说下(以腾讯云为例): 1.登录腾讯云QQ或微信登录都行,第一次登录要通过实名认证,点击[产品]---[ss证书l] ...

  4. Chrome下解决本地异步请求失败的问题(Origin null is not allowed by Access-Control-Allow-Origin. )

    Chrome更新版本后发现打开本地Jquery easyui没有数据,查看控制台才发现如下问题解决的办法是设置启动参数"--allow-file-access-from-files" ...

  5. 精华阅读第 13 期 |常见的八种导致 APP 内存泄漏的问题

    本期是移动开发精英俱乐部的第13期文章,都是以技术为主,所以这里就不过多的进行赘述了,我们直接看干货内容吧!本文系ITOM管理平台OneAPM整理. 实际项目中的MVVM(积木)模式–序章 导读:开篇 ...

  6. ChatOps如何变革企业业务

    [编者按]本文作者为日志分析软件公司 Logz.io 的联合创始人 Tomer Levy,主要介绍 ChatOps 的特点与发展历程,以及将来可能带来的业务变革.文章系国内 ITOM 管理平台 One ...

  7. 联想ThinkPadE455实现FN禁用(F1-F12标准功能与特殊功能切换)

    系统:Win7 64 位     机型:联想ThinkPadE455笔记本 方法一:键盘Fn热键切换功能(亲测可用) Fn+Esc   FnLk  组合键方法启用或禁用Fn锁定功能 具体说明(这个逻辑 ...

  8. iftop – 实时Linux网络带宽监控工具

    在本文中,我们提出了另一个称为Interface TOP (IFTOP)的优秀程序, 它是一个基于实时控制台的网络带宽监控工具. 它将显示接口上网络活动的快速概览. Iftop 平均每 2,10 和4 ...

  9. pt-heartbeat --update --daemonize 只执行一次秒退的问题

    使用pt-heartbeat帮助测试MySQL从库delay时长- 第一次运行测试成功,运行顺畅. 过几天再次用--update测试时,发现pt-heartbeat只update一次就自己退出了,-- ...

  10. css基础内容

    css基础内容 CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与表现分离 ...