shell命令

shell命令
    clear 清屏
    find path -name filename
    #find
    目录   ls
        绝对路径        /path01/path02/...
        相对路径        ./        /path01/path02/...
        退回上级目录        ../
        当前用户的根路径    ~
        查看当前路径      pwd
        查看当前子路径列表    ls 简易列表
                            ll    详细列表
                            ls -la 所有列表(隐藏路径)

        切换路径        cd    oath
        创建路径        mkdir path01 path02
                        mkdir -p path01/path02 path02     (-p递归创建)
        删除路劲        rm -[r]d path (删除空路径)        -r递归删除
        修改路径        cp [-r] src dest    复制            -r递归复制
                        mv src dest     移动    (同目录下修改路径名的功能)
    文件

        查看        cat     查看文件所有内容
                    more    分页查看    enter翻行,space翻页
                    less    分页查看
                    head -n    查看前n行
                    tail -n    查看后n行
                    wc         查看文件统计信息
        删除        rm -[r]f file 删除文件   -r[*递归删除,一次性删除目录及内的所有资源]
        修改文件名    mv file path    移动文件
                    mv file file1    重命名文件
                    cp file path    复制文件
        创建        touch file
        编辑        vi[m] file 如果存在直接打开编辑,如果不存在创建打开
                    命令行模式    默认进入/esc
                        /搜索内容
                        shift+z+z => :wq!保存并退出
                        :w 保存
                        :q    退出
                        :q!    强制退出
                        o:插入新行
                        i:在光标位置插入
                        gg:回到文件头
                        shift +g 回到文件尾
                        [n]dd 删除当前光标所在行开始的n行
                    编辑模式
    输出        echo
    日期
        date        回去系统当前日期
        date +%F    年-月-日 2021-12-20
        date +%C     世纪
        date +%Y    四位年
        date +%y    两位年
        date +%m    月
        date +%d    日
        date +%H    时
        date +%M    分
        date +%S    秒
        m=`date +%m`; q=$(((m-1)/3+1)) 季度
        date +%U    年周(周日为第一天)
        date +%W    年周(周一为第一天)
        date +%j    年日
        date +%w    周日(周一:0~周日:6)
        date +%s[%M%N]    [毫|纳]秒
        获取系统当前时间戳:%s秒:1637555292  %s%M毫秒:163755529728 %s%M纳秒
        日期时间计算
        date -d '$datetime ±n TimeUnit' +%F

        时间戳时间计算(先转化格式,再计算)
        dt=`date -d @timestamp +%F` 长整数(秒)格式化
        date "$dt ±n TimeUnit" +%F

    用户、分组、权限
            权限:
            r read
            w write
            x execute
            用户
            U    User
            G    Group
            O    Others
            查看用户信息:
            cat /etc/passwd
            #---------------------------------------------------------------------
            USERNAME,PASSWORD,USERID,GROUPID,GROUPNAME,USER_MAINPATH,命令集
            # ----------------------------------------------------------------------
            root:x:0:0:root:/root:/bin/bash
            shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
            sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
            heney:x:1000:1000:heney:/home/heney:/bin/bash
        查看用户密码
        cat /etc/shadow
            #---------------------------------------------------------------------
            USERNAME | USERNAME ,PASSWORD
            #----------------------------------------------------------------------
        查看分组信息
        cat /etc/group
        #------------------------------------------------------
            GROUPNAME,PASSWORD,GROUPID
        #---------------------------------------------------------------
        root:$6$tMQ55bpBDyJU559r$RYLbbak9s.Idqy3dii4qhA6uYb1gXAIFOAZV4W9yfUjilX9lYAORq6158fHchAI5zSmzGOSMnGz.FJYvIpciG.::0:99999:7:::
        sync:*:18353:0:99999:7:::
        shutdown:*:18353:0:99999:7:::
        sshd:!!:18973::::::
        mysql:!!:18974::::::

        切换当前登录用户
        su USERNAME

        创建用户
        useradd kb16
        useradd -d 主目录 -m -g 组名 用户名
        -d DIR #指定新建用户的主目录,若未指定默认自动创建主目录/home/用户名
        -m        #如果主目录不存在则创建,只能创建一级目录
        -g GNAME #指定用户所属主组名,若未指定默认创建同名组,并将自己归于该组内
        -G GN1,GN2...#指定用户所属附加组名列表
        usermod -d 主目录 -g 组名 用户名
        userdel [-r] USERNAME
            -r 删除主目录

        passwd USERNAME|GROUPNAME #设置用户或分组密码
        passwd -l USERNAME #锁定用户
        passwd -u USERNAME #解锁用户

        #创建用户分组
        groupadd GROUPNAME
        groupmod -g NEW_GID -n NEW_GROUPNAME SRC_GROUPNAME
        groupdel GROUPNAME

        修改权限
        touch b.log
        ll
        #---------------------------------------------
        权限    硬链接数 owner group   创建时间    文件名
        #--------------------------------------------
        [-rw-r--r--] 1    [root root] 0 Dec 22 10:45 b.log
        #-----------------------------------------------
        -rw-r--r--
        -资源类型 -文件    d目录
        rw- u 表示所有者对资源的权限,r表示read,w表示write,第三个`-`(`x`)表示执行权,`-`表示没有执行权
        r-- g 表示组内用户对他的权限
        r-- o 表示其他用户对它的权限

        新建的文件默认权限644 vi/touch *.*
        新建的目录默认权限755     madir *
        .*.*    隐藏文件或目录  可以通过ls-la查看
        *~        临时文件
        rwx 111 7
        rw- 110 6
        r-x 101 5
        r-- 100 4
        -wx 011 3
        -w- 010 2
        --x 001 1
        --- 000 0


        chmod u+x b.log
        chmod g+w b.log
        chmod  732 b.log

              [root  root]
        chown USER:group B.LOG

        管道符 |
        cmd ...|cmd2 ...|...先执行并将结果作为cmd2的输入,依次执行
        cat /etc/passwd|grep kb16

    文本编辑
        sed [-option] 'script' file
        sed [-option] {script|AdressCommand} file1[ file2...]
        -option
            -n    #不显示模式空间内容
            -e     #同时执行多个匹配操作
            -f     #执行文件中的多个AddressCommand操作    *
            -r     #使用扩展正则表达式*
            -i    #直接修改文件    *
        #Address表达式
        s,e|+n|$ #从s行(包含)到(e行|之后的n行|最后一行)
        n        #第n行
        /REGEX/,+2    #从正则匹配行(包含)之后n行
        /REGEXS/,/REGEXE/    #从REGEXS开始至    REGEXE结束
        #Command表达式
        script    操作指令
            d     删除(行)delete* sed -i '/HISTSIZE=1000/d' profile
                                            sed -i '1,9d' profile
            p     显示符合条件的行        print
            a    向下追加新行    append*
            i     向上插入新行    insert*
            c     整行替换
            s     行中替换* sed -i 's/\/opt\/software\/jdk8/\/opt\/jdk8/' profile
            r     行中追加cat pro

        script     行匹配模式
        行号匹配
        n
        1,3
        1,$

        正则匹配
        /SELINUX=enforced/
        /SELINUX=enforced/,/UseDNS=yes/

        操作
            cp /etc/profile ./
            sed -i '/HISTSIZE=1000/d' profile
            sed -i '1,9d' profile
            sed -i '/unset i/i \export JAVA_HOME=/opt/software/jdk8' profile
            sed -i 's/\/opt\/software\/jdk8/\/opt\/jdk8/' profile
            sed -i 's/"//g' ifcfg-ens33
            sed -nr '/IPV/p' ifcfg-ens33
            sed -nr '/^IPV.*no$/p' ifcfg-ens33
            sed -ri '/^IPV.*no$/s/no/yes' ifcfg-ens33

    文件处理
    awk [-option] `script` file
    -option
        -F 外置定义分隔符,指定分隔符(',',' ',';')=> -F ','  (以逗号问分隔符)
        -v 传参        -v var=value
        -f file     脚本文件
    script
        'BEGIN {}/regexp/{}END{}'
        BEGIN {}     类似于过滤器的init()    启动示执行一次
            BEGIN{i=1}    声明变量并初始化
            BEGIN{FS=';'} 内置定义分隔符
            多条语句分号隔开
        {}            类似于过滤器的doFilter() 逐行执行
        END {}        类似于过滤器的destroy()  结束时执行
    分支,循环,跳转语句都存在

    字符串函数
    gensub(regex,replace,noWho,target) 将target字符串中的第noWho个regex匹配内容替换为replace
        awk -F ',' '{v=gensub("5","X",1,$1);print v,$2,$3}' a.log|awk
        awk -F ',' 'BEGIN{V="ABC DEF";print gensub(/(.*?) (.*?)/,"\\2 \\1","g",v)}' =>DEF ABC
    index(src,find)    返回find在src中的位置,不存在返回0
        awk -F ',' 'BEGIN{v="ABC DEF";print index(v,"BC")}' =>2
    length(src)    返回字符串的长度(字符数量)
    awk -F ',' 'BEGIN{v="ABC def";print length(v)}' =>7
    match(src,regex[,arr])
        awk -F ',' 'BEGIN{v="ABC123";print match(v,[0-9]{1,}/)}' =>4
        awk -F ',' 'BEGIN{v="ABC123";print match(v,[0-9]{2,}/)}' =>4
        awk -F ',' 'BEGIN{v="ABC123";print match(v,[0-9]{3,}/)}' =>4
        awk -F ',' 'BEGIN{v="ABC123";print match(v,[0-9]{4,}/)}' =>0
        若regex带分组,则将多个分支一次填入arr
        awk -F ',' 'BEGIN{v="ABC 123";match(v,/(.*?) (.*?)/,arr);print arr[1] arr[2]}' =>ABC 123
    split(src,arr[,FieldSep[,seps]])  一FieldSep将src分成数组,并一次存放于arr中,将分隔符存放于seps中
        awk -F ',' 'BEGIN{v="ABC 123,def;xxx";split(v,arr,/ |,|;/);print arr[1] arr[2] arr[3] arr[4]}' =>ABC 123 def xxx
        awk -F ',' 'BEGIN{v="ABC 123,def;xxx";split(v,arr,/ |,|;/,seps);print seps[1] seps[2] seps[3]}' => , ;
    substr(str,start[,length])    截取字符串
        输入每行ip地址中最后一位
        awk -F ',' '{v=$1;while(index(v,".")>0){v=substr(v,index(v,".")+1)} print v}' a.log
    tolower(str)    转为小写字母
        awk 'BEGIN{V="aBcDeF";print tolower(v)}'=>abcdef
    toupper(str) 转为大写字母
        awk 'BEGIN{V="aBcDeF";print toupper(v)}'=>ABCDEF
        (str""str)    拼接字符串

    

