[实验] Linux rpm 软件包的制作 (通过 rpm-build 实现) (Nginx 版)

注意:文中的很多信息例如软件的名称等是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

软件准备:

在 Nginx 官网上下载搭建集群所需软件 Nginx:

http://nginx.org/en/download.html

正文:

步骤目录:

步骤一:系统环境要求

步骤二:准备 rpm-build 软件
2.1 安装 rpm-build
2.2 生成 rpm-build 目录
2.3 显示生成的 rpm-build 目录

步骤三:制作 Nginx 软件的 rpm 包
3.1 将 Nginx 的源码安装包放在固定的位置
3.2 制作 Nginx 的 nginx.spec 文件
3.3 SPEC 配置文件里的内容说明
3.4 安装 Nginx 软件的依赖包
3.6 显示新生成的 Nginx rpm 软件包

步骤四:使用新生成的 Nginx rpm 软件包
4.1 安装刚刚新生成的 Nginx rpm 软件包
4.2 启动 Nginx 服务
4.3 显示 Nginx 服务的启动状态
4.3.1 显示 Nginx 网页是否可以访问
4.3.2 显示 Nginx 的端口有没有启动

具体的操作步骤:

步骤一:系统环境要求

1) 服务器的系统是 CentOS 7 版本
2) 服务器系统要配置好 yum 源

步骤二:准备 rpm-build 软件
2.1 安装 rpm-build

# yum -y install rpm-build

2.2 生成 rpm-build 目录

# rpmbuild -ba nginx.spec
error: failed to stat /root/nginx.spec: No such file or directory

2.3 显示生成的 rpm-build 目录

# ls /root/rpmbuild/
BUILD  BUILDROOT  RPMS	SOURCES  SPECS	SRPMS

步骤三:制作 Nginx 软件的 rpm 包
3.1 将 Nginx 的源码安装包放在固定的位置

# cp nginx-1.16.1.tar.gz /root/rpmbuild/SOURCES/

(补充:这里要安装的 Nginx 版本是 1.16.1)

3.2 制作 Nginx 的 nginx.spec 文件

# vi /root/rpmbuild/SPECS/nginx.spec

将部分内容修改如下:

Name:nginx
Version:1.16.1
Release:1.0
Summary:Nginx is a web server software.
......
License:GPL
URL:www.nginx.org
Source0:%{name}-%{version}.tar
......
%description
nginx is an HTTP and reverse proxy server ......
......
%post
useradd nginx
......
%prep
%setup -q
......
%build
./configure --user=nginx --group=nginx --with-http_ssl_module
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
......
%files
......
%doc
/usr/local/nginx/*
......
%changelog


补充:
1) 这里的 Name:nginx 是指软件名称是 nginx
2) 这里的 Version:1.16.1 是指软件的版本是 1.16.1
3) 这里的 Release:1.0 是指发布的版本是 1。0
4) 这里的 Summary: Nginx is a web server software. 是指软件的描述是 Summary: Nginx is a web server software.
5) 这里的 License:GPL 是指软件使用的协议是 GPL
6) 这里的 URL:www.nginx.org 是指软件的官网是 www.nginx.org
7) 这里的 Source0:%{name}-%{version}.tar 是指软件源码文件的名称
8) 这里的 #BuildRequires: 是指软件编译安装时需要的依赖包,这里没有内容
9) 这里的 #Requires: 是指软件安装时所需要的依赖包,这里没有内容
10) 这里的 %description 是指软件的详细描述,这里没有内容
11) 这里的

%post
useradd nginx

是指软件安装后创建 nginx 用户

12) 这里的 %prep 是指软件安装前的准备,这里没有内容
13) 这里的 %setup –q 是指自动解压软件的源码包,并 cd 进入刚刚解压出来的目录
14) 这里的

%build
./configure
make %{?_smp_mflags}

是指对源码安装包进行配置
15) 这里的

%install
make install DESTDIR=%{buildroot}

是指对源码安装包进行编译安装
16) 这里的

%files
%doc
/usr/local/nginx/*

是指将源码安装包安装到 /usr/local/nginx/ 目录里

3.4 安装 Nginx 软件的依赖包

# yum -y install gcc pcre-devel openssl-devel

3.5 生成 Nginx rpm 软件包

# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

3.6 显示新生成的 Nginx rpm 软件包

# rpm -qpi /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

步骤四:使用新生成的 Nginx rpm 软件包
4.1 安装刚刚新生成的 Nginx rpm 软件包

# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

4.2 启动 Nginx 服务

# /usr/local/nginx/sbin/nginx

4.3 显示 Nginx 服务的启动状态
4.3.1 显示 Nginx 网页是否可以访问

# curl http://127.0.0.1/

4.3.2 显示 Nginx 的端口有没有启动

# ss -ntulap | grep 80

[命令] Linux 命令组 lvm (逻辑卷管理)

内容目录:

内容一:LVM 的原理
1.1 LVM 的目的
1.2 LVM 的结构
1.2.1 LVM 的第一层
1.2.2 LVM 的第二层
1.2.3 LVM 的第三层

内容二:LVM 管理的命令集

内容三:快速部署 LVM 的思路

内容四:创建 LVM 逻辑卷的案例
4.1 创建卷组的格式
4.2 创建卷组的案例
4.3 创建逻辑卷的方案案例选择
4.3.1 案例一:创建指定大小的逻辑卷
4.3.2 案例二:创建大小是卷组剩余空间百分比的逻辑卷
4.3.3 案例三:创建大小是卷组全部空间百分比的逻辑据
4.4 显示已创建的逻辑卷 /dev/vg/vo
4.5 将新创建的逻辑卷格式化、挂载并使用

内容五:扩展 LVM 逻辑卷大小的案例
5.1 检查现有逻辑卷大小
5.2 检查逻辑卷所在卷组的剩余空间,看是否够逻辑卷扩展
5.3 当卷组的剩余空间不足时,要先扩展卷组(如果卷组的空间足够大,则可以跳过次步骤)
5.3.1 扩展卷组的格式
5.3.2 扩展卷组的案例
5.3.2.1 扩展卷组
5.3.2.2 显示扩展后的卷组
5.3.2.3 之后就可以扩展逻辑卷了
5.4 当卷组的剩余空间充足时,可直接扩展逻辑卷
5.4.1 扩展逻辑卷的格式
5.4.1.1 第一种格式:将逻辑卷扩展到指定大小
5.4.1.2 第二种格式:给逻辑卷添加指定大小的空间
5.4.1.3 第三种格式:将剩余空间的百分比添加给逻辑卷
5.4.1.4 补充:使用 -r 参数的格式
5.4.2 扩展逻辑卷的案例
5.4.2.1 扩展逻辑卷
5.4.2.1.1 案例一:将逻辑卷扩展到某个值
5.4.2.1.2 案例二:给逻辑卷添加某个值
5.4.2.1.3 案例三:将所有剩余空间添加给逻辑卷,并强制刷新文件系统容量
5.4.2.2 显示扩展后的逻辑卷
5.5 更新文件系统大小
5.5.1 更新文件系统大小的目的
5.5.2 显示文件系统的格式
5.5.3 系统容量的格式
5.5.3.1 EXT3/4 文件系统刷新的方法
5.5.3.2 XFS 文件系统刷新的方法
5.5.3.3 btrfs 文件系统刷新的方法
5.5.4 刷新文件系统的案例
5.5.4.1 以逻辑卷块作为目标进行刷新
5.5.4.2 以目录作为目标进行刷新

内容六:创建 LVM 卷组时固定 PE 的大小的案例
6.1 创建卷组的时候固定 PE 大小
6.1.1 创建卷组时固定 PE 大小的格式
6.1.2 创建卷组时设置 PE 大小的案例
6.2 创建逻辑卷的时候指定 PE 个数
6.2.1 创建逻辑卷的时候指定 PE 个数的格式
6.2.2 创建逻辑卷的时候指定 PE 个数的案例
6.2.3 显示刚刚创建的制定了 PE 大小和个数的逻辑卷

内容七:管理卷组的案例
7.1 激活卷组
7.1.1 激活卷组的格式
7.1.2 激活卷组的案例
7.2 取消激活卷组
7.2.1 取消卷组里所有逻辑卷的挂载
7.2.2 取消激活卷组
7.2.2.1 取消激活卷组的格式
7.2.2.2 取消激活卷组的格式

具体的内容:

内容一:LVM 的原理
1.1 LVM 的目的

将零散的空闲存储整合成虚拟磁盘,再将虚拟的磁盘整合成虚拟的分区

1.2 LVM 的结构
1.2.1 LVM 的第一层

物理卷
Physical Volume

1.2.2 LVM 的第二层

卷组
Volume Group

1.2.3 LVM 的第三层

逻辑卷
Logical Volume

内容二:LVM 管理的命令集

function physical volume volume group logical volume
Scan     pvscan          vgscan       lvscan
Create   pvcreate        vgcreate     lvcreate
Display  pvdisplay       vgdisplay    lvdisplay
Remove   pvremove        vgremove     lvremove
Extend   / 

内容三:快速部署 LVM 的思路

1)准备至少一个空闲分区

2)创建卷组:

# vgcreate <volume group> <free partition>

3)创建逻辑卷:

# lvcreate -L <logical volume size> -n <logical volume> <volume group>

内容四:创建 LVM 逻辑卷的案例
4.1 创建卷组的格式

# vgcreate <volume group> <free partition>......

4.2 创建卷组的案例

# vgcreate vg /dev/vdb2
......

(补充:这里以使用硬盘 /dev/vdb2 创建名为 vg 的卷组为例)

4.3 创建逻辑卷的方案案例选择

(注意:以下方案三选一即可,且只能三选一)

4.3.1 案例一:创建指定大小的逻辑卷

# lvcreate -L 200M -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为 200M 的逻辑卷为例)

4.3.2 案例二:创建大小是卷组剩余空间百分比的逻辑卷

# lvcreate -l 80%Free -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为卷组 vg 剩余空间 80% 的逻辑卷为例)

4.3.3 案例三:创建大小是卷组全部空间百分比的逻辑据

# lvcreate -l 80%VG -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为卷组 vg 全部空间 80% 的逻辑卷为例)

4.4 显示已创建的逻辑卷 /dev/vg/vo

如果是 Rocky Linux & RHEL:

# lvscan
ACTIVE '/dev/vg/vo' [200.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 openSUSE & SLE:

# lvscan
ACTIVE '/dev/mapper/vg-vo' [200.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

4.5 将新创建的逻辑卷格式化、挂载并使用

(步骤略)

内容五:扩展 LVM 逻辑卷大小的案例
5.1 检查现有逻辑卷大小

如果是 Rocky Linux & RHEL:

# lvscan | grep vo
ACIVE '/dev/vg/vo' [200.00 MiB] inherit
......

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 openSUSE & SLE:

# lvscan | grep vo
ACIVE '/dev/mapper/vg-vo' [200.00 MiB] inherit
......

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

5.2 检查逻辑卷所在卷组的剩余空间,看是否够逻辑卷扩展

# vgdisplay vg | grep Free
 Free PE/Size 4/300.00 MiB

(补充:这里以显示卷组 vg 的大小为例)

5.3 当卷组的剩余空间不足时,要先扩展卷组(如果卷组的空间足够大,则可以跳过次步骤)
5.3.1 扩展卷组的格式

# vgextend <volume group name> <free partition>......

5.3.2 扩展卷组的案例
5.3.2.1 扩展卷组

# vgextend vg /dev/vdb3
 Physical volume "/dev/vdb3" successfully created
 Volume group "vg" successfully extended

(补充:这里以将硬盘 /dev/vdb 添加到卷组 vg 为例)

5.3.2.2 显示扩展后的卷组

# vgdisplay vg | grep 'Free'
 Free PE/Size 128/512.00 MiB

(补充:这里以显示卷组 vg 的剩余大小为例)

5.3.2.3 之后就可以扩展逻辑卷了

5.4 当卷组的剩余空间充足时,可直接扩展逻辑卷
5.4.1 扩展逻辑卷的格式
5.4.1.1 第一种格式:将逻辑卷扩展到指定大小

如果是 Rocky Linux & RHEL:

# lvextend -L <new size of logical volume> /dev/<volume group>/<logical volume>

如果是 openSUSE & SLE:

# lvextend -L <new size of logical volume> /dev/mapper/<volume group>-<logical volume>

5.4.1.2 第二种格式:给逻辑卷添加指定大小的空间

如果是 Rocky Linux & RHEL:

# lvextend -L +<the size of the logical volume added> /dev/<volume group>/<logical volume>

如果是 openSUSE & SLE:

# lvextend -L +<the size of the logical volume added> /dev/mapper/<volume group>-<logical volume>

5.4.1.3 第三种格式:将剩余空间的百分比添加给逻辑卷

如果是 Rocky Linux & RHEL:

# lvextend -l +<percentage of remaining size>FREE /dev/<volume group>/<logical volume>

如果是 openSUSE & SLE:

# lvextend -l +<percentage of remaining size>FREE /dev/mapper/<volume group>-<logical volume>

5.4.1.4 补充:使用 -r 参数的格式

如果是 Rocky Linux & RHEL:

# lvextend -r -l +<percentage of remaining size>FREE /dev/<volume group name>/<logical volume name>

(补充:这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容)

如果是 openSUSE & SLE:

# lvextend -r -l +<percentage of remaining size>FREE /dev/mapper/<volume group>/<logical volume>

(补充:这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容)

5.4.2 扩展逻辑卷的案例
5.4.2.1 扩展逻辑卷
5.4.2.1.1 案例一:将逻辑卷扩展到某个值

如果是 Rocky Linux & RHEL:

# lvextend -L 300MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以将逻辑卷 /dev/vg/vo 扩展到 300M 为例)

如果是 openSUSE & SLE:

# lvextend -L 300MiB /dev/mapper/vg-vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以将逻辑卷 /dev/mapper/vg-vo 扩展到 300M 为例)

5.4.2.1.2 案例二:给逻辑卷添加某个值

如果是 Rocky Linux & RHEL:

# lvextend -L +100MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以给逻辑卷 /dev/vg/vo 添加 100M 为例)

如果是 openSUSE & SLE:

# lvextend -L +100MiB /dev/mapper/vg-vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以给逻辑卷 /dev/mapper/vg-vo 添加 100M 为例)

5.4.2.1.3 案例三:将所有剩余空间添加给逻辑卷,并强制刷新文件系统容量

如果是 Rocky Linux & RHEL:

# lvextend -r -l +100%FREE /dev/vg/vo
 Extending logical volume vo to 500.00 MiB
 Logical volume vo successfully resized


补充:
1) 这里以将卷组所有剩余空间都添加给逻辑卷 /dev/vg/vo 为例
2) 这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容

如果是 openSUSE & SLE:

# lvextend -r -l +100%FREE /dev/mapper/vg-vo
 Extending logical volume vo to 500.00 MiB
 Logical volume vo successfully resized


补充:
1) 这里以将卷组所有剩余空间都添加给逻辑卷 /dev/mapper/vg-vo 为例
2) 这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容

5.4.2.2 显示扩展后的逻辑卷

如果是 Rocky Linux & RHEL:

# lvscan
......
ACTIVE '/dev/vg/vo' [300.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 openSUSE & SLE:

# lvscan
......
ACTIVE '/dev/mapper/vg-vo' [300.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

5.5 更新文件系统大小
5.5.1 更新文件系统大小的目的

对于格式化过的逻辑卷,扩展后应该通知 Linux 内核,否则使用 df 等工具时看到的仍是扩展前的大小

5.5.2 显示文件系统的格式

# df -hT

5.5.3 系统容量的格式
5.5.3.1 EXT3/4 文件系统刷新的方法

如果是 Rocky Linux & RHEL:

# resize2fs /dev/<volume group>/<logical volume>

如果是 openSUSE & SLE:

# resize2fs /dev/mapper/<volume group>-<logical volume>

或者:

# resize2fs <logical volume mount point>

5.5.3.2 XFS 文件系统刷新的方法

# xfs_growfs <logical volume mount point>

5.5.3.3 btrfs 文件系统刷新的方法

# btrfs filesystem resize max <logical volume mount point>

5.5.4 刷新文件系统的案例
5.5.4.1 以逻辑卷块作为目标进行刷新

如果是 Rocky Linux & RHEL:

# resize2fs /dev/vg/vo

(补充:这里以刷新逻辑卷 /dev/vg/vo 为例)

如果是 openSUSE & SLE:

# resize2fs /dev/mapper/vg-vo

(补充:这里以刷新逻辑卷 /dev/mapper/vg-vo 为例)

5.5.4.2 以目录作为目标进行刷新

# resize2fs /

(补充:这里以刷新挂载在 / 目录上的逻辑卷为例)

内容六:创建 LVM 卷组时固定 PE 的大小的案例
6.1 创建卷组的时候固定 PE 大小
6.1.1 创建卷组时固定 PE 大小的格式

# vgcreate -s <PE size> <volume group> <free partition>

6.1.2 创建卷组时设置 PE 大小的案例

# vgcreate -s 20MiB pevg /dev/vdb6 Physical volume "/dev/vdb4" 
successfully created Volume group "pevg" successfully created 

(补充:这里以使用 /dev/vdb6 硬盘创建名为 pevg PE 大小为 20M 的卷组为例)

6.2 创建逻辑卷的时候指定 PE 个数
6.2.1 创建逻辑卷的时候指定 PE 个数的格式

# lvcreate -l <number of PE> -n <logical volume> <volume group>

6.2.2 创建逻辑卷的时候指定 PE 个数的案例

# lvcreate -l 50 -n pelo pevg 
 Logical volume "pelo" created

(补充:这里以使用卷组 pevg 创建包含 50 个 PE 个数的逻辑卷为例)

6.2.3 显示刚刚创建的制定了 PE 大小和个数的逻辑卷

如果是 Rocky Linux & RHEL:

# lvscan
 ACTIVE '/dev/pevg/pelo' [1000.00 MiB] inherit

(补充:会发现它的大小是精确的)

如果是 openSUSE & SLE:

# lvscan
 ACTIVE '/dev/mapper/pevg-pelo' [1000.00 MiB] inherit

(补充:会发现它的大小是精确的)

内容七:管理卷组的案例
7.1 激活卷组
7.1.1 激活卷组的格式

# vgchange --activate y <volume group>

或者:

# vgchange -a y <volume group>

7.1.2 激活卷组的案例

# vgchange --activate y vg

或者:

# vgchange -a y vg

(补充:这里以激活卷组 vg 为例)

7.2 取消激活卷组
7.2.1 取消卷组里所有逻辑卷的挂载

(步骤略)

7.2.2 取消激活卷组
7.2.2.1 取消激活卷组的格式

# vgchange --activate n <volume group>

或者:

# vgchange -a n <volume group>

7.2.2.2 取消激活卷组的格式

# vgchange --activate n vg

或者:

# vgchange -a n vg

(补充:这里以取消激活卷组 vg 为例)

[命令] Linux 命令 sudo (用户提权)

内容目录:

内容一:sudo 简介

内容二:修改 sudo 配置文件的方法
2.1 第一种修改 sudo 配置文件的方法
2.2 第二种修改 sudo 配置文件的方法

内容三:修改 sudo 配置文件的案例
3.1 案例一:让 zhumingyu 用户可以通过 sudo 获取所有 root 权限
3.2 案例二:让 zhumingyu 用户可以通过 sudo 获取所有 root 权限,并且免密码
3.3 案例三:让 zhumingyu 用户可以通过 sudo 获取 firewalld 命令的 root 权限,并且免密码
3.4 案例四:让 zhumingyu 用户可以通过 sudo 获取 firewalld 和 chmod 命令的 root 权限,并且免密码
3.5 案例五:让 zhumingyu 用户可以通过 sudo 获取 passwd 命令的 root 权限,并且免密码,但是不能修改 root 的密码
3.6 案例六:让 zhumingyu 用户可以通过 sudo 获取 passwd 命令的 root 权限,并且免密码,但是不能修改以 a 开头命名用户的密码
3.7 案例七:让 zhumingyu 组里的所有用户通过 sudo 获取 passwd 命令的 root 权限,并且免密码
3.7.1 让 zhumingyu 组里的所有用户通过 sudo 获取 passwd 命令的 root 权限,并且免密码
3.7.2 将相关用户添加到 zhumingyu 组里

具体的内容:

内容一:sudo 简介

sudo 命令可以让非 root 用户,在不知道 root 的密码的情况之下以 root 的身份执行某一些命令
但是要实现这一目标需要提前修改 sodu 的配置文件

内容二:修改 sudo 配置文件的方法
2.1 第一种修改 sudo 配置文件的方法

# visudo

2.2 第二种修改 sudo 配置文件的方法

# vi /etc/sudoers

内容三:修改 sudo 配置文件的案例
3.1 案例一:让 zhumingyu 用户可以通过 sudo 获取所有 root 权限

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   ALL  
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.2 案例二:让 zhumingyu 用户可以通过 sudo 获取所有 root 权限,并且免密码

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   NOPASSWD: ALL  
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.3 案例三:让 zhumingyu 用户可以通过 sudo 获取 firewalld 命令的 root 权限,并且免密码

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   NOPASSWD: firewalld
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.4 案例四:让 zhumingyu 用户可以通过 sudo 获取 firewalld 和 chmod 命令的 root 权限,并且免密码

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   NOPASSWD: firewalld,chmod
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.5 案例五:让 zhumingyu 用户可以通过 sudo 获取 passwd 命令的 root 权限,并且免密码,但是不能修改 root 的密码

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   NOPASSWD: !/usr/bin/passwd root
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.6 案例六:让 zhumingyu 用户可以通过 sudo 获取 passwd 命令的 root 权限,并且免密码,但是不能修改以 a 开头命名用户的密码

# vi /etc/sudoers

添加以下内容:

......
zhumingyu ALL=(ALL)   NOPASSWD: !/usr/bin/passwd a.*
......

(说明:在 “root ALL=(ALL)   ALL” 这一行后面仿照着加入一行就行了)

3.7 案例七:让 zhumingyu 组里的所有用户通过 sudo 获取 passwd 命令的 root 权限,并且免密码
3.7.1 让 zhumingyu 组里的所有用户通过 sudo 获取 passwd 命令的 root 权限,并且免密码

# vi /etc/sudoers

添加以下内容:

......
%zhumingyu ALL=(ALL)    NOPASSWD: /usr/bin/passwd 
......

(补充:% 代表这是一个组而不是一个用户)

(说明:在 “%wheel    ALL=(ALL)    NOPASSWD: ALL” 这一行后面仿照着加入一行就行了)

3.7.2 将相关用户添加到 zhumingyu 组里

# usermod -a -G zhumingyu <user>

[命令] Linux 命令 chattr (文件锁)

内容一: chattr 格式
1.1 锁定文件的格式(文件将无法被修改、追加和删除)

# chattr +i <file>

1.2 解锁文件的格式(文件将可以被修改、追加和删除)

# chattr -i <file>

1.3 锁定文件后仅可追加内容的格式(文件将无法被修改和删除,但是可以被追加新内容)

# chattr +a <文file> 

1.4 解锁文件只可被追加内容的格式(文件将取消无法被修改和删除,但红四可以被追加新内容的状态)

# chattr -a <file> 

1.5 显示文件特殊属性

# lsattr <file> 

内容二: chattr 的使用案例
2.1 案例一:锁定文件并显示文件的锁定状态
2.1.1 锁定文件

# chattr +i /etc/resolv.conf

(补充:这里以锁定 /etc/resolv.conf 文件为例)

2.1.2 显示文件的锁定状态

# lsattr /etc/resolv.conf
----i----------- /etc/resolv.conf

(补充:这里以显示 /etc/resolv.conf 文件为例)

2.1.3 解锁文件

# chattr -i /etc/resolv.conf

(补充:这里以解锁 /etc/resolv.conf 文件为例)

2.2 案例二:锁定文件后仅可追加内容并显示文件的锁定状态
2.2.1 锁定文件后仅可追加内容

# chattr +a /etc/hosts

(补充:这里以锁定 /etc/hosts 文件为例)

2.2.2 显示文件的锁定状态

# lsattr /etc/hosts
----a---------- /etc/hosts

(补充:这里以显示 /etc/hosts 文件为例)

2.2.3 解锁仅可追加内容的文件

# chattr -a /etc/hosts

(补充:这里以解锁 /etc/hosts 文件为例)