作业-第03周--课堂-Day12-linux文件核心属性知识(上)

Day12 课堂笔记

1. 用户及用户组

1.1 用户介绍

Linux是一个多用户、多任务的分时操作系统。每个用户都有一个唯一的用户名和用户口令(密码),普通用户需要超级用户权限时,可以通过“sudo命令名”方式来执行仅root用户才允许执行的权限。
说明:sudo和su是两个重要的切换用户角色的命令

1.2.1 Linux系统中用户角色划分

在Linux系统中,用户是分角色的,由于用户角色不同,权限和所完成的任务也不同:用户的角色是通过UID和GID来识别的

  • UID 用户ID,用来标识每个用户的唯一标示符
  • GID 组ID,用来标识用户组的唯一标识符

Linux里所有的用户和进程都要有用户对应。
文件存在必须对应用户
进程运行必须应用用户

1.2.1.1 超级用户:root

默认是root用户,它的UID和GID都为0。root用户在每台Unix/Linux操作系统中都是唯一且真实存在的。
在生产环境中,一般会禁止root账号通过SSH远程连接服务器,也会更改默认的SSH端口.

[root@oldboyedu ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@oldboyedu ~]# id
uid=0(root) gid=0(root) groups=0(root) 
[root@oldboyedu ~]# whoami
root

1.2.1.2 普通用户

这类用户一般是由具备系统管理员root权限的运维或系统管理员添加的

1.2.1.3 虚拟用户

特点是安装系统后默认就会存在的,且默认情况大多数不能登录系统。
价值何在?
满足文件或进程运行属主的要求。但是又不会带来管理风险。


Linux安全优化:

  • 安装系统后可以删除用不到的虚拟用户,但最好不删而是注释掉,万一出问题可以恢复回来。
  • 在部署服务的时候,一般就需要创建虚拟用户,满足服务启动的属主需求。

Linux系统中不同用户角色对应的UID

UID整数范围 角色
0 超级用户
1-499 虚拟用户
500-60000(CentOS6)1000-60000(CentOS7) 普通用户

1.2 用户组介绍

Linux系统中的用户组就是具有相同特征的用户集合,用户和用户组的对应关系有:一对一,一对多,多对一和多对多。

1.3 创建用户及用户组命令

  • 创建用户:useradd
  • 创建用户组:groupadd
  • 切换用户:su

勇于承担责任,才是能力变强的最佳捷径。————老男孩
要想比别人强,永远要比别人多做一点点,早做一点点。————老男孩
半步领先

[root@oldboyedu ~]# useradd test
[root@oldboyedu ~]# id test
uid=1002(test) gid=1002(test) groups=1002(test)
[root@oldboyedu ~]# groupadd sa
[root@oldboyedu ~]# su - test
[test@oldboyedu ~]$ touch test.txt
[test@oldboyedu ~]$ ls -l
total 0
-rw-rw-r--. 1 test test 0 Oct  1 10:20 test.txt

2. 文件的权限列

Linux中,每个文件或目录都有一组共9个基础权限位,每三个字符被分为一组,它们分别是属主权限位、用户组权限位、其它用户权限位。

作业-第03周--课堂-Day12-linux文件核心属性知识(上)_第1张图片
不同权限位对应的用户和组图解

其中表示权限的字符rwx-分别代表特殊的含义,如下:

  • r(read):可读权限,对应数字4。
  • w(write):可写权限,对应数字2。
  • x(Execute):可执行权限,对应数字1。
  • -:没有任何权限,对应数字0。

3. 文件的修改时间属性列(了解即可)

文件的时间戳属性有3重类型,即访问时间(access)、修改时间(modify)、改变时间(change)。

