linux命令总结

1,文件管理
    cat 
        -n  由1开始对所有输出的行数编号
        -b  和-n类似,只不过对于空白行不编号
        案例:
        把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
        cat -n textfile1 > textfile2
        把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
        cat -b textfile1 textfile2 >> textfile3
        清空 /etc/test.txt 文档内容:
        cat /dev/null > /etc/test.txt
        
    chgrp
        改变文件或目录的所属群组
        案例:改变文件的群组属性:
        [root@localhost test]# ll
        ---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
        chgrp -v bin log2012.log
        输出:
        [root@localhost test]# ll
        ---xrw-r-- 1 root bin  302108 11-13 06:03 log2012.log
    
    chmod
        改变文件权限
        u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
        + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
        r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
        实例
        将文件 file1.txt 设为所有人皆可读取 :
        chmod ugo+r file1.txt
        
        将文件 file1.txt 设为所有人皆可读取 :
        chmod a+r file1.txt
        
        将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
        chmod ug+w,o-w file1.txt file2.txt

        将 ex1.py 设定为只有该文件拥有者可以执行 :
        chmod u+x ex1.py
        
        将目前目录下的所有文件与子目录皆设为任何人可读取 :
        chmod -R a+r *
        
        此外chmod也可以用数字来表示权限如 :
        chmod 777 file
        语法为:
        chmod abc file
        其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
        r=4,w=2,x=1
        若要rwx属性则4+2+1=7;
        若要rw-属性则4+2=6;
        若要r-x属性则4+1=5。
        chmod a=rwx file
        和
        chmod 777 file
        效果相同
        chmod ug=rwx,o=x file
        和
        chmod 771 file
        效果相同
        若用chmod 4755 filename可使此程序具有root的权限
    
    chown
        一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限。
        案例:
        将文件 file1.txt 的拥有者设为 root,群体的使用者 bin :
        chown root:bin file1.txt
        将目前目录下的所有文件与子目录的拥有者皆设为 root,群体的使用者 bin:
        chown -R root:bin *
        
    cmp
        用于比较两个文件是否有差异
        当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据。
        格式:cmp 文件a 文件b
    
    diff 
        比较两个文件的不同
        diff 文件a 文件b        比较两个文件
        diff 文件a 文件b -y -w   并排显示
        案例:
        [root@hdp10 ~]#    diff a  b -y -w
        1,q,12345                              |    12345
        3,q,12345                              |    12346
        4,e,12348                              |    12347
        5,e,12355                              |    12348
                                              >    12349
        说明:
        "|"表示前后2个文件内容有不同
        "<"表示后面文件比前面文件少了1行内容
        ">"表示后面文件比前面文件多了1行内容
    
    file
        通过file指令,我们得以辨识该文件的类型。
        案例:
        [root@hdp10 ~]# file zkdata
        zkdata: directory
        [root@hdp10 ~]# file a
        a: ASCII text
    
    find
        查找文件
        find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
        格式:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
        常用参数:
        -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
        -amin -n +n   :在过去N分钟内被读取过的文件 ,-n代表以内,+n代表以外
        -atime -n +n : 在过去n天内被读取过的文件,-n代表以内,+n代表以外
        -anewer file: 比文件file更晚被读取过的文件
        -cmin -n +n :在过去n分钟内被修改过的文件,-n代表以内,+n代表以外
        -ctime -n +n :在过去n天内被修改过的文件,-n代表以内,+n代表以外
        -cnewer file:比文件file更新的文件
        -empty :空的文件
        -group name :group是name的文件
        -name name:文件名符合name的文件
        -iname name:name忽略大小写
        -size -n +n: 文件大小是n单位  例子 find / -size 500M   500M以内的文件
        -type c:文件类型是C的文件。d是目录,f是文件
        
        实例
        将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
        find . -name "*.c"
        
        将目前目录其其下子目录中所有一般文件列出
        find . -type f
        
        将目前目录及其子目录下所有最近 20 天内更新过的文件列出
        find . -ctime -20
        
        查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
        find /var/log -type f -mtime +7 -ok rm {} \;
        
        查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
        find . -type f -perm 644 -exec ls -l {} \;
        
        为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
        find / -type f -size 0 -exec ls -l {} \;
    
    cut
        裁剪文档显示
        -c :以字符为单位进行分割。
        -d :自定义分隔符,默认为制表符。
        -f :与-d一起使用,指定显示哪个区域。
        
        案例1
        [root@hdp10 ~]# cat text
        1,q
        1,w
        2,e
        2,r
        5,t
        4,y
        3,o
        [root@hdp10 ~]# cut -f2 -d"," text    #f后面代表第几列
        q
        w
        e
        r
        t
        y
        o
        
        案例2
        cat test3.txt 
        abcdefghijklmnopqrstuvwxyz
        abcdefghijklmnopqrstuvwxyz
        abcdefghijklmnopqrstuvwxyz
        abcdefghijklmnopqrstuvwxyz
        abcdefghijklmnopqrstuvwxyz
        打印前2个字符
        cut -c-2 test3.txt 
        ab
        ab
        ab
        ab
        ab
        打印从第5个字符开始到结尾:
        cut -c5- test3.txt 
        efghijklmnopqrstuvwxyz
        efghijklmnopqrstuvwxyz
        efghijklmnopqrstuvwxyz
        efghijklmnopqrstuvwxyz
        
    ln
        软链接:
            1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
            2.软链接可以 跨文件系统 ,硬链接不可以
            3.软链接可以对一个不存在的文件名进行链接
            4.软链接可以对目录进行链接
            格式:ln -s text texttextlnr
        硬链接:
            1.硬链接,以文件副本的形式存在。但不占用实际空间。
            2.不允许给目录创建硬链接
            3.硬链接只有在同一个文件系统中才能创建
            格式:ln text textln
        案例
        -rw-r--r--   2 root root         28 Apr  9  2019 text
        -rw-r--r--   2 root root         28 Apr  9  2019 textln
        lrwxrwxrwx   1 root root         4  Mar 11 21:13 textlnr -> text
     less/more
        查看文档
        实例
        1、查看文件
        less log2013.log
        2、ps查看进程信息并通过less分页显示
        ps -ef |less            
                    
        快捷键
        j - 向前移动一行
        k - 向后移动一行
        G - 移动到最后一行
        g - 移动到第一行
        q / ZZ - 退出 less 命令
        
    locate
        locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。
        格式:locate file_name
        
    mv
        移动文件
        参数说明:
        -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
        -f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
        
    paste
        -s :并行显示
        案例:
        [root@hdp10 ~]# paste a
        1,q,12345
        3,q,12345
        4,e,12348
        5,e,12355
        [root@hdp10 ~]# paste -s a
        1,q,12345    3,q,12345    4,e,12348    5,e,12355
    
    rcp
         rcp命令用于复制远程文件或目录。
         -p  保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。
        -r  递归处理,将指定目录下的文件与子目录一并处理。
           rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。
        格式:rcp 【参数】 账号@ip:远程文件目录  本地目的地目录
        案例:
        设本地主机当前账户为rootlocal,远程主机账户为root,要将远程主机(218.6.132.5)主目录下的文件"testfile"复制到本地目录"test"中,则输入如下命令:
        rcp root@218.6.132.5:./testfile testfile  #复制远程文件到本地
    
    split
        切割格式:split [-b][-][-l]  要切割的文件名  [输出文件前缀] [-a 长度]
        最常用的选项,都在这里了:
        -b<字节>:指定按多少字节进行拆分,也可以指定 K、M、G、T 等单位。
        -<行数>或-l<行数>:指定每多少行要拆分成一个文件。
        输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
        -a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号
        
    tee
        tee命令用于读取标准输入的数据,并将其内容输出成文件。
        tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
        语法:tee [-ai][--help][--version][文件...]
        -a或--append  附加到既有文件的后面,而非覆盖它.
        -i或--ignore-interrupts  忽略例如ctrl+c的中断信号。
        案例:tee file1 file2 将标准输入输入到这两个文件
    
    tmpwatch
        删除暂存文件
        语法:tmpwatch [-afqv][--test][超期时间][目录...]
        -a或--all  删除任何类型的文件。
        -f或--force  强制删除文件或目录,其效果类似rm指令的"-f"参数。
        -q或--quiet  不显示指令执行过程。
        -v或--verbose  详细显示指令执行过程。
        -test  仅作测试,并不真的删除文件或目录。
        实例
        使用指令"tmpwatch"删除目录"/tmp"中超过一天未使用的文件,输入如下命令:
        tmpwatch 24 /tmp/ #删除/tmp目录中超过一天未使用的文件
    
    touch    
        创建文件
    
    which
        该指令会在环境变量$PATH设置的目录里查找符合条件的文件
        语法:which[文件]

    cp
        复制文件或目录
        cp [options] source dest
        -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
        -l:不复制文件,只是生成链接文件。
    
    whereis
        Linux whereis命令用于查找文件。
        该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
        该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
        
    scp
        scp 命令用于 Linux 之间复制文件和目录。
        scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
        scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
        语法
        scp [可选参数] file_source file_target 
        -r: 递归复制整个目录。
        -P port:注意是大写的P, port是指定数据传输用到的端口号
        案例:
        1、从本地复制到远程
        scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
        scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3 
        scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music 
        scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3 
        2、从远程复制到本地
        scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
        scp -r www.runoob.com:/home/root/others/ /home/space/music/
    
    awk
        -F :指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
        -v :赋值一个用户定义变量。
        -f :从脚本文件中读取awk命令。
        NF    每行字段的个数
        NR    已读的记录数,也就是行号
        应用:
        if--else语句:
            #输出错误等级为error的IP地址
            awk '{if($3=="[error]") print $5}' log.txt 
            #输出错误等级为error的IP地址,错误等级不为error输出错误等级
            awk '{if($3=="[error]")print $5; else print $3}' log.txt
        
        while语句:echo "" | awk -v i=1 '{while(i<){print(i); i = i + 1}}'
                    1
                    2
                    3
                    4
        for语句:echo "" | awk '{for(i=1;i<=3;i++) print i}'
                    1
                    2
                    3
        数组:awk '{line[NR]=$3}END{for (i=1;i<NR;i++) print line[i]}' file
            案例:[root@hdp10 ~]# cat c
                    4,e,12348
                    1,q,12345
                    3,q,12345
                    4,e,12348
                    5,e,12355
                    [root@hdp10 ~]# awk -F"," '{line[NR]=$3}END{for (i=1;i<=NR;i++) print line[i]}' c
                    12348
                    12345
                    12345
                    12348
                    12355
        生成随机数:echo ""|awk '{srand();print int(rand()*10)}'  结果为生成随机数5。#srand()将rand的函数种子,rand()返回任意数n,其中0<=n<1
        时间函数:#systime()函数返回当前时间戳
                    echo "" | awk '{print systime()}'
                    1581650690
                    [root@fengling ~]# date -d@1581650690
                    Fri Feb 14 11:24:50 CST 2020
                    [root@fengling ~]# date
                    Fri Feb 14 11:25:36 CST 2020
                    #strftime()函数格式化时间
                    echo "" | awk '{print strftime("%Y-%m-%d %H:%M:%s")}'
                    2020-02-14 11:28:1581650907
                    #mktime()将指定时间转换为时间戳
                    echo "" | awk '{print mktime(2018" "9" "10 " "10" "5" "20)}'
                    1536545120
        EGIN和END
            BEGIN{ 这里面放的是执行前的语句 }
            END {这里面放的是处理完所有的行后要执行的语句 }
            {这里面放的是处理每一行时要执行的语句}
            案例:
            [root@hdp10 ~]# cat c
            4,e,12348
            1,q,12345
            3,q,12345
            4,e,12348
            5,e,12355
            [root@hdp10 ~]# cat c|awk -F"," 'BEGIN{print "id,nm,score"}{print $0}END{print "c,lo,num"}'
            id,nm,score
            4,e,12348
            1,q,12345
            3,q,12345
            4,e,12348
            5,e,12355
            c,lo,num
        案例:
        awk -F"," '{if( $2==22){$3="sdfsdfsdf"}{print $0}}' file #判断替换
        awk -F"," '{sum += $3};END {print sum}' file             #求和
        cat file|awk -F"," '{print $1,1}'|awk '{s[$1] += $2}END{for(i in s){ print i,s[i]}}' >file2   #分组聚合
        cat file|awk '!a[$1]++{print}'               #去重
        awk '{ gsub(/AAAA/,"BBBB"); print $0}' file  #把每行的所有AAAA替换为BBBB
        cat file |awk -F"," ' $1>=2'                 #过滤满足条件的数据支持== > < ...
    
    read
        1,简单读取
        #!/bin/bash
        read web
        echo "网址:"$web
        
        2,-p参数,允许在read命令行中直接指定一个提示
        #!/bin/bash
        read -p "请输入网址" web
        echo "你输入的是"$web
        
        3,-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。
        #!/bin/bash
        if read -t 5 -p "输入网站名:" website
        then
            echo "你输入的网站名是 $website"
        else
            echo -e "\n抱歉,你输入超时了。"   #注意\n需要识别转义所以加 -e
        fi
        
        4,使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。
        #!/bin/bash
        read -n1 -p "Do you want to continue [Y/N]?" answer
        case $answer in
        Y | y)
            echo "fine ,continue";;
        N | n)
            echo "ok,good bye";;
        *)
            echo "error choice";;
        esac
        该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。

        5、-s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。
        #!/bin/bash
        read  -s  -p "请输入您的密码:" pass
        echo "\n您输入的密码是 $pass"
        exit 0
        执行程序输入密码后是不显示的:
        请输入您的密码:
        您输入的密码是 runoob
        
        6.读取文件
        每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。
        通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。
        测试文件 test.txt 内容如下:
        123
        456
        runoob
        测试代码:
        #!/bin/bash
        count=1    # 赋值语句,不加空格
        cat test.txt | while read line      # cat 命令的输出作为read命令的输入,read读到>的值放在line中
        do
        echo "Line $count:$line"
        count=$[ $count + 1 ]          # 注意中括号中的空格。
        done
        echo "finish"
        exit 0
        
        执行结果为:
        Line 1:123
        Line 2:456
        Line 3:runoob
        finish
        
