目录
Linux发行版,不同发行版的联系与区别
Linux发行版
Linux主要且流行的发现版本有很多,其中主要罗列如下:
Redhat:RHEL,CentOS,Fedora
Debian:ubuntu,deepin,mint
Slackware:SUSE Linux Enterprise Server,OpenSuse桌面
AIpine:一个面向安卓的轻型Linux发行版,AIpine采用musllibc和busybox以减少系统的体积和运行时资源消耗,但功能上比busybox完善,大小只有5M左右
ArchLinux:轻量简洁,遵循K.I.S.S.原则(keep it simple and stupid),Manjaro
Gentoo:极致性能,不提供传统意义的安装程序,下载源代码再本机上编译安装软件
LFS:Linux Form scratch自制Linux,只是一个说明书
Android:kernel+busybos+java虚拟机
不同发行版的联系与区别
不同发行版之间的联系和区别
联系:所有发行版都是使用Linux内核;都需要遵循GNU的GPL协定;所有的发行版都有自己的版本号,版本格式约定基本一样(主版本号.次版本号.发行号.修正号)。
区别:发行版的本质区别,在于继承不同版本的内核,库、程序的组成。不同发行版采用了不同的包管理器。如CentOS,openSUSE,RHEL,Fedora,SLES使用RPM包管理系统,包文件以rpm为扩展名;Ubuntu,Debian使用基于DPKG包管理系统文件以deb为扩展名。
CentOS-8安装详解
本例以VMware Workstation虚拟化软件安装CentOS8.3为例说明安装系统主要步骤。
环境准备
安装了workstation15.5 pro的windows电脑,CentOS-8.3.2011-x86_64-dvd1.iso镜像文件,下载链接:http://mirrors.aliyun.com/centos/8/isos/x86_64/
开始安装
1.打开vmware,选择创建新的虚拟机
2.选择自定义高级,按提示下一步
3.选择稍后安装操作系统,设置所要安装系统版本。
4.选择版本,选择需要安装对应的版本即可,没有找到就选择一个Linux版本内核,此处选择影响不大,最后系统安装的版本和你提供的镜像有关。
5.命名虚拟机,并选择安装位置。
6.编辑虚拟机的配置信息,处理器等信息需要略低于于你的物理机。
7.自定义硬件,删除不必要的硬件,来减少资源消耗(土豪请无视)。这边我删除了声卡和打印机,因为基本用不到。
8.完成虚拟机创建,选择ISO镜像文件。
9.打开虚拟机,进行安装。
10.选择Install CentOS Linux8,开始安装。
11.CentOS安装界面基本和windows一样了,无脑下一步下一步即可。
12.选择安装磁盘,安装软件选择,带GUI的Server,启用网络服务,设置超级用户密码并开始安装。
13.等待安装完成,创建一般账号并登录。
实现历史命令记录执行命令时间
可以通过设置命令历史相关环境变量来实现时间化显示历史操作命令记录
示例:
[root@localhost ~]# vim /etc/profile
#在文件最后加上如下命令:
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S $ "
#重新登录后即可生效
[root@localhost ~]# history
1 2021-04-25 22:31:46 $ vim /etc/profile
2 2021-04-25 22:31:46 $ ll
3 2021-04-25 22:31:46 $ ks
4 2021-04-25 22:31:46 $ history
5 2021-04-25 22:31:46 $ logout
6 2021-04-25 22:31:49 $ history
[root@localhost ~]#
Linux哲学思想
- 一切皆文件,几乎把所有的资源系统抽象为文件形式:包括硬件设备,甚至通信接口等。这样的好处就是提供资源管理效率。
- 由众多功能单一的程序组成:一个程序只做一个具体的用途。
- 组合多个小程序完成复杂任务,程序分工明确运行后方便进程管理:程序代码也轻量化,高效,容易修复错误。小程序易于理解,维护,消耗系统资源较少,易于与其他工具结合实现更多的功能。
- 避免复杂的人机交互界面,减少资源消耗:使用命令行接口执行效率更高,易于以编程的方式实现自动化任务。
- 使用文本文件保存配置信息:文本文件易于阅读和编辑,系统故障时系统恢复也更容易。
Linux常用命令使用格式
Linux常用命令格式为:命令 [选项] [参数]。
命令格式中的 [] 代表可选项,也就是有些命令可以不写选项或参数,也能执行。那么,我们就用 Linux 中最常见的 ls 命令来解释一下命令的格式。如果按照命令的分类,那么 ls 命令应该属于目录操作命令。
COMMAND OPTIONS ARGUMENTS
- 选项的作用,调整命令功能,可以根据不同的选项得到不同的功能。
示例:
[root@localhost ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures redis-6.0.3 Templates
Desktop Downloads Music Public redis-6.0.3.tar.gz Videos
[root@localhost ~]#
[root@localhost ~]# ls -l
total 2172
-rw-------. 1 root root 1526 Mar 16 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 41 Apr 27 2020 Desktop
drwxr-xr-x. 2 root root 6 Mar 16 2020 Documents
drwxr-xr-x. 2 root root 6 Mar 16 2020 Downloads
-rw-r--r--. 1 root root 1653 Mar 16 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Mar 16 2020 Music
drwxr-xr-x. 2 root root 6 Mar 16 2020 Pictures
drwxr-xr-x. 2 root root 6 Mar 16 2020 Public
drwxrwxr-x. 7 root root 4096 May 17 2020 redis-6.0.3
-rw-r--r--. 1 root root 2210882 Jun 27 2020 redis-6.0.3.tar.gz
drwxr-xr-x. 2 root root 6 Mar 16 2020 Templates
drwxr-xr-x. 2 root root 6 Mar 16 2020 Videos
[root@localhost ~]# ls -hl
total 2.2M
-rw-------. 1 root root 1.5K Mar 16 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 41 Apr 27 2020 Desktop
drwxr-xr-x. 2 root root 6 Mar 16 2020 Documents
drwxr-xr-x. 2 root root 6 Mar 16 2020 Downloads
-rw-r--r--. 1 root root 1.7K Mar 16 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Mar 16 2020 Music
drwxr-xr-x. 2 root root 6 Mar 16 2020 Pictures
drwxr-xr-x. 2 root root 6 Mar 16 2020 Public
drwxrwxr-x. 7 root root 4.0K May 17 2020 redis-6.0.3
-rw-r--r--. 1 root root 2.2M Jun 27 2020 redis-6.0.3.tar.gz
drwxr-xr-x. 2 root root 6 Mar 16 2020 Templates
drwxr-xr-x. 2 root root 6 Mar 16 2020 Videos
[root@localhost ~]#
Linux发行版系统目录名称命名规则及用途
文件系统的目录结构
在Linux系统中,文件以及目录被组织成一个单根倒置的树结构。
所有文件皆以根开始 ,以“/”表示,其他目录皆在根目录之下。
文件名称大小写敏感,例如:MAIL,Mail,mail...
以 "." 开头的文件为隐藏文件,路径以"/"分隔。
文件名

常见的文件系统目录及功能
/ 根目录
/boot 引导文件存放目录
/bin 所有用户使用的基本命令,二进程程序
/sbin
/lib 32位的库
/lib64 64位的库
/etc 配置文件目录
/home 普通用户家目录
/root 管理员的家目录
/media 便携式移动设备挂载点
/mnt 临时文件及特殊文件存储问题
/opt 第三方应用程序安装位置
/srv 系统运行的服务用到的数据
/tmp 临时文件存储位置
/usr
/var
/proc 用于输出内核与进程信息相关的虚拟文件系统
/sys 用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux selinux相关的安全策略等信息的存储位置
文件元数据
文件系统中的数据分为数据和元数据。
数据:数据是指普通文件中的实际信息内容。
元数据:指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等
元数据信息
文件元数据信息如下:
File 文件名
Size 文件大小(字节)
Blocks 文件使用的数据块总数
IO Block 数据块的大小
regular file:文件类型(常规文件)
Device 设备编号
Inode 文件所在的Inode
Links 硬链接次数
Access 权限
Uid 属主id/用户
Gid 属组id/组名
Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
如何查看元数据
可以使用命令:stat
示例如下:
[root@localhost ~]# stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1268 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 202176641 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2021-04-13 23:35:27.952296406 +0800
Modify: 2021-04-13 22:39:24.429113079 +0800
Change: 2021-04-13 22:39:24.429113079 +0800
Birth: -
[root@localhost ~]#
修改元数据时间戳
可以使用命令:touch
选项:
-a 仅改变atime和ctime-m 仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]指定atime和mtime的时间戳
示例:
[root@localhost tmp]# touch aaron.txt
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 0 Apr 25 22:05 aaron.txt
[root@localhost tmp]# ll anaconda.log
-rw-r--r--. 1 root root 1593 Apr 13 23:36 anaconda.log
[root@localhost tmp]# touch /tmp/anaconda.log
[root@localhost tmp]# ll /tmp/anaconda.log
-rw-r--r--. 1 root root 1593 Apr 25 22:07 /tmp/anaconda.log
[root@localhost tmp]#
[root@localhost tmp]# touch $(date -d "2 year" +%F_%T).log
[root@localhost tmp]#
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 0 Apr 25 22:10 2023-04-25_22:10:51.log
软连接与硬链接
软链接:soft链接或symbolic链接,保存了其代表文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径,软链接文件和原文件本质上不是同一个文件。
硬链接:hard链接,硬链接inode指向同一个文件在硬盘中的区块,本质是同一个文件
软链接特性
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软连接
- 可以对跨分区的文件实现
- 指向的是另一个文件的路径,其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
- 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
硬链接特性
- 创建硬链接会在对应的目录中增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数增加
- 删除文件时,rm目录递减计数的链接,文件要存在,至少有一个链接数,当链接数为0时,该文件被删除
- 不能跨驱动器或分区创建
- 不支持对目录创建硬链接
硬链接与软连接的区别
项目 | 硬链接 | 软连接 |
本质 | 是同一个文件 | 不是同一个文件 |
跨设备 | 不支持 | 支持 |
inode | 相同 | 不同 |
链接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 创建或删除,链接数不会变化 |
文件夹 | 不支持 | 支持 |
相对路径 | 原始文件相对路径是相对于当前工作目录 | 原始文件的相对路径是相对于链接文件的相对路径 |
删除源文件 | 只是链接数减一,链接文件的访问不受影响 | 链接文件将无法访问 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 是源文件的路径长度 |
示例
同文件示例
[root@localhost data]# stat l2.txt
File: l2.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26690304 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:19:02.030220011 +0800
Modify: 2021-04-25 23:19:02.030220011 +0800
Change: 2021-04-25 23:19:02.030220011 +0800
Birth: -
[root@localhost data]# stat dir2/l2.txt
File: dir2/l2.txt -> l2.txt
Size: 6 Blocks: 0 IO Block: 4096 symbolic link
Device: fd00h/64768d Inode: 9919914 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:30:40.671811903 +0800
Modify: 2021-04-25 23:30:40.671811903 +0800
Change: 2021-04-25 23:30:40.671811903 +0800
Birth: -
#软连接inode不同,证明不是一个文件
[root@localhost data]# stat l1.txt
File: l1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26072382 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:18:58.546161561 +0800
Modify: 2021-04-25 23:18:58.546161561 +0800
Change: 2021-04-25 23:21:29.748698204 +0800
Birth: -
[root@localhost data]# stat dir1/l1.txt
File: dir1/l1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26072382 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:18:58.546161561 +0800
Modify: 2021-04-25 23:18:58.546161561 +0800
Change: 2021-04-25 23:21:29.748698204 +0800
Birth: -
#硬链接inode相同,证明是同一个文件
跨分区或设备示例:
[root@localhost data]# ln l1.txt /boot/l1.txt
ln: failed to create hard link '/boot/l1.txt' => 'l1.txt': Invalid cross-device link
[root@localhost data]# ln -s l2.txt /boot/l2.txt
[root@localhost data]#
[root@localhost data]# stat l2.txt /boot/l2.txt
File: l2.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26690304 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:19:02.030220011 +0800
Modify: 2021-04-25 23:19:02.030220011 +0800
Change: 2021-04-25 23:19:02.030220011 +0800
Birth: -
File: /boot/l2.txt -> l2.txt
Size: 6 Blocks: 0 IO Block: 4096 symbolic link
Device: 801h/2049d Inode: 32611 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:boot_t:s0
Access: 2021-04-25 23:40:25.120339255 +0800
Modify: 2021-04-25 23:40:05.942026623 +0800
Change: 2021-04-25 23:40:05.942026623 +0800
Birth: -
[root@localhost data]#
#硬链接跨分区创建提示失败,软链接跨分区创建成功,查看文件正常
链接数示例:
[root@localhost data]# ln l1.txt dir1/l1.txt
[root@localhost data]# ln -s l2.txt dir2/l2.txt
[root@localhost data]# ll
total 0
drwxr-xr-x. 2 root root 20 Apr 25 23:21 dir1
drwxr-xr-x. 2 root root 20 Apr 25 23:30 dir2
-rw-r--r--. 2 root root 0 Apr 25 23:18 l1.txt
-rw-r--r--. 1 root root 0 Apr 25 23:19 l2.txt
#硬链接链接数增加,软链接连接数不变
文件类型、大小示例:
[root@localhost data]# stat l1.txt dir1/l1.txt
File: l1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26072382 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:18:58.546161561 +0800
Modify: 2021-04-25 23:18:58.546161561 +0800
Change: 2021-04-25 23:21:29.748698204 +0800
Birth: -
File: dir1/l1.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26072382 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:18:58.546161561 +0800
Modify: 2021-04-25 23:18:58.546161561 +0800
Change: 2021-04-25 23:21:29.748698204 +0800
Birth: -
[root@localhost data]# stat l2.txt dir2/l2.txt
File: l2.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 26690304 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:19:02.030220011 +0800
Modify: 2021-04-25 23:19:02.030220011 +0800
Change: 2021-04-25 23:19:02.030220011 +0800
Birth: -
File: dir2/l2.txt -> l2.txt
Size: 6 Blocks: 0 IO Block: 4096 symbolic link
Device: fd00h/64768d Inode: 9919914 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-04-25 23:33:57.829025846 +0800
Modify: 2021-04-25 23:30:40.671811903 +0800
Change: 2021-04-25 23:30:40.671811903 +0800
Birth: -
#硬链接源文件和链接文件类型一致,软链接源文件和链接文件类型不同
#l1.txt和dir1/l1.txt Size一样大
#l2.txt和dir2/l2.txt Size不一样大,且软链接文件大小等于源文件路径大小