@toc
写在前面
今天我们首要的目的就是把我们常用的指令和大家分享完,我们添加一些管道和压缩的命令,指令这个部分到这里就基本结束了,当然,这些都是最基本的,后面我们用到其他指令的话,也会和大家解释的,我们先对Linux上手.
man 指令
man指令首先我们要知道的是它可以查询指令,也就是说我们如果不知道一个指令作用是什么的时候,我们可以通过man 指令名来查.这我们需要和大家分享三种用法,大家先记住就可以了.
下载man指令
由于我们用的是云服务器,我们可能没有man指令,这里我们需要下载一下.我们需要在root用户下下载.
如何进入root用户,这里有两种方法.
- 进入XShell,直接用root登录
- 在普通用户下执行 su- 命令,回车后输入root密码
在root用户下下载man 执行下面指令
[bit@Qkj 07_03]$ yum install -y man-pages查询指令
下面就是查找的就是ls指令的作用.
[bit@Qkj 07_03]$ man lsman man
既然man可以查询指令,那么man可以查询man指令吗?man也是一个指令,自然是可以查询的.
[bit@Qkj 07_03]$ man man查询标准库
是的,你没有看错,man指令可以查询标准库里面的函数,包括C++/Java等语言,这些语言的库是我们需要下载的,但是由于Linux是由C语言写的,所以自带标准库,我们可以直接查询.
[bit@Qkj 07_03]$ man printf你会发现,我们不是要查printf函数吗,怎么出来的是指令,是的,在Linux中,printf变成了指令,我们要查函数原型的话需要加上个东西.
[bit@Qkj 07_03]$ man 3 printf查询系统调用
这里大家先不用知道,我们先给出用法,在后面的几篇博客都会和大家分享的.
[bit@Qkj 07_03]$ man -2 fork总结
man 指令是我们以后经常用到的指令,主要的作用就是查询<font color = blue>指令的用法.</font>man指令面带不同的数字,代表不同的用法.
- man 1 指令名 也就是 man 指令名,我们把1给自动省略了
- man 3 其他 查询系统调用,大家先不用知道,记住就可以了.
- man 3 函数名 查询标准库里面的函数
cp 指令
cp指令是拷贝的指令,它可以拷贝文件或者是目录,说是就类似于Windows下面的复制粘贴.
拷贝普通文件
下面是我们最基本的用法.
[bit@Qkj 07_03]$ cp 源文件 目的文件假设我们把一个文件里面的内容拷贝导另一个文件中,这个文件里面的所有内容都会覆盖掉.
拷贝目录
我们需要看看它如何拷贝目录.
cp 默认是不能拷贝目录的,要是需要拷贝目录需要带上选项.
我们需要给他带上一个-r选项,这里也是递归拷贝的意思.
[bit@Qkj 07_03]$ cp -r 06_25 06_25-bak指定路径拷贝
在Windows中,我们可以先复制一个普通文件或者目录,然后再去其他目录中,这个就是指定的路径拷贝,在Linux中我们也是可以的.这里普通文件和目录是一样的,无非就是带不带选项的区别.
把源文件拷贝到到上级目录,这里我就相对路径来演示,绝对的路劲和它一样.
[bit@Qkj 07_03]$ cp file.txt ../file-bak.txt总结
cp指令也是我经常见到的,一般在我们准备修改某个文件时,我们防止自己修改错误,先备份一个.来总结一下它的具体用法和选项.
- 我们可以不指定路径,默认在本目录下复制粘贴,也可以指定目录
- 复制普通文件时,可以直接cp,但是复制目录时,需要带上选项-r
- 有时由于权限的问题,可能会询问是不是要复制,我们避免被询问,可以带上-f选型,也就是强制复制
mv 指令
mv指令是移动的意思,这里可以指移动文件的位置,也可以值修改文件的名字.这个指令说实话现在还不太重要,但是我们确实需要认识一下.
- 剪切+发送到 这个类似我们把一个普通文件或者是目录剪切掉,后面复制到其他目录
- 重命名 如果我们觉得某个文件的名字实在是太挫,需要修改,这里可以支持重命名
剪切+发送功能
这个很简单,就是我们把文件复制好,把文件发到我们想要的目录中,并把源目录的文件给删除.这里普通文件和目录的做法是一样的.
重命名
这个更好理解了,我们如果不喜欢某个文件的额名字就可以把他给重新命名,适合普通文件和目录.
[bit@Qkj 07_03]$ mv file.txt file2.txt名字相同
如果我们想要名字当地目录已经存在了会怎么样,我们先来看看.这里用目录在举例子.
可以很轻易的看出,我们重命名的文件会直接把原来的文件给覆盖掉.
总结
我们把mv指令给总结一下,包括一些选项.
下面的是关于重命名的
- mv 文件名1 文件名2 无论文件2是不是存在,都会把文件1变为文件2
- mv -i 文件名1 文件名2 如果文件2存在,他会询问要不要覆盖
- mv -f 文件名1 文件名2 无论文件2是不是存在,都会强制把文件1变为文件2
文本查找指令
我们先看看再不打开编辑器的情况下打开文本文本文件,查看里面的内容,这些都是很简单的,最起码我们现在用的很简单.
cat 指令
cat指令最适合我们现在的处境了,我们现在在Linux中很少写大量代码,最多就是一些helloword之类的,我们打开一个很少代码的的文件有点麻烦,cat指令可以帮助我们.
[bit@Qkj 07_03]$ cat 文件名+后缀-n选项
要是我们想要给自己的文件带一个行号打印出来,这里也可以做到
[bit@Qkj 07_03]$ cat -n 文件名+后缀tac 指令
这个指令的作用和cat指令的作用是一样的,不过它是从最后一行开始打印的,而且不支持行号这个选项.
more 指令
现在我想问,如果我们的文本很大,请问如果我们的文本很长,请问你使用cat和tac指令吗?必定不会啊,我们电脑的屏幕就那么大,一旦文件很大,肯定会发生刷屏现象,我们这里有提供了几个指令.
我们先来一个准备工作,先创建一个1w行的文本文件,你把下面的指令跑一下就可以了,我们这里先用着,过几个博客再说原理.
[bit@Qkj 07_03]$ cnt=1; while [ $cnt -le 10000 ];do echo "hello bit $cnt"; let cnt++;done > myfile.txt这样我们就可以得到一个含有1w行的文本文件,我们使用cat指令试试,你会发现它会刷屏.
这里就需要我们这个指令了,我们先来看看看用法,再说它的作用.
[bit@Qkj 07_03]$ more -10 myfile.txt这样的话,你就可以得到前10行代码,想看后面的就用键盘上的方向键就可以了,注意这个第一次出现多少行是你自己的确定的,而且我们如果不想看了,可以使用字母q退出.
less 指令
我们前面谈了more指令,但是这个指令有一个缺陷,他只能往下调,不可以往上刚,也就是我们必须按照代码的顺序来看,这个很不友好,所以我们出现了less指令,这个可以很好的帮助我们解决相应的问题.
- less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
- less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
- 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
- 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜
我们和之前一样,还是先来卡看现象,这里我想给大家看看最基本的演示,关于它的其他用法.
我们可以发现,如果我们使用下面的指令,可以得到一屏幕的代码,我们可以使用上下键来进行上下翻,按q键退出.
我们这里就演示最基本的用法.
[bit@Qkj 07_03]$ less myfile.txt重定向
这里我们来见识两个符号,前面我们已经见过了,我们来看看吧,这里我们只讲用法.
- 输出重定向 >
- 追加重定向 \>\>
- 输入重定向 <
输出重定向
我们还是先来看看用法.
从这里我们可以看出,所谓的<font color = green>输出重定向就是把原本该输出到显示器中的内容保存到一个文件中</font>
这里我们们还要认清一个事实,它会把原来文件的里面的内容都给删除掉,只保存自己的,很是霸道.
追加重定向
既然>有缺陷,那么这里有一个解决方法,又出现了一个追加重定向,我们可以在文本后面来写入一些内容.
再析 cat
我们这里再来认识一下cat的用法,如果我们直接打入一个cat指令,你会发现,你输入什么,在屏幕上就会得到什么,也就是说,cat输入后,默认打开了一个stdin流和stdout流,分别是键盘和显示器,这里我们也可以使用重定向.
输入重定向
那么我们就可以见识另外一个重定向了,我们使用cat输入重定向来打开一个输入流,这里我们来看看现象.
[bit@Qkj 07_03]$ cat < file.txtctrl c
如果我们发现,自己想要退出一个程序,但是不知道该如何做,记住我们可以无脑ctrl c,一定不要ctrl z,我们来看看.
ctrl z
记住,我们千万不要使用ctrl z来退出,他只是暂定,但是任务还是存在的,我们看看.
那么如果我们不小心按到了ctrl z,该怎么办?不要担心,我么可以使用下面的方法.
fg 指令
我们发现,在任务前面存在一个数字,这是任务编号,我们可以这样做,这样又可以重新打开这任务了,我们就可以ctrl c了.
[bit@Qkj 07_03]$ fg 1jobs 指令
这里个大家附加一个指令,我们可以通过它来看看我们有几个任务.
一切皆文件
我们现在要分享一个很重要的观点,这是我们学习Linux的基础,可以说是重中之重.再几年前前网上有这么一个梗,"神马都是浮云",可以这么说,只要我摆烂了,困难就追不上我,再Linux中也是如此,或许Linux中存在很多东西,但是Linux把他们都看作是文件,我按照用规定的模式去处理就可以了,这样看待事情就简单多了.今天的这个就是一个开头,做一个感性的理解.
head 指令 & tail 指令
我们再来看看这两个指令,作用我列出来
- head -n 文件 查看前n行 不写默认10行
- tail -n 文件 查看后n行 不写默认10行
管道
这里有一个问题,我们如何查看第300行到350行的代码?
- 辅助文件
- 使用管道
辅助文件
这里我提供两种解法.
第一种解法就是我们把前350行保存到一个文件中,然后在使用tail来查看.
管道
上面的方法有一点问题,我们不能每次查看文件都创造一个文件吧,这是很不友好的,这里还有第二个方法,使用管道.先看现象.
[bit@Qkj 07_03]$ head -350 myfile.txt | tail -51这个'|'就叫做管道,那么什么是管道文件,在现实生活中我们也存在管道,比如天然气管道,我们通过管道运输<font color = red>资源</font>,在计算机中,我们也是通过管道来运输资源,在一家计算机公司中,最宝贵的资源就是数据,这便是计算机世界的石油.管道就是传输数据资源,管道重要的应用之一就是实现级联多个命令
我们现在只知道怎么用就可以了,之后会用代码来实现的.
date 指令
我们可以通过date指令来查看当前的时间,这里还提供年月日时分秒的的查找.
我们先来看最基本的,剩下的截了一张图,大家看看用法就明白了.
[bit@Qkj 07_03]$ date至于其他的用法,大家一看就可了解了.
时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
上面的的时间指令不重要,时间戳才是重要的,对于一个大型程序,写一个日志是非常重要的,如果你的项目上线了,突然你发现自己的程序挂了,但是你不知道什么时候挂的,但是你丝毫不慌,因为你写了日志,你的程序执行的重要代码和时间都被保存了下来,所以这就是日志的重要性.
时间戳转化器
我们如何把时间戳戳转化成格式的时间,也就是人可以识别的时间格式,第一种方法就是网上搜索时间戳转化器,那么在Linux中可以执行下面的指令.
[bit@Qkj 07_03]$ date +%Y-%m-%d_%H:%M:%S -d@0cal 指令
这个就是一个附带品,就是查找每年日历,默认是当前月日历.
[bit@Qkj 07_03]$ cal查找上个月和下个月的日历
查找1900年的日历
find 指令
是一个查找文件的命令,它的功能类似Windows环境下的一款软件,叫做everything,但是这个指令需要知道我们文件所在的目录地址,很强大,选项也很多,但是今天只学最基本的.
[bit@Qkj ~]$ find ~/104/2022/07_03/main.cgrep 指令
grep 指令在文件中搜索字符串,将找到的行打印出来 ,它是一个行文本查找工具.
我们先来看卡场景吧.
下面我来见识一下grep 指令的作用,这里要有三个方面需要谈.
- 默认的话,是区分大小写的
- -i 不区分大小写
- -v 可以理解反向查找