唐宋元明清 唐宋元明清
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
  • Python

    • Python简单语法学习
    • Python操作Office
    • Python类库学习
    • 自己写的python程序(减少工作量)
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
      • 工具
        • 日志处理
        • 集群脚本
        • 服务器搭建(tomcat)
        • sed替换json文件
        • awk按某一列把文件分成多个文件
        • 替换文本内容(sed替换的文本不能有命令分隔符)
        • 计算时间
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 前端

    • 前端相关
  • 资料

    • 资料
  • 杂记

    • 常用工具或网站
    • 琐碎知识
    • 快捷键
    • FAQ
  • 摘录

    • 摘录
  • 其他
  • Shell
Ai
2022-02-27
目录

Shell命令行

# 工具


# 日志处理

#!/bin/bash
set -e

if [ ! -n "$1" ];then
        pre_date=`date -d "-1 day now" +%Y-%m-%d`
else
        pre_date=`date -d "$1" +%Y-%m-%d`
fi
echo "===============处理日志的日期为========================="$pre_date


parent_dir=`date -d "$pre_date" +%Y-%m`
path="/pp/pp-etl-1.0/log/$parent_dir/$pre_date"
reg1="进度[0-9]{3,}\.[0-9]{2}%"
reg2=".*([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}).*\[INFO\] ([a-z|A-Z]+),(.*_V1).*插入([0-9]+).*更新([0-9]+).*进度([0-9]{3,}\.[0-9]{2})%.*更新至([0-9]{4}-[0-9]{2}-[0-9]{2})。"
file="/home/xxx/tag.sql"


# 判断目录存不存在
echo "=========日志路径为 $path=========="
if [ ! -d "$path" ];then
	echo "该日期目录不存在,退出程序..."
	exit 1
fi

if [ `ls $path/custom*.log|wc -l` -eq 0 ];then
	echo "没有需要的日志文件,退出程序..."
	exit 1
else
	grep -E $reg1 "$path/"custom*.log | sed -E "s#$reg2#insert into xxx(xx, xx, xx, xx, xx, xx, xx) values('\1','\2','\3',\4,\5,\6,'\7');#g" > "$file"
fi

# 判断文件是否存在
if [ ! -f "$file" ];then
	exit 1
fi
# 双引号替换为单引号
sed -i "s/\"/'/g" "$file"

# 取文件名 -Djava.security.egd=file:/dev/random 
java -Dfile=tag.sql -jar xxx.jar
if [ $? -ne 0 ];then
	echo "执行失败,退出..."
else
	#rm -f "$file"
	echo "执行成功,退出..."
fi

# 集群脚本

启动集群

#!/bin/bash
# 获取当前用户名称
user=`whoami`
source /etc/profile
echo ===================集群开始启动====================
echo -------------------启动zk节点---------------------
for((host=101; host<=103; host++)); do
        echo ------------------- hadoop$host --------------
        ssh $user@hadoop$host '/soft/module/zookeeper-3.5.7/bin/zkServer.sh start'
done
echo -------------------启动dfs集群-------------
ssh $user@hadoop101 '/soft/module/hadoop-2.9.2/sbin/start-dfs.sh'
echo -------------------启动hbase集群-----------
ssh $user@hadoop100 '/soft/module/hbase/bin/start-hbase.sh'
echo -------------------启动hbase备份master--------------
ssh $user@hadoop101 '/soft/module/hbase/bin/hbase-daemon.sh start master'

停止集群

#!/bin/bash
# 获取当前用户名称
user=`whoami`
source /etc/profile
echo ===================集群开始关闭====================
echo -------------------关闭hbase备份master--------------
ssh $user@hadoop101 '/soft/module/hbase/bin/hbase-daemon.sh stop master'
echo -------------------关闭hbase集群-----------
ssh $user@hadoop100 '/soft/module/hbase/bin/stop-hbase.sh'
echo -------------------关闭dfs集群-------------
ssh $user@hadoop101 '/soft/module/hadoop-2.9.2/sbin/stop-dfs.sh'
echo -------------------关闭zk节点---------------------
for((host=101; host<=103; host++)); do
        echo ------------------- hadoop$host --------------
        ssh $user@hadoop$host '/soft/module/zookeeper-3.5.7/bin/zkServer.sh stop'
done

jps查看进程

#!/bin/bash
# 获取当前用户名称
user=`whoami`
for((host=100; host<=103; host++)); do
        echo ------------------- hadoop$host --------------
        ssh $user@hadoop$host '/soft/module/jdk1.8.0_161/bin/jps'
