【Linux系统编程】Linux基本指令详解(二)
@[TOC]
前言
<font color = black>这篇文章我们接着上一篇的内容,继续学习Linux中一些常见的基本指令。
1. cp 指令(重要)
在Windows中我们经常可能会复制一个文件,然后粘贴到另一个地方。那在Linux也可以对文件或者目录进行复制,对应的命令就是cp
,那怎么用呢?
演示一下:
<font color = black>当前目录下有一个目录dd,里面是空的,还有一个文件add.c 如果我现在想把文件add.c拷贝到dd目录里,怎么做呢? 很简单:
cp add.c dd
然后我想把目录dd拷贝到上一级目录:
<font color = black> 我发现不行,报错了,这是因为默认只能拷贝普通文件,那拷贝目录怎么做呢? 还是加个
-r
(递归拷贝,因为目录其实就是递归定义的) 这下就拷贝成功了。 并且它里面的add.c也复制过去了。 另外,同样的,如果在拷贝某些文件的时候收到提示,让你输入y或n,如果你就是要拷且不想被提示加个-f
(force 强制)
总结一下:
<font color = black>语法:cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息 常用选项: -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在 -i 或 --interactive 覆盖文件之前先询问用户 -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理 -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
2. mv 指令(重要)
那在Windows上呢,我们还会进行一种操作叫做剪切,相信大家也都用过,那在Linux上能否实现类似的操作呢?
当然是可以的,用到的命令是——
mv
(可以理解为move,移动)。
那在讲之前呢先给大家再补充一点东西:
<font color = black>我们在上一篇文章中有提到一个叫做家目录的概念,那我们登录上自己的机器的时候,其实默认就是处在自己的家目录下的。 对于root用户来说,家目录就是
/root
,普通用户的家目录是在/home/用户名
下,home下面是可以有多个普通用户的,那对于一个普通用户而言,一般来说,它可以在自己的家目录下畅通无阻,当然这并不是说就一定不可以在其它用户家目录下做操作了,只是如果你在其它用户目录下面做操作的时候,可以能受到一些限制和约束。 所以这里想告诉大家的是,我们平时如果登录普通用户去做一些练习比如拷贝,剪切这下操作时,在自己的家目录下进行就行。
那我们下面就来练习一下mv命令,先来mv 文件试一下:
<font color = black> 现在当前目录下有一个文件add.c,现在我把它剪切到上级目录去: 🆗,这样就可以了,我们看到此时上级目录就有add.c了,当当前目录就没有了,剪切成功。
那我想mv目录呢?
<font color = black> 我想把dd移动到上级目录 就可以了 并且目录里面的内容也会直接移动过去,它默认就是递归去移动目录里面的所有内容。
那mv指令呢,除了可以移动(剪切)文件之外,其实还有另外一个功能:
<font color = black>在Windows上我们还可能经常做一个操作,就是给文件重命名 那在Linux上,mv指令其实也可以实现对文件重命名的这样一个功能
演示一下:
<font color = black> 当前目录下有一个名为add.c的文件,现在我们来对它改一下名 就可以了。 那如果如果我这样呢: 当前目录下只有一个add.c文件,上级目录有一个名为dd的目录,那现在我写这样一句指令: 大家看这句指令是什么意思? 我们来看一下结果先 我们看到当前目录没有add.c这个文件了,而上级目录多了一个文件且名字为new.c 所以
mv add.c ../new.c
这句命令其实就是把add.c移动到上级目录,并且把它重命名为new.c 对目录重命名也是一样的!
总结一下:
<font color = black>mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
<font color = black>视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的 目录中。
<font color = black>当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
<font color = black>当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。 常用选项: -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
3. cat 指令
再来学一个命令叫做cat,它的作用其实就是用来查看文件的内容:
<font color = black> 当前目录下有一个文件new.c,我们来给他里面写入一些内容。 使用我们上一篇文章提到的nano: 保存退出
不是说cat可以查看文件内容嘛,那我们来试一下
<font color = black> 🆗,这里就把new.c文件的内容打印显示出来了
echo 命令
然后在这里再给大家补充一点东西:
<font color = black>Linux里面还有一个命令echo,它可以帮我们输出或者说打印信息,比如: 不加双引号也可以,但建议加上。 那这里呢我们看到用echo打印信息的时候默认是通过显示器就直接打印出来了。
输出重定向
那其实还可以这样玩:
我们看到这次echo并没有直接把后面的字符串之间显示出来,而且当前目录下新创建了一个文件tmp.txt,然后echo后面的字符串被写入了tmp.txt文件中。 为什么会这样呢?
echo "aaa bbb c" > tmp.txt
中的>
这个符号可以实现输出重定向。 什么意思呢? 其实就可以理解为重新确定了输出的方向。 那上面的这个过程其实就是一个输出重定向,把本应该输出到显示器的信息写入到了tmp.txt文件中,那这个文件原来是并不存在的,而系统其实会去自动创建对应的文件。
那还想告诉大家什么呢:
<font color = black>上面我们提到echo可以直接通过显示器打印信息,那通过显示器打印信息其实我们可以理解为把信息写入到显示器,所以,其实我们也可以把显示器看成一种“文件”。 另外呢,我们学习什么C语言用的scanf或者C++的cin去获取数据,这些数据来源是啥,是不是来自于我们从键盘输进去去的数据啊,所以其实键盘我们也可以看作一种“文件”。 那从这里呢,我们既可以引出一个结论,这个结论大家可能也听说过,就是——Linux下一切皆文件。
那再回到输出重定向的问题:
<font color = black>我们刚才演示的是重定向到一个不存在的文件,那我们看到结果是自动创建了目标文件,并且把原本要输出到显示器的内容写入到了目标文件夹中。 那如果重定向到一个已经存在并且有内容的文件呢? 通过结果我们其实可以得出>的重定向是一种覆盖式的,会把文件原来的内容覆盖掉,不过其实它是在写入之前把原来的内容清空,然后在把echo后面的内容写入文件中。 清空文件:
>文件名
追加重定向
再来看另外一种玩法:
<font color = black> 这次我们用两个
>
,echo "hello linux2" >> new.c
然后我们发现这次并没有覆盖,而是把内容追加到原来内容的后面了 再试几次: 🆗,确实是这样。 所以呢,>>
可以实现追加重定向,把指定内容追加到目标文件中。
wc 命令
再来了解一个命令——wc
<font color = black>wc可以统计文件的行数、单词数和字节数这些信息: 加选项-l可以只显示行数
输入重定向
上面我们学了cat命令,一般我们后面会跟一个文件,就可以显示文件的内容,那如果cat之后不跟文件名呢:
<font color = black> 🆗,如果我们只输入一个cat,这时我们输入什么,按回车后,显示器就回显什么,一直输入,就一直回显,按crtl+c可以结束。 也就是说,cat如果后面不跟文件的话,它默认是从键盘去读取数据的,我们敲什么,它就读取什么然后并显示出来。 那如果我们不想让它从键盘读呢,那就可以这样: cat 后面加一个
<
,然后跟文件名,这时他就去读取目标文件的内容并显示出来。那这里的<我们把它叫做输入重定向。 欸,那大家可能疑问了,那跟着样写cat new.c
不是一样吗? 🆗,其实它们是有区别的,这个我们后面再说。
那现在我们在来回到我们的cat:
<font color = black>它也有一些常用的选项 首先第一个可以加
-n
: 它可以在显示信息的同时显示文本的行号。 然后-s
,作用是不输出多行空行 啥意思呢? 我现在给new.c中添加一些空行。 然后我再加-s
,来看结果: 🆗,原来有多个空行,现在只显示一行。就是这个作用。-b
对非空输出行编号
总结一下cat:
语法:cat 功能: 查看目标文件的内容 常用选项: -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行
4. more 指令
在讲more命令之前我先创建一个大文本:
<font color = black>
cnt=0; while [ $cnt -le 1000 ]; do echo "hello $cnt"; let cnt++; done > new.c
还是放到new.c文件中,这条指令大家不懂没关系,不用管,就是把产生的文本内容重定向到new.c中,需要的话直接用就行了。 那写入之后我们用cat查看一下: 现在文件里面已经有1000条文本了,上面的已经看不到了。 那我们说cat可以查看文件的内容,但是呢,一般我们用cat查看一些短文本是比较好的,如果是比较长的,就像现在这个,cat一下直接刷屏了,想看上面的还得拉上去,比较麻烦。
那有没有其它方法呢?
<font color = black>有的,这种情况我们就可以用一个命令叫做
more
,那more的功能呢类似cat。 但是呢more会默认按照我们屏幕的大小去显示文本信息: 我们输入more new.c
,敲回车: 它就会从第一行开始显示,这一屏幕满了,就停止显示后面的信息了。 然后我们敲回车就可以一行一行往下查看: 要退出的话按q
就可以退出。
more命令:
语法:more 功能:more命令,功能类似 cat 常用选项: -n 对输出的所有行编号 q 退出more
5. less指令(重要)
与more类似,还有一个命令叫做less,它也可以对文件内容进行分页显示:
<font color = black> 但是呢,比more好的是,它不仅可以下翻,还可以上翻,直接按上下键就可以了。 那除此之外,它还支持进行搜索,在浏览状态下直接按
/
,就可以跟相应的信息进行搜索 比如要搜索88,在/后输入88,然后回车 如果存在,就搜索出来了 另外,按n
(next),还可以搜索下一个88 如果搜索的内容不存在的话会提示你:
总结一下:
<font color = black>less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。 less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看。 但若使用了 less 时,就可以使用 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容! 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件 功能:
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
选项:
-i 忽略搜索时的大小写 -N 显示每行的行号 /字符串:向下搜索“字符串”的功能 ?字符串:向上搜索“字符串”的功能 n:重复前一个搜索(与 / 或 ? 有关) N:反向重复前一个搜索(与 / 或 ? 有关) q: quit
6. head指令
head指令的功能和它的名字一些浅显易懂。
如果head后面直接跟文件名:
<font color = black> 它默认会把对应文件的前10行显示出来。
当然我们也可以自己指定想要显示的行数
<font color = black>
-n
后面加行数,当然这个n其实可以不加:
那head的功能就这么简单,总结一下:
<font color = black>head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法: head [参数]... [文件]... 功能: <font color = black>head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。 选项: <font color = black>-n<行数> 显示的行数(n可以不加)
7. tail指令
学了上面的head,tail就很好理解了
<font color = black> tail后面直接跟文件名,默认显示后10行 当然也可以自己指定行数,和head一样 -8,就显示后8行。
总结一下:
<font color = black>语法: tail[文件] 功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。 选项: -n<行数> 显示行数
8. 命令行管道(了解)
下面我们再来了解一个东西。
<font color = black>如果我现在想统计一个文件有多少行? 那我们上面了解过一个指令wc嘛,他可以统计文件的信息,-l就是只显示行数 没毛病,这就统计出来了。 那我们上面还学了cat,可以显示文件内容
那现在有这么一条指令,也可以统计出行数
<font color = black> 那条指令是什么意思呢?这里的|又是啥?
🆗,这就是接下来要给大家介绍的一个东西
<font color = black>这个
|
在Linux中我们把它叫做管道 那说到管道,大家应该并不陌生,我们现实生活中也有很多管道。 那管道呢一般都是用来传输资源的,它肯定有入口也有出口,比如说水管就是传输水资源的。 那在我们的计算机里面,最重要的资源就是数据。 所以计算机中的管道就可以理解成连接两条指令去传输数据的一个东西。 那现在再来看上面那条指令cat new.c | wc -l
该怎么理解它呢?
<font color = black>对于管道,我们也可以把它当作一个文件来看。 在
|
的两侧其实是两个命令,首先cat new.c
,正常情况下它是把文件的内容直接显示到显示器上(可以理解成把文件内容写入到显示器这个“文件”中了),那现在它连接到了管道上,所以就把文件的内容写入到了管道里。 那后面的wc -l
,它正常情况是后面跟一个文件,统计该文件的信息,但是现在它接收了管道里面输出的文件数据,所以就可以统计管道输出的文件的信息。 那对于管道,包括前面提到的重定向,我们后面都会进行详细的讲解,现在大家简单了解一下,会用就可以了。
那现在有这样一个问题:
<font color = black>对于我们上面创建的那个大文本new.c,现在有了head和tail,我们想拿到文本的前几行或者后几行都是很容易的。 那如果我现在想拿到中间的,比如500到520行的内容,可以怎么做呢? 大家可能会想到这样的方法: 你不是想拿到500到520行的吗,那我可以先拿到前520行的 我用head获取前520行的数据,但是head直接显示到显示器上了,所以,我可以把它重定向到一个文件里面 然后tmp.txt这个文件里面就是前520行的内容。 那然后呢,我们用tail获取tmp.txt的后20行是不是就行了
但是这个过程我们利用了一个临时文件tmp.txt,那如果不让你创建临时文件,能做到吗?
<font color = black>那当然是可以的,我们就可以通过管道来搞 这样就可以了,简单解释一下: cat new.c正常是显示到显示器上,但现在我们通过管道传给head -520,只取前520行,然后再通过管道传给tail -20,就拿到了500到520行的内容。 那继续我想统计一下输出的结果的行数,怎么办 再添一条管道,输给wc统计就可以了。
管道的了解就先到这里。
9. 时间相关的指令
下面呢我们来学习一些时间相关的指令。
显示时间
首先如果我们想在Linux中获取时间信息
<font color = black>就可以用一个命令叫做date:
另外呢,我们还可以自己去指定时间显示的一个格式
%H : 小时(00..23) %M : 分钟(00..59) %S : 秒(00..61) %X : 相当于 %H:%M:%S %d : 日 (01..31) %m : 月份 (01..12) %Y : 完整年份 (0000..9999) %F : 相当于 %Y-%m-%d date 指定格式显示时间: date +%Y:%m:%d
演示一下:
<font color = black>假设我只想看年份 年份+月份 注意,中间这个
-
是我们自己随意指定的,可以任意更改 显示年月日 年月日时分秒全显示
其它的大家可以自己试一下,总结:
date显示 date 指定格式显示时间: date +%Y:%m:%d date 用法:date [OPTION]... [+FORMAT] 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下 %H : 小时(00..23) %M : 分钟(00..59) %S : 秒(00..61) %X : 相当于 %H:%M:%S %d : 日 (01..31) %m : 月份 (01..12) %Y : 完整年份 (0000..9999) %F : 相当于 %Y-%m-%d
时间戳
然后我们再来了解一个东西——时间戳
时间-》时间戳
如果我们直接
date +%s
<font color = black> 显示的这个东西就是时间戳,那这个数值其实是从1970年1月1日0时0分0秒(格林威治时间,北京时间是1970年01月01日08时00分00秒)到现在这一时刻的累计的秒数。 之前C语言文章有实现过扫雷和三子棋的小游戏,里面生成随机数时设置随机数生成器其实传的就是时间戳
时间戳-》时间
<font color = black>那这个时间戳其实跟我们现实生活中用的这个时间是可以进行一个对应的转换的 那在Linux上我们也可以通过相应的命令去转换 当然我们也可以指定格式去显示
总结:
<font color = black>时间->时间戳:date +%s 时间戳->时间:date -d@1508749502 Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
设定时间
<font color = black>date -s //设置当前时间,只有root权限才能设置,其他只能查看 date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00 date -s 01:01:01 //设置具体时间,不会对日期做更改 date -s “01:01:01 2008-05-23″ //这样可以设置全部时间 date -s “01:01:01 20080523″ //这样可以设置全部时间 date -s “2008-05-23 01:01:01″ //这样可以设置全部时间 date -s “20080523 01:01:01″ //这样可以设置全部时间
10. cal指令
cal(calendar)命令可以查看日历
<font color = black>如果只敲一个cal,默认显示本月的日历 另外,还可以指定年份查看某一年的日历 还有
cal -3
显示系统前一个月,当前月,下一个月的月历
总结:
<font color = black>cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。 命令格式: cal [年份] 功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份 常用选项: -3 显示系统前一个月,当前月,下一个月的月历 -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数) -y 显示当前年份的日历
- 点赞
- 收藏
- 关注作者
评论(0)