Linux基本操作符(2)

简介: Linux基本操作符(2)

关于Linux的操作符,在上篇博客中我们已经讲述了一些,都是Linux最基本的操作符。今天我们继续了解一些关于对文件及目录增删查改的操作符,话不多说我们直接上内容。

rm指令的回顾以及拓展

在上篇博客中,我们已经了解rm指令是将目录或文件进行删除的一个指令。在我们想要删除时,我们只需要将文件或目录跟在rm指令后面即可。当我们删除一个不为空的目录时,我们需要在rm指令后加上-r进行递归删除。root账号会在递归时进行询问,而其余子账号在递归删除时不会进行询问。但是在rm后加 -i就会询问(无论是root还是其余账号)。要想要强制删除在rm后加 -f即可。

21742dac244946b3a180fe614d0dbc87.png

上面就是使用普通用户进行文件的删除时的流程,如果没有-i,删除时Linux就不会进行询问。


这就好比Windows中的回收站一样,当我们需要清空回收站时,系统就会询问我们需要永久删除这几个项目吗?这样做就非常的严谨。但是我们还是得注意,Windows中的删除并不是真正的删除,而是先将不需要的空间进行标记,让后来的文件进行覆盖。Linux则是直接的删除我们的文件。

71ad70cbc00440928ae1237331a1af98.png

11f035abd00f4436a358d6b138a80d97.png

当我们创建一系列无用的文件及目录,我们想要全部删除应该怎么办?我们要使用rm一个一个删除吗?有没有什么快捷的方法呢?


