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

两台虚拟机,均要检测

1. Yum是否可用

2. ?防火墙默认区域修改为trusted

3. IP地址是否配置

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

二、普通用户(必须还原环境)

??

? ? ?客户端普通用户访问服务端nfs-server服务,

? ? ?服务端会以客户端相同UID身份的本地用户进行权限判定

? ? LDAP : ?网络用户,提供用户名

? ? kerberos : 密码验证,实现“一次密码认证,多次免密登录”的通行证机制

1.两台虚拟机都运行脚本,加入LDAP与kerberos

??

? # lab nfskrb5 setup

2.服务端修改配置文件,创建读写的共享

[[email protected] ~]# mkdir /test

[[email protected] ~]# 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用户有写权限,设置本地权限

[[email protected] ~]# setfacl -m u:ldapuser0:rwx /test

[[email protected] ~]# getfacl /test

6.客户端访问与挂载共享

[[email protected] ~]# showmount -e 172.25.0.11

[[email protected] ~]# mkdir /mnt/nfs

[[email protected] ~]# 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验证)

[[email protected] ~]# mount -a

[[email protected] ~]# df -h

[[email protected] ~]# ssh [email protected]

[[email protected] ~]$ cd /mnt/nfs/

[[email protected] nfs]$ touch 1.txt

[[email protected] nfs]$ ls

1.txt

[[email protected] nfs]$ exit

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

?Shell脚本

? ? ?脚本:可以执行文件,运行后可以实现某种功能(命令的堆积,非交互)

规范Shell脚本的一般组成

? #! 环境声明(Sha-Bang)

? # 注释文本

? 可执行代码

一、书写第一脚本程序

[[email protected] ~]# vim /root/1.sh?

?#!/bin/bash

?echo hello world

?hostname

?cat ?/etc/redhat-release

?ifconfig | head -2 ?| tail -1

[[email protected] ~]# /root/1.sh

二、书写为Server0自动搭建Yum的脚本

[[email protected] ~]# vim /root/yum.sh?

?#!/bin/bash

?da

[[email protected] ~]# chmod +x /root/yum.sh

[[email protected] ~]# /root/yum.sh

管道传递

? 使用 | 管道操作

– 将前一条命令的标准输出交给后一条命令处理

三、重定向输出

? ? >:只收集前面命令的正确输出

? ? 2>:只收集前面命令的错误输出

? ? &>:收集前面命令的错误与正确输出

[[email protected] ~]# echo 123 > /opt/1.txt

[[email protected] ~]# cat /opt/1.txt

[[email protected] ~]# cat /opt/1.txt /etc/

[[email protected] ~]# cat /opt/1.txt /etc/ > /opt/a.txt

[[email protected] ~]# cat /opt/a.txt

[[email protected] ~]# cat /opt/1.txt /etc/ 2> /opt/a.txt

[[email protected] ~]# cat /opt/a.txt

[[email protected] ~]# cat /opt/1.txt /etc/ &> /opt/a.txt

[[email protected] ~]# cat /opt/a.txt

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

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

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

[[email protected] ~]# vim /root/user.sh

?#!/bin/bash

?useradd test06 &> /dev/null

?echo test06创建成功

?echo 123 | passwd --stdin test06 &> /dev/null

?echo test06密码设置成功

[[email protected] ~]# ?chmod +x /root/user.sh

[[email protected] ~]# /root/user.sh

??

? ?变量:为了增加脚本的适用环境的能力,增加脚本的灵活度,方便。-----------引进变量

? ?变量: 容器,以不变的名称,储存变化的值

? ? ? 变量名=变化的值

? 使用变量: ? ?$变量名

? ?为了降低脚本使用难度,可以产生交互

? read ? :可以产生交互,将键盘输入的内容赋值给变量

[[email protected] ~]# 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密码设置成功

[[email protected] ~]# /root/user.sh

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

什么是变量

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

– 变量名=变量值

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

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

? 设置变量时的注意事项

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

– 等号两边不要有空格

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

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

? 基本格式

– 引用变量值:$变量名

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

?变量的种类

位置变量

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

[[email protected] ~]# 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

[[email protected] ~]# vim /root/3.sh

? #!/bin/bash

? cat -n $1 ?| ?head -$2?

[[email protected] ~]# /root/3.sh /etc/passwd ? 2

[[email protected] ~]# /root/3.sh /etc/passwd ? 3

?预定义变量

? ? 用来保存脚本程序的执行信息

– 直接使用这些变量

– 不能直接为这些变量赋值

? $# ?已加载的位置变量的个数

$* ?所有位置变量的值

$? ?程序退出后的状态值,0表示正常,其他值异常

[[email protected] ~]# vim /root/2.sh?

?#!/bin/bash

?echo $1

?echo $2

?echo $3

?echo ${10}

?echo ${11}

?echo $#

?echo $*

[[email protected] ~]# /root/2.sh ?1 ?2 3 4 5 6 7 8 9 10 11

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

?运算?

??

[[email protected] ~]# expr 10 / 3

[[email protected] ~]# expr 10 \* 3

[[email protected] ~]# expr 1 + 2

[[email protected] ~]# expr 3 - 1

[[email protected] ~]# expr 10 ?% ?3 ? ?#取余数 运算

? $() :将命令的输出结果,作为参数

[[email protected] opt]# date

[[email protected] opt]# date +%F

[[email protected] opt]# cd /opt

[[email protected] opt]# mkdir ? $(date +%F)

[[email protected] opt]# ls

[[email protected] opt]# mkdir ? mydir-$(date +%F)

[[email protected] opt]# ls

[[email protected] opt]# mkdir ? MariaDB-$(date +%F)

[[email protected] opt]# ls

