перечислите полный путь файла, не связывая его от относительного относительного пути

Существует несколько шагов в процессе начальной загрузки (я описываю традиционный ПК BIOS):

  1. BIOS читает первый сектор (512 байтов) загрузочного диска.
  2. Код в этом первом секторе считывает дальнейшие данные и код в фиксированном местоположении через интерфейс BIOS. Этот интерфейс BIOS только выставляет два жестких диска: диск 0 - то, везде, где первый сектор был считан из, и диск 1 является другим диском, который не легко предсказуем, если у Вас есть больше чем два. Загрузочный сектор содержит байт, который указывает, какой жесткий диск дальнейшие данные идут; это - диск, содержащий /boot/grub.
  3. Код, загруженный на предыдущем этапе, понимает разделы, файловые системы и другие высокоуровневые понятия. Данные включают местоположение файловой системы (т.е. строка как (hd0)/boot/grub) это определяет, где найти grub.cfg и дальнейшие модули Личинки.
  4. grub.cfg выполняется, обычно чтобы показать меню и загрузить ОС.

Загрузочный сектор сгенерирован grub-setup, обычно вызванный через grub-install. Загрузочный сектор заканчивается на любом диске, который Вы указали (в синтаксисе Linux) на grub-install или grub-setup командная строка. Можно проверить, что у Вас есть загрузочный сектор на диске путем выполнения file -s /dev/sda. Так как Вы добавляете новый диск и хотите загрузиться от него, необходимо работать grub-install на новом диске. Выполнение grub-install многократно на том же диске безопасно.

Трудная часть находится на шаге 2 выше. Если во всей возможной, помещенной Личинке (т.е. /boot/grub каталог) на загрузочном диске BIOS (или, приближаясь к этому от другого направления, говорят Вашему BIOS загружаться от диска где /boot/grub ). Это то, где device.map играет роль. Удостоверьтесь это (hd0) отображается на диске, который содержит /boot/grub, затем выполненный grub-install на том диске.

Если Ваши два диска будут в программном обеспечении RAID 1 конфигурация, то у Вас будут идентичные загрузочные секторы. Это - желательное поведение: если один диск, который является сбоями загрузочного диска BIOS, загружающимися от другого, будет просто работать (так как они содержат те же байты в тех же соответствующих местоположениях). Если Вы только зеркально отразили определенные разделы, то установка загрузочного сектора только влияет на один из дисков. Необходимо работать grub-install снова на втором диске, после изменения device.map связаться (hd0) с диском, содержащим вторую зеркальную копию /boot/grub.

Шаг 3 довольно сложен, но обычно работает из поля. На шаге 4 Личинка определяет местоположение файловых систем UUID или ищет именованные файлы, таким образом, Вы больше не должны волноваться о различных способах определять диски.

4
08.11.2010, 09:35
3 ответа

Используя find в сочетании с pwd прекрасный ответ, но он создает две подоболочки и не необходим. Существует команда, которая сделает то, что Вы хотите:

readlink -f .htaccess

Вывод

$ cd /tmp && touch foo
$ ls ./foo
./foo
$ readlink -f ./foo
/tmp/foo
5
27.01.2020, 20:48
  • 1
    find не нужно, `pwd` только одна подоболочка и может быть заменена $PWD. readlink -f также переходит по символьным ссылкам, который не всегда желаем. –  Gilles 'SO- stop being evil' 08.11.2010, 23:19
  • 2
    На FreeBSD и MacOSX, это приводит к ошибке readlink: illegal option -- f. У кого-либо есть решение для другого *BSDs? –  Stefan Lasiewski 20.05.2011, 02:12
  • 3
    На FreeBSD можно циклично выполниться по результатам ls, вызов realpath на каждом. –  gravitation 27.07.2014, 13:46

Необходимо будет использовать find и pwd.

Что-то как:

find `pwd` -name .htaccess -maxdepth 1

ИЛИ

Из этого ответа:

ls -d `pwd`/.htaccess

Вы могли использовать $PWD переменная для включения нежелательных подоболочек:

find $PWD -name .htaccess -maxdepth 1
ls -d $PWD/.htaccess

См. также:

5
27.01.2020, 20:48
  • 1
    , ничего себе, я удивлен, что это не получило закрытый offtopic на ТАК –  xenoterracide 08.11.2010, 14:38
  • 2
    в то время, где еще они могли спросить? –  Stefan 08.11.2010, 14:41
  • 3
    Это не делает его на теме там; это не имеет никакого отношения к программированию –  Michael Mrozek♦ 08.11.2010, 21:09
  • 4
    , я не сказал это, был на теме, просто что они, возможно, были более прощающими тогда –  Stefan 09.11.2010, 06:49

realpath существует с этой целью (находящий канонические полные пути):

$ realpath .htaccess
/home/user/public_html/.htaccess
0
27.01.2020, 20:48
  • 1
    realpath был obsoleted readlink -f в GNU coreutils, таким образом, у меньше и меньшего количества систем Linux есть он. (И readlink -f также существует на OpenBSD, таким образом, это не является абсолютно определенным для Linux.) –  Gilles 'SO- stop being evil' 08.11.2010, 23:20

Теги

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