牛骨文教育服务平台(让学习变的简单)

Mac OS X的Spotlight综述

关于Spotlight的简述

    Spotlight是苹果OS X系统里的亮点之一,它的快速查找,是Windows等其它系统所难望其项背的。特具有如下特点:

  •     它很快,相当快而且聪明。
  •     它存在好多地方,Finder,System menu, Open和Save对话框, Mail等等。
  •     它会自动为安装的磁盘建立/更新索引,除了网络和DVD磁盘等.
  •     它不仅搜索普通文件,还有联系人,email,iTunes里的音乐,iPhoto里的照片,日历中的事件,系统文件等等。
  •     它不会做的:隐藏文件(.hidden),不可见文件(invisible),在隐藏或者不可见文件夹里的文件等。
  •     除了对所有用户目录建立索引,还对/Applications,/Library/PreerencePanes /System/Library/PreerencePanes启作用
  •     在Finder里面,Command+F来打开一个所有窗口
  •     可以对各种文件的多种属性进行搜索,比如File lable,甚至是System Files等等。
  •     相关的系统进程: mds, mdimport, mdworker.
  •     即便是安全模式,它也是可以使用的。
  •     它支持插件,适合的插件用来搜索特定的数据库里的项目。
  •     随着文件的增多,它占用更多的磁盘空间,不过用户觉察不到。
  •     其它的选择,Find Any File, EasyFind, Find File等等

基本使用:

  • Spotlight:
    在系统菜单栏中,也就是屏幕的右上角的放大镜按钮,点击它,或者使用快捷键(Command+Sapce),在下拉的Spotlight蓝色搜索栏中输入要查找的特征,它就会在下方列出相关的项目。我常用的是,输入一个程序的名字,比如是计算器,我只输入Cal,计算器就会称谓第一个备选者,我按Enter回车,就可以启动计算器程序了。

  • Finder中:
    还可以在Finder窗口中的工具栏的最右边,也是搜索栏,输入查找特征,系统也会随时列出相关的项目。搜索时,文件列表区域的顶端,会出现一个Search的表头,可以方便切换搜索的范围-当前电脑还是启动磁盘,和查找根据-是查找内容相关还是单单文件名相关。和Spotlight不同的是,你可以进行高级查找,也就是添加/使用各种的搜索条件。只要点击Search条的最有边的“+”小按钮,下方又出现一条,这里你可以添加一个一个的条件,最左边是条件的类型,最常用的是文件类型,修改时间,创建时间,上次打开时间,后面就是具体条件,随时输入,下方列表随时更新,非常方便。

  • Save/Open
    还有在你保存/打开文件的时候,也可以使用上面Finder的搜索方法。具体操作和上边类似。

  • 改变搜索结果顺序:
    进入System Preerences的Spotlight,拖动每一项就可以改变顺序,去除选择的话,这一类的结果就不会出现在搜索结果中。

基本的排错:

    在一般的情况下,它工作得相当得文件,但是在升级安装或者是被自己多次修改过的系统中,会出现Spotlight不工作的问题。解决问题可以遵循下面的步骤来尝试,尝试每一步之后,都需要等待一段时间,可能时数秒,也可能是一两分钟不等,过长的时间等待一般不需要。
    1: 重新启动电脑
        这个总是第一个想到的
    2: 删除com.apple.spotlight.plist文件
        这个文件在挡墙用户个人文件家的~/Library/Preferences文件夹中
    3: 进入在System Preferences中的Spotligh的Privacy中,把系统磁盘添加到列表中,等候几秒中,然后再从中删除。一般的情况到此为止,都可以解决了。
    4: 杀掉SystemUIServer进程
        进入在Utilities文件夹中的Activity Monitor中,找到并选择"SystemUIServer",点"Quit Process"。等一会儿,系统菜单条会重新出现。
    5: 命令行
        sudo find / -iname ".Spotlight-V100" -type d -maxdepth 3 -print0 | xargs -0 -t -n1 sudo rm -rf
        sudo mdutil -E /
    6: 再有就是详细阅读后面的解读,自己尝试各个方式。

停止它建立索引:

        虽然它很好用也有很多人喜欢它,你依然可能出于某种想法希望停止它,无论是临时的还是永久的。比如有的嫌它太占用资源,导致系统速度下降;有的说它崩溃,还不如没有。还有一种情况,可能你真的希望临时禁止它,或者禁止部分;还有的时候Spotlight可能产生安全隐患,一个不希望被其它用户搜索的,却可以被搜索,虽然可能不能存取,但是也是不安全(多数情况可能是使用习惯不好造成的)。总之,我们希望用户自己控制它的打开,部分打开,或者完全禁止。

命令行:

  1. hostconfig
    如果你运行的是Mac OS X 10.5雪豹以前的系统,那么有一种方法可以禁止它。就是编辑/etc/hostconfig里面,修改SPOTLIGHT=-No-.
    重新打开也简单,改成默认的-YES-,重新启动系统之后就可以。不过这个方法需要你有管理员权限。
  2. 使用GUI
    在System Preferences里的Spotlight,在Privacy标签中,把本机的硬盘符,拖到列表中,系统提示就确认,之后,Spotlight就不管用了。

