TypechoJoeTheme

MetMan's Blog

网站页面
文章目录

Linux canonical pathname概念

MetMan博 主
2024-04-19
/
0 评论
/
116 阅读
/
298 个字
/
百度已收录
04/19
本文最后更新于 2024年08月02日,已超过 48天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

POSIX定义了绝对/相对路径名,还有一种canonical pathname,它不是POSIX定义的,但在Linux命令介绍中常用到这个概念。

下面介绍三种文件名概念。

  • absolute pathname (绝对路径名)

以单个或两个以上/字符开头的路径名。

比如

/root 
/../usr/bin
//opt/intel
  • relative pathname

不以/字符开头的路径名。

比如:

foo
../data/a.txt
  • Canonical pathname

路径名中每个部分都是实际存在的目录或文件(不是符号链接),不包括...,并且其斜杠不重复。这意味着对于同一个文件系统对象,其canonical路径名是唯一的,从而是可比较的。

假如以下路径名是canonical pathname,

/home/user/data/a.txt    # 路径中每一部分都是真实存在的

如果cd ~; ln -sf /home/user/data mydata,那么下面几个路径名都不是canonical pathname。

/home/user/mydata/b.txt
/home/other/../user/data/a.txt
/home/user//data/a.txt

我们可以通过命令readlink -f显示参数的canonical pathname,也可以使用等价命令realpath实现这一功能。在Linux平台,readlink -frealpath通用性更好些。

$ which python 
/usr/sbin/python
$ readlink -f $(which python)
/usr/bin/python3.11
$ realpath $(which python)
/usr/bin/python3.11
$ namei $(which python)   # 即 namei /usr/sbin/python
f: /usr/sbin/python
 d /
 d usr  
 l sbin -> bin            # sbin是bin的软链接
   d bin
 l python -> python3        # python是python3的软链接
   l python3 -> python3.11  # python3是python3.11的软链接
     - python3.11

上面使用了命令namei解析路径名每一部分的类型。每行输出信息中开头字符含义如下:

f: = the pathname currently being resolved
d = directory
l = symbolic link (both the link and its contents are output)
s = socket
b = block device
c = character device
p = FIFO (named pipe)
- = regular file
? = an error of some kind

可以对canonical pathname使用namei命令输出看看,可以看到没有l链接类型了。

$ namei /usr/bin/python3.11
f: /usr/bin/python3.11       
 d /
 d usr
 d bin
 - python3.11

参考资料

filesystems - Absolute / canonical / relative paths - Unix & Linux Stack Exchange

What's a "canonical path"? - Stack Overflow

filenames - What's the difference between "realpath" and "readlink -f" - Unix & Linux Stack Exchange

namei(1) - Linux manual page (man7.org)

linuxbash
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/98/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码