linux 文件或命令查找工具 find locate which whereis type

which

which 用於查找 $PATH 中設置可執行文件,不過有些解壓即可用的經常是沒有放到 $PATH 中的,如 redis ,mongodb 等。

# 查找 java 命令位置
which java

如果沒有放到 $PATH 中,我們也可以通過查找它的進程或端口號來找到它,如果你有權限訪問的話,像這樣

# 查找 zookeeper 的進程編號,如果你有權限查看的話
netstat -tlnp | grep 2181
# 查找進程的啓動命令,一般都可以找到啓動位置
ps -o 'cmd' --width=10000 -p <pid>
# 有時也可以直接使用 ps 來查看,因爲啓動命令中,一般會包含你需要相關信息
# 比如常見的查看 tomcat 進程號,順便可以查到位置
ps -ef | grep tomcat 

type

type 用來查看命令是內建命令還是外部命令,也可以看看可執行命令的路徑 ,或者查看命令是不是別名。bash 會內建一些常用命令比如 cd umask

locate

locate 是一個比較常用的查找工具,在 which 查不到,並且軟件沒有啓動的時候,這時候可以使用 locate 來查找,它就相當於 windows 的 everything ,已經提前做好了索引,查詢速度很快,但是會有一大堆沒有用的文件出來,需要你來篩選。

# 查找 redis 位置 
locate redis
# 兩個常用的參數 
-i 忽略大小寫
-r 後面可以接正則表達式來搜索 

whereis

locate 也是利用 linux 提前建立好的索引來搜索,但我在實際中用得比較少,可能是當初用的時候 ,每次用這個命令都找不到文件吧,它的使用方法如下

# 查找 mysql 位置,它會把所有的可能路徑列出來
whereis mysql 

find

find 在《鳥哥的私房菜》這本書中說是最不常用的命令,但我覺得它應該是我最常用的一個命令了,因爲實在是太方便了。

因爲 find 沒有使用 linux 的索引,是直接搜索磁盤的,一般不會直接搜索根路徑;

但實際情況是我們的 web 應用都是放在某一個路徑下的,還有日誌信息等,而且 java 項目你們知道的一般都會有很深的路徑,一層一層 cd 很費事,而且文件並不多的時候使用 find 還是很快速的,下面介紹 find 的常用參數 。

下面只列出程序員來說比較常用的,運維需要知道的可能不止這些,大神忽噴。

# find 的命令格式如下
find [PATH] [option] [action]

# 查找 classes 下某個類 
find ./classes -type f -name 'XXX.class'
# 經常一些類有內部類,直接查找 .class 可能會漏,可以使用通配符
find ./classes -type f -name 'XXX*'

-type f 只搜索文件,-type d 只搜索目錄 
-name 搜索指定名稱的文件
find 默認是遞歸搜索 

# 查找 /data 目錄下 大於 1G 的文件 ,G 要大寫,還支持 M ,k
find /data -type f -size +1G

# find 的遞歸搜索是挺方便,但有時候就不想讓它搜那麼深,可以設置搜索深度.
find /data -maxdepth 1

# 想排除某個目錄的時候,可以使用 -path 來排除一些目錄 
# 不想看 2018 年的目錄,可以這麼玩
find /data ! -path '2018*'

# 搜索到的文件我想做一些處理,比如複製到另一個地方
# 把 java 文件複製到我的主目錄裏面去
find /data -name '*.java' -exec cp {} ~/{} \;
# 刪除  classes 下的 java 文件,可能有人誤上傳了
find ./classes -name '*.java' -exec rm -f {} \;

# 查找今天改過哪些文件,這個指從當前時間 24 小時內改過的文件
find ./classes -mtime 0 

一點小推廣

Excel 通用導入導出,支持 Excel 公式
https://blog.csdn.net/sanri1993/article/details/100601578

使用模板代碼 ,從數據庫生成代碼 ,及一些項目中經常可以用到的小工具
https://blog.csdn.net/sanri1993/article/details/98664034

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章