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


sanri1993
490 声望14 粉丝