Linux more 和 less 命令及常用选项(自定义查看文本的方式)

一、more 命令
more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。

1.命令格式
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 

2.命令功能
more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。

3.命令参数
+n 从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示  
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉

4.常用操作命令
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 用vi编辑器
!命令 调用Shell,并执行命令 
q 退出more

二、less 指令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。 在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按 键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

1.命令格式
less [参数] 文件 

2.命令功能
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

3.命令参数
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/ 字符串:向下搜索“字符串”的功能
? 字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页

4.使用实例
实例1:ps查看进程信息并通过less分页显示同时显示行号
[root@host ~]# ps -ef|less -N
 1       1 UID        PID  PPID  C STIME TTY          TIME CMD
 2       2 root         1     0  0 Aug08 ?        00:00:00 /sbin/init
 3       3 root         2     0  0 Aug08 ?        00:00:00 [kthreadd]
 4       4 root         3     2  0 Aug08 ?        00:00:02 [ksoftirqd/0]
 5       5 root         6     2  0 Aug08 ?        00:00:00 [migration/0]
 6       6 root         7     2  0 Aug08 ?        00:00:00 [watchdog/0]
 7       7 root         8     2  0 Aug08 ?        00:00:00 [migration/1]
 8       8 root         9     2  0 Aug08 ?        00:00:00 [kworker/1:0]
 9       9 root        10     2  0 Aug08 ?        00:00:01 [ksoftirqd/1]
10      10 root        11     2  0 Aug08 ?        00:00:00 [watchdog/1]
11      11 root        12     2  0 Aug08 ?        00:00:00 [migration/2]
12      12 root        14     2  0 Aug08 ?        00:00:01 [ksoftirqd/2]
13      13 root        15     2  0 Aug08 ?        00:00:00 [watchdog/2]
14      14 root        16     2  0 Aug08 ?        00:00:00 [migration/3]
15      15 root        18     2  0 Aug08 ?        00:00:01 [ksoftirqd/3]
16      16 root        19     2  0 Aug08 ?        00:00:00 [watchdog/3]
17      17 root        20     2  0 Aug08 ?        00:00:00 [migration/4]
18      18 root        22     2  0 Aug08 ?        00:00:00 [ksoftirqd/4]
19      19 root        23     2  0 Aug08 ?        00:00:00 [watchdog/4]
20      20 root        24     2  0 Aug08 ?        00:00:00 [migration/5]
21      21 root        26     2  0 Aug08 ?        00:00:00 [ksoftirqd/5]
22      22 root        27     2  0 Aug08 ?        00:00:00 [watchdog/5]
23      23 root        28     2  0 Aug08 ?        00:00:00 [migration/6]

实例2:浏览多个文件
[root@host ~]# less test2.log test.log
 1     1  ifconfig
 2     2  ping www.baidu.com
 3     3  ifconfig
 4     4  //10.128.161.108/share
 5     5  10.128.161.108/share
 6     6  ssh
 7     7  keygen
 8     8  trsa
 9     9  ssh
10    10  .ssh/
11 
12 
13  test2.log (file 1 of 2) (END) - Next: test.log

实例补充1:
输入 :n后,切换到 test.log
输入 :p 后,切换到test2.log

实例补充2:
当正在浏览一个文件时,也可以使用 :e命令 打开另一个文件。
less file1
:e file2

5.附加备注
(1)全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏

(2)单行导航
j - 向前移动一行
k - 向后移动一行

(3)其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令

(4)其它有用的命令
v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件

(5)标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处

(6)查找
more, less 都具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找,按 q(quit)或者ZZ离开

CentOS&RHEL yum 只更新安全补丁操作的方法

Linux 系统直接升级整个系统版本可能会带来诸多不可预料的问题,为了尽可能的保证系统稳定的同时保证系统安全,系统管理员可以只更新安全补丁

