# 一.基础命令

# 1.more 可翻页查看

more /etc/man.config
--More--(31%) <== 重点在这一行,光标也会在这里等待你的命令
1
2
  • 空格键(Space):代表向下翻一页。
  • Enter:代表向下滚动一行。
  • / 字符串:代表在当前显示的内容中,向下查找 “字符串” 这个关键字。
  • :f:立刻显示出文件名与当前的行号。
  • q:代表立即退出,不予显示。
  • b 或 [ctrl]-b:往回翻,不过该操作只对文件有用。

有时候我们需要搜索should这个字符串

[wenjie@localhost ~]$ more /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
/should <== 输入了 / 之后,光标会在最下面一行等待
1
2
3
4
5
6
7
8

你输入了**/之后,光标会在最后一行等待,并且等待你的输入,你输入了字符串后并且按下[Enter]之后,就开始向下查找。如果想重复查找该字符串,可以直接按下n**即可。

# 2.less 前后翻页

#类似于 ‘more’ 命令,但是它允许在文件中和正向操作一样的反向操作
less file1
1
2

more: 顾名思义显示更多 less: 由于 more 不能后退,就取 more 的反义词 less 加上后退功能 所以 Linux 里流传着这样一句话:"less is more".

总结下 more 和 less 的区别:

  1. less 可以按键盘上下方向键显示上下内容,more 不能通过上下方向键控制显示
  2. less 不必读整个文件,加载速度会比 more 更快
  3. less 退出后 shell 不会留下刚显示的内容,而 more 退出后会在 shell 上留下刚显示的内容
  4. 由于 more 不能后退

# 3.生产实用

#关键词上下100行
cat 2024-01-09.log |grep -C 100 'No value present'
1
2

# 二.进阶命令

# 1.日志太多

可以先打出空行,再执行页面点击,可以看到最新的日志信息

# 2.反向查找

#从最后一行开始反向查看一个文件的内容
tac file1
1
2

# 3.生产查询日志

#查看filename中含有abc所在行后4行内容 -A after
cat filename | grep abc -A4

#查看filename中含有ab所在行前4行内容  -B before
cat filename | grep abc -B4
1
2
3
4
5

# 三.head 和 tail

# 1.显示前 i 行

#显示开头i行name.txt的内容
head -n i name.txt
1
2

# 2.从 i 行开始

#i是起始行号,从i行开始,一直到文件末尾
head -n -i name.txt
1
2

# 3.区别说明

head 是一个用于显示文件开头内容的命令。在这里,-n 选项用于指定要显示的行数。i 代表一个整数,表示要显示的行数。

  • head -n i name.txt 会显示文件 name.txt 的前 i 行内容。

  • head -n -i name.txt 也会显示文件 name.txt 的内容,但这里的 i 是起始行号,而不是要显示的总行数。它会从文件的第 i 行开始显示,一直到文件的末尾。

所以,两者的区别在于:

  1. head -n i name.txt 显示的是文件的前 i 行。

  2. head -n -i name.txt 显示的是从文件的第 i 行开始到文件的末尾的所有内容。

# 4.tail 尾部

#显示最后 i 行的内容
tail -n i name.txt
1
2

# 5.从 i 行开始

#从I开始显示到结束的内容
tail -n +i name.txt
1
2

# 6.实时查看

#实时查看被添加到一个文件中的内容
tail -f name.txt
1
2

# 7.实时查看日志

#实时查看最后1000行
tail -n 1000 -f filename
tail -fn 1000 name.txt
tail -1000f name.txt
1
2
3
4

# 8.等待新建

类似于-f,但是文件丢失以后会等待该文件新建

tail -F name.txt
1

# 四.wc 命令

# 1.统计行数

#统计文本的行数,字数,字符数
wc 1.bxt
1
2

# 2.行数

#文本行数,只计算行数
wc -l 1.txt
1
2

# 3.文本数

#文本字数,只计算字数
wc -w 1.txt
1
2

# 4.字符数

#字符数
wc -m 1.txt
1
2

# 5.字节数

#只计算字节数
wc -c 1.txt
1
2

# 6.统计过滤后行数

#统计行数
ps -ef | grep node | wc -l
1
2

# 五.cat 命令

# 1.汇总

image-20230915122924974

# 2.直接查询

#查看文件内容
cat name.txt
1
2

# 3.cat -n

显示行号

#查看最后10行
cat -n xxx.log | grep tail -n 10

#显示每一行的行号
cat -n name.txt
1
2
3
4
5

# 4.cat -b

显示非空行的行号

cat -b xxx.log
1

# 5.cat -s

合并空行

#用于压缩多个连续的空白行为一个空白行
cat -s name.txt
1
2

# 6.cat -E

#在每一行的末尾显示一个 $ 符号
cat -E name.txt
1
2

# 7.cat -T

#将制表符(Tab)字符显示为 ^I
cat -T name.txt
1
2

# 8.cat -A

#相当于同时使用 -nET 参数,显示行号、行尾 $ 符号以及制表符。
cat -A name.txt
1
2

# 六.重定向

把本来要显示在终端的命令结果,输送到别的地方(到文件中或者作为其他命令的输入)。

# 1.输出重定向 >

> 表示重定向到新的文件,用标准输出覆盖原有文件的内容, cut -d , -f 1 notes.csv > name.csv ,它表示通过逗号剪切 notes.csv 文件(剪切完有 3 个部分)获取第一个部分,重定向到 name.csv 文件。