*版权信息: 本着开放交流的原则欢迎转载,除非明确声明"谢绝转载"等字样. 所有文章/图片/代码(除转载和翻译),版权均属文章作者.
转载请遵守下面规则:
 1)保持文章的完整性; 2)不得以盈利为目的; 3)完整标注文章作者[Tony Liu@中国在线教育]和文章中标注的所有版权信息。
其它事宜,如:需要商业用途或以盈利为目的的、或者部分转载的等等,请与本作者联系: TonyLiu2CA@yahoo.com*

如果禁止了当前的系统硬盘,Spotlight和Finder中都无法使用搜索功能了,在搜索栏中无法输入。
当然可以禁止查找特定的目录,同样的方法,拖动到列表里就好。一旦一个目录或者磁盘被拖放在里边,Spolight会立刻停止对他建立索引,而且也无法再从Finder找到里面的文件,虽然已经储存的索引还依然存在于系统中。
一旦一个目录被添加到Privacy里面,在搜索里面就不会出现在搜索结果中。
在以前的系统里可能会出现问题,比如Spotlight正在建立索引的时候,它可能产生一个mds-crash-state的文件,这样即使你把它从Privacy里面去除,依然无法对他重新建立索引。解决的办法是,或者卸载这个磁盘后再安装上,或者重新启动系统,或者删除这个文件(.Spotlight-V100目录中),或者运行重新索引命令: sudo mdutil -E /path_to_volume
要想打开,就把它从列表中删除,删除后,Spotlight会自动更新,这个速度根据你的系统和文件多少等,可能会持续数分钟,或者更长。

  1. sudo mdutil -i off /path_to_volume
    这个命令可以应用于一个磁盘(分区),不能应用于一个目录。而这个被禁止的磁盘不会出现在Spotlight的Privacy列表里面。
    如果是sudo mdutil -i off /
    也就是对整个启动磁盘禁止索引,运行这个命令的结果:系统不会启动mds来对磁盘进行后台索引,但是在Finder中依然可以使用Find功能,只不过这个功能就如同Windows里面的普通搜索类似了,速度慢,因为没有了可以使用的数据索引,和命令行下的Find命令类似,只不过它不查找程序或者各种包里面的内容。比较上面在GUI下的Pravicy的禁止,里面有些差异。这个功能有的时候可能还是用得到的,比如你不希望系统随时建立索引,但是同时还要保留在Finder里面查找文件的功能。

其它方式:

     使用第三方软件,比如Onyx/QuickSilver等

命令行和GUI的关系:

    在Mac OS X 10.6以前的版本,命令行和System Preferences里的Spotlight是不太兼容的两个部分。不过这种情况已经得到改善
    比如,在Spotlight里面把一个目录添加到Privacy里面了,命令行依然可以运行 -i off或者-i on,但是在雪豹中,已经是不行了,当你使用-i on的时候,它会提示 Indexing and searching disabled.
    在比如,当你把一个目录添加到Privacy里面后,以前的版本可能不会立刻删除索引数据,而现在的版本会立刻删除。

    前面也说了,在命令行禁止索引,在GUI中依然可以搜索文件。

其它命令

    sudo mdutil -E /
    重新建立系统磁盘的索引。如果在GUI中Pravicy里面被禁止了,那么这条命令不起作用。

    sudo launchctl unload /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
    停止mds服务。下次系统重新启动后,mds服务会重新启动。

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
    停止mds服务。下次系统重新启动后,mds服务都不会重新启动。

    sudo launchctl load /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
    停止之后,如果需要立刻启动mds服务,运行这个命令。

 

Under the Hood:

    下面的内容千万比出于好奇尝试,只有在你真正了解下面所说的内容之后再使用,否则后果自负。

    Spotlight的索引建立在,各个磁盘的目录下面的.Spotlight隐藏目录中。

    在系统偏好的Spotlight的Privacy中的列表内容,存放在叫做Exclusions.plist的文件中。
    而搜索结果的顺序选项,则在当前用户的的个人文件夹中的com.apple.spotlight.plist文件中定义。

    对于希望不使用GUI方式操作Privacy的用户,就需要使用命令行了,下面就是一个例子。

Start

defaults delete /.Spotlight-V100/Exclusions
defaults write /.Spotlight-V100/Exclusions  Exclusions -array
launchctl unload /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
launchctl load /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

End

    还有一个彻底的方式:

Start

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
    mkdir /System/Library/LaunchAgnets.backup
    sudo mv /System/Library/LaunchAgnets/com.apple.metadata_mdwrite /System/Library/LaunchAgnets
    cd /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/
    tar -cvf mdworkstuff.tar ./ #(saves all md* to a tarball in case you ever want it back)
    then :
    rm mdworker
    rm mdworker32
    rm mds
    rm mdwrite

End

 

 

Tony Liu in Calgary

2011, 03, 03

-18 Windchill -35