done

提示

shell脚本执行的过程中,登录shell 和非登录shell 读取的环境配置文件不同。 登录shell 会读取 /etc/profile, ~/.bash_profile,~/.bash_login ,~/.profile等文件,而非登录shell 读取的脚本有 /etc/bashrc 和 ~/.bashrc ,像java,path 这些环境变量读取不到。 解决方法: 1.将/etc/profile文件写入 ~/.bashrc ;cat /etc/profile >~/.bashrc 2.把profile的配置信息echo到.bashrc中echo 'source /etc/profile' >> ~/.bashrc

# 服务器搭建(tomcat)

环境变量

## java
JAVA_HOME=/soft/jdk1.8.0_161
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

## maven
export MAVEN_HOME=/soft/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH

## tomcat
CATALINA_HOME=/soft/apache-tomcat-9.0.41

tomcat

sh startup.sh(启动tomcat命令)
关闭tomcat命令:
sh /usr/local/tomcat7/bin/shutdown.sh

ps -ef|grep java
查询端口是否有进程守护用如下命令grep对应端口,如8088为端口号
例:netstat -nalp|grep 8080

#停止firewall
systemctl stop firewalld.service 
 
#开启firewall
systemctl start firewalld.service
 
#禁止firewall开机启动
systemctl disable firewalld.service 
 
#查看默认防火墙状态(关闭后显示not running,开启后显示running)
firewall-cmd --state

开放指定端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
 命令含义:
--zone #作用域
--add-port=1935/tcp  #添加端口,格式为:端口/通讯协议
--permanent  #永久生效,没有此参数重启后失效

可以通过"netstat -anp" 来查看哪些端口被打开
然后可以通过"lsof -i:$PORT"查看应用该端口的程序($PORT指对应的端口号)。或者你也可以查看文件/etc/services,从里面可以找出端口所对应的服务。

Linux Tomcat启动慢

方案1:通过rng-tools自动补充熵池(推荐)

安装rng服务并启动,然后修改它的配置文件
yum install rng-tools -y
systemctl start rngd
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
cd /etc/systemd/system/

vim rngd.service 
将 ExecStart=/sbin/rngd -f 改为 ExecStart=/sbin/rngd -f -r /dev/urandom
重新加载后,再重启服务
systemctl daemon-reload  
systemctl restart rngd

# sed替换json文件

##########准备参数########################
filename=`cat "json.properties"|grep 'filename'|awk -F '==' '{print $2}'`          #字段文件名
parameter_name=`cat "json.properties"|grep 'parameter_name'|awk -F '==' '{print $2}'`     #分区参数
mysql_col=`cat "json.properties"|grep 'mysql_col'|awk -F '==' '{print $2}'`             #mysql对应字段名
hdfs_table=`cat "json.properties"|grep 'hdfs_table'|awk -F '==' '{print $2}'`                   #hdfs表名
mysql_table=`cat "json.properties"|grep 'mysql_table'|awk -F '==' '{print $2}'`                 #mysql对应表名
hdfs_path=`cat "json.properties"|grep 'hdfs_path'|awk -F '==' '{print $2}'`

echo "$filename===$parameter_name===$mysql_col===$hdfs_table===$mysql_table===${hdfs_path}"

########拼接字符串####################
sh create_column.sh $filename $parameter_name $mysql_col #"字段文件名" "分区参数" "mysql分区字段"
filename="hdfs_mysql_${hdfs_table}.json"
########替换文件#########################
cp "template.json" "json/${filename}"
cd json
sed -i "s#hdfscolumns#$(cat '../hdfscolumn')#g" $filename
sed -i "s#mysqlcolumns#$(cat '../mysqlcolumn')#g" $filename
sed -i "s#hdfspath#${hdfs_path}#g" $filename
sed -i "s#mysqltablename#${mysql_table}#g" $filename
sed -i "s#parameter_name#${parameter_name}#g" $filename
sed -i "s#mysqlcol#${mysql_col}#g" $filename
cd -


