Linux-Linux的基础指令4

1.cat指令

之前我使用过很多的cat指令,大家都应该知道cat指令的作用了。

语法:cat [选项] [文件]

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

1.1基本用法

cat用于查看文件的内容,比如,我们创建一个新文件后,在里面写入内容然后用cat查看:

如果我们写入几行会怎么样?

可以看到它会输出空行,并且在文件末尾自动换行。

我们发现如果cat后面不接文件也可以([]里面内容代表可以省略),那么我们不接文件会怎么样呢?

1.2不接文件

我们直接cat会发现:

cat后面不接文件代表它会从键盘文件读取,然后把从键盘文件读取内容显示在显示器上,如:

只要我们回车,它就会继续等待我们输入,这是因为读入键盘文件时,这个键盘文件没有结尾,只能不停等待用户输入,直到我们自己退出该文件为止。

想要退出这个操作,直接Ctrl+C即可

1.3接选项

我们在add.txt中进行nano add.txt操作,然后输入以下内容:

cpp 复制代码
Today is Mar twenty-five day!
Today is Mar twenty-five day!
Today is Mar twenty-five day!



Today is Mar twenty-five day!

Today is Mar twenty-five day!

Today is Mar twenty-five day!
Today is Mar twenty-five day!

Today is Mar twenty-five day!
Today is Mar twenty-five day!
Today is Mar twenty-five day!
Today is Mar twenty-five day!

Today is Mar twenty-five day!
Today is Mar twenty-five day!

这样操作主要是为了后面看出各个选项的区别。

用Ctrl+X保存后回车退出即可。

这样cat add.txt的结果是:

1.3.1-b选项

-b对非空输出行进行编号:

也就是说,如果是非空行它将会从数字1开始往下编号,对空行则不编号,很好理解。

1.3.2-n选项

功能:对输出的所有行编号:

也就是相当于给原来文件的每个行(包括空行进行编号)

1.3.3-s选项

功能:不输出多行空行:

对比我们不接选项:

我们会发现,第三个today行到第四个today行中间只有一个空行,省略了两个,也就是说:-s选项可以合并多个相邻空行为一个空行输出!

1.4输入重定向

cat不接任何东西时是从键盘文件进行输入,而我们如果不想要它从键盘文件读取,而想从add.txt文件中读取,我们除了用cat add.txt外,还可以用cat < add.txt,比如:

如果各位有两台Linux机器的话,可以完成一个机器输入echo "hello world" > /dev/pts/1(这是另外一个机器的显示器文件路径),然后在另一个机器上就会显示:hello world。

如果想要知道自己的显示器文件路径,直接:

bash 复制代码
ls /dev/pts

而我们的显示器文件的路径就是/dev/pts/n 这个n是指我们ls /dev/pts后的第一个结果,如果我们只打开了一个Xshell,则只有1个显示器,若我们又用另外一个用户登录Xshell,这时候用ls /dev/pts就会出现0 1 ptmx,也就是另外一个用户的显示器文件路径为/dev/pts/1,(我们每次登录系统,系统会在ptmx下新建一个文件,即显示器文件)。

当我们只有一台显示器登录该地址,如果我们使用echo "hello world" > /dev/pts/0,则会在自己屏幕上显示出:hello world,比如:

这就相当于/dev/pts/0 < /dev/pts/0前面那个文件代表我们的输入重定向的文件,而后面那个代表我们显示器的路径,这也就相当于其他人的显示器文件从我们的echo指令输入的内容读取了!

如果我们在没有另外一个显示器的情况下使用输出重定向,则不被允许了:

这个表示:你没有权限向/dev/pts/1这个终端设备写入内容。

总之,这个输入重定向在cat中有应用,之后的指令可能也有应用,这里先提示一下,以后用到了至少知道。

2.mv指令

mv指令是move的缩写,有移动的意思。

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

功能:用来移动文件或为文件改名

2.1基本用法

文件重命名:

当第二个参数(目标文件或目录)是文件时,mv指令将会把原文件名重命名为目标文件名:

我们发现,mv后,原文件会被删除,那么如果目标文件不存在呢?

我们发现,只要目标文件不存在,它会直接改名,不管后缀是否对应!

那我们能不能把某个文件移动到其他路径下呢?

也就是说,如果第二个参数(目标文件或目录)为目录时,则会把第一个参数作为第二个参数的子目录或文件?

如果第一个参数为目录呢?

我们看到最后一句话是:无法移动hello目录到12.06下:目录不为空。

这是因为12.06下的hello目录与要移动的hello目录名相同,为了防止覆盖原路径下的同名目录,所以这个操作被拒绝了。

有两种方案,第一种是不推荐的:把./12.06/hello下的所有子目录和文件都删除,然后再移动就行:

因为我们删除了./12.06/hello下的所有子目录或文件,所以使得该目录为空,从而可以被安全覆盖,因此这操作是被允许的!

但是这样成本也太大了吧,只是移动一个文件,我却要把文件给删除,难道两个不能都保存下来吗?

第二种方法:我移动到12.06路径下,但是我还要自己命名为hello2:

我们通过这种方式的目的是:12.06目录下不存在hello2目录,因此新建了一个,也就相当于把原hello的目录名改成了hello2,这种方式成本大大降低了。

2.2常用选项

-f:force,如果目标文件已存在,不会询问直接覆盖;

-i:若目标文件已经存在,就会询问是否覆盖。

这两个如果同时使用时,优先级高低根据系统来,但是建议不要用第一个选项,防止不小心覆盖了原文件而出错,建议各位自己使用mv时使用-i选项,或者自己在vim ~/.bashrc里面增加:

bash 复制代码
alias mv='mv -i'

然后用Shift+ZZ保存退出之后就可以每次进行mv操作时默认询问了。

3.总结

这两个指令用得还是比较多的,而且比较抽象,需要加以应用才能理解更透彻,这些指令还有一些选项需要各位自己去问AI大模型了。

相关推荐
腾讯蓝鲸智云5 小时前
嘉为蓝鲸可观测系列产品入选Gartner《中国智能IT监控与日志分析工具市场指南》
运维·人工智能·信息可视化·自动化
路溪非溪6 小时前
Linux下蓝牙框架的数据流
linux·arm开发·驱动开发
能不能别报错6 小时前
openclaw-linux部署教程+mimo-v2-pro
linux·运维·服务器
小虎卫远程打卡app7 小时前
光通信与视频编码前沿技术综述:从超大容量传输到实时神经网络编码
运维·网络·信息与通信·视频编解码
钛态7 小时前
Flutter for OpenHarmony:mockito 单元测试的替身演员,轻松模拟复杂依赖(测试驱动开发必备) 深度解析与鸿蒙适配指南
服务器·驱动开发·安全·flutter·华为·单元测试·harmonyos
ToB营销学堂8 小时前
B2B营销自动化新解法:MarketUP聚焦高转化场景
大数据·运维·自动化
TK云大师-KK8 小时前
TikTok自动化直播遇到内容重复问题?这套技术方案了解一下
大数据·运维·人工智能·矩阵·自动化·新媒体运营·流量运营
济6178 小时前
ARM Linux 驱动开发篇---基于 pinctrl+GPIO 子系统的蜂鸣器驱动开发(设备树版)--- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
AiGuoHou18 小时前
Debian/Ubuntu 各个版本一键更换国内镜像源
linux·ubuntu·国内源·debian·镜像源·换源