本文将介绍Linux系统中的常用命令:mv、cat、echo、重定向、head和tail,主要用于文件管理和数据处理。重点讲解mv命令和重定向的示例,最后演示如何用head和tail快速提取大型文件中的指定行。
mv
命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命
令,经常用来备份文件或者目录。
语法: 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
[选项][文件]
功能: 查看目标文件的内容
常用选项:
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
使用示例:
file.txt
文件的内容。
file3.txt
的内容,然后是 file2.txt
,最后是 file1.txt
。
tac > new_file.txt
-> 输入数据+回车
这将创建一个新文件 new_file.txt
,并将输入的内容以相反顺序写入其中。按 Ctrl+D
结束输入。
与 cat
命令相比, tac
命令主要的区别就是它会以相反的顺序显示或写入文件内容。除此之外,它们的用法基本相同。
Linux下一切皆文件。
键盘,显示器—文件来看待---- printf/cout
—我们向显示器进行打印----向显示器文件进行写入scanf/cin
-±键盘读取数据—从键盘文件中读取数据
在Linux中,"一切皆文件"的理念确实很有趣。拓展阅读了解:
/dev/tty
、/dev/ttyS0
(串口设备)、/dev/input/event0
(输入事件)等设备文件对应着不同的输入设备。程序可以通过读取这些文件来获取来自键盘的输入数据。/dev/tty
或/dev/console
文件可以用来向终端显示内容。此外,图形显示器的操作通常涉及到更复杂的图形系统(如X Window系统),但底层的图形设备还是通过设备文件来管理的。printf
/cout
:在C/C++程序中,printf
和cout
用于向标准输出(通常是显示器)写入数据。这实际上是向标准输出设备文件(如/dev/tty
)写入数据。操作系统会将这些数据渲染到显示器上。scanf
/cin
:同样,scanf
和cin
用于从标准输入(通常是键盘)读取数据。程序通过读取标准输入设备文件(如/dev/tty
)来获取用户的输入数据。printf
操作的是标准输出的文件描述符1,而scanf
操作的是标准输入的文件描述符0。这个设计使得程序可以用一致的方式处理各种输入和输出设备,不需要特别为每种设备编写代码。无论是与文件、网络还是设备交互,程序员都可以通过类似的接口进行操作。这种设计理念极大地提高了系统的灵活性和可扩展性。
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的重定向技术允许你将输入输出流重新指向文件或其他设备,而不是使用默认的标准输入(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)之外,你还可以使用其他文件描述符进行重定向。你可以自定义文件描述符进行高级操作。
示例:
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
文件中。
分析:
cnt=1
将变量 cnt
初始化为 1。
let cnt++
或 ((cnt++))
递增 cnt
变量的值。这两种写法都可以实现让 cnt
变量自增 1。
> log.txt
将循环过程中输出的所有内容重定向到 log.txt
文件中。
head
与 tail
就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head
用来显示档案的开头至标准输出中,而 tail
想当然尔就是看档案的结尾
语法:
head [参数]... [文件]...
功能:
head
用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10
行。
选项:
-n<行数> 显示的行数
举个例子:
head -5020 log.txt
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的重定向技术
<
、输出重定向 >
、追加重定向 >>
等。head指令