CentOS学习笔记

CentOS学习笔记

CentOS学习笔记

Centos操作系统基础

学习资源:

  • 《鸟哥的Linux私房菜-基础篇》

主机规划与磁盘分区

Linux与硬件的搭配

在Linux系统中,几乎所有的硬件配置文件都在/dev这个目录内,以下是在VMWare虚拟机中的Centos系统下的/dev目录下的文件情况:

/dev目录下的硬件配置文件

常见的装置在Linux系统中的名称:

装置 装置对应的文件名
SCSI/SATA/USB 硬盘机 /dev/sd[a-p]
鼠标 /dev/imput/mouse[0-15](通用)
/dev/pasux(PS/2界面)
/dev/mouse(当前鼠标)
Virtl/O 界面 /dev/vd[a-p](用于虚拟机内)

磁盘分区

磁盘连接方式与配置文件名的关系

计算机常见的磁盘接口:SATA和SAS接口,目前主流的是SATA接口。

正常的实体及其大概都是使用的 /dev/sd[a-] 的磁盘文件名,但是在虚拟机环境底下,为了进行加速,可能会使用 /dev/vd[a-p] 这种配置文件名。

为什么要分区?

  1. 数据的安全性。由于每个分区槽的数据是分开的,可以将各个槽之间的数据隔离开
  2. 系统的效能考虑。数据集中了,减少了数据查找的范围。

MSDOS(MBR) 与 GPT 磁盘分区表(partition table)

主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes

分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes

BIOS 与 UEFI 开机检测程序

BIOS

CMOS是记录各项硬件参数且嵌入到主板上面的存储器,BIOS是一个写入到主板上的第一个软件程序,所以在计算机开机的时候,第一个执行的程序就是CMOS。

BIOS使用汇编语言编写。

如果要安装多重引导,最好先安装Windows再安装Linux。原因如下:

  1. Linux在安装的时候,可以选择将开机管理程序安装在MBR或各别分区槽的启动扇区,而且Linux的loader可以手动设定选单,所以可以在Linux的boot loader中加入Windows的开机选项
  2. Windows在安装的时候,它的安装程序会主动覆盖掉MBR以及自己所在分区槽的启动扇区,没有可以选择的机会。

UEFI

UEFI主要是想取代BIOS,因此常常称UEFI为UEFI BIOS。UEFI使用C语言进行编写。如果开发者足够厉害,甚至可以让UEFI在开机阶段就让该系统了解TCP/IP协议而直接上网。

一般来说,当加载完操作系统后,UEFI就会停止工作,并将其交给操作系统。

UEFI加入了安全启动(secure boot)机制,这意味着开机的操作系统必须被UEFI所验证,否则就无法顺利开机。因此,有些时候需要关闭安全启动功能才能顺利进入到Linux。

Linux安装模式下磁盘分区的选择

由于Linux系统的所有数据都是以文件的形式来展现的,所以Linux最重要的地方在于它的目录树结构。在目录树结构中,最重要的就是根目录,表示方法为一条斜线 /

文件系统与目录树的关系(挂载)

挂载就是利用一个目录作为进入点,将磁盘分区槽的数据放置在该目录下,即:进入到该目录就可以读取该分区槽。

image-20200621164530781

在上图中,假设硬盘分为两槽,将partition1挂载在根目录 /,将partition2挂载到 /home 目录。也就是说,当数据放在 /home 及其子目录时,数据放置在 partition2 分区,如果不是,则放置在 partition1中。

如何判断某个文件是在哪个partition中?

使用反向追踪方法。以上图来说,当我想知道 /home/finlu/test 这个文件在哪个partition时,按照 test -> finlu -> home -> / 的顺序进行查询,看哪个进入点被查到就是使用的哪个进入点。

distribution安装时,挂载点与磁盘分区的规划:

  • 自定义安装(Custom)
    1. 初次接触Linux:只需要分区 /swap 即可。这样做的好处是不会因为分区错误造成系统无法安装。
    2. 建议的分区方法:预留一个磁盘的容量。预留出来的容量可以作为以后分区练习的时候使用;当重要文件需要备份的时候,可以将剩余的容量分区出新的分区槽,用来备份重要的文件。这样做的好处是当Linux被重新安装时,可以直接找到之前的软件或者工具程序。
  • 选择Linux安装程序提供的默认硬盘分区方式。

安装Linux前的规划

选择适当的distribution

当需要了解该distribution适合的环境时,最好选择最新的distribution。当需要将Linux作为服务器的时候,应该选择发布更新不频繁的Linux发行版。

主机硬盘的主要规划

基本硬盘分区模式:

  • 最简单的方法:仅仅分区 /swap 即可
  • 稍微麻烦一点的方式:根据用途来划分一些需要容量较大的目录。在默认的Centos环境中,以下的目录是比较符合容量大或者读写频繁的目录:
    • /boot
    • /
    • /home
    • /var
    • Swap

安装CentOS7.x

注意分区。这个以后安装的时候再来填坑。可以查找《鸟哥的私房菜-基础班》的第三章。

Linux基本命令

显示日期和时间的指令:date

显示日历的指令:cal

计算器:bc

测试 date 命令

1
2
3
4
5
6
[root@localhost ~]# date
Sun Jun 21 05:44:26 EDT 2020
[root@localhost ~]# date +%Y/%m/%d # 格式化显示日期
2020/06/21
[root@localhost ~]# date +%H:%M # 格式化显示时间
05:44

测试 cal 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@localhost ~]# cal
June 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

[root@localhost ~]# cal 2020 # 查看2020年的所有日历
2020

January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5 6 7
5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14
12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21
19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28
26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31

April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31

[root@localhost ~]# cal 12 2020 # 查看2020年12月对应的日历
December 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