统计所有订单金额
    awk -F ',' 'BEGIN{v=0} {v+=$3}END{print v}' a.log
    wc a.log
    wc -l a.log
统计每个ip下产生的订单数量,订单总金额,订单均值
    awk 'BEGIN{FS=","}{a[$1]++;b[$1]+=$3}END{for(e in a) print e,a[e],b[e],b[e]/a[e]}' a.log

统计不同用户在不同的ip下的订单数
    awk -F ',' '{a[$2","$1]++}END{for(k in a) print k,a[k]}' a.log
    awk -F ',' '{a[$2","$1]++}END{for(k in a) print k,a[k]}' a.log|sort    排序

统计订单金额为参数top以上的订单数
    awk -F ',' -v top=700 'BEGIN {c=0}{if($3>top) c++}END{print c}' a.log

    命令集
    cat /etc/shells
    #-------------------------------------------------
    /bin/sh
    /bin/bash*
    /usr/bin/sh
    /usr/bin/bash

    #--------------------------------------------
    表达式
    ``
        #整数计算
        a=`expr 1+2` =>3
        a=`expr 1-2` =>-1
        a=`expr 1\*2` =>2
        a=`expr 1/2` =>0

        #小数计算
        a=`awk -v a=1 -v b=2 'BEGIN{printf "%.2f",a/b}'` =>0.50

        #shell命令结果
        a=`pwd`**

    []
    #关系运算符
    a=$[1>2]    =>0:false **
    a=$[1<2]    =>1:true **
    #整数计算
    a=$[1[+|-|*|/|%]2] =>3|....**
    ((a++)) =>a=4    **
    #数组下标
    arr[index]  **

