主机系统:
linux 乱码后解码:
echo -e '\xf'
查看占用端口:
netstat -anp |grep 9200
查看主机硬件时间:
hwclock -r
查看cpu核数:
nproc (或 cat /proc/cpuinfo|grep processor|wc -l)
查看系统:
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
查看linux操作系统:
uname -a
查看内核版本:
cat /proc/version
unix时间戳转换为普通时间:
date -d @1438617600 "+%Y-%m-%d %H:%M:%m"
获取当前时间戳
10位:date +%s
13位(到毫秒):date +%s%3N
查看主机硬件时间:
hwclock -r
--->>>ssh登录日志:
/var/log/secure
查看ssh失败登录记录:
lastb|more
--->>>磁盘IO
查看磁盘:
iostat -x 1 2
iotop
--进程号,磁盘读取量,磁盘写入量,IO百分比,涉及到的命令
命令实时监测网络的状态:
dstat -n
创建软连接(/data/aaa是实际目录,/root/aaa软连接目录):
ln -s /data/aaa /root/aaa
#####-->>设置并查看linux主机账号及密码有效期
--注:cdp/user1为linux主机账号,操作需要root或sudo
--设置账号过期时间:
usermod -e 2023-05-21 cdp
或:chage -E "2023-05-21" cdp
--设置账号不过期:
chage -E -1 user1
--设置账号密码有效期:
chage -M 90 cdp
--设置用户账号和密码永不过期:
chage -m 0 -M 99999 -E -1 user1
--查看账号及密码有效期:
chage -l cdp
--锁定账号:
usermod -L cdp
--解锁账号:
usermod -U cdp
--查看是否被锁定:
passwd --status cdp
--修改密码
passwd user1
或:
sudo sh -c 'echo "user1@2023" | passwd --stdin user1'
暴力修改密码
sudo sh -c 'echo "user1:user1@2023" |chpasswd'
shell中常用命令
按大小排序,列出当前目录下的文件(包含隐藏文件):
ls -lart |awk '{print $5,"--文件大小:",$5/1024/1024/1024,"G", "--生成时间:",$6,$7,$8,"--文件名:" $9}'|sort -nr|less
du -b *|awk '{print $1,"--文件大小:",$1/1024/1024/1024,"G", "--文件名:" $2}'|sort -nr|more
文件转码:
iconv -f GBK -t UTF-8 1.csv -o z_1.csv
获取dasda的MD5值:
echo -n dasda | md5sum
8f4031bfc7640c5f267b11b6fe0c2507 -
sftp指定端口连接:
sftp -oPort=10022 HA@10.1.2.3:/HA
ftp方式连接:
ftp 10.1.2.3 21
ftp -i -n 10.217.8.72
user ftpuser59 xq4wis1mxeRZ
zip带密码解压缩到指定目录:
unzip -P passwd123 -o aaa.zip -d /data/
##############awk
查询文件的前30列:
cat a.txt|awk -v FS=\| -v OFS=\| '{NF=30}1'|more
按大小排序,列出当前目录下的文件(包含隐藏文件):
ls -lart |awk '{print $5,"--文件大小:",$5/1024/1024/1024,"G", "--生成时间:",$6,$7,$8,"--文件名:" $9}'|sort -nr|less
#awk列出文件对第一列求和
awk '{sum+=$1} END {print "Sum = ", sum/1024/1024/1024,"G"}'
#awk查询第二列内容如果是abc,输出第四列内容
cat /data/a.txt|awk -F "|" '{if ($2=="'abc'") print $4}'
cat /data/a.txt|awk -F "|" '{if ($11=="''") print $11"空"}'|wc -l --(统计文件第11列为空的条数)
##筛选某列等于固定值时,输出所有列
cat a.csv|awk -F "\`" '{if ($1=="aa" && $2=="bb" && ($3=="bb" || $3=="dd")) { print }}'|less
截取,等于
|awk -v FS="Ж" -v OFS="Ж" '{if (substr($18,1,13)=="2023-02-09 10") $18=$18;else $18="nodata"}1'
指定文件分隔符查询和指定分隔符输出
awk -v FS="," -v OFS="@@" '{print $1,$3}' test.txt
统计文件以“|”分割有多少列:
cat a.csv | awk -v FS="|" '{print NF}'
awk根据前四列,统计文本重复行数:
cat a.csv| awk -F "|" '{a[$1,$2,$3,$4]++}END{for(i in a){print i,a[i] | "sort -k 1"}}'
##########find
查询log目录下60分钟前生成的文件(60分钟内的用-60)
find /data/log -type f -mmin +60
(查询1天前并删除:
find /data/log -type f -mtime +0|xargs /bin/rm
或:find /data/log -type f -mtime +0 -exec rm -rf {} \; &
或:find /data/log -type f -mtime +0 -delete
查询/data目录下权限为640的文件,修改为644
find /data/ -perm 640 | xargs -i chmod 644 {}
##############sed
对文件的添加表头:
sed -i "1i\表头内容" /data/a.txt
回车换/n :
sed -i ":a;N;s/\n/\\\n/g;ta" a.txt
##sudo echo 执行示例:
sudo sh -c 'echo "* soft nofile 524288" >>/etc/security/limits.conf'
##sed在第10行插入一行内容
sed -i '10a abcde' iptables
zip加密压缩
zip -rP Qwe#2024 data_2024022809.zip data
转换编码:
GBK转为UTF-8
iconv -f GBK -t UTF-8 aaa.txt -o aaa_UTF.txt
判断文件是否存在即文件大小,是否为0
if [ ! -f "/data/file.csv" ] || [ ! -s "/data/file.csv" ];then
echo "文件不存在或大小为0,不共享!"
else
echo "文件正常,开始共享"
fi
shell脚本常用代码片
######检查shell是否带入一个参数(简单的00~23点的循环):
#!/bin/bash
if [ -z $1 ];then
echo "请输入日期参数! eg:20230101"
exit 1
else
data_day=$1
fi
data_day=$1
for hour in $(seq -w 00 23)
do
data_time=${data_day}${hour}
echo "sh /data/script/test.bash ${data_time}"
done
##执行测试如下:
[root@bigdata01 script]# sh a.sh
请输入日期参数! eg:20230101
root@bigdata01 script]# sh a.sh 20230101
sh /data/script/test.bash 2023010100
sh /data/script/test.bash 2023010101
sh /data/script/test.bash 2023010102
sh /data/script/test.bash 2023010103
sh /data/script/test.bash 2023010104
sh /data/script/test.bash 2023010105
sh /data/script/test.bash 2023010106
sh /data/script/test.bash 2023010107
sh /data/script/test.bash 2023010108
sh /data/script/test.bash 2023010109
sh /data/script/test.bash 2023010110
sh /data/script/test.bash 2023010111
sh /data/script/test.bash 2023010112
sh /data/script/test.bash 2023010113
sh /data/script/test.bash 2023010114
sh /data/script/test.bash 2023010115
sh /data/script/test.bash 2023010116
sh /data/script/test.bash 2023010117
sh /data/script/test.bash 2023010118
sh /data/script/test.bash 2023010119
sh /data/script/test.bash 2023010120
sh /data/script/test.bash 2023010121
sh /data/script/test.bash 2023010122
sh /data/script/test.bash 2023010123
#############while判断文件等待
while true
do
hdfs_file_sum=`hadoop fs -ls -d ${source_data_dir}|wc -l`
# echo $hdfs_file_sum
if [ $hdfs_file_sum -eq 1 ]
then
echo "${sftp_data}数据源已经生成,开始get文件"
##cmd
#退出循环
break
else
echo "[`date "+%Y-%m-%d %H:%M"`]数据源:${source_data_dir} 未生成,等待10分钟..."
sleep 600
fi
done
############定义一个sftp上传函数--(使用expect方法)
sftp_cmd_put()
{
local log_file=${main_dir}/log/${sftp_data}.log
/usr/bin/expect <<EOF >>${log_file}
set timeout -1
spawn sftp ${sftp_user}@${sftp_ip}:${sftp_dir}
expect {
"(yes/no)?"
{
send "yes\n"
expect "*password:" { send "${sftp_passwd}\n"}
}
"*assword:"
{
send "${sftp_passwd}\n"
}
}
expect "sftp>"
send "lcd ${local_data_dir}\n"
expect "sftp>"
send "$*\n"
expect "sftp>"
send "exit\n"
expect eof
EOF
}
#调用函数
sftp_cmd_put mput ${sftp_data}_${data_time}.csv
########定义一个ftp上传函数
ftp_put_cmd(){
ftp -v -n 10.217.8.72 <<EOF
quote USER user23
quote PASS passwd123
binary
prompt
passive off
cd /data/
lcd ${data_dir}/
$*
quit
EOF
}
ftp_put_cmd_ddd(){
lftp -u "user123","pass123" sftp://10.11.22.33<<EOF
cd /data1/data_dir/
$*
bye
EOF
}
##调用函数
ftp_put_cmd mput abc_${dir_time}*
ftp_put_cmd_ddd put /data/abc_${dir_time}*
hdfs
刷新分区:
msck repair table table_name;
yarn
查看某个作业的详细日志
yarn logs -applicationId application_12