Kodokon kodokon.com

读取文件与重定向输出

用 cat、head 和 tail 显示文件内容,然后把输出捕获到一个文件里。

7 分钟 · 3 题

在 Kodokon 中打开本课

你并不总是需要打开一个编辑器,才能瞄一眼某个文件。cat 命令会把它的内容直接打印到终端里。它的名字来自 concatenate,意思是“首尾相接”,因为它也能把好几个文件一个接一个地显示出来。它是小文件的理想工具:最多几十行的那种。

BASH
yoann@laptop:~/my-project$ cat shopping.txt
Bread
Cheese
Tomatoes

yoann@laptop:~/my-project$ cat shopping.txt notes.txt
Bread
Cheese
Tomatoes
Do not forget the Saturday market
cat 作用于一个文件,然后作用于两个一前一后显示出来的文件。

面对一个一万行的文件,cat 会让屏幕滚动十秒钟,而你只来得及看见结尾。还有两条更精细的命令:head 显示文件的开头tail 显示文件的结尾。两者默认都显示 10 行,而 -n 选项让你自己决定行数。tail 配上 -f 选项(follow,跟随)就有了超能力:它会一直开着,并在新行到达的同时把它们打印出来。人们正是这样实时盯着服务器日志的。

BASH
head server.log
head -n 5 server.log
tail -n 20 server.log
tail -f server.log
开头、前 5 行、最后 20 行,然后是实时的结尾(按 Ctrl + C 退出)。

默认情况下,命令把结果写到屏幕上。但你可以把这个结果引流到一个文件里,就像把水管里的水引进水桶一样。这就是重定向,它用一个尖括号来书写。单个尖括号 > 把输出送进文件,并覆盖掉它原有的内容。双尖括号 >>追加到末尾,什么都不擦掉。这一个字符的差别,改变的是全部。要在不整个打印出来的前提下检查你刚生成的东西,wc 命令(word count,字数统计)配上 -l 选项(lines,行)能数出一个文件有多少行。

BASH
yoann@laptop:~/my-project$ echo "My first line" > notes.txt
yoann@laptop:~/my-project$ echo "My second line" >> notes.txt
yoann@laptop:~/my-project$ cat notes.txt
My first line
My second line
yoann@laptop:~/my-project$ ls -l > inventory.txt
yoann@laptop:~/my-project$ wc -l inventory.txt
7 inventory.txt
创建一个文件,追加一行,检查它,捕获一段输出然后数它的行数。

知识检测

确认你已牢记本课的重点内容。

  1. cat 命令是用来做什么的?
    • 在终端里显示一个文件的内容
    • 创建一个空文件
    • 删除一个文件
    • 统计一个文件的行数
  2. >>> 有什么区别?
    • > 追加到末尾,>> 覆盖文件
    • > 覆盖文件,>> 追加到末尾
    • 没有区别,两者都是写入一个文件
  3. 怎样显示文件 server.log 的最后 20 行?
    • head -n 20 server.log
    • cat -n 20 server.log
    • tail -n 20 server.log