Linux 基础下

2023-05-11 19:50:27 浏览数 (1)

文本内容管理和文件查找

文本内容查看

代码语言:javascript复制
    cat     //将文件内容标准正序输出(屏幕)
        -n      //显示行号
    注意:使用cat查看文件内容时会将文件的所有内容加载至内存,所以应避免使用cat打开巨大文件

    tac     //将文件内容标准倒叙输出

    more    //全屏查看文本文件内容,只能从前往后,不能从后往前。
看完自动退出。

    less    //全屏查看文本文件内容,可从前往后亦可从后往前。看完按Q退出。

    head    //从头部开始输出文件内容,默认打印10行
        -n      //指定要输出的行数,-n 如head -5 txt

    tail    //查看文本文件尾部内容
        -n      //指定要打印的行数,-n 如head -5 txt
        -f      //实时监测文件末尾内容

内容排序显示

代码语言:javascript复制
    sort    //默认升序排序,不是按数值大小排序的
        -n      //根据数值大小进行排序
        -r      //逆序排序
        -t      //字段分隔符
        -k      //以哪个字段为关键字进行排序
        -u      //去重,排序后相同的行只显示一次
        -f      //排序时忽略字符大小写

       sort -m -t ":" -k 2 -uf txt
        
    uniq    //将重复的行只显示一遍(连续且完全相同方为重复)
        -c      //显示文件中行重复的次数
        -d      //只显示重复的行
        -u      //只显示未重复的行

内容统计

代码语言:javascript复制
//文本内容统计
    wc       //默认输出 行数 单词书 字节数 
        -l      //显示行数
        -w      //显示单词数
        -c      //显示字节数

//文件大小统计

    du      //查看文件或目录占用的磁盘空间大小
        -h      // 友好的方式显示大小
        -s      //显示总的占用空间大小

//磁盘空间统计
    df      //报告文件系统磁盘空间使用情况
        -h      //以人类友好的方式显示大小
        -i      //显示inode信息
        -T	//查看文件系统类型

内容过滤

截取文本内容 cut
代码语言:javascript复制
    cut         //截取文本内容
        -d ''	//指定字段分隔符,默认是空格
        -f		//指定要显示的字段
            -f 1,3	//显示第1个字段和第3个字段
            -f 1-3	//显示第1个字段到第3个字段
基于列的文本报告工具awk
代码语言:javascript复制
  awk         //基于列的文本报告工具
        语法:awk [选项] '匹配模式 {执行动作}'
        -F ''		//指定分隔符,可以使用正则表达式[]指定多个分隔符
        -v OFS=''	//指定打印时的分隔符

    执行动作:
        '{print $#}'  		//选择打印第#列,$0代表所有列,$NF代表最后1列

    匹配模式:
        '/关键字/'				//匹配关键字的行,支持正则表达式
        '/关键字1/,/关键字2/'	//匹配从关键字1到关键字2中间所有的行
        'NR==1'					//匹配第1行
        'NR>=10'				//匹配行数大于10的所有行并显示行号
        '$1==1'					//匹配第1列的值等于1的行
        '$1>=10 && $1<=20'		//匹配第1列的值大于等于10并小于等于20的行
        '$1>=10 || $3!=20'		//匹配第1列的值大于等于10或者第3列的值不等于20的行
        '$NF~"/sbin/nologin"'	//匹配最后1列字符为/sbin/nologin的行
        '$NF~!"/sbin/nologin"'	//匹配最后1列字符不为/sbin/nologin的行

        语法示例:
            awk -F ':' '/o/ {print "打印含o的行的第一列:"$1}' /etc/passwd
                //使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
            awk -F ':' '{print "第一列:"$1,"第二列:"$2,"第三列:"$3}' /etc/passwd
                //使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
            awk -F ':' -v OFS='-' '{print $1,$2,$3}' /etc/passwd
                //使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
            awk -F '[:/] ' '{print $1,$6}' /etc/passwd
                //使用:或/或:/或多个:或多个/或多个:/为分隔符分割/etc/passwd文件中的内容,打印出第1列和第6列

文本过滤和流编辑器sed