[root@localhost ~]# cal 13 2020 # 查看2020年13月对应的日历 -> 不存在
cal: illegal month value: use 1-12

如果系统提示找不到 bc 命令,需要进行安装:

1
yum install -y bc

测试 bc 计算器的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 + 1 # 加法
2
3 - 1 # 减法
2
3 * 4 # 乘法
12
5 / 2 # 除法
2
10 ^ 2 # 指数
100
100 % 3 # 取余
1
quit # 退出bc计算器

bc预设仅仅输出整数,如果想要输出小数点下位数,需要执行 scale=number ,其中 number 为小数点的位数。

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=3 # 设定之后所有bc计算器的结果保留小数点后3位数字
1/3
.333
2.500
6 / 2
3.000
quit

正确的关机方法

  • 观察系统的使用状态
    • who 查看目前都有谁在线
    • netstat - a 查看网络的联机状态
    • ps -aux 查看后台运行的应用程序
  • 通知在线使用者关机的时刻 ==> 使用 shutdown 指令,例如:
  • 正确关机指令的使用
    • shutdown
    • reboot

几个与关机/重新启动相关的指令:

  • 将数据同步写入硬盘中
  • 关机指令:shutdown
  • 重新启动/关机:reboot、halt、poweroff

数据同步写入磁盘:sync

sync可以被一般用户和root用户使用。

1
sync

关机指令:shutdown

shutdown指令的功能:

  • 自由选择关机模式:重启或者关机
  • 设定关机时间
  • 自定义关机消息,消息会以广播的方式传给在线的user
  • 仅仅发出警告消息,而不是真的关机

shutdown [-krhc] [时间] [警告消息]

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# shutdown -h 10 'I will shutdown after 10 minutes'  # 系统将在十分钟后关机
Shutdown scheduled for Sun 2020-06-21 06:22:11 EDT, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from root@localhost.localdomain (Sun 2020-06-21 06:12:11 EDT):

I will shutdown after 10 minutes
The system is going down for power-off at Sun 2020-06-21 06:22:11 EDT!

[root@localhost ~]# shutdown -h now # 立刻关机
[root@localhost ~]# shutdown -h 20:25 # 系统将在今天的20:25关机,如果此时时间超过20:25,则系统在明天20:25关机
[root@localhost ~]# shutdown -h +10 # 十分钟后关机
[root@localhost ~]# shutdown -r +30 '系统在30分钟后重新启动' # 三十分钟后重新启动
[root@localhost ~]# shutdown -h +10 # 十分钟后关机

重新启动/关机:reboot, halt, poweroff

常用的重新启动的指令:

1
sync; sync; sync; reboot
1
2
3
4
5
6
[root@localhost ~]# halt  # 系统停止,屏幕可能会保留系统停止的信息
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Linux学习) at 18:18:34.
1
2
3
4
5
6
[root@localhost ~]# poweroff  # 系统关机,屏幕空白
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Linux学习) at 18:19:55.

实际使用系统管理工具 systemctl 关机

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# systemctl reboot  # 系统重新启动
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Linux学习) at 18:21:30.

[root@localhost ~]# systemctl poweroff # 系统关机
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Linux学习) at 18:22:04.

Linux的文件权限和目录配置

使用者与群组

在Linux系统中,默认情况下。所有系统上的账号与一般身份使用者以及root的相关信息都记录在 /etc/passwd 这个文件中。个人密码则是记录在 /etc/shadow 文件下。Linux所有的组名都记录在 /etc/group 文件中。

Linux文件权限的概念

Linux文件属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# ls -al
total 36
dr-xr-x---. 2 root root 144 Jun 21 06:30 .
dr-xr-xr-x. 17 root root 224 May 7 07:25 ..
-rw-------. 1 root root 1337 Jun 21 06:22 .bash_history
-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc
-rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc
-rw-r--r--. 1 root root 7 Jun 21 05:56 text.txt
-rw-------. 1 root root 5007 Jun 21 06:30 .viminfo
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
[ 权限 ] [ 连结 ] [ 拥有者 ] [ 群组] [ 文件容量 ] [ 修改日期 ] [ 别名 ]

权限:在权限一栏中一共有10个字符,由-, r, w, x 四个字符的组合组成。

  • 第一个字符表示的是文件的类型
    • d表示目录
    • -表示文件
    • l表示连接
    • b表示装置文件中可以提供存储的接口设备
    • c表示装置文件中的串行端口设备,例如:鼠标、键盘等
  • 接下来的字符中,每三个一组,均为 [rwx] 的三个参数的组合。其中r表示读,w表示写,x表示可执行。
    • 第一组为文件拥有者可具备的权限
    • 第二组为加入此群组的账号的权限
    • 第三组为非本人且没有加入本群组的其它账号的权限

使用 [rwx] 组合表示的权限还可以使用数字来表示,例如:777 -> 111111111 -> rwxrwxrwx -> 所有用户具有可读、可写、可执行的权限;740 -> 111100000 -> rwxr—– -> 文件的拥有者对该文件具有可读、可写、可执行的权限,群组中的用户具有读权限,其它用户无权访问该文件。

修改文件属性和权限

改变文件所属群组 chgrp

1
chgrp [-R] dirname/filename

-R 表示递归进行变更群组,即:对 dirname 目录以及其目录下所有的文件都进行更改

改变文件所有者 chown

1
2
3
chown [-R] 账号名称 文件或者目录
chown [-R] 账号名称:组名 文件或目录
chown [-R] user.group file

改变权限 chmod

  • 数字类型改变文件权限

    1
    chmod [-R] xyz 文件或目录  # xyz 表示文件拥有者,文件所属群组和其它用户的权限对应的数字
  • 符号类型改变文件权限

    1
    chmod u=rwx,go=rx filename
    • user(u):具有可读、可写、可执行的权限
    • group和other(g/o):具有可读和可执行的权限

    注意:, 前后不存在任何空格;所拥有的权限相同可以将其合并,比如:go

