【Linux】命令行下的增删查改之“查看”

致谢:Linux常用命令大全(手册) -- 真正好用的Linux命令在线查询网站 提供的命令查询

头部内容获取(head)

head命令的功能是显示文件开头的内容,默认值为前10行。

指令参数:

|----|--------------|
| -n | 定义显示行数 |
| -c | 指定显示头部内容的字符数 |
| -v | 总是显示文件名的头信息 |
| -q | 不显示文件名的头信息 |

实例:

head一个25行内容的文本文件可以看到默认显示头10行。

bash 复制代码
[root@machine ~]$ head filename

指定显示一个文本文件默认十行,且显示其文件名在上方。

bash 复制代码
[root@machine ~]$ head -v filename

指定显示文件的前20个字符:

bash 复制代码
head -c 20 filename

尾部内容获取(tail)

tail 命令是用于查看文件末尾内容的强大工具。默认情况下,它会显示指定文件的最后 10 行。如果同时指定多个文件,tail 会在每个文件内容之前添加文件名,方便用户区分输出。

指令参数:

|-----------|--------------------------------------------|
| -c | 输出文件尾部的N(N为整数)个字节内容 |
| -f | 持续显示文件最新追加的内容 |
| -F | 与选项"-follow=name"和"--retry"连用时功能相同 |
| -n | 输出文件的尾部N(N位数字)行内容 |
| --retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。 |
| --pid= | 与"-f"选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
| --help | 显示指令的帮助信息 |
| --version | 显示指令的版本信息 |

实例:

默认显示某个文件尾部的后10行内容:

bash 复制代码
tail initial test

指定显示某个文件尾部的后5行内容:

bash 复制代码
tail -n 5 filename

指定显示某个文件尾部的后15个字节:

bash 复制代码
tail -c 30 initial filename
  • 持续刷新显示某个文件尾部的后10行内容:
bash 复制代码
tail -f /path1/path2/filename

下面是一个简单的 C 程序,它会不断地向当前路径下的 test 文件写入带行数的内容。你可以在一个终端中运行这个程序,并在另一个终端中使用

bash 复制代码
tail -f test 

命令实时监视文件的变化。

C 程序代码:

cpp 复制代码
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
int main() 
{ 
    FILE *file = fopen("test", "a"); // 以追加模式打开文件 
    if (file == NULL) 
    { 
        perror("Error opening file"); 
        return 1; 
    } 
    int lineNum = 1; 
    while (1)
    {
         // 写入带有行号的内容 
        fprintf(file, "This is line %d\n", lineNum); 
        fflush(file); // 确保内容被写入文件 
        lineNum++; // 暂停一段时间以模拟写入间隔 
        sleep(1); // 每秒写入一行 
    } 
    fclose(file); 
    return 0; 
}

使用方式:

  1. 编译代码,将上述代码保存为 writer.c,然后在终端中运行以下命令来编译:
bash 复制代码
gcc -o writer writer.c
  1. 运行程序在一个终端中运行编译好的程序:
bash 复制代码
./writer
  1. 监视文件

在另一个终端中使用 tail -f 命令监视文件 test 的变化:

bash 复制代码
tail -f test

效果:

  • 当你运行 ./writer 后,程序将每秒向 test 文件追加一行内容,内容格式为 "This is line X",其中 X 是行号。
  • 在另一个终端中使用 tail -f test 命令时,你会看到文件的变化,实时输出新添加的行。

通过这种方式,你可以同时观察 C 程序向文件写入的过程以及使用 tail -f 实时监视文件内容。

可以使用管道将 tail -f 的输出传递给 grep,筛选出特定的内容:

bash 复制代码
tail -f /var/log/syslog | grep "error"

中间部分内容获取:

bash 复制代码
cat tmp.txt 
tail - 10.txt 

思路是取到最大后截断尾部

使用文件处理指令对数据进行级联操作,这就叫做流水线处理

bash 复制代码
cat .txt | head -610 | tail-10|tac 
tail-50 tep.txt | less

