都知道Linux安装软件的方式有多种,如:Ubuntu26.04中使用snap安装,apt源安装,dpkg 安装deb包的方式,还有使用Flatpak来安装等等。
如果只知道一个文件,怎么快速通过该文件找到程序安装目录呢?
1. 先找可执行文件绝对路径(which)
which 程序名
# 示例
which nginx
which firefox
输出类似:
/usr/sbin/nginx
这就是可执行文件本身的位置。
2. 顺带看相关文件(whereis)
whereis 程序名
# 示例
whereis nginx
可能返回:
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
能直接看到二进制、配置、库、文档等目录。
3. APT/dpkg 安装的软件:查整个包(dpkg -L)
先用 which 得到路径,再反查包名:
# 1. 得到路径
which nginx
# 2. 反查属于哪个包
dpkg -S /usr/sbin/nginx
#也可以快速操作
dpkg -S $(which nginx)
# 3. 列出该包所有安装文件
dpkg -L nginx
dpkg -L 会列出所有文件与目录,包括配置、日志、数据目录等。
4. 若程序正在运行:查进程(/proc + pwdx)
# 找进程 PID,如果知道程序已经在运行和程序名称
swper@Mt:~$ pidof firefox
6845
# 用 PID 查 exe 链接和工作目录
swper@Mt:~$ ls -l /proc/6845/exe
lrwxrwxrwx 1 swper swper 0 May 30 10:55 /proc/6845/exe -> /opt/firefox/firefox-bin
/proc/[PID]/exe 是指向真实可执行文件的软链接,pwdx 显示进程当前工作目录。
5. 非包管理器安装(手动解压、编译、AppImage)
- 看
which结果,上级目录往往就是安装根:/opt/xxx/bin/xxx→ 安装根:/opt/xxx~/.local/bin/xxx→ 安装根:~/.local
- 全局搜索:
sudo find / -name "程序名" 2>/dev/null
6. 手动安装 / 绿色软件:找根目录
如果是解压安装、自己编译的:
readlink -f $(which 程序名)
得到真实路径后,往上退几层就是安装目录
7. Snap / Flatpak
- Snap:
snap list | grep 程序名
snap info 程序名
# 实际文件通常在 /snap/程序名/
- Flatpak:
flatpak list | grep 程序名
flatpak info 程序名
# 通常在 /var/lib/flatpak/app/
后面这两个工具我用得少,虽然方便了一些,但相对也占用了资源,我还是比较喜欢apt或者dpkg方式来安装软件。