[root@oldboyedu ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 158         Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 16829878    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:net_conf_t:s0
Access: 2020-10-01 00:00:21.849999186 +0800访问时间
Modify: 2013-06-07 22:31:32.000000000 +0800修改时间
Change: 2019-03-04 11:15:49.426692303 +0800变化时间
 Birth: -
[root@oldboyedu ~]# stat -c %A /etc/hosts
-rw-r--r--
[root@oldboyedu /data]# echo oldboy>>test.txt
[root@oldboyedu /data]# stat test.txt
  File: ‘test.txt’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 33656257    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-01 11:07:28.953508888 +0800
Modify: 2020-10-01 11:07:53.119507988 +0800
Change: 2020-10-01 11:07:53.119507988 +0800
 Birth: -
[root@oldboyedu /data]# cat test.txt
oldboy
oldboy
[root@oldboyedu /data]# cat test.txt
oldboy
oldboy
[root@oldboyedu /data]# stat test.txt
  File: ‘test.txt’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 33656257    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-01 11:08:32.147506535 +0800
Modify: 2020-10-01 11:07:53.119507988 +0800
Change: 2020-10-01 11:07:53.119507988 +0800
 Birth: -
[root@oldboyedu /data]# chmod +x test.txt 
[root@oldboyedu /data]# stat test.txt
  File: ‘test.txt’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 33656257    Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-01 11:08:32.147506535 +0800
Modify: 2020-10-01 11:07:53.119507988 +0800
Change: 2020-10-01 11:08:57.442505593 +0800
 Birth: -
[root@oldboyedu /data]# ls --time-style=long-iso -l
total 12
-rw-r--r--. 1 root root   0 2020-10-01 00:19 1.txt
-rw-r--r--. 1 root root   0 2020-10-01 00:19 2.txt
-rw-r--r--. 1 root root   0 2020-10-01 00:19 3.txt
-rw-r--r--. 1 root root   0 2020-10-01 00:19 4.txt
-rw-r--r--. 1 root root   0 2020-10-01 00:19 5.txt
-rw-r--r--. 1 root root 187 2020-10-01 09:01 oldboy.tar.gz
-rw-r--r--. 1 root root  18 2020-10-01 09:01 paichu.txt
-rwxr-xr-x. 1 root root  14 2020-10-01 11:07 test.txt

ls参数:
-t modify,文件内容被改过之后的时间。
-c change,文件属性发生改变的时间。
-a access,文件内容被访问过的时间。

4. 索引节点

索引节点是Linux系统中重要的基础知识,索引节点Inode列的属性对应“ls -lhi /data”命令结果中的第1列的一串数字,如下:

[root@oldboyedu  ~]# ls -lhi /data/
total 0
16974684 -rw-r--r-- 1 root root 0 Mar 15 11:49 1.txt

在每个Linux存储设备或存储设备的分区被格式化为ext系列文件系统后,都会生成两部分内容:第一部分是inode(默认大小128B或256B),第二部分是Block(默认大小1~4KB)。inode本质是一小块具备唯一数字编号的存储空间,主要用来存放文件(目录)属性的数据信息,inode里面唯独不包含文件名本身(文件名不算文件的属性)。Block叫做磁盘块,是用来存放实际数据的实体单元,即真正用来存放数据的地方。inode存储的属性信息,包括但不限于文件大小、属主、归属的用户组、文件权限、文件类型、修改时间等,还包含指向文件的实体指针等(Block的位置)。

4.1 Inode和Block的特点

Inode特点

  • ext3/ext4文件系统(CentOS5.x/CentOS6.x默认的文件系统)下,一个非空文件至少要占用一个Inode(有且只有一个)和一个Block(可以有多个)。
  • Inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。
  • Inode在某一个文件系统(分区)内是唯一的。

Block特点

  • 硬盘读取数据是以Block为单位读取的。
  • 每读取一个Block就会消耗一次I/O。
  • 若文件比较大,一个文件可能占用多个Block。
  • 若文件比较小,一个Block剩余空间会被浪费,无论内容有多小。

4.2 查看和管理Inode

查看文件系统Inode总量以及剩余量的命令如下:

[root@oldboyedu  ~]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      9960960 73246 9887714    1% /
devtmpfs        121783   373  121410    1% /dev
tmpfs           124487     1  124486    1% /dev/shm
tmpfs           124487   697  123790    1% /run
tmpfs           124487    16  124471    1% /sys/fs/cgroup
/dev/sda1       131072   332  130740    1% /boot
tmpfs           124487     1  124486    1% /run/user/0
[root@oldboyedu  ~]# 

查看磁盘的使用量相当于是看Block的情况,示例命令如下:

[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   18G   9% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
[root@oldboyedu  ~]# 

4.3 磁盘空间不足导致企业故障的案例

以下是磁盘装满的两种企业模拟案例

环境准备,命令集合演示结果如下:

[root@oldboyedu  ~]# mkdir -p /app/logs
[root@oldboyedu  ~]# dd if=/dev/zero of=/dev/sdc bs=8K count=10 
10+0 records in
10+0 records out
81920 bytes (82 kB) copied, 0.000122544 s, 668 MB/s
[root@oldboyedu  ~]# mkfs.ext4 /dev/sdc 
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is not a block special device.
Proceed anyway? (y,n) y

Filesystem too small for a journal
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 80 blocks
4 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done

[root@oldboyedu  ~]# mount -o loop /dev/sdc /app/logs
[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   14K   54K  21% /app/logs
[root@oldboyedu  ~]# 

4.3.1 模拟Block被占满了的测试案例

[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   14K   54K  21% /app/logs
[root@oldboyedu  ~]# cd /app/logs/
[root@oldboyedu  /app/logs]# ls -lh /bin/ls
-rwxr-xr-x. 1 root root 115K Oct 31 03:16 /bin/ls
[root@oldboyedu  /app/logs]# cp /bin/ls .
cp: error writing ‘./ls’: No space left on device
cp: failed to extend ‘./ls’: No space left on device
[root@oldboyedu  /app/logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   70K     0 100% /app/logs
[root@oldboyedu  /app/logs]# mv ls /tmp/
[root@oldboyedu  /app/logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   18G   9% /
devtmpfs        476M   80K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   14K   54K  21% /app/logs
[root@oldboyedu  /app/logs]# 

4.3.2 模拟Inode耗尽的测试案例

[root@oldboyedu  /app/logs]# touch {1..6}.txt
touch: cannot touch ‘6.txt’: No space left on device
[root@oldboyedu  /app/logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   18G   9% /
devtmpfs        476M   80K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   14K   54K  21% /app/logs
[root@oldboyedu  /app/logs]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      9960960 73249 9887711    1% /
devtmpfs        121783   378  121405    1% /dev
tmpfs           124487     1  124486    1% /dev/shm
tmpfs           124487   703  123784    1% /run
tmpfs           124487    16  124471    1% /sys/fs/cgroup
/dev/sda1       131072   332  130740    1% /boot
tmpfs           124487     1  124486    1% /run/user/0
/dev/loop0          16    16       0  100% /app/logs
[root@oldboyedu  /app/logs]# mv *.txt /tmp/
[root@oldboyedu  /app/logs]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      9960960 73254 9887706    1% /
devtmpfs        121783   378  121405    1% /dev
tmpfs           124487     1  124486    1% /dev/shm
tmpfs           124487   703  123784    1% /run
tmpfs           124487    16  124471    1% /sys/fs/cgroup
/dev/sda1       131072   332  130740    1% /boot
tmpfs           124487     1  124486    1% /run/user/0
/dev/loop0          16    11       5   69% /app/logs
[root@oldboyedu  /app/logs]# touch 1.txt
[root@oldboyedu  /app/logs]# ls
1.txt  lost+found

4.3.3 磁盘空间满了的故障情况总结

  • 情况1:Block耗尽,例如500GB的磁盘存放了400GB+200GB的视频文件。
  • 情况2:Inode耗尽,产生大量的小文件(小于1KB)。

你可能感兴趣的:(作业-第03周--课堂-Day12-linux文件核心属性知识(上))