2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除
最常用的文件操作除了将文件列出来外,就应该是重命名,复制,删除了。正如将文件列出来一样,大多数现代操作系统为这些任务提供了用户图形界面,但是在许多场景中,用命令行还是会更方便。
使用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'开始的答案会导致文件被删除,其他任何答案都会阻止本次删除操作。
顺便说下,以上提到的对cp
和rm
调用时,我通常不会手动一个字母一个字母的输入 test_file.txt
和second_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
,所以事实上rm
是rm -i
).在许多场景中确认删除选项都很不方便,例如,当你想要删除一系列文件并且不想再确认任何一个文件是否该删除。这种情景对使用通配符*
(在2.2章节中提过)来说特别常见,又例如,移除所有以'.txt'结尾的文件后缀名使用一个命令而且不需要再确认任何一个文件是否需要删除,你可以这样输入:
$ rm -f *.txt
这里的-f
(‘force’简写)重写了隐式的-i
选项并且立即移除所有的文件。(请注意,现在你可以理解 图2中的命令了)
Unix 简写
你可能注意到在本章节和2.2章节中命令都是简写:我们用ls
,mv
,cp
和rm
代替list
,move
,copy
和remove
。因为以前的命令名更容易理解和记忆,但你可能想知道为什么实际命令不长(图16)
图16:*Unix命令的简写可以是一个混乱的根源*
答案要追溯到Unix从多数计算机用户通过慢连接登录到集中服务器的时间起,用户按下键的时间和在终端出现的时间可能会有明显的延迟。对于常用命令如列出文件(listing file),list
与ls
和remove
与rm
之间但差异就很重要了。所以最后,最常用的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.txt
和bar.txt
的内容,bar.txt
的内容在后面。注意:正如2.1.1章节中备注的那样,cat
可以有多个参数。
4.对一个不存在的文件,使用rm nonexistent
和rm -f nonexistent
的区别.(nonexistent:不存在的文件名)
2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除的更多相关文章
- 4.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—链接到目录
在4.2章中我们已经会用cd进入到指定的目录中.这是导航最常见的用途之一,但是它还有几个值得关注的用途.第一个是使用cd ..(读作'see-dee 点点')返回当前目录级别的上一级: $ pwd / ...
- 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件
已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...
- 1.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——运行终端
终端是个允许我们运行命令行的程序,运行命令前,先打开它.在MacOS系统上,可以使用macOS应用 Spotlight来打开终端窗口,Spotlight也有其他两种方式触发,一种是键入⌘␣(comma ...
- 1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页
我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令.这个工具本身就是个称作'man'的命令('manual'的简写).它的参数是 ...
- 2.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结
下Table 3本章重要命令小结 命令 描述 示例 > 将输出内容重定向到指定文件中 $ echo foo > foo.txt >> 将输出内容添加到指定问价中 $ echo ...
- 3.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——下载文件
首先,为了不手动创建一个长文件(这太麻烦了),我们将使用强大的curl(有时也写作"cURL")工具从网上下载一个文件,这个命令可以让命令行与URL交互.尽管这不是Unix核心命令 ...
- 1.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——开始第一条命令
现在开始准备运行我们的第一条命令了,在屏幕上打印'hello'.(字符打印的地方被称为'标准输出',通常指的是屏幕,很少指真的物理打印机设备).这条命令就是echo,这条命令的参数是想要输出的字符串或 ...
- 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令
在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...
- 4.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—第四章小结
本章相关重要命令总结在Table 6. 命令 描述 示例 mkdir <name> 创建某目录 $ mkdir foo pwd 显示当前所在目录 $ pwd cd <dir> ...
随机推荐
- 【代码笔记】iOS-NSTimer
代码: RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewControl ...
- Retrofit+OKHttp忽略https证书验证
记录这个的原因,是因为很多时候,因为后台配置的证书不正确导致APP访问不到服务器数据,导致影响自身的开发进度.没几行代码,逻辑也清晰,所以下面就直接贴出工具类吧: package huolongluo ...
- 网络基础 HTTP协议之http url简介
HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ...
- Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- 新知食APP架构分析--北京识物科技有限公司旗下产品
俗话说不打无准备之仗,这次真是有点懵逼了,建议大家去面试的时候,尤其是去小型互联网公司的时候,如果你想比其他人有竞争力,那么你要研究一下当前他的公司正在开发产品,他们的业务类型是什么样的,比如他们公司 ...
- [WPF 知识总结系列] —— 基本控件的简单样式集合
一.ScrollBar <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...
- python的函数(二)
1,函数的变量 2,函数的返回值 1,函数的变量 1.0,函数的变量分为局部变量和全局变量. def fun(): x = 100 print x 这个x是局部变量,函数执行完后,x的变量就会销毁,只 ...
- The current identity ( XXXX) does not have write access to ‘C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files’.解决办法
环境windows 2008+IIS 7 找到 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET FilesTempora ...
- 转:js小技巧 ,将彻底屏蔽鼠标右键,可用于Table ,取消选取、防止复制,IE地址栏前换成自己的图标
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu= ...
- Docker容器学习与分享05
Docker镜像操作 学完了一些最基本的操作之后,我学习了一些关于docker镜像的基本操作. 首先来学习一下从docker hub上拉取镜像,以centos镜像为例,使用docker search命 ...