Linux/Unix 中的 cat 命令及其示例
Linux 和类 Unix 系统中的cat命令用于在屏幕上查看文件。cat 是 concatenate(链接或合并文件流)的缩写,是 Linux、Apple Mac OS、Unix、*BSD(FreeBSD / OpenBSD / NetBSD)操作系统中最常用的灵活命令之一。Linux 中的 cat 命令用于:
- 在屏幕上显示文本文件
- 读取文本文件
- 创建新的文本文件
- 文件连接
- 修改文件
- 合并文本或二进制文件
但是,cat 命令有很多选项,语法对于新的 Linux、macOS 和 Unix 用户来说可能难以理解。本页面通过许多实际示例为开发人员和系统管理员解释了 cat 命令。
目的
对文本文件的基本文件操作,例如显示或创建新文件。
cat 命令语法
基本语法如下:
cat filename cat > filename cat [options] filename cat file1 cat >> file2 cat file3 | command cat file4 | grep something
Linux 中的 cat 命令及其示例
它是一个用于连接和显示文件的标准 Unix 程序。cat 命令将文件内容显示到屏幕上。此外,您还可以使用 cat 命令快速创建文件。cat 命令可以从标准输入和输出设备读取和写入数据。请注意,以下某些选项仅适用于 cat 命令的 GNU 版本。
使用 cat 命令显示文件
要查看文件,请输入:
cat filename cat /path/to/file cat /etc/passwd
示例输出:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh .... ... ..hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash bind:x:110:118::/var/cache/bind:/bin/false haldaemon:x:111:119:Hardware abstraction layer,,,:/var/run/hald:/bin/false sshd:x:112:65534::/var/run/sshd:/usr/sbin/nologin mysql:x:113:121:MySQL Server,,,:/var/lib/mysql:/bin/false
使用 cat 命令创建文件
要创建名为“foo.txt”的文件,请输入:
cat >foo.txt
输入以下文本:
This is a test. Unix is the best. <control-D>
您需要按 [CTRL] + [D],即按住控制键,然后点击 d。> 符号告诉 Unix / Linux 系统输入的内容将存储在名为 foo.txt 的文件中(有关更多信息,请参阅 stdout)。要查看文件,请使用 cat 命令,如下所示:
cat foo.txt
使用 cat 命令和 Shell 管道查看大文件
如果文件太大,无法在计算机屏幕上显示,文本将高速向下滚动。您将无法阅读。要解决此问题,请将 cat 命令输出传递给 more 或 less 命令,如下所示:
cat bigfile | more cat bigfile | less
more 和 less 命令充当 shell 过滤器。但是,您可以跳过 cat 命令并直接使用 Linux / Unix more & less 命令,如下所示:
more bigfile less bigfile
如何使用 cat 命令合并两个或多个文件
你可以合并两个文件并创建一个名为 report.txt 的新文件,输入:
cat score.txt names.txt > report.txt cat report.txt
如何将数据附加到文本文件
要将数据附加(将数据添加到现有数据)到名为 foo.txt 的文件,请输入:
cat >>foo.txt
输入文本:
A champion is someone who gets up, even when he can't <control-D>
任务:编号所有输出行
键入以下命令:
cat -n filename cat --number filename
示例输出:
如何查看非打印字符
要将 TAB 字符显示为 ^I,请输入:
cat -T filename
要在每行末尾显示 $,请输入:
cat -E filename cat --show-ends filename
使用 ^ 和 M- 符号(LFD 和 TAB 除外)并显示所有非打印内容:
cat -v filename cat --show-nonprinting filename
要显示全部,请输入:
cat -A fileName
或
cat -vET fileName
示例输出:
查看所有文件
您可以简单地使用 shell 通配符,如下所示:
cat *
要仅查看(c 文件)*.c 文件,请输入:
cat *.c
另一个选项是bash for loop或ksh for loop:
#!/bin/bash for f in /source/project10/*.pl do echo "***** [Start $f ] ****" cat -n "$f" echo "***** [End $f ] ****" done
#!/bin/ksh for f in $(ls /source/project10/*.pl) do print "*** [Start $f ] ****" cat "$f" print "*** [End $f ] ****" done
打印文件
您可以直接将文件发送到打印设备,例如 /dev/lp。
cat resume.txt > /dev/lp
在现代系统上,/dev/lp 可能不存在,您需要使用 lpr 等工具打印文件:
cat resume.txt | lpr
或者
lpr resume.txt
连接二进制文件
您可以连接二进制文件。在过去,大多数 FTP / HTTP 下载限制为 2GB。有时为了节省带宽,文件大小限制为 100MB。让我们使用wget 命令来抓取一些文件(例如,large.tar.gz 在远程 URL 上被拆分为 3 个文件):
现在使用 cat 命令轻松地合并这些文件(下载的 *.bin):
wget url/file1.bin
wget url/file2.bin
wget url/file3.bin
cat file1.bin file2.bin file3.bin > large.tar.gz ### extract it tar -zxvf large.tar.gz
Unix 和 Linux 下的 rar 命令的另一个示例:
### First combine the files, and use the > shell redirection output to put the DVD image in a file ### cat file.rar.001 file.rar.002 file.rar.003 file.rar.004 file.rar.005 > dvd.rar ## next unrar it ## unrar e dvd.rar ## enjoy dvd ## mplayer myfile.avi
欺骗程序
您可以使用 cat 命令来欺骗许多程序。在此示例中,bc 认为它不在终端上运行,因此不会显示其版权信息。默认输出:
bc -l
示例会话:
bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 4+5 9 quit
现在尝试使用 cat 命令:
bc -l | cat
示例会话:
4+5 9 quit
测试音频设备
您可以将文件发送到声音设备(例如 /dev/dsp 或 /dev/audio),以确保声音输出和输入正常工作:
cat filename >/dev/dsp cat recording.au >/dev/audio
您可以简单地使用以下命令录制语音样本并使用 cat 命令播放:
dd bs=8k count=4 </dev/audio >testing123.au cat testing123.au >/dev/audio
收集 Linux 系统信息
### To see CPU information ### cat /proc/cpuinfo ### To see memory information ### cat /proc/meminfo ### To see Linux kernel version ### cat /proc/version
在脚本中显示大块文本数据
您可以使用此处的文档在脚本中显示大量文本数据,例如帮助:
cat <
另一个工作示例:
#!/bin/bash # Author: Vivek Gite <http://www.example.com/ # ----------------------------------------------- #Set default to my-dev-box BASEDIR="/home/vivek/projects/bash/nginx-keepalived/chroot" # Now switch to prod [[ $HOSTNAME == "lb2.example.net.in" ]] && BASEDIR="/etc/example/nginx/lb2" [[ $HOSTNAME == "lb2.example.net.in" ]] && BASEDIR="/etc/example/nginx/lb1" _profile="$BASEDIR/redhat.conf" _etc_files="$BASEDIR/redhat.etc.files.conf" _etc_dirs="$BASEDIR/redhat.etc.dirs.conf" _hooks="$BASEDIR/hooks.sh" usage(){ cat<
反向打印文件
没有 cat 不能以相反的顺序打印,但是cat 命令可以连接并反向打印文件:
tac fileName cat fileName | tac tac <<"$myFileName"
请参阅“如何在 Bash 脚本中使用此处的文档将数据写入文件”以了解更多信息。
cat 命令选项
CLI 选项 | 意义 |
---|---|
-A | 相当于 -vET。 |
-b | 非空输出行的数量。 |
-e | 相当于 -vE。 |
-E | 在每行末尾显示 $。 |
-n | 对所有输出行进行编号。 |
-s | 抑制重复的空输出行。 |
-t | 相当于 -vT。 |
-T | 将 TAB 字符显示为 ^I。 |
-v | 显示非打印,即使用 ^ 和 M- 符号,LFD 和 TAB 除外。 |
--help | 显示此帮助并退出。 |
--version | 输出版本信息并退出。 |
相关媒体
本教程还提供简短视频格式:
总结
您了解了 cat 命令及其用法和语法。通过键入 man 命令查看 cat 命令手册页:
$ man cat
$ cat --help