Linux运维常用命令

1. 删除历史日志

find /home/XXX/logs/ -type f -name '*.log' -mtime +10 -exec rm -f {} \;
find ${base_dir}/logs/ -mtime +7 -name "*.log" | xargs rm -rf

2.批量chmod +x 

find ./ -type f -name '*.sh' -exec chmod +x {} \;
find ./  -name "*.sh" | xargs chmod +x
find ./JOB_xxx/  -name "*.sh" | xargs chmod +x

3. python 操作文件夹(参考)

import shutil
import os
from pathlib import Path

# 第一种:删除一个文件夹,无论里面是否有文件或文件夹
# (不支持文件,文件夹不存在会报错)
def del_files0(dir_path):
    shutil.rmtree(dir_path)

# 第二种 递归删除dir_path目标文件夹下所有文件,以及各级子文件夹下文件,保留各级空文件夹
# (支持文件,文件夹不存在不报错)
def del_files(dir_path):
    if os.path.isfile(dir_path):
        try:
            os.remove(dir_path) # 这个可以删除单个文件,不能删除文件夹
        except BaseException as e:
            print(e)
    elif os.path.isdir(dir_path):
        file_lis = os.listdir(dir_path)
        for file_name in file_lis:
            # if file_name != 'wibot.log':
            tf = os.path.join(dir_path, file_name)
            del_files(tf)
    print('ok')

# 第三种: 删除dir_path目标文件夹下所有内容,保留dir_path文件夹
# (不支持文件,文件夹不存在会报错)
def del_files2(dir_path):
    # os.walk会得到dir_path下各个后代文件夹和其中的文件的三元组列表,顺序自内而外排列,
    # 如 log下有111文件夹,111下有222文件夹:[('D:\\log\\111\\222', [], ['22.py']), ('D:\\log\\111', ['222'], ['11.py']), ('D:\\log', ['111'], ['00.py'])]
    for root, dirs, files in os.walk(dir_path, topdown=False):
        print(root) # 各级文件夹绝对路径
        print(dirs) # root下一级文件夹名称列表,如 ['文件夹1','文件夹2']
        print(files)  # root下文件名列表,如 ['文件1','文件2']
        # 第一步:删除文件
        for name in files:
            os.remove(os.path.join(root, name))  # 删除文件
        # 第二步:删除空文件夹
        for name in dirs:
            os.rmdir(os.path.join(root, name)) # 删除一个空目录


if __name__ == '__main__':
    dir_path = Path('./log').absolute()
    del_files2(dir_path)

4. sed 命令

# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt 
 
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt 
 
# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d'  ab.txt  
 
# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt 
 
# 特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' ab.txt
 
# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt
 
# 在文件ab.txt中的末行之后,添加bye
sed -i '$a bye' ab.txt   
 
# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt 

5.监控账号密码过期时间,并发邮件

#!/bin/bash

today=`date "+%Y%m%d" -d "0 day ago"`
# [sudo] password for hadoopuser: 
expire_str=`echo 'passwordXXX' | sudo -S chage -l hadoopuser  | grep "Password expires" | awk -F ":" '{print $2}' | sed 's/ //'`
#expire_str=`'sudo chage -l hadoopuser  | grep "Password expires" | awk -F ":" '{print $2}' | sed 's/ //'`
# 执行一次chage -l hadoopuser, 直接获取日期,将这个日期放在此处
##expire_str="20230331"
expire_dt=`date -d "${expire_str} +0 day" +"%Y%m%d"`

echo "today date is: ${today}" 
echo "expire date is : ${expire_dt}"

# date to sec 
today_sec=`date -d "$today" +%s`
expire_sec=`date -d "$expire_dt" +%s`
echo "today timestamp is: ${today_sec}" 
echo "expire timestamp is : ${expire_sec}"


# sec diff
diff_sec=`expr ${expire_sec} - ${today_sec}`
echo ${diff_sec}
#cal days 
diff_day=$(expr $diff_sec/86400)
diff_day=$[diff_day]

receiver="XXX@XXX.com"
subject="XX Env hadoopuser Password Expiring Reminder"
content="XX Env hadoopuser password will be expired ${diff_day} days ago"

# whether to send mail
if [ ${diff_day} -le 15 ];
then
	echo "will send a mail to developer"
	curl  https://XXXXXXX -H "token:XXX" -X POST -F "receiver=${receiver}" -F "subject=${subject}" -F "content=${content}"
	echo "send a mail done"
else
	echo "will not send mail to developer"
fi

echo "========>>>>>>>> done with ${today}"

# del his log
find /home/XXX/logs/ -type f -name '*.log' -mtime +100 -exec rm -f {} \;

6. grep命令

1. 查找当前目录文件包含 "XXX"的文件,并打印出“XXX”出现的行号
grep -rn "XXX"

7. 批量修改

-- 批量复制 
hadoop fs -ls s3://XXX/2022-07-01/ | grep ".parquet" | awk -F " " '{print $8}' | xargs -I {} hadoop fs -cp {} s3://XXX/test/


-- 批量改名
hadoop fs -ls s3://XXX/2022-07-01/ | grep ".parquet" | awk -F "/" '{print $7}' | xargs -I {} hadoop fs -mv s3://XXX/2022-07-01/{} s3://XXX/test/{}.orc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值