linux常用命令-文件搜索(locate_find_grep)

1.文件搜索命令

1)locate命令 (只能按文件名搜索)

格式:locate 文件名
-在后台数据库中按文件名搜索,搜索速度更快
-/var/lib/mlocate —locate命令所搜索的后台数据库
-updatedb 更新数据库(locate后台数据库本身更新频率为一天一次,搜索不到时手动更新)
*可使用 locate locate 搜索locate相关文件,可看到locate数据库。
*在不同linux中,该数据库名字稍微不同,例如,locatedb、slocate、mlocate。

-/etc/updatedb.conf配置文件

   [root@redhat74 shell]touch /root/cangls
   [root@redhat74 shell]touch /tmp/cangls
   [root@redhat74 shell]updatedb
   [root@redhat74 shell]locate cangls
   /root/cangls

即使更新了数据库,结果显示 cangls 只有一条,而/tmp下的cangls没有显示出来,原因在于locate搜索遵循配置文件 /etc/updatedb.conf, 在PRUNEPATHS 中配置了/tmp/目录不进行搜索。所以没有进行查找。

-/etc/updatedb.conf 配置文件
   PRUNE_BIND_MOUNTS = "yes" ---开启搜索限制,yes为后面三项都生效。no为后面三项都不生效
   PRUNEFS =                 ---搜索时,不搜索的文件系统
   PRUNENAMES =              ---搜索时,不搜索的文件类型
   PRUNEPATHS =              ---搜索时,不搜索的路径

2)命令搜索命令 whereis和which

i.文件搜索命令:whereis (只能搜索系统命令,不能搜索自己凭空创建的普通文件)
选项:
-b:只查找可执行文件
-m:只查找帮助文件
whoami 显示当前操作用户 //who am i 显示登录用户
whatis ls 查询ls的作用

ii.文件搜索命令:which(不仅能看到命令的路径,如果有别名,还能看到别名)
[root@redhat74 shell]# which ls
alias ls=‘ls --color=auto’ ----别名
/usr/bin/ls
[root@redhat74 shell]# which pwd
/usr/bin/pwd

echo $PATH说明:
 -不光是Linux专有的,Windous中也有,类似于Windows中的环境变量,执行命令的时候都要在path定义的目录中去寻找。
  所以像ls这样的命令就可以不用加路径(/bin/ls)执行了。如果自己写的脚本 在运行时不想要具体的目录 需要在path设置目录 

3)find命令

find搜索(避免大范围的搜索,会非常浪费系统资源,不建议直接在“/”目录下搜索)

格式:find [搜索范围] [搜索条件];
选项:
i.按照名字
-name test 搜索文件名为test的文件
-iname test 不区分要搜索的test大小写格式
注意:find搜索默认是完全匹配。如果需要进行模糊查询,需要添加通配符。

 Linux通配符有以下3"*"   匹配任意字符,例:find /home -name "*test*",显示所有名字带test的文件;或例:find /home -name "*",home目录下的所有文件,包括隐藏文件。
    "?"   匹配任意一个字符,
    "[]"  匹配任意一个中括号内的字符,例:find /home -name "test[12]",显示test1和test2文件;或find /home -name "[12]",显示以12开头的文件。
    组合使用:例:find /home -name "*[12]",显示所有12结尾的文件

ii.按照所属用户
-user root 搜索所有属于root用户的文件
-nouser 没有所属者的文件,liunx中,每个文件都有所属者,如果没有,那么一般都是垃圾文件,但还是有特例的,比如内核产生的文件,就没有所属者,一般在proc和sys目录下;还有外来文件,也就是U盘拷入的文件也会忽略所有者

iii.按文件时间来搜索
find /home -mtime +10 在home目录下,查找10天前修改的文件
find /home -mtime 10 在home目录下,查找10天前当天修改的文件
find /home -mtime -10 在home目录下,查找10天内修改的文件
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
iv.按照文件大小
find 目录 -size 文件大小

 -size n[cwbkMG]
  File uses n units of space.  The following suffixes can be used:
          `b'    for 512-byte blocks (this is the default if no suffix is used)
          `c'    for bytes
          `w'    for two-byte words
          `k'    for Kilobytes (units of 1024 bytes)
          `M'    for Megabytes (units of 1048576 bytes)
          `G'    for Gigabytes (units of 1073741824 bytes)

-a 表示and
-o 表示or
例如:find /etc -size +20k -a -size -50k -exec ls -lh {} \;
-exec command {} \; 固定格式,表示直接对前面的搜索结果进行后面的命令处理,逐一执行
-exec command {} + 表示直接对前面的搜索结果进行后面的命令处理,一次性执行
-一条命令可以包含多个exec

find -exec 命令后面的\;和+
-一个-exec只能执行一个命令,而且必须在命令后面加上终结符,终结符有两个:“;”和“+”。
1) “;”会对每一个find到的文件去执行一次cmd命令。
2) ”+“让find到的文件一次性执行完cmd命令。

例如:
 [root@redhat74 tmp]# find /etc -size +2M -exec ls  {} \;                                                             
 /etc/udev/hwdb.bin                                                                                  
 /etc/selinux/targeted/active/policy.kern                                                            
 /etc/selinux/targeted/policy/policy.30                                                              
 [root@redhat74 tmp]# find /etc -size +2M -exec ls  {} +                                             
 /etc/selinux/targeted/active/policy.kern /etc/selinux/targeted/policy/policy.30  /etc/udev/hwdb.bin
 -为什么必须有终结符?
     因为一个find后面可以有多个-exec cmd,所以必须要有终结符分割他们。如果不加,会报缺少参数

find /etc -size +2M -ok ls -lh {} \; 在执行ls -lh之前会逐一询问
v.按照i节点号
find / -inum [i节点号]
例如:
[root@redhat74 tmp]# ls -i
16787236 cangls
45527 hello.hard
[root@redhat74 tmp]# find / -inum 45527
/tmp/hello.hard
/shell/hello.log --[建立了硬链接,所以显示有两个i节点号为45527的文件]

4)grep命令

grep [选项] 字符串 文件名 (字符串使用 “” 包围,结果为行记录)
-i 忽略大小写
-v 排除指定字符串

find 命令与 grep 命令的区别
find:在系统中搜索符合条件的 文件名,使用通配符(完全)匹配
grep:在文件当中搜索符合条件的 字符串,使用正则表达式 (包含)匹配

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值