Linux命令:查找 排序 去重

本文详细介绍了Linux系统中find命令的使用,包括基本查找、按条件查找如文件名、类型、时间、用户和组、权限及大小,并展示了如何执行动作如移动、备份和删除文件。此外,还提及了排序工具sort和uniq的用法,以及which命令和alias命令的使用,帮助读者更好地管理和搜索Linux系统中的文件。
摘要由CSDN通过智能技术生成

目录

 

全局性搜索文件 find

1、基本例子

2、按条件查找

    1)按照文件名查找

    2)按照文件类型查找 -type

    3)按照时间查找

    4)按照用户和组查找

    5)按照权限查找 -perm

    6)按照文件大小查找 -size

3、动作

 

排序:sort

uniq去重,唯一

        扩展小命令:which  alias

which    用来查找命令的绝对路径

命令的别名:alias


全局性搜索文件 find

工作模式:沿着文件的参差结构一次向下搜索,找到符合条件的,打印或者是执行相应的操作
语法格式:find  要搜索路径  条件(选项)  [动作]

1、基本例子

    在/etc目录下,寻找名字为network的文件

 [root@base ~]# find /etc/ -name network
 /etc/rc.d/init.d/network
 /etc/sysconfig/network
 /etc/vmware-tools/scripts/vmware/network

    一般情况下,查找范围越大,目录层级就越深,查找速度就越慢

 [root@base tmp]# mkdir -p
 /q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m
 [root@base tmp]# touch
 /q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt

    在/目录下,查找名字为test.txt的文件

 [root@base tmp]# find / -name test.txt
 /tmp/test.txt
 /q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt

2、按条件查找

    1)按照文件名查找

        -name  按名字查找 *
        -iname  忽略大小写
        (通配符:*代表任意字符   ?代表单个字符)

          举例:

             查找/etc目录下,所有以.conf结尾的文件
              find /etc/ -name *.conf
             查找/etc/目录下,以.conf结尾,名称是5个字符的
              find /etc/ -name ?????.conf

 

    2)按照文件类型查找 -type

        举例:查找/var目录下类型为普通文件的文件
                     find  /var  -type  f
                   查找系统中类型是套接字的文件
                     find / -type s


    3)按照时间查找

        -atime n 以天为单位
        -ctime n
        -mtime n
        一个文件有三个时间:
            atime:访问时间
            mtime:文件的内容发生变化的时间
            ctime:文件的属性发生变化的时间 例如:权限、大小、所有者、所属组等改变
        -amin n 以分钟为单位
        -cmin n
        -mmin n
        举例:假如n等于7
            搜索最近七天被访问过的所有文件
            find . -type f -atime -7
            搜索恰好在七天前被访问过的所有文件
            find . -type f -atime 7
            搜索超过七天内被访问过的所有文件
            find . -type f -atime +7
            搜索访问时间超过10分钟的所有文件
            find . -type f -atime +10


    4)按照用户和组查找

        -user 用户名
        -group 组名
        -uid uid
        -gid gid
        -nouser 孤儿文件 没有所有者的文件
        -nogroup 没有所属组的文件
        举例:
            查找系统中所有者是quota2的文件
            find  /  -user  quota2  -type  f
            查找系统中的孤儿文件
            find  .  -type  f  -nouser
            取反
            find  /  !  -user  root  -type  f
            查找系统中所有者不是root或者类型是套接字的文件
            find  /  !  -user  root  -o  -type  s


    5)按照权限查找 -perm

        /222 或者 (用户可写or组可写or其他人可写)二进制中有1的位置,只要满足其中以一位就可
        -222 并且 (用户可写and组可写and其他人可写)二进制中有1的位置必须要有1
        举例:
            前提:
            我们先在/下创建一个find文件 

[root@localhost ~]# mkdir /find

            然后进入目录       

[root@localhost ~]# cd /find
[root@localhost find]# 

            然后在find目录下创建一些文件

[root@localhost find]# touch p{r,w,x}_{1,2,3}
[root@localhost find]# ls
pr_1  pr_2  pr_3  pw_1  pw_2  pw_3  px_1  px_2  px_3

            给每一个文件设置不同的权限

[root@localhost find]# chmod 400 pr_1
[root@localhost find]# chmod 440 pr_2
[root@localhost find]# chmod 444 pr_3
[root@localhost find]# chmod 200 pw_1
[root@localhost find]# chmod 220 pw_2
[root@localhost find]# chmod 222 pw_3
[root@localhost find]# chmod 100 px_1
[root@localhost find]# chmod 110 px_2
[root@localhost find]# chmod 111 px_3

            查找find目录下,小组权限为可写的文件           

[root@localhost find]# ll `find ./ -perm -g=w -type f`
--w--w----. 1 root root 0 4月  27 20:28 ./pw_2
--w--w--w-. 1 root root 0 4月  27 20:28 ./pw_3

            查找find目录下,用户可写and组可写and其他人可写的文件

[root@localhost find]# ll `find ./ -perm -222 -type f`
--w--w--w-. 1 root root 0 4月  27 20:28 ./pw_3

            查找find目录下,用户可写or组可写or其他人可写的文件            