[[]]
    =~        **
    a="bc123ab12"
    [[ $a=~ ^abc.* ]] && echo "a" ||echo "b"
    #配合if分支使用

    #创建数组
    arr=(item,...,item)   **
    item=${arr[index]}
    len=${#arr[*]}
    arr[index]=value 下标已存在覆盖,不存在增加

序列
    s=`seq 1 2 10`  **

    #提取变量值
    ${a}                提取变量值**
    ${arr[index]}        提取数组元素**
    ${#arr[*]}            提取数组长度**

    ${str/[/]from/to/g}  替换(、替换第一处,//替换所有)**

    运算符
        if/while[]
            关系    -gt -ge -lt -le -eq -ne
            逻辑    -a -o !
            字符串    = != -z -n        **
            文件    -e -f -d -r -w -x             **
        (())
            关系    同java一样        **
            逻辑    同java一样        **

    #shell编程
        touch | vi[m] call.sh   #touch call.sh
        chmod u+x call.sh
        call [-option]...
        call -name "heney"
    ----------------------------------------
    #!/bin/bash
    source /etc/profile
    ------------------------------------------------

    变量
    var=value
    let var=value
    unset var
    let var=()
    let var=`seq 1 5`
    #类别
    环境变量
    全局变量
    局部


    分支
    if [ $a -ge 6 -a $b -le 10]  *
    then
        echo "yes"
    else
        echo "no"
    fi
    ----------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------
    if((a>6 && b<10))
    then
        echo "yes"
    else
        echo "no"
    fi
    ----------------------------------------------
    read -p "input a number :" var

    if((var>5));then
            echo "hello"
    else
            echo "world"
    fi
    --------------------------------------
    path=$1
    if [ ! -e $path ];then
            echo "$path not exist"
    slif [ -d $path  ];then
            echo "$path is directory"
    else
            echo "$path is file"
            if [ -r $path ];then
                    echo "$path is readable"
            elif [ -w $path ];then
                    echo "$path is writeable"
            elif[ -x $path ];then
                    echo "$path is executable"
            else
                    echo "$path is not available"
            fi
    fi
    -----------------------------------------------------
    if [ $1 -ge 90 ]
    then
            echo "A"
    elif [ $1 -ge 80 ]
    then
            echo "B"
    else
            echo "C"
    fi
    ---------------------------------------------------
    a=$1
    b=$2
    c=$#

    if [ $c==2 $a -ge 10 -o $b -le 5 ];then
            echo "yes"
    else
            echo "no"
    fi
    ---------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------
    ######################################################################################
    case $var in
    v1)
        ...
    ;;
    v2)
        ...
    ;;
    esac
    -------------------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------------------
    case $1 in
    start|START)
            echo "starting..."
    ;;
    stop|STOP)
            echo "stopping..."
    ;;
    *)
            echo "nothing"
    ;;
    esac
    -------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------

    循环
    array=("aa bb cc")
    for item in ${array[@]}
    do
        echo $item
    done
    #-----------------------------------------
    aa
    bb
    cc
    #====================================

    for  item in `seq 1 2 10`
    do
        echo $item
    done
    #-----------------------
    1
    3
    5
    7
    9
    #----------------------------------
    total=0
    for ((i=1;i<=100;i++))
    do
        echo ((total+=i))
    done
    echo "SUM :$total"
    #----------------------------
    SUM : 5050
    #-------------------------------
    #函数
    function func_name(){
        p1=$1
        p2=$2
        ...
        pc=$#

        echo RESULT
        #return number xxxx

    }

    rst =`func_name param1 param2...`   ***
    func_name param1,param2

    #脚本执行方式
    #开启子shell执行
    ./install.sh
    /bash
    -

