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个基础权限位,每三个字符被分为一组,它们分别是属主权限位、用户组权限位、其它用户权限位。
其中表示权限的字符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)。