精华内容
参与话题
问答
  • Linux对于每个用户,系统限制其最大进程。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程 ...对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言, 最好通过使用 ulimit -n xx


    Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数

    可以用ulimit -a 来显示当前的各种用户进程限制。
    下面我把某linux用户的最大进程数设为10000个:
    ulimit -u 10240
    对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,
    最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。
    ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
    其他建议设置成无限制(unlimited)的一些重要设置是:
    数据段长度:ulimit -d unlimited
    最大内存大小:ulimit -m unlimited
    堆栈大小:ulimit -s unlimited
    CPU 时间:ulimit -t unlimited
    虚拟内存:ulimit -v unlimited
      
    暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
    永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如:

    1)、解除 Linux 系统的最大进程数和最大文件打开数限制:
    vi /etc/security/limits.conf
    # 添加如下的行
    * soft noproc 11000
    * hard noproc 11000
    * soft nofile 4100
    * hard nofile 4100
    说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数
    2)、让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:
    a、vi /etc/ssh/sshd_config
    把 UserLogin 的值改为 yes,并把 # 注释去掉
    b、重启 sshd 服务:
    /etc/init.d/sshd restart
    3)、修改所有 linux 用户的环境变量文件:
    vi /etc/profile
    ulimit -u 10000
    ulimit -n 4096
    ulimit -d unlimited
    ulimit -m unlimited
    ulimit -s unlimited
    ulimit -t unlimited
    ulimit -v unlimited

    保存后运行#source /etc/profile 使其生效

    /**************************************

    有时候在程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
    修改2个文件。


    1./etc/security/limits.conf
    vi /etc/security/limits.conf
    加上:
    * soft nofile 8192
    * hard nofile 20480


    2./etc/pam.d/login
    session required /lib/security/pam_limits.so
    /**********
    另外确保/etc/pam.d/system-auth文件有下面内容
    session required /lib/security/$ISA/pam_limits.so
    这一行确保系统会执行这个限制。


    /***********
    3.一般用户的.bash_profile
    #ulimit -n 1024
    重新登陆ok

    ulimit 的作用
    =======================

    ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。


    参数 描述
    ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
    和可同时运行的最大进程数(max user processes)无效
    -a 列出所有当前资源极限
    -c 设置core文件的最大值.单位:blocks
    -d 设置一个进程的数据段的最大值.单位:kbytes
    -f Shell 创建文件的文件大小的最大值,单位:blocks
    -h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
    -l 可以锁住的物理内存的最大值
    -m 可以使用的常驻内存的最大值,单位:kbytes
    -n 每个进程可以同时打开的最大文件数
    -p 设置管道的最大值,单位为block,1block=512bytes
    -s 指定堆栈的最大值:单位:kbytes
    -S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者
    -t 指定每个进程所使用的秒数,单位:seconds
    -u 可以运行的最大并发进程数
    -v Shell可使用的最大的虚拟内存,单位:kbytes
    -x

    范例1:

    [root@localhost proc]# ulimit -a
    core file size (blocks, -c) 100
    data seg size (kbytes, -d) unlimited
    file size (blocks, -f) unlimited
    pending signals (-i) 2047
    max locked memory (kbytes, -l) 32
    max memory size (kbytes, -m) unlimited
    open files (-n) 1024
    pipe size (512 bytes, -p) 8
    POSIX message queues (bytes, -q) 819200
    stack size (kbytes, -s) 8192
    cpu time (seconds, -t) unlimited
    max user processes (-u) 2047
    virtual memory (kbytes, -v) unlimited
    file locks (-x) unlimited
    [root@localhost proc]#

    输出的每一行由资源名字、(单位,ulimit命令的参数)、软限制组成。详细解释:
    参数 描述
    core file size core文件的最大值为100 blocks,
    data seg size 进程的数据段可以任意大
    file size 文件可以任意大
    pending signals 最多有2047个待处理的信号
    max locked memory 一个任务锁住的物理内存的最大值为32kB
    max memory size 一个任务的常驻物理内存的最大值
    open files 一个任务最多可以同时打开1024的文件
    pipe size 管道的最大空间为4096字节
    POSIX message queues POSIX的消息队列的最大值为819200字节
    stack size 进程的栈的最大值为8192字节
    cpu time 进程使用的CPU时间
    max user processes 当前用户同时打开的进程(包括线程)的最大个数为2047
    virtual memory 没有限制进程的最大地址空间
    file locks 所能锁住的文件的最大个数没有限制

    范例2:通过ulimit命令来限制文件的大小,从而导致拷贝命令的失败

    [root@localhost]ls temp.txt
    ls: temp.txt: 没有那个文件或目录
    [root@localhost]ulimit -f 1 #设置创建文件的最大块(一块=512字节)
    [root@localhost]cat a.c > temp.txt
    文件大小超出限制

    文件a.c的大小是5002字节,而我们设定的创建文件的大小是512字节x1块=512字节 


    展开全文
  • shell脚本基本命令

    千次阅读 2019-08-01 19:03:48
    shell介绍 shell是一段应用程序,是用户和操作系统交互的一个桥梁 shell是弱类型语言,在定义变量时不需要指定变量的类型 二变量 变量名=变量值 变量名不能以数字开头,字母数字、下划线组成 输出变量内容 ...

    一shell介绍

    shell是一段应用程序,是用户和操作系统交互的一个桥梁

    shell是弱类型语言,在定义变量时不需要指定变量的类型

    二变量

    变量名=变量值

    变量名不能以数字开头,字母数字、下划线组成

    输出变量内容 echo $变量名

    释放变量  unset 变量名

    双引号:如果变量值中存在$变量名,则输出变量名对应的变量值,在$变量前加转义符\,则可原样输出

    单引号:如果变量值中存在$变量名,则原样输出

    #输出当前所在目录
    vi script1.sh
    #!/bin/bash
    dir='pwd'
    echo $dir
    #添加执行权限
    chmod +x

    统计某目录下有多少文件

    vi script.sh
    
    #!/bin/bash
    
    cd /etc
    
    filename=ls -l|wc -l
    
    echo "该目录下有$filename个文件"
    
    :wq
    
    sh script.sh

    三read,echo,数组的使用

    ①read a b

    helloword girl boy

    则  a=helloword,b=girl boy

    复制   cp script.sh script1.sh

    输入:read 变量名

               read -p '输入提示的信息' 变量名 

    ②echo 命令用于向窗口输出文本。

    #!/bin/bash

    echo "这是数据是$1"     #第一个参数

    echo "这是数据是$0"  #文件名称

    echo "这是数据是$4"   #第4个参数

    echo "这是数据是$@"   #显示全部参数

    echo "这是数据是$#"   #显示参数的个数

     

    sh script4.sh 100 200 300 400

    echo 这是数据是100

    echo 这是数据是 script4.sh   #指向该脚本的名称

    echo 这是数据是400

     

    多行注释:
    :<<EOF
    注释内容...
    注释内容...
    注释内容...
    EOF

    ③数组

    Bash Shell 只支持一维数组(不支持多维数组),Shell 数组用括号来表示,元素用"空格"符号分割开
    my_array=(A B "C" D)      
    也可以使用下标来定义数组  
    array_name[0]=value0
    array_name[1]=value1
    读取数组    , 使用@ 或 * 可以获取数组中的所有元素
    echo "第一个元素为: ${my_array[0]}"
    echo "数组的元素为: ${my_array[*]}"
    echo "数组的元素为: ${my_array[@]}"
    获取数组的长度: echo "数组元素个数为: ${#my_array[*]}"
    运算:反引号 ` ,表达式和运算符之间要有空格
    val=`expr 2 + 2`
    echo "两数之和为 : $val"

    四 重定向:把命令的内容输出到文件中

    正确命令  ls 1>a.txt  覆盖内容      ls 1>>a.txt  追加内容

    cat  a.txt

    错误命令  ls 2>a.txt  覆盖内容      ls 2>>a.txt  追加内容

    五程序的结构


                if..else分支
                if...elif...else分支
                case分支
                逻辑运算符:-a -o !
                数字比较运算符: -eq/-ne/-gt/-ge/-lt/-le
                字符串比较:==  !=
                文件状态测试:test 参数 变量名
                文件判断:-参数 变量名

    ①if --else

    1条件两边要有空格 2多个条件间要有空格 3if后面要有空格 4条件中如果存在变量,那么变量两边要有双引号,以fi结尾

    1. 练习:判断 /root目录是否为空

        涉及知识点:字符串间的判断: ==字符串是否相等,!=是否不相等

    script1.sh
    #!/bin.bash
    dir =’ls /root’  
    if [ “$dir”==” ” ]           #if [ “$dir”==” ” ]:then
    then
            echo “目录为空”
    else
            echo “目录不为空”
    fi
    
    
    
    
    read -p "请输入目录:" dir
    d='ls $dir' 
    if [ “$dir”==” ” ]           #if [ “$dir”==” ” ]:then
    then
            echo “目录为空”
    else
            echo “目录不为空”
    fi

    ②逻辑运算符

    运算符    说明    举例
    !    非运算,表达式为 true 则返回 false,否则返回 true。    [ ! false ] 返回 true。
    -o    或运算,有一个表达式为 true 则返回 true。    [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a    与运算,两个表达式都为 true 才返回 true。    [ $a -lt 20 -a $b -gt 100 ] 返回 false。
     

    2. 练习:判断用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败

    script2.sh
    #!/bin/bash
    
    read -p "请输入你的用户名和密码:" username password
    if [ "$username"=="admin" -a "$password"=="123456"]
    then
            echo "success"
    else
            echo "fail"
    fi

     

    变量运算的多种写法

           -eq/-ne/-gt/-ge/-lt/-le

    ((i++))  ((i+=1))  i=$[$i+1]  let i=i+1  i=$(($i+1))

    -eq :相等

    -ne:不相等

    -gt:大于

    -ge:大于等于

    -lt:小于

    -le:小于等于

    3.练习:判断学生的成绩,大于90-100提示优秀,80-90之间提示良好,70-80之间则提示一般,60-70之间提示及格。其他则提示不及格

    vi script3.sh
    #!/bin/bash
    #
    read -p "" score
    #
    if [ "$score" -ge 90 -a "$score" -le 100]
    then
        echo "excellent"
    elif [ "$score" -ge 80 -a "$score" -lt 90]
    then
        echo "good"
    elif [ "$score" -ge 70 -a "$score" -lt 80]
    then
        echo "general"
    elif [ "$score" -ge 60 -a "$score" -lt 70]
    then
        echo "Pass"
    else
        echo "just try again"
    fi 
    

    ③case分支练习

    1.练习:输入一个序号,判断该用户选择哪款产品,A:笔记本 B:电饭煲 C:小台灯

    vi script.sh
    insert
    #!/bin/bash
    read -p "请输入产品:" pro
    case $pro in
    "A")
        echo "笔记本"
    "B")
        echo "电饭煲"
    "C")
        echo "小台灯"
    esac
    
    
    :wq
    sh script.sh

    2.练习:请输入对客服的满意度,【0-3】不满意,【4-6】满意,【7-9】非常满意

    #!/bin/bash
    read -p "请做出评价" pj
    case $pj in
    [0-3])
        echo "不满意"
    [4-6])
        echo "满意"
    [7-9])
        echo "非常满意"
    esac

    ④循环练习:

    1.练习:输出1-10之间的数

    #!/bin/bash
    for i in 1 2 3 4 5 6 7 8 9 10
    do
        echo $i
    done
    
    
    
    
    
    
    for i in seq 1 1 10
    do
        echo $i
    done

    2.1-100之间的和

    seq start size max

    开始点 间隔 结束点   如果size为1,可以省略

    i=1
    sum=0
    while ["$i" -le 100]
    do 
        sum=$(($sum+$i))
        ((i++))
    done
    echo $sum

     

    8. 练习判断用户输入的目录是否存在如果存在则统计目录下的文件个数否则提示用户该目录不存在

        test 参数 变量名---->测试文件的状态

    -e 表示文件是否存在

    -f 表示文件是否存在且为文件

    -d 表示文件名是否存在且为目录

    -r 可读

    -w 可写

    -x 可执行

    #!/bin/bash
    #提示用户输入
    read -p "请输入一个目录:" dir
    #进行判断
    if test -d $dir
    then
    #统计文件的个数
        filenum='ls -l $dir|wc -l'
        echo "目录$dir下的文件个数为$filenum"
    else
        echo "目录不存在"
    fi

    8. 练习判断用户输入的目录是否存在如果存在则统计目录下的文件个数否则提示用户该目录不存在

        test 参数 变量名---->测试文件的状态

    -e 表示文件是否存在

    -f 表示文件是否存在且为文件

    -d 表示文件名是否存在且为目录

    -r 可读

    -w 可写

    -x 可执行

     

    函数

    read -p "请输入第一个参数" num1
    read -p "请输入第二个参数" num2
    hello()[
        echo "helloworld"
        echo "第一个参数$1"
        echo "第一个参数$2"
    ]
    #hello 1 100
    hello $num1 $num2

    ⑤函数练习:

    输入一个目录,判断目录是否存在,如果不存在则给出提示,如果存在则提示输入要创建的文件名,判断创建的文件是否存在,如果不存在,则继续创建,否则提示该文件已经存在

    #创建文件函数
    creatfile()[
        cd $1
        read -p "请输入文件:" filename
        if [ -f "$filenme" ]
        then 
            echo "该文件已经存在"
        else
            echo "文件不存在"
            echo "开始创建文件"
            touch $filename
            echo "文件创建成功"
        fi
    ]
    read -p "请输入目录:" dir
    if [ -d "$dir" ]
    then
        #调用创建函数
        createfile $dir
    else
        echo 目录不存在“”
    fi

    ⑥算术运算

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

    实例
    #!/bin/bash

    val=`expr 2 + 2`
    echo "两数之和为 : $val"

    输出结果如下所示:

    两数之和为 : 4
    两点注意:

    表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
    算术运算符
    下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

    运算符    说明    举例
    +    加法    `expr $a + $b` 结果为 30。
    -    减法    `expr $a - $b` 结果为 -10。
    *    乘法    `expr $a \* $b` 结果为  200。
    /    除法    `expr $b / $a` 结果为 2。
    %    取余    `expr $b % $a` 结果为 0。
    =    赋值    a=$b 将把变量 b 的值赋给 a。
    ==    相等。用于比较两个数字,相同则返回 true。    [ $a == $b ] 返回 false。
    !=    不相等。用于比较两个数字,不相同则返回 true。    [ $a != $b ] 返回 true。
    注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

    #!/bin/bash
    
    a=10
    b=20
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a \* $b`
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    
    if [ $a == $b ]
    then
       echo "a 等于 b"
    fi
    if [ $a != $b ]
    then
       echo "a 不等于 b"
    fi
    
    
    执行脚本,输出结果如下所示:
    
    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a 不等于 b

    判断当前用户是否为root

    if [ "USER"=="root" ]
    then 
        echo "当前用户是root"
    else
        echo "当前不是root"
    fi

    七关于显示命令

    1.显示换行
    echo -e "OK! \n" # -e 开启转义
    echo "It is a test"
    输出结果:

    OK!

    It is a test
    2.显示不换行
    #!/bin/sh
    echo -e "OK! \c" # -e 开启转义 \c 不换行
    echo "It is a test"
    输出结果:

    OK! It is a test

    3.显示命令执行结果
    echo `date`
    注意: 这里使用的是反引号 `, 而不是单引号 '。


    结果将显示当前日期

    Thu Aug 1 14:15:46 CST 2019

    printf 命令,printf 的脚本比使用 echo 移植性好
    printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
    printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
    printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
    姓名     性别   体重kg
    郭靖     男      66.12
    杨过     男      48.65
    
    printf '%d %s\n' 1 "abc" 
    printf %s abcdef
    printf %s abc def
    printf "%s %s %s\n" a b c d e f g 
    printf "%s and %d \n" 
    
    1 abc
    abcdefabcdefabc
    a b c
    d e f
    g 
     and 0

    九 Shell test 命令
    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
    统计 users 文件的行数,执行以下命令:
    $  wc -l < users                  2 users
    $  wc -l < users                  2 

    /dev/null 文件
    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
    $ command > /dev/null
           

    展开全文
  • Shell脚本基本命令

    千次阅读 2015-06-01 18:49:11
    shell脚本运行方式 $sh script.sh $sh /home/path/script.sh $chmod a+x script.sh ; $./script.sh echo的三种使用方式 echo hello world 不能包含一些特殊关键字,如分号; echo "hello word" 不能包含一些特殊...
    
    

    shell脚本运行方式

    $sh script.sh
    $sh /home/path/script.sh
    $chmod a+x script.sh ; $./script.sh

    脚本调试方法


    shell脚本的三种调试方法:
    -n   读一遍脚本中的命令但不执行,用来检查脚本中的语法错误
    -v   一边执行脚本,一边将执行过的脚本命令打印到标准输出端
    -x   提供跟踪执行信息,将执行的每一条命令和结果一次打印出来
    这应该就像C语言的gdb一样有用吧,有助于检查错误
    使用这些选项有三种方法
    1.在命令行提供参数:$sh -x script.sh
    2.脚本开头提供参数:#!/bin/sh -x
    3.在脚本中用set命令启用or禁用参数:其中set -x表启用,set +x表禁用

    另:在写脚本的时候,需特别注意添加空格或换行或分号
    eg   text命令:  $[ 5 -lt 10 ]左方括号后须有空格,右方括号前也须有空格
            shell脚本中函数定义: foo() {后须有空格或换行
            shell脚本中,若同一行内写有两条命令须加分号
    与C语言不同的是,shell脚本中,返回值0表真,1表假。

    echo的三种使用方式

    echo hello world 不能包含一些特殊关键字,如分号;
    echo "hello word" 不能包含一些特殊字符,比如!
    echo 'hello word" 包含'$var'变量不能被求值


    echo默认会将一个换行符追加到输出后,如果想禁止,可以使用-n这个选项
    如果想要使某些转义字符生效,则可以使用-e这个选项,如 
    echo "\ta\tb" 会输出 \ta\tb
    echo -e "\ta\tb" 则会输出 a b


    显示某些进程的环境变量

    [hadoop@Hadoop ~]$ pgrep bash
    3182
    [hadoop@Hadoop ~]$ cat /proc/3182/environ 
    USER=hadoopLOGNAME=hadoopHOME=/home/hadoopPATH=/usr/local/bin:/bin:/usr/binMAIL=/var/mail/hadoopSHELL=/bin/bashSSH_CLIENT=192.168.1.1 5649 22SSH_CONNECTION=192.168.1.1 5649 192.168.1.10 22SSH_TTY=/dev/pts/0TERM=vt100SELINUX_ROLE_REQUESTED=SELINUX_LEVEL_REQUESTED=SELINUX_USE_CURRENT_RANGE=



    算术运算

    使用 let、(())、[]执行基本的算术运算。

    如let a = b+c; let a++;let a--;
    也可以使用[], a=$[b+c];  a=$[$b+5]
    也可以使用(()),不过都需要在变量前加上$
    删除变量:unset


    tee

    tee命令:以stdin作为输入,将其输入到某个文件中,并原样输出



    显示变量

    set 显示当前shell的变量,包括当前用户环境变量和自己定义的变量

    env 显示当前用户环境变量
    export 显示当前导出成用户变量的shell变量


    关联数组即 Map

    [hadoop@Hadoop ~]$ declare -A map_array
    [hadoop@Hadoop ~]$ map_array[index1]=val1
    [hadoop@Hadoop ~]$ map_array[index2]=val2
    [hadoop@Hadoop ~]$ echo ${map_array[*]}
    val1 val2
    [hadoop@Hadoop ~]$ echo ${!map_array[*]}
    index1 index2

    cat

    作用:读取、显示、拼接文件内容。
    将AB两个文件内容一块输出 [hadoop@Hadoop ~]$ cat A B
    将输入文本与A一块显示 [hadoop@Hadoop ~]$ echo "Hello" | cat - A
    压缩空白行 cat -s  A
    将制表符显示为^|  cat -T A
    显示文本行号 cat -n A


    find

    作用:查找路径及子路径下所有的文件和文件夹
    查找script目录下所有的文件
    [hadoop@Hadoop ~]$ find script/
    script/
    script/timing.log
    script/output.session


    根据文件名或正则表达式匹配搜索
    [hadoop@Hadoop ~]$ find script/ -name "t*" #必须用引号括起来
    [hadoop@Hadoop ~]$ find script/ -iname "t*" #忽略文件名的大小写


    可以用OR连接多个条件
    [hadoop@Hadoop ~]$ find script/ \( -name "t*" -o -name "out*" \)#注意空格
    script/timing.log
    script/output.session


    可以使用参数指定查找深度
     -maxdepth 1 #指定查找的最大深度

     -mindepth 1 #指定查找的最小深度,即只列出1层以上的文件列表


     根据文件类型搜索

     -type d #只列出文件夹  -type f #只列出普通文件


     此外还可以根据时间和文件大小,还可以使用-delete删除找到的文件。
     -exec 可以对查出的每一个文件分别进行处理,如将文件所有者root改为hadoop:
     [hadoop@Hadoop temp]$ sudo find . -type f -user root -exec chown hadoop {} \;

    xargs

    作用:将标准输入转换成命令行参数或者将单行或多行文本转换成命令行参数
    [hadoop@Hadoop ~]$ cat A | xargs #将A文件多行数据转换成单行输入,即将换行符替换为空格
    [hadoop@Hadoop ~]$ cat A | xargs -n 3#将A文件多行数据重新分割并按3个进行分组
    [hadoop@Hadoop ~]$ cat A | xargs -d i #指定分隔符为 i

     小提示:xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 file 1.log 被解释成了两个记录 file 和 1.log, 不幸的是 rm 找不到这两个文件.为了解决此类问题, 让 find命令在打印出一个文件名之后接着输出一个 NULL 字符 ('') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符. 这就是 find 的 -print0 和 xargs 的 -0 的来历吧.


    sort和uniq

    [hadoop@Hadoop ~]$sort A #对A文件进行升序排序
    [hadoop@Hadoop ~]$sort -r A #对A文件进行逆序排序
    [hadoop@Hadoop ~]$sort -n A #对A文件按数字进行排序
    [hadoop@Hadoop ~]$sort -k 2 A #根据第二列进行排序


    uniq总是和sort一起使用,可以消除重复的行


    脚本文件参数

    $0 这个程式的执行名字
    $n 这个程式的第n个参数值,n=1..9
    $* 这个程式的所有参数,此选项参数可超过9个。
    $# 这个程式的参数个数
    $$ 这个程式的PID(脚本运行的当前进程ID号)
    $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
    $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    $- 显示shell使用的当前选项,与set命令功能相同
    $@ 跟$*类似,但是可以当作数组用
    展开全文
  • Shell脚本基础及基本常用命令

    万次阅读 2018-06-16 11:10:07
    一、shell基本信息 1.概述 脚本语言(shell、python):解释性语言,用解释器解释 运行效率低 | c、java:描述性语言,运行效率高 #!/bin/bash 幻数 ,在脚本运行的时候先进行该程序 以.sh结尾会有高亮显示 ...

    一、shell基本信息

    1.概述
    脚本语言(shell、python):解释性语言,用解释器解释 运行效率低 | c、java:描述性语言,运行效率高
    #!/bin/bash 幻数 ,在脚本运行的时候先进行该程序
    以.sh结尾会有高亮显示
    执行: sh hello.sh 或者 chmod +x hello.sh 再以绝对路径调用 /mnt/hello.sh
    2.shell脚本

    • 脚本是一种解释型语言
    • 用 shell 脚本保存执行动作
    • 用脚本判定命令的执行条件
    • 用脚本来实现动作的批量执行

    二、新建脚本自动添加注释信息

    [root@localhost mnt]# vim  /etc/vimrc 
    map <F4> ms:call MESS()<cr>'s
    func MESS()
            call append(0,"#################################")
            call append(1,"#Author:         gao".(" #"))
            call append(2,"#Version:                ".("    #"))
            call append(3,"#Mail:   gw@163.com".("          #"))
            call append(4,"#Date:           ".strftime("%Y-%m-%d").("       #"))
            call append(5,"#Description:    ".("            #"))
            call append(6,"# ".("                           #"))
            call append(7,"#################################")
            call append(8," ")
            call append(9,"#!/bin/bash")
    endfunc
    [root@localhost mnt]# vim  file.sh   ##新建一个脚本会自动添加注释信息

    配置文件所加内容(在建立一个脚本的情况下按F4会添加信息)
    这里写图片描述
    脚本的信息
    这里写图片描述
    注释掉按F4添加信息,改为自动给新建的脚本添加注释
    这里写图片描述

    三、编写脚本,执行该脚本显示ip

    [root@localhost mnt]# vim  ip_show.sh
    ifconfig eth1 |awk -F " " '/inet\>/{print $2}'
    [root@localhost mnt]# chmod  +x  ip_show.sh ##给一个可执行权限
    [root@localhost mnt]# /mnt/ip_show.sh   ##用绝对路径的方式调用
    [root@localhost mnt]# sh ip_show.sh    ##直接调用脚本

    内容如下:
    这里写图片描述
    执行该脚本的情况
    这里写图片描述

    四、常用的shell命令

    1.diff命令
    diff 命令是用来比较两个文件或目录的不同
    c –change d –delete a –add

    <表示第一个文件中的内容
    —-分割线
    >表示第二个文件中的内容
    [root@localhost mnt]# vim  westos
    [root@localhost mnt]# vim westos1
    [root@localhost mnt]# cat  westos
    hello   123
    linux
    [root@localhost mnt]# cat  westos1
    hello   123
    [root@localhost mnt]# diff westos  westos1    ##第一个和第二个进行比较以第二个文件为准则
    2d1                                           ##删除第一个文件的第二行才能和第二个文件的第一行匹配 
    < linux
    

    对文件进行补丁

    [root@localhost mnt]# diff  -u  westos westos1  ##生成补丁 
    --- westos  2018-06-09 22:44:21.237865024 -0400
    +++ westos1 2018-06-09 22:45:25.921865024 -0400
    @@ -1,2 +1 @@
     hello 123
    -linux
    [root@localhost mnt]# diff -u  westos westos1 > westos.path  
    f -u  westos westos1 > westos.path
    [root@localhost mnt]# yum  install patch -y  ##下载补丁工具
    [root@localhost mnt]# patch westos westos.path 
    patching file westos
    [root@localhost mnt]# cat westos
    hello 123

    这里写图片描述
    补丁的同时进行备份

    [root@localhost mnt]# patch -b  westos westos.path ##进行备份生成.orig文件,-b保留原文件,并进行补丁
    patching file westos
    [root@localhost mnt]# ls
    westos  westos1  westos.orig  westos.path
    [root@localhost mnt]# cat westos.orig ##补丁之前的源文件
    hello 123
    linux

    对目录的比较:

    [root@localhost mnt]# mkdir linux
    [root@localhost mnt]# mkdir unix
    [root@localhost mnt]# ls
    linux  unix  westos  westos1  westos.orig  westos.path
    [root@localhost mnt]# touch linux/hello
    [root@localhost mnt]# diff -r linux/ unix/
    Only in linux/: hello
    

    2.cut命令
    cut 命令多用与字符截取

    • cut -d 指定分隔符
    • cut -f 1,7|1-7 指定截取的列 1,7(1和7) 1-7(1到7)
    • cut -c 1,4|1-4 指定截取的字符位置
    [root@localhost mnt]# cp  /etc/passwd  .
    [root@localhost mnt]# ls
    ip_show.sh  passwd  westos  westos1
    [root@localhost mnt]# vim  passwd 删除一部分便于实验
    [root@localhost mnt]# cut  -d  :  -f  1-2 passwd  ##以:为分隔符截取第一列和第二列

    这里写图片描述

    [root@localhost mnt]# cut  -d  :  -f  1,7 passwd ##以:为分隔符截取第1列和第7列
    

    这里写图片描述

    [root@localhost mnt]# cut -c  1-4 passwd    ##截取第一到第四个字符

    这里写图片描述
    3.sort命令

    多用于字符排序
    sort -n 纯数字排序
    sort -r 倒序
    sort -u 去掉重复数字
    sort -o 输出到指定文件中
    sort -t 指定分隔符
    sort -k 指定要排序的列

    [root@localhost mnt]# vim hello  ##编辑一个由数字组成的文件
    [root@localhost mnt]# cat hello 
    3
    4
    5
    2
    1
    6
    8
    4
    45
    55
    33
    2
    [root@localhost mnt]# sort  -n hello  ##正序排序
    1
    2
    2
    3
    4
    4
    5
    6
    8
    33
    45
    55
    [root@localhost mnt]# sort -r  hello ##倒序排序,默认只排第一位的数字
    8
    6
    55
    5
    45
    4
    4
    33
    3
    2
    2
    1
    [root@localhost mnt]# sort -nr  hello ##倒叙排序
    55
    45
    33
    8
    6
    5
    4
    4
    3
    2
    2
    1
    [root@localhost mnt]# sort -nr -u  hello  ##倒叙排序,删除重复的项
    55
    45
    33
    8
    6
    5
    4
    3
    2
    1
    [root@localhost mnt]# sort -nr  hello   -o  file  ##倒序排序输出到file文件
    [root@localhost mnt]# cat file  ##查看文件
    55
    45
    33
    8
    6
    5
    4
    4
    3
    2
    2
    1
    
    [root@localhost mnt]# vim hello 
    [root@localhost mnt]# cat hello 
    [root@localhost mnt]# sort  -t  :  -k  2 -n hello 

    这里写图片描述
    4.uniq命令
    对重复字符做相应的处理

    • uniq -u 显示唯一的行
    • uniq -d 显示重复的行
    • uniq -c 每行显示一次并统计重复次数
    [root@localhost mnt]# vim hello 
    [root@localhost mnt]# cat hello 
    

    这里写图片描述

    [root@localhost mnt]# sort -n  hello |uniq  -c
    

    这里写图片描述

    [root@localhost mnt]# sort -n  hello |uniq  -d  ##将文件正序排列,显示重复的数字
    [root@localhost mnt]# sort -n  hello |uniq  -u  ##将文件正序排列,显示不重复的数字
    

    这里写图片描述
    5.&&和||运算符
    && 用来执行条件成立后执行的命令,|| 用来执行条件不成立后执行的命令

    [root@localhost mnt]# ping -c1 -w1  172.25.254.62  &> /dev/null && echo this is up|| echo  this  is  down
    this is up
    ## -c代表次数   -w代表等待时间

    编写脚本判断ip是否存在

    [root@localhost mnt]# vim   ip_check.sh
    #!/bin/bash
    [ -z "$1" ] &&{
            echo please give me a ipaddress!!
            exit 1
    }
    ping -c1 -w1 $1 &>  /dev/null  &&{
            echo "$1 is up"
    }||{
            echo "$1 is down"
    }   

    这里写图片描述
    执行脚本:

    [root@localhost mnt]# sh  ip_check.sh 
    please give me a ipaddress!!
    [root@localhost mnt]# sh  ip_check.sh 172.25.254.62
    172.25.254.62 is up
    [root@localhost mnt]# sh  ip_check.sh 172.25.254.5
    172.25.254.5 is down
    

    6.test命令
    test 命令和[ ]等同
    test “A==B” 等同 [ “A==B” ]
    [ “A=B” ]等于
    [ “A!=B” ]不等于
    [ “AeqB” ] 等于
    [ “AneB” ] 不等于
    [ “AleB” ] 小于等于
    [ “AltB” ] 小于
    [ “AgeB” ] 大于等于
    [ “AgtB” ] 大于
    [ “AneB” -a “AgtB” ] ne表示不等于,a表示and都满足
    [ “AneB” -o “AgtB” ] o表示or至少满足一个
    [ -z “A][nA” ] 表示值不为空
    [ “file1” -ef “file2” ] ef 表示节点是否相同
    [ “file1” -nt “file2” ] 表示new,file1是否比file2文件新
    [ “file1” -ot “file2” ] 表示old,file1是否比file2文件老
    [-e “file”] 文件是否存在
    [-f “file”] 文件是否为普通文件
    [-L “file”] 文件是否为符号链接
    [-S “file”] 文件是否为套接字
    [-b “file”] 文件是否为块设备
    [-d “file”] 文件是否为目录
    [-c “file”] 文件是否为特殊文件

    判断两个数字是否相等

    [root@localhost mnt]# a=1
    [root@localhost mnt]# b=2
    [root@localhost mnt]# [ "$a" == "$b" ] && echo yes || echo no
    no
    [root@localhost mnt]# test "$a" == "$b" && echo yes ||echo no
    no
    

    判断节点数是否相等

    [root@localhost mnt]# touch file
    [root@localhost mnt]# ln file  file1
    [root@localhost mnt]# ls -li *
    8842676 -rw-r--r-- 2 root root   0 Jun 15 22:04 file
    8842676 -rw-r--r-- 2 root root   0 Jun 15 22:04 file1
    [root@localhost mnt]# [ "file" -ef "file1" ] && echo yes  || echo no
    yes
    

    这里写图片描述
    判断文件的新旧

    [root@localhost mnt]# rm -rf file1
    [root@localhost mnt]# touch file1
    [root@localhost mnt]# [ "file"  -ot "file1" ] && echo yes || echo no
    yes
    [root@localhost mnt]# [ "file"  -nt "file1" ] && echo yes || echo no
    no
    

    编写脚本,输入一个数字判断是否在10以内

    [root@localhost mnt]# vim  num_check.sh
    #!/bin/bash
    [ -z "$1" ]&&{   ##$1表示输入的数字
            echo please input a number after scripts!!
            exit 1
    }
    [ "$1" -gt "0"  -a "$1" -lt  "10" ]&& { ##表示$1大于等于0并且小于等于10
            echo  "$1" is between 1~10
    }||{
            echo "$1" is not between 1~10
    }
    ~     

    这里写图片描述
    调用脚本:

    [root@localhost mnt]# sh num_check.sh 
    please input a number after scripts!!
    [root@localhost mnt]# sh num_check.sh 33
    33 is not between 1~10
    [root@localhost mnt]# sh num_check.sh 5
    5 is between 1~10
    

    编写脚本,判断文件是否存在,如果存在判断其类型

    [root@localhost mnt]# vim file_check.sh
    #!/bin/bash
    [ -z "$1" ]&& {
            echo "please input a filename after scripts!!"
            exit 1
    }
    [ -e "$1" ]||{
            echo "$1 is not exist!!"
            exit 0
    }
    [ -L "$1" ]&&{
            echo "$1 is a link"
            exit 0
    }
    [ -f "$1" ]&&{
            echo "$1 is a common file"
            exit 0
    }
    [ -b "$1" ]&&{
            echo "$1 is a block file"
    }
    

    这里写图片描述
    调用脚本:

    [root@localhost mnt]# sh file_check.sh 
    please input a filename after scripts!!
    [root@localhost mnt]# sh file_check.sh file
    file is a common file
    

    7.tr命令
    tr命令用于 大小写转换
    编写脚本,判断输入的内容和hello是否相等

    [root@localhost mnt]# vim  test.sh
    #!/bin/bash
    [ "$1" = "hello" ]&& {
            echo yes
    }||{
            echo no
    }

    脚本调用:

    [root@localhost mnt]# sh test.sh hello
    yes
    [root@localhost mnt]# sh test.sh HELLO  ##对于大写的hello不能识别
    no
    

    解决方案:

    [root@localhost mnt]# vim  test.sh
    #!/bin/bash
    WORD=$(echo $1 |tr 'A-Z' 'a-z')  ##利用变量WORD,将输入的字符从大写转换为小写
    [ "$WORD" = "hello" ]&& {
            echo yes
    }||{
            echo no
    }
    

    这里写图片描述
    脚本调用:

    [root@localhost mnt]# sh test.sh hello
    yes
    [root@localhost mnt]# sh test.sh HELLO
    yes
    

    五、用脚本建立用户

    基本思路:

    1、查看脚本后所跟字符是不是两串
    2、检测第一串字符是不是用户
    3、建立不存在的用户并设定密码
    [root@localhost mnt]# vim  user_create.sh
    #!/bin/bash
    [ "$#" -eq "2" ]||{
            echo "please input a username and password after script!!"
            exit 1
    }
    Check_User=`getent passwd $1`
    [ -n  "$Check_User" ] &&{
            echo $1 is exist!!
            exit 1
    }
    useradd $1
    echo $2 |passwd --stdin $1
    ~         

    这里写图片描述
    脚本调用:

    [root@localhost mnt]# sh user_create.sh  
    please input a username and password after script!!
    [root@localhost mnt]# sh user_create.sh  student 123
    student is exist!!
    [root@localhost mnt]# sh user_create.sh  linux 123
    Changing password for user linux.
    passwd: all authentication tokens updated successfully.
    [root@localhost mnt]# su - linux
    [linux@localhost ~]$ 
    
    展开全文
  • Shell 脚本常用命令

    千次阅读 2019-07-31 19:32:50
    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。 1 Shell中的特殊符号 1.1 $ 美元符号。用来表示变量的值。如变量...
  • shell脚本常用命令

    2017-09-18 17:05:43
    basename 1. basename 是去除目录...shell> temp=/home/temp/1.test shell> base=`basename $temp` shell> echo $base 结果为:1.test 2. dirname 是取目录 example: shell> temp=/home/temp/1.test shell
  • shell (计算机壳层) Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。...shell是一个命令语言解释器,它拥有自己内建的...
  • shell脚本中的awk命令

    千次阅读 2019-06-20 21:51:36
    sed命令疑难问题 sed -ri ‘/^H+/a 11111111111’ /etc/sysconfig/network 在文件里在以至少一个H开头的行追加111111111 sed -ir ‘/^H+/a 11111111111’ /etc/sysconfig/network 追加不会成功。在 /etc/...
  • shell脚本中的sed命令用法

    千次阅读 2019-06-20 21:46:26
    Shell脚本sed命令 知识要点 sed命令的工作原理 sed的常用编辑命令 sed的替换命令 sed的特殊用法 sed命令的工作原理 sed是一种支持正则表达式的交互式流编辑器(stream editor) 脚本中修改文本或者文本...
  • shell脚本基本语法详解

    万次阅读 多人点赞 2016-09-28 20:16:04
    编写shell脚本的时候,最前面要加上一行:#!/bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器。一.shell变量shell变量和...
  • linux--shell脚本常用脚本命令

    千次阅读 2018-06-14 22:39:03
    shell也是操作系统中的一个软件,他包含zailinux内核的外面,为了用户和内核之间的交互提供了一个接口系统中的命令用shell去解释shell接收到系统回应的输出并显示其到屏幕上什么是shell脚本?脚本是一种解释型语言 #...
  • linux系统中的shell脚本||脚本常用的命令

    万次阅读 多人点赞 2018-05-21 20:41:05
    脚本的编写 这里写代码片
  • Hadoop的Shell脚本命令

    2018-11-14 15:51:05
    1、Shell 常用命令介绍 1.1 -ls 使用方法 hadoop fs -ls [-R] <args> 功能:显示文件、目录信息。 示例:hadoop fs -ls /user/hadoop/file1 1.2-mkdir 使用方法 hadoop fs -mkdir [-p] <paths> ...
  • 基本的bash shell命令

    千次阅读 2017-09-13 22:59:47
    大多数linux发行版的默认都是GUNbash shell,本次将介绍bash shell的一些基本特征,bashshell基本命令来操作linux文件和目录。 1.启动shell Gun bash能提供对linux系统的交互式访问,它是作为普通的程序运行的,...
  • shell脚本 http://www.92csz.com/study/linux/12.htm vim命令 https://www.cnblogs.com/yangjig/p/6014198.html shell命令: 通配符:可以使用*来匹配零个或多个字符,而用?匹配一个字符 输入输出从定向:输入...
  • source会在当前shell环境中执行,如果直接执行,会开启一个子shell,在子shell中进入了该目录,脚本执行完后会退出子shell回到父shell环境 2. if语句 判断文件夹是否存在: myPath="/var/log/httpd/
  • Linux系统Shell脚本中的echo命令

    千次阅读 2019-04-16 16:54:41
    Linux系统Shell脚本中的echo命令 echo的作用 输出字符串 格式 echo "字符串内容" 一,显示转义字符 转义字符的格式 \进行转义的操作 例如\* \" 常见的转义字符 特殊符号以外的转义,需要加上-e去开启...
  • 命令行替换 (1)反引号字符(`) 示例 test=`date` !/bin/bash test=`date` echo &amp;quot;The date and time are: &amp;quot; $test (2)$()格式 示例 ...$t...
  • exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行。 常用方法: 格式:exit n 退出shell脚本,并设置退出码为n。 格式:exit 退出shell脚本,退出码为最后一个命令的退出码(即 $?)。 格式:trap ...
  • Shell脚本实现对文件编辑

    万次阅读 2018-04-24 16:13:04
    常见Linux文件的编辑命令 vi/vim,有时候我们想写一个脚本实现对文件编辑,这个时候,可能就不够用了,下面介绍一些办法1、echo命令Shell的echo命令常用于字符串的输出例如:[root@mdw zxy]# echo 'Hello World !...
  • shell脚本快速执行命令

    千次阅读 2019-03-24 11:26:02
    shell脚本快速执行命令1.gnome-terminal2.基本用法3.启动后自动执行命令4.demo15.demo2 1.gnome-terminal 常用,置顶: gnome-terminal -x bash -c "子终端要执行的命令1;2;...." gnome-terminal -t "title-name" -x...
  • shell脚本中执行命令Shell is a command-line interpreter that allows the user to interact with the system. It is responsible for taking inputs from the user and displaying the output. Shell是一个命令行...
  • Shell编程(脚本)的常用命令和语句

    千次阅读 2015-07-07 20:25:47
    一些常用的Shell编程(脚本命令和语句,可以满足一般需求。
  • Shell脚本命令运行时若不用创建子进程则是内置命令;—shell把它们当成脚本中的函数处理; 内置命令在目录列表时是看不见的,它们由Shell本身提供。常用的内置命令有:echo, eval,env, exec, export, readonly, ...
  • head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾~,看看下面的范例: ## (1) displays the first 6 ...
  • shell脚本中if基本使用方法

    万次阅读 2018-05-31 17:01:48
    f, for, while几乎是所有编程语言的关键字,在Shell编程中也不例外,其中if是使用频率最高的,由于Shell编程中不存在对象(Object)的概念,因此在if的比较判断中主要是对字符串、数字的值进行比较判断的: ...
  • SHELL基本知识及常用命令

    万次阅读 2018-06-25 14:51:32
    一、shell基本知识 1. 什么是shell shell shell也是操作系统中的一个软件,它包在 linux 内核的外面,为用户和内核之间的交互提供了一个接口,系统中的命令shell 去解释 shell 接收系统回应的输出并...

空空如也

1 2 3 4 5 ... 20
收藏数 126,272
精华内容 50,508
关键字:

电信改连接数shell无效