先说一个我几乎每天都会碰到的场景:在 Ubuntu 的 terminal 里跑完一条安装命令或者编译命令,忽然想看当前文件夹里到底生成了哪些文件。大多数人这时候会打开文件管理器,一层一层点进同样的目录;或者干脆在终端里 ls -la、cd 来回折腾。其实“terminal 打开当前文件夹”本来就是一条命令就能解决的事,只是这个需求在不同桌面环境、不同使用场景下的打开方式差异很大,值得系统整理一下。
这篇不打算让你背一串命令,而是把这个常见需求拆开:默认 GNOME 环境怎么开,KDE、XFCE 怎么开,没装图形界面的服务器怎么开,WSL 里怎么开,反向从文件管理器里开终端又该怎么配。我会把每个方案背后的原理和坑一起讲清楚,这样你换台机器也能自己推断出答案,而不是永远靠搜索。
1. 终端里的“当前目录”到底在哪:一条命令解决核心需求
1.1 为什么是 nautilus .
在 Ubuntu 默认的 GNOME 桌面上,打开当前文件夹的命令非常简单:nautilus .。我第一次看到这个用法的时候其实有点困惑,因为我不太理解那个点代表什么。后来才明白,. 在 shell 里的含义就是“当前工作目录”,和你执行 pwd 打印出来的那个路径是同一个东西。nautilus 则是 GNOME 文件管理器(也就是你在应用列表里看到的“文件”)真正对应的命令行程序名。
所以 nautilus . 的意思就是:让文件管理器打开终端目前所在的目录。如果你想打开的是别的目录,也很自然,把 . 换成完整路径即可,比如 nautilus /home/你的名字/Downloads。实际使用中,很多人只知道在终端里 cd 切换目录,却忘了终端里有一套和图形界面并列的路径体系。搞清楚终端里的工作目录概念,后面所有操作都顺理成章。
这里有个小细节,GNOME 的文件管理器默认是单实例运行的。如果你的“文件”窗口已经打开,执行 nautilus . 不一定会弹出一个新窗口,有时只是在已有窗口里新开一个标签页,甚至只是把已有窗口带到前台。如果你明确想要一个新窗口,用 nautilus -w .。这个参数全称是 --new-window,在脚本里尤其常用。
1.2 不同桌面环境对应的命令清单
很多人在网上搜到 nautilus 教程,执行却提示找不到命令,原因很简单:你的机器不是 Ubuntu 的默认 GNOME 桌面,或者用了 Ubuntu 的衍生版。不同桌面环境有各自的文件管理器,命令名也不一样。我把常见的桌面环境对应关系整理成了一张表。
| 桌面环境 | 常见发行版 | 打开当前文件夹的命令 |
|---|---|---|
| GNOME | Ubuntu 默认、Fedora 默认 | nautilus . |
| KDE Plasma | Kubuntu | dolphin . |
| XFCE | Xubuntu、Debian 轻量版 | thunar . |
| LXQt | Lubuntu | pcmanfm-qt . |
| Cinnamon | Linux Mint | nemo . |
| MATE | Ubuntu MATE | caja . |
你可以先执行 echo $XDG_CURRENT_DESKTOP 看一眼当前桌面环境,再去表格里找对应的命令。判断程序是否安装也很简单:which nautilus dolphin thunar,哪个有输出说明哪个装了。如果一条都没有,说明你的系统很可能根本没有图形界面,这种情况我放到第 4 章细说。
如果命令不存在,直接 sudo apt install 对应软件包就能装上。比如 KDE 环境就安装 dolphin,XFCE 就安装 thunar。不过这里的目的是“打开当前文件夹”,其实你把列表里的任一文件管理器装上,再手动指定路径打开,效果也是一样的,不一定非要和桌面环境严格绑定。
1.3 更通用也更脆弱的 xdg-open .
如果你只是想在各种环境、各种发行版上统一用一个命令,可以试试 xdg-open .。它的设计目标是把“打开某个文件或某个目录”这个动作交给系统默认程序处理,类似你在浏览器里点开一个链接,系统会自动选择合适的程序。对目录来说,它会调用系统默认的文件管理器。
但它的行为比直接写死文件管理器命令要脆弱。第一,如果你在系统设置里把某个程序设为所有文件类型的默认打开方式,xdg-open 对目录的处理可能被劫持,导致它打开浏览器或者其他乱七八糟的程序。第二,在没有图形会话的服务器上,它会直接报错,因为根本找不到能处理目录的图形程序。所以我的经验是:知道自己在什么桌面环境,就用对应命令;只有写通用脚本,才用 xdg-open . 兜底。另外,GNOME 环境还有一个 gio open . 的类似工具,底层逻辑差不多,这里不展开。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 反向操作:在文件管理器里快速打开终端
2.1 Nautilus 的“在终端中打开”为什么这么难配
解决了“终端打开当前文件夹”,很多人马上会碰到反向需求:我人在文件管理器里,想原地开一个终端,工作目录就是当前这个文件夹。Windows 上是 Shift+右键直接打开 PowerShell,macOS 的 Finder 也有“服务”菜单,但到 Ubuntu 默认的 GNOME 文件管理器这里,右键菜单里偏偏没有这个选项。这个设计决策经常被吐槽,尤其是刚从 Windows 转过来的用户。
旧版本 Ubuntu 上可以直接 sudo apt install nautilus-open-terminal,装完右键菜单就会出现“在终端中打开”。但到了 GNOME 3.36 之后,Nautilus 的扩展机制变了,这个包在较新的 Ubuntu 版本源里往往找不到,或者装上也失效。我曾经在新装好的 Ubuntu 22.04 上去搜这个包,结果一无所获。替代方案有 GNOME Shell 扩展,比如可以搜到各种“Open Terminal Here”类扩展,但这类扩展有个通病:GNOME 每升级一个大版本,扩展就要跟着适配,稍微一滞后就失效了。我个人的建议是:如果你不想折腾,直接跳到第 3 章用 Nautilus 脚本方案,那个不依赖扩展框架,稳定性要好很多。
2.2 其他文件管理器自带这个功能
有意思的是,Ubuntu 默认的 Nautilus 不给这个功能,但其他桌面环境的文件管理器基本都有原生支持。KDE 的 Dolphin 最简单:按 F4 就能在窗口底部切换出终端面板,工作目录自动跟着你在文件管理器里浏览的目录走,想切目录,终端也会同步,体验非常顺手。XFCE 的 Thunar 则是在文件或目录上右键,菜单里直接就有“在终端中打开”。LXQt 的 PCManFM 和 Cinnamon 的 Nemo 也类似。
所以你会发现,很多人从 Ubuntu 默认桌面换到 Xubuntu 或 Kubuntu 之后,反而觉得“打开终端”这件事顺心得多,这不是幻觉,是这些文件管理器确实把这个高频需求做进去了。如果你确实喜欢 GNOME 的界面,又舍不得这个功能,还有一个思路:把默认文件管理器换成 Nemo,即 sudo apt install nemo,然后右键菜单里自带“在终端中打开”。代价是文件管理器外观和 Nautilus 有些差别,不算大问题。
3. 把这些命令变成日常习惯:别名、函数与右键菜单
3.1 终端里用别名缩短敲击成本
如果你每天要执行几十次 nautilus .,手再熟也烦。最简单的方法是给它起个短别名,在 ~/.bashrc 文件末尾追加一行:
bash复制alias here='nautilus .'
保存后执行 source ~/.bashrc 让它立即生效。之后在终端里输入 here 就会打开当前文件夹,这个别名比原始命令好记多了。如果你用的是 zsh,要把这行写进 ~/.zshrc,而不是 ~/.bashrc,这是很多刚接触 oh-my-zsh 的人容易踩的坑。
别名的思路很简单,但它有个局限:它不知道你当前用的是哪个桌面环境。假如你从 GNOME 换到了 KDE,或者从一台 Ubuntu 跳板机切换到了 Xubuntu,这个别名就失灵了。所以别名适合固定不变的开发机,灵活场景还是得靠函数。
3.2 一个自动识别桌面环境的 here 函数
我在自己的 ~/.bashrc 里放的其实是一个函数,它会先判断当前环境,选择合适的文件管理器命令,还会在 WSL 环境下自动用 Windows 资源管理器打开。代码不长,但非常实用:
bash复制here() {
# WSL 环境下直接交给 Windows 资源管理器
if [ -n "$WSL_DISTRO_NAME" ]; then
explorer.exe .
return
fi
case "$XDG_CURRENT_DESKTOP" in
*KDE*) cmd="dolphin" ;;
*XFCE*) cmd="thunar" ;;
*GNOME*) cmd="nautilus" ;;
*Cinnamon*) cmd="nemo" ;;
*MATE*) cmd="caja" ;;
*LXQt*) cmd="pcmanfm-qt" ;;
*) cmd="xdg-open" ;;
esac
if command -v "$cmd" >/dev/null 2>&1; then
"$cmd" . >/dev/null 2>&1 &
else
xdg-open . >/dev/null 2>&1 &
fi
}
这里有几个容易忽略的点。command -v 用来检查对应程序是否安装,返回值重定向到 /dev/null 是为了避免把错误信息刷到终端。命令最后加的 & 是让文件管理器在后台运行,这样终端不会被它阻塞,你还能继续敲命令。>/dev/null 2>&1 则是把程序输出和警告都扔掉,因为很多文件管理器启动时会打印一堆和用户无关的调试信息。XDG_CURRENT_DESKTOP 在绝大多数桌面环境里都会被设置为对应标志,所以这个判断基本可靠。
3.3 Nautilus 脚本:在右键菜单里加上“在此处打开终端”
如果你想在 Nautilus 的右键菜单里拿到“在此处打开终端”,最稳妥的方式是 Nautilus 脚本。原理很简单:Nautilus 会自动扫描用户目录下的 ~/.local/share/nautilus/scripts/ 文件夹,把里面有执行权限的文件都列到右键菜单的“脚本”子菜单里。我们只需要写一个脚本,内容是“把终端的工作目录切到当前浏览的文件夹”。
bash复制mkdir -p ~/.local/share/nautilus/scripts/
cat > ~/.local/share/nautilus/scripts/open-terminal-here << 'EOF'
#!/bin/bash
dir=$(python3 -c "import urllib.parse,sys; print(urllib.parse.unquote(sys.argv[1][7:]))" "$NAUTILUS_SCRIPT_CURRENT_URI")
cd "$dir" && gnome-terminal --working-directory="$dir"
EOF
chmod +x ~/.local/share/nautilus/scripts/open-terminal-here
部署完不用重启,回到 Nautilus 里右键任意目录,找到“脚本”菜单,点里面的 open-terminal-here,就会弹出一个终端窗口,工作目录正好是当前文件夹。这里有个细节:Nautilus 脚本运行时的环境变量和普通终端不一样,它不会自动把当前浏览目录作为 $PWD,而是通过 NAUTILUS_SCRIPT_CURRENT_URI 传入一个形如 file:///home/yourname/xxx 的 URI。sys.argv[1][7:] 是为了去掉开头的 file://,再用 urllib.parse.unquote 把 %20 之类的转义还原成空格,这样中文路径和带空格的目录也能正确处理。
如果你用的是 Flatpak 安装的 Nautilus,脚本目录可能被沙箱隔离,直接放到 ~/.local/share/nautilus/scripts/ 不一定能被识别。这种情况我一般建议换用系统包版本,或者改用 GNOME 扩展。Nautilus 脚本方案虽然名字听起来有点土,但它在 GNOME 3.x 到 4x 的大版本迭代里都挺稳定,我实测下来是这些方案里最省心的
