学习目标
掌握linux相关知识
学习内容
tar :
linux 处理 归档文件的命令
归档文件:
普通文件:1.log 1m
归档文件:1.log.tar 1m
压缩文件:1.log.tar.gz 0.9m
1.普通 =》压缩 归档文件
1.log =》1.log.tar.gz
tar -zcvf xxx.tar.gz file…
-cf => 创建一个新归档 + 使用归档文件
z => 压缩 gz
v =》详细地列出处理的文件
eg:
[root@sygy10 ~]# tar -zcvf dir.tar.gz dir2 dir4 jdk-8u212-linux-x64.tar.gz
2.解压
tar -zxvf xxx.tar.gz
-xf => 解压 +使用归档文件
z => 压缩 gz
v =》详细地列出处理的文件
百度 、谷歌 、 加一个功能 =》 github 码云 flinkcdc =》 maxwell 源码 =》 flink antrl4 sql
shell :
1.什么是shell ? 脚本语言 python
1.一个编程的语言
2.可以执行的文件
3.文件内容 linux命令组成的
1.shell语法入门
1.入门
1.文件 xxx.sh 结尾
2.第一行 #!/bin/bash
1.编写脚本
vim wc.sh
2.得有执行权限【不一定】
1.不给文件权限
sh xxx.sh
[root@sygy10 shell]# sh ./wc.sh
word count
[root@sygy10 shell]# cat wc.sh
#!/bin/bash
echo "word count"
2.给文件 执行权限
[root@sygy10 shell]# chmod 744 ./wc.sh
[root@sygy10 shell]# ./wc.sh
word count
[root@sygy10 shell]# sh ./wc.sh
word count
补充:
1.给权限
[root@sygy10 shell]# chmod u+x ./wc.sh
[root@sygy10 shell]# ./wc.sh
word count
[root@sygy10 shell]# ~/shell/wc.sh
word count
[root@sygy10 shell]# sh ~/shell/wc.sh
word count
2. debug
1.[root@sygy10 shell]# sh -x ./wc.sh
2.
#!/bin/bash -x
echo "word count"
2.定义变量 引用
eg:
[root@sygy10 shell]# cat variable.sh
name="zhangsan"
dt1="date"
dt2=`date`
echo $name
echo $dt1
echo $dt2
1.定义变量的方式:
key=value
注意:
1.= 前后不能有空格
2.变量名一般都是大写的【标准】
2.变量的种类:
shell中变量的数据类型 =》 string
1.静态
k="v" k='v' k=v
2.动态
k=`v` : v是变量 v系统自带的命令
3.引用
$k
${k}
任务调度:
shell =》
时间点: T+1 、h+1 20min
20220414 =》20220413
20220414 0:05
1.yarn资源
2.看你几点上班
crontab 命令 =》 定时调度
开源框架:
dophschudule 【恢复数据、重跑数据】
xxl 【shell -》 】
azkanban xx
ozzio xx
airflow 【费劲】
runduck
自己开发
3.shell脚本 参数传递 :
1.$n
$1 $2
[root@sygy10 shell]# cat parameter.sh
echo "脚本文件名: $0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数个数: $#"
echo "传递的参数作为一个字符串: $*"
echo "传递的参数作为一个字符串: $@"
echo "脚本运行时的pid :$$"
补充:
1.传递参数 “空格” 作为符号分割
2.参数本身带有空格 要加双引号
4.数组
语法格式:
arr=(v1 v2 … vn)
1.数组用()表示
2.元素用 空格 分割
eg:
[root@sygy10 shell]# cat arr.sh
arr=(zs lisi ww zl)
echo “所有元素 : ${arr[@]}”
echo “第一个元素 : ${arr[0]}”
echo “元素个数 : ${#arr[@]}”
5.流程控制
分支
循环
1.分支 if else
语法格式:
if condition;then
业务代码
else
业务代码
fi
condition => 条件判断语法
[ condition ]
结果:
非空 true
空 false
[ hadoop ]
$? => 获取上一个程序运行的结果 :
1.成功 0
2.失败 非0的数据
条件表达式:
1.数值判断
= 等于
== 等于
-lt 小于
-eq 等于
-ge 大于等于
-le 小于等于
-gt 大于
-ne 不等于
2.权限判断
-r
-w
-x
3.文件判断
-f
-e
-d
eg:
[root@sygy10 shell]# cat if.sh
name1="zs"
name2="lisi"
if [ ${name1} == ${name2} ];then
echo "等于"
else
echo "不等于"
fi
if elif 语法格式:
if condition;then
业务代码
elif condition;then
业务代码
else
业务代码
fi
eg:
[root@sygy10 shell]# cat if_2.sh
score=$1
if [ ${score} -gt 90 ];then
echo "优秀"
elif [ ${score} -ge 60 ];then
echo "良"
else
echo "不及格"
fi
循环:
语法格式:
foreach:
for el in item1 item2 … itemn
do
业务代码
done
for i :
语法格式 :
for((i=0;i<size;i++))
do
业务代码
done
eg:
[root@sygy10 shell]# cat for.sh
for x in 1 2 3 4
do
echo "${x}"
done
echo "-----------------"
for((i=0;i<5;i++))
do
echo "v is ${i}"
done
while:
while condition
do
业务代码
done
eg:
[root@sygy10 shell]# cat while.sh
i=1
while ((${i}<=5))
do
echo "v is ${i}"
let i++
done
总结:
条件表达式 不能用 < >
while for 能用 < > 不能用 -gt
[] =》 条件判断
() => 数值运算
https://blog.youkuaiyun.com/taiyang1987912/article/details/39551385?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
监控 服务器
ip hostname
linux01 linux02 linux03
df
free
[root@sygy10 shell]# cat split.sh
str="linu01,linu02,linux03"
arr=(${str//,/ })
for linux in $arr[@]
do
echo ${linux}
done
str.split(",")
shell =>
IFS变量 =》 字符串分割的效果
补充: linux 文本分析的 命令
awk =》 取出文本内容
sed =》 文本替换
awk :
1.获取列
[root@sygy10 shell]# cat 1.log | awk ‘{print $1}’
a
1
[root@sygy10 shell]# cat 1.log | awk ‘{print $1,$2}’
a b
1 2
2.获取行
[root@sygy10 shell]# cat 1.log | awk 'NR==1{print}'
a b c
[root@sygy10 shell]# cat 1.log | awk 'NR==2{print}'
1 2 3
[root@sygy10 shell]# cat 1.log | awk 'NR>1{print}'
1 2 3
[root@sygy10 shell]# cat 1.log | awk 'NR>=1{print}'
2.sed
文本替换
1.a 替换成 dd
[root@sygy10 shell]# cat 2.log
a a b
1 a 3
[root@sygy10 shell]# sed -i 's/a/dd/' 2.log #每行 第一次遇到 a 替换成dd
[root@sygy10 shell]# cat 2.log
dd a b
1 dd 3
2.全局替换
把所有的a 都替换成 dd
[root@sygy10 shell]# sed -i 's/a/dd/g' 2.log
坑:
[root@sygy10 shell]# sed -i 's#dd#a#g' 2.log
替换文件路径:
/path/a
p1="/path/a"
p1="/path1/a1"
sed -i 's/\/path\/a/\/path1\/a1/g' 3.log
sed -i 's#/path/a#/path1/a1#g' 3.log
sql => 文件
spark-submit -f xxx.sql
hive -f "sele"
-e
学习时间
2022.4.14