read -p "input a number :" var

重定向
echo "content" >file 覆盖模式
echo "content" >>file 追加模式
将a.log 中ip最后一位200以上的数据写入b.log,排序
>>追加
#分流
cat a.log|awk -F ',' '{split($1,a,".");if(a[4]>=200) print $0}'
#并流
cat a.log|awk -F ',' '{split($1,a,".");if(a[4]>=200) print $0}'|sort >b.log
cat a.log|awk -F ',' '{split($1,a,".");if(a[4]<=200 &&a[4]>150) print $0}'|sort >>b.log
cat a.log|awk -F ',' '{split($1,a,".");if(a[4]>=200) print $0}'|sort >b.log 2>&1
cat a.log|awk -F ',' '{split($1,a,".");if(a[4]>=200) print $0}'|sort 1>b.log 1>e.log
    文件处理
    系统性能查看

        #创建数组
        arr=(item,...,item)   **
        item=${arr[index]}
        len=${#arr[*]}

    shell三元运算符

    #8、软件安装
        系统软件安装
        rpm -qa|grep vim

        yum -y remove vim-common-7.4.629-8.el7_9.x86_64
        yum -y remove vim-enhanced-7.4.629-8.el7_9.x86_64
        yum -y remove vim-filesystem-7.4.629-8.el7_9.x86_64

        yum search vim
        yum -y install vim
        yum -y install vim-minimal.x86_64 : A minimal version of the VIM editor

        绿色安装
        xxx.tar
        xxx.tar.gz
        xxx.tgz

        tar [-option] xxx.tar[.gz] -C dest_path
        -z    .gz
        -x    解压
        -c  压缩
        -v     展示解压或压缩的过程
        -f 固定格式

        RPM安装
            xxx.rpm
            rpm -ivh xxx.rpm

        手工编译安装
            #解压并切换值根目录
            #安装gc依赖
            make
            #配置
            #启动服务
            #起客户端访问
    #9 环境变量
    /etc/profile    shell文件    全局
    /etc/profile.d    目录
    ~/.bashrc    shell文件    当前用户

    #脚本执行方式
    #开启自shell执行
    ./script.sh
    bash script.sh
    #开启

    [root@single ~]# chmod u+x install2.sh
    [root@single ~]# source install2.sh

    编写脚本 删除、解压、配置、验证...
    #--------------------------------------------------------------------------------------
#JDK安装(先把jdk压缩包拖到download下面)
    tar -zxvf jdk-8u171-linux-x64.tar.gz -C /opt/software/ 解压
    cd /opt/software/
    ls    查看
    mv jdk1.8.0_171/ jdk8     重命名
    ls

    #创建或编辑自定义环境变量shell脚本
    vim /etc/profile.d/my.sh  在这里配环境变量,系统文件不要动
    #--------------------------------------------------------------------
    #jdk 8
    export JAVA_HOME=/opt/software/jdk8
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    #----------------------------------------------------------------------
    #每次添加新的环境变量要激活才能生效
    source /etc/profile
    java -version
#SCALA安装(先把scala压缩包拖到download下面)
    [root@single jdk8]# tar -zxvf /opt/download/scala-2.12.10.tgz -C /opt/software/
    [root@single jdk8]# cd ../
    [root@single software]# ls
    jdk8  scala-2.12.10

    #创建或编辑自定义环境变量shell脚本
    vim /etc/profile.d/my.sh
    #-----------------------------------------------
    #scala 2.12
    export SCALA_HOME=/opt/software/scala212
    export PATH=$SCALA_HOME/bin:$PATH
    #-------------------------------------
    #每次添加新的环境变量要激活才能生效
    source /etc/profile
    #测试
    scala -version
    #进入客户端
    scala
    scala>...


    #9、MYSQL、JDK、SCALA

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值