目录与权限的意义

权限对文件的重要性

  • r(read): 可以读取文件的实际内容
  • w(write): 可以编辑、新增或者修改文件的内容
  • x(eXcute): 该文件具有可以被系统执行的权限

权限对目录的重要性

  • r 在目录中读取内容。比如:使用 ls 命令显示目录中的文件或目录
  • w 修改文件夹中的内容。表示具有更改该目录结构列表的权限。
    • 建立新的文件和目录
    • 删除已经存在的文件和目录
    • 对已存在的文件或目录进行改名
    • 移动该目录内的文件、目录位置
  • x 有权限访问目录。目录的x权限代表用户是否能够进入到该目录成为工作目录。
    • 如果在某目录下不具有x的权限,那么则无法切换到该目录下,也就无法执行该目录下的任何指令,即时具有r和w的权限。
    • 当需要开放目录给其他人浏览时,应该至少给予 rx 的权限,但是 w 权限不可以随便给。
    • 当具有某个目录的rwx权限时,无论当前用户对该目录中的文件是否有权限,当前用户都有权限将其删除。

Linux文件种类和扩展名

文件种类

  • 正规文件
    • 纯文本文档(ASCII)
    • 二进制文件(binary)
    • 数据格式文件(data)
  • 目录
  • 链接文件
  • 设备与装置文件。通常在 /dev 目录下
    • 区块设备档。存储数据,提供系统随机存取接口的设备。
    • 字符设备文件。串行端口的接口设备。
  • 资料接口文件(sockets)。一般用作网络通信中的数据沟通文件。
  • 数据输送文件(FIFO, pipe)

Linux扩展名

一个文件能不能执行只和其是否具有可执行的权限,而与其后缀名无关。

但是在使用过程中还是会使用适当的扩展名表示该文件是什么种类的。常用的文件扩展名如下:

  • *.sh 脚本或批处理文件
  • *Z, *tar, *.tar.gz,*.zip, *.tgz 经过打包压缩后的文件
  • *.html, *.php 网页相关文件

Linux文件长度限制:

单一文件或目录的最大容许文件名为255bytes,以一个ASCII英文占用一个bytes来说,大约可以达到255个字符的长度。如果以每个中文字符占用2个bytes来说,最大的文件名大约为128个字。

Linux文件名的限制:

一般来说,在设定Linux文件名的时候,尽量避免以下字符:

1
* ? < > ; & ! [ ] | \ ' " ` ( ) { }

因为这些字符是具有特殊意义的,另外需要注意的是:以 . 开头的文件是隐藏的。

Linux目录配置

Linux目录配置的依据 - FHS

FileSystem Hierarchy Standard(FHS) 是Linux目录配置方法的一个标准,它的主要目的是希望让使用者可以了解到已经安装的软件通常放在哪个目录下。

根目录 / 的意义和内容:

  • 根目录与开机、还原、系统修复等动作有关
  • 根目录所在的分区槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。这样做不仅可以保证系统的效能,同时根目录所在的文件系统也不容易发生问题。、

FHS根据文件系统使用的频繁与否与是否允许使用者随意变动,而将目录定义为四种交互作用的形态

FHS定义的四种交互形态

四种交互形态额解释

FHS建议 Linux文件的目录应该像这样:

FHS建议 Linux文件目录

目录树

在 Linux 底下,所有的文件与目录都是由根目录开始的!那是所有目录与文件的源头。

  1. 目录树的启始点为根目录(/, root)
  2. 每一个目录不止能使用本地端的 partition的文件系统,也可以使用网络上的 filesystem。举例来说,可以利用 Network File System(NFS)服务器挂载某特定目录等
  3. 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的

根目录 / 对应的目录树:

根目录对应的目录树

绝对路径和相对路径

根据文件路径的写法可以将文件的路径分为绝对路径和相对路径。

绝对路径: 由根目录 / 开始写起的文件名或目录名称,例如 /home/dmtsai/. bashrc

相对路径: 相对于目前路径的文件名写法。例如./home/desai../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

Centos观察

除了 FHS 之外,还有个 Linux Standard Base (LSB) 的标准是可以依循的!

正确支持 LSB 标准的 distribution:https://www.linuxbase.org/lsb-cert/productdir.php?by_lsb

1
2
3
4
5
6
7
8
9
10
[root@iZuf61dsagbzym02j6g1m9Z lib]# uname -r  # 查看核心版本
3.10.0-1127.8.2.el7.x86_64
[root@iZuf61dsagbzym02j6g1m9Z lib]# uname -m # 查看操作系统的位版本
x86_64
[root@iZuf61dsagbzym02j6g1m9Z lib]# lsb_release -a # 查看lsb的信息
LSB Version: :core-4.1-amd64:core-4.1-noarch # lsb的版本
Distributor ID: CentOS
Description: CentOS Linux release 7.8.2003 (Core)
Release: 7.8.2003
Codename: Core

Linux文件与目录管理

目录的相关操作

一些特俗的目录符号对应的含义:

符号 含义
. 此层目录
.. 上一层目录
- 前一个工作目录
~ 代表目前用户身份所在的家目录
~account 代表 account 这个用户所在的家目录,account是账户名称

在所有目录底下都会存在的两个目录,分别是 ...

常见的目录处理指令:

  • cd: 切换目录
  • pwd: 显示当前用户
  • mkdir: 建立一个新目录
  • rmdir: 删除一个空的目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@iZuf61dsagbzym02j6g1m9Z ~]# cd /var/mail/

