LINUX.ORG.RU
Ответ на: комментарий от cvs-255

А разве не в этом всегда заключался один из столбов *nix

Ну-ну, расскажите, пожалуйста, еще что-нибудь про столбы *nix.

shylent
()
Ответ на: комментарий от segfault

Вообще-то, я сначала хотел написать что-то вроде «+1, а также mv, cp, cat и /dev/null». Но перед этим решил почитать сам, и вот что там написано:

mv: ... It first uses some of the same code that's used by `cp -a' to copy the requested directories and files, then (assuming the copy succeeded) it removes the originals. <...> If a destination file exists but is normally unwritable, standard input is a terminal, and the `-f' or `--force' option is not given, `mv' prompts the user for whether to replace the file.

То есть он сначала выполняет некий код вроде cp -a (/dev/null на запись-то открыт должен быть, у меня rw-rw-rw- права). Читаем дальше:

cp: `-f' `--force' When copying _without_ this option and an existing destination file cannot be opened for writing, the copy fails. However, with `--force'), when a destination file cannot be opened, `cp' then removes it and tries to open it again.

`--remove-destination' Remove each existing destination file before attempting to open it (contrast with `-f' above).

Т. е. судя по ману, команда `mv file /dev/null` должна бы переписать всё содержимое в файл /dev/null, открыв его на запись, и удалить исходный файл. Где и что я пропустил?

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

>То есть он сначала выполняет некий код вроде cp -a (/dev/null на запись-то открыт должен быть, у меня rw-rw-rw- права). Читаем дальше:

cp -a не перезаписывает существующие файлы, а создает новые. проверяется это элементарно

echo 1 > 1
echo 2 > 2
ln 2 3
cp -a 1 2
cat 2
cat 3

maloi ★★★★★
()
Ответ на: комментарий от maloi

Да, но в мануале это либо не отражено, либо написано не совсем так. Вот про флаг '-a':

Preserve as much as possible of the structure and attributes of the original files in the copy.

Возможно, это и должно означать, что файлы с другими атрибутами будут удалены, но прямым текстом этого не сказано. Зато про другие флаги (--force и --remove-destination) четко сказано, что без них (это вроде бы и есть наш случай) файл, который нельзя открыть на запись будет удален либо подтверждение будет запрошено у пользователя.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

Да, но в мануале это либо не отражено, либо написано не совсем так. Вот про флаг '-a':

Preserve as much as possible of the structure and attributes of the original files in the copy.

ну и как это связано с тем, удалять сначала destination или открывать на запись?

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

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

Зато про другие флаги (--force и --remove-destination) четко сказано, что без них (это вроде бы и есть наш случай) файл, который нельзя открыть на запись будет удален либо подтверждение будет запрошено у пользователя.

без этих флагов (и без -i) делается проверка что файл можно открыть на запись, если нельзя - cp выходит с ошибкой, с этими флагами либо результат проверки игнорируется(--force) либо проверки вообще нет (--remove-destination). Нигде не сказано, что файл в результате открывается на запись.

maloi ★★★★★
()
Ответ на: комментарий от maloi

ага, а зачем же вообще делается проверка, что файл можно открыть на запись? Просто так, попроверять, или всё-таки туда что-то собирались записывать?

Я не говорю что у вас что-то неправильно, я говорю что поведение, описанное в мануале, не совпадает с тем, как программа ведет себя на самом деле. Впрочем, описание в мануале недостаточно подробно, но я привел строки, согласно которым, как мне кажется, можно было бы ожидать вполне конкретных действий от mv. Я не прав? Что именно и где в манах я понял неправильно?

ну и как это связано с тем, удалять сначала destination или открывать на запись?

яхз, это единственное что написано про поведение cp с флагом -a. Возможно, что никак не связано, хотя эту фразу можно расценить как «если файл не такой, удалим его и создадим такой, какой нам нужен»

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

ага, а зачем же вообще делается проверка, что файл можно открыть на запись? Просто так, попроверять, или всё-таки туда что-то собирались записывать?

чтобы убедится, что пользователь не жираф, и не пытается перезаписать файл, защищенный от записи, ведь если права на файл выставлены такие, что в него нельзя писать - наверно это сделали не просто так.

maloi ★★★★★
()
Ответ на: комментарий от maloi

Я, конечно, не шибко силен в этих вещах, но что мешает в этом случае просто посмотреть права доступа на файл? Имхо это было бы более уместно в таком случае.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

но что мешает в этом случае просто посмотреть права доступа на файл?

а ты думаешь что происходит?

maloi ★★★★★
()
Ответ на: комментарий от maloi

Для этого должны быть другие средства. Смотреть права доступа, пытаясь открыть файл на запись - это костыль. man 3 stat.

Kiborg ★★★
()

Интересный вопрос. Чем удалять, лучше туда положить. Вдруг кому в альтернативной вселенной твои файлы пригодятся?

fero ★★★★
()
Ответ на: комментарий от maloi

Не надоело еще к словам цепляться? По сути есть что сказать? )

Kiborg ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.