【Linux】基本指令(下)
目录
- 一、详解指令
- 7. man 指令
- 选项1~9
- 补充知识1(上)
- 补充知识2:echo 指令
- 补充知识3:重定向操作符 `>`
- (1)清空文件的作用
- (2)新建文件的作用
- 补充知识4:追加重定向 `>>`
- 补充知识5:cat 指令
- 补充知识6:输入重定向 `<`
- 补充知识1(下):证明
- 8. cp 指令
- (1)-r -f 选项
- (2)特殊用法:拷贝且更改文件名
- (3)特殊用法:覆盖文件
- 补充知识7:什么是指令?
- 补充知识8:which 指令
- 补充知识9:alias 指令
- 9. mv 指令
- (1)特殊用法:更改文件名
- (2)特殊用法:移动到其他路径且更改文件名
- 10. cat 指令
- (1)-n 选项
- (2)-s 选项
- (2)-b 选项
- 补充知识10:tac 指令
- 补充知识11:关于日志
- 11. more 指令
- 12. less 指令
- 13. head 指令
- 14. tail 指令
- 补充知识12:管道操作符 `|`
- 15. date 指令
- (1)按格式输出时间
- (2)显示时间戳
- 补充知识13:时间戳
- 16. cal 指令
- 17. find 指令
一、详解指令
接上回基本指令(上),继续讲解基本指令(下)
7. man 指令
作用:查找指令的文档
简单理解,系统内部有一个“男人”,有什么不知道或者想不起来了可以问问他。
当有指令不知道是用来干什么的了,可以用man
指令查一下
例如查询pwd
指令,按q键就可以退出了
也可以man man
,man
本身也是一个指令,man手册分为9个章节,默认从1往后查询,只要查到了就不向后继续查找了。
前三个是比较常用的,我们可以简单了解一下。
手册1:默认的手册,查询可执行程序或者是命令行中的命令
手册2:查询系统调用
手册3:查询库函数(C语言)
其他暂且先不用了解
选项1~9
作用:从指定手册进行查询
man
也可以查库函数,例如printf,需要在man
后面带上选项3
,表示从第三个手册中查询printf
输入/return val
可以直接跳转到函数的返回值部分
但其实man
指令一般不用来查询库函数,因为C/C++的库函数有多种渠道可以查询,man
指令一般用查询指令以及指令所对应的选项
有的同学可能无法使用man
指令,原因是没安装,安装指令如下:
yum install -y man-pages'CentOS系统'
apt install -y man-pages'Ubuntu系统'
补充知识1(上)
Linux下一切皆文件!
在过去,有的同学可能不太理解,什么是输入、输出、写入、读取
这里我们先来理解一下关于:输入、输出、写入、读取这几个概念
注意一下数据的流向和这几个名词的对应关系,就可以理解了。
我们刚刚说过Linux下一切皆文件,那么
把数据打印到显示器,显示器是文件,把数据输入(写入)到显示器
从键盘读取数据,键盘也是文件,把数据从键盘文件中输出(读取)出来
补充知识2:echo 指令
作用:默认将跟在指令后面的内容打印在显示器上(向显示器文件进行写入)
也可以带上单引号或者双引号,Linux中单双引号不做区分,都表示字符串。
补充知识3:重定向操作符 >
作用:更改输出方向
例如:echo hello > test.txt
,将echo
指令原本打印在显示器上的hello
写入到test.txt
文件中去,在指令后面跟上一个>
可以进行输出重定向,也就是向指定文件进行写入。
如果文件不存在,就新建一个文件。
再例如:ls -l
是在做什么,其实就是把目录里面的内容写入到显示器文件中去,所以目录中的内容显示在显示器上,我们也就可以看得到
ls -l > ls.txt
就把本应该输出到显示器的内容写入到ls.txt
文件中去了
以此类推任何具有输出的指令都可以输出重定向。
(1)清空文件的作用
准确的说,>
操作符会先清空文件的内容,再对指定文件进行写入
这里我们可以发现,hello.txt
里原本的hello
,被清空替换成了happy
既然会先清空文件再进行写入,那不使用echo
直接使用>
,输入指令> hello.txt
会怎样呢?
果然文件被清空了。
所以当你想要清空一个文件的时候:> 文件名
,即可清空文件内容。
(2)新建文件的作用
单独使用>
也可以新建文件,当目标文件不存在时,> 文件名
,就可以新建一个文件
补充知识4:追加重定向 >>
作用:将前面指令的输出内容追加到后面的文件中去
不同于>
这个操作符,>>
它能追加内容
补充知识5:cat 指令
用法:cat
+文件名
作用:读取文件内容
前面我们也用过好多次了
下面我来介绍一种之前没提到过的
其他用法:单独使用cat
指令
作用:默认从键盘中输入内容,输入什么打印什么,其实就类似于ls
指令默认将内容打印到屏幕上
补充知识6:输入重定向 <
作用:更改输入方向
前面讲了那么多类似的,现在我们已经轻车熟路了
cat
指令默认从键盘输入,那输入重定向就可以改变它的默认输入方式了呗?
这里我们可以发现,本应该从键盘输入,现在从test.txt
文件中输入,而且<
好像是可以省略的
补充知识1(下):证明
刚刚我们提到Linux中一切皆文件,其实我们Linux系统的终端,本质上也是一个文件
/dev/pts
目录下的0
文件就是我打开的终端1
我再打开另一个终终端试试呢,可以发现果然多了个1
文件,它就是终端2
再用echo
指令+输出重定向试试
这也就很好的证明了,在之前的我们看起来不像文件的东西,已经证明它是文件了,至少目前就这两个终端来说
8. cp 指令
语法:cp [选项] 源文件 目标路径
作用:复制文件或目录
全称:copy
(1)-r -f 选项
作用:-r
表示递归式的拷贝一串目录,-f
表示强制(不询问),老朋友了不赘述
我们发现当我们想cp
一个目录时,失败了,这是因为,目录是树形结构需要递归
(2)特殊用法:拷贝且更改文件名
语法:cp 源文件 目标路径/新文件名
,此时cp指令会帮我们把文件拷贝到指定路径下且更改名称
确实帮我们拷贝到了目标路径下,且更改了文件名
(3)特殊用法:覆盖文件
语法:cp 源文件 目标路径
,当目标路径下已经有了与源文件相同的文件时,会对目标路径下的同名文件进行覆盖
补充知识7:什么是指令?
其实我们之前用到的指令,都是在/usr/bin
路径下的可执行程序,指令的本质:就是程序!特定系统路径下的程序!
我们不止可以直接输入指令,也可以用指令的绝对路径来执行:
比如说:pwd
,比如说:ls
补充知识8:which 指令
作用:查询指令所在的路径
这里我们发现了alias
,那什么是alias
呢?
补充知识9:alias 指令
作用:给指令起别名
不知道有没有细心的同学发现刚刚,我们使用绝对路径下的ls指令时,test1目录是没颜色的,这是为什么呢?
当我们在绝对路径下添加--color=auto
时,我们发现它就有颜色了
这时就可以推断出,原来是--color=auto
起的作用,ls
指令本来是不带颜色的,只不过是用alias
指令给ls --color=auto
起了个别名叫ls
,所以他就有了颜色,之前我们说ls -l
简称ll
,其实它只不过就是ls -l
的一个别名,现在就可以理解为什么了。
9. mv 指令
语法:mv 源文件 目标路径
作用:把文件或者目录移动到指定目录中去
全称:move(移动)
mv
普通文件
mv
目录
(1)特殊用法:更改文件名
语法:mv 源文件 新文件名(当前路径下)
这里要保证新文件名是不存在的,否则会进行覆盖
其实更改文件名的本质就是把文件mv
到当前目录下,且对旧文件进行改名
这里hello.c
改完名后把原本的test.c
给覆盖了,这里便不做证明了,我已经验证过了。
当然也可以更改目录名:
(2)特殊用法:移动到其他路径且更改文件名
语法:mv 源文件 目标路径/新文件名
10. cat 指令
语法:cat [选项] [文件]
作用:查看目标文件的内容
刚刚讲过cat
指令了,这里在补充一些其他用法
(1)-n 选项
作用:在打印文件内容时,带上行号
(2)-s 选项
作用:去除多行空行,多行空行部分只保留一行
(2)-b 选项
作用:对不是空行的部分进行编号
补充知识10:tac 指令
作用:将目标文件倒置(反向)输出(查看)
说明:tac指令不支持选项
像cat, tac
这样的指令主要用途是用来方便用户查看小文件。
有小文件,就有大文件,那什么是大文件呢?
补充知识11:关于日志
在程序运行前,需要打开日志文件,程序运行期间,把所有程序的执行痕迹,以及所对应的时间,写入到日志文件中去,这个行为就叫写日志。
为什么要存在日志呢?
假如某时某刻,程序挂掉了,就可以通过日志文件进行问题排查。
举个例子便于理解:
小明每天都写日记,他的爸爸妈妈也知道小明爱写日记,突然有一天小明失踪了,他的爸爸妈妈可以看一下小明最后一天写的日记,就可以大概推断出小明失踪的日期了。
在Linux中也有日志,比如在这个路径下,就有几个日志,可以cat
查看一下
这时我们发现,按下回车后就会进行刷屏,所以cat
指令就不建议用来查看大文件了
那我们该如何查看大文件呢?
11. more 指令
作用:查看文件内容(一般用来查看大文件)
功能:回车下翻,q键退出,/
查找(不高亮)
缺点:只能按回车向下翻阅,不能向上翻阅
按q键退出more
指令
more /var/log/syslog
再来查看一下刚刚的大文件,我们发现,并没有进行刷屏,而是将一屏内容打满就暂停下来了,只显示了22%的内容。
还可以按回车向下翻阅,但也只能向下翻阅了
12. less 指令
作用:查看文件内容,(一般用来查看大文件,类似more)
功能:上翻,下翻,q键退出,/
查找,n键查看下一个匹配项
优点:在more
指令的基础上,既可以用回车下翻,又增加了 ↑键 上翻,↓键 下翻
还可以,查找想查找的内容,而且会高亮显示,例如/root
构建一个大文件,查找666,演示n键查看下一个匹配项功能。
cnt=1; while [ $cnt -le 10000 ]; do echo "hello, $cnt"; let cnt++; done>log.txt
less log.txt
输入/66
查找匹配项
按n键
再按n键
13. head 指令
作用:默认查看文件中前10行的数据
可以在后面跟上head -[n]
查看前n行,这里的n是一个数字,不是n本身
例如:head -5
,查看前5行
14. tail 指令
作用:默认查看文件中后10行的数据
可以在后面跟上head -[n]
查看前n行,这里的n是一个数字,不是n本身,同head
指令,不做演示
现在我们想查看一下文件中间的内容怎么办呢?
例如:查看[ 2001 - 2025 ]区间内的数据
法一:利用临时文件,但是这种方法会生成临时文件,不是最佳方案
法二:管道
补充知识12:管道操作符 |
head -2025 log.txt | tail -25
作用:将前面指令的结果传输给后面的指令继续处理
我们可以看到,利用管道确实可以解决查看区间内容的问题
管道其实还可以对多组指令进行连接,批量化对指令进行加工
例如:拼接上tac
指令将输出结果逆置
还可以继续拼接,以此类推,不在演示
15. date 指令
作用:查看现在的时间
默认的时间格式对我们中国用户不太友好,我们来看看如何按我们想要的格式输出时间
(1)按格式输出时间
例如:date +%Y/%m/%d-%H:%M:%S
字符 | 含义 |
---|---|
%Y | 年份 |
%m | 月份 |
%d | 天数 |
%H | 小时 |
%M | 分钟 |
%S | 秒数 |
date
后需要跟+号,并且日期时间的分隔符不能是空格,如果想带空格,需要用转义字符
(2)显示时间戳
date +%s
ps:这只是我截图的时间节点,时间戳是一直在变的。
将时间戳进行格式化显示:date +%Y/%m/%d-%H:%M:%S -d @时间戳
例如:date +%Y/%m/%d-%H:%M:%S -d @0
这里我们发现时间戳为0时,我们这里显示的是早上8点,这是因为北京时间与格林威治时间有8小时的时差。
时间戳为0时,换算为北京时间就是上面的时间
再例如,随机复制一个时间戳:
补充知识13:时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
由于地球存在时区差异,不同地区的计算机本地时间可能不同。为了在跨系统的数据处理中提供统一的时间度量标准,1970 年 Unix 系统的设计者肯・汤普逊决定采用 1970 年 1 月 1 日 00:00:00 UTC 作为时间起点(Unix 时间戳),以秒数记录时间。这种基于 UTC 的绝对时间表示法,避免了时区转换的复杂性,确保了全球计算机在时间数据存储和计算上的一致性。
简单来说:为了保证全球计算机时间的一致性,就诞生了时间戳。
- 从技术角度来说,它是一个线性递增的数据;
- 从应用、业务上来说,它可以让我们根据时间戳,通过数值范围查询(如[ start_time, end_time ]),可实现批量化处理(如批量筛选某天的订单数据)和分段式定位(如按小时 / 天划分数据存储区间,快速查找特定时间段的内容)。
16. cal 指令
作用:显示公历(阳历)日历