01基础 3、Centos 常用命令

命令执行过程

1.书写完命令,判断命令是否使用什么路径执行,如果是绝对路径,就会向下匹配
2.是否存在别名,存在则执行
3.判断执行是内置命令还是外部命令,如果是内置命令。直接执行
4.不是内置命令,就会判断是否存在缓存(hash缓存),如果存在缓存,就调用缓存执行
5.没有缓存,通过PATH路径查找命令的绝对路径,找到就执行
6.找不到就报错,command not found

帮助命令

help

# 简介
查询命令的使用方法

# 例子
[root@mcy ~]$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
......

man

# 简介
查询命令的使用方法
     man 有9个章节
     章节|章节功能
     ---|---
     1|标准用户命令(Executable programs or shell commands)
     2|系统调用(System calls)functions provided by the kernel
     3|库调用(Library call)functions within program libraries
     4|特殊文件(设备文件)的访问入口(/dev)Special files (usually found in /dev)
     5|文件格式(配置文件的语法),指定程序运行特性File formats and conventions
     6|游戏(Games)
     7|杂项(Miscellaneous)including macro packages and conventions
     8|管理命令 System administration commands
     9|跟kernel(内核)有关的文件Kernel routines

# 选项介绍
-a ?    列出?命令所有章节的帮助  
-k x    列出包含x字符的所有命令简单说明  
-f ?    列出?命令的简单说明等于whatis ?

     # 查看时需要翻屏

     
     # 使用man命令后输入
     /type 向下查找`type`关键字
     ?type 向上查找`type`关键字
     n 查找下一个相同的关键字
     N 查找上一个相同的关键字
     向后翻一屏:space(空格键) 向前翻一屏:b
     向后翻一行:Enter(回车键) 向前翻一行:k

# 例子
[root@mcy ~]$ man -a ls
退出按 q

info

# 简介
查询命令的使用方法

# 选项介绍
-d:添加包含info格式帮助文档的目录
-f:指定要读取的info格式的帮助文档
-n:指定首先访问的info帮助文件的节点
-o:输出被选择的节点内容到指定文件

		# 使用命令后快捷功能键
		s 搜索,按一次s输入搜索关键字,回车开始搜索,下次搜索重复操作
		h 帮助
		x 退出帮助

# 例子
	# 将 ls 命令的帮助信息,导入 a.txt 文件中
[root@mcy ~]$ info -f ls -o a.txt 
info: Writing node (*manpages*)ls...
info: Done.
[root@mcy ~]$ ll a.txt 
-rw-r--r-- 1 root root 8253 2021-09-11 10:12 a.txt

针对命令的命令

enable

# 简介
启用、禁用命令,查看命令属于内置命令、外部命令、别名

# 选项介绍
enable [-a] [-dnps] [-f filename] [name ...]
enable -a	显示所有内置命令【包含被禁用的命令】
enable 		显示所有内置命令【不包含被禁用的命令】
enable -p	显示所有内置命令【不包含被禁用的命令】

enable -n	显示所有被禁用的命令
enable -n pwd	禁用 pwd 命令  
enable pwd		启用被禁用的pwd命令  
enable -f a.txt ls		  从 a.txt 文件加载命令名为 ls 的内部命令
enable -d 命令名			删除用 -f 加载的内部命令

