分页: 1 / 1

[已解决]相对目录不跟随符号链接?

发表于 : 2017-08-30 23:26
科学之子

代码: 全选

user@debian:/sys/block/zram0/queue$ cat ../../zram0/queue/iostats
0
user@debian:/sys/block/zram0/queue$ cat ../../sda/queue/iostats
cat: ../../sda/queue/iostats: No such file or directory
user@debian:/sys/block/zram0/queue$ realpath  ../../
/sys/devices/virtual/block
user@debian:/sys/block/zram0/queue$ ls -l /sys/devices/virtual/block
total 0
drwxr-xr-x  9 root root 0 Aug 30 23:31 dm-0
drwxr-xr-x  9 root root 0 Aug 30 23:31 dm-1
drwxr-xr-x 10 root root 0 Aug 30 23:31 loop0
drwxr-xr-x 10 root root 0 Aug 30 23:31 loop1
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop2
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop3
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop4
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop5
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop6
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop7
drwxr-xr-x  8 root root 0 Aug 30 23:31 zram0
user@debian:/sys/block/zram0/queue$ ls -l  ../../
total 0
drwxr-xr-x  9 root root 0 Aug 30 23:31 dm-0
drwxr-xr-x  9 root root 0 Aug 30 23:31 dm-1
drwxr-xr-x 10 root root 0 Aug 30 23:31 loop0
drwxr-xr-x 10 root root 0 Aug 30 23:31 loop1
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop2
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop3
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop4
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop5
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop6
drwxr-xr-x  9 root root 0 Aug 30 23:31 loop7
drwxr-xr-x  8 root root 0 Aug 30 23:31 zram0
user@debian:/sys/block/zram0/queue$ cd ../../
user@debian:/sys/block$ ls
dm-0  dm-1  loop0  loop1  loop2  loop3  loop4  loop5  loop6  loop7  sda  sr0  zram0
我的理解在7楼,如果不对还请不吝赐教.

Re: 相对目录不跟随符号链接?

发表于 : 2017-08-30 23:52
九天星
不跟随

Re: 相对目录不跟随符号链接?

发表于 : 2017-08-31 9:15
vickycq

Re: 相对目录不跟随符号链接?

发表于 : 2017-08-31 16:02
科学之子
求教用什么关键词搜到的?

根据我的理解:
https://github.com/wertarbyte/coreutils ... pwd.c#L328
pwd -L是先尝试读取环境变量,读取失败(PWD 变量不存在或数据无效)就会变成-P情况
pwd -P是直接使用xgetcwd的返回值
这个github的版本我没找到xgetcwd的定义
我用 apt-get source 下载了一份源码然后:

代码: 全选

user@debian:~/Downloads/coreutils-8.26$ grep -e xgetcwd -rn --include='*.c'
src/pwd.c:27:#include "xgetcwd.h"
src/pwd.c:380:  wd = xgetcwd ();
src/find-mount-point.c:24:#include "xgetcwd.h"
src/find-mount-point.c:99:  mp = xgetcwd ();
lib/xgetcwd.c:1:/* xgetcwd.c -- return current directory with unlimited length
lib/xgetcwd.c:23:#include "xgetcwd.h"
lib/xgetcwd.c:35:xgetcwd (void)
lib/at-func2.c:206:         file1_alt = file_name_concat (xgetcwd (), file1, NULL);
lib/canonicalize.c:32:#include "xgetcwd.h"
lib/canonicalize.c:138:      rname = xgetcwd ();
xgetcwd其实就是调用getcwd来获取路径
似乎大多数独立的二进制程序都是用getcwd来确定工作目录的.
但shell(至少bash)优先尝试读取PWD环境变量