2022年1月

RAID

基础概念

RAID0

无冗余,至少需要两块
avatar

RAID1

使用两块磁盘呈现完全镜像,拥有容错能力,成本高
avatar

RAID5

校验数据分布在整列的所有磁盘上,有扩展性,当一块磁盘损坏时,可以根据别的同一条带上的其他数据块和对应的校验数据来重建损坏的数据,是较常见的数据保护方案
avatar

RAID10&RAID01

avatar

实验

avatar

RAID10

添加四块磁盘
avatar

安装mdadm

[root@server1 ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdd
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sde
mdadm: partition table exists on /dev/sde but will be lost or
       meaningless after creating array
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.


# 格式化
mkfs.ext4 /dev/md0

#挂载

[root@server1 ~]# mkdir /raid10
[root@server1 ~]# mount /dev/md0 /raid10/
[root@server1 ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/md0                ext4       40G   49M   38G    1% /raid10

# 查看挂载信息,写入文件永久挂载
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:13:28 2022
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 27

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde


echo "/dev/md0 /rain10 ext4 defaults 0 0" >> /etc/fstab

损坏及修复

# 模拟损坏
[root@server1 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:17:27 2022
             State : clean, degraded
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 29

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       0       8       16        -      faulty   /dev/sdb


# 假装坏哩,买了新的盘关机换好后重启,然后我们把更换的盘重新挂载上去

[root@server1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part   /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm    /
  └─centos-swap 253:1    0    2G  0 lvm    [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sdd               8:48   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sde               8:64   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sr0              11:0    1  918M  0 rom
[root@server1 ~]# umount /dev/md0
[root@server1 ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:23:16 2022
             State : clean, degraded, recovering
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 16% complete

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 39

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

raid5+备份

创建RAID5至少要三块硬盘,外加一块备份硬盘,一共4块

[root@server1 ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Jan 16 08:57:35 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun Jan 16 08:58:34 2022
             State : clean, degraded, recovering
    Active Devices : 2
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 61% complete

              Name : server1:0  (local to host server1)
              UUID : 181d0cf3:6dbae3e6:d6ab8f42:2653f86c
            Events : 10

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      spare rebuilding   /dev/sdd

       3       8       64        -      spare   /dev/sde

[root@server1 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

# 注意我此处用的是临时挂载,长期用fstab
[root@server1 ~]# mkdir /mnt/raid5
[root@server1 ~]# mount /dev/md0 /mnt/raid5/

模拟坏了一块的情形

[root@server1 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Jan 16 08:57:35 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun Jan 16 09:02:57 2022
             State : clean, degraded, recovering
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 24% complete

              Name : server1:0  (local to host server1)
              UUID : 181d0cf3:6dbae3e6:d6ab8f42:2653f86c
            Events : 25

    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   /dev/sdb

LVM

avatar

avatar

物理卷:物理磁盘\分区\磁盘整列

卷组:由物理卷构成,一个卷组可以包含多个物理卷,并且创建后依然可以向其中添加物理卷

逻辑卷:在卷组上利用空闲资源建立起来的卷组,是一种虚拟磁盘

案例

创建逻辑卷、扩容逻辑卷、缩容逻辑卷、拍快照再恢复快照、删除逻辑卷

创建

添加两块硬盘,让他支持LVM技术

[root@server1 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@server1 ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.

把两块硬盘打包成一个卷组,或者使用分区也行,但是不能格式化

[root@server1 ~]# vgcreate vg1 /dev/sdb /dev/sdc
  Volume group "vg1" successfully created
[root@server1 ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               zyNdps-Jtez-2bvl-LvtC-8EKc-GN8U-a5hEPd

  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               EYo89p-6UU4-vnMZ-mPYa-uh6h-tatV-NCK50L

切割逻辑卷设备

切割时有两种选择:

  1. -L,以容量为单位,如-L 100M
  2. -l,以基本单元个数为单位,一个基本单元默认4M
[root@server1 ~]# lvcreate -n v1 -L 150M vg1
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "v1" created.
[root@server1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                EcfqJv-Y3c0-ZWpI-D51M-CrsE-zyll-p0QA9R
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:09 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                LF6tdh-zsUY-iWK3-I1FB-DKkS-Xu4S-hdc4st
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:10 +0800
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg1/v1
  LV Name                v1
  VG Name                vg1
  LV UUID                11j9V3-Ho6W-cmrr-23EM-PWJh-Qww5-adyf2u
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 18:38:46 +0800
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

格式化逻辑卷,挂载

[root@server1 ~]# mkfs.ext4 /dev/vg
vg1/         vga_arbiter
[root@server1 ~]# mkfs.ext4 /dev/vg1/v1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38912 inodes, 155648 blocks
7782 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      144M  1.6M  132M    2% /mnt/v_1

扩容

Linux e2fsck命令用于检查使用 Linux ext2 档案系统的 partition 是否正常工作。

-f强制检查

resize2fs:调整没有挂载的ext系列文件系统的大小

#卸载,扩容
umount /dev/vg1/v1
[root@server1 mnt]# lvextend -L 300M /dev/vg1/v1
  Size of logical volume vg1/v1 changed from 152.00 MiB (38 extents) to 300.00 MiB (75 extents).
  Logical volume vg1/v1 successfully resized.

#检查完整性,调整文件系统大小
[root@server1 mnt]# e2fsck -f /dev/vg1/v1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/v1: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks
[root@server1 mnt]# resize2fs /dev/vg1/v1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/v1 to 307200 (1k) blocks.
The filesystem on /dev/vg1/v1 is now 307200 blocks long.

#重新挂载

[root@server1 mnt]# mount /dev/vg1/v1 /
bin/   dev/   home/  lib64/ mnt/   proc/  run/   srv/   tmp/   var/
boot/  etc/   lib/   media/ opt/   root/  sbin/  sys/   usr/
[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      287M  2.1M  266M    1% /mnt/v_1

缩小

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# e2fsck -f /dev/vg1/v1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/v1: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks
[root@server1 mnt]# resize2fs /dev/vg1/v1 150M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/v1 to 153600 (1k) blocks.
The filesystem on /dev/vg1/v1 is now 153600 blocks long.

[root@server1 mnt]# lvreduce -L 150M /dev/vg1/v1
  Rounding size to boundary between physical extents: 152.00 MiB.
  WARNING: Reducing active logical volume to 152.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/v1? [y/n]: y
  Size of logical volume vg1/v1 changed from 300.00 MiB (75 extents) to 152.00 MiB (38 extents).
  Logical volume vg1/v1 successfully resized.
[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      142M  1.6M  130M    2% /mnt/v_1

快照

写个文件作对比

[root@server1 mnt]# echo "hello world" >> v_1/1.txt
[root@server1 mnt]# ls -l v_1/
总用量 14
-rw-r--r--. 1 root root    12 1月  14 19:33 1.txt
drwx------. 2 root root 12288 1月  14 18:40 lost+found

-s创建快照

[root@server1 mnt]# lvcreate -L 150M -s -n KZ1 /dev/vg1/v1
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "KZ1" created.
[root@server1 mnt]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                EcfqJv-Y3c0-ZWpI-D51M-CrsE-zyll-p0QA9R
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:09 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                LF6tdh-zsUY-iWK3-I1FB-DKkS-Xu4S-hdc4st
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:10 +0800
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg1/v1
  LV Name                v1
  VG Name                vg1
  LV UUID                11j9V3-Ho6W-cmrr-23EM-PWJh-Qww5-adyf2u
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 18:38:46 +0800
  LV snapshot status     source of
                         KZ1 [active]
  LV Status              available
  # open                 1
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/vg1/KZ1
  LV Name                KZ1
  VG Name                vg1
  LV UUID                XYTTPp-WpPS-F9Hq-qqzD-xUPJ-adpa-kkug2S
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 19:45:49 +0800
  LV snapshot status     active destination for v1
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

写入个大文件,发现快照卷的存储空间占用率上升了

[root@server1 mnt]# dd if=/dev/zero of=v_1/t1  count=1 bs=100M
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,2.14811 秒,48.8 MB/秒
[root@server1 mnt]# lvdisplay

  --- Logical volume ---
  LV Path                /dev/vg1/KZ1
  LV Name                KZ1
  VG Name                vg1
  LV UUID                XYTTPp-WpPS-F9Hq-qqzD-xUPJ-adpa-kkug2S
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 19:45:49 +0800
  LV snapshot status     active destination for v1
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  66.08%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

恢复快照后,快照卷会自动删除,查看目录发现已经恢复原样

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# lvconvert --merge /dev/vg1/KZ1
  Merging of volume vg1/KZ1 started.
  vg1/v1: Merged: 82.16%
  vg1/v1: Merged: 100.00%
[root@server1 mnt]# mount /dev/vg1/v1
[root@server1 mnt]# mount /dev/vg1/v1 v_1/
[root@server1 mnt]# ls v_1/
1.txt  lost+found

为何对原逻辑卷进行修改后快照占有会上升?因为这里采用的是写实拷贝技术,系统在创建快照的时候并不会直接把目标给复制一份,而是先放一个空的,也就是我们一开始看到快照占有非常小的原因,当数据发生修改时,快照才会记录修改部分的原始数据,当恢复快照时,系统会把快照和目标没有修改的部分相结合,得到目标拍摄快照时的状态

删除逻辑卷

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# lvremove /dev/vg1/v1
Do you really want to remove active logical volume vg1/v1? [y/n]: y
  Logical volume "v1" successfully removed
[root@server1 mnt]# vgremove vg1
  Volume group "vg1" successfully removed
[root@server1 mnt]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

基础概念

一台服务器有多块硬盘,在/dev下,sd开头为物理设备,vd开头为虚拟设备,以[a..z]来命名不同设备,以[1..]命名不同分区,如sda,sdb1,sdb2,IDE设备则是以hd开头

硬盘的分区分为两种:基本分区和扩展分区,要么4基本分区,要么3基本分区+1扩展,扩展分区必须进行再分区才能使用

常用文件系统:ext4:ext3改进版,支持的存储容量高达1EB,且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。

当硬盘被格式化后,linux会创建一个硬盘地图superblock,记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量、文件系统的格式与相关信息

inode:记录文件属性,一个文件使用一个inode,默认128字节,一个block占4B
block:用于存储数据

swap分区是通过在硬盘中预先划分一定空间,吧内存中暂不常使用的数据临时放在硬盘中,以腾出空间给别的更活跃的程序使用的技术

分区管理命令

lsblk:列出分区

[root@server1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0  500M  0 part /mnt/sdb1
sr0              11:0    1  918M  0 rom

df

-h:易读
-T:显示文件系统类型
[root@server1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
/dev/sdb1               ext4      477M  2.3M  445M    1% /mnt/sdb1
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0

fdisk:分区管理工具

fdisk 磁盘名
命令(输入 m 获取帮助):m
命令操作
   d   删除分区信息
   l   列出可用分区类型
   m   帮助
   n   添加分区
   p   打印分区信息
   q   不保存退出
   t   改变分区类型
   w   保存退出

fdisk只是暂时性的,需要保存才会写入

mkfs:建立文件系统

mkfs.系统 分区名

mount/umount:临时挂载、卸载

mount 磁盘 挂载点
-a:挂载所有/etc/fstab中定义的文件系统
-t:指定文件系统类型

umount 磁盘

/etc/fstab:永久挂载

/dev/device   mountpoint   type   rules   0   order

设备 挂载点 文件系统 规则 dump系统备份工具,0表示不备份 fsck检查顺序0不检查

规则:

    auto 开机自动挂载
    default 按照大多数永久文件系统的缺省值设置挂载定义
    noauto 开机不自动挂载
    nouser 只有超级用户可以挂载
    ro 按只读权限挂载
    rw 按可读可写权限挂载
    user 任何用户都可以挂载

挂载磁盘步骤

  1. 添加磁盘
  2. fdisk
  3. mkfs
  4. mount或者fstab

案例

永久挂载案例

添加磁盘,发现/dev下多了sdb

fdisk /dev/sdb
n
+500
p发现多了sdb1分区
w保存

mkfs.ext4 /dev/sdb1

blkid /dev/sdb1

vim /etc/fstab

UUID="8b838620-0b0d-4f78-b192-ed60958e7df6" /mnt/sdb1 ext4 defaults 0 0

重启后挂在依然存在
avatar

swap

[root@server1 ~]# umount /dev/sdb1
[root@server1 ~]# vim /etc/fstab #删除原本的挂载信息
[root@server1 ~]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old ext4 signature.
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=f59a3855-f407-4e0c-a0b8-5b9d8fcf9ff2
[root@server1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M         98M        730M        7.6M        143M        710M
Swap:          2.0G          0B        2.0G
[root@server1 ~]# swapon /dev/sdb1
[root@server1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M         99M        729M        7.6M        143M        710M
Swap:          2.5G          0B        2.5G


vim /etc/fstab


/dev/sdb1 swap swap defaults 0 0

重启后再用free -h查看,发现多出的0.5g还在

vim /etc/fstab #删除刚才加入的那行
swapoff /dev/sdb1
再次查看已经成功卸载

磁盘容量配额

avatar

[root@server1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (1026048-4194303,默认为 1026048):
将使用默认值 1026048
Last 扇区, +扇区 or +size{K,M,G} (1026048-4194303,默认为 4194303):+1G
分区 2 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc6750702

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     1026047      512000   83  Linux
/dev/sdb2         1026048     3123199     1048576   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。

# 准备好盘

partprobe #重新读取分区表

[root@server1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
├─sdb1            8:17   0  500M  0 part [SWAP]
└─sdb2            8:18   0    1G  0 part
sr0              11:0    1  918M  0 rom

# 格式化

[root@server1 ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

# 创建挂载点

[root@server1 ~]# cd /mnt
[root@server1 mnt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1月  14 10:29 sdb1
[root@server1 mnt]# mkdir tmp
[root@server1 mnt]# mount /dev/sdb2 /mnt/tmp
[root@server1 mnt]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb2               ext4      976M  2.6M  907M    1% /mnt/tmp

# 创建组和指定家目录的用户
[root@server1 mnt]# groupadd usergrp
[root@server1 mnt]# useradd -g usergrp -b /mnt/tmp/ user1
useradd: cannot set SELinux context for home directory /mnt/tmp//user1
[root@server1 mnt]# ^C
[root@server1 mnt]# setenforce 0
[root@server1 mnt]# userdel -r user1
userdel: user1 邮件池 (/var/spool/mail/user1) 未找到
userdel:未找到 user1 的主目录“/mnt/tmp//user1”
[root@server1 mnt]# useradd -g usergrp -b /mnt/tmp/ user1
[root@server1 mnt]# useradd -g usergrp -b /mnt/tmp/ user2

# 查看挂载点是否支持quota,不支持重新挂载

[root@server1 mnt]# mount | grep tmp
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=485792k,nr_inodes=121448,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99596k,mode=700)
/dev/sdb2 on /mnt/tmp type ext4 (rw,relatime,seclabel,data=ordered)
[root@server1 mnt]# mount -o remount,usrquota,grpquota /mnt/tmp/
[root@server1 mnt]# mount | grep tmp
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=485792k,nr_inodes=121448,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99596k,mode=700)
/dev/sdb2 on /mnt/tmp type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

# 确保开机自启quota

[root@server1 mnt]# tail -n 1 /etc/mtab >> /etc/fstab

#安装quota

yum install quota -y

# cd到对应目录

#开启

quotacheck -avug
quotaon -avug

# 配置
edquota -u user1
edquota -p user1 -u user2#复制配置

avatar

#修改宽限时间
[root@server1 tmp]# edquota -t

#查看限制情况
[root@server1 tmp]# repquota -as
*** Report for user quotas on device /dev/sdb2
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0
user1     --     16K    245M    293M              4     0     0
user2     --     16K      0K      0K              4     0     0




## 测试

[root@server1 tmp]# passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server1 tmp]# su user1
[user1@server1 tmp]$ cd
[user1@server1 user1]$ dd if=/dev/zero of=test1 bs=10M count=20
记录了20+0 的读入
记录了20+0 的写出
209715200字节(210 MB)已复制,1.43965 秒,146 MB/秒
[user1@server1 user1]$ ll
总用量 204800
-rw-r--r--. 1 user1 usergrp 209715200 1月  14 12:57 test1
[user1@server1 user1]$ ll -h
总用量 200M
-rw-r--r--. 1 user1 usergrp 200M 1月  14 12:57 test1
[user1@server1 user1]$ dd if=/dev/zero of=test2 bs=10M count=20
sdb2: warning, user block quota exceeded.
sdb2: write failed, user block limit reached.
dd: 写入"test2" 出错: 超出磁盘限额
记录了10+0 的读入
记录了9+0 的写出
97468416字节(97 MB)已复制,0.970785 秒,100 MB/秒

基础权限

[root@server1 ~]# ll
总用量 12
-rw-------. 1 root root 1241 1月  12 10:11 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 1月  13 10:13 test
-rw-r--r--. 1 root root    0 1月  13 10:31 testttt
-rw-r--r--. 1 root root  105 1月  13 10:41 tmp1
-rw-r--r--. 1 root root   51 1月  13 10:46 tmp2

ll出来前面那一串-rw-r--r--,开头一格表示文件类型,后面每三个一组,分别表示属主(u)、属组(g)、其他人(o)的权限

权限类型

读r:4
写w:2
执行x:1
权限对文件对目录
r读取可ls
w可写可创建删除touch,rm
x可执行可cd

chmod 修改权限

chmod 权限(000-777) file

avatar

使用符号修改:

chmod对象赋值符权限类型file
u+r
g-w
o=x
a

avatar

chown修改属主数组

chown 属主:属组 file  #修改属主数组
chown 属主 file  #修改属主
chown :数组  file  #修改数组

setfacl getfacl ACL设置基本权限

-m:添加acl设定
-x:删除acl设定
-b:移除所有acl设定
-R:递归添加
-d:添加默认设定

[root@server1 tmp]# getfacl 123
# file: 123
# owner: root
# group: root
user::rwx
group::rwx
other::rwx

[root@server1 tmp]# setfacl -m u:u2:- 123
[root@server1 tmp]# getfacl 123
# file: 123
# owner: root
# group: root
user::rwx
user:u2:---
group::rwx
mask::rwx
other::rwx

特殊权限

文件有三种特殊权限:

SUID 4:借出程序所有者的权限,只对二进制程序有效
    s:程序属主有x权限,如果有,可以暂借
    S:程序属主没有x权限

SGID:借出属组的权限,只对二进制程序有效
    s:程序属主有x权限,如果有,可以暂借
    S:程序属主没有x权限

SBIT:用于共享目录,当属主拥有x权限,用小写的t表示,当没有,用T表示,当用户在此目录创建文件,只有root用户和自己可以删除该文件,其他用户不可修改

使用chomod来修改(分别对应ugo)

[root@server1 tmp]# ll /etc/passwd
-rw-r--r--. 1 root root 986 1月  13 18:58 /etc/passwd
# 虽然passwd普通用户没有w权限,但是依旧能够修改自己的密码
[root@server1 tmp]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[root@server1 /]# ll -d /tmp
drwxrwxrwt. 10 root root 242 1月  13 20:44 /tmp

umask

新建的目录和文件会收到umask影响,计算方式为777-umask

[root@server1 /]# umask 0000  #临时修改umask
[root@server1 ~]# mkdir test1
drwxrwxrwx. 2 root root    6 1月  13 20:51 test1

如果要长期修改,改/etc/profile,但不推荐

基础

每个进程都得作为特定的用户发起运行
与该进程相关的用户的权限确定该进程可访问的文件和目录
每个文件有由一个特定的用户所拥有
用户的权限决定了他能访问哪些文件和目录

uid:

0:root
1-999:系统用户
1000+:普通用户

查看

id

查看当前用户/某用户的信息

[root@server1 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@server1 ~]# id root
uid=0(root) gid=0(root) 组=0(root)

查看文件属主属组

[root@server1 ~]# ll test
-rw-r--r--. 1 root root 0 1月  13 10:13 test

查看进程的运行者

ps aux
avatar

用户信息相关文件

passwd:用户名:密码占位符:uid:gid:秒数:home:shell
avatar

shadow:密码相关
avatar

group:组相关
avatar

用户管理

groupadd,groupdel,gpassword

useradd,usermod,userdel

passwd,chage

用户组

[root@server1 ~]# groupadd t1
[root@server1 ~]# groupadd t2
[root@server1 ~]# groupadd -g 2000 t3 #指定gid
[root@server1 ~]# tail -n3 /etc/group
t1:x:1000:
t2:x:1001:
t3:x:2000:


[root@server1 ~]# groupdel t1
[root@server1 ~]# groupdel t2
[root@server1 ~]# tail -n3 /etc/group
chrony:x:996:
slocate:x:21:
t3:x:2000:

gpassword:将用户从组中添加或者删除

-a:添加
-d:删除
-r:删除密码
[root@server1 ~]# gpasswd -a u2 ttt
正在将用户“u2”加入到“ttt”组中
[root@server1 ~]# id u2
uid=1001(u2) gid=2000(t3) 组=2000(t3),2001(ttt)

用户

useradd:添加用户

-u:指定uid
-g:指定gid,该组必须已存在
-s:shell
-G:附加组,该组必须已存在
-r:创建系统用户
-c:注释
-d:家目录

默认添加的shell为/bin/bash,不同的shell有不同的功能和特点。如果想要创建一个安全的仅作运行进程用的用户,可以把shell指定为/sbin/nologin,该用户将无法使用登录功能,较为安全


[root@server1 ~]# useradd u1
[root@server1 ~]# useradd u2 -g 2000
[root@server1 ~]# useradd -G 2000 u3
[root@server1 ~]# id u1
uid=1000(u1) gid=1000(u1) 组=1000(u1)
[root@server1 ~]# id u2
uid=1001(u2) gid=2000(t3) 组=2000(t3)
[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2000(t3)

userdel:删除用户

-r:删除用户的同时删除家目录和mail

[root@server1 ~]# userdel -r u1
[root@server1 ~]# id u1
id: u1: no such user

passwd:修改密码

root可以直接、强制修改
普通用户必须提供原密码,且得设置一个安全的密码
-n:指定最短使用期限
-x:指定最大使用期限
-w:提前多少天开始警告
--stdin:从标准输入接收用户密码,无需重复输入
[root@server1 ~]# passwd u2
更改用户 u2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[root@server1 ~]# echo '123' | passwd --stdin u3
更改用户 u3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

chage

-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期” 
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期” 
-h, --help 显示此帮助信息并推出 -I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态 
-l, --list 显示帐户年龄信息 
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数” 
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数” 
-R, --root CHROOT_DIR chroot 到的目录 
-W, --warndays 警告天数 将过期警告天数设为“警告天数”

chage -d 0 username #强制用户在下次登录的时候修改密码

usermod:修改用户组

-G:覆盖原有附加组
-aG:添加新的附加组

[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2000(t3)
[root@server1 ~]# groupadd ttt
[root@server1 ~]# usermod -G ttt u3
[root@server1 ~]# id u3
uid=1002(u3) gid=1002(u3) 组=1002(u3),2001(ttt)

login.defs

创建用户时参照的文件,此文件对root无效,当文件中的配置与passwd和shadow发生冲突时,以后两者为准

MAIL_DIR /var/spool/mail     创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。
PASS_MAX_DAYS 99999    密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。
PASS_MIN_DAYS 0    表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN 5    指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7    指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。
UID_MIN 500     指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。
UID_MAX 60000    指定用户最大的 UID 为 60000。
GID_MIN 500    指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。
GID_MAX 60000    用户 GID 最大为 60000。
CREATE_HOME yes    指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。
UMASK 077权限掩码为 077。
USERGROUPS_ENAB yes    指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。
ENCRYPT_METHOD SHA512

新建用户的家目录下的bash开头的文件是从/etc/skel/复制过去的

avatar
avatar

.bashrc:主要保存别名、系统路径,提示符

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions


如果想修改环境变量,如下
PATH=/usr/bin:/usr/local/bin:/bin

如果想修改别名,如下
alias xx='xx'

su与sudo

sudo提权

必须要先授权才能提权,未经授权使用sudo效果如下
avatar

提权方式参照/etc/sudoers,将该用户加入到wheel组里面

[root@server1 u2]# gpasswd -a u3 wheel
正在将用户“u3”加入到“wheel”组中

[u3@server1 home]$ useradd u4
-bash: /usr/sbin/useradd: 权限不够
[u3@server1 home]$ sudo useradd u4
[u3@server1 home]$ sudo useradd u5


[root@server1 u2]# tail -n4 /etc/passwd
u2:x:1001:2000::/home/u2:/bin/bash
u3:x:1002:1002::/home/u3:/bin/bash
u4:x:1003:1003::/home/u4:/bin/bash
u5:x:1004:1004::/home/u5:/bin/bash

su切换用户

su只切换身份,su -连身份和shell一起切换

avatar

重定向

标准输出:

标准正确输出1
标准错误输出2

输出重定向:

正确覆盖重定向>
正确追加重定向>>
错误覆盖重定向2>
错误追加重定向2>>

合并输出,即将正确输出和错误输出重定向为同一个数据流:

覆盖重定向&>
追加重定向&>>
将错误重定向到正确输出中2>&1
将正确重定向到错误输出中1>&2

输入重定向:

覆盖cat > file <<EOF .....EOF
追加cat >> file <<EOF......EOF

管道

command1 | command2 | command3

前一个命令的执行结果会被当过后一个命令的参数来使用

小工具

tr

转换

[root@server1 ~]# cat /etc/passwd |head -n3 | tr 'a-e' 'A-E' > tmp1
[root@server1 ~]# cat tmp1
root:x:0:0:root:/root:/Bin/BAsh
Bin:x:1:1:Bin:/Bin:/sBin/nologin
DAEmon:x:2:2:DAEmon:/sBin:/sBin/nologin

读取passwd前5行并把a-e转为大写把输出结果保存到文件中

-d:删除

wc

统计

-l:行数

-w:单词数

-c:字符数

[root@server1 ~]# cat /etc/passwd | wc -l
19

cut

切分

-d指定分隔符
-f指定字段

[root@server1 ~]# cat /etc/passwd | cut -d: -f2,3
x:0
x:1
x:2
x:3
x:4
x:5
x:6
x:7
x:8
x:11
x:12
x:14
x:99
x:192
x:81
x:999
x:74
x:89
x:998

sort

排序

-f:忽略大小写
-r:逆序
-t:字段分隔符
-k #:以指定字段为标准排序
-n:按照数值排序,不然按照首字母
-u:排序后去重

[root@server1 ~]# cat /etc/passwd | cut -d: -f3 | sort -nr > tmp2
[root@server1 ~]# cat tmp2
999
998
192
99
89
81
74
14
12
11
8
7
6
5
4
3
2
1
0

uniq

去重

-c:显示每行出现的行数
-d:只显示重复过的行
-u:只显示没重复的行

[root@server1 ~]# cut -d: -f6-10 /etc/passwd  | uniq -c
      1 /root:/bin/bash
      1 /bin:/sbin/nologin
      1 /sbin:/sbin/nologin
      1 /var/adm:/sbin/nologin
      1 /var/spool/lpd:/sbin/nologin
      1 /sbin:/bin/sync
      1 /sbin:/sbin/shutdown
      1 /sbin:/sbin/halt
      1 /var/spool/mail:/sbin/nologin
      1 /root:/sbin/nologin
      1 /usr/games:/sbin/nologin
      1 /var/ftp:/sbin/nologin
      4 /:/sbin/nologin
      1 /var/empty/sshd:/sbin/nologin
      1 /var/spool/postfix:/sbin/nologin
      1 /var/lib/chrony:/sbin/nologin