LINUX系统工程师技术(Engineer)-------第五天

简介:

两台虚拟机,均要检测


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  ldapuser0@127.0.0.1


[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 

 #!/bin/bash

 da


[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/a.txt


[root@server0 ~]# cat /opt/1.txt /etc/ &> /opt/a.txt

[root@server0 ~]# cat /opt/a.txt


######################################################

三、书写创建用户并设置密码的脚本

     /dev/null  #Linux黑洞设备,专用于收集不要的输出结果


[root@server0 ~]# vim /root/user.sh


 #!/bin/bash

 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   :可以产生交互,将键盘输入的内容赋值给变量



[root@server0 ~]# vim /root/user.sh

 #!/bin/bash

 read  -p  '请输入您要建立的用户:'   user

 read  -p  '请输入您要设置的密码:'   pass

 useradd  $user  &> /dev/null

 echo $user创建成功

 echo $pass | passwd --stdin $user &> /dev/null

 echo $user密码设置成功


[root@server0 ~]# /root/user.sh







#########################################################

什么是变量

• 以不变的名称存放的可能会变化的值

– 变量名=变量值

– 方便以固定名称重复使用某个值

– 提高对任务需求、运行环境变化的适应能力



• 设置变量时的注意事项

– 若指定的变量名已存在,相当于为此变量重新赋值

– 等号两边不要有空格

– 变量名由字母/数字/下划线组成,区分大小写

– 变量名不能以数字开头,不要使用关键字和特殊字符



• 基本格式

– 引用变量值:$变量名

– 查看变量值:echo $变量名、echo ${变量名}



 变量的种类




位置变量

• 在执行脚本时提供的命令行参数(非交互式传值)


[root@server0 ~]# vim  /root/2.sh

 #!/bin/bash

 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 


 #!/bin/bash

 echo $1

 echo $2

 echo $3

 echo ${10}

 echo ${11}

 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]# ls

[root@server0 opt]# mkdir   MariaDB-$(date +%F)

[root@server0 opt]# ls

[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

 #!/bin/bash

 if  [ $1 -eq $2 ];then

   echo hello

 else

   echo hi

 fi


[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

 else

      命令序列zz

 fi

  

     

    成绩    大于等于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

     echo 成绩有误

  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

 #!/bin/bash

 if [  $1  ==  redhat  ];then

   echo  fedora

 elif [  $1  ==  fedora  ];then

   echo  redhat

 else

   echo  '/root/foo.sh  redhat|fedora'

 fi


[root@server0 ~]# /root/foo.sh redhat

[root@server0 ~]# /root/foo.sh fedora


[root@server0 ~]# /root/foo.sh haha





 #!/bin/bash

 if [ $# -eq 0 ];then

   echo '/root/foo.sh  redhat|fedora'

  elif [ $1 == redhat ];then

   echo fedora

  elif [ $1 == fedora ];then

   echo redhat

 else

   echo '/root/foo.sh  redhat|fedora'

 fi



      

       " ":可以将 “没有” 变成 “ 空值”



       " " 要使==他们两相等,在" "中间必须要有添加东西,否则" "和==不相等,列如"$1" == redhat 


 #!/bin/bash


 if [  "$1" == redhat ];then

   echo fedora

  elif [ "$1" == fedora ];then

   echo redhat

 else

   echo '/root/foo.sh  redhat|fedora'  >&2   #将正确输出变成错误

   exit 2                                   #脚本退出返回值

 fi


补充:echo '/root/foo.sh  redhat|fedora'  >&2-----本来echo' '里面跟的东西是错误的但是Linux不知道输出来的东西是错的,所以要想变成错误输出在后面跟上 >&2,这样就可以把错误的信息输出来。然后在添加一个返回值,exit 1,这样就知道是错误还是正确




####################################################

 for循环结构


  循环结构:将反复执行的语句,循环去执行



  for 变量名 in   值列表

  do

        命令序列

  done





[root@server0 /]# vim  /root/for.sh

  #!/bin/bash

  for a in 1 2 3 4 5

  do

    useradd nsd$a

    echo nsd$a创建成功

  done


[root@server0 /]# vim  /root/for02.sh

  #!/bin/bash

  for a in 1 2 3 4 5

  do

      echo hello

  done


######################################################


案例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

 #!/bin/bash

 if [ $# -eq 0 ];then

    echo 'Usage: /root/batchusers' >&2

    exit 1

 fi

 if [ ! -e $1 ];then

    echo 'Input file not found' >&2

    exit 2

 fi

 for  a  in $(cat $1)

 do

    useradd -s /bin/false $a

    echo $a创建成功

 done


##################################################




 #!/bin/bash

 if [ $# -eq 0 ];then

    echo 'Usage: /root/batchusers' >&2

    exit 1

 fi

 if [ -e $1 ];then

    for  a  in $(cat $1)

     do

    useradd -s /bin/false $a

    echo $a创建成功

     done

  else

    echo 'Input file not found' >&2

    exit 2

 fi


###################################################




































































#########################################################




































         









 



     本文转自hj_1314wgn 51CTO博客,原文链接:http://blog.51cto.com/13513556/2048526,如需转载请自行联系原作者








相关文章
|
6天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
|
2月前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
230 78
|
1月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
109 23
|
1月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
88 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
安全 Linux KVM
Linux虚拟化技术:从Xen到KVM
Xen和KVM是Linux平台上两种主要的虚拟化技术,各有优缺点和适用场景。通过对比两者的架构、性能、安全性、管理复杂性和硬件依赖性,可以更好地理解它们的适用场景和选择依据。无论是高性能计算、企业虚拟化还是云计算平台,合理选择和配置虚拟化技术是实现高效、稳定和安全IT环境的关键。
117 8
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
3月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
98 3
|
2月前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
66 0
|
2月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。