Почему я имею к CD из удаленного каталога?

Вы используете правильную команду. Ваш вопрос, кажется, просто, "что еще я могу сделать?" (так).

Таким образом, вот несколько причин, почему это могло бы произойти.

  • Недостижимость ftp.debian.org от Вашей машины
  • Необъясненная ошибка на ftp.debian.org

Можете Вы:

  • разрешить имя?
  • успешно сделайте соединение TCP к нему на порте 80?
  • получить тот файл?

Попытайтесь использовать nc или curl вытягивать файл. Выполненный tcpdump в другом терминале и видят то, что происходит.

19
22.04.2014, 19:21
7 ответов
[12149]Для меня "cd ../code" - это noop. Мне очень интересно услышать, почему это не так.[12150]Потому что файлы и каталоги в основном являются [1128620]файловой системой inodes[1128621], а не именами - возможно, это реализация, специфичная для типа файловой системы, но это правда для всех ext-систем, поэтому я остановлюсь на этом здесь.[12151]Когда создается [1128622]новый[1128623] каталог [1128624]code[1128625], он ассоциируется с новым inode, и именно там он и находится. Нет никаких записей об удаленных ранее файлах и каталогах, так что нет никаких средств, с помощью которых система могла бы проверить, какой inode она занимала и, возможно, перетасовать вещи вокруг так, чтобы они снова были теми же самыми; такая система быстро станет неработоспособной, и в любом случае, вероятно, нет никакой гарантии, что вы вернетесь туда снова - это было бы вроде как нежелательно, так как это означает, что вы можете случайно оказаться где-то в другом месте, если будет создан каталог, который берет ваш (в настоящее время неиспользуемый) inode. [12152]Я не уверен, существует ли эта последняя возможность, и отслеживается ли inode удаленного каталога, который в настоящее время назначен вашему текущему рабочему каталогу, так что в течение этого времени ему ничего не будет назначено, и т.д.[1128188].
26
27.01.2020, 19:44
[1128163] Ваша оболочка [1128600] не[1128601] каждый раз делает [1128602]cd[1128603] к пути, в котором она находилась во время выполнения последней команды, перед выполнением следующей команды. [12141]Вы удалили текущий каталог и создали каталог с тем же именем, который не является тем же самым каталогом, просто что-то с тем же именем/путем.[12142]Такие файловые браузеры, как Nautilus и Проводник Windows обычно "поднимаются" вверх по дереву каталогов, если каталог удаляется в локальной файловой системе. Однако это не всегда верно для сетевых файловых систем, в этом случае иногда удаление не замечается, и повторное появление может привести к тому, что Вы окажетесь в новом каталоге.[12143]Оболочка командной строки может [1128604]cd[1128605] оказаться в текущем каталоге перед выполнением следующей команды, я не знаю ни о каком из них (или может быть настроена на это).[1128170]
14
27.01.2020, 19:44
[1129473]На большинстве UNIX-подобных систем "текущий каталог" процесса хранится в ядре в виде файлового дескриптора, указывающего на этот каталог. На самом деле ядро не хранит путь к текущему каталогу: эта информация отслеживается оболочкой командной строки.[12164]Объект файловой системы (файл [1129902]или [1129903] каталог) уничтожается навсегда только тогда, когда все ссылки на него отсутствуют, [1129904]и [1129905] файловых дескрипторов, указывающих на этот объект, нет. Таким образом, если каталог удаляется, пока есть процесс, который держит его в качестве текущего рабочего каталога, то процесс [1129906]cwd[1129907] убережет этот каталог от истинного удаления. Файловая система связывает каталог (его запись в родительском каталоге и все его содержимое), но сам каталог будет продолжать существовать как своего рода "зомби". Между тем, вы можете создать совершенно новый каталог в том же самом месте, что и старый, который является совершенно другим объектом файловой системы, но который разделяет тот же самый путь.[12166] Таким образом, когда вы делаете [1129908]cd ../code[1129909] (или, на многих оболочках командной строки, [1129910]cd . [1129911]), вы фактически обходите иерархию файловой системы и переходите к каталогу [1129912]new[1129913], который находится по старому адресу.[12167] По аналогии, удаление каталога будет подобно принудительному перемещению дома на помойку (разрыву связей с предыдущим адресом). Если бы там еще кто-то жил (используя его как [1129914]cwd[1129915]), ему пришлось бы уйти до того, как дом можно было бы снести. Тем временем, по старому адресу можно было бы построить совершенно новый дом.[1129482].
4
27.01.2020, 19:44
[1128197] @Антон прояснил причины, почему это происходит [1128632] В качестве решения можно использовать [1128633]псевдоним[1128634], например:[12156]псевдонимы для bash задаются в ~/.bashrc[1128200].
0
27.01.2020, 19:44
[1130259] Подтверждение Текущая рабочая директория IS основана на номере входа, а не на том, что вы искали, чтобы туда попасть. Поскольку вы используете bash, вы можете использовать $PWD следующим образом для cd к новому каталогу с тем же именем:

cd $PWD

Чтобы проиллюстрировать, я сделал фиктивную команду развертывания:

Создал первую установку, cd'd к коду, а затем проверил содержимое с помощью [1130640]ls -lai[1130641], чтобы вы могли увидеть inodes:

Теперь запустите вторую установку

И проверьте содержимое каталога. ... теперь в каталоге ничего нет! даже '...' и '...'! Из этого видно, что bash не использует запись каталога '...' при запуске [1130642]cd ...[1130643], так как '...' больше не существует - я полагаю, что это часть его работы с $PWD. Некоторые другие оболочки/оболочки папок не обрабатывают [1130644]cd ...[1130645] в этой ситуации, вы должны сначала cd к абсолютному пути.

mv /etc/gdm/custom.conf /etc/gdm/custom.Conf_bak
Cd к [1130646]$PWD[1130647] и попробовать еще раз:

Обратите внимание, как изменился inode для текущей директории (...)?

Если бы сценарий развертывания переместил старую директорию на другое имя, например [1130648]mv code.$$[1130649] в сценарии развертывания, описанном выше, тогда [1130650]./run[1130651] работал бы, [1130652], но [1130653] до тех пор, пока вы не используете [1130654]cd $PWD[1130655], вы бы выполняли код [1130656] старой [1130657], а не новую директорию.

Развертывание с использованием capistrano имеет ту же самую проблему (они имеют сим-ссылку от текущего имени до текущего релиза), поэтому я использую псевдонимы для cd в области производства/сцены, а также устанавливаю RAIL_ENV соответствующим образом:

0
27.01.2020, 19:44

Я предполагаю, что путь к чему-то - это то, что идентифицирует каталог.

Путь к чему-то - это то, как вы туда попадаете, а не сама вещь. Путь к вашей кровати может быть через вашу комнату, но как только вы в кровати, если кто-то поднимет ее и вытащит на улицу, вас больше не будет в вашей комнате[1130304].

0
27.01.2020, 19:44

Не самостоятельный -ответ, но у меня есть дополнительный момент, который поле для комментариев было слишком маленьким, чтобы его вместить.

Чтобы лучше понять идею о том, что каталог в соответствующих файловых системах — это больше, чем просто путь, попробуйте переместить текущий рабочий каталог другого процесса :в одну оболочку, запустите интерактивный сеанс Python:

$ python
>> import os
>> os.getcwd()
'/home/you/hocus'

Затем перейдите в другую оболочку и переместите этот каталог:

$ cd /home/you
$ mv hocus pocus

Вернуться к исходному:

$ python
>> import os
>> os.getcwd()
'/home/you/hocus'
>> os.getcwd()
'/home/you/pocus'
0
27.01.2020, 19:44

Теги

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