[root@localhost find]# ll `find ./ -perm /222 -type f`
--w-------. 1 root root 0 4月  27 20:28 ./pw_1
--w--w----. 1 root root 0 4月  27 20:28 ./pw_2
--w--w--w-. 1 root root 0 4月  27 20:28 ./pw_3


    6)按照文件大小查找 -size

        +  大于
        -  小于
        直接数字  等于
        举例:先清空一下find目录,然后用dd命令然后从、dev/zero目录下备份一些信息到指定文件

[root@localhost find]# rm -rf /find/*
[root@localhost find]# ls
[root@localhost find]# dd if=/dev/zero of=f1M bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00189239 秒,554 MB/秒
[root@localhost find]# dd if=/dev/zero of=f2M bs=1M count=2
记录了2+0 的读入
记录了2+0 的写出
2097152字节(2.1 MB)已复制,0.00268664 秒,781 MB/秒
[root@localhost find]# dd if=/dev/zero of=f3M bs=1M count=3
记录了3+0 的读入
记录了3+0 的写出
3145728字节(3.1 MB)已复制,0.00373378 秒,843 MB/秒
[root@localhost find]# dd if=/dev/zero of=f4M bs=1M count=4
记录了4+0 的读入
记录了4+0 的写出
4194304字节(4.2 MB)已复制,0.043618 秒,96.2 MB/秒
[root@localhost find]# ls
f1M  f2M  f3M  f4M

            查找/find目录下,文件大小小于3M的文件            

[root@localhost find]# find . -type f -size -3M
./f1M
./f2M

            查找/find目录下,文件大小等于3M的文件            

[root@localhost find]# find . -type f -size 3M
./f3M

            查找/find目录下,文件大小小于3M的文件          

[root@localhost find]# find . -type f -size +3M
./f4M


3、动作

    -exec 动作  --找到结果之后直接执行动作
    -ok动作  --执行动作之前先提示,即需要交互
    举例:
        查找/find目录下,类型是普通文件的文件 将其移动到/test目录下        

[root@localhost find]# find . -type f -exec mv {} /test \;
[root@localhost find]# ls /test/
f1M  f2M  f3M  f4M

        查找/test目录下类型为普通文件的文件,对其进行备份,备份文件的后缀名为.bak        

[root@localhost find]# find /test/ -type f -exec cp {} {}.bak \;
[root@localhost find]# ls /test/
f1M  f1M.bak  f2M  f2M.bak  f3M  f3M.bak  f4M  f4M.bak

        删除/test目录下修改时间在一天以内的普通文件        

[root@localhost find]# find /test -type f -mtime -1 -exec rm {} \;
[root@localhost find]# ls /test/
[root@localhost find]# 

 

排序:sort

    -t 指定字段分隔符
    -k 指定第几个字段
    -n 按照数字顺序排序
    -r 反向排序 reverse
    -u 排序后重复行只打印一次 unique
    举例:    创建一个文件sort.txt并编辑 

[root@localhost ~]# vim sort.txt
[root@localhost ~]# cat sort.txt
b:3
c:2
a:4
e:5
d:1
d:11

        对输出内容直接排序,默认按照每行的第一个字符进行排序        

[root@localhost ~]# cat sort.txt | sort
a:4
b:3
c:2
d:1
d:11
e:5

        对输出内容进行反向排序        

[root@localhost ~]# cat sort.txt | sort -r
e:5
d:11
d:1
c:2
b:3
a:4

        使用“:”做分隔符,对第二个字段进行排序       

[root@localhost ~]# cat sort.txt | sort -t ":" -k 2
d:1
d:11
c:2
b:3
a:4
e:5

        使用“:”做分隔符,对第二个字段进行排序,按照数字大小排序       

[root@localhost ~]# cat sort.txt | sort -t ":" -k 2 -n
d:1
c:2
b:3
a:4
e:5
d:11


uniq去重,唯一

    去除相邻重复行
    -c  显示重复的行数
    -i  忽略大小写
    举例:    创建一个文件num.txt并编辑

[root@localhost ~]# vim num.txt
[root@localhost ~]# cat num.txt
111
222
333
444
555
555

        使用uniq时,一般先排序,再去重        

[root@localhost ~]# sort num.txt | uniq
111
222
333
444
555

        sort  num.txt  |  uniq  -c

[root@localhost ~]# sort num.txt | uniq -c
      1 111
      1 222
      1 333
      1 444
      2 555

        
扩展小命令:which  alias

which    用来查找命令的绝对路径

    举例:查找dd命令的绝对路径
        which  dd

命令的别名:alias

    1、查看当前系统中有那先别名(root用户和普通用户的别名可能不一样)
        alias
    2、设置命令的别名
        1)临时
            alias vi='vim'
            vi /etc、passwd  执行vi的时候,实际上执行的是vim
        2)永久,改文件
            /root/.bashrc
        3)取消别名
            unalias vi
            vi /etc/passwd  没颜色了            

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

自然醒o./

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

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

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

打赏作者

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

抵扣说明:

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

余额充值