Добавляет ли расширение имени файла косую черту к символической ссылке?

Вы получили ошибку чтения (SG_IO: неверные/отсутствующие данные считывания), когда hdparmпопытался получить данные. Вот почему вывод бессмысленен и содержит много нулей.

Посмотрите на вывод dmesg(последние строки сразу после возникновения ошибки чтения), чтобы выяснить, что пошло не так.

Вы также можете попробовать hdparm -i /dev/sda(нижний регистр iвместо заглавной I), это отобразит информацию о модели и серийном номере ядро сохраняется во время загрузки. Возможно, это тоже пошло не так, потому что аналогичная ошибка произошла во время загрузки, но попробовать стоит.

Если ваш жесткий диск каким-либо образом поврежден и не поддерживает команды для получения информации о производителе/модели/серийном номере, вы не сможете получить ее.

1
26.03.2016, 01:32
2 ответа

POSIX требует, чтобы mv интерпретировал завершающую косую черту как запрос на разыменование символической ссылки.То есть, если foo является символической ссылкой, POSIX утверждает, что mv (как и любая другая команда) должен интерпретировать

mv foo/ bar/

как запрос на перемещение каталога, на который указывает foo , а не сам foo . Это указано в разделе разрешение имени пути :

Имя пути, которое содержит хотя бы один символ без косой черты и заканчивается одним или несколькими завершающими косыми чертами, должно быть разрешено, как если бы одиночный символ точки (. ) были добавлены к имени пути.

Другими словами, foo / эквивалентно foo /. .

POSIX не требует и даже не разрешает для расширения имени пути добавлять косую черту к символическим ссылкам. Это то, что делают некоторые оболочки при установке параметров, отличных от значений по умолчанию. Я не знаю, есть ли у bash возможность для этого. В ksh это set -o markdirs . Zsh также имеет эту опцию, но она влияет только на каталоги, а не на символические ссылки на каталоги.

Есть и другие случаи, когда завершающая косая черта естественным образом заканчивается в конце параметра. С глобусом, заканчивающимся косой чертой, глобус сопоставляет только каталоги и символические ссылки на каталоги, а расширение имени файла сохраняет завершающую косую черту. Итак, mv a * / / где-то перемещает все подкаталоги текущего каталога, имя которого начинается с a , и все цели символических ссылок в текущем каталоге, так что символическая ссылка начинается с a , а целью является каталог.Еще одно дело находится в стадии завершения; Я не буду вдаваться в подробности, потому что у bash и zsh так много вариантов завершения, но в зависимости от параметров может быть довольно легко получить foo / при завершении foo и foo - символическая ссылка на каталог.

3
27.01.2020, 23:19

Означает ли жирный шрифт, что расширение имени файла оболочкой добавляет косую черту к символической ссылке?

Нет. Это означает, что оболочка может правдоподобно сделать это, если ссылка указывает на каталог, и что они частично предложили параметр `--strip-trailing-slashes чтобы позволить пользователю предотвратить побочные эффекты этого действия. Это буквальное значение цитируемого вами текста.

Где вы видите это в руководстве по Bash или в спецификациях POSIX?

Нигде, потому что это неправда. POSIX не определяет поведение завершения имени файла.

Второй отрывок, выделенный жирным шрифтом, относится к поведению, описанному в предыдущем предложении, которое вы не выделили жирным шрифтом, а также к требованию разрешения путей POSIX , согласно которому пути, заканчивающиеся на / , должны рассматриваться как каталоги. , если возможно, и привести к ошибкам, если это невозможно. Это не относится к несвязанному предложению ранее в отрывке, которое вы выделили жирным шрифтом.

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

Действительно, этот вариант является тому примером.

1
27.01.2020, 23:19

Теги

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