1.用户管理(用户创建,用户切换,设置或修改密码,删除)
1).超级用户 root 0
2).普通用户 500
3).伪用户 1~499
4).新增用户:# useradd [username]
5).设置或修改密码
第一种:# passwd [username]
第二种:# echo '12346' | passwd --stdin [username]
6).删除用户:# userdel -r [username]
2.用户文件目录权限
1)用户文件的目录权限
修改权限命令: chmod
--> # chmod u+x test
--> # chmod u+x,g+w,o+r test
--> # chmod u-x test
--> # chmod 764 file5
选项: -R, 递归修改
用法: # chmod 777 -R test/
2)修改所有者的命令:# chown user01:user01 test/
3、管道符、追加/覆盖符号
1) | grep 表示将前一个命令的输出结果传递给后面的命令处理,两边都是命令
2)>> echo "今天时星期四" 1 >> /dev/null
3) >
4) \
4.sudo 权限
user01 ALL=(root) NOPASSWD:ALL
# visudo
5.压缩和解压缩
.gz
.tar
.tar.gz
gzip gunzip
tar
tar -zxf xx.tar.gz -C yy/
6.软件包管理(.rpm)
rpm -ivh(安装) -qa | grep (查看) -e --nodeps (卸载)
yum list installed | grep -y install -y remove
7. 综合练习
java 环境变量 /etc/profile(系统变量) .bash_profile(用户变量)
一、关闭防火墙和安全子系统 (Hadoop HBase这样的分布式集群应用需要)
--》在联机应用(分布式)中,一般会关闭防火墙。防火墙默认情况下,出于安全考虑会限制一些应用的网络访问(比如rpc通信端口),为了保证多机通信的稳定,可以选择关闭防火墙
1.关闭防火墙并且不开机启动
1).关闭Linux 防火墙
#sudo service iptables status ##查看防火墙状态
iptables: Firewall is not running.
# service iptables stop ##关闭防火墙
2).设置不开机启动防火墙
# chkconfig iptables off ##不随机启动
3).查看防火墙的开机启动设置
$ chkconfig --list | grep iptables
2.关闭安全子系统
# vi /etc/sysconfig/selinux
SELINUX=disabled
二、[服务器类型]
一)、物理机
塔式服务器: CPU( E3 E5 E7 “至强”)
机架式服务器: 机柜(55U) 1U - 4U 电源(双电源) 双网卡(千M) 4-12 块 1T -4T raid 磁盘矩阵
内存:32G内存 64G 128G 256G
刀片式服务器(扩展型号): 支持热插拔
二)、云计算(云主机)
阿里云 腾讯云 京东云
三、
s
hell 编程 (自动化运维 )
第一部分:
shell脚本的规范
1.第一行:#!/bin/sh开头 或 #!/bin/bash开头
2.注释:#
3.shell脚本以.sh结尾
4.执行shell基本的两种方式:
1).sh hello.sh #执行shell脚本
2)./hello.sh #这种方式要求这个脚本拥有执行权限
第二部分
shell的变量
定义变量没有数据类型
引用变量需要在变量前面添加$符号
1.shell变量类型
-》环境变量
保存系统运行时使用的变量
-》用户变量
.bash_profile 每个用户主目录下都有这么这个文件,用来
保存每个用户的环境变量
-》系统变量
/etc/profile:系统全局生效的配置文件
-》位置变量
将传递给脚本的参数保存在位置变量中
以便于在脚本中引用这些变量
Bash 定义9个位置变量:$1 ... $9
$0:代表的是当前脚本的名称
#!/bin/sh
echo $2
echo $1
echo $3
执行shell脚本传递参数时,每个参数要以空格隔开
public static void fun1(String str1,int a){
}
-》预定义变量
$0:脚本名称
$!:后台运行的最后一个进程的PID号
$$:当前进程的ID号
$#:当前shell的参数个数
$*显示所有的参数内容(整体)
$@:显示所有的参数内容(逐个读取)
$?:判断,表示程序退出的代表(返回0代表成功,非0代表失败)
#!/bin/sh
echo $0
echo $#
echo $*
echo $@
echo $?
-》自定义变量
语法格式:
tagname=[vlaue]
等号两边不能有空格
变量对大小写敏感
定义以后使用/引用($变量名),调用变量的值
$name
变量的赋值
分三种情况
1.直接赋值 tag1=112
2.将变量值赋值给另一个变量 tag2=$tag1
3.将命令赋值给变量 szie=`ls ~/ ` 飘号或者反引号 在键盘1 2 左边的那个按键
shell的字符串/命令(echo ):
echo 可以不加引号 #可以正常输出的输出变量
echo 加单引号 #可以将单引号中的内容原样输出
echo 加双引号 #可在双引号中输出变量或者使用转义符“\”
value=100
$ echo the value is $value
the value is 100
$ echo the value is "$value"
the value is 100
$ echo the value is '$value'
the value is $value
$ echo the valeu is "'#value'"
the valeu is "#value"
$ echo the valeu is "\"#value"\"
the valeu is "#value"
shell的字符串拼接
字符串拼接不能使用+号;把要添加的字符串变量添加{},并且需要把$放到外面。
第三部分:shell运算
第一种写法 $(( ))
第二种写法 $[]
第三种写法 expr
expr 3 + 5 注意:在expr表达式中,
必须添加空格
如果:expr3+5 则报错
如果:expr 3+5 则直接输出3+5
注意:因为expr本身是一个shell命令,所以在输出的时候需要使用反引号(~,1,2,键的左边)
1.算术运算
echo $((a+b))
echo $(($a*$b))
a=10
b=15
echo $((a+b))
echo $(($a+$b))
echo $((3+5))
echo $[ a + b ]
echo $[ $a * $b ]
echo $[ 10 + 15 ]
echo `expr $a + $b`
echo `expr $a - $b`
echo `expr 9 \* 3`
echo `expr 9 / 3`
echo `expr 9 * 3` -》expr: syntax error 乘法运算符需要加转义
echo `expr a - b` -》expr: non-numeric argument 非数值参数
注:expr 表达式只能接受数值
2.逻辑运算
-》 && 逻辑与 (命令控制符)
cmd1 && cmd2 //前面的命令执行成功才会执行后面的命令
-》 || 逻辑或
cmd1 || cmd2 //前面的命令执行失败才会执行后面的命令
-》 ; 无逻辑符号
cmd1 ; cmd2
第四部分:内置测试判断
分两种:
第一种:test 测试表达式
if test 6 -gt 9
then
echo bigger
fi
第二种:[测试表达式]
a=6
b=9
if [ $a -lt $b ]
then
echo smaller
fi
->第一种比较:数值比较
-eq #equal 等于
-ne #not equal 不等于
-gt #greater than 大于
-ge #greater equal 大于等于
-lt #little than 小于
-le #little equal 小于等于
注意:在数值的比较中,不能使用”>“ "<"等符号来进行比较
在test 或 [] 进行测试的时候,必须要有空格
-》第二种比较:字符串的比较
分为5种比较方式
= 等于
!= 不等于
-z 长度为0则为true(返回0) 不为0为false(返回非0)
-n 长度不为0则为true
$string 字符串不为空则为true(返回0)
#!/bin/sh
str1=abc
str2=abc
str3=def
str4=
if test $str1 = $str2
then
echo $str1和$str2相等;
fi
if [ $str1 != $str3 ]
then
echo $str1和$str3不想等;
fi
if test -z $str1
then
echo $str1长度为0;
fi
if [ -n $str3 ]
then
echo $str3长度不为0;
fi
if test $str4
then
echo $str4不为空;
fi
if [ $str2 ]
then
echo $str2不为空;
fi
》第三种:文件的测试或比较
-d (directory) 如果是目录则为true
-f (file) 如果是文件则为true
-r 如果是可读则为true
-w 如果是可写则为true
-x exec 如果是可执行则为true
注意:可读可写可执行是针对于执行脚本的用户而言的权限
#!/bin/sh
if [ -d $1 ]
then
echo 是目录
fi
if [ -f $1 ]
then
echo 是文件
fi
if [ -r $1 ]
then
echo 是可读的
fi
if [ -w $1 ]
then
echo 是可写的
fi
if [ -x $1 ]
then
echo 是可执行
fi
逻辑表达式:
三种:
1.非 !
2.与 -a
3.或 -o
if [ -f $1 -a $2 -gt 5]
then
echo \$2 is $2
echo "\$2 is bigger than 5 "
fi
if [ ! 2 -lt 5 ]
then
echo 2小于等于5;
fi
可以用逻辑操作符将两个测试表达式结合起来。仅需要用到一对方括号,而不能用两个, 否则将返回错误信息“too many arguments”。
[ "990" -le "995" ] -a [ "123" -gt "33" ]
-bash: [: too many arguments
第五部分 流程控制
1.if
第一种语法格式:
if 条件判断
then
command
fi
#!/bin/sh
if test 3 -eq 3
then
echo Yes
fi
第二种语法格式:
if 条件判断
then
command
esle
command
fi
#!/bin/sh
if [ -d /home/user01/demo ]
then
ls /home/user01/demo
else
mkdir /home/user01/demo
echo 目录创建成功!!
fi
第三种语法格式:
if 条件判断
then
command
elif 条件判断
then
command
elif 条件判断
then
command
...
else
command
fi
e.g.1
#!/bin/sh
echo please type age
read age
if test $age -ge 0 -a $age -lt 3
then
echo baby
elif [ $age -ge 3 -a $age -lt 7 ]
then
echo child
elif [ $age -ge 7 ] && [ $age -lt 18 ]
then
echo teenager
elif test $age -ge 18 && test $age -lt 40
then
echo youth
elif test $age -ge 40 && [ $age -lt 60 ]
then
echo man
else
echo older
fi
e.g.2
#!/bin/sh
# read socre and choose level
# read 相当于Java中的scanner 是一种交互式命令,读取设备的输入
echo "请输入学生成绩score:"
read score
if test $score -ge 90 -a $score -le 100
then
echo level A;
elif [ $score -ge 80 -a $score -lt 90 ]
then
echo level B;
elif [ $score -ge 70 ] && [ $score -lt 80 ]
then
echo level C;
elif test $score -ge 60 && test $score -le 70
then
echo level D;
else
echo 不及格;
fi
2. 循环语句
1)for 循环
第一种语法格式:
for((初始化变量值;结束循环条件;循环控制语句))
do
循环体
done
#!/bin/sh
sum=0
for ((i=0;i<10;i++))
do
echo $i
sum=$[ $sum + i ]
done
echo $sum
第二种语法格式:
for 变量 in 值1 值2 ...值N
do
循环体
done
eg1.
#!/bin/sh
for MONTH in Jan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec
do
echo $MONTH
done
eg2.
#!/bin/sh
for file in `/bin/ls ~`;
do
echo $file;
done
eg3
for File in `ls /home/hadoop/shell`
do
chmod u+x $File
done
2)while 循环
第一种语法格式:
while [ condition #循环条件 ]
do
#statements
#【循环体】
#【循环控制】
done
eg1.
#!/bin/sh
i=1
while [ $i -le 10 ]
do
sum=$((sum+i))
i=$[ i + 1 ]
done
echo $sum
eg2.
#!/bin/sh
i=1
sum=0
while test $i -le 10
do
sum=$[ $sum + $i ]
i=`expr $i + 1`
done
echo $sum
第二种语法格式:
while read -r line
do
#【循环体】
done
eg.
#!/bin/sh
#Read /ect/sysconfig/network-scripts/ifcfg-eh0 and print out
FILE=/ect/sysconfig/network-scripts/ifcfg-eh0
while read -r line
do
echo $line
done < $FILE
3)case 类似于java中的 swich case
第一种语法格式:
#!/bin/sh
echo "input from: one two three"
read input
case $input in
one) echo "your input is one"
;;
two) echo "your input is two"
;;
three) echo "your input is three"
;;
*) echo your input is $input
esa
第二种语法格式:
#!/bin/sh
echo "input from :one two three ....."
read input
case $input in
one | two) echo "your input is one or two"
;;
three | four) echo "your input is three or four "
;;
five) echo "your input is five"
;;
*) echo your input is $input
esac
shell脚本的调用(在一个脚本中去调用另外一脚本)
eg.
#!/bin/sh
source /home/hadoop/shell/hello.sh
三、date 命令
一)显示系统时间
1.date CST中央标准时间
$ date
Mon Jun 5 15:11:44 CST 2017
2.date -R 带时区的时间
$ date -R
Mon, 05 Jun 2017 15:14:44 +0800
二)格式化日期
$ date '+%Y-%m-%d %H:%M'
2017-05-02 11:20
$ date '+%Y/%m/%d %H:%M'
2017/05/02 11:20
$ date '+
%Y
%m%d %H:%M'
20170502 11:20
# date "+
%y
%m%d %H:%M"
# date +%Y-%m-%d
回到2天前:
$ date -d '2 day ago' '+%Y/%m/%d/ %H-%M
$ date -d '3 hour ago' '+%Y/%m/%d %H:%M:%S'
三)设置时间
选项:-
s set
# date -s "2016-12-08 10:43:00
ntpdate 命令
用法:# ntpdate 网络时间服务器 可以是同步
ntp.api.bz, 也可以同步ntp.sjtu.edu.cn
202.120.2.101
上海交通大学
sla.time.edu.cn 北京邮电大学
slb.time.edu.cn 清华大学
# sudo ntpdate ntp.api.bz
国内常用NTP服务器地址及IP
四、Crontab计划任务
-->周期性执行计划任务
选项使用:
crontab -l (list ) #查看目前的计划任务列表
crontab -r (remove) #删除计划任务,不要轻易执行这条任务,会将所有的定时任务都删除
crontab -e (eidt) #编辑周期性计划任务
进程名称是crond
ps -ef | grep crond $查看此进程是否开启
默认进程是开启的,如果没有开启,可以使用命令手动开启
# service crond status
# service crond start
# service crond stop
# service crond restart
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * *
分钟 小时 天(of月) 月(of年) 星期(of周)
每天晚上18:00执行一次 拷贝 /home/uer01/2.log 文件到 /opt/software 的任务
0 18 * * * /bin/cp /home/uer01/2.log /opt/software
15 18 * * * /bin/cp /home/uer01/2.log /opt/software
每天晚上6点到第二天早上6点 每15分钟记录一次时间 到 /home/uer01/2.log 文件中(两种方法)
*/15 18-23,0-6 * * * /bin/date >> /home/user01/2.log
0,15,30,45 18-23,0-6 * * * /bin/date -R >> /home/user01/2.log
注意:如果是离散的值,使用“,”进行分割
如果是连续的值,使用“-”进行连接
每天上午6点-12点 每2小时执行一次sh datelog.sh文件
0 6-12/2 * * 7 /bin/sh /home/user01/datelog.sh
datelog.sh
#!/bin/sh
/bin/echo "当前时间是:" >> /home/user01/2.log
/bin/date -R >> /home/user01/2.log
五、 vi编辑器 高级特性
vi快捷方式
显示行号: set nu,进入最后行模式使用
、
光标快速移动到第一行,小写gg, 命令模式使用
光标快速移动到最后一行,大写G, 命令模式使用
光标快速移动到行首,Home, 命令模式使用
光标快速移动到行末,End, 命令模式使用
删除一行,小写dd,(带有剪切功能)命令模式使用
粘贴一行,小写p,命令模式使用
删除多行,小写dd,加上数字,比如三行就是3dd,命令模式使用
撤销上一步的操作,小写u,命令行模式使用
删除、拷贝命令
在命令模式下
dd 剪切一行
ndd 剪切光标下方n行
yy 复制一行
nyy 复制光标下方n行
p 粘贴
替换内容
在最后行模式下使用
1,$s/nologin/88888/g
->1表示第一行
->$表示最后一行
(1,$)表示的是一个范围,比如(5,$)
->/nologin/88888/表示替换和被替换
-g表示通行
34s/user01/user02
搜索命令
在命令模式下,搜索一个字符串string
/string
n 继续搜索下一个
N 搜索上一个出现的位置
六、系统管理命令
1.
top 查看系统资源 -->相当于任务管理器
每隔3秒更新一次
按q退出浏览状态
2.
free 查看内存信息 --》 可能会用到
选项:-m, 就是以MB格式显示
3.
df -l 查看硬盘分区的使用信息
4
.ps -ef 查看系统进程
ps -ef | grep crond
jps 查看系统正在运行的java进程
5.
kill 杀死正在进行的进程 -》结合jps一起使用
选项:-9
kill -9 【pid】
6.
ifconfig 查看系统所有网卡的IP mac信息
7.
ping 检测网络质量和网络连接 检测当前主机与目标主机之间的网络连接状态和连接质量
ping 主机名
ip地址
域名
8、
netstat 查看网络端口 net status
选项:
-t #监控tcp协议的进程
-l #listenning
-n #显示端口号信息
-p # 显示进程的PID
netstat -antp | grep
hive --metastore 9083
--hiveserver2 10000
9、
jps 查看正在运行的java进程
3815 Jps
pid(process id) J(java) ps(process)
pid是系统自动分配的进程id号 进程重启 id号自动变化
七、克隆虚拟机 快照 VMware
1.关闭Linux系统 关机:init 0 ; poweroff ; halt; shutdown
重启:init 6 ; reboot
2. 虚拟机--》快照管理器--克隆
虚拟机--》管理 --》克隆
选择完整克隆而非克隆链接
3.克隆出来的虚拟机 要修改主机名还有ip地址,关键是要修改网卡信息
4.# vi /etc/hosts
修改主机映射:个人的配置为:
192.168.7.11 Linux03
# vi /etc/sysconfig/network
修改主机名 个人的配置为:apache(原)--》apche clone(克隆)
5.网卡的信息(mac地址HWADD)
# vi /etc/udev/rules.d/70-persistent-net.rules
删除原来的网卡信息通过mac地址来区分,删除原来的信息
并将新的网卡的name信息改为eth0
6.重命名网卡配置名称
# mv /etc/sysconfig/network-scripts/ifcfg-Auto_eth1 /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
# service network restart
7.修改网卡名称:将Auto_eth1 修改为System eth0
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:8f:24:b5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
8.# reboot 重启虚拟机(因为修改了主机名)
同时修改windows中主机映射,增加:
C:\Windows\System32\drivers\etc\hosts
192.168.7.55
java.apache.com
八、搭建Hadoop集群的3台虚拟机的要求:
主机名 ip地址 username password
1 hadoop1 192.168.x.4 xxx 123456
2 hadoop2 192.168.x.5 xxx 123456
3 hadoop3 192.168.x.6 xxx 123456
所有节点上的主机映射都一样,都包含所有的节点洗信息
192.168.x.4 hadoop1
192.168.x.5 hadoop2
192.168.x.6 hadoop3
所有节点检查以下内容:
1.关闭防火墙
$ sudo service iptables status
iptables: Firewall is not running.
2.不随机启动防火墙
$ sudo chkconfig --list | grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
3.关闭安全子系统
$ cat /etc/sysconfig/selinux
SELINUX=disabled
4.安装jdk
$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)