1. mv 指令 (move)
语法:mv[选项] 源文件或目录 目标文件或目录
功能:将源文件或目录剪贴到一个新位置,或给源文件或目录改名但不会改变其内容
常用选项:
-f :force 强制,如果目标文件已经存在,不会询问而直接覆盖
简单来讲,不管前面的 src 是文件或是目录,如果后面的 dst 是文件那么就是重命名src,如果是目录就是将src剪切到该目录下
可以看到,我首先创建了目录dir和文件test.c,之后在红框中给他们改名,在绿框中将文件剪切到dir1目录中。当然目录也可以连带其下所有文件都剪切到另一个目录中,只是这里我没有演示。在给移动到的路径的时候同时还可以重命名。
2. cat 与 tac 指令
语法:cat [选项] [文件]
功能:查看目标文件的内容
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
这个指令很简答,我们上节已经用过了,这里就不展示了,大家可以去试试它的几个选项。
如果cat后面什么也不跟,那就是输入什么就打印出什么。
tac指令就是以行为单位,逆序打印文件。
3. Linux重定向技术
首先我们要明确一个概念:Linux下一切皆文件。就是说我们的显示器,键盘都被当做文件来看待,scanf / cin 就是从键盘文件读取数据,printf / cout 就是向显示器文件写入,这些交互命令都是在文件之间进行交互的方案。
echo 指令
echo指令就是向显示器文件写入,最后会自带一个换行符。
那么既然echo可以向显示器文件写入,那能不能向其他文件写入呢?
3.1 输出重定向
输出重定向就可以解决上面哪个问题,将本来要输出到显示器文件的内容,重定向输出到别的文件中去。
语法:> 文件名
红框是输出重定向的命令,我们发现那一大堆 a 并没有像之前那样写入到显示器文件中,而是在当前目录下新建了一个 test.txt 文件并写入了。也就是说,将本来要写入显示器文件的内容,重定向到了一个新的文件中去了。
刚才是对一个不存在的文件进行输出重定向,那么如果对一个已经存在的文件进行输出重定向会是什么效果?
可以看到输出重定向每次写入,都要将老的内容清空,然后再从头写入。
那么我们可以利用输出重定向的这个特性做点有意思的事情。
1. 当输出重定向一个已存在文件时,可以在不进入这个文件的情况下,清空这个文件。
2. 当输出重定向一个不存在文件时,可以起到新建空文件的效果,而不用touch了。
3.2 追加重定向
如果不像在加入内容的时候将文件清空,那么我们就可以采取追加重定向的方案。
语法:>> 文件名
可以看到追加 bb 的时候并没有删掉 aa ,同时如果不想用echo那个自动补在最后的换行符,可以用printf追加,当然,printf 写的内容也可以搞上转义字符 \n 起到换行效果。
3.3 输入重定向
语法:< 文件名
前面cat的时候我们提到过,如果cat后面什么都不跟,就是默认从键盘输入,然后输出到显示屏上,也就是所谓输入什么就在显示屏上输出什么。
那么此时我们可以用输入重定向,让 cat 不从键盘输入,而是从某个文件输入,然后输出到西显示屏上。
这段命令中cat后面什么文件也没有,那么就是默认的从键盘输入,然后输出到显示屏,如果此时不想再输入了,就可以 ctrl+d 或 ctrl+c 退出。
上面这段命令中,我们先给之前的new.txt文件追加一个 ee换行 然后用输入重定向的方案用cat 打印到屏幕上
4. less 指令
语法:less [选项] 文件
功能:less可以通过上下键随意浏览文件,还具备文件中的关键字搜索功能
选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
我们先输入这样一段代码脚本,创建了一个10000行的大文件
此时如果用cat去展示这个文件,结果就是会刷屏,一直刷到展示完整个文件
但此时如果我们用less去打开这个文件,就会从第一页开始展示,然后可以通过键盘上下键来逐行移动
最下面那个冒号是可以通过输入 / 或 ?来搜索文件中的匹配内容,搜索到后还可以通过 小写n 和 大写N 来向下或向上继续查找
最后不想看了可以 q 退出,当然具有less相似功能的还有more指令,但是比起less来太矬了。总结一下,小文件可以用cat展示,大文件可以用less展示。
5. head tail 与 管道 |
如果我们只想看一个文件的前几行或者后几行就可以用head和tail指令
可以看到,这里都是默认打印出前10行,或后10行,但是我们也可以控制打印几行
那如果我想看 [ 5000 , 5010 ] 区间内这11行数据呢?
此时可以利用管道 |
| 就是管道的命令,我们之前说过Linux下一切皆文件,管道也是一种文件。这段命令的含义就是先将绿框命令所生成的文件(打印出1-5010行)放到管道中,然后把管道中的内容交给橙框中的命令生成最终文件,也就是打印出 1-5010行 中的最后 11行。
管道其实就像是一种命令生成文件的加工流水线,这个管道想弄多长就弄多长
最后 wc 命令 是word count字符统计的意思 -l 就是统计有多少行
6. 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的显示方案,并且还可以自定义分隔符,如果想用空格分隔的话不能直接输空格,要转义一下 \空格
下面介绍一下时间戳,在互联网还没有发展起来的时候,各地都有时差,但是因为通信速度的限制,各地区之间的交互并不多,因此时差的影响也相当小。但是互联网时代的兴起,信息通讯的加速,各地区之间的通讯因时差出现了很大的漏洞。那么后来有人在英国格林尼治开了个会,规定 1970年1月1日 0时0分0秒 为时间戳起点 0 自那时起每过一秒,时间戳就 +1,于是自那时起世界时间就有了一个统一的标准。
我们可以打 +%s 打印一下当前的时间戳看看
同时时间戳还可以用 -d @时间戳的方式解意出来,那么我们发现时间戳为0的时候是8点而并不是0点,这是为什么?是因为中国通用的北京时间与英国格林尼治时间有8小时的时差,这个时差系统已经换算进去了。
时间戳的一大重要用途就是写文件日志时记录时间使用。
7. cal 指令
语法:cal [选项] [月份] [年份]
功能:查看日历信息,如果只有一个参数表示年份,如果有两个参数表式月份和年份
选项:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
抛去这个命令看起来很帅不谈,它实际上没有作用了。
8. find 指令
语法:find 路径 -选项
功能:find的选项众多,都列出来不可能,可以自行到man里面查找,其基本功能是在文件树中查找文件,并作出相应的处理
常用选项:
-name 文件名(按文件名查找文件)
-o or或者
9. which 与 指令
which是专门用来查找指令文件的指令,比如我们which几个指令
可以看到指令们也是有路径,有位置的,我们打开这个位置
可以发现指令其实就是一些 bin路径 下的一堆二进制文件,所以说,指令并没有多神奇,它就是一些文件,在使用的时候会去调用这些文件,只不过这些放在 bin路径 下的文件调用的时候不用指定路径罢了,或者指定路径的话我们也可以正常调用这些指令文件
红色框中是两种方法运行指令文件,显然指定路径的调用指令文件的方案很麻烦。之后橙色框中我们回到了lesson3路径下,并且编译了一个打印 hello world 的程序,并起名 hellocmd ,但是这种状态下的可执行文件只能通过指定路径的方式使用。但是当我们把这个可执行文件拷贝进 bin 目录下之后一切就不一样了,hellocmd变成了我们自创的指令了,不需要指定路径就可以调用了。
说了这么多,主要就是解释普通二进制可执行文件,和bin路径下的二进制可执行文件的区别。说实话区别并不大,只是bin路径下的二进制可执行文件不需要指定路径,系统会自己进bin去找,因此我们把这种不需要显示写出路径的可执行文件颁了个奖叫"指令"。
9.1 命令别名 alias
我们前面在which指令的时候会发现比如 ls 描述有 alias 一堆,这其实是描述ls别名的意思
我们看上面这一段指令,之间 ls 的时候打印出来的文件有颜色区分,但是通过路径调用的 ls 没有颜色区分。实际上这就是 ls 命令被起了别名的效果,当我们使用 ls 命令的时候,执行的指令是 ls --color=auto 指令,当我们在用路径调用的时候后面再加上这给color命令也会有颜色区分文件的效果。
实际上我们自己也可以用 alias 给命令自定义设置别名
ahaha就是我们自定义设置的别名,并且它被放在了存放指令文件的目录下。但是这个我们自定义的别名是内存级的别名,当我们退出系统重进后,这个自定义的别名就没有了。
这也是为什么我经常使用 ll 来代替 ls -l 的原因。
10. grep指令
语法:grep [选项] 搜寻字符串 文件
功能:在文件中搜索字符串,将找到的行打印出来,行文本过滤工具
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
11. zip unzip指令
zip相信大家都不陌生了,就是打包压缩的意思,unzip就是解压
语法:zip 文件名.zip 要压缩的目录或文件
unzip 文件名.zip (解压到当前目录)
unzip 文件名.zip -d 目录 (解压到指定目录)
常用选项:
-r 压缩目录的时候如果不选择递归压缩,它就只会压缩目录本身,而不带上目录下的文件
如果zip/unzip不能用,就是没安装,yum install -y zip unzip 安装一下就好
现在我们已经将lesson3目录递归压缩好了,下面我们将压缩包 -d 解压到test目录下
这样,我们就将压缩包中的内容完整解压到了test目录下。
11.1 sz rz Linux与Windows间文件传递
我们安装命令 yum install -y lrzsz ,其中sz可以从Linux中传文件到Windows中,rz可以从Windows中选择文件传到Linux中。
我们选择传到桌面上,之后就可以在Windows的桌面上看到这个压缩包
打开之后该有的东西也都有,rz的使用方法同理,系统会让你选择从Windows中传过来的文件。
12. tar 指令
语法:tar [-选项] 目标文件或目录 源文件或目录
常用选项:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
tar压缩方案对应的文件后缀应该为 .tar.gz 下面我们使用的时候可以简写成 .tgz。我们在压缩的时候选择 czf 三个选项,c是指我要建立一个压缩文件,一会压缩的东西就放到这里面,z可以理解成需要压缩,f是后面紧跟压缩文件的文件名。
如果再选上v的话就会把打包的过程也打印出来。
tar解压缩的我们选 xzf 这样是直接解压到当前目录下,还可以用C(大写)指定目录,就像unzip中的-d一样
13. bc 指令
这个指令就是Linux中的一个计算器
输入bc进入计算机页面
然后我们可以随意计算
这个计算器可以通过管道帮我们进行计算
14. uname -r查询内核版本
计算机的体系结构指的是芯片的架构,我们一般使用的芯片架构都是x86的,这种架构又被称为amd,移动设备比如手机一般用的是arm架构。
如果在查自己计算机的体系结构时,如果只查到了x86,说明这个计算机的芯片是32位的,不过现在的一般都是x86_6这种CUP架构是64位的。
uname -r 可以直接输出内核版本
15. shutdown 关机
语法: shutdown -[选项]
常用选项:
-h :将系统的服务停掉后,立即关机
-r :在系统的服务停掉后就立即重启
-t sec :sec是秒数,在几秒后关机
如果你的操作系统在云服务器上的话开机也要在相应云服务器上开机。