【Linux系统】—— 基本指令(四)
【Linux系统】—— 基本指令(三)
- 1「find」指令
- 2 「grep」指令
- 2.1 初识「grep」指令
- 2.2 「grep」指令 选项
- 3 打包压缩基本知识
- 4 「zip / unzip」指令
- 5「tar」命令
- 6 文件互传
- 6.1 Linux 与 Windows 互传
- 6.1.1 Linux向Windows传输
- 6.1.2 Windows向Linux传输
- 6.2 Linux 与 Linux 互传
- 7 「bc」指令
- 8 「uname -r」命令
- 8.1 认识内核版本
- 8.2 什么是体系结构
- 8.3 如何查看体系结构和内核版本
- 9 几个常用快捷键
- 10 「shutdown」 指令:关机
- 11 扩展命令
1「find」指令
- Linux 下「find」命令在目录结构中搜索文件,并执行指定的操作。
- Linux 下「find」命令提供了相当多的查找条件,功能很强大。由于「find」具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
- 即使系统中含有网络文件系统( NFS), 「find」命令在该文件系统中同样有效,只要你具有相应的权限。
- 在运行一个非常消耗资源的「find」命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指 30G 字节以上的文件系统)。
- 语法:「find」 起始路径 选项 文件名
- 功能:用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)。
常用选项:
- -name:按照文件名查找文件
- -type:按文件类型查找,如普通文件(f),目录(d),块设备文件(b),字符设备文件©等。
- size ±n[kMG]:按文件大小查找,+ - 表示大于小于,n 表示大小,kMG表示大小的单位。
前面我们曾学习过一个查找命令:「which」
「which」是用来查 Linux 系统中的命令,它只会去指定的目录(/usr/bin)下查找指定的命令
但如果我不想查系统的,我想查文件呢?这时就需要用「find」命令。比如查根目录下共有几个『.txt』后缀的文件
2 「grep」指令
2.1 初识「grep」指令
- 语法:「grep」 [选项] 搜寻字符串 文件名
- 功能:
在文件中搜索字符串,将找到的行打印出来
。
运用管道文件和「grep」指令,将日志中带有 “of” 的行数据打印出来。
当然,也可以不用管道文件。
总的来说,「grep」的核心作用就是行文本过滤工具,它会把包含某个关键字的行保留下来
。
2.2 「grep」指令 选项
常用选项:
- -i :忽略大小写的不同
- -n :输出行号
- -v :反向选择,显示出没有待搜索字符串的行。
现在为了演示,我们新建一个文件,代码如下:cnt=0; while [ $cnt -le 100 ]; do echo “hello $cnt”; let cnt++; done > log.txt
「-n」 :它可以将我们匹配出的行在原始文件中的行号标识出来
「-v」:进行反向选择,凡是包含关键字的行都不显示,其他行显示
「-i」:不区分大小写
我们先用「nano」手动修改部分数据
现在我们搜索"HELLO"
我们再带上 「-i」 选项
「-i」如上:不区分大小写
3 打包压缩基本知识
什么是打包压缩呢?
- 打包:文件合并
我们平时下载下来的软件一般都是一个压缩包,压缩包中的文件有很多,有几百上千个。往往需要把所有的文件进行合并,打包成一个文件。
压缩:减少体积- 将所有文件合并为一个文件后,体积往往会比较大。所以我们需要用压缩算法将文件进行压缩
为什么我们要将文件进行打包压缩呢?
打包最主要的目的就是防止我们在拷贝或者文件传输的时候文件丢失
。
不知大家有没有试过,我们在网上下载某个比较大的软件,下好之后我们启动它时,它显示某个文件缺失无法运行,你下载了几小时下了几千个文件,最后由于缺失某个文件文前功尽弃。这时,如果将文件全部打包在一起就不会有这个问题了。
压缩的目的也很简单
上千个文件打包成一个文件后体积往往会比较大(比如下个原神几十上百G),压缩的目的就是为了减少体积。
为什么要减少体积呢?
首先是下载下来比较节省本地的存储空间,到时在将其进行解压解包,相当于用时间换空间
其次,更重要的是减少体积可以有效的减少网络传输的时间。我们从网上下载东西,都是要通过网络传送的,而下载5G的东西很明显比下载10G的东西更快。
一款软件,体积更小,用户下载的速度越快,即用户使用这个软件的成本越低。一款软件,大家是选择用 1 分钟就能下完的还是选择 30 分钟才能下完的呢
在 Linux 中,可以把打包和压缩两个阶段分离出来,让用户能看到打包能看到压缩,但这时其指令选项会特别麻烦,因此我们学习打包压缩时,不对他们做明显区分。
在 Linux 中,打包压缩形成的压缩文件种类是非常多的,下面我们讲解 Linux 中最常用的两种打包压缩方案:「zip/unzip」与「tar」
4 「zip / unzip」指令
- 语法:「zip」 压缩文件(.zip) 目录或文件
- 功能:将目录或文件压缩成「zip」格式
首先我们来确定一下当前系统是否安装了「zip」指令
zip --version
与 'unzip --version'
若未安装,输入指令:apt install -y zip unzip
(ubunto)、yum install -y zip unzip
(centos)
下面我们以打包压缩『lesson1』目录为例:
打包单个文件与打包目录方法一样,这里就不单独演示了。
打包方式很简单:指令如下
这里需要注意:用「zip」指令打包的压缩文件格式是『.zip』后缀。不是说 Linux 不区分文件后缀吗,为什么这里压缩文件要带后缀呢?Linux 系统是不区分文件后缀,但是不代表 gcc、g++、zip 这样的工具不区分文件后缀
回车执行命令后发现果然形成了对应的『lesson1.zip』(此时已将『lesosn1.zip』 移到一个新建目录下)。那怎么知道打包对不对呢?我们把他解压来看一看
解压也非常简单:
回车执行命令后,确实解压出了『 lesson1』,一切貌似都很正常。
但当我们「tree」一下『 lesson1』时,傻眼了。我们发现我们在打包压缩的时候竟然值打包压缩了一个空目录:
为什么它没有将目录里面的内容给打包呢?
如果我们今天打包压缩的是一个大文件,那么上述方法是对的;但是现在我们打包压缩的是一个目录,所以我们要带选项 「-r」 因为目录时递归式的
这样才是正确的
其解压方式与上述类似,这里就不再赘述了。
在 windows 系统中,我们解压往往都能解压到指定目录,那 Linux 可以吗?肯定是可以的
这里我们介绍「unzip」的 「-d」 选项:
- -d:
将文件指定式地解压到指定目录下
如:将『lesson1』解压到根目录下
5「tar」命令
与「zip / unzip」指令一样,「tar」指令也是用来打包压缩的指令
- 语法:「tar」 [选项] 目标文件名(.tgc) 源文件
「tar」命令的选项会比「zip / unzip」多一些。
- -c:建立一个压缩文件的参数指令。
- -x:解开一个压缩文件的参数指令。
- -t:查看tarfile里面的文件。
- -z:是否同时具有gzip属性?即是否需要用gzip压缩?
- -j:是否同时具有bzip2属性?即是否需要用bzip2压缩?
- -v:压缩的过程中显示文件(常用)。
- -f:使用档名,请留意,在f之后要立即接文档名,不要再加参数。
- -C:解压到指定目录。
我们依然是以打包『lesson1』目录为例
「tar」指令的打包压缩语法与「zip」指令类似,只是选项复杂了点
「tar」指令压缩的文件后缀名为 『.tgz』
我们讲解一下选项的作用。
- 首先我们打包压缩时,一定要先新建一个文件:用选项
「-c」
- 新建之后我还要把这个文件压缩:用选项
「-z」
- 最后还要指定文档名:用选项
「-f」
回车执行命令后,我们看到生成了一个『lesson1.tgz』的压缩包
下面我们来进行解压:
解压的用选项由 「-czf」 改为 「-xzf」
「-x」 选项即解压的意思
这样『lesson1』就解压出来啦
「tar」命令与「zip」命令的区别是:「tar」命令再打包目录时不需要「-r」命令来递归,它默认全部给我们打包
。
如果我们想看打包或压缩的过程,我们可以加上「-v」
选项
同样,「tar」命令也可以将文件解压至指定路径下。相关选项是:「-C」
小结:虽然「tar」命令的选项很多,但是我们只需要记住 「czf」 和 「xzf」 就够用了,最多再记个「v」
与「C」
。
注:有些系统「tar」指令的选项不允许带 「-」,如果大家选项前带 「-」出现报错,可以尝试不带 「-」
6 文件互传
压缩包最大的意义就是进行文件传输,下面我们介绍不同系统间文件相互传输的方法
6.1 Linux 与 Windows 互传
6.1.1 Linux向Windows传输
Linux 向 Windows 传输文件的指令是:「sz」
注:系统未安装的可输入:yum install -y lrzsz (centos) / apt install -y lrzsz (centos)
安装
- 语法:「sz」 文件
传输文件的方法很简单:例如我们现在要传『lesson1.zip』文件
回车后,系统会出现一个弹窗:询问要将『lesson1.zip』文件传输到 windows 系统下的什么位置
这里我们直接选择桌面
传输完成后,Windows 系统中就能收到『lesson1.zip』文件啦,我们可以在 Windows 下将其解压即可查看里面的文件。
6.1.2 Windows向Linux传输
Windows 向 Linux 传输文件的指令是:「rz」
这种传输也很简单,我们直接输入「rz」指令后,此时系统会弹一个弹窗
我们再在弹窗中选择要传输至 Linux 系统的文件,最后点击打开就自动传输啦。
最后我们再解压即可
如果小伙伴们觉得这样传输太麻烦的话,可以直接拖拽式
传输:直接把 Windows 系统中的文件拖进 Linux 中,也是可以的
6.2 Linux 与 Linux 互传
Linux 与 Linux 互传所需的命令是:「scp」
一般而言「scp」命令默认是装好的
- 语法:「scp」 dst.tgz 用户名@公网IP:目标机器指定的路径
其实「scp」命令和「cp」命令一模一样;只是「cp」是在同一台机器上进行拷贝,「scp」是在不同的机器上进行拷贝而已
传输格式如下:scp lesson4.tgz whb@8.137.19.140:/home/whb/code/113
7 「bc」指令
- 语法:「bc」 [选项] [计算任务的文件]
- 功能:进行算术操作精密运算的工具。「bc」命令也是一种支持任意精度的交互执行的计算器语言。
选项:
- -i:强制进入交互式模式
- -l:定义使用的标准数学库
- -w:对POSIX bc的扩展给出警告信息
- -q:不显示bc环境信息,直接运行命令
- -v:显示指令版本信息
- -h:显示指令的帮助信息
「bc」指令即一个简易的计算器
「bc」指令一般很少使用,但也有一些运用场景。比如你有些数据实在配置文件当中,现在要把配置文件中的所有数字进行求和计算,返回和。如果手动去敲太慢,写 C/C++ 文件还要写程序太麻烦,这时就可以将文件内容打出来,利用「bc」和 管道文件 进行快捷计算。
8 「uname -r」命令
在讲「uname -r」指令时,先问大家一个问题:怎么在 Linux 环境中查看你的 体系结构 和 系统内核版本?
8.1 认识内核版本
什么是 Linux 的内核版本呢?
Linux 内核版本是指 Linux 操作系统的核心组件——内核的特定发行版本。Linux 内核是操作系统的最底层部分,负责管理硬件、内存、进程间通信、设备驱动程序以及系统调用的核心功能。Linux 内核版本通过版本号来标识,这些版本号遵循一定的命名规则,以便用户和开发者了解内核的特性和发布状态。
Linux 内核版本号通常由三部分组成:主版本号
、次版本号
和修订号
,格式为“主版本号.次版本号.修订号”
我们简单来认识 Linux 系统的版本号:以 centos7 的内核版本为例
- 主版本号:主版本号发生改变,一定是操作系统内核出现了大量的代码调整。现在内核最新主版本号是 6
- 次版本号(从版本号):当我们的内核版本出现了较大变化,次版本号也会发生变化。次版本号有关规则:如果是偶数表示这个操作系统是稳定版本,如果是奇数表示操作系统是测试版本,拟上限版本
- 修订次数:代表操作系统发布了,发现了 bug,我去修订它。改了几次修订次数就是几
- 补丁:给操作系统打补丁。比如操作系统内核没问题,但是操作系统某些驱动接口需要升级一下。或者某些功能确缺失了,给它增加一下
- el7:e 表示 enterprise,企业级的意思;l表示最新版本意思;7 表示版本号是 7。整体表示centos7
- 体系结构:x86 即英特尔 x86,64 表示 64 位操作系统,也可以称为 x64
这里我们谈一下新老内核问题
一般在企业中,愿意使用新的内核还是使用老的内核呢?
企业里面一定不会用新内核。哪怕不是最新的而是相对比较新的企业都不会用
简单来说是因为新内核可能在效率上确实比老内核高一点(高不了多少),但 一个企业最看重的就是 稳定性(三天两天系统就崩,人家用你的产品才怪)。新内核可能有很多坑没被踩过,企业不敢随便使用;而老内核就不同了,该踩的坑都被踩完了,企业可以放心使用。
8.2 什么是体系结构
在传统意义上讲,所谓的体系结构问的其实是这台计算机用的芯片(CPU)是什么架构的。
CPU 的架构非常多,但最常见的其实就两三种:早些年的英特尔系列的 i386 或者更早的 8086;七八年前的 x86_64(x86_64 == x64);现在用的 AMD
在硬件层面,CPU无疑是最重要的;在软件层面,操作系统是最重要的
如:Windows 下的查看体系结构和操作系统版本
现在的笔记本电脑用到的体系结构最多的是 AMD 的,也有一些老的用英特尔的 x86_64(x64);台式机或服务器主要以英特尔系为主;手机上更多的使用 ARM 的。
不同芯片之间有很大的差别:工艺、背后的商业公司、自身指令集。Linux 操作系统能在笔记本、台式机、服务器上跑本质上是因为 Linux 操作系统里面有很多兼容性的代码,它在不同的平台下全部都实现了。如果去看 Linux 的源代码,会发现:它有一些公共的代码(调度、内存管理、文件系统等等);但与有些操作,如跟芯片有关的,它需要个性化地给每一种平台全部写好。所以编译内核时,它会先识别当前计算机所使用的芯片类型,将非该芯片的代码用条件编译的方式全面裁掉
,最终给我们现在所看到的代码。
8.3 如何查看体系结构和内核版本
查看内核版本我们可以用 「uname」 指令
- 语法:「uname」 [选项]
- 功能:「uname」用来获取电脑和操作系统的相关信息。
选项:
- -a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
- -r:显示内核版本
9 几个常用快捷键
- ctrl + c:让当前程序『停掉』(终止异常任务)
↑
和↓
:『滚动(查看)』(查看)历史命令- Tab:具有『命令补全』和『档案补齐』的功能
- ctrl + r:搜索历史命令(输入命令的片段,复原整个命令)
- ctrl + d:退出前期用户
为什么 『ctrl + r』 可以搜索历史命令呢?这也意味着 Linux 会记录我们输入的指令 。怎么证明呢?我们可以可以通过 「history 」 指令来验证
10 「shutdown」 指令:关机
- 语法:「shutdown」 [选项]
选项:
- -r: 重启计算机
- -h: 关闭系统后关闭电源
- -c: 取消已经计划的 「shutdown」 操作
- -t sec : -t 后面加秒数,即过几秒后关机
这里说一下:云服务器,永不关机,除非维护或者不用了。
为什么呢?因为云服务器未来是要部署自己写好的服务的。我们半夜为什么能刷B站,半夜能能逛淘宝,都是因为B站、淘宝的服务端一直在工作,所以我们一直能访问,所以互联网公司中的云服务器是永远不关机的。这也能体现出来 Linux 操作系统的强大,机器往往企业买回来连续运行个四五年才断电,一跑就是好几年,Windows系统是抗不住的。
11 扩展命令
- 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last;
- 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln;
- 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser、 groupadd、 kill、 crontab;
- 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup;
- 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who;
- 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。
好啦,本期关于基本指令的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!