# 查看文件命令集合

## 查看文件类型

### file 命令

在显示文件内容之前，应该先了解一下文件的类型。`file` 命令是一个随手可得的便捷工具。它能够探测文件的内部，并决定文件是什么类型的。 `file` 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。

#### 命令用法

```
$ file [OPTIONs] [FILEs]
```

多个文件之间使用空格分开，可以使用 shell 通配符匹配多个文件。

#### 常用可选参数

| 参数        | 说明                               |
| --------- | -------------------------------- |
| -b        | 输出行里不打印文件名                       |
| -z        | 尝试去（解压缩）浏览压缩文件内部                 |
| -Z        | 只打印压缩文件的内容                       |
| -i        | 输出文件的 MIME 类型字符串                 |
| -L        | 直接显示符号链接文件的源文件的文件类型              |
| -r        | 不将不可打印字符转换为 `\ooo`               |
| -F STRING | 使用 `STRING` 给定的字符串而不用 \`:' 作为分隔符 |
|           |                                  |

## 查看整个文件

### cat 命令

`cat` 命令是显示文本文件中所有数据的得力工具。 `cat` 命令连接文件并打印到标准输出设备上，类似于 Windows 下的 `type` 命令。

#### 命令用法

```
$ cat [OPTIONs] [FILEs]
```

如果没有给定 `FILE`，或者 `FILE` 的参数是 `-`，则读取标准输入。

#### 常用可选参数

| 参数 | 说明                                          |
| -- | ------------------------------------------- |
| -A | 等同于 -vET                                    |
| -e | 等同于 -vE                                     |
| -t | 等同于 -vT                                     |
| -n | 每一个输出行都打印行号                                 |
| -b | 和 -n 类似，不过空行不打印行号                           |
| -s | 将多行空行合并为一行                                  |
| -E | 在每一行的结尾打印 `$` 字符                            |
| -T | 将 TAB 字符显示为 `^`                             |
| -v | 打印不可见字符，使用 `^` 和 `M-`开头的标记，除了 LFD 以及 TAB 字符 |

### more 命令

使用 `cat` 命令时，当要显示的文件较大，文本在屏幕上迅速闪过（滚屏），用户往往看不清所显示的内容。因此，一般用 `more` 等命令分屏显示。`more` 命令是一个基于 vi编辑器文本过滤器，它以全屏幕的方式按页显示文本文件的内容，支持 vi 中的关键字定位操作。`more` 名单中内置了若干快捷键，常用的有 H（获得帮助信息），Enter（向下翻滚一行），空格（向下滚动一屏），Q（退出命令）。

#### 命令用法

```
$ more [options] <file> ...
```

#### 常用可选参数

| 参数  | 说明                                                                           |
| --- | ---------------------------------------------------------------------------- |
| -d  | 显示 `[press space to continue,'q' to quit.]` 和 `[Press 'h' for instructions]` |
| -c  | 不进行滚屏，每次显示都清空行尾                                                              |
| -p  | 不进行滚屏，每次显示都刷新分屏                                                              |
| -u  | 禁用下划线                                                                        |
| +\\ | 跳转到指定行号开始显示                                                                  |

### less 命令

`less` 命令的命名实际上是个文字游戏（从 “less is more” 得来），所以它为 `more` 的升级版。因为 `more` 只能向前翻看，而 `less` 可以向上、向下翻页。

#### 命令用法

```
$ less [option] <file>...
```

#### 常用可选参数

| 参数   | 说明                             |
| ---- | ------------------------------ |
| -e   | 文件内容显示完毕后，自动退出                 |
| -f   | 强制显示文件                         |
| -N   | 每一行行首显示行号                      |
| -s   | 将连续多个空行压缩成一行显示                 |
| -x\\ | 将 TAB 字符显示为指定个数 `number` 的空格字符 |

## 查看部分文件

通常你要查看的数据要么在文本文件的开头，要么在文本文件的末尾。如果这些数据是在大 型文件的起始部分，那你就得等 `cat` 或 `more` 加载完整个文件之后才能看到。如果数据是在文件的 末尾（比如日志文件），那可能需要翻过成千上万行的文本才能到后的内容。

### head 命令

`head` 命令，顾名思义，会显示文件开头那些行的内容。默认情况下，它会显示文件前10行的文本。

#### 常用可选参数

| 参数     | 说明                      |
| ------ | ----------------------- |
| -c NUM | 打印每个文件的头 NUM 个字节        |
| -n NUM | 打印每个文件的前 NUM 行而不是前 10 行 |
| -q     | 不打印任何给定的文件的头信息          |

### tail 命令

`tail` 命令会显示文件后几行的内容（文件的“尾部”）。默认情况下，它会显示文件的末尾10行。如果给定的文件不止一个，就在每个文件前面加一个 `==> 文件名标题 <==`。如果没有指定文件或者文件名为“-”，则读取标准输入。

#### 常用可选参数

| 参数      | 说明                                                          |
| ------- | ----------------------------------------------------------- |
| -c \\   |                                                             |
| -n \\   | 根据给定的 N 决定输出最后 N 行而不是默认的最后 10 行                             |
| -q      | 不打印任何给定的文件的头信息                                              |
| --retry | 文件不可访问或者文件稍后变得不可访问，都始终尝试打开文件。使用此选项时需要与选项 `--follow=name` 连用 |
| -F      | 等于 `--retry` 和 `--follow=name` 连用等同                         |
| -s \\   | 监视文件，时间间隔为 N 秒                                              |