2,文档编辑
    
    comm
        用于比较两个已经排过序的文件,并把结果显示出来,如果没指定参数,则会显示3列,第一列是仅在第一个文件出现过的列
        第二列是仅在第2个文件出现过的列,第三列是在第一和第二个文件都出现过的列
        语法:comm [-123][第1个文件][第2个文件]
        参数:
        -1 不显示只在第 1 个文件里出现过的列。
        -2 不显示只在第 2 个文件里出现过的列。
        -3 不显示只在第 1 和第 2 个文件里出现过的列。
        案例
        [root@hdp10 ~]# cat m
        aaa
        bbb
        ccc
        fff
        ggg
        [root@hdp10 ~]# vi n
        [root@hdp10 ~]# cat m
        aaa
        bbb
        ccc
        fff
        ggg
        [root@hdp10 ~]# cat n
        ccc
        ddd
        fff
        hhh
        [root@hdp10 ~]# comm m n
        aaa
        bbb
                        ccc
                ddd
                        fff
        ggg
                hhh
        第1列     第2列     第3列
    
    grep
        从文件内容查找与正则表达式匹配的行:
        grep –e "正则表达式" 文件名
        
        查找时不区分大小写:
        grep –i "被查找的字符串" 文件名
        
        查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件
        grep -r update /etc/acpi 
        
    join
        join命令用于将两个文件中,指定栏位内容相同的行连接起来。
        找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备
        
        格式:join [-i][-a<1或2>][-e<字符串>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][文件1][文件2]
        参数:
        -a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
        -e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
        -i或--igore-case 比较栏位内容时,忽略大小写的差异。
        -t<字符> 使用栏位的分隔字符。
        -v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
        -1<栏位> 连接[文件1]指定的栏位。
        -2<栏位> 连接[文件2]指定的栏位。
        案例    
        [root@hdp10 ~]# cat k
        ccc,34
        ddd,35
        fff,36
        hhh,37
        [root@hdp10 ~]# cat l
        aaa,24
        bbb,25
        ccc,26
        fff,27
        ggg,28
        [root@hdp10 ~]# join -t, k l
        ccc,34,26
        fff,36,27
        
    look
        用于查询单词,仅需给出想要查询的字首字符串,就会显示所有开头字符串符合该条件的单子
        语法;look     [-adf][-t<字尾字符串>][字首字符串][字典文件]
        参数说明:
        -a 使用另一个字典文件web2,该文件也位于/usr/dict目录下。
        -d 只对比英文字母和数字,其余一慨忽略不予比对。
        -f 忽略字符大小写差别。
        -t<字尾字符串> 设置字尾字符串。
        案例:为了查找在file文件中以字母L开头的所有的行,可以输入如下命令
            look L file
            
    sed
        语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
        参数说明:
        -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
        -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
        -h或--help 显示帮助。
        -n或--quiet或--silent 仅显示script处理后的结果。
        动作说明:
        a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
        c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
        d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
        i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);-i会直接修改文件
        p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
        s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
        
        案例:
            增加:
        
                在file文件的第3行后面添加一行,并将结果输出
                    sed '3a fsgs' file
                
                在file文件的第3行后面添加一行,并将结果保存到文件
                    sed -i 3a\helloworld file
                    
                输入多行
                [root@hdp10 ~]# sed -e '2a hello\
                                > world' m
                                aaa
                                bbb
                                hello
                                world
                                ccc
                注意换行要加\来进行新行的添加
        
            删除:
                以行为单位的新增/删除
                删除2到4行
                    root@hdp10 ~]# cat -n m
                        1    aaa
                        2    bbb
                        3    ccc
                        4    fff
                        5    dddd
                        6    ggg
                    root@hdp10 ~]# cat -n m|sed '2,4d'
                        1    aaa
                        5    dddd
                        6    ggg
                删除单行
                    [root@hdp10 ~]# cat -n m|sed '4d'
                        1    aaa
                        2    bbb
                        3    ccc
                        5    dddd
                        6    ggg
                    
            修改:
                以行为单位的替换
                    将2到5行换为hello
                    [root@hdp10 ~]# cat -n m
                        1    aaa
                        2    bbb
                        3    ccc
                        4    fff
                        5    dddd
                        6    ggg
                    [root@hdp10 ~]# cat -n m |sed '2,5c hello' 
                            1    aaa
                        hello
                            6    ggg
                
                以行为单位的显示
                    仅列出2到4行
                    [root@hdp10 ~]# cat -n m
                        1    aaa
                        2    bbb
                        3    ccc
                        4    fff
                        5    dddd
                        6    ggg
                    [root@hdp10 ~]# cat -n m|sed -n '2,4p'   #(p是打印的意思,一般与-n一块使用)
                        2    bbb
                        3    ccc
                        4    fff
                        
                数据的搜寻并替换
                    sed 's/要被取代的字串/新的字串/g'
                
            
                加-i为直接替换原文件内容
                
            查找:
                数据的搜寻与显示
                    搜索 /etc/passwd有root关键字的行
                    nl /etc/passwd | sed -n '/root/p'
                        1  root:x:0:0:root:/root:/bin/bash
                    
                数据的搜寻与删除
                    删除m中所有包含aa的行,其他行输出
                        [root@hdp10 ~]# cat m
                        aaa
                        bbb
                        ccc
                        fff
                        dddd
                        ggg
                        aamlkj
                        [root@hdp10 ~]# cat m|sed  '/aa/d'
                        bbb
                        ccc
                        fff
                        dddd
                        ggg
                    一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
                        nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
                        1  root:x:0:0:root:/root:/bin/blueshell
                        2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
        
    sort
        sort将文件的每一行作为一个单位,按首字母排序按升序输出
        sort -u file  #输出内容去除重复行
        sort -r file  #输出内容按降序输出
        sort -r file -o file #如果想把排序后的内容输入到原文件,则要用-o 如果用> 重定向文件会为空
        sort -n file #加上n会以数值进行排序,不会出现10<2
        sort -t<分隔符> -k<第几列> file #按分隔符进行分割,按照指定列进行排序
        其他的sort常用选项
        -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
        -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1 (echo $? 为1)
        -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1(echo $? 为1)
        -M会以月份来排序,比如JAN小于FEB等等
        -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
        
    expr
        计算字串长度:expr length "this is a test"  输出为14
        抓取字串:expr substr "this is a test" 3 5  输出为 is is
        抓取第一个字符串出现的位置: expr index "sarasara" a 输出为2
        整数运算(字符都用空格隔开)
            expr 10 + 10
            expr 14 % 
            expr 10 \* 5  (使用乘号时,必须用反斜线屏蔽其特定含义,因为shell中*有特殊意义)
            expr 30 / 3 / 2
    
    uniq
        uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
        uniq 可检查文本文件中重复出现的行列。
        
        语法
        uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
        参数:
        
        -c或--count 在每列旁边显示该行重复出现的次数。
        -d或--repeated 仅显示重复出现的行列。
        -f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
        -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
        -u或--unique 仅显示出一次的行列。
        -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
        
        uniq file #过滤挨着的重复的行
        sort file |uniq #排序后去重
        sort file|uniq -c #统计各行在文件中出现的次数
        sort file |uniq -d #只显示重复出现过的行
    
    let
        自加操作:let n++
        自减操作:let n--
        简写形式:let n+=20, let n-=20,分别等同于let n=n+10,let n=n-20
        案例
        #!/bin/bash
        let a=5+4
        let b=9-3 
        echo $a $b
        以上实例执行结果为:
        9 6
        
    xargs
        xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
        xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
        xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
        命令格式:somecommand |xargs -item  command
        案例
            find / -name "*.log"|xargs ls -l
            
            多行变单行
            [root@hdp10 ~]# cat n
            ccc
            ddd
            ccc
            fff
            hhh
            [root@hdp10 ~]# cat n|xargs
            ccc ddd ccc fff hhh
            
            -n选项  多行输出,指定每行多少元素
            [root@hdp10 ~]# cat n|xargs -n2
            ccc ddd
            ccc fff
            hhh
        
            -d指定分隔符分割
            [root@hdp10 ~]# echo "hellopworldpniphao" |xargs -dp
            hello world ni hao
            [root@hdp10 ~]# echo "hello,pworld,pni,p,,ha,o" |xargs -d,
            hello pworld pni p  ha o
            
            [root@hdp10 ~]# echo "hello,pworld,pni,p,ha,o" |xargs -d, -n2
            hello pworld
            pni p
            ha o
            
             -I,使用 -I 指定一个替换字符串 {}
             [root@hdp10 ~]# echo "hello,pworld,pni,p,ha,o" |xargs -d, -n1 |xargs -I {} echo ll{}
            llhello
            llpworld
            llpni
            llp
            llha
            llo
             
             
