非root权限下,如何在Ubuntu的Bash Shell中让/ts指向个人目录~/.local/ts?
嗨,我完全理解你的需求——你想在自己的bash会话里,让系统上那个只读的/ts目录,实际指向你个人的~/.local/ts,而且不能影响其他用户,还没有root权限对吧?下面给你两个可行的方案,你可以根据自己的环境选择:
方案一:用bindfs(推荐,彻底解决所有场景)
bindfs是一款用户空间的文件系统工具,专门用来做文件/目录的绑定映射,正好满足你的核心需求:不需要root权限,挂载后的映射只对你自己的用户生效,不会影响服务器上的其他用户。
操作步骤:
安装bindfs到个人目录:
因为你没有root权限,直接用apt install bindfs会失败,所以我们用apt的--user参数,把bindfs安装到你自己的~/.local目录下:apt install bindfs --user如果这个命令因为权限问题无法执行(比如系统禁止普通用户用apt --user),你也可以从bindfs的源码编译安装:下载源码后,执行
./configure --prefix=$HOME/.local && make && make install,就能把它安装到个人目录了。配置自动挂载映射:
我们需要把你的~/.local/ts绑定到/ts,但因为/ts是系统目录且你只有只读权限,直接挂载可能会有问题。这里我们用bindfs的--force-user和--force-group参数,确保你能正常访问,然后把挂载命令加到你的~/.bashrc里,每次登录bash时自动执行:# 先检查~/.local/ts是否存在,不存在就创建 [[ -d ~/.local/ts ]] || mkdir -p ~/.local/ts # 用bindfs挂载自己的目录到/ts,只对当前用户生效 bindfs --force-user=$USER --force-group=$USER ~/.local/ts /ts保存
~/.bashrc后,执行source ~/.bashrc让配置生效。验证效果:
现在你执行ls /ts就能看到B.sh,执行cd /ts会进入~/.local/ts,所有涉及/ts的操作都会指向你的个人目录,其他用户访问/ts还是原来的系统目录,完全不受影响。
方案二:用bash函数(无需安装软件,适合受限环境)
如果你的服务器禁止安装任何软件,那可以用bash的函数来拦截并替换涉及/ts的命令,虽然不如bindfs彻底,但能覆盖大部分常用场景。
操作步骤:
把下面的代码加到你的~/.bashrc里:
# 处理cd命令 cd() { local target="$1" # 如果目标是/ts或者以/ts开头,替换成个人目录 if [[ "$target" == "/ts"* ]]; then target="${target/\/ts/$HOME/.local/ts}" fi command cd "$target" } # 处理ls命令 ls() { # 替换所有参数里的/ts为个人目录 local args=("${@//\/ts/$HOME/.local/ts}") command ls "${args[@]}" } # 同理,可以扩展到其他常用命令,比如cat、cp、mv等 cat() { local args=("${@//\/ts/$HOME/.local/ts}") command cat "${args[@]}" }
保存后执行source ~/.bashrc生效。
注意事项:
这个方案只能覆盖你自己定义了函数的命令,比如如果你用一个没定义的命令(比如tree /ts),就不会生效。但对于日常用的cd、ls、cat等命令,完全够用。
备注:内容来源于stack exchange,提问作者African_king

