Linuxでの検索コマンドlocate find which whereis


locate :
locateはファイル検索コマンドであり、その主な特徴は、高速、ファジイマッチング、/var/lib/mlocate/mlocate.dbのデータベース、このデータベースはシステムの各ファイルの情報を格納して、毎回ファイルを検索するたびに直接データベース内に行って検索するので、速度はとても速くて、このデータベースはシステムが自分で生成して、そしてタスク計画を設定して、毎日未明に自動的に更新して、だからlocateを使って少し前に作成したファイルを検索することはできなくて、もし必ずlocateを使って作成したばかりのファイルを調べるならば、手動でupdatedbコマンドを実行してデータベースを更新できます
locateの使い方は簡単です.
locate[option]FILENAMEは、FILENAMEを含むファイルまたはディレクトリを全面的に検索します.
[test@mail ~]$ locate ifconfig
/sbin/ifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
/usr/share/zsh/4.2.6/functions/_ifconfig

-i検索時に大文字と小文字を無視
[root@mail tmp]# locate -i RPMPKGS
/var/log/rpmpkgs
/var/log/rpmpkgs.1
/var/log/rpmpkgs.2
/var/log/rpmpkgs.3
/var/log/rpmpkgs.4

find :
findも1つのファイル検索コマンドで、その主な特徴は:リアルタイム、正確で、多くのクエリー条件をサポートして、ファイルを検索すると指定したディレクトリとサブディレクトリを遍歴して、検索速度は比較的に遅いです
基本的な使い方:
find PATH  OPTIONS FILENAME [ACTION]
検索条件:OPTIIONS
-name FILENAMEファイルの名前に基づいて検索します.名前は*?[]などのプロビジョニング
たとえば、検索/etcディレクトリの下にinittabという名前のファイルがあります.
[root@mail ~]# find /etc -name inittab
/etc/inittab

または/etcの下にinitで始まるファイルを検索します.
[root@mail ~]# find /etc/ -name init*
/etc/mail/spamassassin/init.pre
/etc/initlog.conf
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/init
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/init.d
/etc/inittab
/etc/rc.d/init.d
/etc/iscsi/initiatorname.iscsi

-iname FILENAMEファイル名に基づいて検索しながらファイル名の大文字と小文字を無視
たとえば、/tmp/scriptディレクトリの下でabcという大文字と小文字を区別しないファイルを検索します.
[root@mail ~]# find /tmp/scripts/ -iname abc
/tmp/scripts/aBC
/tmp/scripts/abC
/tmp/scripts/abc
/tmp/scripts/Abc
/tmp/scripts/ABC

-regex PATTERN正規表現に基づいてファイル名を一致させる
たとえば、/tmp/scriptディレクトリの下でerで終わるファイルを検索します.
[root@mail ~]# find /tmp/scripts -regex .*er
/tmp/scripts/lover
/tmp/scripts/liver

-userファイルの所有者に基づいて検索
たとえば、検索/tmpディレクトリの部下がuser 1であるファイルを検索します.
[root@mail tmp]# find /tmp -user user1 -ls
1962304    0 -rw-r--r--   1 user1    user1           0  5  20 21:09 /tmp/file1
1962296    0 -rw-r--r--   1 user1    user1           0  5  20 21:09 /tmp/file2
1962307    0 -rw-r--r--   1 user1    user1           0  5  20 21:09 /tmp/file3

-groupファイルのグループに基づいて検索
たとえば、検索/tmp/scriptsディレクトリの下位グループがuser 1のファイルである
[root@mail scripts]# find /tmp/scripts -group user1 -ls
1962295    0 -rw-r--r--   1 root     user1           0  5  18 17:47 /tmp/scripts/lover
1962294    0 -rw-r--r--   1 root     user1           0  5  18 17:47 /tmp/scripts/liver

-uidファイルの所有者のuidに基づいて検索
たとえば、/tmp/scriptsディレクトリのuidが0のファイルを検索します.
[root@mail scripts]# find /tmp/scripts/ -uid 0 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5  18 17:47 /tmp/scripts/
1962270    4 -rw-r--r--   1 root     root           14  5  16 19:01 /tmp/scripts/work1.sh
1962295    0 -rw-r--r--   1 root     user1           0  5  18 17:47 /tmp/scripts/lover
1962294    0 -rw-r--r--   1 root     user1           0  5  18 17:47 /tmp/scripts/liver

-gidファイルのグループに属するgidに基づいて検索
たとえば、/tmp/scriptsディレクトリのgidが0のファイルを検索します.
[root@mail scripts]# find /tmp/scripts/ -gid 0 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5  18 17:47 /tmp/scripts/
1962270    4 -rw-r--r--   1 root     root           14  5  16 19:01 /tmp/scripts/work1.sh

