本文将继续从上篇末尾讲起,讲解我们剩下的基本指令
一、剩余的基本指令
1、mv
mv指令是move(移动)的缩写,其功能为:1.剪切文件、目录。2.重命名
先演示下重命名,假设我想把当前目录下的di34改成dir5
那如何实现剪切操作呢?
我们发现,dir2已经被剪切到上一级目录了。
因此,mv的语法通式为:mv [文件或目录] [文件或目录]。当后一个是文件的时候,代表着是重命名,当后一个是路径的时候,代表着剪切。
但如果是mv [文件或目录] 目录+文件名,代表着我不仅要把它剪切到目标位置,还要重命名。
2. cat指令(用来显示文件的内容)
在学这个指令之前,我们先简单介绍一下nano ,他的用处就是在我们创建的文件中编辑内容,比如nano xx.txt即可在里面写东西了。
当我们写好以后,按下ctrl+x即可退出文件。
在保存后,我们想看一看里面写的到底是什么,只需要cat 文件名即可。
除此之外,我们也可以加选项-n,即可打印出行数
不仅如此,如果内容之间穿插着换行也可以有效地显示出来,但如果我们只想把有效内容输出出来,可以使用-b选项(只对非空行编号),此外,还有-s选项(不输出多行空行,即两行有效内容间最多输出一行空行)且可以组合使用。
还有一个与它很像的命令tac,也就是把cat倒过来,它的作用就是把内容逆序输出。
3.more和less指令
cat指令用于显示文件中的内容,但有时候我们面对一个大文件时想展开,用cat往往会造成刷屏的现象,此时more和less就派上用场了,他们和cat语法一样,只不过more和less显示的是开头的内容,cat会直接显示内容的末尾,看不到开头,且less支持用键盘上下键来查看上下文内容,也可以通过/关键字来跳转位置。而more只能通过enter键下翻内容,实际中我们基本都用less不用more。
在此我们对文件的读写内容补充一个知识点:重定向
对于cat指令,我们如果直接输入cat后面什么也不跟的情况下,我们在键盘上输入什么它就会打印出什么内容在显示器上。在Linux中呢,一切皆文件,包括我们的键盘、显示器等,我们所输入的内容并在显示器上呈现,其实就是对显示器这个文件进行写入操作。在C语言中,我们用scanf或者cin写入,即在键盘上获取数据,在Linux中,我们用echo指令,比如echo “hello,world”此时屏幕上就会输出 “hello,world”。
但是我们看第二个echo结果并没有在显示器文件进行写入了,而是在test.txt这个文件里写入,也就是说这个文件里现在有了内容“hello world”。如果此路径没有我们的文件名它就会新建一个该名的文件并在里面写入。貌似我们发现了新的新建文件的方式,以前我们都是touch 文件名。现在只需>文件名即可。">"我们叫输出重定向。
下一个,如果我们继续像该文件里写入内容,按道理,用上面的方法即可
本意我们是想在hello world后面加上aaaaa,但我们发现输入以后之前的内容消失了。所以我们得出,每一次的输出重定向,都是一次全新的写入。并将之前的内容清空。有了这个原理,我们就可以把已存在内容的文件进行内容清空,只需要>文件名即可,就像创建新的文件一样。
那我们想追加写入内容怎么办呢?用>>即可(中间不能用空格)>>叫追加重定向
又有一个新的问题,我们明明没打换行,但每次都有换行符,其实是echo导致的,echo的内容本身具有换行,那我们也不想要换行呢?把echo换成printf即可。
接下来,我们想用cat打印文件内容,cat指令本质是从键盘上获取内容并输出,但我们用<+文件即可(相当于从文件中获取内容并输出)<叫输入重定向
4.head和tail
这两个指令是为了我们看文件的开头和结尾的
语法是head 文件名(tail一样)它会默认显示10行,如果我们想控制行数使用选项-数字即可比如head -50 test.txt ,tail同理。如果想查看某一区间呢?混用!假设想看[a,b],先把前b行的内容存到临时文件中,然后在读取临时文件的b-a+1行(用tail)即可。但这样太麻烦了,我们也有不用临时文件的方法,通式:head -b 文件名 | tail -(b-a+1)。“ | ”我们叫管道。可以把这个管道看成临时文件一样,可以多个|加多个命令实现不同的操作结果
5.find指令
find用于找指定路径下的指定文件
语法为 find 路径 -name 文件名相当于windows中的搜索
除此之外,还有一个查找指令which,是用来搜索指定的指令的。指令看起来挺高级的,输入指令就能满足功能,但到底是个啥呢?其实。指令就是一个可执行程序,而且我们也可以自己编写指令,就像c、c++中的自定义函数一样,在Linux系统的指令中,所有自带的指令都在一个/bin的目录下,我们使用指令时,是/bin/ls,但系统自动帮我们省略了,只需要直接输入指令即可使用,但有时候,我们自己想编写一个指令,我们也不一定放在/bin目录下,也可能是在某一目录中,此时如果我们想使用的话,直接输入我们的指令名字就会报错,因为如果直接输入指令名字,他会自动去/bin目录下寻找,找不到就会报错,所以如果我们想使用不在/bin下的指令,包括运行某一文件,需要./文件名字(相对路径)(告诉Linux在当前目录下去找就行了)
6. alias——指定命令起别名
c和c++的自定义函数中,只要函数内部的功能不变,那么起什么名字是我们自己可以控制的,Linux的指令也可以起别名,其中,ll就是ls -l的别名。起别名的办法我们用alias,语法:alias 别名='指令',比如 alias zhangsan='ls -a',以后我们想输入ls -a,只需要输入zhangsan即可。可惜的是,一旦我们重启了服务器,这些别名就会失效。
7.grep
这个指令相当于关键字过滤器,语法:grep '关键字'(有无‘’均可)
啥意思呢?比如我现在的文件有一下数据
以下就是筛选出有big 和Big关键字的行数
很明显,grep进行筛选时是区分大小写的。如果我们不行区分大小写,只要是有big字母的都显示出来就用 -i选项,如果我们想显示出除了big以外的行而不显示big行就用-v选项(也可以组合使用)
8. zip与unzip压缩与解压缩
语法:zip 要压缩成的名称(xxx.zip) 要压缩的名称
这里,我们就把dir1目录压缩成了压缩包,但我们通过底层发现,他只是把dir1这个目录进行了压缩,如果我们进行移动并解压的话,只会获得一个空的dir1目录,需要带一个-r选项进行压缩。
解压缩就是unzip [压缩包名称]。但这种解压的结果只会解压在当前目录,如果我们先解压在其他目录呢?还需要借助选项,语法:unzip 压缩包 -d 指定路径
9. tar指令(打包与解包)
tar的用途其实和zip和unzip差不多,只不过tar的打包只是把多个文件放在一块,并没有实现压缩功能,但我们也可以通过选项来用tar实现压缩。我们先看一下其具体可以带什么选项。
选项太多我们直接上用法。
语法:tar (-可带可不带)czf 新创建压缩包的名字 要打包的文件。
c表示创建一个压缩包文件,z表示过程中不仅要打包还要压缩,f后面接你的压缩包名字,在zip的压缩中,我们的压缩包名字都是xxx.zip,tar这里我们的后缀是xxx.tar.gz,我们直接简写为xxx.tgz。选项v就是在压缩中显示被压缩的文件。
如果我们要解压tgz文件,只需要改一个选项即可,把c改成x,即tar xzf 压缩包。这种语法默认会解压缩在当前路径,如果要改变其解压路径需要再加一个 -C选项,即tar xvzf 压缩包 -C 路径。