16.1 基础命令

新手的第一条命令。

ls

列出文件列表。这条命令看似简单,实则强大。例如,使用递归选项 -R 可以列出树状的目录结构。其他常用的选项有 -S 按文件大小排序、-t 按文件修改时间排序、-v 按文件名中的(数字化)版本号排序1arrow-up-right-b 显示转义字符、-i 显示 inode 信息(见示例 16-4arrow-up-right)。

bash$ ls -l
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter10.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter11.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter12.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter1.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter2.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter3.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:49 Chapter_headings.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:49 Preface.txt


bash$ ls -lv
 total 0
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:49 Chapter_headings.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:49 Preface.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter1.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter2.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter3.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter10.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter11.txt
 -rw-rw-r-- 1 bozo bozo 0 Sep 14 18:44 chapter12.txt

note 当试图列出一个不存在的文件时,ls 命令会返回非零的退出状态arrow-up-right

样例 16-1. 使用 ls 来创建用于烧录 CDR 光盘的内容表

cat, tac

cat 是 concatenate "拼接" 一词的缩写,会把文件内容输出到 stdout。通常用语配合重定向功能(> >>)来拼接多个文件。

选项 -n 会使 cat 为每个文件的每行前插入连续号码。选项 -b 会使 -n 过滤掉空行。选项 -v 会用 ^ 记号显示不可打印字符。选项 -s 会合并连续的空行为一行。

参见样例 16-28arrow-up-right样例 16-24arrow-up-right

note管道arrow-up-right中,重定向arrow-up-right stdin 到文件会比用 cat 命令更高效。

tac 是反过来的 cat,从后向前地输出文件内容。

rev

给定一个文件,逆序输出它的每一行到 stdout。这与 tac 不同,因为 rev 保留了每行内部的顺序。

cp

文件复制文件。cp file1 file2file1 复制为 file2,如果 file2 已存在则覆盖它(见样例 16-6arrow-up-right)。

note 特别有用的选项有:-a 归档(复制完整的目录树)、-u 更新(不再覆盖同名的新文件)、-r -R 递归。

mv

文件移动命令。等价于 cprm 的组合。常用于移动文件和重命名文件。样例 10-11arrow-up-right样例 A-2arrow-up-right 有一些在脚本中使用 mv 的例子。

note 在非交互脚本中,mv 可以使用“强制”选项 -f 以省略用户的确认。 当移动一个目录到另一个已存在的目录中,那么它会成为目标目录的子目录。

rm

文件删除命令。选项 -f 可以强制删除只读文件,也常用于在脚本中省略用户的确认。

note rm 在处理 - 打头的文件时会失败,因为它将其视为选项。一个变通办法是在输入文件名参数前提供选项结束标志 --,另一个办法是提供相对路径 ./ 而非直接输入文件名。

rmdir

目录删除命令。目录需要是空的,注意也不能有“隐藏”文件(点文件arrow-up-right)。

mkdir

目录创建命令。如 mkdir -p project/programs/December,这里的选项 -p 会自动按需创建不存在的上级目录。

chmod

改变文件或目录的属性(见样例 15-14arrow-up-right)。

chattr

修改文件属性。这听起来与 chmod 类似,但针对的是不同的选项和语法,且只在 ext2/ext3 文件系统上有效。

一个具体的有趣选项是 ichattr +i filename 可以将文件标记为不可变的,即文件不可写、不可被链接、不可删除。甚至是 root 也不允许。这个属性只能被 root 设置或取消。类似地,a 选项表示文件是“只可追加的”。

如果文件属性有 s(secure, 安全)选项,那么文件删除时会擦写清零对应的块,以避免数据恢复。

如果文件属性有 u(undelete, 可恢复)选项,那么文件删除后,其文件内容仍然可访问。

如果文件属性有 c(compress, 压缩)选项,那么写入硬盘、从硬盘中读出时会自动压缩、解压缩。

note chattr 设置的文件属性不会在 ls -l 中显示。

ln

创建一个已存在的文件的链接。“链接”是文件的引用,或称为别名。ln 命令可以多次链接一个文件(见样例 4-6arrow-up-right)。

ln 创建的文件只占用少量字节,是一个引用,一个指向源文件的指针。

ln 通常搭配选项 -s 使用,s 可以解释为符号的(symbolic)、软的(soft)。软链接的优势是可以创建一个目录链接或是跨文件系统的链接。

warn 如果文件不存在,会报错。

该采用何种链接? 就像 John Macdonald 说的: 两种(链接类型)都提供了一定程度的双向引用——编辑原文件、硬链接文件、软链接文件三者任意一个,其修改都会同时生效。当你在高层工作时会有些区别:硬链接的新名称完全独立于旧名称,如果删除了旧的,新的仍然指向数据,不受影响;软链接则不然,软链接在其指向的旧名称被删除后会失效,尽管软链接文件仍然存在。软链接的优点是可以对另一个文件系统做引用(因为它只是引用文件名,而非其数据),而且软链接还能引用目录,硬链接不可以。

链接使得脚本(以及其他可执行文件)可以通过多种名称被调用,且其行为是一致的。

样例 16-2. 你好、再见

man, info

访问关于系统命令与安装的实用程序的手册和信息页。如果可用,一般 infoman 包含更详细的描述。

有多种“自动”编写手册页(man pages)的尝试。样例 A-39arrow-up-right 在这方面做出了尝试。

注释

1arrow-up-right 选项 -v 还可以根据文件名的大小写前缀来排序。

2arrow-up-right 点文件是以 . 打头的文件,如 ~/.Xdefaults。这样的文件名不显示在默认的 ls 结果中(可以使用 ls -a 使其显示),也不会被 rm -rf * 所删除。点文件通常作为初始化或配置文件出现在用户家目录中。

3arrow-up-right 这个特性可能尚未被你用的 ext2/ext3 文件系统版本所实现。请检查你所用的 Linux 发行版的文档。

最后更新于