cat
命令
cat
(concatenate)命令用于连接文件并打印到标准输出设备上。
语法格式
代码语言:javascript复制$ cat [-AbeEnstTuv] [--help] [--version] filename
初级命令
- 查看命令
$ cat filename //显示文件内容
$ cat filename_1 filename_2 //显示多个文件内容
$ cat -n filename
$ cat --number filename //从一开始对所有输出的行数编号
$ cat -b filename
$ cat --number-noneblank filename //和-n类似,但是对于空白行不编号
$ cat -s filename
$ cat --squeeze-blank filename //遇到连续两行以上的空白行,就代换为一行的空白行
$ cat -v filename
$ cat --show-nonprinting filename //使用^和M-符号,LFD和TAB除外
$ cat -E filename
$ cat --show-ends filename //在每行结束处显示$
$ cat -T filename
$ cat --show-tabs filename //将TAB字符显示为^I
$ cat -A filename
$ cat --show-all filename //等价于-vET
$ cat -e filename //等价于-vE
$ cat -t filename //等价于-vT
- 创建文件
$ cat >filename //创建一个新文件
//输入文本
ctrl D结束输入。
- 与more和less参数一起使用
如果文件中有大量内容无法输出在终端中,并且屏幕快速滚动,可以通过cat
命令使用more
和less
的参数。
$ cat filename | more
$ cat filename | less
- 一次显示多个文件
用;
分隔每个文件。
$ cat filename_1; cat filename_2; cat filename_3
- 输出与重定向运算符一起使用
将文件标准输出重定向到新文件,filename_2的现有内容将被filename_1的内容覆盖。
代码语言:javascript复制$ cat filename_1 > filename_2
- 使用重定向运算符附加标准输出
filename_1的内容将会附加在filename_2文件的末尾。
代码语言:javascript复制$ cat filename_1 >> filename_2
- 重定向单个文件中包含的多个文件
将filename_1、filename_2、filename_3的内容重定向到新创建的filename_4文件中。
代码语言:javascript复制$ cat filename_1 filename_2 filename_3 > filename_4
- 对单个文件中多个文件内容进行排序
创建一个文件filename_4,并将cat
命令的输出通过管道传递到进行排序,结果将重定向到新创建的文件中。
$ cat filename_1 filename_2 filename_3 | sort > filename_4
strings
命令
strings
命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings
命令对识别随机对象文件很有用。
语法格式
代码语言:javascript复制$ strings [参数]
常用参数
-a | 扫描整个文件 |
---|---|
-f | 在显示字符串前先显示文件名 |
-t | 输出字符的位置,基于八进制,十进制或者十六进制 |
实例
- 列出filename中所有的ASCII文本:
$ strings filename
- 查找filename中包含 string的字符串,不区分大小写:
$ strings filename | grep -i string
- 在显示字符串前先显示文件名:
$ strings -f filename | grep string
- 输出字符的位置:
$ strings -t filename | grep string
命令行补全和通配符
命令行补全
代码语言:javascript复制$ cat fil<TAB>
输入文件名前面几个字符时,按下TAB键,shell会自动将其补全为:
代码语言:javascript复制$ cat filename
如果以已经键入的字符开头的文件不止一个,可以连续按下TAB键两次,shell会以列表的形式给出所有以键入字符开头的文件:
代码语言:javascript复制$ cat fil<TAB><TAB>
filename filename_1 filename_2
这个方式也适用于补全Linux
命令,例如输入ca
然后按下TAB键两次,如下:
$ca<TAB><TAB>
calibrate_ppa cancel case cautious-launcher
## 略
通配符
除此之外,shell有一套被称作通配符的专用符号,它们是*
、?
、[]
。
*
用于匹配文件名中任意长度的字符串。例如列出目录中所有的python
文件,命令如下:
$ ls *.py
main.py helloworld.py
?
用于匹配一个字符串,例如:
$ ls filename?
filename1 filename2 filename3 filenam4
[]
用于匹配所有出现在方括号内的字符,例如列出以text开头,以1或者A结束的文件名:
$ ls text[1A]
text1 textA
也可以使用-
来指定一个字符集范围,被包含在上下界的字符都会被匹配,例如:
$ ls text[1-3]
text1 text2 text3
也可以使用字母范围,会与ASCII
匹配:
$ ls text[A-C]
textA textB textC
查找文件内容
在文件中寻找某些信息,可以使用grep
命令。
grep
含有两个参数,第一个参数是被搜索的关键词,第二个参数是所搜索的文件。
$ grep [options] pattern [file...]
例如,在filename文件中寻找包含ex的行就可以使用下面的命令:
代码语言:javascript复制$ grep ex filename
text
同时可以指定多个文件进行搜索,如下:
代码语言:javascript复制$ grep ex filename filename_1
filename:text
filename_1:text
如果需要查找包含空格的关键词,必须加单引号以把空格包含进去:
代码语言:javascript复制$ grep 'struct list' stack.h
struct list {
struct list *next;
struct list *top;
typedef struct list list;
grep
通过正则表达式(basic regular expression)搜索。
查找文件
find
命令
find
能够迅速在指定范围内查找到文件,基本语法如下:
$ find [option] [path...] [expression]
例如,在user/bin
目录中查找text
:
$ find /user/bin/ -name text -print
find
命令需要一个路径名作为查找范围,如果指定/,find
命令会深入到这个路径的每一个子目录寻找。
-name
指定了文件名,也可以使用通配符来指定文件名,例如下面的命令将列出用户主目录下所有的python文件:
$ find ~/ -name *.py -print
-print
表示将结果标准输出到屏幕,打印出文件的绝对路径。
find
命令还可以指定文件的类型,可以用-type
来定位特殊文件类型,例如在/etc/
目录中寻找名叫text.d
的目录:
$ find /etc/ -name text.d -type d -print
/etc/text.d
-type
可以使用的参数
参数 | 含义 |
---|---|
b | 块设备文件 |
c | 字符设备文件 |
d | 目录文件 |
f | 普通文件 |
p | 命名管道 |
l | 符号链接 |
s | 本地域套接口 |
find
命令还可以通过指定时间来查找文件。-atime n
表示最后一次使用在n天前的文件,-mtime n
表示最后一次修改在n天前的文件。
也可以使用 n
表示大于n天,-n
表示小于n天。
下面表示寻找最近一百天及以上没有使用过的文件:
代码语言:javascript复制$ find /user/bin/ -type f -atime 100 -print
locate
命令
当用户完全不清楚自己的文件放在哪里的时候,可以使用locate
命令更快速定位文件:
$ locate filename.doc
locate
快速完成搜素的原因是它并没有进入子目录搜索,它通过检索文件名数据库来确定文件的位置,locate
自动建立整个文件名数据库。如果需要更新文件名数据库,可以使用updatedb
命令。
whereis
命令
whereis
命令主要用于查找程序文件,并提供该文件的可执行文件、源代码文件和使用手册页存放的位置。
$ whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz /usr/share/info/find.info.gz /usr/share/info/find.info-1.gz /usr/share/info/find.info-2.gz
可以使用-b
选项只查找二进制可执行文件:
$ where -b find
find: /usr/bin/find
获取命令简介
whatis
命令
whatis
命令从某个程序的使用手册中抽出一行简单的介绍文字,帮助用户了解这个程序的大致用途:
$ whatis find
find (1) - search for files in a directory hierarchy
apropos
命令
与wahtis
相反,apropos
命令可以根据使用手册反查到某个命令,例如:
$ apropos search
apropos (1) - search the manual page names and descriptions
apt-patterns (7) - Syntax and semantics of apt search patterns
badblocks (8) - search a device for bad blocks
bsearch (3) - binary search of a sorted array
bzegrep (1) - search possibly bzip2 compressed files for a regular e...
bzfgrep (1) - search possibly bzip2 compressed files for a regular e...
bzgrep (1) - search possibly bzip2 compressed files for a regular e...
Class::DBI::AbstractSearch (3pm) - Abstract Class::DBI's SQL with SQL::Abstra...
Class::DBI::Iterator (3pm) - Iterate over Class::DBI search results
Class::DBI::Search::Basic (3pm) - Simple Class::DBI search
DBD::SQLite::Fulltext_search (3pm) - Using fulltext searches with DBD::SQLite
find (1) - search for files in a directory hierarchy
git-bisect (1) - Use binary search to find the commit that introduced a...
hsearch (3) - hash table management
hsearch_r (3) - hash table management
lfind (3) - linear search of an array
lsearch (3) - linear search of an array
lzegrep (1) - search compressed files for a regular expression
lzfgrep (1) - search compressed files for a regular expression
lzgrep (1) - search compressed files for a regular expression
manpath (1) - determine search path for manual pages
res_nsearch (3) - resolver routines
res_search (3) - resolver routines
strpbrk (3) - search a string for any of a set of bytes
tdelete (3) - manage a binary search tree
tdestroy (3) - manage a binary search tree
tfind (3) - manage a binary search tree
tracker3-search (1) - Search for content by type or across all types
tsearch (3) - manage a binary search tree
twalk (3) - manage a binary search tree
twalk_r (3) - manage a binary search tree
wcschr (3) - search a wide character in a wide-character string
wcscspn (3) - search a wide-character string for any of a set of wid...
wcspbrk (3) - search a wide-character string for any of a set of wid...
wcsrchr (3) - search a wide character in a wide-character string
wmemchr (3) - search a wide character in a wide-character array
xzegrep (1) - search compressed files for a regular expression
xzfgrep (1) - search compressed files for a regular expression
xzgrep (1) - search compressed files for a regular expression
zegrep (1) - search possibly compressed files for a regular expression
zfgrep (1) - search possibly compressed files for a regular expression
zgrep (1) - search possibly compressed files for a regular expression
zipgrep (1) - search files in a ZIP archive for lines matching a pat...
文件目录的管理
创建
可以通过mkdir
一次创建一个或者多个目录:
$ mkdir document_1 document_2
-p
选项用于完整的创建一个子目录结构,如下命令,首先创建tempx
目录,然后创建document
目录:
$ mkdir ~/tempx/document
touch
可以创建一个空文件:
$ touch hello
touch
命令还可以更新一个文件的建立日期和时间:
$ ls -l test.py
-rwxrwxr-x 1 csuk1 csuk1 809 8月 8 04:42 test.py
$ touch test.py
$ ls -l test.py
-rwxrwxr-x 1 csuk1 csuk1 809 8月 10 04:52 test.py