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大模型了。

相关推荐
A小辣椒19 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式