那肯定是有的,我们可以使用rm -rf ./*或者rm -rf *都行直接删除即可。

145839d3b7b34c168ee62fbf5c4f7e9f.png

这个*如同命令一样,是一种通配符,指在指定路径下的所有文件及目录!


但是又会有人说,这样会不会删除掉隐藏文件呢?答案是不会。

a3fa96da8ff74a4ea6430cf83ffb4186.png

那有人就会吐槽,说好删除当前路径下的所有文件,怎么隐藏的文件却删不了。因为这样才能将隐藏文件更好的隐藏起来。那要怎么删除隐藏文件呢?这时我们就得记住其隐藏文件的名字,一个一个进行删除才行。

man指令

在学习Linux指令时,就如同我们学习一门语言,经常会遇到一些我们没见过或者忘记的指令,我们需要进行了解它们是什么作用,Linux会给我们提供一个在线手册,我们就可以使用man指令进行查阅。


语法: man [选项] 命令


比如ls命令的作用:

9de27046d8ea4921b5a1b9e634679e7e.png

如果找不到,我们也可以使用我们平时的搜索引擎,百度、酷狗、chatgdp都行。


man也是条指令,那我们连man的指令也不知道时,我们就可以查找man man。

d946f190926a4112b3744349c8fb0a2a.png

常用选项

-k 根据关键字搜索联机帮助

num 只在第num章节找

-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按

下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

解释一下,面手册分为8章

1 是普通的命令

2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文

件)

3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件

5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义

6 是给游戏留的,由各个游戏自己定义

7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明

8 是系统管理用的命令,这些命令只能由root使用,如ifconfig


当我们在man后不加num时,我们搜索的指令会从第一个开始寻找,到第八个结束,直到找到为止才停止。

27f27226d95a42fe89fa23bf1946f474.png

在后面加上1 其实与不加是相同的。


在举个例子,我们想要查询c库中的printf函数的作用,我们直接使用man去查找:

4cbf0185584e473ea281847c668b0c56.png

我们发现printf在1号手册中就查找成功了,它在Linux中是一个指令,并不是函数。但当我们使用num调整查找的优先级时:

5e3081b2a88a48ed85ee0cb2287fb4bb.png

我们可以看出,printf也是C库中的输出函数。


我们的云服务器是比较干净的,如果没有man手册,我们就需要进行安装。安装条件必须在root账号下进行。输入yum install -y man-pages即可。

cp指令

cp指令中的cp就是copy的简写,即拷贝。而拷贝在Windows中就是复制粘贴的意思。我们想要将文件复制到另一个文件夹时,我们通常会在Windows中进行复制粘贴的选项。


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

功能: 复制文件或目录

说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。


常用选项:

-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在

-i 或 --interactive 覆盖文件之前先询问用户

-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理

-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理


首先我们得强调一点,在同级目录下,不允许存在同名文件或者同名目录!如果创建的目录与已有的文件或目录同名Linux会报错。

09455d456ba34be39c6d1776e75ff7a7.png

在介绍cp拷贝指令时,为了更清楚直观的看到拷贝过去的内容,我们先来介绍另一个指令nano

nano指令

什么是nano指令,用Windows的话说来说就是一个记事本。输入我们想要输入的文本进行记录。我们可以使用nano加上一个文件名来创建一个文本。

dd01c45d7a0045c48239961d80646a6b.png

ctrl+x为退出,退出后选择y是保存n为取消保存,与Windows大同小异。


当我们退出后,我们可以看到在此路径下就已经有这个文件了。

bd77dce496e2409e9f1d3482f8b5982d.png

我们使用cat指令(后面马上会说到)就可以看到文本中的内容了。

e1b1aaeb639e4694b27f248c8db3864b.png如果没有nano指令的,我们可以输入yum install -y nano 指令进行添加。


nano讲完,我们再回到cp指令中。我们想要把我们刚创建好的test.txt文件放入上级目录中去,我们就可以使用cp指令。

86fee54a46db46288e03960d41e61b77.png

250f28f09096419c873d43b2855640c6.png

我们成功将test.txt拷贝到上级目录中去了,并且上级目录中的test.txt文件内容与原文件的内容相同。


如果我们想要将test.txt拷贝到当前目录可以吗?

9903a06bdc2f42e09a01e3f8967fbdae.png

肯定是不行的,因为同一路径下文件或目录是不能重名的。如果非要进行拷贝也不是没有办法。我们可以修改文件名字。

59ae90cc849349d4b8e08e1661a4afa6.png

那cp难道只能拷贝普通文件吗?就不可以拷贝目录吗?


我们来试一下:我们将此路径下的dir目录拷贝到上级,看是否可行。

0136a38a74ca4af699b8451644604aa6.png

这时此路径下的文件即目录。

770df5b84475416dbd5f7951e2157076.png

linux会进行报错,目录不是文件。还是有办法的,我们可以类别rm指令。

9c6fbb5610a348d2b7cdc5277c7b697f.png

在cp后面加上-rf就可以对目录进行操作处理。

c01fcfb0410541c591517bf5ef61feb0.png

我们可以看出拷贝的结构完全相同。


当我们想要在同路径下进行拷贝时,与文件拷贝相同需要一个不重名的目录。假如我们不小心重名了,虽然会进行报错,但是dir目录中的结构将发生改变,所以这样做非常危险。

80cfc35b5e034786b23883c28f746e5c.png

我们应该这样做:

c4ced3daecd2426e98508ca87dfd5a05.png

这样做才是正确且安全的。


如果我们想要将dir的目录拷贝到一个指定路径下,并且更改名字该怎么做。

d228f5f61d1d4e38be9c9e89e5ee442e.png

现在在/home/why路径下已经有我们拷贝的dir目录了,并且将dir目录的名字改成了mydir。


并且mydir目录与dir目录的内容相同。


所以我们可以保证文件名拷贝到新的路径后不变,也可以指定路径,拷贝过去后内容相同但文件名不同,只要保证同级别的目录不影响即可。

ad457c784a88440a9dd0b865d5f43ad7.png

现在我想将lesson3中的所有内容全部拷贝到copy目录下,应该怎么做呢?


我们可以看出只要在后面加入绝对路径与*通配符即可表示在当前路径下的所有文件即目录。


最后我相信大家还有一个疑问,拷贝会不会拷贝隐藏文件呢?答案是不会,假设隐藏文件被拷贝过去,我们就会知道隐藏文件的存在,失去了”隐藏“的意义。第二点,每个目录下都会有.   .. 这样的隐藏文件,如果拷贝过去就会导致目标名重复问题。

mv指令

mv指令是由move(移动)缩写得来的命令,意思就是文件的移动。拿Windows类比的化就是剪切功能。在Linux系统下经常用来备份文件或者目录。


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

功能:

1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。

2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。

3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中


常用选项:

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

f516f131156f418ca761273823b00a39.png

这时mydir目录中的文件,现在将copy中的文件全部删除后,再使用mv指令将mydir目录进行剪切到copy目录中去。


原本的mydir目录不见了,已经全部剪切包含到copy目录中去了。

9b0384edf79647c8a542f65e101d713a.png

这样我们就成功的将mydir进行转移。mv指令不仅可以转移目录,也可以转移文件。

ad61a25059aa427db6a16fe4cacfa310.png

将在lesson3中的test.txt.bak剪切到上一级copy目录中去。


还记得test.txt中nano的内容吗?就是上文展示过的一段简单的程序。现在我们想将刚刚移动到copy中的 test.txt.bak文件再转回到lesson3目录中去,并且改一下名字应该怎么做呢?

4916c12d70d74488974dc77a88643663.png

我们此时在lesson3的目录中,想要找到copy目录必须使用../找到上一级在进行寻找目标文件。找到后直接输入想要修改的名字即可,就会转移到我们当前用户所在的路径下。


mv除过可以进行移动文件与目录,还可以进行改名操作。当想要目标文件对应的是一个存在的目录或路径,Linux就会将文件进行移动。如果对应的不存在将会进行目标文件名称的修改。


现在我们将目标文件test.txt进行重命名:

f582e68fd6e149f2b47d4b6362b8dc0e.png

对指令进行重命名

对指令进行重命名就是为了更好的让人们从Windows系统中转换到Linux系统中来。大家都知道我们在Windows中删除一个文件就是放到回收站中,但是放入回收站不代表真正被删除,想要恢复就可以直接恢复。但是在Linux中的rm命令删除就是真正的删除,无法恢复。而Windows中的回收站其实也是一个目录,将我们即将删除的文件全部放进去。所以我们为了更贴合Windows,就像将Linux中的rm命令进行重命名为mv,然后放入一个目录中去。


重命名更像我们C语言中的typedef,可以将命令进行重定义。而我们应该怎样去进行重命名呢?


我们目前学到的许多命令全部都是放在/usr/bin/目录中。

87c5ac0a100c427da76910540a51a55d.png

命令的本质其实就是二进制可执行文件。


下面我们可以创建一个小的脚本文件,进行重命名操作。


我们先创建一个test.c文件,使用nano写一个非常简单的程序。

#include <stdio.h>
int main()
{
  printf("hello linux\n");
  return 0;
}


然后使用gcc命令让文件进行编译,会生成一个a.out文件,我们将其改名为mycmd。然后将mycmd复制到/usr/bin目录下。我们在Linux打出mycmd后就会出现hello Linux。

bc3d5ca3864f43a6acf367adf33b44b3.png

4d446685d0e2444897528f9175dc90c0.png

e9a03f6f576d48119b64aeb801f86f46.png

这就是非常小的一个脚本。注意:当我们使用非root账户时,我们不能将编译文件转入/usr/bin目录中去,我们得切换成root账号进行转移。

alias指令

alias英语翻译过来就是别名的意思,在这里更像c语言中的typedef。将命令进行重命名。

487c6f7980ab40ccb0aa15910476c162.png

我们将ll命令重命名为why,当我们输入why时与输入ll的指令结果是相同的。


那如何将这个重命名进行删除呢?我们直接关闭xshell,然后再打开就没有刚才的重命名了。

echo指令

我们刚刚学过nano指令,再文本中可以输入我们想要的内容进行存储。而echo指令与nano指令有些相似,却又不同。


当我们直接想将文本输入在屏幕上时,我们可以使用echo指令进行打印:

ff4fb6ec898c46aab76f2baf521e3625.png

当我们想要与nano有相同的作用时,我们可以这样写:

b269c7fc00864e6f8d54ca78fe416621.png

将需要的文本进行写入,然后使用>进行连接,再加上需要的文件名即可。


那>是什么符号呢?输出重定向。原本echo指向的输出就是屏幕,而我们将其输出改为到一个文件中去。


所以我们又多了一种可以创建新文件的方法,只要向文件中输入的内容为空,就是创建新文件。

7e289c8fdcbc48c5b5f182cd305e639e.png

这就是我们的新方法。


那我们如果不断地去输出内容,会怎么样呢?

83aa565bd62e470987f6a951fd410071.png

原本的hello linux被替换成了hello。就如同原本的文本内容被重新创建再将最新内容写入。这与C语言中往文本中写数据的”r“模式非常类型,我们可以去类比理解。那这样我们也可以将我们原本的file.txt文件清空。


总结:

>:输出重定向,每次都会清空原始文件,然后再写入。

作用:1.新建空文件。

2.清空目标文件。


那有什么办法可以让我们写的文本内容不会被覆盖,继续往下写呢?如同C语言文本输入的”a“模式。那肯定是有的。

07249c4078c747558074685e739fd43a.png

我们在>符号那里做文章,将>改为>>即可。我们将>>称为追加重定向。在我们原本的文章中进行继续输出,不会覆盖原本的内容。

cat指令

在上面的指令中,其实我们已经多次使用到cat指令,它就是将文件的内容进行打印的。


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

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

常用选项:

-b 对非空输出行编号

-n 对输出的所有行编号

-s 不输出多行空行  

f8405a1af67a456794e3f70bc08ce80d.png

我们可以使用echo以及追加重定向符号,在file.txt文件中在多加入一些内容。

c9a7f7365f964ceea8dad6b0c75442d8.png

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

39b7f5f0295748758cbb1986c4a4b928.png

cat -n是对所有输出行进行编号:

bd71fba6bfe344669564561fb0d64e9f.png

如果有多行空格,我们只想输出一行空格意思一下,剩下的全部省略我们就可以使用cat -s进行操作:

a33e125fb32a4392b37d0a70a9446342.png

组合也可使用:


当我们想要反转文本内容时,我们只需要将cat指令倒过来,输入tac即可将文本内容反转。

16f6c3abfcb44e56a70aea4fca09692c.png

这些就是cat指令的基本用法!!!


其实cat后面不仅可以跟文件名,也可以什么都不跟。cat指令完后直接回车。

38def010d832486eacf03a5ab1f627aa.png

你输入什么,cat就给我们打印什么。看上去挺无聊的。但是我们可以进行翻译一下:cat文件从键盘文件读取什么,就向显示器文件写入什么。所以cat是默认从键盘文件读入的。那我们能不能与echo一样更换一下输入方呢?

32f1f96171e7462f849c150763ecd11a.png

把本来应该从键盘文件中读入的内容更改为普通文件中进行输入,所以<为输入重定向。就如同C语言中的”r“模式一样。


more指令

当我们读取一个短文件时,我们可以使用cat指令进行读取,但是读取长文件时就不那么方便,我们就可以使用more指令进行读取。


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

功能:more命令,功能类似 cat

常用选项:

-n 对输出的所有行编号

q 退出more


首先我们应该创建一个大文件,使用i=0;while [ ile1000];doecho"helloi−le1000];doecho"helloi -le 1000 ]; do echo "hello i"; let i++; done > file.txt即可在当前目录下创建一个file.txt文件。


当我们创建了个大文件后,我们想要查看其文件使用cat指令会刷屏非常的难受,这时我们使用more指令,就可以读取大文件。

c5afeba9012e42319dd292c5d77eae07.png

more指令会将内容先打满整个屏幕,然后停止打印,剩下的内容需要我们一行一行点击回车进行逐行打印,方便我们阅读。


但是more指令有缺陷,只能使用回车。无法使用上下键,无法向上翻阅。所以我们并不推荐使用more,这里可以做一个了解。我们更推荐使用less指令。

less指令

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。

less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看

但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!

除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。  


语法: less [参数] 文件

功能:

less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。      


选项:

-i  忽略搜索时的大小写

-N  显示每行的行号

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与 / 或 ? 有关)

N:反向重复前一个搜索(与 / 或 ? 有关)

q:quit  


我们使用less与使用more的功能一样看大文件,可以向上向下观看。现在我们说点more没有的功能。


当我们想进行搜索文件中的内容时,我们只需要输入内容即可跳转到对应的内容去。

head指令

当面对一个大文件时,我们只想看一下文件的头部内容,就可以使用head指令进行操作。

语法: head [参数]... [文件]...

功能:

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

选项:

-n<行数> 显示的行数

bb4ffb64bdd7410e9738540e5ba6b06b.png

head会默认截取文件头部的前十行内容进行打印。


我们想要读取自己想要的行数,即可在head后加-n,n代表自己想要的行数。

tail指令

tail指令与head指令是相对的,一个是从头开始进行,一个是从尾部进行。


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

语法: tail[必要参数][选择参数][文件]

功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

选项: -f 循环读取

-n<行数> 显示行数

9417752d51fd4fa3b59d923b4aeeb08b.png

tail指令默认也是后10行。


如果想要选择自己需要的行数,在tail后加-n,n代表想要行数即可。


拓展:要是我们想要读取文本中间的内容,我们必须利用tail与head的搭配,进行截取即可。


以上就是本次Linux基本操作符全部内容,对你有帮助的一键三连支持一下博主吧!!!

目录
相关文章
|
7月前
|
存储 人工智能 Linux
Linux基本操作符(1)
Linux基本操作符(1)
46 1
|
2天前
|
安全 Linux 测试技术
|
2天前
|
安全 Linux Windows
Linux中Shutdown命令使用介绍
Linux中Shutdown命令使用介绍
|
2天前
|
缓存 关系型数据库 Linux
Linux目录结构:深入理解与命令创建指南
Linux目录结构:深入理解与命令创建指南
|
3天前
|
数据挖掘 Linux vr&ar
Linux命令实战:解决日常问题的利器
Linux命令实战:解决日常问题的利器