Linux上的mysql安装之后卸载是卸载不干净的,ping服务器ping不通就是把icmp协议关闭了,ping使用的是icmp协议。
Export是全局变量,所有用户登录进来都可以使用。
1.iptables防火墙简介
Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中集成的模块。
2.Iptables服务相关命令
1.查看iptables状态
service iptables status
2.开启/关闭iptables
service iptables start
service iptables stop
3.查看iptables是否开机启动
chkconfig iptables --list
4.设置iptables开机启动/不启动
chkconfig iptables on
chkconfig iptables off
1.iptables原理简介
1.1.iptables的结构
在iptables中有四张表,分别是filter、nat、mangle和raw每一个表中都包含了各自不同的链,最常用的是filter表。
filter表:
filter是iptables默认使用的表,负责对流入、流出本机的数据包进行过滤,该表中定义了3个链:
INPOUT 负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包。
FORWARD 负责转发流经本机但不进入本机的数据包,起到转发的作用。
OUTPUT 负责处理所有源地址是本机地址的数据包,就是处理从主机发出去的数据包。
Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell Shell也是一门编程语言<解释型的编程语言>,即shell脚本 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的 Shell脚本的执行方式: 第一种:输入脚本的绝对路径或相对路径 首先要赋予+x权限 /root/helloWorld.sh ./helloWorld.sh 或者,不用赋予+x权限,而用解释器解释执行 sh helloworld.sh 第二种:bash或sh +脚本 sh /root/helloWorld.sh sh helloWorld.sh 第三种:在脚本的路径前再加". " . /root/helloWorld.sh . ./helloWorld.sh 区别:第一种和第二种会新开一个bash,不同bash中的变量无法共享 Shell中的变量: Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME、$PWD、$SHELL、$USER等等 显示当前shell中所有变量 : set 定义变量: 变量=值 (例如STR=abc) 等号两侧不能有空格 变量名称一般习惯为大写 双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意 STR="hello world" A=9 unset A 撤销变量 A readonly B=2 声明静态的变量 B=2 ,不能 unset export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用 将命令的返回值赋给变量: A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A A=$(ls -la) 等价于反引号 Shell中的特殊变量: $? 表示上一个命令退出的状态 $$ 表示当前进程编号 $0 表示当前脚本名称 $n 表示n位置的输入参数(n代表数字,n>=1) $# 表示参数的个数,常用于循环 $*和$@ 都表示参数列表 $*与$@区别: $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数 当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数 运算符: 格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格 例如计算(2 +3 )×4 的值 1 .分步计算 S=`expr 2 + 3` expr $S \* 4 2.一步完成计算 expr `expr 2 + 3 ` \* 4 echo `expr \`expr 2 + 3\` \* 4` 或 $(((2+3)*4)) for循环: 第一种: for N in 1 2 3 do echo $N done 或 for N in 1 2 3; do echo $N; done 或 for N in {1..3}; do echo $N; done 第二种: for ((i = 0; i <= 5; i++)) do echo "welcome $i times" done 或 for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done while循环: 第一种 while expression do command … done 第二种 i=1 while ((i<=3)) do echo $i let i++ Done case语句: 格式 case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *) echo "Usage: {start|stop} “ esac read命令: read -p(提示语句)-n(字符个数) -t(等待时间) read -p "please input your name: " NAME 使用示例: if判断 语法 if condition then statements [elif condition then statements. ..] [else statements ] fi if例子 #!/bin/bash read -p "please input your name:" NAME #printf '%s\n' $NAME if [ $NAME = root ] then echo "hello ${NAME}, welcome !" elif [ $NAME = itcast ] then echo "hello ${NAME}, welcome !" else echo "SB, get out here !" fi 判断语句: [ condition ] (注意condition前后要有空格) #非空返回true,可使用$?验证(0为true,>1为false) [ itcast ] #空返回false [ ] 判断语句: [ condition ] && echo OK || echo notok 条件满足,执行后面的语句 常用判断条件: = 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 常用判断条件: -r 有读的权限 -w 有写的权限 -x 有执行的权限 -f 文件存在并且是一个常规的文件 -s 文件存在且不为空 -d 文件存在并是一个目录 -b文件存在并且是一个块设备 -L 文件存在并且是一个链接 Shell自定义函数: 语法 [ function ] funname [()] { action; [return int;] } function start() / function start / start() 注意 1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译 2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值,返回值只能是int。 return后跟数值n(0-255) 脚本调试: sh -vx helloWorld.sh 或者在脚本中增加set -x
Linux里面硬件都是文件(网卡,cpu,光驱),
安装jdk脚本: #!/bin/bash BASE_SERVER=172.16.203.100 yum install -y wget wget $BASE_SERVER/soft/jdk-7u45-linux-x64.tar.gz tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local cat >> /etc/profile << EOF #EOF是文件的开始和结束,把文本内容追加到/etc/profile文件中去。 export JAVA_HOME=/usr/local/jdk1.7.0_45 export PATH=\$PATH:\$JAVA_HOME/bin EOF 免密ssh登陆: #!/bin/bash SERVERS="node-3.itcast.cn node-4.itcast.cn" PASSWORD=123456 BASE_SERVER=172.16.203.100 auto_ssh_copy_id() { #expect -c是等着系统的提示,提示yes/no输入yes,提示password输入第二个参数,expect -c后面跟着字符串 #set timeout -1是永不超时,eof没输入就退出 expect -c "set timeout -1; spawn ssh-copy-id $1; expect { *(yes/no)* {send -- yes\r;exp_continue;} *assword:* {send -- $2\r;exp_continue;} eof {exit 0;} }"; } ssh_copy_id_to_all() { for SERVER in $SERVERS #要安装机器的列表 do auto_ssh_copy_id $SERVER $PASSWORD #第一个参数是遍历的每一个server, done } ssh_copy_id_to_all for SERVER in $SERVERS do scp install.sh root@$SERVER:/root ssh root@$SERVER /root/install.sh done