也许最常用的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. eclipse安装可视化swing插件

    众所周知,eclipse作为Java的主流IDE之一,拥有强大的插件功能.这里介绍一种,必要时刻需要做一点awt或者swing时能派上用场. 进入下面的链接,官网下载组件 http://www.ecl ...

  2. jQuery事件和JSON点语法

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  3. CentOS7+ApacheServer2.4+MariaDB10.0+PHP7.0+禅道项目管理软件8.0环境部署

    CentOS7+ApacheServer2.4+MariaDB10.0+PHP7.0+禅道项目管理软件8.0环境部署 by:授客 QQ:1033553122 目录 一. 二. 三. 四. 五. 六. ...

  4. SQLite 数据库增删改查

    布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  5. nodejs设置NODE_ENV环境变量(1)

    看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...

  6. python 流程控制(条件语句)

    1,python流程控制单条件基本语句 2,python流程流程多条件控制语句 3,三元运算 1,python流程控制单条件基本语句 if 判断条件: 执行语句…… else: 执行语句…… 判断条件 ...

  7. SQL Server 中为何拥有db_owner权限的账号删除不掉数据库

    今天在公司的SQL Server服务器上,使用了一个只有public和dbcreator角色的账号"user1"在SMSS中去删除一个数据库,但是死活报错说没有权限,报错如下: D ...

  8. 学习笔记:The Best of MySQL Forum

    http://mysql.rjweb.org/bestof.html I have tagged many of the better forum threads. 'Better' is based ...

  9. 【排序算法】冒泡排序(Bubble Sort)

    0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2)  次交 ...

  10. 【转】Linux下从TCP状态机,三次握手判断DDOS攻击

    从TCP状态机判断DDOS攻击 一.TCP协议 TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态. 二. TCP握手和 ...