Linux基础
1.网络配置
1.正常启动
2.进入虚拟机删除两个文件
a) rm /etc/udev/rules.d/70-persistent-net.rules
b) rm /etc/sysconfig/network-scripts/ifcfg-eth0
4.启动虚拟机 reboot
5.查看网络设备信息
a) cat /etc/udev/rules.d/70-persistent-net.rules
6.复制网卡配置信息
7.新建一个网卡的配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
8.填写以下信息
DEVICE=eth0
HWADDR=00:50:56:36:ee:a8 需要修改(粘贴网卡)
ONBOOT=yes
BOOTPROTO=dhcp
9.重启网卡
service network restart
10.查看分配的ip ifconfig
11.这时候,建议CRT连接ip,并修改网卡为静态ip
DEVICE=eth0
HWADDR=00:50:56:3E:1B:6E
ONBOOT=yes
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.140.137
GATEWAY=192.168.140.2
GATEWAY(网关地址):
2.Linux基本命令
1. 创建用户
# useradd scy 创建用户-会在系统的家目录下创建一个自己的用户目录并给我们创建一个用户组
# passwd scy 设置密码
# su scy 切换用户
2.Linux系统的主机名称
查看主机名称:# hostname
临时设置主机名称:# hostname scy (仅在当前生效,重启无效)
永久设置主机名称:vi /etc/sysconfig/network (永久生效)
3.重启系统
4.主机名与IP地址映射
centos:/etc/hosts
win10:C:\Windows\System32\drivers\etc\hosts
IP 主机名 域名
192.168.91.131 centos6 hadoop-scy.com
检查:win10上ping域名
5.Linux下文件类型
a:文件(用“-”表示)
b:目录(相当于文件夹用“d”表示)
c:链接(相当于快捷方式用“l”表示)
文件类型 拥有者(u) 所属组(g) 其他人(o)
drwxr-xr-x. ---> d rwx r-x r-x
(二进制表示) 7 5 5
6.设置文件的权限
chmod
# chmod u/g/o -/+ r/w/x 文件名
7.改变文件拥有者和所属组
chown
# chown scy /home/xxx.txt
chgrp
# chgrp scy /home/xxx.txt
可以使用一条语句完成上面的操作:
# chown scy:scy /home/xxx.txt
如果针对的是目录则需要使用递归进行改变 -R
8.查看文件的几种方式
# cat 查看全部内容
# more 翻页查看
# tail -f 查看实时日志文件
eg: tail -200f xxx.log
# head 开头文件,文件格式/样式
# clear 清屏
# pwd 打印当前目录的绝对路径
# cat 查看文件内容
# vi 编辑
快捷键:
查看模式:
dd(删除光标所在行)
ZZ(保存文件内容)
x(删除光标所在字符)
o(表示在光标所在字符下一行输入)
# ls -a
# man + 命令 查看命令帮助文档
# cp 拷贝
cp -R source destination
# mv 重命名/移动
# rm 删除
rm -rf xxx递归删除
# 创建目录:mkdir -p /../.. 创建多级目录
# 文件创建:touch 和 vi
# 链接(快捷方式)
软链接:ln -s readme.txt rm.txt (有箭头)
硬链接:ln readme.txt rm.txt (无箭头)
区别:硬链接相当于拷贝,软链接相当于同步共用一个文件(一致性)。
# 文件内容追加: echo ' ' >> xxx.txt
# 文件搜索:find ~/ -name file || find ~/ -name scy\*
3.Linux系统管理
1.查看系统信息
uname 查看系统是什么操作系统
uname -r 查看系统内核版本
cat /proc/cpuinfo 查看cpu信息
cat /proc/meminfo 查看内存信息
date 查看系统日期时间 -R查看区时
设置系统日期与时间:#date -s 2020-3-25
#date -s 18:20:00
cal + 2018 查看日历表
cal 12 2020 查看2020年12月的日历
2.磁盘相关:
df -lh 显示已经挂载的分区磁盘使用情况
du -sh /home/scy/ 查看目录磁盘使用大小
修复磁盘,自动修复
fsck /dev/sda3
查看挂载磁盘信息
mount
mount /dev/sda1 /data01 挂载磁盘
umount dev/sda1 卸载磁盘
3.内存相关:
free -m 以M为单位查看系统内存
top 查看各个进程的使用情况
4.Linux下的软件安装
1.rpm
rpm -qa | grep java (查询)
rpm -e --nodeps xxx xxx xxx(卸载多个空格隔开)
rmp -ivh xxx.rpm
2.tar
源码-->编译(不推荐)
3.zip软件
unzip xxx.zip(解压)
zip xx.zip file (压缩)
4.tar软件
tar -zxvf xxx.tar.gz -C dir(解压到指定目录)
tar -zcvf xxx.tar.gz dir(压缩)
jdk安装:解压->修改/etc/profile->设置JAVA_HOME->添加到系统PATH
## JAVA_HOME
export JAVA_HOME=/home/scy/softwares/jdk1.8.0_141
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
echo $PATH;echo $JAVA_HOME
5.yum(需要配置源)--->解决了软件包的依赖关系与安装顺序
5.设置普通用户的sudo权限
$ su
# vi /etc/sudoers 或者visudo
第一行添加如下命令
scy ALL=(root)NOPASSWD:ALL(最常用)
scy ALL=(ALL) ALL (不常用)
6.查看防火墙是否关闭
sudo service iptables status
sudo service iptables stop(关闭防火墙)
sudo service iptables start(开启防火墙)
sudo chkconfig iptables off/on(永久关闭/开启防火墙)
*sudo chkconfig --list | grep iptables 查看iptables服务是否在3中为off
7.httpd服务开启
sudo yum install httpd
sudo service httpd status
sudo service httpd start
sudo chkconfig httpd on
* sudo chkconfig --list | grep httpd 查看httpd服务是否在3中为on
8.selinux禁用
sudo vi /etc/sysconfig/selinux
令SELINUX=disabled
9.调度功能crontab
针对用户:
每个用户都可以调度自己的任务
crontab -e 编辑定时任务
crontab -l 查看所有定时任务
crontab -r 删除所有定时任务
*/1 * * * * /bin/date >> /home/scy/scy.txt 每分钟写一次日期
* * * * *
分(1-59) 时(0-23) 日(1-31) 月(1-12) 星期(0-6;0表示周日)
例子: 1.每天21:30执行(30 21 * * * cmd)
2.每个月1,11,21号的2:30执行(30 2 1,11,21 * * cmd)
3.每周六或者每周日:1:45(45 1 * * 6,0 cmd)
4.每天20点到23点每半个小时执行一次(0,30 20-23 * * * cmd)
5.每一个小时执行一次(* */1 * * * cmd)
Linux基础增强
1.查找命令:
grep 命令:查看某个系统进程
ps -ef | grep xxx
ps -ef | grep sshd 查找指定 ssh 服务进程
ps -ef | grep sshd | grep -v grep 查找指定服务进程,排除 gerp 本身
ps -ef | grep sshd –c 查找指定进程个数
cat a.txt | grep -f b.txt 从文件中读取关键词进行搜索
输出 a.txt 文件中含有从 b.txt 文件中读取出的关键词的内容行
cat a.txt | grep –nf b.txt 从文件中读取关键词进行搜索,显示行号
grep -n 'hello' a.txt 从文件中查找关键词,并显示行号
cat test.txt |grep ^u 找出以 u 开头的行内容
cat test.txt |grep ^[^u] 输出非 u 开头的行内容
cat test.txt |grep hat$ 输出以 hat 结尾的行内容
cat test.txt |grep -E "ed|at" 显示包含 ed 或者 at 字符的内容行
find 命令:find 路径 查找类型 查找名称 find / -name hello.txt
find . -name "*.log" -ls 在当前目录查找以.log 结尾的文件, 并显示详细信息。
find /root/ -perm 777 查找/root/目录下权限为 777 的文件
find . -type f -name "*.log" 查找当目录,以.log 结尾的普通文件
find . -type d | sort 查找当前所有目录并排序
find . -size +100M 查找当前目录大于 100M 的文件
locate命令:查找某个路径下面以什么内容开头的文件 locate /etc/sh
whereis命令: 主要用于定位所有关于文件的路径 whereis ls
which命令: 主要用于定位可执行文件的路径
2.查看端口
netstat -nltp 查看所有正在运行的端口
3.时间同步
yum -y install ntpdate
crontab -e
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com
实验前规划三台主机
主机 | hostname | domain |
---|---|---|
192.168.124.110 | node1.hadoop.com | node1 |
192.168.124.120 | node2.hadoop.com | node2 |
192.168.124.130 | node2.hadoop.com | node3 |
在Linux与windows实现域名映射
统一路径:
mkdir -p /export/softwares 存放软件的压缩包
mkdir -p /export/servers 存放软件解压后的路径
cd servers --> mkdir shells 存放脚本
(1)三台虚拟机关闭防火墙(✔)
(2)三台机器关闭selinux(✔)
(3)三台机器更改主机名(✔)
(4)三台机器做主机名与IP地址的映射(✔)
(5)三台机器机器免密码登录
第一步:在三台机器执行以下命令,生成公钥与私钥
ssh-keygen -t rsa
第二步:拷贝公钥到同一台机器
ssh-copy-id node01.hadoop.com
第三步:复制第一台机器的认证到其他机器
scp /root/.ssh/authorized_keys node02.hadoop.com:/root/.ssh
scp /root/.ssh/authorized_keys node03.hadoop.com:/root/.ssh
(6)三台机器时钟同步
4.Shell基础编程
概述:Shell脚本放入了批量的Linux命令集合
运行shell脚本方式
第一种:bash/sh ./test.sh
第二种: chmod 777 test.sh ---> ./test.sh
1.变量
(1)变量命名:
注意:变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:
首个字符必须为字母( a-z, A-Z)
中间不能有空格,可以使用下划线( _)
不能使用标点符号
不能使用 bash 里的关键字(可用 help 命令查看保留关键字)
(2)变量类型
根据变量的作用于,分为本地变量和环境变量
本地变量:/home/scy/.bash_profile
环境变量(全局变量):/etc/profile
环境变量需要大写 export LANG
注意:可被所有的shell环境下访问
如果父shell进程产生了子shell进程,则环境变量可被继承并复制
(3)变量赋值
特点:等号两边不能有空格
如果要给变量赋空值,可以在等号后面跟一个换行符
显示变量值 echo ${variable} 或"$variable"
命令可以将变量定义为只读变量 $readonly variable
清除变量 $unset variable
显示所有变量 $set
(4)参数传递
在执行 Shell 脚本时, 可以向脚本传递参数。
脚本内获取参数的格式为: $n。 n 代表一个数字, 1 为执行脚本的第一个参
数, 2 为执行脚本的第二个参数,以此类推…… $0 表示当前脚本名称。
(5)位置参量
通过命令行来进行传递参数
$./test.sh beijing
如果参数中有空格需要用引号" "包裹
如: $./test.sh "beijing duck"
# !/bin/bash
echo "hello $1"
echo $0 不同执行方式脚本文件名不一样
echo $? 判断上一个命令是否执行成功(0成功-1失败)
#!/bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
echo "传递的参数作为一个字符串显示: $*";
第一个参数为: 1
参数个数为: 3
传递的参数作为一个字符串显示: 1 2 3
2.特殊字符
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程 ID 号
$! 后台运行的最后一个进程的 ID 号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$? 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。
3.运算符
Shell 和其他编程语音一样,支持包括:算术、关系、 布尔、字符串等运
算符。 原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如
expr。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如加,减,乘,除等操作
*注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 ` ` 包含,注意不是单引号,在 Esc 键下边。
例如,以下表示一些数据的运算
注意:
此外,还可以通过$(())、 $[]进行算术运算。
count=1
((count++))
echo $count
a=$((1+2))
a=$[1+2]
#!/bin/bash
echo "hello world"
a=4
b=20
#加法运算
echo `expr $a + $b`
#减法运算
echo `expr $b - $a`
#乘法运算,注意*号前面需要反斜杠
echo `expr $a \* $b`
#除法运算
echo `expr $b / $a`
4.流程控制
if else 语句
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
条件表达式写法:
EQ 就是 EQUAL等于
NQ 就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi
1.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
2.while
#!/bin/bash
i=1
while (( i <= 3))
do
let i++
echo $i
done
3.case语句
case 值 in
模式 1)
command1
command2
...
commandN
;;
模式 2)
command1
command2
...
commandN
;;
esac
使用case语句实现交互会话
#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
5.函数
1.所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至
shell 解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可。
[ function ] funname [()]
{
action;
[return int;]
}
、可以带 function fun()定义,也可以直接 fun() 定义,不带任何参数。
2、参数返回,可以显示加 return ,如果不加,将以最后一条命令运行结
果,作为返回值。 return 后跟数值 n(0-255)。
#!/bin/bash
hello(){
echo "hello world"
echo "第一个参数为 $1"
echo "第二个参数为 $2"
}
hello abc 123
hello $1 $2 #外部输入
(5)数组
定义一个数组:
$arr=(zhangsan lisi wangwu)
$echo ${arr[0]} 查看数组中的元素
$echo ${arr[*]} 查看所有元素
$echo ${#arr[*]} 查看数组个数
(6)日期
date
$date +%Y/%m/%dT%H:%M:%S 2020/03/25T08:06:30
例子test.sh:
# !/bin/bash
date1=$(date +%Y-%m-%d) 当前日期
echo $date1
date2=$(date --date='2 days ago' +%Y-%m-%d) 两天前
echo ${date2}
date3=$(date --date='-1 days ago' +%Y-%m-%d) 一天后
echo ${date3}
(7)条件判断
[]相当于test
#!/bin/bash
#!/bin/bash
for var in 1 2 3 4 5
do
echo ${var}
done
echo "--------"
num=10
s=0
for((i=0;i<${num};i=i+1))
do
s=$((${s}+${i}))
done
echo ${s}
echo "--------"
echo ${date}
echo "--------"
SLAVE_FILE = /opt/app/hadoop-2.5.0/etc/hadoop/slaves
cat ${SLAVE_FILE } | while read line
do
echo ${line}
done