Linux学习笔记

2022-10-27 14:34:12 浏览数 (2)

cat命令

cat(concatenate)命令用于连接文件并打印到标准输出设备上。

语法格式

代码语言:javascript复制
$ cat [-AbeEnstTuv] [--help] [--version] filename

初级命令

  • 查看命令
代码语言:javascript复制
$ 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
  • 创建文件
代码语言:javascript复制
$ cat >filename //创建一个新文件
//输入文本

ctrl D结束输入。

  • 与more和less参数一起使用

如果文件中有大量内容无法输出在终端中,并且屏幕快速滚动,可以通过cat命令使用moreless的参数。

代码语言:javascript复制
$ cat filename | more
$ cat filename | less
  • 一次显示多个文件

;分隔每个文件。

代码语言:javascript复制
$ 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_1filename_2filename_3的内容重定向到新创建的filename_4文件中。

代码语言:javascript复制
$ cat filename_1 filename_2 filename_3 > filename_4 
  • 对单个文件中多个文件内容进行排序

创建一个文件filename_4,并将cat命令的输出通过管道传递到进行排序,结果将重定向到新创建的文件中。

代码语言:javascript复制
$ cat  filename_1 filename_2 filename_3 | sort > filename_4

strings命令

strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。

语法格式

代码语言:javascript复制
$ strings [参数]

常用参数

-a

扫描整个文件

-f

在显示字符串前先显示文件名

-t

输出字符的位置,基于八进制,十进制或者十六进制

实例

  • 列出filename中所有的ASCII文本:
代码语言:javascript复制
$ strings filename
  • 查找filename中包含 string的字符串,不区分大小写:
代码语言:javascript复制
$ strings filename | grep -i string
  • 在显示字符串前先显示文件名:
代码语言:javascript复制
$ strings -f filename | grep string
  • 输出字符的位置:
代码语言:javascript复制
$ 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键两次,如下:

代码语言:javascript复制
$ca<TAB><TAB>
calibrate_ppa	cancel	case	cautious-launcher
## 略

通配符

除此之外,shell有一套被称作通配符的专用符号,它们是*?[]

*用于匹配文件名中任意长度的字符串。例如列出目录中所有的python文件,命令如下:

代码语言:javascript复制
$ ls *.py
main.py		helloworld.py

?用于匹配一个字符串,例如:

代码语言:javascript复制
$ ls filename?
filename1	filename2	filename3	filenam4

[]用于匹配所有出现在方括号内的字符,例如列出以text开头,以1或者A结束的文件名:

代码语言:javascript复制
$ ls text[1A]
text1	textA

也可以使用-来指定一个字符集范围,被包含在上下界的字符都会被匹配,例如:

代码语言:javascript复制
$ ls text[1-3]
text1	text2	text3

也可以使用字母范围,会与ASCII匹配:

代码语言:javascript复制
$ ls text[A-C]
textA	textB	textC

查找文件内容

在文件中寻找某些信息,可以使用grep命令。

grep含有两个参数,第一个参数是被搜索的关键词,第二个参数是所搜索的文件。

代码语言:javascript复制
$ 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能够迅速在指定范围内查找到文件,基本语法如下:

代码语言:javascript复制
$ find [option] [path...] [expression]

例如,在user/bin目录中查找text

代码语言:javascript复制
$ find /user/bin/ -name text -print

find命令需要一个路径名作为查找范围,如果指定/find命令会深入到这个路径的每一个子目录寻找。

-name指定了文件名,也可以使用通配符来指定文件名,例如下面的命令将列出用户主目录下所有的python文件:

代码语言:javascript复制
$ find ~/ -name *.py -print

-print表示将结果标准输出到屏幕,打印出文件的绝对路径。

find命令还可以指定文件的类型,可以用-type来定位特殊文件类型,例如在/etc/目录中寻找名叫text.d的目录:

代码语言:javascript复制
$ 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命令更快速定位文件:

代码语言:javascript复制
$ locate filename.doc

locate快速完成搜素的原因是它并没有进入子目录搜索,它通过检索文件名数据库来确定文件的位置,locate自动建立整个文件名数据库。如果需要更新文件名数据库,可以使用updatedb命令。

whereis命令

whereis命令主要用于查找程序文件,并提供该文件的可执行文件、源代码文件和使用手册页存放的位置。

代码语言:javascript复制
$ 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选项只查找二进制可执行文件:

代码语言:javascript复制
$ where -b find
find: /usr/bin/find

获取命令简介

whatis命令

whatis命令从某个程序的使用手册中抽出一行简单的介绍文字,帮助用户了解这个程序的大致用途:

代码语言:javascript复制
$ whatis find
find (1)             - search for files in a directory hierarchy

apropos命令

wahtis相反,apropos命令可以根据使用手册反查到某个命令,例如:

代码语言:javascript复制
$ 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一次创建一个或者多个目录:

代码语言:javascript复制
$ mkdir document_1 document_2

-p选项用于完整的创建一个子目录结构,如下命令,首先创建tempx目录,然后创建document目录:

代码语言:javascript复制
$ mkdir ~/tempx/document

touch可以创建一个空文件:

代码语言:javascript复制
$ touch hello

touch命令还可以更新一个文件的建立日期和时间:

代码语言:javascript复制
$ 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

移动、复制和删除

0 人点赞