-nouser所有者がいないファイルを検索
[root@mail tmp]# find /tmp -nouser
/tmp/file1
/tmp/file2
/tmp/file3

-nogroupグループに属していないファイルを検索
[root@mail tmp]# find /tmp -nogroup
/tmp/file1
/tmp/file2
/tmp/file3
/tmp/scripts/lover
/tmp/scripts/liver

-typeファイルのタイプに応じて検索
f:通常ファイルのタイプのファイルを検索する
すなわち、find PATH-type f
[root@mail scripts]# find /tmp -type f
/tmp/ssh.log
/tmp/file2.bak
/tmp/sess_57d08894caddedd0a8819a33d5215388
/tmp/file1.bak

d:ディレクトリタイプのファイルを検索する
すなわち、find PATH-type d
[root@mail scripts]# find /tmp -type d
/tmp
/tmp/.font-unix
/tmp/.ICE-unix
/tmp/scripts

c:文字デバイスタイプのファイルを検索する
即ちfind PATH-type c
[root@mail scripts]# find /dev -type c
/dev/tty14
/dev/tty13
/dev/tty15
/dev/tty17
/dev/tty20

b:ブロックデバイスタイプのファイルを検索する
すなわち、find PATH-type b
[root@mail ~]# find /dev -type b
/dev/md0
/dev/hdc

l:タイプがリンクのファイルを検索する
すなわち、find PATH-type l
[root@mail ~]# find  /etc/rc.d/rc0.d/ -type l
/etc/rc.d/rc0.d/K01dnsmasq
/etc/rc.d/rc0.d/K92iptables
/etc/rc.d/rc0.d/K90bluetooth
/etc/rc.d/rc0.d/K15svnserve

p:パイプタイプのファイルを検索するファイル
即ちfind PATH-type p
[root@mail scripts]# find /var/run -type p
/var/run/autofs.fifo-net
/var/run/autofs.fifo-misc

s:タイプがソケットファイルのファイルを検索する
すなわちfind PATH-type s
[root@mail ~]# find /var/run -type s
/var/run/audispd_events
/var/run/dbus/system_bus_socket
/var/run/acpid.socket
/var/run/avahi-daemon/socket
/var/run/pcscd.comm
/var/run/sdp
/var/run/clamav/clamd.socket

  -size  [+|-]
+10 Kは10 Kより大きいファイルを表します
[root@mail ~]# find /var/log -size +10k
/var/log/anaconda.syslog
/var/log/lastlog
/var/log/prelink/prelink.log
/var/log/secure.4
/var/log/maillog
/var/log/audit/audit.log.3
/var/log/audit/audit.log.2
/var/log/audit/audit.log
/var/log/audit/audit.log.1

-10 Kは10 K未満のファイルを表す
[root@mail ~]# find /tmp -size -10k
/tmp/mysql.sock
/tmp/.font-unix
/tmp/.font-unix/fs7100
/tmp/sess_f41af2fa1e64c016233fffa28b4ebbbf
/tmp/.ICE-unix
/tmp/zabbix_agentd.pid
/tmp/scripts
/tmp/scripts/mkethalias.sh
/tmp/sess_2eb9102156cd01625c57f50a476ac85d
/tmp/zabbix_agentd.log
/tmp/cmdserver.sock

[+|-]#Mは#Mより大きいまたは小さいファイルを表す上での使用法に類似する
[+|-]#Gは#Gより大きいか小さいかのファイルを表す上での使い方と似ている
-a複数の条件を組み合わせて、すべての条件を満たしてこそ、検索される
検索/etcディレクトリの下の名前がinitで通常のファイルのファイルです
[root@mail ~]# find /etc -name init -a -type f
/etc/sysconfig/init

-oまたは複数の条件を組み合わせて、任意の条件を満たすと、検索されます.
検索/etcディレクトリの下の名前はinitまたは1 Mより大きいファイルです.
[root@mail ~]# find /etc -name init -o -size +1M
/etc/gconf/schemas/metacity.schemas
/etc/selinux/targeted/modules/active/base.linked
/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/modules/active/base.pp
/etc/selinux/targeted/policy/policy.21
/etc/sysconfig/init

-notは逆に条件を満たさないで、調べることができて、条件を満たすのはかえって調べることができません
検索/tmpディレクトリの部下はrootではなく777のファイルではありません
[root@mail ~]# find /tmp -not -user root -not -perm  777
/tmp/sess_f41af2fa1e64c016233fffa28b4ebbbf
/tmp/zabbix_agentd.pid
/tmp/sess_2eb9102156cd01625c57f50a476ac85d
/tmp/zabbix_agentd.log