[root@iZuf61dsagbzym02j6g1m9Z mail]# pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用链接(link)路径
[root@iZuf61dsagbzym02j6g1m9Z mail]# pwd
/var/mail
[root@iZuf61dsagbzym02j6g1m9Z mail]# pwd -P
/var/spool/mail

[root@iZuf61dsagbzym02j6g1m9Z mail]# mkdir [-mp] 目录名称
选项与参数:
-m: 配置文件案的权限喔!直接设定,不需要看预设权限(umask)的脸色
-p: 帮助你直接将所需要的目录(包含上层目录)递归建立起来!

[root@iZuf61dsagbzym02j6g1m9Z mail]# cd /tmp/
[root@iZuf61dsagbzym02j6g1m9Z tmp]# mkdir test
[root@iZuf61dsagbzym02j6g1m9Z tmp]# mkdir test1/test2/test3
mkdir: cannot create directory ‘test1/test2/test3’: No such file or directory
[root@iZuf61dsagbzym02j6g1m9Z tmp]# mkdir -p test1/test2/test3 # 递归创建目录
[root@iZuf61dsagbzym02j6g1m9Z tmp]# mkdir -m 711 test2
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld test*
drwxr-xr-x 2 root root 4096 Jun 21 23:45 test
drwxr-xr-x 3 root root 4096 Jun 21 23:46 test1 # 未使用 -m 参数强制指定权限,则系统使用默认权限
drwx--x--x 2 root root 4096 Jun 21 23:46 test2 # 文件的权限位711

[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld test*
drwxr-xr-x 2 root root 4096 Jun 21 23:45 test
drwxr-xr-x 3 root root 4096 Jun 21 23:46 test1
drwx--x--x 2 root root 4096 Jun 21 23:46 test2
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rmdir [-p] 目录名称
选项参数:
-p: 连同上层空的目录也一起删除
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rmdir test1
rmdir: failed to remove ‘test1’: Directory not empty
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rmdir test
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rmdir -p test
test1/ test2/
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rmdir -p test1/test2/test3 # 递归删除
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld test*
drwx--x--x 2 root root 4096 Jun 21 23:46 test2

关于执行文件路径的变量$PATH

查看当前用户的所有可执行文件所在目录:

1
2
3
4
5
6
[root@iZuf61dsagbzym02j6g1m9Z tmp]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@iZuf61dsagbzym02j6g1m9Z tmp]# PATH="${PATH}:/root" # 添加PATH路径
[root@iZuf61dsagbzym02j6g1m9Z tmp]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root

注意:PATH这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开, 每个目录是有顺序之分的。

  • 不同身份的用户预设的PATH不同,默认能执行的指令也不同
  • PATH是可以修改的
  • 使用绝对路径或相对路径直接指定某个指令的文件名来执行指令比搜寻PATH可能更正确一些
  • 指令应该放到相应的目录下
  • 本目录最好不要放到PATH中

文件与目录的管理

文件与目录的查看命令: ls

ls命令解释

复制、删除和移动:cp, rm, mv

cp 复制文件或目录

在复制数据前需要确保自己具有 r 权限。

cp命令

cp命令范例

cp命令范例

cp命令范例

rm 移除目录

rm命令

rm命令

mv 移动文件和目录,或者改名

mv命令

mv命令

获取文件的文件名和目录名

获取文件的文件名和目录名

文件内容查阅

  • cat 从第一行开始显示文件的内容
  • tca 从最后一行开始显示文件的内容
  • nl 显示的时候,顺便输出行号
  • more 一页一页地显示
  • less 与more相似,可以往前翻页
  • head 只看头几行
  • tail 只看尾巴几行
  • od 以二进制的方式读取文件内容

直接查看文件内容

cat

cat命令

nl

nl命令

可翻阅查看

man

man命令相关的快捷键

less

less命令对应的快捷键

资料截取

head 取出前几行

head命令

tail 取出后面几行

image-20200622074715315

非纯文本文档: od

od命令

查看password这个字符串对应的ACSII对照:

1
2
3
4
[root@localhost ~]# echo password | od -t oCc
0000000 160 141 163 163 167 157 162 144 012
p a s s w o r d \n
0000011

修改文件时间或者新建文件:touch

文件三种时间的含义

1
2
3
4
5
[root@localhost ~]# date; ls -l /etc/man_db.conf ; ls -l --time=atime /etc/man_db.conf ; ls -l --time=ctime /etc/man_db.conf
Sun Jun 21 19:58:10 EDT 2020 # 当前系统时间
-rw-r--r--. 1 root root 5171 Oct 30 2018 /etc/man_db.conf # 文件建立时间(mtime)
-rw-r--r--. 1 root root 5171 Jun 21 00:27 /etc/man_db.conf # 文件的读取时间(atime)
-rw-r--r--. 1 root root 5171 May 7 07:20 /etc/man_db.conf # 文件状态更新时间(ctime)

touch命令

touch命令

文件与目录的默认权限和隐藏权限

文件预设权限:umask

预设权限是指当你新建一个文件或目录的时候,系统所赋予的默认权限,可以使用umask命令来查看。

1
2
3
4
[root@localhost ~]# umask
0022 # 与一般权限相关的是后三个数字, 表示拿掉的权限是g的w权限和r的w权限,w权限对应的数字为2
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx

测试新建文件或目录的权限:

1
2
3
4
5
6
7
[root@localhost ~]# umask
0022
[root@localhost ~]# touch test1
[root@localhost ~]# mkdir test2
[root@localhost ~]# ll -d test*
-rw-r--r--. 1 root root 0 Jun 21 20:15 test1
drwxr-xr-x. 2 root root 6 Jun 21 20:16 test2

文件隐藏属性

  • chattr 配置文件隐藏属性
  • lsattr 显示文件隐藏属性

chattr

chattr命令

lsattr

lsattr命令

