• 常用linux命令及shell脚本


    参考:Linux命令大全

    分割大文件

    Split命令

    • 按行分割(只能是文本文件)
    $split -l 1000 big_file  前缀 
    
    • 按文件大小分割
    $split -b 64m big_file 前缀
    

    文本合并

    #a.txt
    a
    b
    c
    
    #b.txt
    1
    2
    3
    
    • 追加文本
    $cat a.txt >> b.txt
    
    结果:
    a
    b
    c
    1
    2
    3
    
    • 逐行合并
    $ paste a.txt b.txt
    
    结果
    a 1
    b 2
    c 3
    

    通过-d参数可以制定分隔符额

    $paste -d: a.txt  b.txt
    
    结果
    a:1
    b:2
    c:3
    

    排序去重

    #a.txt
    1
    2
    4
    4
    3
    4
    
    • 简单排序
    $sort a.txt
    
    结果
    1
    2
    3
    4
    4
    4
    

    参数-n使用数字排序,-t制定分隔符,-k制定排序采用的key值,-r逆序

    • 排序去重(重复的只保留一个)
    $sort -u a.ttx
    

    $cat a.txt | sort | uniq
    
    结果
    1
    2
    3
    4
    
    • 排序去重(重复的一个不留)
    $cat a.txt | sort | uniq -u
    
    结果
    1
    2
    3
    

    处理图片

    以来外部程序``sudo apt-get install imagemagick`

    Examples of ImageMagick Usage

    • 更改图片格式
    $convert a.png [-quality 95] b.jpg
    
    • 更改图片尺寸
    $convert a.png -resize 200×100 b.png #处理为200x100的图片(不精确)
    
    $convert a.png -resize 200×100! b.png #处理为200x100的图片(精确)
    
    $convert a.png -resize 200 b.png #处理为宽为200的图片(保持纵横比)
    
    $convert a.png -resize ×100 b.png #处理为高100的图片(保持纵横比)
    
    • 旋转图片
    $convert a.jpg -rotate 90 b.jpg
    
    • 炭笔画效果
    $convert a.jpg -charcoal 2 b.jpg
    
    • 内爆效果
    $convert a.jpg -implode 1 b.jpg
    
    • 批量处理图片
    $for pic in *.png; do convert $pic -rotate 90 rotated-$pic; done
    

    ssh登录

    • 利用expect自动登录
    #服务器登陆脚本
    
    
    
    # 服务器用户名
    ARR_SERVER_USER=(
        [0]='root'
        [1]='guest'
    )
    
    # 服务器IP地址
    ARR_SERVER_HOST=(
        [0]='xx.xx.xx.xx'
        [1]='xx.xx.xx.xx'
    )
    
    # 服务器SSH端口号
    ARR_SERVER_PORT=(
        [0]='22'
        [1]='22'
    )
    
    # 服务器SSH密码,密钥登陆的值设置为 NULL
    ARR_SERVER_PASSWORD=(
        [0]='PASSWORD'
        [1]=NULL
    )
    
    # 服务器说明
    ARR_SERVER_COMMENT=(
        [0]='密码登陆'
        [1]='秘钥登陆'
    )
    
    # 密钥文件地址. 如果是密钥登陆的话, 值为密钥文件地址. 否则为 NULL
    ARR_SERVER_KEY=(
        [0]=NULL
        [1]='/path/xxx.pem'
    )
    
    # 统计服务器台数,方便遍历输出
    LEN=${#ARR_SERVER_USER[@]}
    
    # 屏幕输出提示信息。显示服务器序号、主机地址、说明信息
    screen_echo() {
    
    printf "%-7s |" '序号'
    printf "%-18s |" '主机'
    printf "%-30s
    " '说明'
    
    for((i=0; i<$LEN; i++))
    do
        printf "e[31m %-5se[0m|" "$i" # 颜色为红色
        printf "%-15s |" "${ARR_SERVER_HOST[$i]}"
        printf "%-30s
    " "${ARR_SERVER_COMMENT[$i]}"
    done
    
    }
    
    # 调用函数,让信息显示出来
    screen_echo
    
    
    while true
    do
    
       # 让使用者选择所需要登陆服务器的所属序号
        read -p '请输入要登陆的服务器所属序号: ' SERVER_NUM
    
        # 如果输入为空格或者回车,显示错误信息,后续代码不再执行,重新循环。
        if [ ! ${SERVER_NUM} ]
        then
            echo '请输入序号'
            continue
        fi
    
        # 如果输入的不是数字,显示错误信息,后续代码不再执行,重新循环。
        if [[ "${SERVER_NUM}" =~ [^0-9]+ ]]
        then
            echo '序号是数字'
            continue
        fi
    
        # 如果输入的以 0 开头的数字、大于等于服务器台数、小于 0,显示错误信息,后续代码不再执行,重新循环。
        if [[ "${SERVER_NUM}" =~ ^0[0-9]+ ]] || [ ${SERVER_NUM} -ge ${LEN} ] || [ ${SERVER_NUM} -lt 0 ]
        then
            echo '请输入存在的序号'
            continue
        fi
    
        # 跳出循环
        break
    
    done
    
    # 登陆的函数
    # set timeout 设置超时时间。-1 永不超时
    # spawn : -noecho 意思为终端中不显示 spawn .. ssh ... 等信息,不加此参数会有输出; -o StrictHostKeyChecking=no 不提示认证
    # $1、$2、$3、$4 代表调用函数是所传输的第一个、第二个、第三个、第四个参数值
    # *yes/no*  意思为 ssh 后如果返回的信息当中包含 yes/no,而 *password* 就是代表 ssh 后如果返回的信息当中包含 password
    # send 意思为发送信息
    # exp_continue 意思为继续执行下面的匹配
    # interact 意思为留在远程终端上面。如果不写此语句,自动退出服务器
    auto_login_ssh () {
    
        if [ NULL = $5 ]
        then
            expect -c "
                set timeout 10;
                spawn -noecho ssh -o StrictHostKeyChecking=no $1@$2 -p $3;
                expect {
                    *yes/no* {
                        send yes
                        exp_continue
                    }
                    *password* {
                        send $4
                    }
                }
                interact
            ";
        else
            expect -c "
                set timeout 10;
                spawn -noecho ssh -o StrictHostKeyChecking=no -i $5 $1@$2;
                interact
            ";
        fi;
    
        return 0;
    }
    
    # 调用登陆函数并传值。用户名、地址、端口号、密码
    auto_login_ssh ${ARR_SERVER_USER[$SERVER_NUM]} ${ARR_SERVER_HOST[$SERVER_NUM]} ${ARR_SERVER_PORT[$SERVER_NUM]} ${ARR_SERVER_PASSWORD[$SERVER_NUM]} ${ARR_SERVER_KEY[$SERVER_NUM]}
    

    压缩打包/解压缩

    根据进程名杀死进程

    $ `ps -ef | grep $proc_name | grep -v grep | awk '{print "kill " $2}'` | sh
    

    监控进程(自动重启)

    #!/usr/bin/env bash
    
    #定时检查指定名称的进程是否存在,若不存在,重新启动
    
    proc_name="程序名称"
    log_name="./auto_restart.log"
    pid=0
    
    proc_num()
    {
        num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
        return $num
    }
    
    proc_id()
    {
        pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
    }
    
    count=0
    while (true)
    do
    proc_num
    number=$?
    if [ $number -eq 0 ]
    then
            #此处填写重启命令
    	proc_id
    	count=$[count+1]
            echo $count:'Restart' >> $log_name
    	echo ${pid}:`date` >>  $log_name
            sleep 2m
    
    fi
    done
    

    例行任务

  • 相关阅读:
    MyBatis使用
    华为如何实现基于Git的跨地域协同开发
    推荐一款华为最新的自动化代码检查工具
    我是如何进行code review的
    谈谈敏捷开发
    软件测试管理的一点小心得
    (转)技术转管理可能遇到的 3 大挑战及解决方案
    领域驱动设计和实践
    NET开源项目
    asp.net搭建mybatis开发环境
  • 原文地址:https://www.cnblogs.com/taceywong/p/6986688.html
Copyright © 2020-2023  润新知