[[email protected] 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

[[email protected] /]# vim ?/root/5.sh

?#!/bin/bash

?if ?[ $1 -eq $2 ];then

? ?echo hello

?else

? ?echo hi

?fi

[[email protected] /]# /root/5.sh ?1 1?

[[email protected] /]# /root/5.sh ?1 2

? ?请书写一个脚本:

? ? ? 用户输入一个IP地址(read),判断是否可以与该IP地址通信,

? ?能通则输出 "IP ok" ? 否则 输出 "IP no"

[[email protected] /]# 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?

[[email protected] /]# ? /root/6.sh

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

?if [条件测试1] ; then

? ? ? 命令序列xx

?elif [条件测试2] ; then

? ? ? 命令序列yy

?else

? ? ? 命令序列zz

?fi

??

? ? ?

? ? 成绩 ? ?大于等于90 ? ?优秀

?大于等于80 ? ?良好 ? ? ? ? ? ??

?大于等于70 ? ?及格 ?

?大于等于60 ? ?仍需努力 ?

?60以下 ? ? ? ? ?在牛的肖邦,也弹不出哥忧伤

[[email protected] ~]# 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

? ? ?‘ ‘:把所有的特殊字符,当作普通文本字符输出

[[email protected] ~]# 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

[[email protected] ~]# /root/foo.sh redhat

[[email protected] ~]# /root/foo.sh fedora

[[email protected] ~]# /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

[[email protected] /]# vim ?/root/for.sh

? #!/bin/bash

? for a in 1 2 3 4 5

? do

? ? useradd nsd$a

? ? echo nsd$a创建成功

? done

[[email protected] /]# 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?

[[email protected] /]# 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

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

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

? ? ? ? ?

?

时间: 2024-11-08 20:44:44

LINUX系统工程师技术(Engineer)-------第五天的相关文章

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

? Security-Enhanced Linux-----相当于一个保安 – 美国NSA国家安全局主导开发,一套增强Linux系统安 全的强制访问控制体系 – 集成到Linux内核(2.6及以上)中运行 – RHEL7基于SELinux体系针对用户.进程.目录和文件 提供了预设的保护策略,以及管理工具 ? SELinux的运行模式 – enforcing(强制).permissive(宽松) – disabled(彻底禁用) [[email protected] ~]# getenforce

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

两台虚拟机,均要检测 1. Yum是否可用 2. ?防火墙默认区域修改为trusted 3. IP地址是否配置 #################################################### ? samba 文件共享(共享文件夹) ? Samba 软件项目 – 用途:为客户机提供共享使用的文件夹 – 协议:SMB(TCP 139).CIFS(TCP 445) ? 所需软件包:samba ? 系统服务:smb 一.搭建基本samba服务 1.安装samba软件包 2.创建

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

两台虚拟机,均修改防火器与主机名 防火墙将原来的----------public状态---------修改成-------trusted状态 虚拟机server0: # firewall-cmd --set-default-zone=trusted? # echo server0.example.com ?> ?/etc/hostname # cat /etc/hostname 虚拟机desktop0: # firewall-cmd --set-default-zone=trusted? # e

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

两台虚拟机,均要检测 1.IP地址 2.是否可以解析,server0.example.com 3.Yum是否可用 4.防火墙默认区域修改为trusted #################################################### ? 基于 B/S (Browser/Server)架构的网页服务 – 服务端提供网页 – 浏览器下载并显示网页 ? Hyper Text Markup Language,超文本标记语言---------------html ? Hyper

【Linux】 经典Linux系统工程师面试题(转载)

1.如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0: 答: # iptables -t nat -A PREROUTING -d 192.168.16.1 -p tcp --dport 80 -j DNAT --to 192.168.16.1:8080 或 者: # iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp --dport 80 -j REDIR

Linux系统扫描技术

主机扫描命令fping 批量的给目标主机发送ping请求,并行发送(ICMP) fping安装: ① wget http://fping.org/dist/fping-3.10.tar.gz ② tar -zxvf fping-3.10.tar.gz ③ cd fping-3.10 ; ./configure ④ make && make install fping -v   #测试安装是否成功 fping -h   #获取帮助 fping常用参数介绍: -a  #只显示出存活的主机(相反

Linux系统工程师学习方法

学习顺序: 一.至少熟悉一种嵌入式芯片架构 最适合初学者的就是arm芯片 二.uboot的使用与移植 首先要了解uboot的启动流程,根据启动顺序,进行代码的修改.编译与移植 三.linux驱动开发 主要参考两本书:<Linux设备驱动程序> <Linux设备驱动开发详解> 第一本书讲理论,第二本讲实践. 在学驱动开发的时候,会涉及许多内核知识(例如内核定时器.内核链表.并发等),首先先学会使用,千万不要去看它们的实现.并且在看驱动的时候,用到那部分知识,再去查看相关的运用. 四.

linux系统日常管理

以下资料来源于<跟阿铭学Linux> 1.监控当前系统状态 1. w查看当前系统的负载 [[email protected] sbin]# w 15:23:46 up 3:34, 2 users, load average: 0.03, 0.05, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - 12:26 2:55m 0.11s 0.11s -bash root pts/0 10.72.137.53 1

linux系统学习第十三天-&lt;&lt;工程师技术&gt;&gt;

主要用途 /boot         存放系统引导必需的文件,包括内核.启动配置 /bin./sbin   存放各种命令程序 /dev          存放硬盘.键盘.鼠标.光驱等各种设备文件 /etc          存放Linux系统及各种程序的配置文件 /root./home/  用户名 分别是管理员root.普通用户的默认家目录 /var          存放日志文件.邮箱目录等经常变化的文件 /proc         存放内存中的映射数据,不占用磁盘 /tmp