文件的特殊权限:SUID, SGID, SBIT

1
2
3
[root@localhost ~]# ls -ld /tmp; ls -l /usr/bin/passwd
drwxrwxrwt. 15 root root 4096 Jun 21 18:38 /tmp
-rwsr-xr-x. 1 root root 27856 Mar 31 23:57 /usr/bin/passwd

多出来的权限为 st

SUID

SUID又叫Set UID,s标志出现在文件拥有者的x权限位置上,也称为 SUID 的特殊权限。

SUID的限制与功能:

  • SUID 权限仅对二进制程序有效,不能用在shell脚本上
  • 执行者对于该程序需要有x权限
  • 该权限只在执行过程中有效
  • 执行者将具有程序拥有者的权限

SGID

SGID又叫Set GID,s标志在群组的x权限的位置上为SGID。

对于文件来说,SGID的功能:

  • SGID对二进制程序有用
  • 程序执行者对该程序来说需要有x的权限
  • 执行者在程序执行过程中会获得该程序群组的支持

对于目录来说,SGID的功能:

  • 用户同时具有r和x权限的时候,用户才能进入该目录
  • 用户在此目录下的有效群组将会变成该目录的群组
  • 作用:如果用户在该目录下具有w的权限(可以新建文件),则使用者所建立的新文件,此新文件的群组与此目录的群组相同。

SBIT

SBIT又叫Sticky Bit,目前只针对目录有效,对于文件已经没有效果了。

SBIT对目录的作用:

  • 当用户对此目录具有w和x权限时,同时具有写入的权限
  • 当用户在目录下建立文件或目录时,仅自己和root才有权力删除该文件
1
2
3
4
5
6
7
8
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# touch test
[root@localhost tmp]# chmod 777 test
[root@localhost tmp]# useradd finlu
[root@localhost tmp]# su finlu
[finlu@localhost tmp]$ cd /tmp/
[finlu@localhost tmp]$ rm test
rm: cannot remove ‘test’: Operation not permitted

SUID/SGID/SBIT 权限设定

如果在一般设定权限的三个数字前加入一个数字,则最前面那个数字就可以代表这些权限了。

  • 4 为 SUID
  • 2 为 GUID
  • 1 为 SBIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# touch test # 建立一个新文件
[root@localhost tmp]# chmod 4755 test; ls -l test # 加入具有SUID权限
-rwsr-xr-x. 1 root root 0 Jun 21 20:57 test
[root@localhost tmp]# chmod 6755 test; ls -l test # 具有 SUID/SGID 的权限
-rwsr-sr-x. 1 root root 0 Jun 21 20:57 test
[root@localhost tmp]# chmod 1755 test; ls -l test # 具有 SBIT 的功能
-rwxr-xr-t. 1 root root 0 Jun 21 20:57 test
[root@localhost tmp]# chmod 7666 test; ls -l test # 具有空的 SUID/SGID 权限
-rwSrwSrwT. 1 root root 0 Jun 21 20:57 test

[root@localhost tmp]# chmod u=rwxs,go=x test; ls -l test # 以符号的方式设定权限
-rws--x--x. 1 root root 0 Jun 21 20:57 test
[root@localhost tmp]# chmod g+s,o+t test; ls -l test # 加入 SGID 和 SBIT 权限
-rws--s--t. 1 root root 0 Jun 21 20:57 test

观察文件类型:file

file命令

指令与文件搜寻

脚本文件名搜寻

  • which 查找文件位置

which命令

文件名搜寻

查找文件时使用的命令的优先级:whereis/locate > find

因为whereis是查找的特定目录,而locate是查找的数据库,两者都没有实际搜寻磁盘底下的文件。

  • whereis 在特定目录下寻找文件的文件名
  • locate/updatedb

whereis

whereis命令

locate/updatedb

Centos好像用不了!!!

locate/updatedb命令

find

find命令

find相关时间参数的定义:

find相关时间参数的定义

image-20200622091503433

image-20200622091525107

image-20200622091603568

image-20200622091640762

权限与指令之间的关系

让用户能进入某目录成为『可工作目录』的基本权限为何:

  • 可使用的指令: 例如 cd 等变换工作目录的指令;
  • 目录所需权限: 用户对这个目录至少需要具有 x 的权限
  • 额外需求: 如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。

用户在某个目录内读取一个文件的基本权限为何?

  • 可使用的指令: 例如本章谈到的 cat, more, less 等等
  • 目录所需权限: 用户对这个目录至少需要具有 x 权限;
  • 文件所需权限: 使用者对文件至少需要具有 r 的权限才行!

让使用者可以修改一个文件的基本权限为何?

  • 可使用的指令: 例如 nano 或未来要介绍的 vi 编辑器等;
  • 目录所需权限: 用户在该文件所在的目录至少要有 x 权限;
  • 文件所需权限: 使用者对该文件至少要有 r, w 权限

让一个使用者可以建立一个文件的基本权限为何?

  • 目录所需权限: 用户在该目录要具有 w,x 的权限,重点在 w

让用户进入某目录并执行该目录下的某个指令之基本权限为何?

  • 目录所需权限: 用户在该目录至少要有 x 的权限;
  • 文件所需权限: 使用者在该文件至少需要有 x 的权限

Linux磁盘与文件系统管理

Linux 最传统的磁盘文件系统 (filesystem) 使用的是 EXT2。

磁盘的组成主要有:

  • 圆形的磁盘盘(主要记录数据的部分);
  • 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);
  • 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。

磁盘相关概念:

  • 扇区(Sector)为最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512bytes 与 4K 两种格式;
  • 将扇区组成一个圆,那就是磁柱(Cylinder);
  • 早期的分区主要以磁柱为最小分区单位, 现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码, 就好像座位一样);
  • 磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。
  • MBR 分区表中,第一个扇区最重要,里面有: (1)主要开机区(Master boot record, MBR)及分区表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
  • GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。

