Как узнать, какой точке монтирования соответствует текущий рабочий каталог процесса?

В bash и выражение расширения параметра

$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}"   #print everything from offset 32 to the end
3
26.08.2019, 23:36
1 ответ

Вызовите stat(2)для /proc/PID/cwdи другого каталога и сравните их по кортежу device:inode.

Пример (обратите внимание, что если не задан переключатель -L, утилита stat(1)будет выполнять системный вызов lstat(2)вместоstat(2)):

$ mkdir -p /tmp/foo /tmp/bar /tmp/baz
$ cd /tmp/foo
$ echo $$
20890

# mount -B /tmp/bar /tmp/foo
# stat -Lc %d:%i /proc/20890/cwd
2055:1835959

# stat -Lc %d:%i "$(readlink /proc/20890/cwd)" /tmp/foo /tmp/bar
2055:1843068
2055:1843068
2055:1843068

# umount /tmp/foo
# stat -Lc %d:%i /tmp/foo
2055:1835959

Точно так же, как файлы в разделе /proc/PID/fd, /proc/PID/cwdне являются настоящей символической ссылкой --файлы open(2), stat(2)и т. д. не будут следовать своей цели, а будут действовать непосредственно на фактический объект, на который они ссылаются..

2
27.01.2020, 21:24

Теги

Похожие вопросы