学习苏丙瓜(爱编程的大丙)生成笔记《Linux 教程过程。https://www.subingwen.cn/linux/
熟悉的知识点没有记录
Linux教程
第一章Linux基础
一、初识Linux操作系统
1.Linux 介绍
1.1Linux的诞生
1991 年,GNU 该计划开发了许多最受期待的工具软件 GNU C 编译器已经出现,GNU 核心操作系统 HURD 一直处于实验阶段 (GNU 工程从 1984 年起就在做这件事),没有任何可用性,实质上也没能开发出完整的 GNU 操作系统。
也是这一年,Linux 诞生了,Linux 是 UNIX 操作系统的克隆系统, 但是Linux是开源的。 当时只是系统内核,没有配套的应用软件。 Linux 和 GNU 一拍即合,就有了我们现在使用的操作系统,GNU 奠定了 Linux 用户基础和开发环境。
1、Linux 时间线
- 1991 年初,林纳斯纳斯托瓦兹开始在一台 386sx 与微机学习兼容 minix 操作系统。
- 1991 年 4 月,林纳斯托瓦兹开始酝酿和准备自己的操作系统。
- 1991 年 4 月 13 日在 comp.os.minix 上发布说他已经成功了 bash 移植到了 minix 而且已经释手,离不开这个 shell 软件了。
- 1991 年的 10 月 5 日本,林纳斯托瓦兹 comp.os.minix 新闻组发布消息,正式向外宣布 Linux 内核的诞生
- 1992 年 Linux 与其他 GNU 完全自由的操作系统正式诞生。该操作系统通常被称为 “GNU/Linux”
- 1993 年,大约有 100 其余名程序员参与 Linux 编写内核代码 / 核心组的修改工作 5 此时人组成 Linux 0.99 大约有10万行代码,大约有用户 10 万左右。 1994 年 3 月,Linux1.0 发布,代码量 17 当时,万行按照完全免费的协议发布,然后正式采用 GPL 协议(GNU 一般公共授权书(GNU GPL, GNU General Public License))。
2、Linux的主要特性
-
Linux 基于文件的操作系统
操作系统需要与硬件相互交互 Linux 例如,操作系统将会有这些硬件 硬盘 , 鼠标 , 键盘 , 将显示屏抽象成设备文件进行管理。
-
Linux 操作系统是一种免费和开源代码的自由软件。
-
多个用户可以同时登录,每个用户可以同时运行多个应用程序。
-
提供友好的图形用户界面,操作简单, 易于快速上手。
-
支持多平台(这里指的是基于不同 CPU 国内架构平台,如国产平台, Linux 使用龙芯等)。
1.2 一些名词
-
GNU:Gnu’s Not Unix. 它可以理解为最早的口号 Richard Stallman 呼吁和倡导,呼吁软件自由。
-
GPL:General Public License. GNU 一般公共许可证,GPL 授予程序接受人的下列权利,即 GPL 所倡导的 “自由”:
-
购买的程序可以以任何目的运行;
-
在获得程序代码的前提下,可以学习修改源程序;
-
复制件可重新发行;
-
改进购买程序并公开发布。
-
-
LGPL(GNU Lesser General Public License): LGPL 是 GPL 开源协议主要设计为类库。
-
LGPL 允许商业软件通过类库引用 (link) 方式使用 LGPL 不需要开源商业软件代码的类库。
-
采用 LGPL 商业软件可以引用协议的开源代码进行类库发布和销售。
-
-
BSD开源协议: BSD 开源协议是给用户很大自由的协议。基本上用户可以。 为所欲为,以 BSD 在协议代码的基础上进行自己的产品时,需要满足三个条件:
-
如果再发布的产品包含源代码,原始代码必须包含在源代码中 BSD 协议。
-
作者不能使用开源代码 / 营销机构名称和原产品名称。
-
BSD 代码鼓励代码共享,但需要尊重代码作者的作权。
-
-
FSF:基本上,给自由软件 GNU 毕竟没钱很难做事。
-
自由软件:GNU 项目下的所有软件都是基于 GPL 许可证(非 GNU 项目也可用 GPL),都是自由软件。
-
POSIX:(Portable Operating System Interface for Computing Systems)是由 IEEE 和 ISO/IEC 一套开发标准。POSIX 标准是对 UNIX 总结操作系统的经验和实践,规范操作系统调用的服务界面,确保编制的应用程序能够在源代码级移植到各种操作系统。
1.3 Linux发行版
1、Linux操作系统发行版有两种常见类型,一种是debian类系统,另一种是redhat。debian类的代表产品是ubuntu,它基于debian定制,用户界面更友好。debian和ubuntu都是社区版,免费。redhat操作系统是收费的,不是用这个操作系统收费的,而是红帽会给我们提供一系列的服务,如果我们想享受服务或软件升级,我们需要付费。CentOS使用redhat内核,完全免费。
2、想要安装稳定版的 ubuntu, 如何选择版本?
官方每年发布两个版本,每个版本的版本号由两部分组成: 主版本号 副版本号
- 主版本号为当年,长期支持版(一般支持3-5年)为偶数,测试版为奇数
- 副版本号是月份,在 4 月份发布的版本相对稳定, 在 10 测试版在月份发布
因此,应选择主版本号为偶数,副版本号为偶数 04 安装使用的版本。
3、因为Linux系统都遵循POSIX标准,所以我们写的Linux程序可以在任何发行版本上运行。
4、Ubuntu系统不支持Oracle数据库,redhat类系统支持Oracle数据库。一般学习使用。Ubuntu系统,公司项目使用CentOS软件开发。
1.4 Linux内核
1、Linux 从应用的角度来看,系统分为核心空间和用户空间。
内核空间是 Linux 操作系统的主要部分,但只有核心操作系统不能完成用户任务。丰富而强大的应用程序包是操作系统成功的必要条件。这和武林秘籍一样,不仅要有动作,还要有内功。
2、Linux 内核主要由 5 个子系统组成:过程调度、内存管理、虚拟文件系统(主要处理)I/O操作)、网络接口、过程间通信。
1、进程调度 SCHED
进程调度是指系统在多种状态下转换过程的策略。Linux 下一个过程调度有 3 种策略:SCHED_OTHER、SCHED_FIFO 和 SCHED_RR。SCHED_FIFO 和 SCHED_RR需要指定的,不指定的,按照SCHED_OTHER策略进行。
- SCHED_OTHER:分时调度策略(默认)是针对普通过程的时间片旋转调度策略。
- SCHED_FIFO:实时调度策略是一种实时要求高、运行时间短的过程调度策略
- SCHED_RR:实时调度策略是针对实时要求高、运行时间长的过程调度策略。
2、内存管理 MMU
2、Linux目录MMU是CPU内存管理单元,每次启动磁盘上的可执行程序,都会获得虚拟地址空间。MUU将虚拟内存地址和物理地址对应起来。
- 内存管理是多个过程之间的内存共享策略。 Linux 内存管理主要讲虚拟内存。
- 虚拟内存可以比较过程际物理内存更大的内存,可以是实际内存的很多倍。
- 每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。
3、虚拟文件系统
虚拟文件系统将软件和硬件连接起来的中间缓冲层,通过这个缓冲层对磁盘进行管理,让数据有规律或按照某中格式存储或提取出来。
- 在 Linux 下支持多种文件系统,如 ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、smb、ncp、iso9660、sysv、hpfs、affs 等。
- 目前 Linux 下最常用的文件格式是 ext2 和 ext3。
4、网络接口
Linux 是在 Internet 飞速发展的时期成长起来的,所以 Linux 支持多种网络接口和协议。网络接口分为和,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux 支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序。
5、进程间通信
Linux 操作系统支持多进程,进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux 的进程间通信是从 UNIX 系统继承过来的。Linux 下的进程间的通信方式主要有管道、信号(一般情况不建议使用)、消息队列、共享内存和套接字(分本地套接字和网络套接字)等方法。
2、Linux目录
与 Windows 下的文件组织结构不同,Linux 不使用磁盘分区符号来访问文件系统,而是将整个文件系统表示成树状的结构,Linux 系统每增加一个文件系统都会将其加入到这个树中。 操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都从“根”开始,用“/”代表,并且延伸到子目录。Linux 则通过 “挂接” 的方式把所有分区都放置在 “根” 下各个目录里。
2.1Linux目录结构
1、在 linux 中根目录的子目录结构相对是固定的 (名字固定), 不同的目录功能是也是固定的
-
bin: binary, 二进制文件目录,存储了可执行程序,今天要将的命令对应的可执行程序都在这个目录中
-
sbin: super binary, root 用户使用的一些二进制可执行程序
-
etc: 配置文件目录,系统的或者用户自己安装的应用程序的配置文件都存储在这个目录中
-
lib: library, 存储了一些动态库和静态库,给系统或者安装的软件使用
-
media: 挂载目录,挂载外部设备,比如:光驱,扫描仪
-
mnt: 临时挂载目录,比如我们可以将 U 盘临时挂载到这个目录下
-
proc: 内存使用的一个映射目录,给操作系统使用的
-
tmp: 临时目录,存放临时数据,重启电脑数据就被自动删除了
-
boot: 存储了开机相关的设置
-
home: 存储了普通用户的家目录,家目录名和用户名相同
-
root: root 用户的家目录
-
dev: device , 设备目录,Linux 中一切皆文件,所有的硬件会抽象成文件存储起来,比如:键盘, 鼠标
-
lost+found: 一般时候是空的,电脑异常关闭 / 崩溃时用来存储这些无家可归的文件,用于用户系统恢复
-
opt: 第三方软件的安装目录
-
var: 存储了系统使用的一些经常会发生变化的文件, 比如:日志文件
-
usr: unix system resource, 系统的资源目录
-
/usr/bin: 可执行的二进制应用程序
-
/usr/games: 游戏目录
-
/usr/include: 包含的标准头文件目录
-
/usr/local: 和 opt 目录作用相同,安装第三方软件
-
2.2 相对路径
相对路径:相对路径就是相对于当前文件的路径。在 Linux 中有两个表示路径的特殊符号:
-
./:代表目前所在的目录,也可以使用 . 表示。
-
…/:代表当前目录的上一层目录,也可以使用 … 表示。
优点:简洁,目录相对较短,书写方便
缺点:变更工作目录之后,使用相同的相对路径就找不到原来的文件了
2.3 绝对路径
绝对路径:从系统磁盘起始节点开始描述的路径。
优点:在操作系统的任意位置都可以通过绝对路径访问到对应的文件
缺点:字符串较长,书写起来比较麻烦,看起来也不够简洁
3、命令解析器
3.1命令提示行
命令whoami可以查看当前用户名
‘@’连接用户名和主机名:用户名@主机名。
‘:’后面是当前路径,‘~’表示用户的家目录,表示的绝对路径是:/home/用户名
'$'表示当前目录为普通用户,‘#’表示当前用户为root用户。
3.2 命令解析器工作原理
1、命令都是通过命令解析器解析完成并执行的,如果用户在终端输入是正确的内部指令,命令解析器就执行这个命令,如果不是正确的指令,则提示命令无法解析。
2、命令解析器是一个后台进程,名字叫做 bash 通常我们更习惯将其称之为 shell (即: sh)。在 Unix 操作系统诞生之后一个叫伯恩 (Bourne) 的人为其编写了命令解析器取名为 shell, Linux 操作系统诞生之后伯恩再次改写了 shell (sh), 将其称之为 bash (Bourne Again SHell), bash 就是 sh 的增强版本。
3、在 Linux 操作系统中默认使用的命令解析器是 bash, 当然也同样支持使用 sh。当用户打开一个终端窗口,并输入相关指令, 按回车键, 这时候命令解析器就开始工作了。
4、which命令可以查看当前指令的可执行程序位置
5、工作原理:
-
在 Linux 中有一个叫做 PATH 的环境变量,里边存储了一些系统目录 (windows也有, 叫 Path)
-
命令解析器需要依次搜索 PATH 中的各个目录,检查这些目录中是否有用户输入的指令
-
如果找到了,执行该目录下的可执行程序,用户输入的命令就被执行完毕了
-
如果没有找到,继续搜索其他目录,最后还是没有找到,会提示命令找不到,因此无法被执行
-
3.3 命令行快捷键
由于很多shell命令的开头字母是相同的, 在这种情况下, 按一次Tab是不会自动补齐的,我们可以连续按两次Tab键,在当前终端中就可以显示出所有匹配成功的shell命令。
如果使用cd指令,按一次Tab键就已经补齐了路径,那再按两次Tab键就能把那个路径下的所有文件显示出来
二、文件管理命令
1.cd命令
cd:工作目录的切换
如果我们要频繁的在两个路径之间切换,也有相关的快捷操作,尤其是对于比较长的路径,可以说这简直是一个福利:
2.ls命令
ls 就是 list, 打印指定的文件信息
2.1 -l显示文件详细信息
给 ls 添加 -l 参数(就是 list 的意思)我们就可以看到文件的详细信息了,里边的信息量还是非常大的,其中包括: 文件类型 , 文件所有者对文件的操作权限 , 文件所属组用户对文件的操作权限 , 其他人对文件的操作权限 , 硬链接计数 , 文件所有者 , 文件所属组 , 文件大小(如果文件是目录,那仅代表目录所占磁盘空间大小,不包含目录内部文件大小) , 文件的修改日期 , 文件名。
(文件类型)(所有者权限)(所属组权限)(其他人权限) 硬链接计数 所有者 所属组 文件大小 文件修改日期 文件名字
在查看文件详细信息的时候,还有一种简单的写法,可以使用 ll 命令:
-
有些版本的 Linux 中 ll 等价于 ls -l;
-
有些版本的 Linux 中 ll 等价于 ls -laF;
2.1.1文件类型
在 Linux 操作系统中,一共有 7 中文件类型,这 7 中类型是根据文件属性进行划分的,而不是根据文件后缀划分的。
- -: 普通的文件,在 Linux 终端中没有执行权限的为白色,压缩包为红色,可执行程序为绿色字体
- d: 目录 (directory), 在 Linux 终端中为蓝色字体,如果目录的所有权限都是开放的,有绿色的背景色
- l: 软链接文件 (link), 相当于 windows 中的快捷方式,在 Linux 终端中为淡蓝色 (青色) 字体
- c: 字符设备 (char), 在 Linux 终端中为黄色字体
- b: 块设备 (block), 在 Linux 终端中为黄色字体
- p: 管道文件 (pipe), 在 Linux 终端中为棕黄色字体
- s: 本地套接字文件 (socket), 在 Linux 终端中为粉色字体
2.1.2用户类型
在 Linux 中有三大类用户: 文件所有者 , 文件所属组用户 , 其他人 , 我们可以对同一个文件给这三种人设置不同的操作权限,用于限制用户对文件的访问。
-
文件所有者
- Linux 中的所有的文件都有一个所有者,就是文件的主人
-
文件所属组
-
文件的主人属于哪个组,这个文件默认也就属于哪个组
-
用户组中可以有多个用户,这些组中的其他用户和所有者的权限可以是不一样的
-
-
其他人
-
这个用户既不是文件所有者也不是文件所属组中的用户,就称之为其他人
-
其他人对文件也可以拥有某些权限
-
2.1.3文件权限
Linux 中不同的用户可以对文件拥有不同的操作权限,权限一共有四种: 读权限 , 写权限 , 执行权限 , 无权限。
- 读权限:使用 r 表示,即: read
- 写权限:使用 w 表示,即: write
- 执行权限:使用 x 表示,即: excute
- 没有任何权限:使用 - 表示
2.1.4硬链接计数(文件别名数)
硬链接计数是一个整数,如果这个数为 N (N>=1),就说明在一个或者多个目录下一共有 N 个文件,但是这 N 个文件并不占用多块磁盘空间,他们使用的是同一块,如果通过其中一个文件修改了磁盘数据,那么其他文件中的内容也就变了。每当我们给给磁盘文件创建一个硬链接(使用 ln),磁盘上就会出现一个新的文件名,硬链接计数加 1,但是这新文件并不占用任何的磁盘空间,文件名还是映射到原来的磁盘地址上。
创建硬链接只是多了一个新的文件名, 拷贝文件不仅多了新的文件名在磁盘上数据也进行了拷贝
2.2.5 其他属性
- 文件大小 —> 单位是字节
- 如果文件是目录显示为 4096, 这是目录自身大小,不包括目录中的文件大小
- 文件日期:显示的是文件的修改日期,只要文件被更新,日期也会随之变化
- 文件名:文件自己的名字(没啥可解释的)
- 如果文件类型是软连接会这样显示: link -> /root/file/test, 后边的路径表示快捷方式链接的是哪个磁盘文件
2.2 -F显示目录后缀
在查看文件信息的时候,处理通过文件类型区分该文件是不是一个目录之外,还可以通过一个参数 -F 在目录名后边显示一个 /, 这样就可以直接区分出来了
2.3 -h单位显示
在查看文件大小的时候,如果文件比较大对应的数组自然也就很大,我们还需要基于字节进行相关的换算,不能直观得到我们想要的结果,如果数学不好,我们可以使用一个参数 -h (human)(就是命令说人话)。
3.创建和删除目录
-
创建目录
-
创建单个目录 :
mkdir 新目录的名字
-
一次性创建多层目录:
mkdir parent/child/baby1/baby2 -p
-
-
删除目录
- rmdir: 只能删除空目录,有点 low,不好用
- rm: 可以删除文件也可以删除目录,如果删除的的是目录,需要加参数 -r, 意思是递归 (recursion)
rm 命令还有另外两个经常使用的参数:
- -i: 删除的时候给提示
- -f: 强制删除文件,没有提示直接删除并且不能恢复,慎用
如果同时写了i和f,那么谁写在后面谁生效。
4.cp命令
-
拷贝文件 => 文件不存在得到新文件, 文件存在就覆盖
-
拷贝目录 ==> 目录不存在得到新目录, 该目录被拷贝到存在的目录中
cp 目录A 目录B -r
5.mv命令
-
文件的移动 :
#其中A可以是文件也可以是目录, B必须是目录而且必须是存在的 $ mv A B
-
文件改名
#其中A可以是文件也可以是目录,并且是存在的, B原来是不存在的 $ mv A B
-
文件覆盖
# 其中A是文件(非目录)并且是存在的, B也是一个文件(非目录)并且也存在 # A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件 $ mv A B
6.查看文件内容
6.1vim
6.2cat
该命令可以将文件内容显示到终端,由于终端是有缓存的,因此能显示的字节数也是受限制的。 如果文件太大数据就不能完全显示出来了,因此该命令适合查看比较小的文件内容。
$ cat 文件名
6.3more
该命令比 cat 要高级一点,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ more 文件名
# 快捷键
- 回车: 显示下一行
- 空格: 向下滚动一屏
- b: 返回上一屏
- q: 退出more
6.4less
该命令和 more 命令差不多,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ less 文件名
# 快捷键
- b: 向上翻页
- 空格: 向后翻页
- 回车: 显示下一行
- 上下键: 上下滚动
- q:退出
6.5head
使用该命令可以查看文件头部的若干行信息,使用方式如下:
# 默认显示文件的前10行
$ head 文件名
# 指定显示头部的前多少行
$ head -行数 文件名
6.6tail
使用该命令可以查看文件尾部的若干行信息,使用方式如下:
# 默认显示文件的后10行
$ tail 文件名
# 指定显示尾部的最后多少行
$ tail -行数 文件名
7.链接的创建
链接分两种类型: 软连接和硬链接。软连接相当于 windows 中的快捷方式,硬链接前边也已经介绍过了文件并不会进行拷贝,只是多出一个新的文件名并且硬链接计数会加 1。
-
软连接
# 语法: ln -s 源文件路径 软链接文件的名字(可以带路径) # 查看目录文件 [root@VM-8-14-centos ~/luffy]# ll total 8 drwxr-xr-x 3 root root 4096 Jan 25 17:27 get -rw-r--r-- 1 root root 37 Jan 25 17:26 onepiece.txt # 给 onepiece.txt 创建软连接, 放到子目录 get 中 [root@VM-8-14-centos ~/luffy]# ln -s /root/luffy/onepiece.txt get/link.lnk [root@VM-8-14-centos ~/luffy]# ll get total 4 lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
在创建软链接的时候, 命令中的 源文件路径建议使用绝对路径,这样才能保证创建出的软链接文件在任意目录中移动都可以访问到链接的那个源文件。
-
硬链接
# 语法: ln 源文件 硬链接文件的名字(可以带路径) # 创建硬链接文件, 放到子目录中 [root@VM-8-14-centos ~/luffy]# ln onepiece.txt get/link.txt # 查看链接文件和硬链接计数, 从 1 --> 2 [root@VM-8-14-centos ~/luffy]# ll get total 8 lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt -rw-r--r-- 2 root root 37 Jan 25 17:26 link.txt drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
硬链接和软链接不同,它是通话文件名直接找对应的硬盘地址,而不是基于路径,因此 源文件使用相对路径即可,无需为其制定绝对路径。
目录是不允许创建硬链接的。
8.文件属性
文件属性相关的命令主要是修改用户对文件的操作权限,文件所有者,文件所属组的相关信息。
8.1 修改文件文件权限
文件权限是针对文件所有者 , 文件所属组用户 , 其他人这三类人而言的,对应的操作指令是 chmod。设置方式也有两种,分别为文字设定法和数字设定法。
文字设定法是通过一些关键字 r, w, x, - 来描述用户对文件的操作权限。
数字设定法是通过一些数字 0, 1, 2, 4, 5, 6, 7 来描述用户对文件的操作权限。
-
文字设定法
#chmod # 语法格式: chmod who [+|-|=] mod 文件名 - who: - u: user -> 文件所有者 - g: group -> 文件所属组用户 - o: other -> 其他 - a: all, 以上是三类人 u+g+o - 对权限的操作: +: 添加权限 -: 去除权限 =: 权限的覆盖 - mod: 权限 r: read, 读 w: write, 写 x: execute, 执行 -: 没有权限 # 将文件所有者权限设置为读和执行, 也就是权限覆盖 robin@OS:~/Linux$ chmod u=rx b.txt robin@OS:~/Linux$ ll b.txt -r-xrw-r-- 2 robin robin 2929 Apr 14 18:53 b.txt* # 给其他人添加写和执行权限 robin@OS:~/Linux$ chmod o+wx b.txt robin@OS:~/Linux$ ll b.txt -r-xrw-rwx 2 robin robin 2929 Apr 14 18:53 b.txt* # 给文件所属组用户去掉读和执行权限 robin@OS:~/Linux$ chmod g-rx b.txt robin@OS:~/Linux$ ll b.txt -r-x-w-rwx 2 robin robin 2929 Apr 14 18:53 b.txt* # 将文件所有者,文件所属组用户,其他人权限设置为读+写+执行 robin@OS:~/Linux$ chmod a=rwx b.txt robin@OS:~/Linux$ ll b.txt -rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 b.txt*
-
数字设定法
# 语法格式: chmod [+|-|=] mod 文件名 - 对权限的操作: +: 添加权限 -: 去除权限 =: 权限的覆盖, 等号可以不写 - mod: 权限描述, 所有权限都放开是 7 - 4: read, r - 2: write, w - 1: execute , x - 0: 没有权限 # 分解: chmod 0567 a.txt 0 5 6 7 八进制 文件所有者 文件所属组用户 其他人 r + x r + w r+w+x ######################### 举例 ######################### # 查看文件 c.txt 的权限 robin@OS:~/Linux$ ll c.txt -rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 c.txt* # 文件所有者去掉执行权限, 所属组用户去掉写权限, 其他人去掉读+写权限 robin@OS:~/Linux$ chmod -123 c.txt robin@OS:~/Linux$ ll c.txt -rw-r-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt* # 文件所有者添加执行权限, 所属组用户和其他人权限不变 robin@OS:~/Linux$ chmod +100 c.txt robin@OS:~/Linux$ ll c.txt -rwxr-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt* # 将文件所有者,文件所属组用户,其他人权限设置为读+写, 没有执行权限 robin@OS:~/Linux$ chmod 666 c.txt robin@OS:~/Linux$ ll c.txt -rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 c.txt
8.2 修改文件所有者
默认情况下,文件是通过哪个用户创建出来的,就属于哪个用户,这个用户属于哪个组,文件就属于哪个组。如果有特殊需求,可以修改文件所有者,对应的操作命令是 chown。因为修改文件所有者就跨用户操作,普通用户没有这个权限,需要借助管理员权限才能完成该操作。
普通用户借助管理员权限执行某些shell命令, 需要在命令前加关键字sudo, 但是普通用户默认是没有使用 sudo的资格的, 需要修改 /etc/sudoers 文件 。
8.2.1普通用户添加sudo权限
-
ubuntu 默认的 root 用户是没有固定密码的,它的密码是随机产生并且动态改变的,即每次开机都有一个新的 root 密码,如果想查看 root 密码,那么直接设置新的 root 密码即可。
sudo passwd root
-
# 添加新用户 sanji [root@VM-8-14-centos ~]# adduser sanji # 给新用户 sanji 设置一个密码 [root@VM-8-14-centos ~]# passwd sanji Changing password for user sanji. New password: Retype new password: passwd: all authentication tokens updated successfully. # 切换到 sanji 用户 [root@VM-8-14-centos ~]# su - sanji # 让 sanji 用户执行一个只有管理员才有权限执行的操作, 因此需要在命令前加 sudo [sanji@VM-8-14-centos ~]$ sudo updatedb We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for sanji: sanji is not in the sudoers file. This incident will be reported.
最后命令还是没能够执行,原因是没有权限,最后提示告诉我们 sanji is not in the sudoers file, 因此我们只需要将用户 sanji 添加到这个文件中就可以了,说干就干。
-
这个叫做 sudoers 的文件位于 /etc 目录下,我们先切换到 /etc 目录,然后查看一下这个文件的详细信息
$ cd /etc/ $ ll sudoers -r-------- 1 root root 4382 Jan 21 23:16 sudoers
我们惊奇的发现这个文件的所有者 root 对它也只有读权限,默认是不能修改的,作为 root 以外的其他用户对它没有任何的操作权限。
解决方案:
-
先切换到 root 用户
-
在 root 用户下修改这个文件属性,给其添加写权限
-
修改文件内容,把普通用户 sanji 添加进去,保存退出
-
将文件权限修改为原来的 400 (r--------)
-
切换到用户 sanji, 这时候就可以使用 sudo 了,权限添加成功
# 1. 切换到root用户 $ su root Password: # 输入root用户的密码 # 2. 修改文件权限, 暴力一点没有关系, 反正还需要改回去, 直接 777 就行 $ chmod 777 sudoers # 3. 使用 vim 打开这个文件 $ vim sudoers # 4. 在文件中找到这一行, 在文件偏尾部的位置 root ALL=(ALL) ALL # 5. 照葫芦画瓢, 在下边新添加一行内容如下: root ALL=(ALL) ALL # 原来的内容 sanji ALL=(ALL) ALL # 新添加的行, 将用户名指定为 sanji 即可 # 6. 保存退出 (先按esc, 然后输入 :wq) # 7. 将文件改回原来的权限 $ chmod 400 sudoers
恭喜,权限设置成功,你的普通的用户可以使用 sudo 执行只有管理员才能操作的命令啦。
-
8.2.2 修改文件所有者
# 语法1-只修改所有者:
$ sudo chown 新的所有者 文件名
# 语法2-同时修改所有者和所属组:
$ sudo chown 新的所有者:新的组名 文件名
# 查看文件所有者:b.txt 属于 robin 用户
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 b.txt
# 将 b.txt 的所有者修改为 luffy
robin@OS:~/Linux$ sudo chown luffy b.txt
[sudo] password for robin:
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
# 修改文件所有者和文件所属组
# 查看文件所有者和所属组
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 luffy robin 2929 Apr 14 18:53 b.txt
# 同时修改文件所有者和文件所属组
robin@OS:~/Linux$ sudo chown robin:luffy b.txt
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt
8.3 修改文件所属组
普通用户没有修改文件所属组的权限,如果需要修改需要借助管理员权限才能完成,需要使用的命令是 chgrp。当然了这个属性的修改也可以使用 chown 命令来完成。
# 只修改文件所属的组, 普通用户没有这个权限, 借助管理员的权限
# 语法: sudo chgrp 新的组 文件名
# 查看文件所属组信息
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin luffy 2929 Apr 14 18:53 b.txt
# 修改文件所属的组
robin@OS:~/Linux$ sudo chgrp robin b.txt
robin@OS:~/Linux$ ll b.txt
-rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 b.txt
9.其他命令
9.1 tree命令 以树状结构查看目录
该命令有一个常用参数 -L, 即 (layer) 显示目录的层数。
# 语法格式
$ tree [-L n] # 查看当前目录的结构, n为显示的目录层数
$ tree 目录名 [-L n] # 查看指定目录的结构, n为显示的目录层数
# 只显示1层
[root@VM-8-14-centos ~]# tree -L 1
.
|-- ace
|-- file
|-- ipc.tar.gz
|-- link.lnk -> /root/luffy/onepiece.txt
`-- luffy
# 显示2层目录
[root@VM-8-14-centos ~]# tree -L 2
.
|-- ace
| `-- brother
|-- file
| |-- dir
| |-- haha.tar.gz
| |-- hello
| |-- link -> /root/file/test
| |-- pipe-2
| |-- subdir
| `-- test
|-- ipc.tar.gz
|-- link.lnk -> /root/luffy/onepiece.txt
`-- luffy
|-- get
`-- onepiece.txt
9.2 touch命令
使用 touch 命令可以创建一个新的空文件 , 如果指定的文件是已存在的,只会更新文件的修改日期,对内容没有任何影响。
9.3 which命令
which 命令可以查看要执行的命令所在的实际路径,命令解析器工作的时候也会搜索这个目录。需要注意的是该命令只能查看非内建的shell指令所在的实际路径, 有些命令是直接写到内核中的, 无法查看。
我们使用的大部分 shell 命令都是放在系统的 /bin 或者 /usr/bin 目录下:
9.4 重定向命令
关于重定向使用最多的是就是输出重定向 , 顾名思义就是修改输出的数据的位置,通过重定向操作我们可以非常方便的进行文件的复制,或者文件内容的追加。输出重定向使用的不是某个关键字而是符号 > 或者 >>。
-
‘>’:将文件内容写入到指定文件中,如果文件中已有数据,则会使用新数据覆盖原数据
-
‘>>’:将输出的内容追加到指定的文件尾部
# 输出的重定向举例: printf默认是要将数据打印到终端, 可以修改默认的输出位置 => 重定向到某个文件中
# 关键字 >
# 执行一个shell指令, 获得一个输出, 这个输出默认显示到终端, 如果要将其保存到文件中, 就可以使用重定向
# 如果当前目录下test.txt不存在, 会被创建, 如果存在, 内容被覆盖
$ date > test.txt
# 日期信息被写入到文件 test.txt中
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
# 如果不希望文件被覆盖, 而是追加, 需要使用 >>
in@OS:~/Linux$ date >> test.txt
# 日期信息被追加到 test.txt中
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
Wed Apr 15 09:38:44 CST 2020
# 继续追加信息
robin@OS:~/Linux$ date >> test.txt
robin@OS:~/Linux$ cat test.txt
Wed Apr 15 09:37:52 CST 2020
Wed Apr 15 09:38:44 CST 2020
Wed Apr 15 09:39:03 CST 2020
三、用户管理命令
1.切换用户
用户切换需要使用 su 或者 su -。使用 su 只切换用户,当前的工作目录不会变化,但是使用 su - 不仅会切换用户也会切换工作目录,工作目录切换为当前用户的家目录。
从用户 A 切换到用户 B, 如果还想再切换回用户 A,可以直接使用 exit。
Centos可以直接登陆root用户,Ubuntu不能用root用户登陆,只能先登陆普通用户,再从终端切换到root用户
# 只切换用户, 工作目录不变
$ su 用户名
# 举例:
robin@OS:~/Linux$ su luffy
Password: # 需要输入luffy用户的密码
luffy@OS:/home/robin/Linux$ # 工作目录不变
# 切换用户和工作目录, 会自动跳转到当前用户的家目录中
$ su - 用户名
# 举例:
robin@OS:~/Linux$ su - luffy
Password: # 需要输入luffy用户的密码
luffy@OS:~$ pwd
/home/luffy # 工作目录变成了luffy的家目录
# 回到原来的用户
$ exit
2.添加删除用户
作为一个普通用户是没有给系统添加新用户这个权限的,如果想要添加新用户可以先切换到 root 用户,或者基于普通用户为其添加管理员权限来完成新用户的添加。添加新用户需要使用 adduser/useradd 命令来完成。建议使用adduser,在Ubuntu和Centos上都是一样操作。
普通用户没有添加 / 删除用户的权限,需要授权,查看8.2.1普通用户添加sudo权限。
2.1 添加新用户
# 添加用户
# sudo -> 使用管理员权限执行这个命令
$ sudo adduser 用户名
# centos
$ sudo useradd 用户名
# ubuntu
$ sudo useradd -m -s /bin/bash 用户名
#-m表示如果用户的home目录是不存在的就会自动创建home目录
#-s指定用户使用的命令解析器
#-t设置密码,不建议使用,因为会暴露密码
# 在使用 adduser 添加新用户的时候,有的Linux版本执行完命令就结束了,有的版本会提示设置密码等用户信息
robin@OS:~/Linux$ sudo adduser lisi
Adding user `lisi' ...
Adding new group `lisi' (1004) ...
Adding new user `lisi' (1004) with group `lisi' ...
Creating home directory `/home/lisi' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for lisi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
当新用户添加完毕之后,我们可以切换到新添加的用户下,用来检测是否真的添加成功了,另外我们也可以使用其他方式来检验,首先在 /home 目录中会出现一个和用户名同名的目录,这就是新创建的用户的家目录,另外我们还可以查看 /etc/passwd 文件,里边记录着新添加的用户的更加详细的信息:
zhx@zhx:/etc$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
//文件格式:
用户名:加密之后的密码:用户ID:所属组ID:用户名:用户家目录:用户默认使用命令解析器
2.2 删除用户
删除用户并不是将 /home 下的用户家目录删除就完事儿了,我们需要使用 userdle 命令才能删除用户在系统中的用户 ID 和所属组 ID 等相关信息,但是需要注意的是在某些Linux版本中用户虽然被删除了, 但是它的家目录却没有被删除,需要我们手动将其删除。
# 删除用户, 添加参数 -r 就可以一并删除用户的家目录了
$ sudo userdel 用户名 -r
# 删除用户 lisi
$ sudo userdel lisi -r
# 使用deluser不能添加参数-r, 家目录不能被删除, 需要使用 rm 命令删除用户的家目录, 比如:
$ sudo rm /home/用户名 -r
由于 Linux 的版本很多,删除用户对应的操作指令不是唯一的,经测试在 CentOS 版本只支持 userdel命令 , 在 Ubuntu中既支持 userdel 也支持 deluser命令。
3.添加删除用户组
默认情况下,只要创建新用户就会得到一个同名的用户组,并且这个用户属于这个组。一般情况下不需要创建新的用户组,如果有需求可以使用 groupadd 添加用户组,使用 groupdel 删除用户组。
由于普通用户没有添加删除用户组权限,因此需要在管理员(root)用户下操作,或者在普通用户下借助管理员权限完成该操作。
# 基于普通用户创建新的用户组
$ sudo groupadd 组名
# 基于普通用户删除已经存在的用户组
$ sudo groupdel 组名
如果验证用户组是否添加成功了,可以查看 /etc/group 文件,里边有用户组相关的信息:
zhx@zhx:/etc$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,zhx
tty:x:5:syslog
#文件格式:
用户名:加密之后的密码:用户组ID
在 Ubuntu 中添加删除用户组可以使用 addgroup/groupadd 和 delgroup/groupdel
在 CentOS 中添加和删除用户只能使用 groupadd 和 groupdel
我们只需要通过 which 命令名 查看,就能知道该 Linux 版本是不是支持使用该命令了。
4.修改密码
Linux 中设置用户密码和修改用户密码的方式是一样的,修改用户密码又分几种情况: 修改当前用户密码 , 普通用户A修改其他普通用户密码 , 普通用户A修改root用户密码 , root用户修改普通用户密码。修改密码需要使用 passwd 命令。当创建了一个普通用户却没有提示指定密码,或者忘记了用户密码都可以通过该命令来实现自己重置密码的需求。
- 当前用户修改自己的密码,默认是有权限操作的
- 当前普通用户修改其他用户密码,默认没有权限,需要借助管理员权限才能完成操作
- 当前普通用户修改 root 用户密码,默认没有权限,需要借助管理员权限才能完成操作
- root 用户修改其他普通用户密码,默认有权限,可以直接修改
# passwd
# 修改当前用户
$ passwd
# 修改非当前用户密码
$ sudo passwd 用户名
# 修改root
$ sudo passwd root
四、压缩命令
基于 Linux 的常用压缩包操作,格式包含:tar.gz, .tgz, .tar.bz2, .zip, .rar, .tar.xz。
1.tar
在 Linux 操作系统中默认自带两个原始的压缩工具分别是 gzip 和 bzip2, 但是它们都有先天的缺陷,不能打包压缩文件, 每个文件都会生成一个单独的压缩包, 并且压缩之后不会保留原文件。
Linux 中自带一个打包工具,叫做 tar, 默认情况下该工具是不能进行压缩操作的,在这种情况下 tar 和 gzip, bzip2 就联姻了,各自发挥各自的优势,Linux 下最强大的打包压缩工具至此诞生。
我们在使用 tar 进行压缩和解压缩的时候,只需要指定相对用的参数,在其内部就会调用对应的压缩工具 gzip 或者 bzip2 完成指定的操作。
使用tar如果发生覆盖,不会给任何提示,会直接覆盖
1.1 压缩 (.tar.gz .tar.bz2 .tgz)
如果使用 tar 完成文件压缩,涉及的参数如下,在使用过程中参数没有先后顺序:
- c: 创建压缩文件
- z: 使用 gzip 的方式进行文件压缩
- j: 使用 bzip2 的方式进行文件压缩
- v: 压缩过程中显示压缩信息,可以省略不写
- f: 指定压缩包的名字
一般认为 .tgz 文件就等同于 .tar.gz 文件,因此它们的压缩方式是相同的。
# 语法:
$ tar 参数 生成的压缩包的名字 要压缩的文件(文件或者目录)
# 备注: 关于生成的压缩包的名字, 建议使用标准后缀, 方便识别:
- 压缩使用 gzip 方式, 标准后缀格式为: .tar.gz
- 压缩使用 bzip2 方式, 标准后缀格式为: .tar.bz2
举例:使用 gzip 的方式进行文件压缩
# 查看目录内容
[root@VM-8-14-centos ~/luffy]# ls
get onepiece.txt robin.txt
# 压缩目录中所有文件, 如果要压缩某几个文件, 直接指定文件名即可
[root@VM-8-14-centos ~/luffy]# tar zcvf all.tar.gz *
get/ # ....... 压缩信息
get/link.lnk # ....... 压缩信息
get/onepiece/ # ....... 压缩信息
get/onepiece/haha.txt
get/link.txt
onepiece.txt
robin.txt
# 查看目录文件, 多了一个压缩文件 all.tar.gz
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz get onepiece.txt robin.txt
举例:使用 bzip2 的方式进行文件压缩
# 查看目录内容
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz get onepiece.txt robin.txt
# 压缩目录中除 all.tar.gz 的文件和目录
[root@VM-8-14-centos ~/luffy]# tar jcvf part.tar.bz2 get onepiece.txt robin.txt
get/ # ....... 压缩信息
get/link.lnk # ....... 压缩信息
get/onepiece/ # ....... 压缩信息
get/onepiece/haha.txt
get/link.txt
onepiece.txt
robin.txt
# 查看目录信息, 多了一个压缩文件 part.tar.bz2
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz get onepiece.txt part.tar.bz2 robin.txt
1.2 解压缩 (.tar.gz .tar.bz2 .tgz)
如果使用 tar 进行文件的解压缩,涉及的参数如下,在使用过程中参数没有先后顺序:
- x: 释放压缩文件内容
- z: 使用 gzip 的方式进行文件压缩,压缩包后缀为.tar.gz
- j: 使用 bzip2 的方式进行文件压缩,压缩包后缀为.tar.bz2
- v: 解压缩过程中显示解压缩信息
- f: 指定压缩包的名字
使用以上参数是将压缩包解压到当前目录,如果需要解压到指定目录,需要指定参数 -C。 一般认为 .tgz 文件就等同于 .tar.gz 文件,解压缩方式是相同的。解压的语法格式如下:
# 语法1: 解压到当前目录中
$ tar 参数 压缩包名
# 语法2: 解压到指定目录中
$ tar 参数 压缩包名 -C 解压目录
举例:使用 gzip 的方式进行文件解压缩
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz get onepiece.txt part.tar.bz2 robin.txt temp
# 将 all.tar.gz 压缩包解压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# tar zxvf all.tar.gz -C temp
get/ # 解压缩文件信息
get/link.lnk # 解压缩文件信息
get/onepiece/ # 解压缩文件信息
get/onepiece/haha.txt # 解压缩文件信息
get/link.txt
onepiece.txt
robin.txt
# 查看temp目录内容, 都是从压缩包中释放出来的
[root@VM-8-14-centos ~/luffy]# ls temp/
get onepiece.txt robin.txt
举例:使用 bzip2 的方式进行文件解压缩
# 删除 temp 目录中的所有文件
[root@VM-8-14-centos ~/luffy]# rm temp/* -rf
# 查看 luffy 目录中的文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz get onepiece.txt part.tar.bz2 robin.txt temp
# 将 part.tar.bz2 中的文件加压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# tar jxvf part.tar.bz2 -C temp
get/ # 解压缩文件信息
get/link.lnk # 解压缩文件信息
get/onepiece/ # 解压缩文件信息
get/onepiece/haha.txt # 解压缩文件信息
get/link.txt
onepiece.txt
robin.txt
# 查看 temp 目录中的文件信息
[root@VM-8-14-centos ~/luffy]# ls temp/
get onepiece.txt robin.txt
2. zip
zip 格式的压缩包在 Linux 中也是很常见的,在某些版本中需要安装才能使用
- Ubuntu
$ sudo apt install zip # 压缩
$ sudo apt install unzip # 解压缩
- CentOS
# 因为 centos 可以使用 root 用户登录, 基于 root 用户安装软件, 不需要加 sudo
$ sudo yum install zip # 压缩
$ sudo yum install unzip # 解压缩
2.1 压缩 (.zip)
使用 zip 压缩目录需要注意一点,必须要添加参数 -r, 这样才能将子目录中的文件一并压缩,如果要压缩的文件中没有目录,该参数就可以不写了。
另外使用 zip 压缩文件,会自动生成文件后缀.zip, 因此就不需要额外指定了。
# 语法: 后自动添加压缩包后缀 .zip, 如果要压缩目录, 需要添加参数 r
$ zip [-r] 压缩包名 要压缩的文件
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
get onepiece.txt robin.txt temp
# 压缩目录 get 和文件 onepiece.txt robin.txt 得到压缩包 all.zip(不需要指定后缀, 自动添加)
[root@VM-8-14-centos ~/luffy]# zip all onepiece.txt robin.txt get/ -r
adding: onepiece.txt (stored 0%)
adding: robin.txt (stored 0%)
adding: get/ (stored 0%)
adding: get/link.lnk (stored 0%) # 子目录中的文件也被压缩进去了
adding: get/onepiece/ (stored 0%) # 子目录中的文件也被压缩进去了
adding: get/onepiece/haha.txt (stored 0%) # 子目录中的文件也被压缩进去了
adding: get/link.txt (stored 0%) # 子目录中的文件也被压缩进去了
# 查看目录文件信息, 多了一个压缩包文件 all.zip
[root@VM-8-14-centos ~/luffy]# ls
all.zip get onepiece.txt robin.txt temp
2.2 解压缩 (.zip)
对应 zip 格式的文件解压缩,必须要使用 unzip 命令,和压缩的时候使用的命令是不一样的。如果压缩包中的文件要解压到指定目录需要指定参数 -d, 默认是解压缩到当前目录中。
# 语法1: 解压到当前目录中
$ unzip 压缩包名
# 语法: 解压到指定目录, 需要添加参数 -d
$ unzip 压缩包名 -d 解压目录
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.zip get onepiece.txt robin.txt temp
# 删除 temp 目录中的所有文件
[root@VM-8-14-centos ~/luffy]# rm temp/* -rf
# 将 all.zip 解压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# unzip all.zip -d temp/
Archive: all.zip
extracting: temp/onepiece.txt # 释放压缩的子目录中的文件
extracting: temp/robin.txt # 释放压缩的子目录中的文件
creating: temp/get/
extracting: temp/get/link.lnk
creating: temp/get/onepiece/
extracting: temp/get/onepiece/haha.txt # 释放压缩的子目录中的文件
extracting: temp/get/link.txt
# 查看 temp 目录中的文件信息
[root@VM-8-14-centos ~/luffy]# ls temp/
get onepiece.txt robin.txt
3. rar
rar 这种压缩格式在 Linux 中并不常用,这是 Windows 常用的压缩格式,如果想要在 Linux 压缩和解压这种格式的文件需要额外安装对应的工具,不同版本的 Linux 安装方式也是不同的。
- Ubuntu
# 执行在线下载命令即可
$ sudo apt install rar
- CentOS
# 需要下载安装包, 官方地址: https://www.rarlab.com/download.htm
# 从下载页面找到 Linux 版本的下载链接并复制链接地址, 使用 wget 下载到本地
$ wget https://www.rarlab.com/rar/rarlinux-x64-6.0.0.tar.gz
# 将下载得到的 rarlinux-x64-6.0.0.tar.gz 压缩包解压缩, 得到解压目录 rar
$ tar zxvf rarlinux-x64-6.0.0.tar.gz
# 将得到的解压目录移动到 /opt 目录中 (因为/opt软件安装目录, 移动是为了方便管理, 不移动也没事儿)
# 该操作需要管理员权限, 我是使用 root 用户操作的
$ mv ./rar /opt
# 给 /opt/rar 目录中的可执行程序添加软连接, 方便命令解析器可以找到该压缩命令
$ ln -s /opt/rar/rar /usr/local/bin/rar
$ ln -s /opt/rar/unrar /usr/local/bin/unrar
该方法在任何版本的 Linux 系统中都适用
3.1 压缩 (.rar)
使用 rar 压缩过程中的注意事项和 zip 是一样的,如果压缩的是目录, 需要指定参 -r, 如果只压缩文件就不需要添加了。压缩过程中需要使用参数 a (archive), 压缩归档的意思。
rar 工具在生成压缩包的时候也会自动添加后缀,名字为.rar, 因此我们只需要指定压缩包的名字。
# 文件压缩, 需要使用参数 a, 压缩包名会自动添加后缀 .rar
# 如果压缩了目录, 需要加参数 -r
# 语法:
$ rar a 压缩包名 要压缩的文件 [-r]
# 举例
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
get onepiece.txt robin.txt temp
# 压缩文件 onepiece.txt, robin.txt 和目录 get/ 到要是文件 all.rar 中
[root@VM-8-14-centos ~/luffy]# rar a all onepiece.txt get/ robin.txt -r
RAR 6.00 Copyright (c) 1993-2020 Alexander Roshal 1 Dec 2020
Trial version Type 'rar -?' for help
Evaluation copy. Please register.
Creating archive all.rar
Adding onepiece.txt OK
Adding get/link.lnk OK # 子目录中的文件也被压缩了
Adding get/onepiece/haha.txt OK # 子目录中的文件也被压缩了
Adding get/link.txt OK # 子目录中的文件也被压缩了
Adding robin.txt OK
Adding get/onepiece OK
Done
[root@VM-8-14-centos ~/luffy]# ls
all.rar get onepiece.txt robin.txt temp
3.2 解压缩 (.rar)
解压缩.rar 格式的文件的时候,可以使用 rar 也可以使用 unrar, 操作方式是一样的,需要添加参数 x, 默认是将压缩包内容释放到当前目录中,如果要释放到指定目录直接指定解压目录名即可,不需要使用任何参数。
# 解压缩: 需要参数 x
# 语法: 解压缩到当前目录中
$ rar/unrar x 压缩包名字
# 语法: 解压缩到指定目录中
rar/unrar x 压缩包名字 解压目录
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.rar get onepiece.txt robin.txt temp
# 删除 temp 目录中的所有文件
[root@VM-8-14-centos ~/luffy]# rm temp/* -rf
# 将 all.rar 中的文件解压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# rar x all.rar temp/
RAR 6.00 Copyright (c) 1993-2020 Alexander Roshal 1 Dec 2020
Trial version Type 'rar -?' for help
Extracting from all.rar
Extracting temp/onepiece.txt OK
Creating temp/get OK
Extracting temp/get/link.lnk OK # 子目录文件也被释放出来了
Extracting temp/get/link.lnk OK # 子目录文件也被释放出来了
Extracting temp/get/link.lnk OK # 子目录文件也被释放出来了
Creating temp/get/onepiece OK
Extracting temp/get/link.lnk OK # 子目录文件也被释放出来了
Extracting temp/get/link.lnk OK # 子目录文件也被释放出来了
Extracting temp/get/onepiece/haha.txt OK
Extracting temp/get/link.txt OK
Extracting temp/robin.txt OK
All OK
# 查看 temp 目录中文件信息
[root@VM-8-14-centos ~/luffy]# ls temp/
get onepiece.txt robin.txt
4. xz
.xz 格式的文件压缩和解压缩都相对比较麻烦,通过一个命令是完不成对应的操作的,需要通过两步操作才行。并且操作过程中需要使用 tar 工具进行打包,压缩使用的则是 xz 工具。
4.1 压缩(.tar.xz)
创建文件的步骤如下,首先 将需要压缩的文件打包 tar cvf xxx.tar files, 然后再对打包文件进行压缩 xz -z xxx.tar, 这样我们就可以得到一个打包之后的压缩文件了。
使用 xz 工具压缩文件的时候需要添加参数 -z
# 语法:
# 第一步
$ tar cvf xxx.tar 要压缩的文件
# 第二步, 最终得到一个xxx.tar.xz 格式的压缩文件
$ xz -z xxx.tar
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
get onepiece.txt robin.txt temp
# 将文件 onepiece.txt, robin.txt 和目录 get 打包到 all.tar 中
[root@VM-8-14-centos ~/luffy]# tar cvf all.tar onepiece.txt robin.txt get/
onepiece.txt
robin.txt
get/
get/link.lnk
get/onepiece/
get/onepiece/haha.txt
get/link.txt
# 查看目录文件信息, 多了一个打包文件 all.tar
[root@VM-8-14-centos ~/luffy]# ls
all.tar get onepiece.txt robin.txt temp
# 使用 xz 工具压缩打包文件 all.tar
[root@VM-8-14-centos ~/luffy]# xz -z all.tar
# 最终得到了压缩之后的打包文件 all.tar.xz
[root@VM-8-14-centos ~/luffy]# ls
all.tar.xz get onepiece.txt robin.txt temp
4.2 解压缩 (.tar.xz)
解压缩的步骤和压缩的步骤相反,需要先解压缩,然后将文件包中的文件释放出来。
使用 xz 工具解压需要使用参数 -d。
# 语法:
# 第一步: 压缩包解压缩, 得到 xxx.tar
$ xz -d xxx.