Сначала давайте посмотрим, как команда cd
ведет себя, посмотрев в меню help
. То, что мы ищем, это опция -L
(поведение по умолчанию) и опция -P
$ help cd cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
...
...
Options:
-L force symbolic links to be followed: resolve symbolic links in
DIR after processing instances of `..'
-P use the physical directory structure without following symbolic
links: resolve symbolic links in DIR before processing instances
of `..'
...
...
Важный раздел
The default is to follow symbolic links, as if `-L' were specified.
`..' is processed by removing the immediately previous pathname component
back to a slash or the beginning of DIR.
Exit Status:
...
Как вы можете видеть, поведение по умолчанию cd
отличается от того, что вы думаете, поскольку он будет манипулировать переменной $PWD
, к которой обращается команда pwd
, по-своему, на каждом шаге вы можете запускать pwd
введите команду или выполните команду echo $PWD
, чтобы увидеть, как она реагирует с различными командами cd
, указанными ниже.
Давайте поиграем с cd
командой:
Мы начинаем со следующей папки со ссылкой sym:
[/home/arobert/test/noob] >
ls -ltra
total 8
drwxrwxr-x 5 arobert arobert 4096 5月 11 09:48 ..
lrwxrwxrwx 1 arobert arobert 26 5月 11 09:48 A -> /home/arobert/link/B/C/D/A
drwxrwxr-x 2 arobert arobert 4096 5月 11 10:03 .
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:
[/home/arobert/test/noob] >
cd A
[/home/arobert/test/noob/A] >
cd ..
[/home/arobert/test/noob] >
cd -L A
[/home/arobert/test/noob/A] >
cd ..
[/home/arobert/test/noob] >
cd -P A
[/home/arobert/link/B/C/D/A] >
cd -P ..
[/home/arobert/link/B/C/D] >
cd /home/arobert/test/noob/
[/home/arobert/test/noob] >
cd A
[/home/arobert/test/noob/A] >
cd -P ..
[/home/arobert/link/B/C/D] >
Теперь давайте поиграем с readlink
и cp
командой:
Допустим, мы ввели символическую ссылку, указывающую на A -> /home/arobert/link/B/C/D/A
, в которой у нас есть файл a
[/home/arobert/test/noob/A] >
ls -ltra
total 8
drwxrwxr-x 3 arobert arobert 4096 5月 11 09:55 ..
-rw-rw-r-- 1 arobert arobert 0 5月 11 10:10 a
drwxrwxr-x 2 arobert arobert 4096 5月 11 10:10 .
из этой папки давайте посмотрим, куда указывают .
и ..
с помощью команды readlink -f
:
[/home/arobert/test/noob/A] >
readlink -f .
/home/arobert/link/B/C/D/A
[/home/arobert/test/noob/A] >
readlink -f ..
/home/arobert/link/B/C/D
В результате при запуске из /home/arobert/test/noob/A
местоположения, эквивалентного /home/arobert/link/B/C/D/A
, команда cp a ..
файла будет перемещена в /home/arobert/link/B/C/D
, поскольку ..
указывает на него.
Что вы можете сделать сейчас:
- Используйте абсолютный путь с вашей командой
cp
, чтобы избежать неприятных сюрпризов.
- Вызовите команду из каталога
/home/arobert/test/noob/
, используя
Например:
[/home/arobert/test/noob] >
cp A/a .
как readlink -f .
указывает на правильную папку
[/home/arobert/test/noob] >
readlink -f .
/home/arobert/test/noob
Результат:
[/home/arobert/test/noob] >
ls -ltra
total 8
drwxrwxr-x 5 arobert arobert 4096 5月 11 09:48 ..
lrwxrwxrwx 1 arobert arobert 26 5月 11 09:48 A -> /home/arobert/link/B/C/D/A
-rw-rw-r-- 1 arobert arobert 0 5月 11 10:13 a
drwxrwxr-x 2 arobert arobert 4096 5月 11 10:13 .