步骤一:更新全部安全补丁
1.1 安装 yum-security 插件
# yum install yum-security
Loaded plugins: rhnplugin, security
RHSA-2009:1148-1 security httpd-2.2.3-22.el5_3.2.x86_64
RHSA-2009:1148-1 security httpd-devel-2.2.3-22.el5_3.2.i386
RHSA-2009:1148-1 security httpd-manual-2.2.3-22.el5_3.2.x86_64
RHSA-2009:1148-1 security mod_ssl-1:2.2.3-22.el5_3.2.x86_64
list-security done

1.2 :列出安全相关的系统更新
# yum --security check-update

1.3 :批量安装所有的安全更新
# yum update --security

步骤二:列出补丁的详细信息和建议清单
2.1 安装 bugzillas
# yum list-security bugzillas

2.2:查看某一个补丁的详细信息
# yum info-security RHSA-2009:1148-1
Loaded plugins: rhnplugin, security

===============================================================================
  RHSA-2009:1148
===============================================================================
  Update ID : RHSA-2009:1148-1
    Release :
       Type : security
     Status : final
     Issued : 2009-07-08 23:00:00
       Bugs : 509125 - None
            : 509375 - None
       CVEs : CVE-2009-1890
            : CVE-2009-1891
Description : Important: httpd security update  \The Apache HTTP Server is a
            : popular Web server.  A denial of service flaw was
            : found in the Apache mod_proxy module when it was
            : used as a reverse proxy. A remote attacker could
            : use this flaw to force a proxy process to consume
            : large amounts of CPU time. (CVE-2009-1890)  A
            : denial of service flaw was found in the Apache
            : mod_deflate module. This module continued to
            : compress large files until compression was
            : complete, even if the network connection that
            : requested the content was closed before
            : compression completed. This would cause
            : mod_deflate to consume large amounts of CPU if
            : mod_deflate was enabled for a large file.
            : (CVE-2009-1891)  All httpd users should upgrade to
            : these updated packages, which contain backported
            : patches to correct these issues. After installing
            : the updated packages, the httpd daemon must be
            : restarted for the update to take effect.
      Files : mod_ssl-2.2.3-22.el5_3.2.x86_64.rpm
            : httpd-devel-2.2.3-22.el5_3.2.i386.rpm
            : httpd-2.2.3-22.el5_3.2.x86_64.rpm
            : httpd-devel-2.2.3-22.el5_3.2.x86_64.rpm
            : httpd-manual-2.2.3-22.el5_3.2.x86_64.rpm
            : mod_ssl-2.2.3-22.el5_3.2.i386.rpm
            : httpd-2.2.3-22.el5_3.2.i386.rpm
            : httpd-manual-2.2.3-22.el5_3.2.i386.rpm
info-security done


2.3 列出某一个补丁的信息和另一个补丁的建议清单
# yum --bz 3595 --cve CVE-2009-1890 --advisory RHSA-2009:1148-1 info updates

Linux df 命令及常用选项(显示硬盘使用情况)

df 命令格式:
df [选项] [文件]

df 命令功能:
(显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示。)

df 命令参数:
必要参数:
-a 全部文件系统列表
-h 方便阅读方式显示
-H 等于“-h”,但是计算式,1K=1000,而不是1K=1024
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地文件系统
-m 区块为1048576字节
--no-sync 忽略 sync 命令
-P 输出格式为POSIX
--sync 在取得磁盘信息前,先执行sync命令
-T 文件系统类型

选择参数:
--block-size=<区块大小> 指定区块大小
-t <文件系统类型> 只显示选定文件系统的磁盘信息
-x <文件系统类型> 不显示选定文件系统的磁盘信息
--help 显示帮助信息
--version 显示版本信息

df 命令补充
df -h 和 df -i 的区别

“df -h” 以更易读的方式显示目前磁盘空间和使用情况
“df -i” 以 inode 模式来显示磁盘使用情况

df -h 是去删除比较大无用的文件-----------大文件占用大量的磁盘容量
df -i 则去删除数量过多的小文件-----------过多的文件占用了大量的inode号

Linux top 命令及常用选项(显示系统 CPU 、内存和各个应用占用情况的命令)

top 命令简介
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。

