也许最常用的Unix命令是ls了,它是‘list’的简写(Listing 8)

Listing 8 ls以列表的形式显示文件和目录(内容输出跟各自电脑有关)

$ ls

Desktop

Downloads

sonnet_1.txt

sonnet_1_reversed.txt

ls命令简单地列出了当前路径下的所有文件和目录(但不包括被隐藏的文件,我们过一会儿就会提到它)。从另一个意义上讲,它实际上是图形浏览器的命令行版本,用于显示文件和目录,如插图15。(我们将在第四章中加深对目录和文件的理解)正如一个图形文件浏览器样,在Listing 8中的输出内容只是个示例,具体结果会根据你用的系统有小的差异。(这对所有的例子都是一样,所以不用纠结于输出上的微小差别。)

插图15: 相当于`ls`的图形显示版本

ls命令还可以用来检查一个文件(或目录)是否存在,因为如果ls命令后接一个不存在的文件会报错,如Listing 9 所示:

Listing 9: 对一个不存在的文件使用ls命令

$ ls foo

ls: foo: No such file or directory

$ touch foo

$ ls foo

foo

上面Listing 9中使用touch命令创建一个名为foo的空文件(如Box7), 所以第二次我们再使用ls时错误消失了。(touch原本的用途是改变文件或目录的修改时间,但像Listing 9 中那样用touch创建空文件是个常见的Unix用法。)

Box 7. Foo,bar, baz等.

当阅读计算机时,会遇到相当奇怪的词——像foo,bar, baz,而且它还经常被用到。确实,除了用ls footouch foo外,在本教程中已经出现了四次这样的指示词: 一次在典型命令行(图2中)第一章节,一次是虚拟机器码(foobar!,Box2),再有一次是逃离窘境(grep foobar, Box4), 还有一次是在手册页中(Listing3),前三个是我自己用的,但是最后一个我什么也没做哦:

...if name contains a slash (/) then man interprets it as a file specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.

这里我们看到了man本身也在手册页中使用了foobar——这毫不含糊地证明了它在计算机中的地位。

那这些古老术语源自哪里?老办法, 查Jargon File(在上面输入foo),上面说:

foo: /foo/

  1. 感叹词. 表达厌恶、恶心。
  2. [非常常见] 常用做任何事物的示例名字,尤其是程序或文件(特别是临时文件)。
  3. 最开始在语法示例使用metasyntactic变量的标准列表中使用,另外也有bar、baz,qux,quux等。

    当我们结合使用'foo'和'bar'时,通常要追溯到二战时期说的喱语FUBAR(戳原意), 后来被改为foobar。早期版本的Jargon File将这一变化解释为战后的归化,但现在看起来FUBAR更可能是'foo'的衍生物,可能是受德国furchtbar(太糟了)的影响——'foobar'实际上可能是原来的形式。

    metasyntactic变量中,我们接着可以发现如下的内容:

metasyntactic变量: n.

在例子中使用的名字,被理解为代表正在讨论的任何事物,或任何讨论中的任何类别的随机成员。foo就是个典型的例子。为避免疑惑,hackers从不(好吧,几乎不)使用'foo'或者其他能代表任何事物的名字。在文件命名上,一个公共惯例是以metasyntactic变量名开始的文件名是个随时可能被删除的临时文件。

Metasyntactic变量这么叫的原因有以下几点:

(1) 它们是用于讨论程序的元语言中的变量等

(2) 它们是变量,其值通常也是变量(比如用法:f(foo,bar)的值是foo和bar的和)。然而,有人认为,“metasyntactic 变量”流行的真正原因是它听起来不错。

换句话说,如果你创建一个文件,名字并不重要,通常就叫它'foo'。一旦你已经使用了'foo',那下个文件就叫'bar',再之后叫'baz'.再之后就有点不同了(“quux”是一个常见的选择),但是在大多数情境下3个就够了。

当我们使用命令行改变目录路径时,常用的方式是使用cd(第四章中将会提到),然后马上用ls命令查看该目录下的内容。这可以让我们定位自己,并且这也是我们操作下一步前好的开始。

ls一个有用的功能是支持通配符*(读做'星号')。例如,将所有后缀'.txt'的文件以列表形式展示出来,我们可以像这样输入:

$ ls *.txt
sonnet_1.txt
sonnet_1_reversed.txt

这里*.txt(读作"星号点tee-ex-tee")自动匹配所有文件中名字是字符串后接着'.txt'的文件。

ls有3个特殊且重要的可选操作选项,若以'长表单'开始,则使用-l(读作‘短横线-ell’):

