【Linux系统】—— 基本指令(二)
【Linux系统】—— 基本指令(二)
- 1 「alias」命令
- 1.1 「ll」命令
- 1.2 「alias」命令
- 2 「rmdir」指令与「rm」指令
- 2.1 「rmdir」
- 2.2 「rm」
- 2.2.1 「rm」 删除普通文件
- 2.2.2 「rm」 删除目录
- 2.2.3 『 * 』 通配符
- 3 「man」 指令
- 4 「cp」 指令
- 4.1 拷贝普通文件
- 4.2 拷贝目录
- 5 「mv」 指令
- 5.1 普通文件
- 5.2 目录
- 6 nano 编辑器
- 7 echo
- 8 「cat」 指令
- 8.1 初识 「cat」
- 8.2 命令行选项
- 8.3 「tac」命令
- 9 时间相关指令
- 9.1 显示时间
- 9.2 时间戳
- 9.3 「cal」 指令
1 「alias」命令
1.1 「ll」命令
在讲 「alias」命令之前,我们先来看下 「ll」命令
我们来看下「ll」命令有什么效果
我们发现「ll」命令也是显示当前目录的各个文件,它的效果与 「ls -l -a」
相同
1.2 「alias」命令
在 Linux 中,「alias」 指令用于创建一个命令的别名,即给变量取别名。这样我们就可以用一个简短的字符串来代替一个较长或复杂的命令。
比如现在我们给「 ls」命令取别名 m o n k e y monkey monkey
再比如给「ls -l -a」起别名
注:alias 后的 ‘=’ 左右两边不能加空格
实际上,「 ll 」就是「 ls -l -a」,「 ll 」本质: alias ll='ls -l -a --color=auto'
--color=auto
是什么呢?
实际上,我们直接通过路径执行「ls」指令,文件名是没有颜色的
只有加上 --color=auto
才会显示颜色
那为什么我们直接输入「ls」,又有颜色呢?
那是因为这里的 「ls」也是一个别名。本质:alias ls='ls --color=auto'
。
那如果我们起了别名有不想要了呢?
不用担心,我们所起的别名是临时的,当我们重新登录时,起的别名就失效了
2 「rmdir」指令与「rm」指令
2.1 「rmdir」
「rmdir」是一个与「mkdir」相对的指令,「mkdir」是创建目录,「rmdir」是用来删除删除目录的
- 语法:「rmdir」 [dirName]
- 功能:删除空目录
- 使用对象:具有当前目录操作权限的所有使用者
但是「rmdir」默认只能删除空目录,非空目录和普通文件它是不能删除的
2.2 「rm」
「rmdir」使用起来有诸多限制,因此我们了解即可,平常我们更多的是用 「rm」 命令
「rm」 命令可删除文件或者目录
- 语法:「rm」 [dirName/dir]
- 功能:删除文件或目录
- 使用对象: 所有使用者
2.2.1 「rm」 删除普通文件
2.2.2 「rm」 删除目录
我们创建一个空目录888,并用 「rm」 删除试试看
不是说rm啥都能删吗,怎么连一个空目录都删不了呢?
这是因为「rm」默认只能删普通文件,就跟「rmdir」一样默认只能删空目录。
但是「rm」的选项更丰富
如果想要删目录,需要加上 「-r」命令行选项
目录本身的定义是多叉树当中的节点,在多叉树中做各种操作都是递归式进行定义的,所以「-r」就代表着递归(recursion)的意思。不管这个目录是否为空都能删除
注:删除的时候一定要仔细,不要一不小心把根目录给删了!
2.2.3 『 * 』 通配符
在 Linux 中有一个 『 * 』 符号,这个 『 * 』 叫做通配符。
所谓通配符就是可以去匹配任意的内容
比如:『ls *.txt』 表示显示所有后缀为 .txt 的文件;『test. *』 『*.*』也是同理
这样我们就可以利用通配符,将某一类型文件一次性删除啦
注:如果直接『rm -r *』 的话,会直接将当前所在目录的所有内容删掉。这点一定要小心使用,确定自己在哪个目录下,不要一不小心把根目录所以内容删了
注:Linux 并没有所谓的回收站,删了就是删了。所以删除要谨慎
3 「man」 指令
Linux 当中的命令有很多参数,我们不可能全部记住。我们可以通过查看 Linux 手册获取帮助
。访问 Linux 手册的命令是「man」
- 语法:「man」 [选项] 命令
比如「pwd」指令我不会用,可查阅「man」手册
直接输入『man pwd』就能跳转到对应的手册位置(按 Q 退出手册)
既然是一个手册,它就有第一章、第二章……
我们输入『man man』可以看到该手册一共有九章
我们默认都是在第一章去查找
我们学习 Linux 大部分只会用到前三章手册:
- 第一章:普通的命令
- 第二章:系统调用
- 第三章:C语言库函数
命令中有 printf 命令
,同样 C语言 也有 printf函数
。
两个 p r i n t f printf printf 并没有任何关系
printf 命令
使用:
「man」手册的查找原则是:从前往后寻找,找到了就返回
像查找 「printf」命令可以:man printf
也可以指定章节去查找
:「man 1 printf」
而如果想查找 C语言 中的 printf函数,则必须要指定章节去查找
才能找到,不然 「printf」命令在前,系统搜索到「printf」命令是直接返回的
指定章节查找:「man 3 printf」
注:部分系统可能没安装「man」手册,ubunto可以输入命令 apt install -y man-pages
下载,centos可以输入命令 yum install -y man-pages
下载
4 「cp」 指令
- 语法:「cp」 [选项] 源文件或目录 目标文件或目录
- 功能:拷贝文件或目录
4.1 拷贝普通文件
- 「cp」 源文件 目标文件
在当前目录下拷贝生成目标文件,拷贝出的文件名为目标文件名
- 「cp」 源文件 目标目录
如果后面跟的是目录,将会将源文件拷贝至目标目录下,拷贝出的文件名为源文件名,即与源文件名相同
注:同一个目录下不能有同名文件,但是不同目录可以
不过当然,也可以指定文件名
「cp」 拷贝普通文件
- 「cp」 srcfile dstfile
- 「cp」 srcfile dstdir/
- 「cp」 srcfile dstdir/dstfile
4.2 拷贝目录
那拷贝目录又是怎么拷贝的呢?
比如像拷贝 lesson1 目录。
发现直接拷贝目录是拷贝不了的
因为目录是递归式定义的内容,所以这里需要带 「-r」命令行选项
上述情况,目标目录是不存在的目录,是拷贝在当前目录下
我们将 lesson1 中的内容再拷贝一次给 lesson2 ,此时的 lesson2 是已经存在的目录,这时拷贝会发生什么呢
发现新拷贝出的目录名还是 lesson1,但是拷贝出来的目录是在 lesson2 目录下。
所以结论是当进行拷贝目录时:如果目标目录不存在,则在当前目录下拷贝;如果目标目录已经存在,会将目录拷贝到目标目录的内部。
那如果再将 lesson1 拷贝到 lesson2 里面呢?此时新拷贝的 lesson1 会将原来的 lesson1 覆盖
5 「mv」 指令
「mv」 指令是 move 的缩写,可以用来移动文件或者将文件改名(move(rename)files),是 Linux 系统下常用的命令,经常用来备份文件后或者目录
- 语法:「mv」 [选项] 源文件或目录 目标文件或目录
- 功能:
- 在指定目录下,对一个文件或目录进行重命名
- 将指定目录下的目标或文件,剪切到指定目录下
- 不仅仅可以剪切,还可以在剪切时进行重命名
5.1 普通文件
-
剪切功能
- 当「mv」 src dst 中的 src 是普通文件时,就是对普通文件进行操作
将 hello.txt 文件剪切动 lesson1 目录下
语法:「mv」 srcfile dstdir
- 重命名功能
将 test.txt 重命名为 1.txt
那如何判断「mv」是剪切还是重命名呢?
取决于「mv」 src dst 中的 dst,如果 dst 是目录并且不存在,那他就是重命名;如果是目录且存在就是剪切
5.2 目录
当「mv」 src dst 中的 src 是目录时,就是对目录进行操作
- 剪切功能
「mv」 srcdir dstdir
我们将 a 目录从当前目录剪切到 lesson1 目录下
其实剪切文件和剪切目录不用再可以去区分,因为 Linux 下一切皆文件
- 重命名功能
那目录可以重命名吗?
与文件一样的道理
当 「mv」 src dst 中的 dst 是一个已经存在的目录时,为剪切功能;是一个不存在的目录时,为重命名功能
我们将 a 目录重命名成 222
6 nano 编辑器
「nano」 是 Linux 操作系统中一款简单易用的文本编辑器,它提供了一个用户友好的界面和一系列快捷键,使用户能够轻松地进行文本编辑和修改。
- 语法:nano 文件名(文件不存在则新建文件)
- 功能:给用户提供文本编辑页面
使用方法:
退出方法:
注:有部分小伙伴没有安装 nano,centos 可以输入yum install -y nano(centos)
,ubunto 可以输入 apt install -y nano(ubunto)
来安装 nano
7 echo
「echo」 指令非常简单,我们这里简单提一下
- 语法:echo [选项] [字符串]
- 功能:将后续内容以字符串的形式打印出来
使用方式:
注:这里来我们建议将要打印的内容用单引号括起来,如果用双引用可能有时会出问题。
当然,前面我们讲过的「printf」命令也是可以打印的
所以我们如果想单纯的在显示器中回显一个字符串可以用「echo」也可以用「printf」
8 「cat」 指令
8.1 初识 「cat」
- 语法:cat [选项][文件名]
- 功能:显示指定文件名里面的内容
例如:我们用「cat」将刚刚写入 hello.txt文件 中的内容打印出来
那「echo」可以打印文件中能内容吗?
不行
可以看到「echo」将 hello.txt 当做字符串打印出来了
所以如果要打印文件中的内容,还是要用「cat」命令
需要注意的是:「cat」命令比较适合看短文件
8.2 命令行选项
「cat」指令的命令行选项如下:
- 「-b」:对非空输出行编号
- 「-n」:对输出的所有行编号
- 「-s」:不输出多行空行
其中,最常用的就是 「-n 」选项。「-n 」可以帮我们把行号
加上
8.3 「tac」命令
「cat」命令有一个伙伴指令:「tac」命令
「tac」命令也是显示文件内容,只不过他是 反向显示文件内容
但是反向打印有什么用呢?
当我们想看一个大型文件最开始的信息,如果用「cat」打印,那么最前面的信息都被刷屏刷掉了,这时我们就可以用「tac」进行反向打印,就能看到最前面的信息啦
9 时间相关指令
9.1 显示时间
- 语法:「date」 选项 格式
- 功能:用于显示时间、设置时间、完成时间与时间戳之间的相互转换等。
Linux中,我们可以直接通过 「date」指令 来查看当前时间
但是这样的显式格式看起来不太好,它是系统的默认时间格式
如果我们想要修改格式,我们可以增加选项
下面是「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
如:
注:「+」是固定的语法格式,但是选项之间的「-」和「_」是分隔符可以根据需要自己修改
为什么我们可以查到时间呢?因为时间对于计算机来说是非常重要的,系统本身就要帮我们记录时间。
这里问一个小问题:
计算机关机后,再次开机为什么还能准确的显示时间呢 ?
大家有没有想过,电脑关机后都断电了,没有电源,为什么还能记录准确时间呢?
其实不管是笔记本电脑还是台式机,在其主板上都会有一个纽扣电池,这个纽扣电池就可以让系统主板一直给我们记录时间。
所以当电脑关个一年半载,再次开机时间就不对了,因为纽扣电池早就没电了,主板也就不能记录时间,
9.2 时间戳
我们往系统中输入:『date +%s』 看看会发生什么
这一串数字式什么呢?不懂,别急我们多输入几次,看看有什么发现
我们发现,随着我们的不断查看,这串数字在不断增加
。
这个东西是什么呢?
这里就要引入一个新的概念:时间戳
上述显示出的17279…一串的数字是格林威治时间戳。
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从 1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
我们所有的计算机记录时间,并不是按年月日来记录的,因为维护一个字符串太复杂了。计算机内部会维持一个线性递增的计数器,每过一秒(其实是微妙)让这个计数器++ ,而计数的时间是从1970年1月1日的午夜开始。我们把1970年1月1日的午夜到现在所经过的秒数称为时间戳。
而英国的格林威治
是世界时间的约定点
,因此也叫格林威治时间戳
时间戳有什么用呢?
- 转化为年月日的时间
- 日志中记录的时间是时间戳。
- 区间查找,锁定一个时间范围
那时间戳怎么转换成对应的标准时间呢?如下
那我们是不是可以查看时间戳为 0 的时间呢?
因为北京在东八区,与格林威治有 8 小时的时间差,所以这里显示的是 1970年1月1日早上8点
9.3 「cal」 指令
「cal」命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。 “阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
- 语法:cal [选项] [月份] [年份]
- 功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1~9999),如有两个参数,则表示月份和年份。
选项:
- 「-3」: 显示系统前一个月,当前月,下一个月的月历。
- 「-j」 :显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)。
- 「-y」: 显示当前年份的日历。
好啦,本期关于基本指令的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!