rm -f "hdfscolumn"
rm -f "mysqlcolumn"
for i in $(cat $1)
do
        array=(${i//|/ })
        #`echo ${array[0]}
        # echo ${array[1]}
        echo -n "{\"index\" : \"${array[0]}\",\"type\" : \"${array[1]}\"}," >> hdfscolumn

        echo -n "\"${array[2]}\"," >> mysqlcolumn
done

echo -n "{\"value\" : \"$2\",\"type\" : \"string\"}" >> hdfscolumn

echo -n "\"$3\"" >> mysqlcolumn

# awk按某一列把文件分成多个文件

sed 's/\t/\x01/g' "data.csv" > "new_data.txt"
for idate in 2020-12-08 2020-12-07
do
    awk 'BEGIN{FS="\\\x01";var="'${idate}'";re="^'${idate}'"} $3~re{print $1"\t"$2"\t"$3>var".txt"}' new_data.csv
    # hdfs dfs -put
done
# awk 获取某列长度大于20的行(筛选)
awk -F, '{if(length($1)>20) print $0}'  xxx.csv

# 替换文本内容(sed替换的文本不能有命令分隔符)

for i in $(cat filename.txt)
do
        array=(${i//,/ })
        #`echo ${array[0]}
        # echo ${array[1]}
        cp template.sh 1216/${array[1]}
        sed -i "s#httpsed#${array[0]}#g" 1216/${array[1]}
done

##
for filename in $(cat "filename.txt")
do
    #echo $filename
    filename_temp=${filename/"dwa"/"cio"}
    echo $filename_temp
    mv $filename $filename_temp
    sed -i 's/dwa/cio/g' $filename_temp
done

##
for CLASSIFY_DESC in 1002 1003 1004 1005 1006 1007 1008 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 3001 3002 3003 3004 3007 3008 3009 3010 3011 4002 4003 4004 4005 4006 4007
do
   filename1="cio_cp_ctyun_website_index_day_1001_1.0.0.0.sql"
   filename2=${filename1/1001/"${CLASSIFY_DESC}"}
   echo $filename2
   cp ${filename1} ${filename2}
   sed -i s/CLASSIFY_DESC/"${CLASSIFY_DESC}"/g ${filename2} 
done

# 计算时间

input_date_time=$(date -d "2020-10-23 03:48:25" '+%Y-%m-%d %H:%M:%S')
MONTH_ID=${input_date_time:0:7}
PRE_MONTH_ID=$(date -d "${MONTH_ID}-01  -1 month" +%Y-%m)

PRE_2MONTH_ID=$(date -d "${MONTH_ID}-01  -2 month" +%Y-%m)
PRE_3MONTH_ID=$(date -d "${MONTH_ID}-01  -3 month" +%Y-%m)
PRE_4MONTH_ID=$(date -d "${MONTH_ID}-01  -4 month" +%Y-%m)
PRE_5MONTH_ID=$(date -d "${MONTH_ID}-01  -5 month" +%Y-%m)
NEXT_MONTH=$(date -d "${MONTH_ID}-01  +1 month" +%Y-%m)
LAST_DAY_MONTH=$(date -d "${NEXT_MONTH}-01 -1 days" +%Y-%m-%d)
FIRST_DAY_MONTH=$(date -d "${MONTH_ID}-01" +%Y-%m-%d)
FIRST_DAY_PRE_MONTH=$(date -d "${MONTH_ID}-01  -1 month" +%Y-%m-%d)
FIRST_DAY_PRE_2MONTH=$(date -d "${MONTH_ID}-01  -2 month" +%Y-%m-%d)
FIRST_DAY_PRE_3MONTH=$(date -d "${MONTH_ID}-01  -3 month" +%Y-%m-%d)
FIRST_DAY_PRE_4MONTH=$(date -d "${MONTH_ID}-01  -4 month" +%Y-%m-%d)

echo "PRE_MONTH_ID : ${PRE_MONTH_ID}"
echo "PRE_2MONTH_ID : ${PRE_2MONTH_ID}"
echo "PRE_3MONTH_ID : ${PRE_3MONTH_ID}"
echo "PRE_4MONTH_ID : ${PRE_4MONTH_ID}"
echo "PRE_5MONTH_ID : ${PRE_5MONTH_ID}"
echo "LAST_DAY_MONTH : ${LAST_DAY_MONTH}"
echo "FIRST_DAY_MONTH : ${FIRST_DAY_MONTH}"
echo "FIRST_DAY_PRE_MONTH : ${FIRST_DAY_PRE_MONTH}"
echo "FIRST_DAY_PRE_2MONTH : ${FIRST_DAY_PRE_2MONTH}"
echo "FIRST_DAY_PRE_3MONTH : ${FIRST_DAY_PRE_3MONTH}"
echo "FIRST_DAY_PRE_4MONTH : ${FIRST_DAY_PRE_4MONTH}"
编辑 (opens new window)
上次更新: 2022/04/13, 21:51:31
Shell基础
语法学习

← Shell基础 语法学习→

Theme by Vdoing | Copyright © 2022-2025 Ai | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×