SElinux是一个linux系统里的安全方面的子系统,用来提升linux的整体的安全级别。是一种访问控制体系,进程只能访问那些在他的任务中所需要文件。
1.1、如何查看SElinux是否开启[root@fttswlp ~]# getenforce Disabled1.1.1、临时修改
[root@fttswlp ~]# setenforce 0 # 临时关闭selinux [root@fttswlp ~]# setenforce 1 # 临时启动selinux1.1.2、永久修改
修改/etc/selinux/config或者/etc/sysconfig/selinux
[root@fttswlp ~]# cat /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # 把这个改为disabled # SELINUXTYPE= can take one of three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
可以使用命令编辑文件修改selinux的模式:
[root@fttswlp ~]# cat /etc/selinux/config|grep ^SELINUX= SELINUX=disabled [root@fttswlp ~]# sed -i '/^SELINUX=/ s/disabled/hansome-fan/' /etc/selinux/config [root@fttswlp ~]# cat /etc/selinux/config|grep ^SELINUX= SELINUX=hansome-fan # 这个只是一个效果,最后还是要改为SElinux的三种模式2、shell脚本练手
先来几个脚本练练手,熟悉shell编程分为哪几类
2.1、抽奖程序:从班级名单里随机抽取学生名字代码展示:
[root@fttswlp lucky_draw]# cat F_lucky_num2.0.sh #!/bin/bash #不用反复使用命令执行的抽奖代码 #定义一个中奖的文件,用来记录中奖的人的信息,脚本第一次执行会清空里面的内容,要是没有这个文件就会新建这个文 >luckylist.txt || touch luckylist.txt #生成一个用于减法的名单 cp $1 luckylist.txt for((i=1; i<=$(cat $1|wc -l)+1; i++)) # 加这个1,是为了后边能够输出这个"抽完了" do lucky_total=$(cat luckylist.txt|wc -l) #剩余名单总人数 if (( $lucky_total == 0 )) ; then echo "抽完了,开始新的一轮抽奖" rm -rf luckylist.txt break else lucky_p=$((RANDOM%($lucky_total)+1)) #抽中剩余名单里的人的号码 echo " 恭喜$(cat luckylist.txt|head -$lucky_p|tail -1)中奖!" sed -i "$lucky_p d" luckylist.txt #在luckylist.txt中删除被选中的人 read -p "请敲击任意键继续,按q退出:" option if [[ $option == "q" || $option == "Q" ]] then break fi fi done
使用的名单:
[root@fttswlp lucky_draw]# cat name1.txt 范一 冯二 张三 李四 王五 罗六 刘七 曹八 陈九 全十
2.2、监控类:内存的使用率超过70%给予提醒代码运行:
[root@fttswlp lucky_draw]# bash F_lucky_num2.0.sh name1.txt 恭喜冯二中奖! 请敲击任意键继续,按q退出: 恭喜王五中奖! 请敲击任意键继续,按q退出: 恭喜罗六中奖! 请敲击任意键继续,按q退出: 恭喜陈九中奖! 请敲击任意键继续,按q退出: 恭喜刘七中奖! 请敲击任意键继续,按q退出: 恭喜曹八中奖! 请敲击任意键继续,按q退出: 恭喜李四中奖! 请敲击任意键继续,按q退出: 恭喜全十中奖! 请敲击任意键继续,按q退出: 恭喜范一中奖! 请敲击任意键继续,按q退出: 恭喜张三中奖! 请敲击任意键继续,按q退出: 抽完了,开始新的一轮抽奖 [root@fttswlp lucky_draw]# bash F_lucky_num2.0.sh name1.txt 恭喜全十中奖! 请敲击任意键继续,按q退出: 恭喜张三中奖! 请敲击任意键继续,按q退出:q [root@fttswlp lucky_draw]#
代码展示:
>1.txt || touch 1.txt free -m |tail -n +2|awk '{print $1,$2,$3}' >1.txt # 将进程名、总共内存和已使用内容截取出来放入1.txt中 while read name total used do # 计算得到内存使用率情况,因为linux里边的默认的除是地板除 # scale=5,取五位小数 pro=$(printf "%.5f" `echo "scale=5;$used/$total"|bc`) if (( $( echo "$pro > 0.7"|bc ) == 1 )) then echo "$name,这台机器的内存使用为$pro,超过了70%,请注意" else echo "$name,这台机器的内存使用为$pro,没有超标" fi done < 1.txt
2.3、局域网扫描工具:知道哪些IP地址在使用,那哪些没有在使用代码测试:
[root@fttswlp menu]# bash hh Mem:,这台机器的内存使用为0.10500,没有超标 Swap:,这台机器的内存使用为0.00000,没有超标
代码展示:
[root@fttswlp script]# cat scan_mac_ip.sh #!/bin/bash # 清空日志文件 >used_ip.log >unused_ip.log >ip_mac.log # ip地址和mac获取工具 for i in {1..254} do # ping是测试网络是否畅通的工具 ( if ping -c 1 -w 1 192.168.28.$i &>/dev/null;then echo "192.168.28.$i" >>used_ip.log else echo "19.168.28.$i" >>unused_ip.log fi )& # 这个脚本是并行计算 done # wait是防止父进程先结束但是子进程没有结束,而导致父进程杀死没有执行完的子进程 wait # 统计没有使用的ip地址的个数 num=$(cat unused_ip.log |wc -l) echo "total ip:$num" >>unused_ip.log # 得到所有在使用的IP对应的mac arp -a |grep -v "incomplete"|awk '{print $2,$4}'|tr -d "()" >ip_mac.log
3、shell运行结果:
[root@fttswlp script]# bash scan_mac_ip.sh [root@fttswlp script]# cat ip_mac.log 192.168.29.1 00:50:56:c0:00:08 192.168.29.2 00:50:56:ee:e5:6d [root@fttswlp script]# cat unused_ip.log .... 19.168.28.177 19.168.28.234 19.168.28.226 19.168.28.223 total ip:253
作用:解释器,介于系统内核与用户之间,负责解释命令行
3.1、shell位置 3.2、shell解析流程输入命令的执行过程:
3.2.1、eval命令eval命令将会首先扫描命令进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量
[root@fttswlp ~]# myfile="cat test.txt" [root@fttswlp ~]# echo 123456 >test.txt [root@fttswlp ~]# echo $myfile cat test.txt [root@fttswlp ~]# eval $myfile # 第一次扫描进行了变量替换,第二次扫描执行了该字符串中包含的命令 1234563.2、shell登录
我们在windows里使用xshell远程连接linux,连接22号端口,即连到sshd服务。然后sshd会产生一个子sshd,然后这个子sshd再产生一个bash来执行命令。例如,下边执行pstree -p 命令
[root@fttswlp ~]# pstree -p
...
├─sshd(1149)───sshd(1665)───bash(1667)───pstree(1698)
...
3.3、bash初始化
sshd调用bash的时候,发生了什么事情。
依次执行这些脚本
若是非登录shell就是直接运行子bash。登入的过程就是四个脚本都要执行
[root@fttswlp ~]# cat ~/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias lk='ls -a -l -h --color=auto' alias c='clear' alias mk='mkdir -p' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi #!/bin/bash echo $sg echo $mv city='changsha' echo "$city is a good place"
[root@fttswlp ~]# bash changsha is a good place [root@fttswlp ~]# exit # 退出子bash exit [root@fttswlp ~]# export mv sg [root@fttswlp ~]# bash # 可以看到我们非登入shell是会执行./bashrc这文件的 fyy ftt changsha is a good place3.4、shell脚本的4种执行方式
# 所以这只是一个局部变量 [root@fttswlp ~]# sg=fyy [root@fttswlp ~]# mv=ftt [root@fttswlp ~]# cat a.sh echo $sg $mv
- bash a.sh和./a.sh,子bash里运行
这种方法是产生一个子bash,那么父进程的变量就不能使用了。我们可以使用export 把变量输出为全局变量,那么这个方法就能运行了。
[root@fttswlp ~]# bash a.sh [root@fttswlp ~]# ./a.sh -bash: ./a.sh: 权限不够 [root@fttswlp ~]# chmod +x a.sh [root@fttswlp ~]# ./a.sh [root@fttswlp ~]#
- . a.sh当前bash里运行
[root@fttswlp ~]# . a.sh fyy ftt
- source 当前bash里运行
[root@fttswlp ~]# source a.sh fyy ftt4、语言分类
强类型语言和弱类型语言、解释型和编译型、动态语言和静态语言
4.1、编程语言 编译型:c、go
解释型:shell,python,java 不是解释型语言的话用xshell第一行不需要声明是什么解释器
定义:是否进行变量类型的自动转换
强类型:不允许进行变量类型的自动转换,严格区分变量的类型,不自动转化
弱类型:背后会自动转换变量的类型
定义:就是在定义变量的时候,必须要声明变量的类型,就是静态的
c语言:弱类型,静态语言
python:强类型,动态语言
java:静态语言,强类型语言


![[轻松学会shell编程]-1、selinux介绍和配置 [轻松学会shell编程]-1、selinux介绍和配置](http://www.mshxw.com/aiimages/31/860370.png)