其他命令
    ftp
        ftp [-dignv][主机名称或IP地址]
        
    df
        df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。
        -h选项,通过它可以产生可读的格式df命令的输出
        # df -h 
        Filesystem      Size  Used   Avail Use% Mounted on 
        /dev/sda6       29G   4.2G   23G   16%     / 
        udev            1.5G  4.0K   1.5G   1%     /dev 
        tmpfs           604M  892K   603M   1%     /run 
        
    du
        du命令用于显示目录或文件的大小。
        du会显示指定的目录或文件所占用的磁盘空间。
        du -h 
        
    mkdir
        创建文件夹,mkdir 文件夹名,-p可以创建多层级文件夹
        
    netstat
        netstat命令用于显示网络状态。
        
    sleep
        休眠。其中 s 为秒,m 为 分钟,h 为小时,d 为日数
        案例休眠5分钟
        # sleep 5m
        显示目前时间后延迟 1 分钟,之后再次显示时间
        date;sleep 1m;date
    
    alias
        命令用于设置指令的别名。语法:alias[别名]=[指令名称]    
        
        
    替换字符:vi 文件名
            :%s/原来的切割符/要换成的切割符/g
            wq
压缩文件
    tar
        案例 
        tar -czvf test.tar.gz a.c   //压缩 a.c文件为test.tar.gz
        tar -tzvf test.tar.gz   //列出压缩文件内容
        tar -xzvf test.tar.gz   //解压文件
    gzip
        是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。    
        压缩文件
            [root@runoob.com a]# ls //显示当前目录文件
                a.c b.h d.cpp
                [root@runoob.com a]# gzip * //压缩目录下的所有文件
                [root@runoob.com a]# ls //显示当前目录文件
                a.c.gz    b.h.gz    d.cpp.gz
        
                显示压缩文件的信息
                [root@runoob.com a]# gzip -l *
                compressed    uncompressed ratio uncompressed_name
                    24          0  0.0% a.c
                    24          0  0.0% b.h
                    26          0  0.0% d.cpp
                    
    zip
        将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
        zip -q -r html.zip /home/html
        如果在我们在 /home/html 目录下,可以执行以下命令:
        zip -q -r html.zip *
        从压缩文件 cp.zip 中删除文件 a.c
        zip -dv cp.zip a.c    
        
        unzip为.zip压缩文件的解压缩程序。
        
        
        
        

        
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YiRan_Zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值