代码语言:javascript复制
  sed         //基于行的过滤和转换文本的流编辑器
        语法:sed [选项] [过滤条件和sed命令] [输入文件]
        -n	        //取消默认sed输出,用于过滤文本内容
        -r	        //使用扩展正则表达式
        -e	        //一条语句执行多条sed命令
        -i	        //修改文件内容

        语法示例(file为文件名):
            sed -n '2p' file
                //打印第2行
            sed -n '2,4p' file
                //打印第2行到第4行
            sed -n '/关键字/p' file
                //搜索包含关键字的行,可使用基本正则表达式
            sed -n '/第一个关键字/,/第二个关键字/p' file
                //搜索从第一个关键字到第二个关键字中间所有的行
            sed -i '2i test' file
                //在第2行前面新增一行并写入test内容
            sed -i '/关键字/a test' file
                //在匹配的关键字所在行的后面新增一行并写入test内容
            sed -i 's#原字符串#新字符串#' file
                //新字符串替换原字符串,只替换每行第1个匹配到的字符
            sed -i 's#原字符串#新字符串#2' file
                //替换每行第2个匹配到的字符
            sed -i 's#原字符串#新字符串#g' file
                //替换每行所有匹配到的字符串  如将文件Z里面的1替换为999  sed -i 's#1#999#g' z
            sed -i '1s#原字符串#新字符串#g' file
                //替换第1行所有匹配到的字符串  
            sed -i '2c test' file
                //字符串替换,将第2行内容替换为test
            sed -r 's#(.*),(.*),(.*)#3,2,1#g' file
                //字符串排列,重新将每行逗号隔开的列进行排序,原本的第三列变成第一列
            sed -r '1s#(.*),(.*),(.*)#3,2,1#g;2s#(.*),(.*),(.*)#3,2,1#g' file
                //字符串排列,重新将第1行和第3行逗号隔开的内容进行排序
            sed -i '2d' file
                //删除第2行
            sed -i '2d;5d' file
                //删除第2行和第5行
            sed -i '2,5d' file
                //删除第2行到第5行
            sed -i '1~2d' file
                //删除行数为单数的行
            sed -i '2~2d' file
                //删除行数为双数的行
            sed -i '1, 2d' file
                //删除第1行以及后面的2行
            sed -i '/关键字/, 2d' file
                //删除关键字所在的行以及后面的2行
            sed -i '1!d' file
                //删除除了第1行以外的其他行
            sed -i '/第一个关键字/,/第二个关键字/d' file
                //删除第一个关键字到第二个关键字中间所有的行

文本过滤grep

代码语言:javascript复制
  grep        //搜索文本内容,并将匹配的内容所在一整行都显示出来
                //支持使用正则表达式来过滤文本
        --color     //匹配到的内容高亮显示
        -i          //忽略大小写
        -w          //强制模式,完全匹配字词
        -n          //显示匹配到的内容的行号
        -c          //显示匹配到的内容一共有多少行
        -v          //显示没有被模式匹配到的行
        -o          //只显示被模式匹配到的字符串
        -E          //使用扩展正则表达式。grep -E相当于使用egrep
        -q          //静默模式,不向屏幕输出任何信息
        -A 1        //被模式匹配到的内容以及其后面1行的内容都显示出来
        -B 1        //被模式匹配到的内容以及其前面1行的内容都显示出来
        -C 1        //被模式匹配到的内容以及其前后的行各显示1行
    egrep       //基于正则表达式查找文件内容
    fgrep       //不支持正则表达式,执行速度快

     语法示例:
         grep "root" /etc/passwd
             //默认输出含root的行 
         grep "abc" z
             //z文件内  含abcd abc的行 都将输出
         grep -w "abc" z
             //z文件内  含abcd abc的行 只会将单独的含abc单词的行输出
         grep -n "abc" z
             //z文件内 输出含abc的行 并显示行号
         grep -v "abc" z
             //z文件内 输出除了含abc的行的以外所有行输出
         grep -E "^a" z
             //z文件内 输出含a开头的字母的行
         grep -E "c$" z
             //z文件内 输出c结尾的字母的行
         grep -E "^c$" z
             //z文件内 输出只有c字母的一行
         grep -Ev "^#" z
             //z文件内 显示注释以外的所有行
         grep -Ev "^$" z
             //z文件内 显示空行以外的所有行
         grep -Ev "^#|^$" z
             //  |常表示或者 z文件内 显示空行和注释行以外的所有行

文件查找

