优秀是一种习惯
Linux文件系统是什么样的结构?
Linux中的命令是如何使用的?
命令 [-选项] 参数
如何实现对Linux中文件的列举、切换、创建及删除?
列举:ls [alhd] 目录
切换:cd 目录
创建
删除
如何实现对Linux中文件的复制、剪切、压缩及打包?
复制:cp [-r] source target
剪切:mv source target
压缩
打包
tar -zcvf :打包并以gzip压缩
tar -zxvf : 解压并解包
Linux中的基本权限有几种?如何实现修改权限?
基本权限
修改权限
chmod a-r,u+x 文件或者目录
chmod 777 文件或者目录
Linux中怎么查看、关闭进程?
查看:ps -ef , jps
关闭
kill -9 pid:关闭后台进程
Ctrl +c :终止前端进程
Linux中怎么管理服务的启动、关闭、重启以及设置开启自启动?
systemctl start|stop|restart|status|enable|disable 服务名称
Linux有哪些常见符号命令及其功能?
|:管道,实现数据传递
ps -ef | grep ssh
~:当前用户的家目录
>:输出重定向命令,覆盖
>>:输出重定向命令,追加
`:执行符号
.:当前目录
..:上一级目录
\:命令的换行符
Linux中文本编辑的两种方式
vi/vim命令的使用
语法:vim 文件
命令模式
编辑模式
末行模式
进入:在命令模式下按冒号
功能:一般用于实现文件的保存等
命令
q:退出
w:保存
wq:保存退出
!:强制的
x:保存退出,不能写大写的X
替换
n,ms/你要替换谁/替换成什么/g
远程编辑工具notepad的使用
如果要实现复杂的文本的编辑,用远程编辑工具更加方便
notepad:安装插件来实现:NPP
安装插件
- 离线安装
- step1:离线下载插件Npp
目标:掌握Linux系统中网络配置及VM中虚拟机网络的配置
路径
实施
Linux中网卡配置管理
查看网络信息
ifconfig
查看网络配置
more /etc/sysconfig/network-scripts/ifcfg-ens33
修改网络配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改网络地址获取方式为静态
#修改第4行
BOOTPROTO="static"
添加静态网络配置信息
#文件末尾添加以下内容
IPADDR="192.168.88.130"
GATEWAY="192.168.88.2"
NETMASK="255.255.255.0"
DNS1="8.8.8.8"
DNS2="114.114.114.114"
IPV6_PRIVACY="no"
重启网络配置
systemctl restart network
防火墙管理
大数据平台中一般不开启防火墙
工作中:如果使用,需要让运维配置各种访问规则
因为大数据集群时内网集群,不对外连接,可以不开防火墙
关闭防火墙并设置开机禁止启动
systemctl stop firewalld.service
systemctl disable firewalld.service
VM虚拟机常见问题
小结
目标:掌握Linux中的远程文件交互的实现
路径
实施
- 上传
```
rz
```
小结
目标:了解Linux中软件安装的四种方式
路径
实施
RPM包安装
类似于Windows上.exe文件的安装,运行文件,自动安装
文件的格式:xxxx.rpm
命令
#安装
rpm -ivh 文件路径/包的名称.rpm
#卸载,--nodeps,强制不考虑依赖的卸载
rpm -e [--nodeps] 包的名称
#查询
rpm -qa | grep MySQL
缺点:安装的时候必须先安装依赖,才能安装这个软件
YUM安装
类似于Java中的Maven的仓库管理方式
将所有软件以及对应的依赖都放在公共仓库中
通过yum安装软件时,自动根据依赖关系,下载依赖并且按照顺序进行自动安装
命令
#安装
yum install -y 包的名称
#卸载
yum remove -y 包的名称
#查询
yum list installed
注意
必须配置Yum仓库
配置文件
- 运维会配置局域网YUM源
编译安装
免安装
小结
目标:实现Linux系统中MySQL的安装部署
路径
实施
配置YUM源
下载MySQL的yum源
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
安装yum源
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
- 修改yum源
```
cd /etc/yum.repos.d/
vim mysql-community.repo
```
```shell
#修改第13行,更改为1,表示启用MySQL5.6
enabled=1
#修改第28行,更改为0,表示禁用MySQL8
enabled=0
```
安装MySQL
安装MySQL
yum -y install mysql-community-client mysql-community-server mysql-community-devel
- 启动MySQL服务
```
systemctl start mysqld.service
systemctl enable mysqld.service
```
- 查看状态
```
systemctl status mysqld.service
```
登陆测试配置
登录
mysql -uroot
重置MySQL管理员用户密码
set password = password('123456');
- 授权
```sql
#允许root用户从任何一台机器通过123456密码登录访问任何一个数据库中的任何 一张表,拥有所有权限
grant all privileges on *.* to 'root'@'%' identified by '123456';
delete from mysql.user where host != '%';
flush privileges;
```
- 退出重新登录
exit;
mysql -uroot -p
123456
小结
目标:实现Linux中JDK的安装
路径
step1:创建安装目录
step2:上传解压安装
step3:配置环境变量
实施
创建安装目录
#用于存放软件的安装包
mkdir -p /export/software
#用于存放安装的目录
mkdir -p /export/server
#用于存放临时测试的数据
mkdir -p /export/datas
上传解压安装
cd /export/software/
rz
tar -zxvf jdk-8u241-linux-x64.tar.gz -C /export/servers/
配置环境变量
Linux中全局环境变量的配置文件:/etc/profile
配置环境变量
vim /etc/profile
#在文件最后添加以下内容
#JAVA_HOME
export JAVA_HOME=/export/servers/jdk1.8.0_241
export PATH=:$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
jps
小结
目标:了解文本处理命令cut的使用
路径
实施
cut的功能及语法
功能:用于实现结构化数据中列的处理,从文件中筛选列的数据
语法
cut [-dfc] 文件
cut实现列裁剪测试
创建文件
cd /export/data/
mkdir test
cd test
vim stu.txt
id name age score
01 tom 18 78
02 jack 20 85
03 bill 16 90
04 mary 24 77
05 anna 21 85
截取文件中的第1列
cut -d " " -f 1 stu.txt
cut -d " " -f 1,3 stu.txt
cut -d " " -f 1-3 stu.txt
cut -d " " -f 2- stu.txt
cut -d " " -f -3 stu.txt
cut -c 1-5 stu.txt
小结
目标:了解文本处理命令wc与du命令的功能与用法
路径
实施
wc的功能与用法
功能:统计文本中字符、单词、行的个数
语法
wc [-cwl] 文件
测试
[root@node1 test]# wc stu.txt
6 24 87 stu.txt
[root@node1 test]# wc -c stu.txt
87 stu.txt
[root@node1 test]# wc -w stu.txt
24 stu.txt
[root@node1 test]# wc -l stu.txt
6 stu.txt
[root@node1 test]#
du的功能与用法
功能:用于统计文件大小
语法
du [-sh] 目录或者文件
测试
小结
Shell脚本的功能与应用场景
Shell脚本的开发规则
什么是shell?
开发规则
step1:必须在脚本文件的头部声明解释器类型
#!/bin/bash
step2:在脚本文件中写Linux命令以及其他语法
step3:脚本必须拥有执行权限,才可以被运行
chmod u+x 脚本文件
Shell脚本测试
开发一个脚本,打印当前路径并列举根路径下面的内容
mkdir /export/data/shell
cd /export/data/shell
#!/bin/bash
#print work dir
pwd
#list the root path
ls /
#!/bin/bash
#get yesterday
yesterday=`date -d '-1 day' +%Y-%m-%d`
#print yesterday
echo "${yesterday}"
目标:掌握Shell脚本中的变量类型与使用
路径
实施
系统变量
内置变量
脚本默认提供的几个变量
$0:表示当前脚本的名称
$1 ~ $9:脚本第1个参数到第9个参数
$# :脚本传递参数的个数
$?:上一条命令执行的结果,0表示上一条命令正确执行成功
$*:所有参数值,所有参数是一个整体
$@:所有参数值,每个参数是独立的
#!/bin/bash
echo $0
echo $1
echo $2
echo $9
echo $#
echo $?
echo $*
echo $@
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XHJT0i1-1618744469790)(Day02_20210418_Linux进阶(一).assets/image-20210418151024835.png)]
用户变量
定义:var=value
[root@node1 shell]# a=1
[root@node1 shell]# b=2
[root@node1 shell]# echo $a
1
[root@node1 shell]# echo $b
2
[root@node1 shell]#
注意
变量使用
引用:${var}
只读:readonly
[root@node1 shell]# re=6
[root@node1 shell]# echo $re
6
[root@node1 shell]# re=8
[root@node1 shell]# echo $re
8
[root@node1 shell]# readonly re
[root@node1 shell]# echo $re
8
[root@node1 shell]# re=10
-bash: re: 只读变量
[root@node1 shell]#
删除:unset
[root@node1 shell]# c=9
[root@node1 shell]# echo $c
9
[root@node1 shell]# unset c
[root@node1 shell]# echo $c
[root@node1 shell]#
小结
Shell脚本中的变量有哪几种以及如何使用?
目标:掌握Shell中字符串的处理
路径
实施
Shell中字符串的定义
定义:变量名=“字符串内容”
[root@node1 shell]# str1=I
[root@node1 shell]# str2=Like
[root@node1 shell]# echo ${str1}
I
[root@node1 shell]# str3="I Like"
[root@node1 shell]# echo ${str3}
I Like
[root@node1 shell]#
Shell中字符串的处理
截取:${变量名:N:M}
[root@node1 shell]# echo ${str3:3:2}
ik
N:从哪一位开始截取的下标,下标从0开始
M:截取的长度
拼接:直接使用双引号拼接
[root@node1 shell]# echo "${str3} itcast"
I Like itcast
[root@node1 shell]# str4="${str3} itcast"
[root@node1 shell]# echo ${str4}
I Like itcast
长度:${#变量名}
[root@node1 shell]# echo ${#str1}
1
[root@node1 shell]# echo ${#str2}
4
[root@node1 shell]#
小结
目标:掌握Shell中数值的运算
路径
实施
计算命令expr
[root@node1 shell]# expr $a + $b
3
计算表达式
中括号
[root@node1 shell]# echo $[ a + b ]
3
[root@node1 shell]# echo $[ $a + $b ]
3
圆括号
[root@node1 shell]# echo $((a+b))
3
[root@node1 shell]# echo $(($a+$b))
3
[root@node1 shell]#
小结
目标:掌握Shell中判断语句的使用
路径
实施
条件判断if
语法
方式一:单条件单结果
if [ 条件 ]
then
满足条件怎么处理
fi
方式二:单条件双结果
if [ 条件 ]
then
满足条件怎么处理
else
不满足条件怎么处理
fi
方式三:多条件多结果
if [ 条件1 ]
then
满足条件1怎么 处理
elif [ 条件2 ]
then
满足条件2怎么处理
……
else
都不满足怎么处理
fi
判断条件表达式
文件
-e:用于判断这个文件是否存在
-f:用于判断这是否是个文件
-d:用于判断这是否是个目录
-w:用于判断是否有可写权限
-r:用于判断是否有可读权限
数值
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
字符串
测试
判断/etc/passwd文件是否存在
#!/bin/bash
if [ -e /etc/passwd ]
then
echo "exists"
else
echo "not exists"
fi
判断/etc/passwd是否是一个文件
判断一个目录是否存在,如果不存在,就创建
#!/bin/bash
if [ -e $1 ]
then
echo "exists"
else
#不存在就创建
mkdir $1
fi
判断两个数字是否相等
判断两个数字大小,得到比较的结果
#!/bin/bash
read -p "请输入第一个数字:" a
read -p "请输入第二个数字:" b
if [ $a -eq $b ]
then
echo "a=b"
elif [ $a -gt $b ]
then
echo "a>b"
else
echo "a
fi
判断输入参数的个数
#!/bin/bash
if [ $# -eq 2 ]
then
echo "bingo"
else
echo "参数个数不合法,请给定两个参数"
#强制退出
exit 100
fi
echo "这是一条测试语句"
判断字符串是否相等
判断是否为空
#!/bin/bash
if [ -n "$1" ]
then
echo "第一个参数的值:$1"
else
echo "没有第一个参数"
fi
多条件判断:并且:&& / -a
#参数个数必须为2,而且第一个参数的值必须为itcast
if [ $# -eq 2 ] && [ $1 = "itcast" ]
then
echo "参数个数没问题,你很优秀"
else
echo "参数个数不正确或者第一个参数值不正确,请重新执行"
fi
#参数个数必须为2,而且第一个参数的值必须为itcast
if [ $# -eq 2 -a $1 = "itcast" ]
then
echo "参数个数没问题,你很优秀"
else
echo "参数个数不正确或者第一个参数值不正确,请重新执行"
fi
多条件判断:或者:|| / -o
#参数个数为2个,或者第一个参数的值为itcast
if [ $# -eq 2 -o $1 = "itcast" ]
then
echo "参数个数没问题,你很优秀"
else
echo "参数个数不正确或者第一个参数值不正确,请重新执行"
fi
#参数个数为2个,或者第一个参数的值为itcast
if [ $# -eq 2 ] || [ $1 = "itcast" ]
then
echo "参数个数没问题,你很优秀"
else
echo "参数个数不正确或者第一个参数值不正确,请重新执行"
fi
值判断case
语法
case value in
v1)
等于v1,执行的语句
;;
v2)
等于v2,执行的语句
;;
……
*)
如果都不满足,执行的语句
;;
esac
判断输入
#!/bin/bash
read -p "请输入y或者n:" input
case $input in
"y")
echo "你的输入是yes"
;;
"n")
echo "你的输入是no"
;;
*)
echo "你的输入不正确"
;;
esac
小结
Shell中如何实现条件判断?
if
方式一
if [ 条件 ]
then
fi
方式二
if [ 条件 ]
then
else
fi
方式三
if [ 条件1 ]
then
elif [条件2]
……
else
fi
case
case 变量 in
v1)
符合v1的操作
;;
v2)
符合v2的操作
;;
……
*)
都不符合的结果
;;
esac
目标:掌握Shell中循环的语法实现
路径
实施
for循环
语法
方式一:一般用于迭代取非数值的循环
for var in 取值范围
do
每次循环要执行的命令
done
方式二:一般用于取数值,用于对数组迭代
for((i=0;i<=10;i++))
do
每次循环要执行的命令
done
测试
#!/bin/bash
for name in tom jack lily lucys
do
echo $name
done
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
#!/bin/bash
for((i=1;i<=5;i++))
do
echo $i
done
#!/bin/bash
for i in {1..5}
do
echo $i
done
#!/bin/bash
for i in `ls /export/data/shell/`
do
echo "当前文件的名称为:$i"
done
while循环
语法
while [ 条件 ]
do
满足条件就执行的命令
done
举个栗子
#!/bin/bash
i=1
while [ $i -lt 5 ]
do
echo $i
i=$((i+1))
done
#!/bin/bash
i=1
sum=0
while [ $i -le $1 ]
do
echo "当前的i = $i,当前的sum = $sum"
let sum=sum+$i
let i++
done
echo $sum
死循环
for((;;))
do
echo "hehe"
done
while true
do
echo "hehe"
done
while :
do
echo "hehe"
done
break与continue
break:跳出整个循环体
#!/bin/bash
while true
do
read -p "please input yes or no :" input
if [ $input = "yes" ]
then
echo "yes"
#跳出循环
break
elif [ $input = "no" ]
then
echo "no"
#跳出循环
break
else
echo "u need think again"
fi
done
continue:跳出本次循环
#!/bin/bash
for((i=0;i<10;i++))
do
#判断当前的值是否是5,如果是5,跳过本次继续下一次循环
if [ $i -ne 5 ]
then
echo $i
else
continue
fi
done
小结
Shell中如何实现循环?
for
方式一
for var in 取值范围
do
done
方式二
for((i=0;i<10;i++))
do
done
while
while [条件]
do
done
Shell中如何控制循环?
目标:了解Shell脚本函数的基本使用
路径
实施
函数的定义
[function] funName(){
你需要执行的命令
[return 值]
}
函数的调用
测试
#!/bin/bash
#先定义函数
fun_print(){
#输出打印
echo "这是一个函数"
}
#调用函数
fun_print
#!/bin/bash
#先定义函数
fun_sum(){
#输入两个数字,求和
read -p "input a : " a
read -p "input b : " b
echo "a=$a b=$b"
return $((a+b))
}
#调用函数
fun_sum
#打印返回值=打印函数调用的结果
echo "a+b=$?"
参数的使用
$n:第n个参数
运行脚本时,作为脚本的输入参数
./xxx.sh $1 $2
调用函数时,作为函数的输入参数
funName $1 $2
区别:作用域不一样
测试
#!/bin/bash
#传递脚本参数
c=$(($1+1))
d=$(($2+2))
#先定义函数
fun_sum(){
#输入两个数字,求和
a=$1
b=$2
echo "a=$a b=$b"
return $((a+b))
}
#调用函数,传递函数参数
fun_sum $c $d
#打印返回值=打印函数调用的结果
echo "a+b=$?"
小结
如何定义?
[function] funName(){
函数体
return
}
如何调用?
如何传参?
目标:了解Shell中数组的使用
路径
实施
数组的定义及取值
定义
arr_name=(v1 v2 v3…… vN)
引用:通过下标引用数组中的数据,下标从0开始
${arr_name[index]}
测试
#!/bin/bash
#定义一个数组
arr1=(1 2 A C "zhangsan")
#赋值
arr1[0]=3
#打印数组的指定元素
echo "${arr1[0]}"
echo "${arr1[4]}"
echo "${arr1[5]}"
#定义一个数组
arr1=(1 2 A C "zhangsan")
#打印数组的所有元素
#echo "${arr1[*]}"
#echo "${arr1[@]}"
#for:直接遍历数组
for i in ${arr1[*]}
do
echo "当前的元素:$i"
done
#获取数组的长度
arrlen=${#arr1[*]}
for((i=0;i<$arrlen;i++))
do
echo "当前的元素:${arr1[$i]}"
done
小结
目标:了解Shell中select语法的使用
路径
实施
select的功能与语法
功能
Linux默认提供的死循环,使用时,必须给定break
选择:将整个集合的元素列举出来,让你选择
语法
select var in 集合
do
done
测试
echo "请选择你最喜欢的操作系统:"
select var in Windows Linux Unix MacOS
do
echo "你的选择是:$var"
break
done
echo "==============根据你的职业,预测你的未来=============="
PS3="请选择你的职业:"
select var in bigdata java python other
do
case $var in
"bigdata")
echo "你要好好珍惜现在的时光!"
;;
"java")
echo "你要好好保护你的头发!"
;;
"python")
echo "要做好进局子的准备!"
;;
*)
echo "你能长命百岁!"
;;
esac
break
done
PS3:专门用于搭配select使用的变量,用作提示
小结
select的功能?
select的使用?
类似于for的语法
select var in 选项
do
done
目标:掌握Shell中脚本的运行方式及嵌套运行
路径
实施
脚本的两种运行方式
方式一:执行文件:一般用于脚本的开发
./fortest.sh
/export/data/shell/fortest.sh
方式二:通过命令来执行文件:一般用于脚本的强制运行或者测试
sh、bash
[root@node1 shell]# bash runtest.sh
请输入y或者n:yes
你的输入不正确
[root@node1 shell]# sh runtest.sh
请输入y或者n:y
你的输入是yes
[root@node1 shell]# sh -x testShell02.sh
++ date -d '-1 day' +%Y-%m-%d
+ yesterday=2021-04-17
+ echo 2021-04-17
2021-04-17
[root@node1 shell]# sh testShell02.sh
2021-04-17
[root@node1 shell]#
脚本的嵌套运行
嵌套方式
方式一
. 调用的脚本的路径和名称
方式二
source 调用的脚本的路径和名称
测试
创建第一个脚本
vim test01.sh
#!/bin/bash
arr2=(1 2 A B C)
添加可执行权限
chmod u+x test01.sh
创建第二个脚本
vim test02.sh
#!/bin/bash
#调用test01.sh
#source /export/datas/shell/test01.sh
. /export/datas/shell/test01.sh
#对test01中的变量进行操
for var in ${arr2[*]}
do
echo $var
done
赋予执行权限
chmod u+x test02.sh
小结
脚本如何运行?
如何嵌套脚本?
方式一
. 运行的脚本
方式二
source 运行的脚本