关于Linux的操作符,在上篇博客中我们已经讲述了一些,都是Linux最基本的操作符。今天我们继续了解一些关于对文件及目录增删查改的操作符,话不多说我们直接上内容。
rm指令的回顾以及拓展
在上篇博客中,我们已经了解rm指令是将目录或文件进行删除的一个指令。在我们想要删除时,我们只需要将文件或目录跟在rm指令后面即可。当我们删除一个不为空的目录时,我们需要在rm指令后加上-r进行递归删除。root账号会在递归时进行询问,而其余子账号在递归删除时不会进行询问。但是在rm后加 -i就会询问(无论是root还是其余账号)。要想要强制删除在rm后加 -f即可。
上面就是使用普通用户进行文件的删除时的流程,如果没有-i,删除时Linux就不会进行询问。
这就好比Windows中的回收站一样,当我们需要清空回收站时,系统就会询问我们需要永久删除这几个项目吗?这样做就非常的严谨。但是我们还是得注意,Windows中的删除并不是真正的删除,而是先将不需要的空间进行标记,让后来的文件进行覆盖。Linux则是直接的删除我们的文件。
当我们创建一系列无用的文件及目录,我们想要全部删除应该怎么办?我们要使用rm一个一个删除吗?有没有什么快捷的方法呢?
那肯定是有的,我们可以使用rm -rf ./*或者rm -rf *都行直接删除即可。
这个*如同命令一样,是一种通配符,指在指定路径下的所有文件及目录!
但是又会有人说,这样会不会删除掉隐藏文件呢?答案是不会。
那有人就会吐槽,说好删除当前路径下的所有文件,怎么隐藏的文件却删不了。因为这样才能将隐藏文件更好的隐藏起来。那要怎么删除隐藏文件呢?这时我们就得记住其隐藏文件的名字,一个一个进行删除才行。
man指令
在学习Linux指令时,就如同我们学习一门语言,经常会遇到一些我们没见过或者忘记的指令,我们需要进行了解它们是什么作用,Linux会给我们提供一个在线手册,我们就可以使用man指令进行查阅。
语法: man [选项] 命令
比如ls命令的作用:
如果找不到,我们也可以使用我们平时的搜索引擎,百度、酷狗、chatgdp都行。
man也是条指令,那我们连man的指令也不知道时,我们就可以查找man man。
常用选项
-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时,我们搜索的指令会从第一个开始寻找,到第八个结束,直到找到为止才停止。
在后面加上1 其实与不加是相同的。
在举个例子,我们想要查询c库中的printf函数的作用,我们直接使用man去查找:
我们发现printf在1号手册中就查找成功了,它在Linux中是一个指令,并不是函数。但当我们使用num调整查找的优先级时:
我们可以看出,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会报错。
在介绍cp拷贝指令时,为了更清楚直观的看到拷贝过去的内容,我们先来介绍另一个指令nano。
nano指令
什么是nano指令,用Windows的话说来说就是一个记事本。输入我们想要输入的文本进行记录。我们可以使用nano加上一个文件名来创建一个文本。
ctrl+x为退出,退出后选择y是保存n为取消保存,与Windows大同小异。
当我们退出后,我们可以看到在此路径下就已经有这个文件了。
我们使用cat指令(后面马上会说到)就可以看到文本中的内容了。
如果没有nano指令的,我们可以输入yum install -y nano 指令进行添加。
nano讲完,我们再回到cp指令中。我们想要把我们刚创建好的test.txt文件放入上级目录中去,我们就可以使用cp指令。
我们成功将test.txt拷贝到上级目录中去了,并且上级目录中的test.txt文件内容与原文件的内容相同。
如果我们想要将test.txt拷贝到当前目录可以吗?
肯定是不行的,因为同一路径下文件或目录是不能重名的。如果非要进行拷贝也不是没有办法。我们可以修改文件名字。
那cp难道只能拷贝普通文件吗?就不可以拷贝目录吗?
我们来试一下:我们将此路径下的dir目录拷贝到上级,看是否可行。
这时此路径下的文件即目录。
linux会进行报错,目录不是文件。还是有办法的,我们可以类别rm指令。
在cp后面加上-rf就可以对目录进行操作处理。
我们可以看出拷贝的结构完全相同。
当我们想要在同路径下进行拷贝时,与文件拷贝相同需要一个不重名的目录。假如我们不小心重名了,虽然会进行报错,但是dir目录中的结构将发生改变,所以这样做非常危险。
我们应该这样做:
这样做才是正确且安全的。
如果我们想要将dir的目录拷贝到一个指定路径下,并且更改名字该怎么做。
现在在/home/why路径下已经有我们拷贝的dir目录了,并且将dir目录的名字改成了mydir。
并且mydir目录与dir目录的内容相同。
所以我们可以保证文件名拷贝到新的路径后不变,也可以指定路径,拷贝过去后内容相同但文件名不同,只要保证同级别的目录不影响即可。
现在我想将lesson3中的所有内容全部拷贝到copy目录下,应该怎么做呢?
我们可以看出只要在后面加入绝对路径与*通配符即可表示在当前路径下的所有文件即目录。
最后我相信大家还有一个疑问,拷贝会不会拷贝隐藏文件呢?答案是不会,假设隐藏文件被拷贝过去,我们就会知道隐藏文件的存在,失去了”隐藏“的意义。第二点,每个目录下都会有. .. 这样的隐藏文件,如果拷贝过去就会导致目标名重复问题。
mv指令
mv指令是由move(移动)缩写得来的命令,意思就是文件的移动。拿Windows类比的化就是剪切功能。在Linux系统下经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
这时mydir目录中的文件,现在将copy中的文件全部删除后,再使用mv指令将mydir目录进行剪切到copy目录中去。
原本的mydir目录不见了,已经全部剪切包含到copy目录中去了。
这样我们就成功的将mydir进行转移。mv指令不仅可以转移目录,也可以转移文件。
将在lesson3中的test.txt.bak剪切到上一级copy目录中去。
还记得test.txt中nano的内容吗?就是上文展示过的一段简单的程序。现在我们想将刚刚移动到copy中的 test.txt.bak文件再转回到lesson3目录中去,并且改一下名字应该怎么做呢?
我们此时在lesson3的目录中,想要找到copy目录必须使用../找到上一级在进行寻找目标文件。找到后直接输入想要修改的名字即可,就会转移到我们当前用户所在的路径下。
mv除过可以进行移动文件与目录,还可以进行改名操作。当想要目标文件对应的是一个存在的目录或路径,Linux就会将文件进行移动。如果对应的不存在将会进行目标文件名称的修改。
现在我们将目标文件test.txt进行重命名:
对指令进行重命名
对指令进行重命名就是为了更好的让人们从Windows系统中转换到Linux系统中来。大家都知道我们在Windows中删除一个文件就是放到回收站中,但是放入回收站不代表真正被删除,想要恢复就可以直接恢复。但是在Linux中的rm命令删除就是真正的删除,无法恢复。而Windows中的回收站其实也是一个目录,将我们即将删除的文件全部放进去。所以我们为了更贴合Windows,就像将Linux中的rm命令进行重命名为mv,然后放入一个目录中去。
重命名更像我们C语言中的typedef,可以将命令进行重定义。而我们应该怎样去进行重命名呢?
我们目前学到的许多命令全部都是放在/usr/bin/目录中。
命令的本质其实就是二进制可执行文件。
下面我们可以创建一个小的脚本文件,进行重命名操作。
我们先创建一个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。
这就是非常小的一个脚本。注意:当我们使用非root账户时,我们不能将编译文件转入/usr/bin目录中去,我们得切换成root账号进行转移。
alias指令
alias英语翻译过来就是别名的意思,在这里更像c语言中的typedef。将命令进行重命名。
我们将ll命令重命名为why,当我们输入why时与输入ll的指令结果是相同的。
那如何将这个重命名进行删除呢?我们直接关闭xshell,然后再打开就没有刚才的重命名了。
echo指令
我们刚刚学过nano指令,再文本中可以输入我们想要的内容进行存储。而echo指令与nano指令有些相似,却又不同。
当我们直接想将文本输入在屏幕上时,我们可以使用echo指令进行打印:
当我们想要与nano有相同的作用时,我们可以这样写:
将需要的文本进行写入,然后使用>进行连接,再加上需要的文件名即可。
那>是什么符号呢?输出重定向。原本echo指向的输出就是屏幕,而我们将其输出改为到一个文件中去。
所以我们又多了一种可以创建新文件的方法,只要向文件中输入的内容为空,就是创建新文件。
这就是我们的新方法。
那我们如果不断地去输出内容,会怎么样呢?
原本的hello linux被替换成了hello。就如同原本的文本内容被重新创建再将最新内容写入。这与C语言中往文本中写数据的”r“模式非常类型,我们可以去类比理解。那这样我们也可以将我们原本的file.txt文件清空。
总结:
>:输出重定向,每次都会清空原始文件,然后再写入。
作用:1.新建空文件。
2.清空目标文件。
那有什么办法可以让我们写的文本内容不会被覆盖,继续往下写呢?如同C语言文本输入的”a“模式。那肯定是有的。
我们在>符号那里做文章,将>改为>>即可。我们将>>称为追加重定向。在我们原本的文章中进行继续输出,不会覆盖原本的内容。
cat指令
在上面的指令中,其实我们已经多次使用到cat指令,它就是将文件的内容进行打印的。
语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
我们可以使用echo以及追加重定向符号,在file.txt文件中在多加入一些内容。
cat -b是对非空输出行进行编号:
cat -n是对所有输出行进行编号:
如果有多行空格,我们只想输出一行空格意思一下,剩下的全部省略我们就可以使用cat -s进行操作:
组合也可使用:
当我们想要反转文本内容时,我们只需要将cat指令倒过来,输入tac即可将文本内容反转。
这些就是cat指令的基本用法!!!
其实cat后面不仅可以跟文件名,也可以什么都不跟。cat指令完后直接回车。
你输入什么,cat就给我们打印什么。看上去挺无聊的。但是我们可以进行翻译一下:cat文件从键盘文件读取什么,就向显示器文件写入什么。所以cat是默认从键盘文件读入的。那我们能不能与echo一样更换一下输入方呢?
把本来应该从键盘文件中读入的内容更改为普通文件中进行输入,所以<为输入重定向。就如同C语言中的”r“模式一样。
more指令
当我们读取一个短文件时,我们可以使用cat指令进行读取,但是读取长文件时就不那么方便,我们就可以使用more指令进行读取。
语法:more [选项][文件]
功能:more命令,功能类似 cat
常用选项:
-n 对输出的所有行编号
q 退出more
首先我们应该创建一个大文件,使用i=0;while [ i−le1000];doecho"helloi−le1000];doecho"helloi -le 1000 ]; do echo "hello i"; let i++; done > file.txt即可在当前目录下创建一个file.txt文件。
当我们创建了个大文件后,我们想要查看其文件使用cat指令会刷屏非常的难受,这时我们使用more指令,就可以读取大文件。
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<行数> 显示的行数
head会默认截取文件头部的前十行内容进行打印。
我们想要读取自己想要的行数,即可在head后加-n,n代表自己想要的行数。
tail指令
tail指令与head指令是相对的,一个是从头开始进行,一个是从尾部进行。
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.
语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项: -f 循环读取
-n<行数> 显示行数
tail指令默认也是后10行。
如果想要选择自己需要的行数,在tail后加-n,n代表想要行数即可。
拓展:要是我们想要读取文本中间的内容,我们必须利用tail与head的搭配,进行截取即可。
以上就是本次Linux基本操作符全部内容,对你有帮助的一键三连支持一下博主吧!!!