Linux常见指令 ⑶
- date指令
- 引入
- 描述
- 用法
- 例子
- 时间
- 时间戳
- cal指令
- 描述
- 用法
- 例子
- find指令
- 描述
- 用法
- 例子
- 补充
- which指令
- whereis指令
- grep指令
- 描述
- 用法
- 例子
- grep 对文件的操作
- grep 对目录的操作
- 补充
- 打包压缩 和 解压解包
- zip && unzip
- 描述
- 用法
- 例子
- 对文件的操作
- 对目录的操作
- tar指令
- 用法
- 例子
- 对文件的操作
- 对目录的操作
- bc指令
- 描述
- 用法
- 例子
- 了解系统
- 用法
- 例子
- 热键
- 用法
- 例子
- 指令的运行原理
date指令
引入
时间
对Linux来说是非常重要的. 有可能我们现在对这个重要性没多大体会, 但在以后得 日志
就会体会的非常明显.
日志是对我们的 检查
工作来说是很重要的. 程序运行到每一个关键时刻, 都需要程序员自己来打日志.
⇒ 就引出了 date指令, 用来查询时间.
这里还有一个概念, 就是 时间戳
: 从1970年1月1日午夜到当前时间的秒数
时间戳出现的原因:
- 时间是人定义的, 每个国家的时间不是统一的
- 互联网运行时间快, 需要一个统一的时间
- 时间戳是单调递增的, 便于我们进行范围查找(可以采用 二分的思想)
描述
date指令是用来查询 时间 和 时间戳的
用法
date — — 按照默认的方式输出当前时间
date +格式要求(%Y分隔符%m分隔符%d… …) — — 按照要求输出当前时间
date +%s — — 输出当前的时间戳
date -d @时间戳 — — 按照默认的方式输出此时间戳对应的时间
date 格式要求 -d @时间戳 — — 按照要求输出此时间戳对应的时间
例子
时间
注意:
%F 相当于 %Y-%m-%d
%X 相当于 %H:%M:%S
中间的分隔符, 可以是任意符号, 但是 不能是空格
时间戳
🗨️老陈, 你刚才不是说时间戳是从 1970年1月1日午夜到当前时间的秒数, 这上面显示的是 8点?
- 时间戳又叫做格林威治时间, 是外国人定义的. 由于存在时差, 在我们中国就是 8点.
其实, 这也变相的说明了 时间戳存在的意义: 每个国家在国内都能统一使用, 在国际, 也有一个统一的时间标准.
cal指令
描述
cal指令是用来输出日历的
用法
cal — — 输出当前月份的日历
cal 年 — — 输出这一年的日历
cal -3 — — 输出这当前月份, 上个月份, 下个月份的日历
例子
find指令
描述
find指令: 在目录结构中搜索文件, 并执行指定的操作
用法
find 指定目录 -name 文件名 — — 从指定目录开始以递归的方式搜索此文件名的所有文件
例子
- 发现: 普通用户下, find指令可能会受到权限限制
在家目录
下, 即/home/用户名/xxx 或 ~
, 不会受到权限限制. 因为家目录下的一棵 ‘树’ 就是自己的!!
在其他目录
下, 尤其是/usr/xxx
可能会受到权限限制. 解决方法就是用 root用户去搜索
补充
同为搜索的指令, 还有 which
和 whereis
which指令
which 指令 — — 在指令路径下
/usr/bin/xxx
搜索指令所在位置
whereis指令
whereis 指令/文件 — — 在系统特定路径下进行搜索(搜索结果一般是
文件路径, 头文件, 可执行程序, 手册, 安装包 ... ...
)
find指令可以搜索任意文件, 但是速度较慢
which指令, 搜索指令所在位置, 输出的信息更加详细
whereis指令, 界于两者之间, 既可以搜索指令也可以是文件
grep指令
描述
grep指令: 在文件中以 行
为单位搜索字符串( 行文本过滤
),将找到的行打印出来
用法
grep 条件 文件名/文件地址 — — 在文件中以行为单位, 将满足条件的行的内容默认输出到显示屏文件
grep -r 条件 目录/目录地址 — — 在目录路径下以递归的方式, 在各个文件中以行为单位, 将满足条件的行的内容默认输出到显示屏文件跟选项:
-i — — 忽略条件中的大小写
-v — — 逆反, 将不满足条件的行的内容输出出来
-n — — 显示输出结果的行号
例子
grep 对文件的操作
可以看出, 还是非常简单的, 很容易入手. 当然还有两个 极端情况
:
''
这是一个 空字符
, 满足这个要求的, 就是文件本身喽.
-v , 逆反, 那就是空了
grep 对目录的操作
补充
一般指令后面跟的有文件, 可以尝试使用
管道
来进行优化. 这样写有两点好处:
- 管道文件是内存级的文件, 速度快
- 指令后面就不需要跟上 文件喽
grep指令常用的用法是:
配合管道, 来查看进程
. 由于进程是后面才学习的, 这个以后再讲!!
打包压缩 和 解压解包
zip && unzip
描述
我们熟知的Windows操作系统, 有很多的打包压缩, 解包解压的软件. 打包压缩有很多的优势, 比如:
- 有多个文件变成一个文件, 不容易造成文件的
缺失
(就是不容易丢失其中的一两个) - 体积变小, 下载时间变短
总结下来, 就是不容易造成文件的缺失 和 下载时间变短
🗨️Linux也是一个操作系统, 那么它在什么场景下使用打包压缩呢?
- Linux有充当服务器的时候, 也有各种网络应用场景, 满足通讯的需求, 这时候就有打包压缩的需求
安装zip 和 unzip 的命令: yum install -y zip unzip(记得要在root用户下)
zip 和 unzip 指令就是打包压缩 和 解压解包的功能
用法
zip指令默认后面跟的是一个文件
zip xxx.zip 文件 — — 打包压缩一个文件
zip -r xxx.zip 目录 — — 打包压缩整个目录
unzip xxx.zip — — 默认解压到当前目录下
unzip xxx.zip -d 目录路径 — — 解压到指定路径下
例子
对文件的操作
对目录的操作
打包压缩 可以使
多个目录/文件
变成一个文件
tar指令
用法
tar czf xxx.tgz 文件/目录 — — 打包压缩
tar tzf xxx.tgz — — 预览
tar xzf xxx.tgz — — 默认解压到当前路径下
tar xzf xxx.tgz -C 目录路径 — — 解压到指定路径下
例子
对文件的操作
对目录的操作
🗨️为什么tar指令后面的压缩后缀是 .tgz
- xxx.tgz 的全称是 xxx
.tar
(打包后缀).gz
(压缩后缀).
起着打包压缩的功能, 所以简写就是 xxx.tgz
🗨️如果我们想到指定目录下解压解包, 除了用 -r 或 -C这两个选项, 我们能不能用别的方式实现同样的功能呢?
- 先明白一个点: 不能在原路径下解压, 因为已经存在一个一样的目录/文件, 就算你在原路径下进行解压解包, 也是无用的.
其次, 我们可以巧用mv指令
, 将压缩包移动到指定路径, 并在那个路径下进行解压解包.
🗨️有很多的打包压缩工具啊, 老陈, 为啥只介绍了这两个??
- 确实有很多的打包压缩工具, 但是这两个工具是很经典的, 其它的不清楚的可以直接去网上查询
bc指令
描述
bc指令可以进行浮点数的运算, 类似于 Windows下的 calc(计算器)
用法
首先进入 bc模式
然后输入计算的式子
例子
🗨️老陈, 有没有一种方式: 不进入 bc模式, 直接输出式子的结果
- 首先, 输入 — — echo
其次, 把输入的结果给 bc — —管道 |
总结就是: echo 式子 | bc
了解系统
用法
由于对系统的一些相关知识并没有深入了解, 在此处我们就看一看就行, 就当有这一回事~~
uname— — 系统的名字
uname -a — — 查看系统的详细信息
uname -r — — 查看系统的体系结构 和 内核版本
free -单位(m, g, t … …) — — 查看内存
df -h — — 查看磁盘
例子
别的东东, 老陈在这里就不多说了. 这里直说一个点:
x86 — — 32位机器
x86-64 == x64 — — 64位机器
热键
用法
tab — — 自动补全
ctrl + r — — 历史命令查询(ctrl + c 结束)
nano — — 记事本
ctrl + d — — 退出终端, 退出用户
ctrl + c — — 让当前命令 强制停止
例子
- 总结一下:
连按两次 tab键, 就会输出这个系统现在已有的命令
ctrl + r ⇒ 就会出现 ’ ', 然后在里面输入想要查找的历史命令, 退出就是 ctrl + c
ctrl + d: 不仅可以退出终端(即退出xshell), 亦可以回退到上一个用户
nano: 就相当于Windows下的记事本, 保存退出: ctrl + x 然后 y 然后 enter
🗨️ctrl + r 是查找历史命令, 难道Linux操作系统有历史存储功能??
- 观察力真不错!! 下面介绍一个命令 : history
只不过, 不是把命令全部保存了下来, 只是记录最近的 1000 个左右. 不过这个默认记录个数是可以修改的, 这个其实没多大意义~
指令的运行原理
前面我们已经知道了, 指令的本质就是编译好的程序或者脚本, 只不过是放在了系统的特殊路径下.
⇒ 指令其实就是字符串
, 只不过这个字符串经过了系统的处理和加工; 和我们输入的字符串是不同的.
🗨️既然谈到了输入, 那么每次输入的时候前面的一段东西是什么?
这个叫做bash命令行
, 我们先谈一下它的构成:
muyu — — 是当前用户名
@C-muyu-Y — — 主机名
~ — — 当前目录
$ — — 命令行提示符. root用户下的命令行提示符是#
, 而普通用户下的命令行提示符是$
这个是我使用的云服务器的名字, 即主机名
当我们改变用户为 root用户, 我们发现: 当前用户名 和 命令行提示符都发生了变化
🗨️ 老陈, 我之前听过 shell bash sh, 现在又有一个bash命令行, 这些怎么进行区分啊??
Shell — — 命令行解释器, 相当于 一个类群的总称
, 这里就以程序员来做比喻吧
bash/ sh — —类群中的一个个成员
, 程序员1, 程序员2, 程序员3 … …
bash命令行 — —bash的样子
, 程序员bash长什么样
🗨️ 命令行解释器 Shell 是干什么的??
- 命令行解释器是介于用户 和 操作系统的的一个
中间人
, 起着承上启下的一个作用.
上达用户
, 将操作系统的运行结果翻译给用户
下至操作系统(OS)
, 将用户的需求翻译给操作系统
这里多说一句, 通过前面的学习, 我们知道了 Linux下的
命令行解释器
和 Windows下的图形化界面操作
的作用是一样的. 只不过它们的使用群体不一样, Windows面向大众, 操作简单; 而Linux面向程序员, 是需要一定的技术基础的!!
🗨️老陈, 我们用户为什么不能直接操作 操作系统 (Windows 和 Linux … …), 而是要借助一下 "中间人"
(图形化界面管理 和 命令行解释器) ?
- 设想一下: 如果我们丢掉 图形化界面管理 和 命令行解释器, 直接操作 操作系统:
站在操作系统
的角度:
首先, 操作系统不知道用户的一个需求, 即我们输入一个指令操作系统不认识
其次, 如果我们的需求是没有道理的, 蛮横的, 那么就会损伤操作系统
站在用户
的角度(假设我们的输入有结果输出):
操作系统输出的命令也是指令类型的, 我们用户根本看不懂
⇒
总结下来,中间人
(图形化界面管理 和 命令行解释器) 是必不可少的. 它的意义是:
1.命令处理:
上达用户
, 将操作系统的运行结果翻译给用户
下至操作系统(OS)
, 将用户的需求翻译给操作系统
2.保护操作系统, 拦截用户的非法请求
- 通过上面 老铁们的重重问题, 我们基本可以得知 操作系统, 用户, 命令行解释器 三者之间的关系
各位老铁, 关于Linux常见指令的知识, 老陈就先讲到这里.
Linux指令众多, 在以后的学习中, 我们一边学习其它知识, 一边巩固记忆指令操作
先说一下 后面的的内容: Linux权限
预知权限如何, 且听下回分解
放弃时间的人,时间也会放弃他. —— 莎士比亚