# 例子
[root@mcy ~]$ enable -a
enable .
enable :
enable [
enable alias
enable bg
enable bind
......

history

# 简介
执行过的命令 历史记录

# 选项介绍
-p  	#打印字符串或变量内容,且不记录在历史命令中
		#配合-c使用可以清空历史记录且不被记录
-s  	#记录不执行
-d		#删除指定序号的命令记录
-c		#清空历史命令记录
-w		#将新历史记录覆盖写入文件
-a    	#将新历史记录追加写入文件
-n    	#将尚未从历史文件中读取的历史记录行读取到当前历史记录列表中
-r  	#读取历史文件中的所有历史命令到内存中的历史列表,即使内存中的历史记录列表中已经存在这条历史

# 例子
[root@mcy ~]$ history -p ls
ls
[root@mcy ~]$ history -p $PS1
\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h
\[\e[34;40m\]\w\[\e[0m\]]\[\e[32;1m\]$
\[\e[0m\]
	# 查看历史记录,确实没有记录上面2条记录
[root@mcy ~]$ history 
    1  2021-09-11 11:59:26 root man -f history
    2  2021-09-11 11:59:35 root man history 
    3  2021-09-11 12:03:11 root history 
[root@mcy ~]$ history -pc
[root@mcy ~]$ history 
    1  2021-09-11 12:11:02 root history 
[root@mcy ~]$ 

hash

# 简介
查看命令的缓存表

# 选项介绍
-d      删除指定命令的缓存
-r      清空缓存表

# 例子
[root@mcy ~]$ hash
执行次数	执行的命令
hits	command
   1	/usr/bin/nano
   2	/usr/bin/yum
  11	/usr/bin/man
   1	/usr/bin/scp
  14	/usr/bin/info
  33	/usr/bin/ls

alias

# 简介
设置命令别名

# 选项介绍

# 例子
alias                       #查看所有命令的别名
alias rm='echo rm is not'   #设置rm命令的别名
alias wang=cat "/etc/sysconfig/network-scripts/ifcfg-eth0"

unalias

# 简介
取消命令别名

# 选项介绍
unalias wang	#取消 wang 别名命令
unalias -a		#取消所有别名命令

# 例子
[root@mcy ~]$ unalias wang
[root@mcy ~]$ unalias -a

whatis

# 简介
查看命令的简单说明

# 选项介绍

# 例子
[root@mcy ~]$ whatis ls
ls (1)               - list directory contents

whereis

# 简介
查看命令文件及man文件路径

# 选项介绍
-b		查找命令文件路径
-m		查找man文件路径
-s		查找源代码(源代码比较少见,暂时没有例子)

# 例子
[root@mcy ~]$ whatis ls
ls (1)               - list directory contents
[root@mcy ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@mcy ~]$ whereis -b ls
ls: /usr/bin/ls
[root@mcy ~]$ whereis -m ls
ls: /usr/share/man/man1/ls.1.gz

which

# 简介
查看命令文件位置及命令别名

# 选项介绍

# 例子
[root@mcy ~]$ which pwd
/usr/bin/pwd
[root@mcy ~]$ which ls
alias ls='ls --color=auto'
	/usr/bin/ls

type

# 简介
查看命令是 内部命令、外部命令、命令别名 和 命令文件位置

# 选项介绍
-a	显示命令路径,别名、说明这是内部命令
-p	如果给出的命令(如tree)为外部命令,则显示其绝对路径
	如果给出的命令(如pwd、ls)为内部命令,则不显示
-t	显示指定的命令是 外部命令、别名命令、内部命令

# 例子
[root@mcy ~]$ type -a tree
tree is /usr/bin/tree
[root@mcy ~]$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@mcy ~]$ type -a pwd
pwd is a shell builtin
pwd is /usr/bin/pwd

[root@mcy /]# type -p tree  
/usr/bin/tree  
[root@mcy /]# type -p pwd  
[root@mcy /]# type -p ls

[root@mcy /]# type -t tree  外部命令
file  
[root@mcy /]# type -t ls	别名命令
alias  
[root@mcy /]# type -t pwd	内部命令
builtin 

系统运行级别

#系统运行级别
[root@mcy ~]# ll /usr/lib/systemd/system/runlevel*.target
	#	0	poweroff		关机
/usr/lib/systemd/system/runlevel0.target -> poweroff.target
	#	1	rescue			救援模式,单用户模式
/usr/lib/systemd/system/runlevel1.target -> rescue.target
	#	2	multi-user		多用户,无网络
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
	#	3	multi-user		多用户		***
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
	#	4	multi-user		多用户		#centos-6  没有应用
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
	#	5   graphical		图形化模式,桌面模式
/usr/lib/systemd/system/runlevel5.target -> graphical.target
	#	6	reboot 			重启的模式
/usr/lib/systemd/system/runlevel6.target -> reboot.target

#运行级别的管理
	#查看系统当前运行级别
[root@lb01 ~]# runlevel 
N 3
[root@mcy ~]# systemctl get-default
multi-user.target

	#修改运行级别
[root@mcy ~]# systemctl set-default graphical.target
 --------------------- 命令执行结果显示 ---------------------
	#删除默认符号链接default.target
Removed symlink /etc/systemd/system/default.target.
	#创建了新的符号链接graphical.target
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
 --------------------- 命令执行结果显示 ---------------------
#再查看系统的运行级别已经变为graphical.target
[root@mcy ~]# systemctl get-default
graphical.target

注销、重启、关机

# 注销
exit
login
logout
Ctrl+d

# 重启
reboot
init 6
shutdown -r now		立即重启
shutdown -r +10 	10分钟后重启
shutdown -r 10:00	10点钟重启

# 关机
shutdown -h now		立即关机
shutdown -h +10		10分钟后关机
shutdown -h 10:00	10点钟关机

# 取消重启、关机操作
shutdown -c			取消定时关机和重启操作

安装

rpm

# 简介
内网安装,如果没有安装某个rpm包,首先要这个未安装rpm包存在,我们才能查看相关信息

Linux 系统的软件安装包叫 rpm 包
RPM:Redhat Package Manager(Redhat软件包管理器)

 tree-1.5.3-3.el6.x86_64.rpm     #6系列系统
 tree-1.6.0-10.el7.x86_64.rpm    #7系列系统
 trang-20091111-14.el7.noarch.rpm  #noarch---适用于不同的CPU
 tree-1.6.0-10.el7.x86_64.rpm
 
tree    软件包名 
1.6.0   版本信息
10      发布的次数
el7     7系列的系统 
x86     平台
64      操作系统的位数
.rpm    后缀名

	#获取方法
本地的镜像
联网下载
本地仓库

	#安装方法
rpm安装      其他人编译好的      版本过低
编译安装      自定义编译,繁琐    版本自定义
二进制安装    解压即用       	不能修改源代码

本地安装rpm安装包,不需要联网,需要手动寻找依赖包

挂载光驱设备,挂载后可以获取很多 rpm 安装包
[root@mcy ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
					写		保护		安装		只读
[root@mcy ~]# ls /mnt/Packages/
389-ds-base-1.3.8.4-15.el7.x86_64.rpm
389-ds-base-libs-1.3.8.4-15.el7.x86_64.rpm
abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm
......


# 选项介绍
-i		安装
-v		显示安装详细信息
-h		显示安装进度条
-e		卸载
-U		升级
-q		查看指定软件包是否安装,必须输入该命令的安装包名称
-a		查询验证所有包
-qa		查看已安装的所有rpm包(一般配合grep 过滤需要的几个软件包名称)
-qf		查看文件或目录属于哪个rpm软件,必须是已安装的

-qc		查看指定软件包配置文件
-ql		查看指定软件包所安装的目录、文件列表
-qi		查看指定软件的详细信息
-qd		查看指定软件包的帮助文档
	# 要有未安装的 rpm 包存在,我们才能查看相关信息
-qpc	查看未安装指定软件包配置文件
-qpl	查看未安装指定软件包所安装的目录、文件列表
-qpi	查看未安装指定软件的详细信息
-qpd	查看未安装指定软件包的帮助文档

--test	测试是否安装
--force	强制重装

# 例子
-ivh  安装习惯这样使用
[root@mcy ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
 

-Uvh  升级习惯这样使用
[root@mcy ~]# rpm -Uvh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

yum

# 简介
连网下载安装

# 例子
 安装:
		#不保存安装包
	yum install tree			#安装命令tree
	yum install -y tree			#免交互安装命令tree
	yum reinstall tree			#重新安装命令tree【只有安装过的才可以用这个命令】
	yum localinstall /opt/tree-1.6.0-10.el7.x86_64.rpm
		指定安装包路径		安装包路径
	
		#保存安装包【还未安装】:
	yum install --downloadonly --downloaddir=/opt tree
				只下载			下载地址  	=/opt 命令名
		#保存安装包【已经安装】:
	yum reinstall --downloadonly --downloaddir=/opt tree
	
  		#配置文件中,启用缓存(永久生效)下载的软件包会保存下来
	vim /etc/yum.conf
		keepcache=1

		#配置文件的详解
	[main]
	cachedir=/var/cache/yum/$basearch/$releasever	#yum下载的RPM包的缓存目录
	keepcache=1										#缓存是否保存,1保存,0不保存
	debuglevel=2		#调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)
	logfile=/var/log/yum.log						#yum的日志文件所在的位置
	
	#在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包
	exactarch=1		
	#这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包
	obsoletes=1
	
	gpgcheck=1		#是否检查GPG(GNU Private Guard),一种密钥方式签名
	plugins=1	#是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件
	installonly_limit=5		#允许保留多少个内核包
	bugtracker_url=http://bugs.centos.org/......
	ategory=yum
	distroverpkg=centos-release
	
	exclude=selinux*         #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离

 卸载:
	yum remove tree				#卸载命令tree
	yum erase tree				#卸载命令tree
	
 软件包组的安装与卸载:
	yum groups install Python	#安装Python包组
	yum group update Python		#更新包组
	yum group list Python		#显示包组
	yum groupinfo Python		#查看包组信息
	yum groups remove Python	#卸载Python包组

 搜索:
 	yum provides tree			#查询命令属于哪一个软件包
 	yum search tree				#搜索包含tree关键字的软件包
 	yum deplist php				#查看指定包所依赖的capabilities
 	
 查看信息:
 	yum info tree				#查看tree软件包的信息

 仓库:
	yum repolist				#显示所有可用仓库列表
	yum repolist enabled		#显示所有可用仓库列表
	yum repolist all			#显示所有仓库列表
	yum repolist disabled		#显示所有不可用的仓库列表

 仓库管理:
	yum install yum-utils		#安装仓库管理工具yum-ulist
	
	yum-config-manager --disable epel	#关闭指定的epel仓库
	yum-config-manager --enable epel	#开启指定的epel仓库
		#用|grep -n '^enabled ='过滤来查看执行结果
		#enabled = 1 表示开启 enabled = 0 表示关闭

 软件包列表:
	yum list <all>				#列出系统中所有可以安装的软件包
	yum list tre?				#支持正则查询
	yum list available			#显示所有可安装的程序包
	yum list available php		#显示所有php可安装的程序包
	yum list updates			#列出系统中可以更新的软件包列表
	yum check-update			#检查系统中可以更新的软件包
	yum list installed			#列出系统中已安装的软件包列表
	yum list recent				#显示仓库中最近增加的程序包
	
 升级软件包:
	yum update	#更新系统中所有可以更新的软件包【包括内核】最好在刚刚安装好系统的时候操作
	yum update tree				#更新指定的tree软件包
	yum --exclude=kernel* update	#升级内核以外的所有软件包,不升级内核
	
 yum历史:
	yum history					#查看yum所有安装历史记录
	yum history list all		#查看yum历史记录的操作用户
	yum history info 10			#查看yum安装历史中编号10的记录
	yum history redo 10			#重新执行yum安装历史中编号10的操作
	yum history undo 10			#回滚yum安装历史中编号10的操作
	有时候只能看到执行命令的用户看不到命令记录,或者显示不全,需要如下操作
	yum --setopt=history_list_view=commands history list all
	在/var/log/yum.log 中也有yum安装历史记录
	sed【设置】 opt【选项】 view【视图模式】
	
 yum缓存:【判断缓存清除成功与否可以用makecache测试】
	yum clean all				#清空所有缓存
	yum clean packages			#清空软件包缓存
	yum clean plugins			#清空插件缓存
	yum clean					#可以查看都有哪些缓存
	yum makecache				#生成本地缓存
	【如果清除所有缓存后,再用makecache生成缓存会有一段时间】
	如果是没有清除缓存那么使用makecache就会如下:
	[root@mcy ~]# yum makecache
	Loaded plugins: fastestmirror
	Loading mirror speeds from cached hostfile
	 * base: mirrors.aliyun.com
	 * extras: mirrors.aliyun.com
	 * updates: mirrors.aliyun.com
	base                                                   | 3.6 kB     00:00
	epel                                                   | 5.3 kB     00:00
	extras                                                 | 2.9 kB     00:00
	updates                                                | 2.9 kB     00:00
	Metadata Cache Created
	yum开启缓存
	vim /etc/yum.conf 
 	#保存目录/var/cache/yum/x86_64/7/base/packages/
 	#/var/cache/yum后面是变量,有可能是别的名称
 	cachedir=/var/cache/yum/$basearch/$releasever
 	#开启1关闭0是否保存
 	keepcache=0

软件包来源

#软件包来源
etc/yum.erpos.d/ #yum软件包仓库

联网查找(yum仓库)存在多个
bash  基础源
epel  扩展源

其他服务的官方源

#更改软件包来源
#镜像源:
 阿里源镜像站  https://opsx.alibaba.com/mirror
 清华源镜像站  https://mirrors.tuna.tsinghua.edu.cn/
 网易源镜像站  http://mirrors.163.com/
 中科大镜像站  http://mirrors.ustc.edu.cn/

yum-config-manager

#下载安装yum仓库的管理工具,用来启用和禁用yum仓库的
	yum install yum-utils		
	
	yum-config-manager --disable epel	#关闭指定的epel仓库
	enabled=0	表示不启用
	yum-config-manager --enable epel	#开启指定的epel仓库
	enabled=1	表示启用

[root@mcy ~]# ls /etc/yum.repos.d/		#查看本机yum仓库配置文件
CentOS-Base.repo  epel.repo

搭建yum本地仓库

#恢复阿里源仓库【本地仓库建好以后还原方法】
    1、解压/etc/yum.repos.d下所有压缩包恢复原来的yum仓库
    [root@mcy ~]# gzip -d /etc/yum.repos.d/CentOS-Base.repo.gz
    2、压缩后来的本地配置文件local.repo
    [root@mcy ~]# gzip /etc/yum.repos.d/local.repo 

#准备好2台电脑
    两台主机  
    10.0.0.100     服务端
    10.0.0.99		客户端
    1、关闭主机克隆一台虚拟机
    2、进入克隆主机后,修改ip和主机名
       #修改IP
    sed -i 's#100#99#g' /etc/sysconfig/network-scripts/ifcfg-eth0
       #重启网卡
    systemctl  restart  network
       #查看网卡信息
    ip a s eth0
       #修改主机名
    hostnamectl set-hostname mcy99
       #让修改主机名生效
    bash
    
#服务端设置
    1、下载vsftpd服务
    yum install -y vsftpd

    2、启动vsftpd服务(start【启动】、status【查看状态】)
    systemctl start vsftpd
    systemctl status vsftpd

    3、创建yum仓库的目录
    mkdir /var/ftp/centos7

    4、挂载镜像,将镜像内所有安装包复制到yum仓库目录
    mount /dev/cdrom /mnt
    cp -rp /mnt/Packages/* /var/ftp/centos7

    5、让这个yum仓库目录真正的成为yum仓库
    yum install -y createrepo		#下载安装命令createrepo
    createrepo /var/ftp/centos7	#用命令设置目录为yum仓库
    也可以将挂载后的/mnt目录设置为yum仓库目录,省去了复制安装包的时间
    但是还要将ftp软件的共享目录指向/mnt

    6、关闭防火墙和seLinux,再用浏览器测试
    systemctl stop firewalld  		#临时关闭防火墙
     systemctl disable firewalld	#开机不启动防火墙,重启生效
    setenforce  0					#临时关闭selinux【0关闭、1开启】
           #查看selinux的状态			
    [root@mcy ~]# getenforce 
    Enforcing	【开启状态】
    [root@qls ~]# getenforce 
    Permissive	【关闭状态】
           #永久关闭selinux
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
    sed -i '/^SELINUX=/s#enforing#disabled#g' /etc/sysconfig/selinux
           #或者编辑/etc/sysconfig/selinux实现永久关闭
    vim /etc/sysconfig/selinux
    SELINUX=disabled
       	#用浏览器测试
    ftp://10.0.0.100

    7、将原来所有仓库地址禁用
    gzip /etc/yum.repos.d/*		#gzip压缩的方式禁用原有仓库地址

    [root@mcy ~]# yum repolist all	#查看可用仓库
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    repolist: 0		#由于前面利用gzip压缩了所有仓库文件,所以结果是0

    8、编辑一个repo仓库文件
    vim  /etc/yum.repos.d/local.repo
    [mcy]					#这一行千万不要有空格和 -
    name=this is a cangku
    baseurl=file:///mnt		#网络地址用 http://  https://  ftp://
    enabled=1				#是否开启这个仓库,1 开启
    gpgcheck=0				#联网检查是否合法,这是本地的就设置不检查,0 关闭

    9、先清空缓存再生成缓存
    yum clean all 			#清空缓存
    yum makecache 			#生成缓存
       #生成缓存列表(如果报错就重复前面几个步骤,可能是没有挂载镜像)
    [root@mcy ~]# yum makecache
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    mcy                                                    | 3.6 kB     00:00     
    Metadata Cache Created

    10、查看仓库列表确认已经设置好了
    yum repolist
    
#客户机设置
    #第一步,把之前的yum源禁用
    [root@web01 ~]# gzip  /etc/yum.repos.d/*

    #第二步,编写本地仓库文件
    [root@mcy99 ~]# cat /etc/yum.repos.d/local.repo
    [mcy]
    name= this  is a local  base  repo
    baseurl=ftp://10.0.0.100/centos7
    enabled=1
    gpgcheck=0

    #第三步,先清空缓存,再生成缓存
    [root@mcy99 ~]# yum clean all		#清空缓存
    [root@mcy99 ~]# yum makecache
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    mcy                                                    | 2.9 kB     00:00     
    Metadata Cache Created

    #第四步,测试,查看yum源仓库列表
    [root@mcy99 ~]# yum repolist
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    repo id                  repo name                                  status
    mcy                      this  is a local  base  repo               4,021
    repolist: 4,021

预编译安装Nginx

nginx
1、获取源代码包:
	可以去阿里源镜像站复制源代码包的链接地址  https://opsx.alibaba.com/mirror
	wget http://nginx.org/download/nginx-1.16.1.tar.gz

2、解压源代码包:
	tar xf nginx-1.16.1.tar.gz
	
3、进入到目录中,执行预编译,编写编译参数,生成一个Makefile的文件
	cd nginx-1.16.1
	./configure --prefix=/application/nginx-1.16.1 --with-http_ssl_module
	#执行时可能会报错

   #第一次报错
   checking for OS
    + Linux 3.10.0-1062.4.3.el7.x86_64 x86_64
   checking for C compiler ... not found
   
   ./configure: error: C compiler cc is not found
   	#解决方法:yum install -y gcc
   
   	#第二次报错
   [root@qls nginx-1.16.1]# ./configure   --prefix=/application/nginx-1.16.1
   ./configure: error: the HTTP rewrite module requires the PCRE library.
   You can either disable the module by using --without-http_rewrite_module
   option, or install the PCRE library into the system, or build the PCRE library
   statically from the source with nginx by using --with-pcre=<path> option.
   	#解决方法:yum install -y pcre pcre-devel
   
   	#第三次报错
   ./configure: error: SSL modules require the OpenSSL library.
   You can either do not enable the modules, or install the OpenSSL library
   into the system, or build the OpenSSL library statically from the source
   with nginx by using --with-openssl=<path> option.
   	#解决方法:yum install -y openssl-devel
   
   	#这里一共需要4个依赖包gcc、pcre、pcre-devel、openssl-devel
   
   	#每解决一次错误后都执行一次预编译,看看能不能成功生成一个Makefile的文件
   [root@mcy ~/nginx-1.16.1]# ll
   total 756
   -rw-r--r--. 1 root root     46 Nov 19 10:12 Makefile
   
4、根据Makefile文件进行编译
   [root@mcy ~/nginx-1.16.1]# make
   make -f objs/Makefile
   
5、将编译好的文件复制到./configure指定的目录中
	make install

6、检查
   [root@mcy ~/nginx-1.16.1]# ll /application/nginx-1.16.1/
   total 4
   drwxr-xr-x. 2 root root 4096 Nov 19 10:39 conf	#Nginx的配置文件目录
   drwxr-xr-x. 2 root root   40 Nov 19 10:39 html	#Nginx的站点目录的目录
   drwxr-xr-x. 2 root root    6 Nov 19 10:39 logs	#Nginx的日志目录
   drwxr-xr-x. 2 root root   19 Nov 19 10:39 sbin	#Nginx的命令目录

7、设置软链接【利于后期升级】
   ln -s /application/nginx-1.16.1/ /application/nginx
   
8、启动Nginx【用绝对路径启动Nginx】
	/application/nginx/sbin/nginx
	
9、测试
	浏览器访问:http://10.0.0.100
	
#4和5这两个步骤可以一条命令解决  make && make install

用户组

用户组信息

# 用户组分为:
基本组      每个用户必须有且只能有一个
附加组      每个用户可以有0到多个

#用户组相关的文件:
/etc/group		#用户组的信息
/etc/gshadow    #用户组密码信息
 
[root@mcy ~]# tail -1 /etc/group
kfb:x:1012:
第一列:kfb     用户组名称
第二列:x       密码占位符
第三列:1012    用户组GID,
第四列:        这个组是哪些用户的附加组,写的是用户的名称,多个用逗号分隔
 
[root@mcy ~]# tail -1 /etc/gshadow
kfb:!::
第一列:kfb     用户组的名称
第二列:!       密码,如果为空或者为!表示没有密码
第三列:        用户组的管理者
第四列:        这个组是哪些用户的附加组,写的是用户的名称,多个用逗号分隔

# 在Centos7下是
 0           属于root
 1-200       系统用户,系统安装时就存在的,用来运行系统的服务
 201-999     系统用户,是我们自己创建的
 1000+       普通用户
 
# 在Centos6下是
 0		    超级管理员,root
 1-499       系统用户 
 500+        普通用户

groupadd

# 简介
创建用户组

# 选项介绍
-g      #设置gid
-r      #设置系统组

# 例子
[root@mcy ~]$ groupadd m1			# 创建普通用户组
[root@mcy ~]$ groupadd -g m2
groupadd: invalid group ID 'm2'		# 报错,这里没有填写组ID
[root@mcy ~]$ groupadd -g 1001 m2	# 创建普通用户组并设置组ID
[root@mcy ~]$ groupadd -r m3		# 创建系统用户组

[root@mcy ~]# tail -3 /etc/group
m1:x:1000:
m2:x:1001:
m3:x:996:

#注意:默认创建普通用户时,ID从1000开始,创建系统用户ID是1000以内。指定的话可以是任意数字,但是最好不要和已有的用户重复。

groupmod

# 简介
修改用户组信息

# 选项介绍
-g      #修改用户组的gid
-n      #修改用户组名称

# 例子
[root@mcy ~]# groupmod -g 1003 m2		# 修改用户组的gid 为 1003
[root@mcy ~]# grep m2 /etc/group		# 查看修改后的gid
m22:x:1003:

[root@mcy ~]# groupmod -n m22 m2		# 修改用户组的名称为 m22
[root@mcy ~]# grep m2 /etc/group		# 查看修改后的用户组名称
m22:x:1003:

groupdel

# 简介
删除用户组

# 选项介绍

# 例子
[root@mcy ~]# groupdel m22				# 成功删除用户组
[root@mcy ~]# groupdel m3				# 成功删除用户组
[root@mcy ~]# tail -3 /etc/group
m1:x:1000:
m22:x:1003:
m3:x:996:

[root@mcy ~]# id mcy1
uid=666(mcy1) gid=1001(mcy1) groups=1001(mcy1),1013(yyy),1111(zzz),996(m3)
[root@mcy ~]# groupdel 996                  #删除用户组不能删GID,只能删用户组名称
groupdel: group '996' does not exist

[root@mcy ~]# id mcy1
uid=666(mcy1) gid=1001(mcy1) groups=1001(mcy1)

    #用户组是某个用户的基本组,只有先删除该用户,
    #或者让该用户组不作为任何用户的基本组,才能删除该用户组
[root@mcy ~]# groupdel mcy1                 #提示这个组是用户mcy1的基本组,不能删除
groupdel: cannot remove the primary group of user 'mcy1'

用户

用户信息

用户是用来登陆系统、使用系统的账号
Linux用户和windows用户的区别
windows默认不支持多用户同时登陆
Linux用户支持多用户同时登陆

用户的相关数据包含如下几项:
用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户个人文件:主目录默认位于 /home/用户名;
用户邮箱位于 /var/spool/mail/用户名。

#设置用户账号限制的配置文件
/etc/login.defs
   #这个配置文件里面可以设置用户和用户组的一些配置限制
   [root@qls ~]# grep -Ev '^#|^$' /etc/login.defs
   MAIL_DIR	/var/spool/mail			用户的邮箱
   PASS_MAX_DAYS	99999				密码的最大有效期
   PASS_MIN_DAYS	0					两次密码修改的最少时间
   PASS_MIN_LEN	5					密码的最小长度为5位,对root无效
   PASS_WARN_AGE	7					密码的过期警告时间
   UID_MIN                  1000		普通用户的最小UID
   UID_MAX                 60000		普通用户的最大UID
   SYS_UID_MIN               201		系统用户的最小UID
   SYS_UID_MAX               999		系统用户的最大UID
   GID_MIN                  1000		普通组ID的最小值
   GID_MAX                 60000		普通组ID的最大值
   SYS_GID_MIN               201		系统组ID的最小值
   SYS_GID_MAX               999		系统组ID的最大值
   CREATE_HOME	yes					    创建用户时候允许创建家目录
   UMASK           077					用户家目录的权限根据此项
   USERGROUPS_ENAB yes				    用户创建或者删除用户的时候,
   									如果不指定基本组,默认会帮你创建相同名称的组,
   									删除时会把这个组删除
   ENCRYPT_METHOD SHA512				密码的加密规则
   
   #设置用户组限制的配置文件
   /etc/default/useradd
   这个配置文件里面可以设置用户家目录、用户停权、账号过期时间是否使用、命令解释器、家目录的模板目录、邮箱配置
   [root@qls ~]# cat /etc/default/useradd 
   GROUP=100					跟USERGROUPS_ENAB选项有关,
   							当这个选项为NO并且创建用户的时候没有指定基本组,
   							系统会默认将新创建的用户的基本组设置为users=100这个组				
   HOME=/home					用户的家目录的位置
   INACTIVE=-1					账号过期停权,-1不启用
   EXPIRE=						账号过期时间  不设置表示不启用
   SHELL=/bin/bash				默认创建用户的命令解释器
   SKEL=/etc/skel				用户家目录的模板目录
   CREATE_MAIL_SPOOL=yes		是否创建用户的邮箱,创建
root x 0 0 root /root /bin/bash
用户名 密码占位符 用户Uid 用户组Gid 注释 家目录 用户bash shell
/bin/bash 表示用户可以登录系统
/sbin/nologin 表示用户禁止登陆系统
	#查看所有用户信息
[root@mcy ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

	#查看指定用户信息
[root@mcy ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin * 17834 0 99999 7
用户名 加密后的密码,*或者!!表示没有密码 从1970年1月1日起到最近一次修改密码所经过的天数 密码再过几天可以被变更(0表示随时可以改变) 密码再过几天必须被变更(99999表示永不过期) 密码过期前几天提醒用户( 默认为一周) 密码过期几天后帐号被禁用 从1970年1月1日算起,多少天后账号失效 没有使用,保留
	#查看用户密码信息
[root@mcy ~]# cat /etc/shadow
bin:*:17834:0:99999:7:::
用ps aux查看进程,可以看到很多root用户启动的进程
root作为超级管理员可以对系统进行任何操作
在passwd文件中我们可以看到ID和UID
ID是一组编号,每个用户都有唯一ID号
UID是用户组的ID号,可以同时对应多个用户组

关于ID号,系统默认的规则

在Centos7下是
0           属于root
1-200       系统用户,系统安装时就存在的,用来运行系统的服务
201-999     系统用户,是我们自己创建的
1000+       普通用户

在Centos6下是
0		    超级管理员,root
1-499       系统用户 
500+        普通用户

其实我们也可以任意设置用户的ID号

id

# 简介
显示用户的UID、GID、用户组、用户附加组

# 选项介绍

# 例子
[root@mcy ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@mcy ~]# id mcy1
uid=666(mcy1) gid=1001(mcy1) groups=1001(mcy1),12(mail),74(sshd),89(postfix)

finger

# 简介
显示用户的用户名、注释、家目录、shell、登陆时间、mail、计划

# 选项介绍
-s	多列显示用户信息
-l	和默认一样
-p	不显示任务
-m	和默认一样

# 例子
[root@mcy ~]$ finger root
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Mon Sep 27 01:06 (CST) on pts/0 from 10.0.0.1
   7 seconds idle
Mail last read Tue Aug 31 18:41 2021 (CST)
No Plan.
[root@mcy ~]$ finger -s root
Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root       pts/0          Sep 27 01:06                           (10.0.0.1)
[root@mcy ~]$ finger -l root
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Mon Sep 27 01:06 (CST) on pts/0 from 10.0.0.1
   4 seconds idle
Mail last read Tue Aug 31 18:41 2021 (CST)
No Plan.
[root@mcy ~]$ finger -p root
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Mon Sep 27 01:06 (CST) on pts/0 from 10.0.0.1
   6 seconds idle
Mail last read Tue Aug 31 18:41 2021 (CST)
[root@mcy ~]$ finger -m root
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Mon Sep 27 01:06 (CST) on pts/0 from 10.0.0.1
   2 seconds idle
Mail last read Tue Aug 31 18:41 2021 (CST)
No Plan.

w

# 简介
显示所有用户的登陆信息,默认显示系统开机时间和负荷状态

# 选项介绍
-h	只显示用户登陆信息,其他选项差不多,不必记

# 例子
[root@mcy ~]$ w
 08:38:09 up 4 days,  4:41,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         01:06    1.00s  0.29s  0.00s w
[root@mcy ~]$ w -h
root     pts/0    10.0.0.1         01:06    7.00s  0.29s  0.01s w -h

who

# 简介
显示所有已登陆用户信息

# 选项介绍
-r	显示当前用户的运行级别

# 例子
[root@mcy ~]$ who
root     pts/0        2021-09-27 01:06 (10.0.0.1)
root     pts/1        2021-09-27 09:55 (10.0.0.1)
[root@mcy ~]$ who -r
         run-level 3  2021-09-20 07:58

给其他窗口用户发消息
[root@mcy ~]$ echo “hello” > /dev/pts/1
在另一个窗口显示出
[root@mcy ~]$ “hello”

whoami

# 简介
显示当前登陆的用户名

# 选项介绍

# 例子
[root@mcy ~]$ whoami 
root

last

# 简介
统计连接本机的每个终端 用户、终端、IP、日期时间

# 选项介绍

# 例子
[root@lb01 ~]# last
root     pts/2        10.0.0.1         Wed Jun 24 10:20   still logged in   
root     pts/1        10.0.0.1         Wed Jun 24 10:03   still logged in

批量创建、修改、删除用户

批量操作涉及到很多其他命令,初学者可以跳过,回头再看这里

#批量创建用户
    #这2种办法可以在history看到用户名,不利于保密
    echo 'useradd 'oldboy{
   1..10}|xargs -n2|bash
    echo 'useradd '{
   zhangsan,lisi,wanger}|xargs -n2|bash

    #编辑一个用户文本
    vim useradd.txt
    useradd zhangsan
    useradd lisi
    useradd wanger

    #使用命令执行建立用户
    cat useradd.txt|bash

 # 批量建立用户密码
    #用vim建立一个密码文本
    vim userpasswd.txt
    zhangsan:zs
    lisi:ls
    wanger:haha

    #用命令执行批量设置密码
    cat userpasswd.txt|chpasswd

 # 批量删除用户
    echo 'userdel -r 'oldboy{
   1..20}|xargs -n3|bash
    #编辑一个用户文本
    vim userdel.txt
    andy
    barry
    carl
    duke
    eric
    #编写一个删除用户的shell脚本
    vim deluser.sh
    #!/bin/bash
    for user in `cat userdel.txt`
    do
    userdel -r $user
    echo "The user deletc success !"
    done
    #执行脚本
    bash deluser.sh

useradd

# 简介
创建用户,默认创建普通用户

# 选项介绍
-u 		指定uid
-g 		指定基本组gid,gid()必须存在,指定gid号或者组名称
-G		附加组,多个用逗号分隔	
-c 		注释信息 
-M		不创建家目录
-r 		创建系统用户,不创建家目录
-s 		指定bash,命令解释器
-d 		指定家目录路径和名称,必须是不存在的目录否则会报错

# 例子
		# 当 mcy1 组不存在的时候可以直接创建用户名为 mcy1 的用户
[root@mcy ~]# useradd mcy1
[root@mcy ~]# tail -1 /etc/passwd
mcy1:x:1001:1004::/home/mcy1:/bin/bash
		# 当 m1 组存在的时候不能直接创建用户名为 m1 的用户
[root@mcy ~]# useradd m1
useradd: group m1 exists - if you want to add this user to that group, use -g.
		# 当 m1 组存在的时候,可以指定 m1 的组ID来创建 m1 用户
[root@mcy ~]# useradd -g 1001 m1
[root@mcy ~]# grep m1 /etc/passwd
m1:x:1002:1001::/home/m1:/bin/bash
		# 创建用户 m2 时,为该用户添加多个附加组
[root@mcy ~]# useradd -g 1002 -G 1003,1004 m2
[root@mcy ~]# id m2
uid=1003(m2) gid=1002(m2) groups=1002(m2),1003(m3),1004(mcy1)
		# 创建用户 m3 时,为该用户添加注释
[root@mcy ~]# useradd -g 1003 -c 我是好人 m3
[root@mcy ~]# grep m3 /etc/passwd
m3:x:1004:1003:我是好人:/home/m3:/bin/bash
		# 创建用户 m4 时不创建家目录
[root@mcy ~]# useradd -g 1004 -M m4
[root@mcy ~]# grep m4 /etc/passwd
m4:x:1005:1004::/home/m4:/bin/bash
[root@mcy ~]# ls /home
m1  m2  m3  mcy  mcy1
		# 创建系统用户 m5 时指定 bash 为 /sbin/nologin
[root@mcy ~]# useradd -r -s /sbin/nologin m5
[root@mcy ~]# grep m5 /etc/passwd
m5:x:998:996::/home/m5:/sbin/nologin
		# 创建系统用户 m6 时指定家目录
[root@mcy ~]# useradd -d /home/mm m6
[root@mcy ~]# grep m6 /etc/passwd
m6:x:1006:1006::/home/mm:/bin/bash
		# 创建系统用户 m7 时指定家目录已经存在就会报错
[root@mcy ~]# useradd -d /home/mm m7
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
   
创建一个用户后,可以用passwd + 用户名 来设置刚刚创建用户的密码,然后这个用户才能正常使用
#先用 useradd 创建用户名
[root@mcy ~]# useradd mcy
#再用`passwd`创建密码,创建密码要输入2次
[root@mcy ~]# passwd mcy

passwd

# 简介
设置用户密码,交互式与免交互式2种设置密码方式
注意:
	root用户可以给任何用户设置密码,且没有密码长度和复杂度的限制
	普通用户只能对自己设置密码,且密码长度不能小于等于8位,且不能是简单的,系统的。

# 选项介绍
-l:锁定用户密码
-S:查看用户的状态(是否被锁定)
-u:解锁用户账号
-d:清空指定用户的密码

# 例子

1、交互式设置密码

	# 不指定用户的时候是为当前登陆的用户设置密码
[root@mcy ~]# passwd
Changing password for user root.
New password: 1				# 这里输入密码
BAD PASSWORD: The password is a palindrome
Retype new password: 1		# 再次输入密码
passwd: all authentication tokens updated successfully.
	# 设置 mcy 用户密码
[root@mcy ~]# passwd mcy
Changing password for user mcy.
New password: 1				# 这里输入密码
BAD PASSWORD: The password is a palindrome
Retype new password: 1		# 再次输入密码
passwd: all authentication tokens updated successfully.
	# 查看锁定用户 mcy 的密码前后状态的区别
[root@mcy ~]# passwd -S mcy		#查看用户 mcy 的状态
mcy PS 2021-09-28 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@mcy ~]# passwd -l mcy		#锁定用户 mcy 的密码
Locking password for user mcy.
passwd: Success
[root@mcy ~]# passwd -S mcy		#查看用户 mcy 的状态
mcy LK 2021-09-28 0 99999 7 -1 (Password locked.)
[root@mcy ~]# passwd -u mcy		#解锁用户 mcy 的密码
Unlocking password for user mcy.
passwd: Success
[root@mcy ~]# passwd -S mcy		#查看用户 mcy 的状态
mcy PS 2021-09-28 0 99999 7 -1 (Password set, SHA512 crypt.)
	# 清空指定用户的密码
[root@mcy ~]# passwd -d mcy
Removing password for user mcy.
passwd: Success
[root@mcy ~]# passwd -S mcy
mcy NP 2021-09-28 0 99999 7 -1 (Empty password.)

	# 测试密码设置是否成功
		# 先设置2个普通用户密码
[root@mcy ~]# passwd mcy
[root@mcy ~]# passwd mcy1
		# 切换用户测试密码设置成功与否
[root@mcy ~]# su mcy
[mcy@mcy /root]$ su mcy1
Password: 
[mcy1@mcy /root]$ su mcy
Password: 

2、免交互设置密码

免交互设置用户密码
 
 #单用户简单设置密码,容易被人从历史命令记录里面看到密码

                   密码123  命令设置  标准输入  用户(root账号可以设置任何一个用户)
  [root@mcy ~]# echo '123' | passwd   --stdin   root
  Changing password for user root.
  passwd: all authentication tokens updated successfully.
                           密码112  命令
  [root@mcy ~]# echo kaifabu00:112|chpasswd
 
 
 #单用户设置复杂的、随机的密码

      #产生随机一组数字
  [root@mcy ~]# echo $RANDOM 
  22296
      #给随机数字用md5sum加密
  [root@mcy ~]# echo $RANDOM | md5sum 
  a565cc49a199105e4ccf5a7af9478792  -
      #用cut截取加密后的字符
  [root@mcy ~]# echo $RANDOM | md5sum | cut -c 1-10 
  27df8b78f3
      #cut可以截取任意位置的字符
  [root@mcy ~]# echo $RANDOM | md5sum | cut -c 1,3,5-7,8,10
  31969db
      #tee可以将截取后的字符写入文件,同时打印到屏幕上
  [root@mcy ~]# echo $RANDOM | md5sum | cut -c 1-10 | tee /root/pass.txt
  3441d0d032
      #用cat查看文件内容,确实一致
  [root@mcy ~]#  cat pass.txt 
  3441d0d032
      #用免交互式设置用户密码
  [root@mcy ~]# echo $RANDOM | md5sum | cut -c 1-10 | tee /root/pass.txt | passwd --stdin  mcy1 
  Changing password for user mcy1.
  passwd: all authentication tokens updated successfully.
      #cat查看设置的密码是什么
  [root@mcy ~]# cat pass.txt
  69fce03e45
      #免交互设置复杂密码
  [root@mcy ~]# echo 'kaifabu00:'`mkpasswd`|tee pass.txt | chpasswd
      #查看用户登陆的复杂密码
  [root@mcy ~]# cat pass.txt 
  kaifabu00:cEUa6a]7s
 
 
 #批量设置固定密码---预设密码文件---适合大批量设置密码用户
 
      #先编辑好需要设置密码的用户和密码
  [root@mcy ~]# vim pass.txt
  zhangsan:9fce0
  lisi:33667
  wanger:u3e45
  "pass.txt" 3L, 39C written
      #再用chpasswd命令执行密码设置
  [root@mcy ~]# cat pass.txt|chpasswd
      #用刚刚设置的密码登陆试试
  [D:\~]$ ssh zhangsan@10.0.0.100
      #登陆成功显示登陆时间
  Last login: Fri Nov  8 21:55:14 2019
  [zhangsan@mcy ~]$ 
  
 #批量设置随机密码---不预设密码文件
 
      #批量设置用户
      #用seq命令设置纵向递增数字
  [root@mcy ~]# seq 3
  1
  2
  3
      #我还是喜欢用echo配合xargs -n数字 来实现纵向显示
                      指定用户组kfb   多位员工用户名  纵向排列    写入文件user.txt
  [root@mcy ~]# echo 'useradd -g kfb 'kaifabu{01..03}|xargs -n4|tee /root/user.txt
  useradd -g kfb kaifabu01
  useradd -g kfb kaifabu02
  useradd -g kfb kaifabu03
      #批量设置随机密码
                      多位员工用户名   随机密码   纵向显示    写入文件pass.txt
  [root@mcy ~]# echo 'kaifabu'{01..03}:`mkpasswd`|xargs -n1|tee /root/pass.txt
  kaifabu01:0Prf=7Bwr
  kaifabu02:7ZYre6rp+
  kaifabu03:/otA2rW3n
      #执行建立用户和设置密码
                          建立用户            为用户设置密码
  [root@mcy ~]# cat user.txt |bash && cat pass.txt |chpasswd
      #查看用户建立成功
  [root@mcy ~]# tail -3 /etc/passwd
  kaifabu01:x:1002:1012::/home/kaifabu01:/bin/bash
  kaifabu02:x:1003:1012::/home/kaifabu02:/bin/bash
  kaifabu03:x:1004:1012::/home/kaifabu03:/bin/bash
      #查看用户密码
  [root@mcy ~]# cat pass.txt 
  kaifabu01:0Prf=7Bwr
  kaifabu02:7ZYre6rp+
  kaifabu03:/otA2rW3n
      #登陆一个用户试试密码,OK
  [D:\~]$ ssh kaifabu01@10.0.0.100
  ......
  Last failed login: Sat Nov  9 15:52:43 CST 2019 from 10.0.0.1 on ssh:notty
  There was 1 failed login attempt since the last successful login.
  [kaifabu01@mcy ~]$
 
 3. 保护用户和密码文件
 
 #保护用户密码文件(保护用户名单文件方法相同)
      #用md5sum给pass.txt密码保存文件设置一个指纹库
  [root@mcy ~]# md5sum pass.txt > finger.txt
      #查看指纹库
  [root@mcy ~]# cat finger.txt 
  dca0acac69812908b973f4610e395cf2  pass.txt
      #当没有修改过pass.txt文件内容时,检查指纹库没有问题
  [root@mcy ~]# md5sum -c finger.txt 
  pass.txt: OK
      #修改一下密码文件内容
  [root@mcy ~]# echo 123 >> pass.txt 
      #再检查指纹库,报错了
  [root@mcy ~]# md5sum -c finger.txt 
  pass.txt: FAILED
  md5sum: WARNING: 1 computed checksum did NOT match
      #用vim将密码文件内容修改还原
  [root@mcy ~]# vim pass.txt 
  69fce03e45
  "pass.txt" 1L, 11C written     
      #再验证指纹库,OK
  [root@mcy ~]# md5sum -c finger.txt 
  pass.txt: OK
      #得到结论,只要用户数据或密码文件内容不变,就能通过md5sum验证

usermod

# 简介
修改已有用户信息

# 选项介绍
-u      修改uid
-g      修改用户基本组
-a      添加附加组,跟-G 配合使用
-G      添加附加组,默认是覆盖,-aG 追加 -G 覆盖
-d      修改用户的家目录,修改目标文件夹要存在,且权限要设置好,还要复制好配置文件,最好不要单独使用
-m      迁移家目录,-md 配合使用 迁移目标文件夹不能存在
-c      修改注释信息
-s      修改命令解释器 bash
-l      修改用户的名称
-p		设置密码
-L      锁定用户
-U      解锁用户
-e      指定用户帐号禁用的日期,格式YY-MM-DD
-f      用户密码过期N天后采用就禁用该帐号,0密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1

# 例子
		# 修改用户 uid
[root@mcy ~]# usermod -u 1008 m1
[root@mcy ~]# id m1
uid=1008(m1) gid=1001(m1) groups=1001(m1)
		# 修改用户 gid
[root@mcy ~]# usermod -g 1002 m1
[root@mcy ~]# id m1
uid=1008(m1) gid=1002(m2) groups=1002(m2)
		# 添加用户 附加组
[root@mcy ~]# usermod -G 1003 m1
[root@mcy ~]# id m1
uid=1008(m1) gid=1002(m2) groups=1002(m2),1003(m3)
		# 覆盖用户 附加组
[root@mcy ~]# usermod -G 1004 m1
[root@mcy ~]# id m1
uid=1008(m1) gid=1002(m2) groups=1002(m2),1004(mcy1)
		# 追加用户 附加组
[root@mcy ~]# usermod -aG 1003 m1
[root@mcy ~]# id m1
uid=1008(m1) gid=1002(m2) groups=1002(m2),1003(m3),1004(mcy1)
		# 修改用户家目录,
[root@mcy ~]# usermod -md /home/m33 m3
[root@mcy ~]# finger m3
Login: m3             			Name: 我是好人
Directory: /home/m33                	Shell: /bin/bash
。。。。。。
		# 修改用户的 注释、bash、用户名
[root@mcy ~]# usermod -c good -s /sbin/nologin -l m33 m3
[root@mcy ~]# finger m33
Login: m33            			Name: good
Directory: /home/m3                 	Shell: /sbin/nologin

   		# 修改用户名(用户不能在使用中)
[root@mcy ~]# usermod -l mcywww mcy
usermod: user mcy is currently used by process 17963
#usermod 说 用户 mcy 由进程17963在使用
[root@mcy ~]# exit
[mcy@mcy home]$ exit
   		# 退出账户登录
[root@mcy home]# usermod -l mcywww mcy
[root@mcy home]# id mcywww
uid=1002(mcywww) gid=1002(mcy) groups=1002(mcy)

		# 设置用户密码为 3
[root@mcy ~]# usermod -p 3 m33
		# 锁定、解锁用户
[root@mcy ~]# usermod -L m33
[root@mcy ~]# usermod -U m33
		# 设置用户的过期日期,普通用户 m2 是无法再切换到 m1 用户,root 用户可以不受限制的切换
[root@mcy ~]# usermod -e 21-09-27 m1
[root@mcy ~]# su m2
[m2@mcy /root]$ su m1
Password: 

^C
[m2@mcy /root]$ su root
Password: 
[root@mcy ~]# su m1
[m1@mcy /root]$ su root
Password: 
[root@mcy ~]# 
		# 设置密码过期1天后就不能使用用户 m1
[root@mcy ~]# usermod -f 1 m1
		# 查看密码过期1天的设置成功了,对比 m2 用户
[root@mcy ~]# grep m1 /etc/shadow
m1:!!:18898:0:99999:7:1:18897:
[root@mcy ~]# grep m2 /etc/shadow
m2:!!:18898:0:99999:7:::

    # 指定用户账号禁用日期
[root@mcy ~]# cat /etc/shadow
bin:*:17834:0:99999:7:::
[root@mcy ~]# usermod -e 2019-10-21 bin
[root@mcy ~]# grep bin /etc/shadow
bin:*:17834:0:99999:7::17834:
bin * 17834 0 99999 7
用户名 加密后的密码,*或者!!表示没有密码 从1970年1月1日起到最近一次修改密码所经过的天数 密码再过几天可以被变更(0表示随时可以改变) 密码再过几天必须被变更(99999表示永不过期) 密码过期前几天提醒用户( 默认为一周) 密码过期几天后帐号被禁用 从1970年1月1日算起,多少天后账号失效 没有使用,保留

userdel

# 简介
删除用户

# 选项介绍
-r	删除用户的同时删除家目录和邮件目录

# 例子
 如果不加-r参数就不会删除`/var/spool/mail/xxx`文件和`/home/xxx`文件夹
 且不能再建立同名用户  
 如果删除后不能建立同名用户
 需要用`find / -name *xxx*`查找xxx用户的`/var/spool/mail/xxx``/home/xxx`2个文件夹位置,再手动进行删除文件和文件夹  
 
 也可以手动删除用户的所有信息,不过比较麻烦,如下:
    #建立新 lamp 用户
 [root@localhost ~]# useradd lamp
 [root@localhost ~]# passwd lamp
    #为 lamp 用户设置密码,由此 lamp 用户才算是创建成功
    #下面开始手动删除 lamp
 [root@localhost ~]# vi /etc/passwd
 lamp:x:501:501::/home/lamp:/bin/bash   <--删除此行
    #修改用户信息文件,删除lamp用户行
 [root@localhost ~]#vi /etc/shadow
 lamp:$6$KoOYtcOJ $56Xk9vp3D2vMRBxibNOn.21cVJ9onbW8IHx4WrOx6qBqfGa9U3mjMsGjqYnj L/4t3zt3YxElce2X8rbb12x4a0:15716:0:99999:7:::   <--删除此行
    #修改影子文件,删除lamp用户密码行,注意,这个文件的权限是000,所以要强制保存
 [root@localhost ~]#vi /etc/group
 lamp:x:501:  <--删除此行
    #修改组信息文件,删除lamp群组信息
 [root@localhost ~]#vi /etc/gshadow
 lamp:!::  <--删除此行
    #修改组影子文件,删除lamp群组密码信息。同样注意需要强制保存
 [root@localhost ~]# rm -rf /var/spod/mail/lamp  #删除用户邮箱
 [root@localhost ~]# rm -rf/home/lamp/  #删除用户的家目录
    #至此,用户彻底删除,再新建用户lamp。如果可以正常建立,则说明我们手工删除干净了
 [root@localhost ~]# useradd lamp
 [root@localhost ~]# passwd lamp
    #重新建立同名用户,没有报错,说明前面的手工删除是可以完全删除用户的

恢复误删除用户家目录

    #误删除root家目录
 mkdir /root
 cp -a /etc/skel/.[!.]* /root
 reboot
 
    #误删除其他家目录
 [root@mcy ~]# rm -rf /home/mcy1
 [root@mcy ~]# ll /home
 total 0
 drwx------. 2 mcy  mcy  83 Nov  7 16:22 mcy
 [root@mcy ~]# mkdir /home/mcy1                 #建立一个mcy1目录
 [root@mcy ~]# ll /home 					    #查看用户mcy1家目录权限
 total 0
 drwx------. 2 mcy  mcy  83 Nov  7 16:22 mcy
 drwxr-xr-x. 2 root root  6 Nov  7 22:03 mcy1
 [root@mcy ~]# chmod 700 /home/mcy1             #修改用户家目录权限
 [root@mcy ~]# ll /home						    #查看用户组权限修改结果
 total 0
 drwx------. 2 mcy  mcy  83 Nov  7 16:22 mcy
 drwx------. 2 root root  6 Nov  7 22:03 mcy1	#这里故意漏改用户和用户组所属
    #更换用户mcy1登录后发现不能进入家目录
 [mcy1@mcy /home]$ cd /mcy1
 -bash: cd: /mcy1: No such file or directory
 
 [root@mcy ~]# chown mcy1.mcy1 /home/mcy1       #用root账户修改用户和用户组所属为mcy1
 
 [mcy1@mcy ~]$ cp -a /etc/skel/.[!.]* ./		#复制备份配置文件到mcy1目录
 [mcy1@mcy ~]$ cp -a /etc/skel/.bash* ./		#第二种复制配置文件的办法
 [mcy1@mcy ~]$ ll -a							#查看文件复制结果
 total 12
 drwx------. 3 mcy1 mcy1  74 Nov  7 22:23 .
 drwxr-xr-x. 4 root root  29 Nov  7 22:03 ..
 -rw-r--r--. 1 mcy1 mcy1  18 Oct 31  2018 .bash_logout
 -rw-r--r--. 1 mcy1 mcy1 193 Oct 31  2018 .bash_profile
 -rw-r--r--. 1 mcy1 mcy1 231 Oct 31  2018 .bashrc

用户权限配置文件

1、visudo
visudo  ==  vi /etc/sudoers			#编辑提权配置文件
[root@mcy ~]# visudo -c				#检查配置文件语法是否正确
/etc/sudoers: parsed OK

2、/etc/pam.d/su
在Linux中为了更进一步加强系统的安全性,很有必要建立了一个管理员的组,只允许这个组的用户来执行“su -”命令登录为root用户,而让其他组的用户即使执行“su -”、输入了正确的root密码,也无法登录为root用户。在UNIX和Linux下,这个组的名称通常为“wheel”。而这个是在配置文件/etc/pam.d/su里面配置的。
[root@mcy ~]# grep required /etc/pam.d/su
#auth		required	pam_wheel.so use_uid

用户提权3种方式

系统的shell分为几种类型

交互式         一问一答

非交互式        一条命令直接执行,没有返回显示,或者使用脚本的方式

登陆式         根据用户名和密码进行登录
        登录式和非登录式的区别就是执行的shell不同
非登陆式        不是根据密码和用户进行登录的

实际生产中是禁止root用户进行远程登录的,这时候就需要给普通用户进行提权

提权的方式有3种:

1、改变用户所属组		优点:配置简单     缺点:权限太大

2、su      切换用户	  优点:配置简单     缺点:权限太大,需要知道root密码

3、sudo              优点:权限清晰,不需要root的密码 缺点:配置复杂

1、改变用户所属组

1#先来说说改变用户所属组的提权方式
 
	#首先用root账户给普通用户mcy更换一个系统用户组
[root@mcy ~]# usermod -g 10 mcy
[root@mcy ~]# id mcy
uid=1000(mcy) gid=10(wheel) groups=10(wheel)
    #然后用mcy用户登录系统后执行sudo -l 列出用户能以sudo方式执行的所有命令
[mcy@mcy ~]$ sudo -l

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
 
     #1) Respect the privacy of others.
     #2) Think before you type.
     #3) With great power comes great responsibility.
 
 [sudo] password for mcy:                            #输入mcy用户的密码
 Matching Defaults entries for mcy on mcy:           #以下是列出用户能以sudo方式执行的所有命令
     !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
     env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
     USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
     LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
     env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
     secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
 
 User mcy may run the following commands on mcy:
     (ALL) ALL
 
 
     #查看/opt目录下的文件
 [mcy@mcy ~]$ ll /opt
 total 0
 drwx------. 2 mcy1 mcy1 27 Nov  8 21:17 mcy222
 drwx------. 2 mcy1 mcy1 27 Nov  8 21:28 mcy666
     #用mcy用户的权限去删除mcy666目录,删不了
 [mcy@mcy ~]$ rm -rf /opt/mcy666
 rm: cannot remove ‘/opt/mcy666’: Permission denied
     #现在用sudo提权后再删除,就OK了
 [mcy@mcy ~]$ sudo rm -rf /opt/mcy666
 [sudo] password for mcy: 
 [mcy@mcy ~]$ ll /opt
 total 0
 drwx------. 2 mcy1 mcy1 27 Nov  8 21:17 mcy222
     #以上这种更改用户组的提权方式很粗放,赋予普通用户的权限很多。

2、su

# 简介
切换当前登陆的用户

# 选项介绍
su   mcy                #非登录式
su - mcy                #登录式
用户在用不同登陆方式登录的时候环境变量配置文件的执行顺序是不同的,可以尝试在不同的环境变量中写入不同的内容来验证

# 例子
    #非登陆式的shell
[root@qls ~]# bash
~/.bashrc
/etc/bashrc
/etc/profile.d/pz.sh    #用户自己建立的配置文件

    #登录式的shell
/etc/profile
/etc/profile.d/pz.sh    #用户自己建立的配置文件
~/.bash_profile
~/.bashrc
/etc/bashrc

[root@mcy ~]# su mcy    #非登录式切换用户
[mcy@mcy /root]$ 

[root@mcy ~]# su - mcy  #登录式切换用户
Last login: Sat Nov  9 21:55:43 CST 2019 on pts/1
[mcy@mcy ~]$ 

    #普通用户切换回root用户或者其他用户都需要输入密码
[mcy@mcy /root]$ su root
Password: 
[root@mcy ~]# su mcy
[mcy@mcy /root]$ su - root
Password: 
Last login: Sat Nov  9 21:59:31 CST 2019 on pts/1
[root@mcy ~]# 

    #我们还可以通过$PATH看出两种方式登录的shell是不一样的
[mcy@mcy ~]$ su root
[root@mcy /home/mcy]# echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/mcy/.local/bin:/home/mcy/bin
[mcy@mcy ~]$ su - root
[root@mcy ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin

执行顺序不一样,且去除相同项后就可以直观的看到不同的shell
/home/mcy/.local/bin:/home/mcy/bin      #su root
/sbin:/bin:/root/.local/bin:/root/bin   #su - root

3、sudo

sudo -l    #查看用户有哪些sudo权限

主要说说sudo提权方式    
    #sudo提权可以根据具体需求的来为用户提权
    #使用visudo直接编辑/etc/sudoers文件
visudo  ==  vi /etc/sudoers

进入/etc/sudoers文件后,100gg跳转到100行
## Allow root to run any commands anywhere      #允许根在任何地方运行任何命令
root    ALL=(ALL)       ALL                     #设置方法
mcy     ALL=(ALL)       /bin/cat,/bin/rm        #给mcy用户增加sudo命令的权限
                        /bin/*                  #这是给予/bin下所有命令的权限
                        NOPASSWD: /bin/cat      #表示使用sudo的时候不需要输入密码
                        /bin/*,!/bin/su         #运行bin下所有命令,但是排除su命令
用户名  主机=(角色)   命令的路径  ALL表示所有命令

    #检查语法visudo设置的语法是否正确
[root@mcy ~]# visudo -c
/etc/sudoers: parsed OK

    #查看mcy用户的sudo权限
[mcy@mcy /opt]$ sudo -l
User mcy may run the following commands on mcy:
    (ALL) /bin/cat, /bin/rm
    #确认没有权限的文件
[mcy@mcy ~]$ ll /etc/shadow
----------. 1 root root 1321 Nov  9 23:39 /etc/shadow
    #mcy用户本身不能查看/etc/shadow
[mcy@mcy ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
    #用sudo提权后就可以查看/etc/shadow文件里面的内容了
[mcy@mcy ~]$ sudo cat /etc/shadow
[sudo] password for mcy: 
root:$6$q.../mhCI7/2LC1701:18209:0:99999:7:::
bin:*:17834:0:99999:7:::

    #普通用户使用sudo的时候需要输密码
    #下面就是密码的时间戳缓存文件
[root@mcy ~]# ll  /var/db/sudo/lectured/
total 0
-rw-------. 1 root mcy 0 Nov  9 23:10 mcy

    #提权sudo用户组,适合多用户提权
    #设置组名和组命令别名一定要大写
    #设置组名称和组成员,执行“visudo”命令,再用“21gg”来到21行
# User_Alias ADMINS = jsmith, mikem
User_Alias M = mcy,mcy1
设置组   组名  组成员

23gg    #来到23行
## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk
Cmnd_Alias MML = /bin/cat,/bin/yum,/sbin/useradd

100gg   #来到100行
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
mcy     ALL=(ALL)       NOPASSWD: /bin/cat,/bin/rm,/bin/cd,/usr/bin/cd

    #设置组名和组命令别名一定要大写
M       ALL=(ALL)       MML
组名                    多个命令的集合名称,组命令别名

    #用mcy1用户开始测试
    #首先查看mcy1用户有哪些sudo权限
[mcy1@mcy ~]$ sudo -l
User mcy1 may run the following commands on mcy:
    (ALL) NOPASSWD: /bin/cat, /bin/yum, /sbin/useradd

    #先测试cat
[mcy1@mcy ~]$ cat /etc/shadow           #先用本身命令
cat: /etc/shadow: Permission denied     #返回结果不行
[mcy1@mcy ~]$ sudo cat /etc/shadow      #sudo提权
bin:*:17834:0:99999:7:::                #可以看到内容了,这里省略了多数内容

    #可以下载安装包
[mcy1@mcy ~]$ sudo yum -y install tree
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
......   
Package tree-1.6.0-10.el7.x86_64 already installed and latest version
Nothing to do

    #可以建立用户
[mcy1@mcy ~]$ sudo useradd mcy2
[mcy1@mcy ~]$ id mcy2
uid=1005(mcy2) gid=1005(mcy2) groups=1005(mcy2)

    #提权系统用户组,首先要建好用户组和用户
[root@mcy ~]# visudo
    #跳转到110行左右,找到下面的位置
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
%mcy2   ALL=(ALL)       NOPASSWD: MML
用户组                  这里可以用visudo的命令别名MML,也可以自己设置命令
    #NOPASSWD: 是设置普通用户使用sudo的时候不用输入密码
    #测试新用户mcy2,已经有MML的所有命令sudo权限了
[mcy2@mcy ~]$ sudo -l
User mcy2 may run the following commands on mcy:
    (ALL) NOPASSWD: /bin/cat, /bin/yum, /sbin/useradd

设置用户、用户组

chown

# 简介
设置所属用户、所属组

# 选项介绍
-R		递归设置目录及目录内文件

chown user.group file     设置     所属用户.所属组
chown -R user.group /mcy  递归设置目录及目录内文件  所属用户.所属组

# 例子
[root@mcy ~]# chown mcy.mcy a1
[root@mcy ~]# ll a1
-rwxrwxrwx 1 mcy mcy 0 Oct 13 14:13 a1

chgrp

# 简介
设置所属组

# 选项介绍
-R		递归设置目录及目录内文件

# 例子
[root@mcy ~]# chgrp m2 a1
[root@mcy ~]# ll a1
-rwxrwxrwx 1 mcy m2 0 Oct 13 14:13 a1

目录

pwd

# 简介
显示当前目录路径

# 选项介绍
-L	显示当前路径,默认选项
-P	显示软链接的真实路径

# 例子
[root@mcy /bin]# pwd        #显示当前目录的路径
/bin
[root@mcy /bin]# pwd -P     #显示软链接的真实路径
/usr/bin

cd

# 简介
变更当前目录

# 选项介绍
-L	变更为目标路径,默认选项
-P	变更为目标软链接的真实路径

# 例子
[root@mcy ~]$ cd -L /bin
[root@mcy /bin]$ pwd
/bin
[root@mcy /bin]$ cd ~
[root@mcy ~]$ cd -P /bin
[root@mcy /usr/bin]$
[root@mcy /bin]# cd         #去当前用户的家目录
[root@mcy ~]# cd ~          #去当前用户的家目录
[root@mcy ~]# cd .          #还在当前目录
[root@mcy ~]# cd ..         #去当前目录的上级目录
[root@mcy /]# cd -          #去上一次所在的目录
/root
[root@mcy ~]# cd /opt       #去目标目录
[root@mcy /opt]#

mkdir

# 简介
创建目录

# 选项介绍
-p  创建多级目录,递归创建
-m  创建目录时,修改目录权限
-v  显示创建过程
{
   }  批量创建

# 例子
[root@mcy /opt]# mkdir a                                #直接创建目录a
[root@mcy /opt]# ll
total 4
drwxr-xr-x. 3 roo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值