📝前言
本文将介绍Linux系统中的常用命令:mv、cat、echo、重定向、head和tail,主要用于文件管理和数据处理。重点讲解mv命令和重定向的示例,最后演示如何用head和tail快速提取大型文件中的指定行。
🌠 mv指令(重要):
mv
命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命
令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的
目录中。 - 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它
将所给的源文件或目录重命名为给定的目标文件名。 - 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至
目标目录中。
功能图示总结:
常用选项:
-f
:force
强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-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
命令你已经完成了输入,它会退出输入模式。
-
合并多个文件内容:
cat file1.txt file2.txt file3.txt > combined.txt
这将把
file1.txt
、file2.txt
和file3.txt
的内容合并到combined.txt
文件中。 -
创建新文件:
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
使用示例:
-
查看文件内容,以相反顺序显示:
tac file.txt
这将以从下到上的顺序显示
file.txt
文件的内容。 -
合并多个文件内容,并以相反顺序显示:
tac file1.txt file2.txt file3.txt
这将先显示
file3.txt
的内容,然后是file2.txt
,最后是file1.txt
。 -
创建新文件:
tac > new_file.txt
-> 输入数据+回车
这将创建一个新文件 new_file.txt
,并将输入的内容以相反顺序写入其中。按 Ctrl+D
结束输入。
与 cat
命令相比, tac
命令主要的区别就是它会以相反的顺序显示或写入文件内容。除此之外,它们的用法基本相同。
🌠linux文件
Linux下一切皆文件。
键盘,显示器—文件来看待---- printf/cout
—我们向显示器进行打印----向显示器文件进行写入scanf/cin
-±键盘读取数据—从键盘文件中读取数据
在Linux中,"一切皆文件"的理念确实很有趣。拓展阅读了解:
-
键盘和显示器作为文件:
- 键盘:在Linux中,键盘输入通常通过特殊的设备文件来处理。例如,
/dev/tty
、/dev/ttyS0
(串口设备)、/dev/input/event0
(输入事件)等设备文件对应着不同的输入设备。程序可以通过读取这些文件来获取来自键盘的输入数据。 - 显示器:显示器也是通过设备文件进行操作的。例如,
/dev/tty
或/dev/console
文件可以用来向终端显示内容。此外,图形显示器的操作通常涉及到更复杂的图形系统(如X Window系统),但底层的图形设备还是通过设备文件来管理的。
- 键盘:在Linux中,键盘输入通常通过特殊的设备文件来处理。例如,
-
标准输入输出:
printf
/cout
:在C/C++程序中,printf
和cout
用于向标准输出(通常是显示器)写入数据。这实际上是向标准输出设备文件(如/dev/tty
)写入数据。操作系统会将这些数据渲染到显示器上。scanf
/cin
:同样,scanf
和cin
用于从标准输入(通常是键盘)读取数据。程序通过读取标准输入设备文件(如/dev/tty
)来获取用户的输入数据。
-
文件描述符:
- 在Linux中,标准输入(stdin)、标准输出(stdout)和标准错误(stderr)分别对应文件描述符0、1和2。这些文件描述符指向相应的设备文件,操作这些文件描述符就是在进行设备操作。例如,
printf
操作的是标准输出的文件描述符1,而scanf
操作的是标准输入的文件描述符0。
- 在Linux中,标准输入(stdin)、标准输出(stdout)和标准错误(stderr)分别对应文件描述符0、1和2。这些文件描述符指向相应的设备文件,操作这些文件描述符就是在进行设备操作。例如,
这个设计使得程序可以用一致的方式处理各种输入和输出设备,不需要特别为每种设备编写代码。无论是与文件、网络还是设备交互,程序员都可以通过类似的接口进行操作。这种设计理念极大地提高了系统的灵活性和可扩展性。
🌉echo 与 >
echo
命令是一个非常常见和基本的 Linux/Unix 命令,它用于在终端或控制台上输出文本或变量的值。
基本语法:
echo [选项] [字符串]
常用选项:
-n
: 不输出结尾的换行符-e
: 启用转义字符解释
使用示例:
-
向显示器文件进行写入
echo "Hello, world!"
输出:
-
输出变量值:
NAME="Linux" echo "My name is $NAME"
输出:
-
使用选项:
echo -n "Enter your name: " read name echo -e "Hello, $name!\n"
输出:
Enter your name: Linux Hello, Linux!
-
将输出重定向到文件:
echo "This is a test." > test.txt
这将把
"This is a test."
写入到test.txt
文件中。
🌠Linux的重定向技术
Linux的重定向技术允许你将输入输出流重新指向文件或其他设备,而不是使用默认的标准输入(stdin)、标准输出(stdout)或标准错误(stderr)。
- 输出重定向
将命令的输出发送到文件而不是显示器上。
- 基本输出重定向:
这会将command > file.txt
command
的标准输出重定向到file.txt
文件。如果文件已存在,它会被覆盖。
- 追加输出重定向:
这会将command >> file.txt
command
的标准输出追加到file.txt
文件末尾,而不会覆盖原有内容。
- 输入重定向
将命令的输入从文件读取,而不是从键盘读取。
- 基本输入重定向:
command < file.txt
输入重定向,本来应该默认从键盘文件来,<∶更改成为从指定文件中读取数据
- 错误重定向
将命令的标准错误输出重定向到文件。
-
标准错误重定向:
command 2> error.txt
这会将
command
的标准错误(文件描述符2)重定向到error.txt
文件。 -
追加标准错误重定向:
command 2>> error.txt
这会将
command
的标准错误追加到error.txt
文件末尾。
- 同时重定向标准输出和标准错误
- 将标准输出和标准错误重定向到同一文件:
这会将command > all_output.txt 2>&1
command
的标准输出和标准错误都重定向到all_output.txt
文件。2>&1
的意思是将标准错误(文件描述符2)重定向到标准输出(文件描述符1)。
- 管道
管道将一个命令的输出直接传递给另一个命令作为输入。
- 基本管道用法:
这会将command1 | command2
command1
的标准输出作为command2
的标准输入进行处理。例如:
这会列出当前目录中的所有文件,然后用ls | grep "txt"
grep
过滤出包含 “txt” 的文件名。
文章下面使用
tail
与head
时有清晰的认识:
- 使用
tee
命令
tee
命令可以将标准输出同时写入文件和终端。
-
基本用法:
command | tee file.txt
这会将
command
的输出同时写入file.txt
文件和终端显示器上。 -
追加用法:
command | tee -a file.txt
这会将
command
的输出追加到file.txt
文件末尾,同时也输出到终端。
- 文件描述符
在Linux中,除了标准输入(0)、标准输出(1)和标准错误(2)之外,你还可以使用其他文件描述符进行重定向。你可以自定义文件描述符进行高级操作。
- 示例:
这会将 “Hello, World!” 写入exec 3> file.txt echo "Hello, World!" >&3 exec 3>&-
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
文件中。
分析:
-
cnt=1
将变量cnt
初始化为 1。 -
while [ $cnt -le 10000 ]; do ... done
开始一个while
循环,只要$cnt
小于等于 10000,就执行循环体中的命令。 -
echo "hello $cnt"
在每次循环中输出 “hello” 后跟当前$cnt
的值。 -
let cnt++
或((cnt++))
递增cnt
变量的值。这两种写法都可以实现让cnt
变量自增 1。 -
> log.txt
将循环过程中输出的所有内容重定向到log.txt
文件中。
🌉head指令
head
与 tail
就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,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