内容一:top 命令解析
top 命令的结果
# top
1  top - 16:07:37 up 241 days, 20:11, 1 user, load average: 0.96, 1.13, 1.25
2  Tasks: 231 total,  1 running, 230 sleeping,  0 stopped,  0 zombie
3  Cpu(s): 12.7%us, 8.4%sy, 0.0%ni, 77.1%id, 0.0%wa, 0.0%hi, 1.8%si, 0.0%st
4  Mem: 12196436k total, 12056552k used,  139884k free,  64564k buffers
5  Swap: 2097144k total,  151016k used, 1946128k free, 3120236k cached
6 
7  PID   USER   PR  NI  VIRT  RES   SHR  S  %CPU  %MEM    TIME+  COMMAND
8  18411  pplive  20   0 11.9g  7.8g  5372  S 220.2  67.1   16761:00  java
9  1875  pplive  20   0 3958m  127m  4564  S  4.6   1.1   12497:35  java
10 4  root   20   0   0   0    0  S  0.3   0.0  184:01.76  ksoftirqd/0
11 13  root   20   0   0   0    0  S  0.3   0.0  135:49.83  ksoftirqd/2
12 25  root   20   0   0   0    0  S  0.3   0.0  136:54.49  ksoftirqd/5

top 命令的结果分为两个部分
统计信息:前五行是系统整体的统计信息;
进程信息:统计信息下方类似表格区域显示的是各个进程的详细信息,默认5秒刷新一次。

统计信息说明:
第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相同。
第1段:系统当前时间,例如:16:07:37
第2段:系统运行时间,未重启的时间,时间越长系统越稳定。
格式:up xx days, HH:MM
例如:241 days, 20:11, 表示连续运行了241天20小时11分钟
第3段:当前登录用户数,例如:1 user,表示当前只有1个用户登录
第4段:系统负载,即任务队列的平均长度,3个数值分别统计最近1,5,15分钟的系统平均负载
系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。

第2行:Tasks 进程相关信息
第1段:进程总数,例如:Tasks: 231 total, 表示总共运行231个进程
第2段:正在运行的进程数,例如:1 running,
第3段:睡眠的进程数,例如:230 sleeping,
第4段:停止的进程数,例如:0 stopped,
第5段:僵尸进程数,例如:0 zombie

第3行:Cpus CPU相关信息,如果是多核CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。
第1段:us 用户空间占用CPU百分比,例如:Cpu(s): 12.7%us,
第2段:sy 内核空间占用CPU百分比,例如:8.4%sy,
第3段:ni 用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,
第4段:id 空闲CPU百分比,例如:77.1%id,
第5段:wa 等待输入输出的CPU时间百分比,例如:0.0%wa,
第6段:hi CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi,
第7段:si CPU服务软中断所耗费的时间总额,例如:1.8%si,
第8段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)

第4行:Mem 内存相关信息(Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers)
第1段:物理内存总量,例如:Mem: 12196436k total,
第2段:使用的物理内存总量,例如:12056552k used,
第3段:空闲内存总量,例如:Mem: 139884k free,
第4段:用作内核缓存的内存量,例如:64564k buffers

第5行:Swap 交换分区相关信息(Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached)
第1段:交换区总量,例如:Swap: 2097144k total,
第2段:使用的交换区总量,例如:151016k used,
第3段:空闲交换区总量,例如:1946128k free,
第4段:缓冲的交换区总量,3120236k cached

进程信息:
在top命令中按f按可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带*号的是默认列。