我们来看一个具体示例,学习它的使用,假设我们有一个文件 notes.csv ,文件内容如下:

Mark1, 951 / 100, 很不错1;
Mark2, 952 / 100, 很不错2;
Mark3, 953 / 100, 很不错3;
Mark4, 954 / 100, 很不错4;
Mark5, 955 / 100, 很不错5;
Mark6, 956 / 100, 很不错6;
1
2
3
4
5
6

执行命令: cut -d , -f 1 notes.csv > name.csv 最后输出如下内容:

Mark1;
Mark2;
Mark3;
Mark4;
Mark5;
Mark6;
1
2
3
4
5
6
#查询111中的内容输出到222
cat 111.txt > 222.txt
1
2

【注意】使用 > 要注意,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖。因此执行这个操作要非常小心,以免覆盖其它重要文件。

# 2.输出重定向 >>

表示重定向到文件末尾,因此它不会像 > 命令这么危险,它是追加到文件的末尾(当然如果文件不存在,也会被创建),将标准输出追加到文件后面。

再次执行 cut -d , -f 1 notes.csv >> name.csv ,则会把名字追加到 name.csv 里面。

Mark1;
Mark2;
Mark3;
Mark4;
Mark5;
Mark6;
Mark1;
Mark2;
Mark3;
Mark4;
Mark5;
Mark6;
1
2
3
4
5
6
7
8
9
10
11
12

# 3.输出重定向 2>

用标准错误输出覆盖原有文件内容

cat not_exist_file.csv > res.txt 2> errors.log
1
  • 当我们 cat 一个文件时,会把文件内容打印到屏幕上,这个是标准输出;
  • 当使用了 > res.txt 时,则不会打印到屏幕,会把标准输出写入文件 res.txt 文件中;
  • 2> errors.log 当发生错误时会写入 errors.log 文件中。

# 4.输出重定向 2>>

标准错误输出(追加到文件末尾)同 >> 相似。

# 5.输出重定向 2>&1

标准输出和标准错误输出都重定向到一个地方,用标准输出和标准错误输出覆盖原文件内容

#覆盖输出
cat not_exist_file.csv > res.txt 2>&1


1
2
3
4

# 6.追加输出

将标准输出和标准错误输出追加到原文件后面

#追加输出
cat not_exist_file.csv >> res.txt 2>&1
1
2

# 7.输入重定向

#将文件内容作为标准输入,会输出111.text的内容
cat < 111.text
1
2

# 8.结束输入

  • 将 2 个结束标识符之间的内容作为标准输入
  • 结束标识符由用户自定义,常用 EOF(end offile)
  • 这个经常用,覆盖脚本
# <<[结束标识符],覆盖
cat << EOF > 111.txt
111
222
333
EOF

# <<[结束标识符],不覆盖,追加,服务器上可以经常使用
cat << EOF > 111.txt
111
222
333
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13

# 七.tee 命令

# 1. 基本用法

在 Linux 系统中,tee 命令是一个非常实用的工具,它允许用户将数据同时输出到标准输出(通常是终端)和文件。这在很多情况下都非常有用,比如当你需要查看实时输出的同时,也希望将输出保存到文件中以供后续分析。

tee 命令的基本语法如下:

tee [选项]... [文件]...
1

这里的 [选项] 是可选的,而 [文件] 是你希望将输出写入的文件名。

# 2. 选项说明

  • -a--append:以追加模式写入文件,而不是覆盖现有内容。
  • -i--ignore-interrupts:即使接收到中断信号(如 Ctrl+C),tee 也会继续运行。
  • -p:与 -i 选项相同,忽略中断信号。
  • -s--silent:静默模式,不输出错误或警告信息。
  • --help:显示帮助信息。
  • --version:显示版本信息。

# 3.实时查看和记录日志

在系统管理员的日常工作中,经常需要查看程序的日志输出。使用 tee 命令,可以将日志同时显示在终端上并保存到文件中,方便事后分析。

your_command | tee /path/to/logfile.log
1

# 4.重定向输出到多个文件

有时你可能需要将同一输出同时保存到多个文件中。通过使用管道和 tee,可以轻松实现这一点。

your_command | tee file1.log | tee file2.log
1

注意,这种方式会创建两个进程,如果对性能有要求,可以考虑使用如下方式:

your_command | tee file1.log > file2.log
1

# 5.结合 grep 过滤输出

如果你只想将匹配特定模式的输出保存到文件中,可以结合使用 teegrep

your_command | tee /path/to/logfile.log | grep "pattern"
1

这样,只有包含 "pattern" 的行会被 grep 显示在终端上,而所有输出都会被 tee 保存到文件中。

# 6.结合 awk 处理数据

awk 是一个强大的文本处理工具,可以与 tee 结合使用,对输出数据进行复杂的处理。

your_command | tee /path/to/logfile.log | awk '{print $1}'
1

# 7.实用示例

假设你正在运行一个数据库备份脚本,并希望实时查看进度,同时将输出保存到日志文件中:

./backup_script.sh | tee /var/log/backup.log
1

这样,你就可以在终端上看到备份进度,并且所有的输出都会被保存到 /var/log/backup.log 文件中。

上次更新: 10/29/2024, 10:27:50 AM