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 82532021-09-11 10:12 a.txt
# 简介
查看命令是 内部命令、外部命令、命令别名 和 命令文件位置
# 选项介绍
-a 显示命令路径,别名、说明这是内部命令
-p 如果给出的命令(如tree)为外部命令,则显示其绝对路径
如果给出的命令(如pwd、ls)为内部命令,则不显示
-t 显示指定的命令是 外部命令、别名命令、内部命令
# 例子[root@mcy ~]$ type -a tree
tree is /usr/bin/tree
[root@mcy ~]$ type -a lsls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@mcy ~]$ type -a pwdpwd is a shell builtinpwd 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
#恢复阿里源仓库【本地仓库建好以后还原方法】1、解压/etc/yum.repos.d下所有压缩包恢复原来的yum仓库
[root@mcy ~]# gzip -d /etc/yum.repos.d/CentOS-Base.repo.gz2、压缩后来的本地配置文件local.repo
[root@mcy ~]# gzip /etc/yum.repos.d/local.repo #准备好2台电脑
两台主机
10.0.0.100 服务端
10.0.0.99 客户端
1、关闭主机克隆一台虚拟机
2、进入克隆主机后,修改ip和主机名
#修改IPsed -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 【关闭状态】
#永久关闭selinuxsed -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压缩了所有仓库文件,所以结果是08、编辑一个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=1gpgcheck=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
# 简介
统计连接本机的每个终端 用户、终端、IP、日期时间
# 选项介绍# 例子[root@lb01 ~]# last
root pts/2 10.0.0.1 Wed Jun 2410:20 still logged in
root pts/1 10.0.0.1 Wed Jun 2410:03 still logged in
批量创建、修改、删除用户
批量操作涉及到很多其他命令,初学者可以跳过,回头再看这里
#批量创建用户#这2种办法可以在history看到用户名,不利于保密echo'useradd 'oldboy{
1..10}|xargs -n2|bashecho'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/bashforuserin`cat userdel.txt`douserdel -r $userecho"The user deletc success !"done#执行脚本bash deluser.sh
1、#先来说说改变用户所属组的提权方式#首先用root账户给普通用户mcy更换一个系统用户组[root@mcy ~]# usermod -g 10 mcy[root@mcy ~]# id mcyuid=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 821:17 mcy222
drwx------. 2 mcy1 mcy1 27 Nov 821:28 mcy666
#用mcy用户的权限去删除mcy666目录,删不了[mcy@mcy ~]$ rm -rf /opt/mcy666
rm: cannot remove ‘/opt/mcy666’: Permission denied
#现在用sudo提权后再删除,就OK了[mcy@mcy ~]$ sudorm -rf /opt/mcy666
[sudo] password for mcy:
[mcy@mcy ~]$ ll /opt
total 0
drwx------. 2 mcy1 mcy1 27 Nov 821: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 921: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 921: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 923:39 /etc/shadow
#mcy用户本身不能查看/etc/shadow[mcy@mcy ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
#用sudo提权后就可以查看/etc/shadow文件里面的内容了[mcy@mcy ~]$ sudocat /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 923: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 ~]$ sudocat /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 ~]$ sudouseradd 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