$ ls -l *.txt
total 16
-rw-r--r-- 1 mhartl staff 87 Jul 20 18:05 sonnet_1.txt
-rw-r--r-- 1 mhartl staff 294 Jul 21 12:09 sonnet_1_reversed.txt

现在,你可以放心地忽略ls -l输出的大部分信息,但请注意,长表单列出了日期和时间,表示文件最后一次被修改的日期和时间。在日期前面的数字是文件的字节大小。

第二个非常有用的ls变量是'以修改时间倒序列出文件信息(也是长表单)', 对应的命令是ls -rtl,这会以最近修改时间在后面的顺序列出文件或目录的长表单(反转,即最近修改的文件或目录会出现在屏幕的下方,以便于检查)。当该目录下有许多文件,但你又只关心最近修改的文件时,用这个命令就非常方便,比如确认一个文件是否下载。我们将会在章节3.1中看到一个相关的例子,但你完全可以现在免费试试:

$ ls -rtl
<results system-dependent>

顺便说一下,-rtl通常是这种紧凑的形式,但是你可以单独传入选项参数像这样:

$ ls -r -t -l

另外,它们间的顺序不相干,所以输入ls -trl也会出现同样的效果。

隐藏文件

最后,Unix有‘隐藏文件(目录)’的概念,这些文件在用列表展示时默认不会显示出来。辨别隐藏文件或目录的方式是它们通常是以点'.'开始的文件或目录名,通常用于存储如用户偏好的内容。例如,在Learn Enough Git to Be Dangerous中,我们创建了一个叫做.gitignore的文件告诉一个特殊的程序(Git)忽略匹配某些模式的文件。一个具体的例子,忽略所有以'.txt'结尾的命名文件,我们可以这样做:

$ echo "*.txt" > .gitignore
$ cat .gitignore
*.txt

如果我们之后运行ls, 这些文件不会再出现,因为它被隐藏了:

$ ls
sonnet_1.txt
sonnet_1_reversed.txt

为了用ls命令显示隐藏的文件或目录,我们可以传入-a选项(意为'all,所有'):

$ ls -a
. .gitignore sonnet_1_reversed.txt
.. sonnet_1.txt

现在,.gitignore正如预期,显示在表单中了。(我们将在4.3章节中学习...的作用)。

练习

  1. 用什么命令可以列出以字母's'开头的非隐藏文件和目录?

2.用什么命令可以列出所有包含字符串'onnet'的非隐藏文件,并且以修改时间的倒序列出?备注:在前后都使用通配符。

3.用什么命令可以列出所有文件(包含隐藏文件),并以长表单,修改时间的倒序列出?

2.2《想成为黑客,不知道这些命令行可不行》(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. 3.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——下载文件

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

  6. 2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除

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

  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. Python 基于Python实现Ftp文件上传,下载

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

  2. Android5.x Notification应用解析

    Notification可以让我们在获得消息的时候,在状态栏,锁屏界面来显示相应的信息,很难想象如果没有Notification,那我们的qq和微信以及其他应用没法主动通知我们,我们就需要时时的看手机 ...

  3. mysql 安全模式

    今天,执行一条delete语句的时候报错如下: Error Code: 1175. You are using safe update mode and you tried to update a t ...

  4. 开发之道——读《移山之道——VSTS开发之道》后感

    开发之道——读<移山之道——VSTS开发之道>后感 <移山之道——VSTS开发之道>(下简称<移山之道>)是邹欣老师的另一本书.相传很有名的<构建之法> ...

  5. 试试SQLServer 2014的内存优化表(转载)

    SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...

  6. myeclipse 10配置jboss 7.1.1无法启动Error: Could not create the Java Virtual Machine

    myeclipse 10中配置jboss 7.1.1,多写了个server name,结果死活启动不了.后来,发现了这个细节. 错误显示: 错误源头: 删掉Server name后,可以完美启动 小问 ...

  7. MySQL索引与Index Condition Pushdown(employees示例)

    实验 先从一个简单的实验开始直观认识ICP的作用. 安装数据库 首先需要安装一个支持ICP的MariaDB或MySQL数据库.我使用的是MariaDB 5.5.34,如果是使用MySQL则需要5.6版 ...

  8. python基础学习11----函数

    一.函数的定义 def 函数名(参数列表): 函数体 return语句 return语句不写或后边不加任何对象即为return None 二.函数的参数 无参数 def func1(): print( ...

  9. Oracle 截取字符串(截取固定分隔符中间的字符

    #### Oracle 截取字符串(截取固定分隔符中间的字符) #### ####  oracle 取固定分隔符之间的字符--方法一 substr+ instrSELECT  substr('12JP ...

  10. sql点滴45—mysql中group_concat用法

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组, ...