zoukankan      html  css  js  c++  java
  • Linux中locate命令的实践总结

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。

    ps1:Linux distribution表示Linux发行版。其实Linux是指的系统的内核,不能认为是一个系统。有人在内核的基础上增加一些软件,就成 了一个操作系统了。这个系统因为以Linux为内核,所有就叫Linux发行版。大部分人为了简单,所以把发行版省掉了,实际上世上没有Linux 这个操作系统,因为他只是个内核。现在出现Linux这一称呼,实际上是Linux发行版。这是正规的说法。

    ps2:crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

    Linux下的任务调度分为两类,系统任务调度和用户任务调度。

    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

    1.命令格式:

    Locate [选择参数] [样式]

    2.命令功能:

    locate 命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令 在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值 中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)

    locate 指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*” 或”?”等)来指 定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录 录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。

    locate 指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直 接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

    ps1:updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中

    补充说明:slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

    updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中。

    来自: http://man.linuxde.net/updatedb

    3.命令参数:

    -e   将排除在寻找的范围之外。

    -1  如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。

    -f   将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。

    -q  安静模式,不会显示任何错误讯息。

    -n 至多显示 n个输出。

    -r 使用正规运算式 做寻找的条件。

    -o 指定资料库存的名称。

    -d 指定资料库的路径

    -h 显示辅助讯息

    -V 显示程式的版本讯息

    4.使用实例:

    实例1:查找和android相关的所有文件,并且只显示前5个

    命令:

    location android -n 5

     输出:

    1 aijian.shi@U-aijian-shi:~$ locate android -n 5
    2 /data/nishome/tdsw1/aijian.shi/.android
    3 /data/nishome/tdsw1/aijian.shi/.android/adbkey
    4 /data/nishome/tdsw1/aijian.shi/.android/adbkey.pub
    5 /data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es-06-icon-001-001_Portada_AU06x64.png
    6 /data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es-07-icon-icon_AU07.png
    7 aijian.shi@U-aijian-shi:~$ 

     实例2: 搜索alm的bin目录下所有以i/I开头的文件

    命令:

    locate ~/alm/bin/I* -i   #-i表示不区分大小写

    输出:

    1 aijian.shi@U-aijian-shi:~$ locate ~/alm/bin/I* -i
    2 /data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient
    3 /data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient.lax
    4 /data/nishome/tdsw1/aijian.shi/alm/bin/ident
    5 /data/nishome/tdsw1/aijian.shi/alm/bin/im
    6 /data/nishome/tdsw1/aijian.shi/alm/bin/integrity
    7 aijian.shi@U-aijian-shi:~$ 

    *在shell中表示通配符,表示零个或多个字符。 比如当前目录下有abc.c、abdd.c、abeff.c。可以用ls ab*.c来查看

    注意

    ps:

    Linux手动更新locate数据库命令:

    updatedb

    输出:

    1 aijian.shi@U-aijian-shi:~/Downloads$ updatedb
    2 updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
    3 aijian.shi@U-aijian-shi:~/Downloads$ 
    4 aijian.shi@U-aijian-shi:~/Downloads$ sudo updatedb  #开启updatedb手动更新数据库权限
    5 [sudo] password for aijian.shi: 
    6 aijian.shi@U-aijian-shi:~/Downloads$ 

    可以看到,我的linux机器没有sudo权限,所以无法手动更新数据库。

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。
    其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
    
    总结:
    1. locate的速度比find快,因为它并不是真的查找文件,而是查数据库
    2. locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护
    3. 升级数据库命令:locate -- u(不明白这一步的操作意义和效果)
     
  • 相关阅读:
    Thinkphp 中的自动验证 上一篇有例子
    Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
    ThinkPHP框架 祖辈分的理解 【儿子 FenyeController】继承了【父亲 FuController】继承了【祖辈 Controller】的
    ThinkPHP框架 AJAX方法返回 AJAX实现分页例子:
    ThinkPHP框架 【 AJAX方法返回 】 例子:简单添加一条数据 和 查询一个表里的数据
    thinkPHP框架 简单的删除和修改数据的做法 和 模板继承的意思大概做法
    cookie 和 session 的区别
    ThinkPHP框架 表单传值自动验证!!
    UVA 11624 Fire! (bfs)
    POJ 3074 Sudoku (Dacing Links)
  • 原文地址:https://www.cnblogs.com/aijianshi/p/5750207.html
Copyright © 2011-2022 走看看