Использовать screen
. Это позволит Вам отсоединять свою целую сессию и присоединять ее снова от некоторого другого терминала.
Если Вы запускаете его без screen
Ваш вывод связывается непосредственно с тем терминалом. В этом случае можно использовать инструмент как reptyr
передать Ваш процесс другому терминалу. (Вероятно, в экранную сессию.;))
Альтернативы screen
tmux
и dtach
.
Альтернатива reptyr
retty
.
Кроме того, neercs
кажется, позволяет обоим.
Причина, по которой вы получаете сообщение:
MV: не может перемещаться
. в
../ Общие /. ': Устройство или ресурс заняты
, связано с тем, как .
, а ..
работают в дополнение к MV
. Когда вы перемещаете что-то в UNIX, команда MV
пытается открыть все, что ссылается на inode элемент, который вы пытаетесь переместить. В этом случае это будет inode о том, что каталог состоит в том, что .
ссылается на ссылку.
«Символы / ссылки» .
.. ..
связаны с инодовыми и находятся в смысле особенного. Вы можете прочитать о своей истории здесь, в под названием u & l Q & A под названием: Почему новый каталог имеет жесткую ссылку подсчет 2, прежде чем что-то добавляется к нему? , если вы когда-либо смотрели на недавно созданный каталог, Вы заметите, что он всегда начинается со связанного счета 2. Причина обусловлена существованием .
и ..
.
$ mkdir adir
$ ls -l | grep adir
drwxrwxr-x. 2 saml saml 4096 Oct 5 08:02 adir
$ ls -la adir/
total 8
drwxrwxr-x. 2 saml saml 4096 Oct 5 08:02 .
drwxrwxr-x. 3 saml saml 4096 Oct 5 08:02 ..
Примечание: Ссылка для LS
. Если вы неясно, здесь в этом U & L Q & A под названием: Что означает поля в LS -AL выхода? LS
LS
так Не имена фактических каталогов, но являются «символами / ссылками», которые связаны с ними. Поэтому они менялись отсоединиться до того, чтобы быть в состоянии МВ
.
Ну, поскольку ваша команда использует .
, его нельзя не отключить команду MV
, следовательно, MSG: «Устройство или ресурс заняты».
Вы не можете переместить каталог, в котором вы находитесь в данный момент. Текущий процесс - это тот, который держит его занятым.
Вместо этого, пойдите на один уровень вверх и назовите текущую директорию, чтобы переместить ее к цели.
Linux запрещает переименование любого пути, заканчивающегося в компоненте .
или ...
, возвращая ошибку EBUSY; также произойдет сбой:
$ mkdir a a/aa
$ mv a/aa/.. b
mv: cannot move ‘a/aa/..’ to ‘b/..’: Device or resource busy
Код для этого находится в namei.c::renameat
. Последний компонент пути при передаче в различные функции должен иметь тип LAST_NORM
, а не LAST_DOT
или LAST_DOTDOT
.
FreeBSD возвращает ошибку EINVAL в каждом из этих случаев.
Мы можем только догадываться, почему существует это ограничение.
Функция переименования() не будет работать, если:
. ...
[EBUSY] Каталог, названный старым или новым, в настоящее время используется системой или другим процессом, и реализация считает это ошибкой. Можно считать
.
, который в настоящее время используется процессом. Но обратите внимание, что Linux позволяет следующее, поэтому каталога, просто используемого каким-либо процессом, недостаточно для того, чтобы переименование
не прошло:
$ mkdir /tmp/t
$ cd /tmp/t
$ mv /tmp/t /tmp/t1
$ /bin/pwd
/tmp/t1
Причина, по которой запрещается переименование .
и .
, вероятно, "приводит к меньшей путанице пользователей".
.
, как правило, является жесткой связью с записью каталога в его родителе, и является несколько особенным в том, что процесс всегда может открыть .
для доступа к текущей рабочей директории. Возможность переименования было бы контрпродуктивным. ..
обычно является жесткой ссылкой на родителя директории, и несколько особенным в том, что процесс открывает ...
получит родительский каталог (или сам каталог, если это точка монтирования). Возможность переименования будет контрпродуктивной. Linux также запрещает rmdir
путь, последним компонентом которого является ...
(ENOTEMPTY) или .
(EINVAL). FreeBSD возвращает ошибку EINVAL для каждого из них.
Стандарт POSIX для rmdir имеет следующее:
Функция rmdir() не будет работать, если:
. ...
[EINVAL] Аргумент пути содержит последний компонент, который является точкой.
Невозможно сдвинуть точку .
. Точка не совпадает с именем текущей директории. Можно подумать о .
как указатель на каталог, но не на сам каталог, поэтому
$ pwd && echo $PWD && realpath .
/home/jimmij/tmp
/home/jimmij/tmp
/home/jimmij/tmp
$ mkdir tmp1 tmp2
$ mv tmp1/. tmp2/
mv: cannot move ‘tmp1/.’ to ‘tmp2/.’: Device or resource busy
не работает, но
cd tmp1
mv ../tmp1 ../tmp2
работает нормально, поэтому на самом деле вы можете переместить текущий каталог, хотя некоторые команды можно перепутать после этой операции:
$ pwd && echo $PWD && realpath .
/home/jimmij/tmp/tmp1
/home/jimmij/tmp/tmp1
/home/jimmij/tmp/tmp2/tmp1
$ cd .
$ pwd && echo $PWD && realpath .
/home/jimmij/tmp/tmp2/tmp1
/home/jimmij/tmp/tmp2/tmp1
/home/jimmij/tmp/tmp2/tmp1
Аналогичная история с .
, т.е. с родительской директорией.
Другими словами, каждая директория должна содержать как минимум два элемента: .
и ...
. Их нельзя перемещать или удалять.