08 网络配置、shh服务、bash命令和元字符

作业一:完成作业未做完的集群架构
作业二:临时配置网络(ip,网关,dns)+永久配置

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

 

 

 

 

 

 


作业三:为集群内的机器设定主机名,利用/etc/hosts文件来解析自己的集群中所有的主机名,相应的,集群的配置应该改成使用主机名的方式

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

 

 08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

 08 网络配置、shh服务、bash命令和元字符

 


作业四:ssh登录,scp上传、下载,ssh秘钥登录,修改ssh server端的端口为8888然后进行登录和scp测试

代理

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

 08 网络配置、shh服务、bash命令和元字符

web1

08 网络配置、shh服务、bash命令和元字符

代理

08 网络配置、shh服务、bash命令和元字符

web1

08 网络配置、shh服务、bash命令和元字符

代理

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

web1

08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

代理

 08 网络配置、shh服务、bash命令和元字符

08 网络配置、shh服务、bash命令和元字符

web1

08 网络配置、shh服务、bash命令和元字符

 

08 网络配置、shh服务、bash命令和元字符

 08 网络配置、shh服务、bash命令和元字符

代理

08 网络配置、shh服务、bash命令和元字符

 

 

 

 


作业五:整理bash命令类型,验证寻找一个命令的优先级

命令分为:

==> alias
  ==> Compound Commands
    ==> function 
      ==> build_in
        ==> hash
          ==> $PATH
            ==> error: command not found

获取一个命令会按照上述优先级取寻找,先找同名的alias命令,再找compound命令。。。

让我们先从最简单的入手:别名、内部命令、外部命令,来探讨它们三者的优先级

别名:别名命令是为了简化输出给一个长参数命令的整合,别名的定义方法 alias la='ls -al' 取消别名 unalias la
内部命令:是BASH自带的命令 功能简单,内部命令的帮助在builtin(1)里
外部命令:是就是一个小程序存在于/bin/ /sbin/ /usr/bin 等地方



[[email protected] ~]# 
[[email protected] ~]# alias cd
-bash: alias: cd: not found
cd是一个内部命令 属于bash软件自带命令(参考man cd) 它没有定义别名

[[email protected] ~]# 
[[email protected] ~]# alias ls
ls被定义了别名
alias ls='ls --color=tty'
[[email protected] ~]# 
[[email protected] ~]# which ls
alias ls='ls --color=tty'
/bin/ls
[[email protected] ~]# 
ls实际是一个外部命令 属于可执行程序 是通过C代码编译得出的可执行程序
[[email protected] ~]# file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
[[email protected] ~]#


验证:别名是优先于内部命令和外部命令的

[[email protected] ~]# alias cd='ls -l' #建立一个别名是cd但实际指向的是/bin/ls的别名
[[email protected] ~]# cp /bin/hostname /usr/local/sbin/cd #在PATH第一个目录里放入一个cd命令
You have new mail in /var/spool/mail/root


[[email protected] ~]# cd #此时执行cd命令 是找到得别名cd优先
total 900
-rw-r--r--. 1 root root 0 Mar 20 10:10 4.txt
-rw-------. 1 root root 956 Mar 8 09:17 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Mar 20 10:09 a.txt
-rw-r--r--. 1 root root 0 Mar 20 10:10 D.txt
drwxr-xr-x. 9 jack jack 4096 Mar 19 14:40 nginx-1.10.3
-rw-r--r--. 1 root root 911509 Mar 19 12:49 nginx-1.10.3.tar.gz
[[email protected] ~]# unalias cd #删除了别名,此时在去搜索 就是内部命令优先 得到了真正的cd命令
[[email protected] ~]# cd #执行的就是系统内置的cd

[[email protected] ~]# /usr/local/sbin/cd #此时想越过内部命令去执行外部命令 就是之前cp /bin/hostname /bin/cd留下的cd
MiWiFi-R3-srv

[[email protected] ~]# rm -rf  /usr/local/sbin/cd 
[[email protected] ~]#

 

小结一:命令的执行搜索顺序
==>别名 (alias可以查看)
  ==> bash内部命令
    ==> $PATH 中按冒号分割的每个路径中去搜索

 

验证:alias,compund优先级

[[email protected] ~]# alias if='ls -l'
[[email protected] ~]# 
[[email protected] ~]# if #证明别名比compound的优先级高
total 900
-rw-r--r--. 1 root root 0 Mar 20 10:10 4.txt
-rw-------. 1 root root 956 Mar 8 09:17 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Mar 20 10:09 a.txt
-rw-r--r--. 1 root root 0 Mar 20 10:10 D.txt
drwxr-xr-x. 9 jack jack 4096 Mar 19 14:40 nginx-1.10.3
-rw-r--r--. 1 root root 911509 Mar 19 12:49 nginx-1.10.3.tar.gz


验证:compound与function的优先级

[[email protected] ~]# function for() { echo 'my function for'; }
[[email protected] ~]# for((i=1;i<3;i++));do echo $i;done #执行的仍然是compound命令,证明compound优先级比函数高
1
2

