You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Linux允许~作为文件名 如何在终端正确删除名为~的文件

问题一:Linux 为什么允许 ~ 作为合法文件名?

Linux 原生文件系统对合法文件名的限制非常少,仅禁止两类字符出现在文件名中:

  • 路径分隔符 /:避免文件名被识别为多级路径
  • 空字符 \0:避免系统读取文件名时出现字符串截断

其余所有可打印、不可打印字符都可以作为文件名的组成部分,仅由特殊符号构成的文件名也被允许。
~ 会被识别为家目录是 Shell 层的主动扩展行为,和文件系统的命名规则无关:文件系统仅负责存储文件名的原始字面量,不会对 ~ 做特殊处理;只有用户在 Shell 中执行命令时,Shell 会在把命令传递给内核之前先做预解析,将单独出现的无引号包裹的 ~ 替换为当前用户的家目录路径,才会触发后续的误删问题。

问题二:如何正确删除名为 ~ 的文件,避免被识别为家目录路径?

可以通过以下几种方式禁用 Shell 的波浪号扩展,精准匹配到名为 ~ 的文件:

  • 方法1:使用相对路径前缀明确指代当前目录下的文件
    执行命令:rm ./~
    加上 ./ 前缀后,Shell 会将整个字符串识别为当前目录下的文件路径,不会触发波浪号扩展规则。
  • 方法2:用单引号包裹文件名,强制保留字面含义
    执行命令:rm '~'
    Shell 对单引号包裹的内容不会做任何特殊字符解析,会直接将 ~ 作为普通文件名传递给 rm 命令。
  • 方法3:用反斜杠转义取消 ~ 的特殊属性
    执行命令:rm \~
    反斜杠转义符会让后续紧跟的特殊字符失去扩展含义,被当做普通文本处理。

建议执行删除操作前,先将 rm 替换为 ls 验证匹配的文件是否正确,比如先执行 ls ./~ 确认输出的就是你要删除的目标文件,再执行删除命令,进一步降低误操作风险。


内容的提问来源于stack exchange,提问作者Seeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:57:04