Linuxでコード書いていると、「あれ~、どこのヘッダーに定義情報書いてあったっけ?」ってたまになるので、OSの中の全ヘッダーファイルを検索して目的の情報を見つけ出すときのワンライナー。
最近だと WSL なんかを使っている人もいるだろうし、そうするとデフォルトで/mnt/c
が Windows OS のファイルシステムと繋がっているので Windows 上のファイルもスキャンしちゃっていつまでたっても検索終わらんのでディレクトリの検索除外オプションも入れておく。
[Ubuntu: ~]$find / -type d -name mnt -prune -o -type f -name "検索したいファイル名" -print 2>/dev/null | xargs grep -i "検索したい文字"
-
-type d -name <ディレクトリ名> -prune
: 指定したディレクトリを検索から除外 -
-type f -name <ファイル名> -print
: 指定したファイル名を検索してファイルパスを表示 -
-o
: 前者(-type d -name <ディレクトリ名> -prune
)が真ならば、後者(-type f -name <ファイル名> -print
)は評価しない -
xargs grep -i "検索したい文字"
: ファイルパスを1行ずつgrep
に渡して、大文字小文字を無視して検索
e.g) /mnt
ディレクトリ以外で、.h
がファイル名に含まれるファイルから、tcp_rto
の文字列が含まれるファイルを探す
[Ubuntu: ~]$find / -type d -name mnt -prune -o -type f -name "*.h" -print 2>/dev/null | xargs grep -i "tcp_rto*"
e.g) /mnt
ディレクトリ以外の全ファイルから、tcp_rto
の文字列が含まれるファイルを探す
[Ubuntu: ~]$find / -type d -name mnt -prune -o -type f -print 2>/dev/null | xargs grep -i "tcp_rto*" 2>/dev/null