代码语言:javascript复制
   find        //实时查找,精确性强,遍历指定目录中所有文件完成查找, 
                //查找速度慢,支持众多查找标准。
        语法:
	    find 查找路径 [OPTION...] [查找标准] [查找到以后的处理动作]
        查找路径,默认为当前目录
        查找标准,默认为指定路径下的所有文件
        -name 'filename'    //对文件名作精确匹配.支持glob通配符机制
        -iname 'filename'   //文件名匹配时不区分大小写
        -regex pattern      //基于正则表达式进行文件名匹配,以pattern匹配整个文件路径字符串,而不仅仅是文件名称
        -user username      //根据属主来查找
        -group groupname    //根据属组来查找
        -uid        	    //根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
        -gid        	    //根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
        -nouser     	    //查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
        -nogroup    	    //查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
        -type       	    //根据文件类型来查找(f普通文件 d目录文件 b块设备文件 c字符设备文件  l符号链接文件 p命令管道 s套接字文件)
        -size       	    //根据文件大小进行查找。如1k、1M, 10k、 10M,-1k、-1M,没有 -表示等于, 表示大于,-表示小于
        -mtime      	    //修改时间
        -ctime      	    //改变时间
        -atime      	    //访问时间
             5      	    //5天前
            -5      	    //5天以内
        -mmin       	    //多少分钟修改过
        -cmin       	    //多少分钟改变过
        -amin       	    //多少分钟访问过
             5      	    //5分钟前
            -5      	    //5分钟以内
        -perm mode          //根据权限精确查找
        -perm -mode         //查找至少包含指定权限的文件

        //组合条件:
            -a //并且
            -o //或者
            -not  //取反 除此之外
            !              // ! 和-not含义一样

        //处理动作:默认为显示到屏幕上
            -print          //显示
            -ls             //类似ls -l的形式显示每一个文件的详细信息
            -fls /path/to/somefile      //查找到的所有文件的长格式信息保存至指定文件中
            -delete                     //删除查找到的文件
            -ok COMMAND {} ;           //对查找到的每个文件执行COMMAND,每次操作都需要用户确认
            -exec COMMAND {} ;         //对查找到的每个文件执行COMMAND,操作不需要确认

注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,此时命令执行可能会失败。而xargs可规避此问题。

    | xargs   //通过管道将查找到的内容给xargs处理,xargs会把内容进行拆分,拆分完毕后将内容作为参数交给后面的命令执行。




      语法示例:
       find / -name "abc"  //在全部文件里面查找abc文件
       find / -name "??c"  // 在全部文件里面查找三字符且以c结尾的文件
       find / -name "*s123"  // 在全部文件里面查找以s123结尾的文件
       find / -user admin  //在全部文件里面查找属于admin的文件
       find / -group admin  //在全部文件里面查找属于admin用户组的文件
       find / -user admin -type f  //在全部文件里面查找属于admin的普通文件
       find / -size  25M  //在全部文件里面查找大于25M的文件
       find / -size  25M -size  50M  //在全部文件里面查找大于25M小于50M的文件
       find /root/ -mtime  1 //在ROOT文件里面查找一天前修改过的文件
       find /root/ -mmin -1 //在ROOT文件里面查找1分钟内修改过的文件
       find / -size  25M -o -size -50M  //在全部文件里面查找大于25M或者小于50M的全部文件
       find / -not -user admin  //在全部文件里面查找不属于admin的文件
       find / -size  20K -a -size -30k -not -nouser //查找全部文件大于20K且小于30K并且必须属于某个用户携带用户ID的文件
       find / -size  20K -a -size -30k -not -nouser -ls //查找全部文件大于20K且小于30K并且必须属于某个用户携带用户ID的文件还显示文件的详细信息
       find / -size  20K -a -size -30k -not -nouser -fls /root/abc.txt //查找全部文件大于20K且小于30K并且必须属于某个用户携带用户ID的文件还将文件信息保存到abc文件
       find / -name "abc" -delete //查找abc文件并且删除
       find / -name "abc.txt" -ok cp -r {} /home/canxun/ ;  //查找abc.txt文件并且确认复制到/home/canxun/下
       find / -name "abc.txt" -exec mv {} /home/canxun/ ;  //查找abc.txt文件并且不需要确认移动到/home/canxun/下
       find / -name "abc.txt" -exec rm -rf {} ;   //查找abc.txt文件并且不需要确认删除

0 人点赞