A: PID = (Process Id) 进程Id;
E: USER = (User Name) 进程所有者的用户名;
H: PR = (Priority) 优先级
I: NI = (Nice value) nice值。负值表示高优先级,正值表示低优先级
O: VIRT = (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
Q: RES = (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
T: SHR = (Shared Mem size (kb)) 共享内存大小,单位kb
W: S = (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
K: %CPU = (CPU usage) 上次更新到现在的CPU时间占用百分比
N: %MEM = (Memory usage (RES)) 进程使用的物理内存百分比
M: TIME+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
b: PPID = (Parent Process Pid) 父进程Id
c: RUSER = (Real user name)
d: UID = (User Id) 进程所有者的用户id
f: GROUP = (Group Name) 进程所有者的组名
g: TTY = (Controlling Tty) 启动进程的终端名。不是从终端启动的进程则显示为 ?
j: P = (Last used cpu (SMP)) 最后使用的CPU,仅在多CPU环境下有意义
p: SWAP = (Swapped size (kb)) 进程使用的虚拟内存中,被换出的大小,单位kb
l: TIME = (CPU Time) 进程使用的CPU时间总计,单位秒
r: CODE = (Code size (kb)) 可执行代码占用的物理内存大小,单位kb
s: DATA = (Data+Stack size (kb)) 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
u: nFLT = (Page Fault count) 页面错误次数
v: nDRT = (Dirty Pages count) 最后一次写入到现在,被修改过的页面数
y: WCHAN = (Sleeping in Function) 若该进程在睡眠,则显示睡眠中的系统函数名
z: Flags = (Task Flags <sched.h>) 任务标志,参考 sched.h
X: COMMAND = (Command name/line) 命令名/命令行

内容二:top命令选项
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

内容三:top命令交互(即是在键入了 top 命令之后再键入以下命令)
常用交互操作
基础操作
1:显示CPU详细信息,每核显示一行
d / s :修改刷新频率,单位为秒
h:可显示帮助界面
n:指定进程列表显示行数,默认为满屏行数
q:退出top

面板隐藏显示
l:隐藏/显示第1行负载信息;
t:隐藏/显示第2~3行CPU信息;
m:隐藏/显示第4~5行内存信息;

进程列表排序
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;

内容四:top 命令使用案例
# top -bn 1 #静态截取 CPU 的占用率

Linux su 和 sudo 命令的常用选项、配置和日志(用户的切换和让普通用户以 root 身份执行指定的命令)

内容目录:
内容一:su 命令
1.1 什么是 su 命令
1.2 su 命令的格式
1.3 su 命令案例 
1.3.1 从普通用户切换为 root 账户身份(如果没有普通账户则需要先创建)
1.3.2 以普通身份创建文件(如果没有普通账户则需要先创建),以 root 身份重启服务

内容二: sudo 命令的语法、选项和简单使用
2.1 sudo 命令格式
2.2 sudo 命令选项
2.3 sudo 命令的简单使用
2.3.1 以 root 用户进行查看
2.3.2 指定某一个用户进行查看
2.3.3 以 root 权限执行上一条命令
2.3.4 以特定用户身份进行编辑文本

内容三:sudo 配置文件的格式和 sudo 命令免输密码的配置
3.1 sudo 程序相关文件
3.2 sudo 的用户sudo权限的格式和配置
3.2.1 sudo 的用户sudo权限的配置文件
3.2.2 sudo 配置用户权限的项配置格式
3.3 设置输入 sudo 命令时不需要输入密码
3.4 注意,只添加某一条 sudo 命令不用输入密码的方法 

内容四:单个用户的 sudo 文件配置和相应的 sudo 命令
4.1 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其执行 systemctl 命令
4.1.1 修改 /etc/sudoers 的方式
4.1.2 为 zhumingyu 授予相关脚本的执行权限,允许通过 systemctl 工具来管理系统服务
4.2 切换为 zhumingyu 用户,并验证单个用户的 sudo 执行权限
4.3 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其通过 sudo 方式添加/删除/修改除 root 以外的用户账号
4.3.1 位 zhumingyu 用户授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*
4.4 切换为 zhumingyu 用户,验证 sudo 权限
4.4.1 可以通过 sudo 方式来添加/删除/修改普通用户
4.4.2 但是不能修改 root 用户的密码

内容五:多个用户的 sudo 文件配置和相应的 sudo 命令(允许 wheel 组成员以特权执行所有命令)
5.1 wheel 组成员以特权执行所有命令的高危性
5.2 wheel 组成员以特权执行所有命令的实现(如果没有普通用户则先创建该账户)

内容六:为sudo机制启用日志记录,以便跟踪sudo执行操作
6.1 修改/etc/sudoers配置,添加日志设置
6.2 以 root(默认有所有权限)执行 sudo 操作
6.3 确认日志记录已生效

具体的内容:
内容一:su 命令
1.1 什么是 su 命令
su(Substitute User) 命令可以快速切换账户身份,普通用户切换账户身份时需要输入密码,root 使用 su 命令切换任何身份都不需要密码

1.2 su 命令的格式
# su - (账户名称)
# su - (账户名称)-c '命令'  

1.3 su 命令案例 
1.3.1 从普通用户切换为 root 账户身份(如果没有普通账户则需要先创建)
[zhumingyu@eternalcenter ~]# whoami
zhumingyu

[zhumingyu@eternalcenter ~]# su - #切换账户,默认切换为 root 账户
密码: #输入root的密码
[root@eternalcenter ~]# whoami #确认结果
root

1.3.2 以普通身份创建文件(如果没有普通账户则需要先创建),以 root 身份重启服务
[root@eternalcenter ~]# su - zhumingyu -c "touch /tmp/test.txt" #管理员切换普通用户
[root@eternalcenter~]# ll  /tmp/test.txt
[zhumingyu@eternalcenter ~]# su - -c "systemctl restart sshd" #以管理员重启服务
密码:
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
active: active (running) since 五 2019-01-19 09:59:40 CST; 1 months 5 days ago

内容二: sudo 命令的语法、选项和简单使用
2.1 sudo 命令格式
sudo(选项)(参数)

2.2 sudo 命令选项
选项  说明
-b  在后台执行指令
-h  显示帮助
-H  将HOME环境变量设为新身份的HOME环境变量
-k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l  列出目前用户可执行与无法执行的指令
-p  改变询问密码的提示符号
-s <shell>	 执行指定的shell
-u <用户>  以指定的用户作为新的身份,若不加上此参数,则预设以root作为新的身份
-v  延长密码有效期限5分钟
-V  显示版本信息

2.3 sudo 命令的简单使用
2.3.1 以 root 用户进行查看
$ sudo ls

2.3.2 指定某一个用户进行查看
# sudo -u zhumingyu ls -l

2.3.3 以 root 权限执行上一条命令
$ sudo !!

2.3.4 以特定用户身份进行编辑文本
$ sudo -u zhumingyu vi ~www/index.html #以 zhumimngyu 用户身份编辑 home 目录下www目录中的 index.html 文件

内容三:sudo 配置文件的格式和 sudo 命令免输密码的配置
3.1 sudo 程序相关文件
/etc/sudoers
/etc/init.d/sudo
/etc/pam.d/sudo
/var/lib/sudo
/usr/share/doc/sudo
/usr/share/lintian/overrides/sudo
/usr/share/bash-completion/completions/sudo
/usr/bin/sudo
/usr/lib/sudo

3.2 sudo 的用户sudo权限的格式和配置
3.2.1 sudo 的用户sudo权限的配置文件
sudo 的用户sudo权限的配置文件是 /etc/sudoers ,可以直接使用 vim 命令编辑,但建议直接使用 visudo 他可以直接判断是否有各式错误 

3.2.2 sudo 配置用户权限的项配置格式
sudo 配置用户权限的项遵循这样的格式: who where whom command ,说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:
root ALL=(ALL:ALL) ALL

其中:
root 表示 root 用户。
ALL 表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
(ALL:ALL) 是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
ALL 表示任何命令。
那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令

3.3 设置输入 sudo 命令时不需要输入密码
执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程
那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 格式如下:
zhumingyu ALL=(ALL) NOPASSWD:ALL

3.4 注意,只添加某一条 sudo 命令不用输入密码的方法 
zhumingyu ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd
表示: 用户 zhumingyu 能在所有可能出现的主机上, 提权到 root 下执行 /bin/chown , 不必输入密码; 但运行 /usr/sbin/useradd 命令时需要密码.这是因为 NOPASSWD :只影响了其后的第一个命令: 命令1

内容四:单个用户的 sudo 文件配置和相应的 sudo 命令
4.1 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其执行 systemctl 命令
4.1.1 修改 /etc/sudoers 的方式
修改 /etc/sudoers 可以直接使用 vim 编辑该文件,或使用 visudo 命令修改该文件,建议直接使用 visudo 他可以直接判断是否有各式错误

4.1.2 为 zhumingyu 授予相关脚本的执行权限,允许通过 systemctl 工具来管理系统服务
(如果没有 zhumingyu 账户可以先创建该账户)
[root@eternalcenter ~]# useradd softadm
[root@eternalcenter ~]# vim /etc/sudoers #修改文件后,需要使用 wq 强制保存
.. ..
zhumingyu  ALL=(ALL) /usr/bin/systemctl #授权 zhumingyu 以 root 身份执行 systemctl 命令( ALL 包括 root )

4.2 切换为 zhumingyu 用户,并验证单个用户的 sudo 执行权限
[root@eternalcenter ~]# su - zhumingyu
[zhumingyu@eternalcenter ~]$ sudo -l
… …
[sudo] password for zhumingyu: #输入 zhumingyu 的口令
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
    (ALL) /usr/bin/systemctl
[zhumingyu@eternalcenter ~]$ systemctl start httpd #不用 sudo 时启动服务失败
Authentication is required
.. ..
[zhumingyu@eternalcenter ~]$ sudo systemctl restart httpd #通过 sudo 启动服务成功

4.3 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其通过 sudo 方式添加/删除/修改除 root 以外的用户账号
4.3.1 位 zhumingyu 用户授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*
[root@eternalcenter ~]# useradd zhumingyu
[root@eternalcenter ~]# vim /etc/sudoers
.. ..
zhumingyu ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,!/usr/sbin/user* * root

4.4 切换为 zhumingyu 用户,验证 sudo 权限
4.4.1 可以通过 sudo 方式来添加/删除/修改普通用户
[zhumingyu@eternalcenter ~]$ sudo -l
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
    (root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
!/usr/sbin/user* * root
[zhumingyu@eternalcenter ~]$ sudo useradd new #可以添加用户
[zhumingyu@eternalcenter ~]$ sudo passwd new #可以修改普通用户的口令
更改用户 newuser01 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

4.4.2 但是不能修改 root 用户的密码
[zhumingyu@eternalcenter ~]$ sudo passwd root
对不起,用户 zhumingyu 无权以 root 的身份在 localhost 上
执行 /usr/bin/passwd root。

内容五:多个用户的 sudo 文件配置和相应的 sudo 命令(允许 wheel 组成员以特权执行所有命令)
5.1 wheel 组成员以特权执行所有命令的高危性
此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。

5.2 wheel 组成员以特权执行所有命令的实现(如果没有普通用户则先创建该账户)
[root@eternalcenter ~]# vim /etc/sudoers
.. ..
%wheel ALL=(ALL)  ALL #以%开头代表组
[root@eternalcenter ~]# usermod -a -G wheel zhumingyu
(如果提示wheel组不存在, 则还需要先创建该组:
[root@eternalcenter ~]# groupadd wheel
)
[zhumingyu@proxy ~]$ sudo -l
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
(root) /bin/*

内容六:为sudo机制启用日志记录,以便跟踪sudo执行操作
6.1 修改/etc/sudoers配置,添加日志设置
[root@eternalcenter ~]# visudo
Defaults  logfile="/var/log/sudo"
.. ..

6.2 以 root(默认有所有权限)执行 sudo 操作
[root@eternalcenter ~]# sudo -l #查看授权的sudo操作
[root@eternalcenter ~]# sudo systemctl status httpd #查看授权的sudo操作

6.3 确认日志记录已生效
[root@eternalcenter ~]# tail /var/log/sudo 
.. ..
May 16 22:14:49 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=list
Feb 22 22:35:43 : softadm : TTY=pts/11 ; PWD=/home/softadm ; USER=root ;
    COMMAND=/bin/systemctl status httpd