验证:compound与function的优先级

[[email protected] ~]# function cd() { echo 'my function cd'; }
[[email protected] ~]# cd #执行的是自己的函数而不是内置命令cd,证明函数比内置命令优先级高
total 900
-rw-r--r--. 1 root root 0 Mar 20 10:10 4.txt
-rw-------. 1 root root 956 Mar 8 09:17 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Mar 20 10:09 a.txt
-rw-r--r--. 1 root root 0 Mar 20 10:10 D.txt
drwxr-xr-x. 9 jack jack 4096 Mar 19 14:40 nginx-1.10.3
-rw-r--r--. 1 root root 911509 Mar 19 12:49 nginx-1.10.3.tar.gz

 


作业六:通配符实验

元字符是被shell解释的

`` 命令替换 取命令的执行结果

[[email protected] ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
[[email protected] ~]# res=`ls` #取命令的运行结果,赋值给变量res
[[email protected] ~]# echo $res #查看变量res的值
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

$()同上,但它弥补了``的嵌套缺陷

[[email protected] ~]# res=`echo `ls`` #嵌套使用后无法达到预想的效果:取echo 一堆文件名的效果。

[[email protected] ~]# echo $res
ls

[[email protected] ~]# res=$(echo $(ls)) #替代方案
[[email protected] ~]# echo $res
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

~ 家目录

[[email protected] tmp]# cd ~
[[email protected] ~]# pwd
/root

! 取非

[[email protected] ~]# ls /dev/sda
sda sda1 sda2 
[[email protected] ~]# ls /dev/sda[0123]
/dev/sda1 /dev/sda2
[[email protected] ~]# ls /dev/sda[!01]
/dev/sda2

! 历史命令调用

[[email protected] ~]# !343
hostname
MiWiFi-R3-srv

! 匹配最近一次历史命令

[[email protected] ~]# !ls
ls /dev/sda[!01]
/dev/sda2

! ls 带空格 将命令的返回值取反

[[email protected] ~]# echo ok
ok
[[email protected] ~]# echo $? #上一条命令执行的结果,0代表执行成功,非0代表执行失败
0
[[email protected] ~]# ! echo ok #将结果取反
ok
[[email protected] ~]# echo $?
1

0-255之间,0则为真,非0位假

@ 无特殊含义

# 注释

$ 变量取值
$() 同``
${} 变量名的范围

$[] 整数计算 echo $[2+3] - * / % 浮点数用 echo "scale=3; 10/3" | bc -l

[[email protected] ~]# money=10
[[email protected] ~]# echo $money 
10
[[email protected] ~]# echo 00000$money
0000010
[[email protected] ~]# echo $money0000

[[email protected] ~]# echo ${money}0000
100000

% 杀后台进程 jobs号; 取模

^ 取非 和 ! 雷同

[[email protected] ~]# ls /dev/sda[^01]
/dev/sda2
[[email protected] ~]# ls /dev/sda[!01]
/dev/sda2

^ 替换

[[email protected] ~]# systemctl restart network
[[email protected] ~]# ^network^sshd^
systemctl restart sshd

& 后台执行;&& 逻辑与

* 匹配任意长度字符串;计算乘法

() 在子进程中执行

[[email protected] ~]# x=1
[[email protected] ~]# (x=666)
[[email protected] ~]# echo $x
1
[[email protected] ~]# 
[[email protected] ~]# (x=666;echo $x)
666

- 减号;区间;cd -;

_ 无特殊含义

+ 加号 ;

= 赋值

| 管道; || 逻辑或

\ 转义;

{} 命令列表 #括号内的开头和结尾必须是空格
# { ls; cd /; }

[] 字符通配,匹配括号内之一;

: 空命令 真值

[[email protected] ~]# :
[[email protected] ~]# echo $?
0

; 可以接多个命令:ls;pwd;echo 123;无论对错,会一直执行到最后一条命令

"" 软引 ''硬引

< 输入重定向

> 输出重定向

>> 追加

<< here document

>& 合并2和1输出

, 枚举分隔符

. source ; 当前目录

/ 目录分隔符

? 单个字符

回车 命令执行

* 通配符:任意字符
? 通配符:任一字符
[abc] 列表项之一
[^abc] 对列表取非 也可以使用范围 [a-z] 代表aAbBcC...,[0-9]代表012345。。。
{} 循环列表

[[email protected] test]# touch {1..3}{a..d}.txt
[[email protected] test]# ls
1a.txt 1b.txt 1c.txt 1d.txt 2a.txt 2b.txt 2c.txt 2d.txt 3a.txt 3b.txt 3c.txt 3d.txt

控制变量名的范围 echo ${AB}C

硬引用与软引用

[[email protected] test]# x=1
[[email protected] test]# echo "$x" #双引号的代表软引用,引号内特殊字符有特殊意义,比如$,``等
1
[[email protected] test]# echo '$x' #单引号代表硬引用,引号内所有字符都无特殊意义
$x

\转意

[[email protected] test]# echo \\
\
[[email protected] test]# echo \'
'
[[email protected] test]# echo "'"
'