-atimeが最近アクセスした時間(単位は日)
[+|-]#は、#日以上アクセスされていないファイルを表します.
検索/tmpディレクトリの下30にアクセスされていないファイル
[root@mail ~]# find /tmp -atime +30
/tmp/cmdserver.sock

/tmpディレクトリの下で今日アクセスされたファイルを検索
[root@mail ~]# find /tmp -atime -1
/tmp
/tmp/mysql.sock
/tmp/.font-unix
/tmp/.font-unix/fs7100
/tmp/.ICE-unix
/tmp/scripts
/tmp/scripts/mkethalias.sh

-ctime最近ファイルのプロパティが変更された時間(単位は日)atimeのように使用されます.
-mtime最近ファイルの内容が変更された時間(単位は日)atimeのように使用されます.
-aminが最近アクセスした時間(単位は分)atimeのような使い方
-cmin最近ファイルのプロパティが変更された時間(単位は分)atimeのような使い方
-mmin最近のファイル内容の変更時間(単位は分でatimeの使い方に似ています)
  -perm
MODE:正確に一致し、権限は完全に一致する必要があります.
[root@mail scripts]# find /tmp/scripts/ -perm 600 -ls
1962300    4 -rw-------   1 root     root          494  5  10 20:30 /tmp/scripts/1.sh
1962305    4 -rw-------   1 root     root          500  5  10 20:26 /tmp/scripts/2.sh

-MODE:一致するには指定した権限が必要です
[root@mail scripts]# find /tmp/scripts/ -perm -755 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5  18 17:47 /tmp/scripts/
1962287    0 -rwxrwxrwx   1 root     root            0  5  18 17:32 /tmp/scripts/abC
1962325    4 -rwxr-xr-x   1 root     root          498  5  10 20:06 /tmp/scripts/4.sh

/MODE:いずれかのマッチングで条件を満たす
処理動作[ACTION]
-print:検索したファイルが表示されます(デフォルトオプション)
[root@mail scripts]# find /etc/ -name grub.conf -print
/etc/grub.conf

-lsは検索したファイルをls-lのフォーマットで各ファイルの詳細を表示します
[root@mail scripts]# find /etc/ -name grub.conf -ls
4286129    0 lrwxrwxrwx   1 root     root           22  2  28 03:03 /etc/grub.conf -> ../boot/grub/grub.conf

  -exec COMMAND  {} ;\実行結果をパラメータとしてCOMMAND実行に渡し、確認せずに直接実行する
[root@mail scripts]# find /tmp/ -name file1 -exec mv {} {}.bak \;
[root@mail scripts]# ll /tmp
   12
srwxrwxrwx 1 root  root     0 03-09 00:35 cmdserver.sock
-rw-r--r-- 1  5001  5001    0 05-20 21:09 file1.bak

  -ok COMMAND {} ;\実行結果をパラメータとしてCOMMAND実行に渡し、一歩ずつ確認を求めます
[root@mail scripts]# find /tmp/ -name file2 -ok mv {} {}.bak \;
< mv ... /tmp/file2 > ? y
[root@mail scripts]# ll /tmp
   12
srwxrwxrwx 1 root  root     0 03-09 00:35 cmdserver.sock
-rw-r--r-- 1  5001  5001    0 05-20 21:09 file2.bak

which:
whichはbashコマンドを検索して表示する完全なパスであり、whichは環境変数が設定した位置で指定したコマンドを検索します.
基本的な使い方:which COMMAND
findコマンドのフルパスの検索
[root@mail ~]# which find
/usr/bin/find

whichを使用してコマンドの完全なパスを検索する場合、コマンドが別名を使用しているため、whichも別名情報を表示します.whichが別名情報を使用できるようにしたくない場合は--skip-alias
[root@mail ~]# which ls
alias ls='ls --color=tty'
    /bin/ls
[root@mail ~]# which --skip-alias ls
/bin/ls

whereis:
whereisはコマンドを検索するバイナリファイル、ソースファイル、manマニュアルファイルです.
基本ユーザー:whereis[-bmsu][-BMS Directory-f]FILENAME
whereisコマンドの一般的なオプションは、次のとおりです.
-b実行可能ファイルを位置決めします.-mヘルプファイルを配置します.-sソースファイルを配置します.
[root@mail ~]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@mail ~]# whereis -b ls
ls: /bin/ls
[root@mail ~]# whereis -s ls
ls:
[root@mail ~]# whereis -m ls
ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

この文章は个人のいくつかの学习の中の総括で、ただ个人の理解を代表して、もし足りないところがあれば、また许してください...