文件系统特性

文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

  • superblock: 记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode: 记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;
  • block: 实际记录文件的内容,若文件太大时, 会占用多个 block 。

Linux的 EXT2 文件系统(inode)

文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等指令变更文件系统大小),否则 inode 与 block 固定后就不再变动。

dumpe2fs 查询 Ext 家族 superblock 信息的指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[root@iZuf61dsagbzym02j6g1m9Z ~]# dumpe2fs /dev/vda1 | head -n 100
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none> # 文件系统的名称(不一定有)
Last mounted on: / # 挂载点
Filesystem UUID: 5f56c9a9-0b5f-428b-b092-7cc41e7c4a93
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic) # 文件系统的版本
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl # 默认的挂载参数
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux # 文件系统类型
Inode count: 2621440 # Inode节点数
Block count: 10485499 # 区块数
Reserved block count: 471831
Free blocks: 9839793 # 空闲的区块
Free inodes: 2564148 # 空闲的inode节点
First block: 0 # 第一个区块号
Block size: 4096 # 单个区块的大小:4k
Fragment size: 4096 # 碎片的大小
Reserved GDT blocks: 1021
Blocks per group: 32768 # 每组的区块数
Fragments per group: 32768 # 每组的碎片数
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Tue May 19 11:50:10 2020
Last mount time: Tue Jun 16 14:19:42 2020
Last write time: Tue Jun 16 22:19:41 2020
Mount count: 6
Maximum mount count: -1
Last checked: Tue May 19 11:50:10 2020
Check interval: 0 (<none>)
Lifetime writes: 3534 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256 # inode节点的大小:256K
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 2106636
Default directory hash: half_md4
Directory Hash Seed: a237e587-d93a-47b2-be86-53cb495bb9ae
Journal backup: inode blocks
Journal features: journal_incompat_revoke
Journal size: 128M # Journal 日志数据所能提供的总容量
Journal length: 32768
Journal sequence: 0x0000d24a
Journal start: 23958


Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
Checksum 0x8d41, unused inodes 8175
Primary superblock at 0, Group descriptors at 1-3
Reserved GDT blocks at 4-1024
Block bitmap at 1025 (+1025), Inode bitmap at 1041 (+1041)
Inode table at 1057-1568 (+1057)
22823 free blocks, 8176 free inodes, 2 directories, 8175 unused inodes
Free blocks: 9945-32767
Free inodes: 14, 18-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x7869, unused inodes 8192
Backup superblock at 32768, Group descriptors at 32769-32771
Reserved GDT blocks at 32772-33792
Block bitmap at 1026 (bg #0 + 1026), Inode bitmap at 1042 (bg #0 + 1042)
Inode table at 1569-2080 (bg #0 + 1569)
4380 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 33793-33823, 33950-33984, 33986-34175, 34268-34271, 34292-34303, 34836-34843, 54272-54783, 55477-55807, 56130-58719, 58725-59391
Free inodes: 8193-16384

ls -li 查看当前目录下的文件的inode号

1
2
3
[root@iZuf61dsagbzym02j6g1m9Z ~]# ls -li
total 4
1180808 drwxr-xr-x 10 root root 4096 Jun 18 09:04 website

ll -d

1
2
3
4
5
[root@iZuf61dsagbzym02j6g1m9Z ~]# ll -d /boot /usr/sbin/ /proc/ /sys/
dr-xr-xr-x. 5 root root 4096 Jun 16 14:22 /boot # 5个4k的block
dr-xr-xr-x 102 root root 0 Jun 16 14:19 /proc/ # 102个4k的block
dr-xr-xr-x 13 root root 0 Jun 21 23:23 /sys/ # 13 个4k的block
dr-xr-xr-x. 2 root root 20480 Jun 16 20:41 /usr/sbin/ # 2个4k的block

读取 /etc/passwd 这个文件,系统的读取过程:

  1. / 的 inode。通过挂载点信息找到inode号码为2的inode,且inode规范权限可以让我们读取目录中的内容(r和x)
  2. / 的 block。经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (1179649);
  3. etc/ 的 inode。读取 1179649 号 inode 得知 root 具有 r 与 x 的权限,因此可以读取 etc/ 的 block 内容;
  4. etc/ 的 block。经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 (1180880);
  5. passwd 的 inode。读取 1180880 号 inode 得知 root 具有 r 的权限,因此可以读取 passwd 的 block 内容;
  6. passwd 的 blcok。将block数据区块中的内容读出来
1
2
3
4
[root@iZuf61dsagbzym02j6g1m9Z ~]# ll -di / /etc/ /etc/passwd
2 dr-xr-xr-x. 19 root root 4096 Jun 16 21:52 /
1179649 drwxr-xr-x. 82 root root 4096 Jun 19 14:43 /etc/
1180880 -rw-r--r-- 1 root root 1020 Jun 19 14:00 /etc/passwd

EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能

新增一个文件,此时文件系统的行为是:

  1. 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
  2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
  3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更新 inode 的 block 指向数据;
  4. 将刚刚写入的 inode 与 block 数据同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容。

查看Linux支持的文件系统:

1
ls -l /lib/modules/$(uname -r)/fs/kernel

系统目前已加载到内存中支持的文件系统则有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@iZuf61dsagbzym02j6g1m9Z ~]# cat /proc/filesystems 
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
ext3
ext2
ext4
nodev overlay

Linux VFS(Virtual Filesystem Switch)

透过这个 VFS 的功能来管理所有的 filesystem, 省去我们需要自行设定读取文件系统的定义,方便使用。

VFS文件系统示意图

文件系统的简单基本操作

磁盘与目录的容量

  • df: 列出文件系统的整体磁盘使用量;
  • du: 评估文件系统的磁盘使用量(常用在推估目录所占容量)

df只是读取的super block中的数据,而du 这个指令其实会直接到文件系统内去搜寻所有的文件数据。

df

df命令

列出系统所有的文件系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@iZuf61dsagbzym02j6g1m9Z ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 930668 0 930668 0% /dev
tmpfs 941012 0 941012 0% /dev/shm
tmpfs 941012 932 940080 1% /run
tmpfs 941012 0 941012 0% /sys/fs/cgroup
/dev/vda1 41152812 5072960 34176144 13% /
overlay 41152812 5072960 34176144 13% /var/lib/docker/overlay2/123b9832bbebaa2cc945f590cc1659204c67f09990c2ba6ae17e26a09e2807ef/merge
d
shm 65536 0 65536 0% /var/lib/docker/containers/1e1226c300f91571cbb41d8fd809792eea7844a61f250559a0e0d0de038e4d5c/shm
overlay 41152812 5072960 34176144 13% /var/lib/docker/overlay2/039cc505a5bd1a7961e8a669ec38059f245fa4a4298b3c7386ea5e6130f3f13a/merge
d
shm 65536 0 65536 0% /var/lib/docker/containers/0049e3c760b59c1587212d5ce4094656266840a8b4fab07aebfe531987170024/shm
overlay 41152812 5072960 34176144 13% /var/lib/docker/overlay2/15c742ccd6b7de009b209d686f75de06815803d48781c0531d25e5ff35f257c8/merge
d
shm 65536 0 65536 0% /var/lib/docker/containers/85da6f4dde1bed5297087f8a6c0e6c7eb0914bfb4b76c51f363190860920dc74/shm
tmpfs 188204 0 188204 0% /run/user/0

说明:

  • Filesystem: 代表该文件系统是在哪个 partition ,所以列出装置名称;
  • 1k-blocks: 说明底下的数字单位是 1KB,可利用 -h 或 -m 来改变容量;
  • Used: 顾名思义,就是使用掉的磁盘空间!
  • Available: 也就是剩下的磁盘空间大小;
  • Use%: 就是磁盘的使用率。如果使用率高达 90% 以上时, 最好需要注意一下了, 免得容量不足造成系统问题!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
  • Mounted on: 就是磁盘挂载的目录所在(挂载点)

将容量结果以易读的容量格式显示出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@iZuf61dsagbzym02j6g1m9Z ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 932K 919M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/vda1 40G 4.9G 33G 13% /
overlay 40G 4.9G 33G 13% /var/lib/docker/overlay2/123b9832bbebaa2cc945f590cc1659204c67f09990c2ba6ae17e26a09e2807ef/merged
shm 64M 0 64M 0% /var/lib/docker/containers/1e1226c300f91571cbb41d8fd809792eea7844a61f250559a0e0d0de038e4d5c/shm
overlay 40G 4.9G 33G 13% /var/lib/docker/overlay2/039cc505a5bd1a7961e8a669ec38059f245fa4a4298b3c7386ea5e6130f3f13a/merged
shm 64M 0 64M 0% /var/lib/docker/containers/0049e3c760b59c1587212d5ce4094656266840a8b4fab07aebfe531987170024/shm
overlay 40G 4.9G 33G 13% /var/lib/docker/overlay2/15c742ccd6b7de009b209d686f75de06815803d48781c0531d25e5ff35f257c8/merged
shm 64M 0 64M 0% /var/lib/docker/containers/85da6f4dde1bed5297087f8a6c0e6c7eb0914bfb4b76c51f363190860920dc74/shm
tmpfs 184M 0 184M 0% /run/user/0

将系统内的所有特殊文件格式及名称都列出来:

1
[root@iZuf61dsagbzym02j6g1m9Z ~]# df -aT

df-aT命令

/etc 底下的可用的磁盘容量以易读的容量格式显示:

1
2
3
[root@iZuf61dsagbzym02j6g1m9Z ~]# df -h /etc/
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 4.9G 33G 13% /

将目前各个 partition 当中可用的 inode 数量列出

1
[root@iZuf61dsagbzym02j6g1m9Z ~]# df -ih

df-ih

du

du命令

列出目前目录下的所有文件容量:

du

列出目前目录下的所有文件容量,但是将文件的容量也列出来

image-20200623151443716

检查根目录底下每个目录所占用的容量

image-20200623151607416

实体链接与符号连接:ln

  • Hard Link (实体链接, 硬式连结或实际连结)。多个档名对应同一个inode号码

    1
    2
    3
    4
    5
    6
    [root@iZuf61dsagbzym02j6g1m9Z ~]# ll -i /etc/crontab 
    1180123 -rw-r--r--. 1 root root 451 Jun 10 2014 /etc/crontab
    [root@iZuf61dsagbzym02j6g1m9Z ~]# ln /etc/crontab .
    [root@iZuf61dsagbzym02j6g1m9Z ~]# ll -i /etc/crontab crontab
    1180123 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
    1180123 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

    因此,如果你将任何一个『档名』删除,其实 inode 与 block 都还是存在的。一般来说,使用 hard link 设定链接文件时,磁盘的空间与 inode 的数目都不会改变。

    限制:

    1. 不能跨文件系统
    2. 不能link目录
  • Symbolic Link (符号链接,亦即是快捷方式)

    Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名。所以,当来源档被删除之后,symbolic link 的文件会『开不了』。

    1
    2
    3
    4
    [root@iZuf61dsagbzym02j6g1m9Z ~]# ln -s /etc/crontab crontab2
    [root@iZuf61dsagbzym02j6g1m9Z ~]# ll -i /etc/crontab crontab2
    401494 lrwxrwxrwx 1 root root 12 Jun 23 15:22 crontab2 -> /etc/crontab
    1180123 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

    由 Symbolic link 所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block。

ln命令

将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block

1
2
3
4
5
6
[root@iZuf61dsagbzym02j6g1m9Z ~]# cd /tmp/
[root@iZuf61dsagbzym02j6g1m9Z tmp]# cp -a /etc/passwd .
[root@iZuf61dsagbzym02j6g1m9Z tmp]# du -sb; df -i .
62694 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 131299 2490141 6% /

将 /tmp/passwd 制作 hard link 成为 passwd -hd 文件,并观察文件与容量

1
2
3
4
5
6
7
8
9
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ln passwd passwd-hd
[root@iZuf61dsagbzym02j6g1m9Z tmp]# du -sb; df -i .
62694 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 131299 2490141 6% / # 容量并没有改变

[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -il passwd*
917532 -rw-r--r-- 2 root root 1020 Jun 19 14:00 passwd # 结点数增加了1
917532 -rw-r--r-- 2 root root 1020 Jun 19 14:00 passwd-hd

将 /tmp/passwd 建立一个符号链接

1
2
3
4
5
6
7
8
9
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ln -s passwd passwd-so
[root@iZuf61dsagbzym02j6g1m9Z tmp]# du -sb; df -i .
62700 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 131300 2490140 6% / # 软链接占用了磁盘空间
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -li passwd*
917532 -rw-r--r-- 2 root root 1020 Jun 19 14:00 passwd
917532 -rw-r--r-- 2 root root 1020 Jun 19 14:00 passwd-hd
917534 lrwxrwxrwx 1 root root 6 Jun 23 15:29 passwd-so -> passwd

删除源文件 passwd ,其他两个文件是否能够开启?

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@iZuf61dsagbzym02j6g1m9Z tmp]# rm passwd
rm: remove regular file ‘passwd’? y
[root@iZuf61dsagbzym02j6g1m9Z tmp]# cat passwd-hd | head -n 5 # 硬链接文件可以正常使用
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@iZuf61dsagbzym02j6g1m9Z tmp]# cat passwd-so # 软链接文件无法正常使用
cat: passwd-so: No such file or directory
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ll passwd*
-rw-r--r-- 1 root root 1020 Jun 19 14:00 passwd-hd
lrwxrwxrwx 1 root root 6 Jun 23 15:29 passwd-so -> passwd

