前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux学习笔记

Linux学习笔记

作者头像
Andromeda
发布2022-10-27 14:34:12
5640
发布2022-10-27 14:34:12
举报
文章被收录于专栏:Andromeda的专栏

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

移动、复制和删除

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cat命令
    • 语法格式
      • 初级命令
      • strings命令
        • 语法格式
          • 常用参数
        • 实例
        • 命令行补全和通配符
          • 命令行补全
            • 通配符
            • 查找文件内容
            • 查找文件
              • find命令
                • locate命令
                  • whereis命令
                  • 获取命令简介
                    • whatis命令
                      • apropos命令
                      • 文件目录的管理
                        • 创建
                          • 移动、复制和删除
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档