兩台虛拟機,均要檢測
1. Yum是否可用
2. 防火牆預設區域修改為trusted
3. IP位址是否配置
#######################################################
二、普通使用者(必須還原環境)
用戶端普通使用者通路服務端nfs-server服務,
服務端會以用戶端相同UID身份的本地使用者進行權限判定
LDAP : 網絡使用者,提供使用者名
kerberos : 密碼驗證,實作“一次密碼認證,多次免密登入”的通行證機制
1.兩台虛拟機都運作腳本,加入LDAP與kerberos
# lab nfskrb5 setup
2.服務端修改配置檔案,建立讀寫的共享
[root@server0 ~]# mkdir /test
[root@server0 ~]# vim /etc/exports
/test *(rw,sec=krb5p)
3.服務端部署加密的密鑰
# wget http://172.25.254.254/pub/keytabs/server0.keytab -O /etc/krb5.keytab
# ls /etc/krb5.keytab
4.服務端 重起 nfs-server 與 nfs-secure-server
# systemctl restart nfs-server nfs-secure-server
5.服務端保證ldapuser0使用者有寫權限,設定本地權限
[root@server0 ~]# setfacl -m u:ldapuser0:rwx /test
[root@server0 ~]# getfacl /test
6.用戶端通路與挂載共享
[root@desktop0 ~]# showmount -e 172.25.0.11
[root@desktop0 ~]# mkdir /mnt/nfs
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/test /mnt/nfs nfs _netdev,sec=krb5p 0 0
7.用戶端部署密鑰檔案,重起相關的服務
# wget http://172.25.254.254/pub/keytabs/desktop0.keytab -O /etc/krb5.keytab
# systemctl restart nfs nfs-secure
8.用戶端驗證挂載,寫入(必須采用ssh方式,su不經過kerberos驗證)
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h
[root@desktop0 ~]# ssh [email protected]
[ldapuser0@desktop0 ~]$ cd /mnt/nfs/
[ldapuser0@desktop0 nfs]$ touch 1.txt
[ldapuser0@desktop0 nfs]$ ls
1.txt
[ldapuser0@desktop0 nfs]$ exit
########################################################
Shell腳本
腳本:可以執行檔案,運作後可以實作某種功能(指令的堆積,非互動)
規範Shell腳本的一般組成
#! 環境聲明(Sha-Bang)
# 注釋文本
可執行代碼
一、書寫第一腳本程式
[root@server0 ~]# vim /root/1.sh
#!/bin/bash
echo hello world
hostname
cat /etc/redhat-release
ifconfig | head -2 | tail -1
[root@server0 ~]# /root/1.sh
二、書寫為Server0自動搭建Yum的腳本
[root@server0 ~]# vim /root/yum.sh
rm -rf /etc/yum.repos.d/*
echo '[dvd]
name=dvd
baseurl=http://172.25.254.254/content/rhel7.0/x86_64/dvd/
enabled=1
gpgcheck=0' > /etc/yum.repos.d/haha.repo
yum clean all
yum repolist
[root@server0 ~]# chmod +x /root/yum.sh
[root@server0 ~]# /root/yum.sh
管道傳遞
使用 | 管道操作
– 将前一條指令的标準輸出交給後一條指令處理
三、重定向輸出
>:隻收集前面指令的正确輸出
2>:隻收集前面指令的錯誤輸出
&>:收集前面指令的錯誤與正确輸出
[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt
[root@server0 ~]# cat /opt/1.txt /etc/
[root@server0 ~]# cat /opt/1.txt /etc/ > /opt/a.txt
[root@server0 ~]# cat /opt/a.txt
[root@server0 ~]# cat /opt/1.txt /etc/ 2> /opt/a.txt
[root@server0 ~]# cat /opt/1.txt /etc/ &> /opt/a.txt
######################################################
三、書寫建立使用者并設定密碼的腳本
/dev/null #Linux黑洞裝置,專用于收集不要的輸出結果
[root@server0 ~]# vim /root/user.sh
useradd test06 &> /dev/null
echo test06建立成功
echo 123 | passwd --stdin test06 &> /dev/null
echo test06密碼設定成功
[root@server0 ~]# chmod +x /root/user.sh
[root@server0 ~]# /root/user.sh
變量:為了增加腳本的适用環境的能力,增加腳本的靈活度,友善。
變量: 容器,以不變的名稱,儲存變化的值
變量名=變化的值
使用變量: $變量名
為了降低腳本使用難度,可以産生互動
read :可以産生互動,将鍵盤輸入的内容指派給變量
read -p '請輸入您要建立的使用者:' user
read -p '請輸入您要設定的密碼:' pass
useradd $user &> /dev/null
echo $user建立成功
echo $pass | passwd --stdin $user &> /dev/null
echo $user密碼設定成功
#########################################################
什麼是變量
以不變的名稱存放的可能會變化的值
– 變量名=變量值
– 友善以固定名稱重複使用某個值
– 提高對任務需求、運作環境變化的适應能力
設定變量時的注意事項
– 若指定的變量名已存在,相當于為此變量重新指派
– 等号兩邊不要有空格
– 變量名由字母/數字/下劃線組成,區分大小寫
– 變量名不能以數字開頭,不要使用關鍵字和特殊字元
基本格式
– 引用變量值:$變量名
– 檢視變量值:echo $變量名、echo ${變量名}
變量的種類
位置變量
在執行腳本時提供的指令行參數(非互動式傳值)
[root@server0 ~]# vim /root/2.sh
echo $1
echo $2
echo $3
echo ${10}
echo ${11}
# /root/2.sh haha benniu xixi hehe lele dc tc dz tz 100 200
[root@server0 ~]# vim /root/3.sh
#!/bin/bash
cat -n $1 | head -$2
[root@server0 ~]# /root/3.sh /etc/passwd 2
[root@server0 ~]# /root/3.sh /etc/passwd 3
預定義變量
用來儲存腳本程式的執行資訊
– 直接使用這些變量
– 不能直接為這些變量指派
$# 已加載的位置變量的個數
$* 所有位置變量的值
$? 程式退出後的狀态值,0表示正常,其他值異常
[root@server0 ~]# vim /root/2.sh
echo $#
echo $*
[root@server0 ~]# /root/2.sh 1 2 3 4 5 6 7 8 9 10 11
運算
[root@server0 ~]# expr 10 / 3
[root@server0 ~]# expr 10 \* 3
[root@server0 ~]# expr 1 + 2
[root@server0 ~]# expr 3 - 1
[root@server0 ~]# expr 10 % 3 #取餘數 運算
$() :将指令的輸出結果,作為參數
[root@server0 opt]# date
[root@server0 opt]# date +%F
[root@server0 opt]# cd /opt
[root@server0 opt]# mkdir $(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir mydir-$(date +%F)
[root@server0 opt]# mkdir MariaDB-$(date +%F)
[root@server0 opt]# mkdir $(hostname)-$(date +%F)
常用的測試選項
檢查檔案狀态
-e:文檔存在為真
-d:文檔存在且為目錄為真
-f:文檔存在且為檔案為真
-r:文檔存在且有讀取權限為真
-w:文檔存在且有寫入權限為真
-x:文檔存在且有執行權限為真
比較整數大小(帶e都有等于二字,g代表大于,l代表小于)
-gt:大于
-ge:大于等于
-eq:等于
-ne:不等于
-lt:小于
-le:小于等于
字元串比對
== :相等
!=:不相等
if [ 條件測試 ] ; then
指令序列xx
else
指令序列yy
fi
[root@server0 /]# vim /root/5.sh
if [ $1 -eq $2 ];then
echo hello
echo hi
[root@server0 /]# /root/5.sh 1 1
[root@server0 /]# /root/5.sh 1 2
請書寫一個腳本:
使用者輸入一個IP位址(read),判斷是否可以與該IP位址通信,
能通則輸出 "IP ok" 否則 輸出 "IP no"
[root@server0 /]# vim /root/6.sh
#!/bin/bash
read -p '請輸入一個IP位址:' ip
ping -c 2 $ip &> /dev/null
if [ $? -eq 0 ];then
echo ${ip} ok
else
echo ${ip} no
fi
[root@server0 /]# /root/6.sh
if [條件測試1] ; then
指令序列xx
elif [條件測試2] ; then
指令序列yy
指令序列zz
成績 大于等于90 優秀
大于等于80 良好
大于等于70 及格
大于等于60 仍需努力
60以下 在牛的肖邦,也彈不出哥憂傷
[root@server0 ~]# vim /root/8.sh
#!/bin/bash
read -p '請輸入您的成績:' num
if [ $num -gt 100 ];then
echo 成績有誤
elif [ $num -lt 0 ];then
elif [ $num -ge 90 ];then
echo 優秀
elif [ $num -ge 80 ];then
echo 良好
elif [ $num -ge 70 ];then
echo 及格
elif [ $num -ge 60 ];then
echo 仍需努力
else
echo 在牛的肖邦,也彈不出哥憂傷
fi
#####################################################
在 server0 上建立 /root/foo.sh 腳本
1)當運作/root/foo.sh redhat,輸出為fedora
2)當運作/root/foo.sh fedora,輸出為redhat
3)當沒有任何參數或者參數不是 redhat 或者
fedora時,其錯誤輸出産生以下資訊:
/root/foo.sh redhat|fedora
' ':把所有的特殊字元,當作普通文本字元輸出
[root@server0 ~]# vim /root/foo.sh
if [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
echo '/root/foo.sh redhat|fedora'
[root@server0 ~]# /root/foo.sh redhat
[root@server0 ~]# /root/foo.sh fedora
[root@server0 ~]# /root/foo.sh haha
if [ $# -eq 0 ];then
echo '/root/foo.sh redhat|fedora'
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
" ":可以将 “沒有” 變成 “ 空值”
if [ "$1" == redhat ];then
elif [ "$1" == fedora ];then
echo '/root/foo.sh redhat|fedora' >&2 #将正确輸出變成錯誤
exit 2 #腳本退出傳回值
####################################################
for循環結構
循環結構:将反複執行的語句,循環去執行
for 變量名 in 值清單
do
指令序列
done
[root@server0 /]# vim /root/for.sh
for a in 1 2 3 4 5
useradd nsd$a
echo nsd$a建立成功
[root@server0 /]# vim /root/for02.sh
echo hello
案例5:編寫一個批量添加使用者腳本
在 server0 上建立 /root/batchusers 腳本
1)此腳本要求提供使用者名清單檔案作為參數
2)如果沒有提供參數,此腳本應該給出提示
Usage: /root/batchusers,退出并傳回相應值
3)如果提供一個不存在的檔案,此腳本應該給出提
示 Input file not found,退出并傳回相應值
4)新使用者的登入Shell為 /bin/false,無需設定密碼
5)使用者清單測試檔案:
http://classroom/pub/materials/userlist
# wget http://classroom/pub/materials/userlist
[root@server0 /]# vim /root/batchusers
echo 'Usage: /root/batchusers' >&2
exit 1
if [ ! -e $1 ];then
echo 'Input file not found' >&2
exit 2
for a in $(cat $1)
do
useradd -s /bin/false $a
echo $a建立成功
done
##################################################
if [ -e $1 ];then
for a in $(cat $1)
do
done
else