目录的link数量:

在新建目录的时候,新目录的link数量为2(. 以及 上级目录对其的引用),其上层目录的link数量+1

1
2
3
4
5
6
7
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld /tmp/
drwxrwxrwt. 15 root root 4096 Jun 23 15:31 /tmp/
[root@iZuf61dsagbzym02j6g1m9Z tmp]# mkdir /tmp/testing1
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld /tmp/
drwxrwxrwt. 16 root root 4096 Jun 23 15:35 /tmp/
[root@iZuf61dsagbzym02j6g1m9Z tmp]# ls -ld /tmp/testing1/
drwxr-xr-x 2 root root 4096 Jun 23 15:35 /tmp/testing1/

文件系统的挂载

参考《鸟哥的私房菜 基础版》 7.3.5

内存置换空间swap

早些年代因为内存空间不足,所以暂时将内存的程序拿到硬盘中暂放的内存置换空间 (swap) 就显的非常的重要!

一般在安装Linux前,一般都需要两个partition: 一个是根目录,一个是内存置换空间swap。

使用实体分区槽建立swap

  1. 分区: 先使用 gdisk 在你的磁盘中分区出一个分区槽给系统作为 swap 。 由于 Linux 的 gdisk 预设会将分区槽的 ID 设定为 Linux 的文件系统,所以你可能还得要设定一下 system ID 就是了。
  2. 格式化:利用建立 swap 格式的『mkswap 装置文件名』就能够格式化该分区槽成为 swap 格式啰 3. 使用:最后将该 swap 装置启动,方法为: 『swapon 装置文件名』 。
  3. 观察:最终透过 free 与 swapon -s 这个指令来观察一下内存的用量!

