公众号旧文
为什么 ~/.bashrc 只有扩展名,却没有文件名?
我之前写过好几篇文章,都和 ~/.bashrc 有关,比如:
那个时候刚接触 Linux,觉得 ~ 和 / 不太直观,很难理解。
后面才知道,原来 / 就是 根目录,而 ~ 就是 当前用户的家目录。
因为我使用 root 用户,因此对我来说 ~/.bashrc 就是 /root/.bashrc
刚刚在做选题的时候,回去看了看,还看到了两篇:
为什么 .jpg 可以写成 .jpeg,而其他扩展名却大多只有 3 个字母?
于是就有了今天的这篇文章。
先说结论:.bashrc 不是只有扩展名,而是一个完整的文件名。
一、原来是我被扩展名思维给误导了
在 Windows 里,我们习惯这样理解文件:
文件名 + 扩展名
比如:
notepad.exe
photo.jpg
所以当我看到:
.bashrc
下意识会觉得它是:
空文件名 + bashrc 扩展名
但这理解实际上是错的。
二、Linux 根本没有扩展名的概念
在 Linux / Unix 里文件名就是一整串字符串,系统不会去解析扩展名。
比如 file 这几个文件:
file.txt
file
file.anything
不管把后缀改为 .txt 还是留空,甚至改成 .anything
对系统来说都完全一样。
三、但当.在开头时,含义变了
在 Linux 里,如果文件名的第一个字符是 . 意味着这是隐藏文件。
所以 .bashrc 应该这样理解:
文件名 = .bashrc
而不是:
文件名 = ""
扩展名 = bashrc
四、那 Windows 里为什么也有 .svn?
如果你用过 TortoiseSVN,你可能见过:
.svn

在 Windows 资源管理器里直接就能看到。
但要注意,这里的 .svn 在 Windows 里不是因为以 . 开头才隐藏,而是被设置为隐藏属性。
五、清晰的对比表格
| 文件名 | 是否隐藏 | 是否有扩展名 |
|---|---|---|
.bashrc |
✅ 是 | ❌ 没有 |
test.txt |
❌ 否 | ✅ txt |
.config.json |
✅ 是 | ✅ json |
最后一行的 .config.json 才是:
- 文件名:
.config - 扩展名:`json```
六、为什么 Unix 要这么设计?
因为 Unix 向来用最简单的规则实现相应的功能。
只需要约定文件名字以 . 开头就是隐藏文件。
就不再需要权限位,文件属性,额外元数据。