Вам необходимо загрузиться с Linux Live USB (желательно mint или ubuntu), убедиться, что раздел жесткого диска linux смонтирован для чтения / записи, и использовать linux mv
, чтобы переместить каталог в нужное место.
Я бы подошел следующим образом:
Введите команду mount
, которая покажет вам список дисков и
каталоги, в которые они смонтированы в системе live linux, например:
...
/ dev / sda3 on / media / aaa (ro)
/ dev / sda4 on / mnt / a3d2fe6 (ro)
...
Узнайте, какой каталог (путь после «on» в приведенных выше выходных данных) является вашим разделом Linux Mint. Вам нужно смотреть только на те строки, которые начинаются с «/ dev /». Для каждого каталога выполните
ls / home
, заменив
именем каталога. Не проверяйте «/», это корневой каталог действующей системы USB.
Когда вы узнаете, какой смонтированный каталог содержит ваш домашний каталог, введите эти команды, заменив "/ yourdirectory" на каталог, который вы указали в выходных данных команды mount
:
sudo mount - o remount, rw / yourdirectory
cd / yourdirectory
sudo mv home / etc и т. д.
Это связано с закрытием файлового дескриптора.
В вашем первом примере echo
записывает в свой стандартный поток вывода, который оболочка открывает, чтобы соединить его с f
, и когда он завершается, его дескриптор закрывается (оболочкой ). На принимающей стороне оболочка, которая считывает ввод из своего стандартного потока ввода (, подключенного к f
), считывает ls
, запускает ls
, а затем завершает работу из-за конца -условия файла -на его стандартный ввод.
Состояние конца -из -файла возникает из-за того, что все средства записи в именованный канал (и только один в этом примере )закрыли свой конец канала.
Во втором примере exec 3>f
открывает файловый дескриптор 3 для записи в f
, затем echo
записывает в него ls
. Теперь файловый дескриптор открыт в оболочке, а не в команде echo
. Дескриптор остается открытым, пока вы не выполните exec 3>&-
. На принимающей стороне оболочка, которая считывает ввод из своего стандартного потока ввода (, подключенного к f
), считывает ls
, запускает ls
, а затем ожидает ввода дополнительных данных (, поскольку поток все еще открыт ). ].
Поток остается открытым, так как все пишущие в него (оболочка через exec 3>f
иecho
)не закрыли свой конец канала(exec 3>f
по-прежнему действует ).
Я написал о echo
выше, как если бы это была внешняя команда. Скорее всего он встроен в оболочку. Тем не менее эффект тот же.
Прочитав два ответа от @Kusalananda и @ikkachu, кажется, я понял. В окне -1 оболочка ожидает чего-то, чтобы одновременно открыть конец записи канала и затем закрыть его. Как только конец записи открыт, оболочка в окне -1 печатает приглашение. Как только конец записи закрывается, оболочка получает EOF и умирает.
На стороне окна -2 у нас есть две ситуации, описанные в моем вопросе :в первой ситуации с echo ls > f
, нет файлового дескриптора 3, поэтому у нас есть echo
нерест, и его stdin
и stdout
выглядят так:
0 --> tty
1 --> f
Затем echo
завершается, и оболочка закрывает оба дескриптора. Поскольку файловый дескриптор 1 закрыт и ссылается на f
, конец записи f
закрывается, и это приводит к EOF для окна -1.
Во второй ситуации мы запускаем exec 3>f
в нашей оболочке, заставляя оболочку принять эту среду:
bash:
0 --> tty
1 --> tty
2 --> tty
3 --> f
Теперь мы запускаем echo ls >& 3
, и оболочка выделяет файловые дескрипторы для echo
следующим образом:
echo:
0 --> tty
1 --> f # because 3 points to f
2 --> tty
Затем оболочка закрывает три приведенных выше дескриптора, включая f
, но f
по-прежнему имеет ссылку на него из самой оболочки. Это важное отличие. Закрытие дескриптора 3 с помощью exec 3>&-
закроет последнюю открытую ссылку и вызовет EOF для окна -1, как отметил @Kusalananda.