swap的功能

swap的主要功能是:

  1. 当物理内存不够的时候,则某些在内存中索赞的程序会被暂时移动到swap当中,让物理内存可以被需要的程序使用。
  2. 如果主机支持电源管理模式,也就是说Linux主机进入休眠的时候,运作中程序的状态会被记录到swap中,作为唤醒主机状态的依据。
  3. 一些程序在运行的时候,本身就会利用swap的特性来存储一些数据段

总的来说,建立swap分区是必要的,只是不需要太大。

文件与文件系统的压缩,打包与备份

Linux常见的压缩指令

在Linux环境中,压缩文件的扩展名大多:*.tar *.tar.gz *.tgz *.gz *.Z *.bz2 *.xz

不同的压缩文件需要用不同的压缩命令来解压缩,常见的压缩文件的扩展名含义:

image-20200623164520019

gzip,zcat/zmore/zless/zgrep

gzip可以解开 compress, zip 与 gzip等软件压缩的文件。当使用gzip进行压缩时,在预设状态下原本的文件会被压缩成 .gz 的档名,源文件就不再存在了。

image-20200623164606392

使用gzip压缩的文件还可以被windows中的WinRAR和7zip等软件解压缩。

image-20200623164809379

image-20200623165117726

bzip2, bzcat/bzmore/bzless/bzgrep

bzip是为了取代gzip提供更好的压缩比而来的。

image-20200623165255775

xz, xzcat/xzmore/xzless/xzgrep

提供了更高压缩比的方式。

image-20200623165339303

打包指令:tar

image-20200623165525172

image-20200623165743218

网络管理命令

1
$ systemctl restart network

yum

script
1
2
yum -y update
yum makecache

换源

阿里云:https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11H5nw5M

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×