在Linux操作系统中,管道(|)是一个特殊的符号,用于连接两个或多个命令,将一个命令的输出作为另一个命令的输入。通过使用管道,可以将多个命令串联起来,实现更复杂的操作。例如,可以使用管道将一个命令的输出传递给另一个命令进行处理,或者将多个命令组合在一起以实现更复杂的功能。管道是Linux中非常强大和常用的功能之一,可以提高命令行操作的效率和灵活性。

以下是一些Linux中经典的流水线处理示例:

使用grep和wc命令统计文件中包含特定关键词的行数:

bash 复制代码
cat file.txt | grep "keyword" | wc -l

使用ps和grep命令查找特定进程:

bash 复制代码
ps aux | grep "process_name"

使用ls和sort命令列出目录中的文件并按文件大小排序:

bash 复制代码
ls -l | sort -k 5 -n

使用find和xargs命令查找特定类型的文件并执行操作:

bash 复制代码
find . -name "*.txt" | xargs rm

这些示例演示了如何使用管道将多个命令连接在一起,实现复杂的数据处理和操作。通过灵活使用流水线处理,可以大大提高在Linux系统上的命令行操作效率和灵活性。

统计行数(WC)

wc 命令是"Word Count"的缩写,用于统计文件的字节数、单词数和行数,并将结果输出到终端。使用 wc 可以迅速获取文本的基本信息.

bash 复制代码
wc [参数] 文件

指令参数:

|-----------|----------|
| -w | 统计单词数 |
| -c | 统计字节数 |
| -l | 统计行数 |
| -m | 统计字符数 |
| -L | 显示最长行的长度 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |

实例:

统计指定文件的单词数量:

bash 复制代码
wc -w filename

统计指定文件的字节数量::

bash 复制代码
wc -c filename

集合:显示行数,字符数,字节数,单词数

bash 复制代码
wc -l -m -c -w test

去重(uniq)

uniq 命令是"unique"的缩写,用于去除文件中的重复内容行。它只会删除相邻的重复行 ,因此在处理非相邻重复行时,需要先使用 sort 命令进行排序。通过这种方式,可以确保留下来的内容是都是唯一的。

bash 复制代码
uniq [参数] 文件

参数:

|----|-----------------|
| -c | 打印每行在文本中重复出现的次数 |
| -d | 每个重复纪录只出现一次 |
| -u | 只显示没有重复的纪录 |

实例:

对指定文件显示时执行去重操作:

只显示未重复文件:

bash 复制代码
uniq -u test

仅显示指定文件中存在一摸一样内容行的信息:

bash 复制代码
uniq -d Filename

排序(sort)

sort 命令的功能是对文件内容进行排序。它可以按照字母顺序数值大小特定列 进行排序,广泛应用于数据整理和分析。通过使用 sort,用户能够轻松地将文本文件中的数据按字母或数值顺序排列,便于查阅和管理。当与其他命令如之前提到的 uniq 结合使用时,它可以有效地去除重复行,确保数据的唯一性和整洁性。

bash 复制代码
sort [参数] 文件

参数:

|----|----------------------------|
| -b | 忽略每行前面开始出的空格字符 |
| -c | 检查文件是否已经按照顺序排序 |
| -d | 除字母、数字及空格字符外,忽略其他字符 |
| -f | 将小写字母视为大写字母 |
| -i | 除040至176之间的ASCII字符外,忽略其他字符 |
| -m | 将几个排序号的文件进行合并 |
| -M | 将前面3个字母依照月份的缩写进行排序 |
| -n | 依照数值的大小排序 |
| -o | 将排序后的结果存入制定的文件 |
| -r | 以相反的顺序来排序 |
| -t | 指定排序时所用的栏位分隔字符 |
| -k | 指定需要排序的栏位 |

实例:

对指定的文件内容按照字母顺序进行排序:

bash 复制代码
cat Filename sort Filename

显示日历(cal)

cal命令的名字来自英语单词"Calendar"。该命令用来显示当前月份的日历,或者指定日期的公历.如只有一个参数,则表示年份,如有两个参数,则表示月份和年份 。

bash 复制代码
cal [参数] [月份] [年份]

参数:

|----|-----------------|
| -l | 单月分输出日历 |
| -3 | 显示最近三个月的日历 |
| -s | 将星期天作为月的第一天 |
| -m | 将星期一作为月的第一天 |
| -j | 显示在当年中的第几天(儒略日) |
| -y | 显示当年的日历 |

