Вы можете переименовать файл (каталог или что-то еще), используя только знания о inode, используя find
, но если (a) файловая система, содержащая его, не смонтирована, или если (b) есть другая файловая система, смонтированная поверх непустого каталога, который содержит файл, который вас интересует, файл просто не доступен вашей системе. В случае (a) вам необходимо смонтировать файловую систему, прежде чем вы сможете что-либо сделать с содержимым, включая переименование, а в случае (b) вам необходимо размонтировать файловую систему, которая смонтирована «поверх» каталога, содержащего файл, который вы хотите переименовать. Похоже, вы спрашиваете о случае (б).
Если я вас правильно понимаю, вы пытаетесь сделать ваш старый /home
каталог (который находится в вашем корневом разделе) доступным, но при этом используете новый раздел, смонтированный в /home
. Если это то, что вы хотите, сделайте следующее:
Закройте все файлы и выйдите из системы. Затем войдите в систему root
(используйте для этого виртуальный терминал - нажмите Ctrl-Alt-F2). Выполните следующее:
umount /home
mv /home /home-old
mkdir /home
mount -a
ls /home
ls /home-old
Если все хорошо, выйдите из системы и войдите в систему как вы сами, и все должно быть в порядке.
Кстати, команда для переименования файла, используя только знание его inode (при условии, что файл находится в текущем каталоге):
find . -maxdepth 1 -inum 123456789 -exec mv {} mynewname \;
Где 123456789
номер инода, конечно. (Обратите внимание, что find
определяет имя файла и его путь и передает эту информацию mv
; нет никакого способа переименовать файл без какого-либо участия существующего имени файла, но если это просто, что вы не знаете имя файла, это довольно просто.)
mv
иноды не будут приниматься.В типичной файловой системе Unix вообще невозможно структурно переместить файл на основе inode. Причина в том, что переименование файла означает удаление его записи каталога из каталога, в котором он находится, и создание каталога в другом месте. Но индекс не содержит указатель на запись каталога, он содержит только (указатели) метаданные файла (метки времени, разрешения и т. Д.) И содержимое файла.
Для файла с несколькими жесткими ссылками, какую из них вы бы переименовали? В иноде недостаточно информации.
Для каталога в некоторых файловых системах было бы возможно действовать только с использованием одного inode:
..
. Это указывает на родительский каталог.Это делает несколько предположений, однако:
..
в первую очередь? Это зависит от типа файловой системы. Некоторые файловые системы имеют явную запись для..
; для других эти записи подделываются драйвером файловой системы. Если..
не существует, этот подход в принципе невозможен...
ссылки, есть еще один камень преткновения, который может быть неочевиден: шаг 1 может быть возможен внутри ядра, но для него нет интерфейса. Многие варианты Unix не имеют интерфейса, позволяющего открывать файл через его inode, потому что это будет обходить разрешения. Например, файл с разрешениямиrwxr-xr-x
(т. Е.rwx------
Доступный для чтения), который находится в каталоге с разрешениями (т. Е. Доступен только его владельцу), недоступен никому, кроме владельца каталога. Это не может быть определено только из одного inode - файл может быть доступен через другую жесткую ссылку!В результате этого нет ничего невозможного, включая переименование, с файлом, которому присвоен только его индекс. Вам нужно иметь путь к файлу.
Единственный практический способ воздействовать на файл с учетом его inode - сначала найти путь, например, с помощью
find -inum
, а затем использовать путь для действия. Это не поможет в вашей ситуации, когда файл скрывается точкой монтирования. Нет портативного способа доступа к файлам, скрытым от точки монтирования; в Linux, как вы обнаружили, вы можете использовать bind mount.источник
Спасибо. Это было очень полезно. Это позволяет мне менять громоздкие имена для расшифровки видеофайлов, которые я скачал с YouTube, на более краткие, но все же значимые имена файлов. Например:
... дает мне файлы:
Я считаю, что это недостаток очень полезного в других отношениях.
Я могу изменить второе имя файла следующим образом:
... это дает мне список файлов с номером инода в самом начале:
... тогда я бегу:
Мой скрипт оболочки mvi bash:
источник
mvi
сценарий использует переменные без кавычек, что означает, что он потерпит неудачу, если какой-либо из аргументов, переданных сценарию, содержит пробельные символы (или, возможно, также, когда они содержат символы-заглушки).