【linux学习指南】Linux管理文件与处理数据二(重定向与管道)

请添加图片描述


📝前言

本文将介绍Linux系统中的常用命令:mv、cat、echo、重定向、head和tail,主要用于文件管理和数据处理。重点讲解mv命令和重定向的示例,最后演示如何用head和tail快速提取大型文件中的指定行。

🌠 mv指令(重要):

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命
令,经常用来备份文件或者目录。

语法: mv [选项] 源文件或目录 目标文件或目录
功能:

  1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的
    目录中。
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它
    将所给的源文件或目录重命名为给定的目标文件名。
  3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至
    目标目录中。

功能图示总结:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

常用选项:
-fforce 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

举例:

rm改造成mv
vim ~/.bashrc #修改这个文件
mkdir -p ~/.trash
alias rm=trash
alias ur=undelfile
undelfile() {
 mv -i ~/.trash/\$@ ./
}
trash() {
 mv $@ ~/.trash/
}

🌉cat

语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:

  • b 对非空输出行编号
  • n 对输出的所有行编号
  • s 不输出多行空行

普通的输入cat,在显示器上输入什么,回车就打印什么。要退出这种普通输入模式,你可以按下 Ctrl+D 组合键。这样会告诉 cat 命令你已经完成了输入,它会退出输入模式。
在这里插入图片描述

  1. 合并多个文件内容:

    cat file1.txt file2.txt file3.txt > combined.txt
    

    这将把 file1.txtfile2.txtfile3.txt 的内容合并到 combined.txt 文件中。

  2. 创建新文件:

    cat > new_file.txt
    

-> 输入数据+回车

这将在终端中创建一个新文件 `new_file.txt`,并将输入的内容写入其中。按 `Ctrl+D` 结束输入。
带行号查看文件内容:如果打印显示需要行号,则输入`cat -n new_file.txt`,其他同理。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/466a3373df4f40638ad4d98a405bd3f7.png)
# 🌠less
`tac` 命令与 `cat` 命令类似,但它是以相反的顺序显示文件内容。

基本语法:

```powershell

使用示例:

  1. 查看文件内容,以相反顺序显示:

    tac file.txt

    这将以从下到上的顺序显示 file.txt 文件的内容。

  2. 合并多个文件内容,并以相反顺序显示:

    tac file1.txt file2.txt file3.txt

    这将先显示 file3.txt 的内容,然后是 file2.txt,最后是 file1.txt

  3. 创建新文件:

   tac > new_file.txt
   -> 输入数据+回车

这将创建一个新文件 new_file.txt,并将输入的内容以相反顺序写入其中。按 Ctrl+D 结束输入。

cat 命令相比, tac 命令主要的区别就是它会以相反的顺序显示或写入文件内容。除此之外,它们的用法基本相同。

在这里插入图片描述

🌠linux文件

Linux下一切皆文件。
键盘,显示器—文件来看待---- printf/cout—我们向显示器进行打印----向显示器文件进行写入scanf/cin -±键盘读取数据—从键盘文件中读取数据

在Linux中,"一切皆文件"的理念确实很有趣。拓展阅读了解:

  1. 键盘和显示器作为文件

    • 键盘:在Linux中,键盘输入通常通过特殊的设备文件来处理。例如,/dev/tty/dev/ttyS0(串口设备)、/dev/input/event0(输入事件)等设备文件对应着不同的输入设备。程序可以通过读取这些文件来获取来自键盘的输入数据。
    • 显示器:显示器也是通过设备文件进行操作的。例如,/dev/tty/dev/console文件可以用来向终端显示内容。此外,图形显示器的操作通常涉及到更复杂的图形系统(如X Window系统),但底层的图形设备还是通过设备文件来管理的。
  2. 标准输入输出

    • printf/cout:在C/C++程序中,printfcout用于向标准输出(通常是显示器)写入数据。这实际上是向标准输出设备文件(如/dev/tty)写入数据。操作系统会将这些数据渲染到显示器上。
    • scanf/cin:同样,scanfcin用于从标准输入(通常是键盘)读取数据。程序通过读取标准输入设备文件(如/dev/tty)来获取用户的输入数据。
  3. 文件描述符

    • 在Linux中,标准输入(stdin)、标准输出(stdout)和标准错误(stderr)分别对应文件描述符0、1和2。这些文件描述符指向相应的设备文件,操作这些文件描述符就是在进行设备操作。例如,printf操作的是标准输出的文件描述符1,而scanf操作的是标准输入的文件描述符0。

这个设计使得程序可以用一致的方式处理各种输入和输出设备,不需要特别为每种设备编写代码。无论是与文件、网络还是设备交互,程序员都可以通过类似的接口进行操作。这种设计理念极大地提高了系统的灵活性和可扩展性。

🌉echo 与 >

echo 命令是一个非常常见和基本的 Linux/Unix 命令,它用于在终端或控制台上输出文本或变量的值。

基本语法:

echo [选项] [字符串]

常用选项:

  • -n: 不输出结尾的换行符
  • -e: 启用转义字符解释

使用示例:

  1. 向显示器文件进行写入

    echo "Hello, world!"
    

    输出:
    在这里插入图片描述

  2. 输出变量值:

     NAME="Linux"
     echo "My name is $NAME"
    

    输出:
    在这里插入图片描述

  3. 使用选项:

    echo -n "Enter your name: "
    read name
    echo -e "Hello, $name!\n"
    

    输出:

    Enter your name: Linux
    Hello, Linux!
    
  4. 将输出重定向到文件:

    echo "This is a test." > test.txt
    

    这将把 "This is a test." 写入到 test.txt 文件中。
    在这里插入图片描述

🌠Linux的重定向技术

Linux的重定向技术允许你将输入输出流重新指向文件或其他设备,而不是使用默认的标准输入(stdin)、标准输出(stdout)或标准错误(stderr)。

  1. 输出重定向

将命令的输出发送到文件而不是显示器上。

  • 基本输出重定向
    command > file.txt
    
    这会将 command 的标准输出重定向到 file.txt 文件。如果文件已存在,它会被覆盖。
    在这里插入图片描述
  • 追加输出重定向
    command >> file.txt
    
    这会将 command 的标准输出追加到 file.txt 文件末尾,而不会覆盖原有内容。
    在这里插入图片描述
  1. 输入重定向

将命令的输入从文件读取,而不是从键盘读取。

  • 基本输入重定向
    command < file.txt
    

输入重定向,本来应该默认从键盘文件来,<∶更改成为从指定文件中读取数据

在这里插入图片描述

  1. 错误重定向

将命令的标准错误输出重定向到文件。

  • 标准错误重定向

    command 2> error.txt
    

    这会将 command 的标准错误(文件描述符2)重定向到 error.txt 文件。

  • 追加标准错误重定向

    command 2>> error.txt
    

    这会将 command 的标准错误追加到 error.txt 文件末尾。

  1. 同时重定向标准输出和标准错误
  • 将标准输出和标准错误重定向到同一文件
    command > all_output.txt 2>&1
    
    这会将 command 的标准输出和标准错误都重定向到 all_output.txt 文件。2>&1 的意思是将标准错误(文件描述符2)重定向到标准输出(文件描述符1)。
  1. 管道

管道将一个命令的输出直接传递给另一个命令作为输入。

  • 基本管道用法
    command1 | command2
    
    这会将 command1 的标准输出作为 command2 的标准输入进行处理。例如:
    ls | grep "txt"
    
    这会列出当前目录中的所有文件,然后用 grep 过滤出包含 “txt” 的文件名。

文章下面使用tailhead时有清晰的认识:
在这里插入图片描述

  1. 使用 tee 命令

tee 命令可以将标准输出同时写入文件和终端。

  • 基本用法

    command | tee file.txt
    

    这会将 command 的输出同时写入 file.txt 文件和终端显示器上。

  • 追加用法

    command | tee -a file.txt
    

    这会将 command 的输出追加到 file.txt 文件末尾,同时也输出到终端。

  1. 文件描述符

在Linux中,除了标准输入(0)、标准输出(1)和标准错误(2)之外,你还可以使用其他文件描述符进行重定向。你可以自定义文件描述符进行高级操作。

  • 示例
    exec 3> file.txt
    echo "Hello, World!" >&3
    exec 3>&-
    
    这会将 “Hello, World!” 写入 file.txt,使用了文件描述符3。

🌠准备指令

我们先往文件写点内容,往下举例子用到:

[root@hcss-ecs-ab43 ~]# cnt=1; while [ $cnt -le 10000 ]; do echo "hello $cnt"; let cnt++; done > log.txt
[root@hcss-ecs-ab43 ~]# ll
total 108
-rw-r--r-- 1 root root 108894 Aug 10 15:28 log.txt

这个命令会输出 10000 行 “hello 1”, “hello 2”, … “hello 10000”,并将这些输出重定向保存到 log.txt 文件中。
在这里插入图片描述
分析:

  1. cnt=1 将变量 cnt 初始化为 1。

  2. while [ $cnt -le 10000 ]; do ... done 开始一个 while 循环,只要 $cnt 小于等于 10000,就执行循环体中的命令。

  3. echo "hello $cnt" 在每次循环中输出 “hello” 后跟当前 $cnt 的值。

  4. let cnt++((cnt++)) 递增 cnt 变量的值。这两种写法都可以实现让 cnt 变量自增 1。

  5. > log.txt 将循环过程中输出的所有内容重定向到 log.txt 文件中。

🌉head指令

headtail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾

语法:

 head [参数]... [文件]...  

功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:

-n<行数> 显示的行数

举个例子:

head -5020 log.txt

在这里插入图片描述

在这里插入图片描述

🌉tail指令

tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.

语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
-f 循环读取
-n<行数> 显示行数

举个例子:
如果我们要把一个log.txt数据中[5000,5020]行拿出来,怎么做呢?
我先把log.txt的前5020行放到new.txt中,然后再取尾部21行。

[root@hcss-ecs-ab43 ~]# head -5020 log.txt >new.txt
[root@hcss-ecs-ab43 ~]# tail -21 new.txt

在这里插入图片描述
当然这个方法需要两步,有些繁琐,我们可以使用管道 | 一步搞定:
在这里插入图片描述
管道还可以多重利用,然后进行加工:

head -5020 log.txt | tail -21 | cat | tac | wc -l     //末尾这个是l不是管道|,也不是数字1

这里的wc -l:计算行数
在这里插入图片描述
管道图解:
在这里插入图片描述


🚩总结

mv指令(重要):- 用于移动或重命名文件和目录
mv src[文件、目录]dst[路径、文件]
1.剪切文件、目录
mv src文件–>重命名mv hello.txt world.txt ->hello.txt->wor1d.txt
2.重命名
mv src路径–>剪切mvmv world.txt dir1/test/

cat 命令:功能: 查看目标文件的内容

echo 与 >

  • echo 用于在终端中输出文本。
  • 用于将输出重定向到文件。

Linux的重定向技术

  • 介绍了 Linux 的重定向概念,包括输入重定向 <、输出重定向 >、追加重定向 >> 等。

head指令

  • 用于显示文件的前几行内容。
    tail指令
  • 用于显示文件的后几行内容。
    小例子:head -5020 log.txt | tail -21 | cat | tac | wc -l

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿森要自信

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值