实例:

显示当前月份的日历:

bash 复制代码
cal

显示近期三个月的日历(当前月,上一个月和下一个月):

bash 复制代码
cal -3

显示指定年月的日历,如显示1998年2月的日历:

bash 复制代码
cal 2 1998

显示该日期是当年中的第几天:

终端显示内容(cat)

cat 命令是"concatenate"的缩写,主要用于查看文件内容。它适合用于显示内容较少纯文本文件 。面对内容较多的文件时,cat 命令可能会导致屏幕快速滚动,用户难以阅读,因此对于大文件,使用 ++more++ 命令会更为合适。

参数:

|-----------|-------------------------------|
| -n | 显示行数(空行也编号) |
| -s | 显示行数(多个空行算一个编号) |
| -b | 显示行数(空行不编号) |
| -E | 每行结束处显示$符号 |
| -T | 将TAB字符显示为 ^I符号 |
| -v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
| -e | 等价于"-vE"组合 |
| -t | 等价于"-vT"组合 |
| -A | 等价于 -vET组合 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |

实例:

查看文件内容:

bash 复制代码
cat Filename

查看某个文件的内容,并显示行号:

bash 复制代码
cat -n Filename

搭配空设备文件和输出重定向操作符,将某个文件内容清空:

bash 复制代码
cat /dev/null > Filename cat Filename

持续写入文件内容,直到碰到EOF符后才会结束并保存:

bash 复制代码
cat > Filename << EOF

输出字符串或提取后的变量值(echo)

echo 命令用于在终端输出指定字符串变量 的值。输出内容通过管道符 传递给后续命令进行二次处理,或通过输出重定向符 将信息写入文件中,其中管道符就是相当于一个文件看做一个基础汽车底座,然后每经过一个指令就会组装一个零件,然后到最后结束的时候就是我们想要的车的样子;输出重定向简单来说就是本来我们想要的内容会在屏幕上显示,但是我们把输出的内容转到别的文件里去了,就好比对着草坪浇水的喷头调转方向去洗车了。在使用echo提取变量值时,需要在变量名称前加上 $ 符号,通常++变量名称采用大写形式++。

bash 复制代码
echo [参数] 字符串/变量

参数:

|------------|-------------------|
| -n | 不输出结尾的换行符 |
| -e "\a" | 发出警告音 |
| -e "\b" | 删除前面的一个字符 |
| -e "\c" | 结尾不加换行符 |
| -e "\f" | 换行,光标扔停留在原来的坐标位置 |
| -e "\n" | 换行,光标移至行首 |
| -e "\r" | 光标移至行首,但不换行 |
| -E | 禁止反斜杠转移,与-e参数功能相反 |
| ---version | 查看版本信息 |
| --help | 查看帮助信息 |

实例:

输出指定字符串到终端设备界面(默认为电脑屏幕):

bash 复制代码
echo hello echo

输出某个变量值内容

搭配输出重定向符一起使用,将字符串内容直接写入文件中:

bash 复制代码
echo "Hello echo" > Filename

搭配反引号执行命令,并将执行结果输出:

bash 复制代码
echo `uptime`

使用所有参数,猜猜结果:

bash 复制代码
echo -e "Hello \a\an\fecho\n123\r321\b\c"

致谢:Linux常用命令大全(手册) -- 真正好用的Linux命令在线查询网站 提供的命令查询

相关推荐
Dlwyz10 分钟前
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
数据库·redis·缓存
天天扭码15 分钟前
五天SpringCloud计划——DAY1之mybatis-plus的使用
java·spring cloud·mybatis
程序猿小柒21 分钟前
leetcode hot100【LeetCode 4.寻找两个正序数组的中位数】java实现
java·算法·leetcode
编程修仙26 分钟前
Collections工具类
linux·windows·python
芝麻团坚果42 分钟前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
写点什么啦1 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw1 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
如意机反光镜裸1 小时前
如何快速将Excel数据导入到SQL Server数据库
数据库
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
DC_BLOG1 小时前
Linux-Nginx虚拟主机
linux·运维·nginx