Может ли «touch» работать, а «mkdir» не работать?

Может ли когда-нибудь возникнуть ситуация, в которой touch сработает, а mkdir не сработает в каталоге.

Я понимаю, что оба этих вызова включают запись в inode родительского каталога. Итак, если сенсорный ввод сработал, не означает ли это автоматически, что индексный дескриптор доступен для записи и, следовательно, mkdir не может выйти из строя.

Это был Android (я только слышал отчет, на самом деле не видел этот случай), и команды запускались из эмулятора терминала в каталоге /system (после запроса su), но это не должно иметь значения, ИМО.


РЕДАКТИРОВАТЬ: ошибка mkdir с "permission denied"


person Anirudh Ramanathan    schedule 10.12.2012    source источник
comment
Имя использовалось? touch не возражает, если файл не существует, в этом случае он просто обновляет метки времени. mkdir, с другой стороны, всегда пытается создать новый каталог и громко терпит неудачу, если это имя уже занято существующим файлом или каталогом.   -  person user4815162342    schedule 10.12.2012
comment
@user4815162342 user4815162342 Там не было других каталогов. Пробовал несколько случайных имен.   -  person Anirudh Ramanathan    schedule 10.12.2012
comment
@user4815162342 mkdir не удалось с отказом в доступе.   -  person Anirudh Ramanathan    schedule 10.12.2012


Ответы (2)


Есть несколько способов, которыми я могу придумать, как это может произойти:

1) Если вы достигли максимального количества подкаталогов в каталоге (обычно около 32000), вы не сможете mkdir, но сможете touch файл.

2) Если у вас очень мало места на диске, вы не сможете mkdir, потому что для этого требуется 4K, но вы сможете touch файл.

person dogbane    schedule 10.12.2012
comment
Спасибо за ваш ответ! Я не думаю, что что-то из этого произошло. Неужели нет другого пути? - person Anirudh Ramanathan; 10.12.2012
comment
Кроме того, почему mkdir занимает больше места? - person Anirudh Ramanathan; 10.12.2012
comment
пустой каталог занимает больше места, чем пустой файл из-за дополнительных метаданных. - person dogbane; 10.12.2012

Возможно, у вас нет прав на запись в родительский каталог? Вы по-прежнему сможете touch существовать файлы в каталоге, если они принадлежат вам или у вас есть права на запись в них. (Однако вызов touch несуществующего файла все равно не удастся, так как каталог доступен только для чтения.)

Каков результат stat в родительском каталоге и файлах touched?

person ceyko    schedule 10.12.2012
comment
Мне нужно это проверить. Но если бы у меня не было прав на запись для родителя, разве mkdir тоже не потерпел бы неудачу? - person Anirudh Ramanathan; 11.12.2012
comment
Но вы сказали, что mkdir действительно потерпел неудачу. Или, если вместо этого вы имели в виду касание, нет, вам не нужны разрешения на запись для родителя, чтобы коснуться файла внутри него. Я тоже только что проверил это на себе. - person ceyko; 11.12.2012
comment
Упс, я имел в виду touch. Я только что проверил это, и когда я удаляю разрешение на запись у родителя, я не могу прикасаться к файлу внутри него, что имеет смысл, поскольку индексный дескриптор каталога не может быть записан. Как он позволяет тебе это?! - person Anirudh Ramanathan; 11.12.2012
comment
Ах, я должен был быть более ясным. Вы можете трогать существующие файлы в каталоге, так как он должен только обновить время их доступа, но не создавать новые файлы. Я отредактирую свой ответ, чтобы отразить это. - person ceyko; 11.12.2012
comment
+1 Это имеет смысл. Но в данном случае файла с таким именем не существовало, поэтому я писал новый файл. - person Anirudh Ramanathan; 11.12.2012
comment
В этом случае, если это также не по причине, упомянутой @dogbane, на данный момент я ничего не понимаю - попробуйте получить вывод stat в каталоге и файле. В качестве альтернативы я стесняюсь упоминать об этом, но возможно ли, что что-то произошло между touch и mkdir, что изменило бы каталог/файл? По сути, удалось ли вам воспроизвести поведение? - person ceyko; 11.12.2012
comment
Я пытаюсь заставить человека, который сообщил об этом, дать мне вывод из stat. Я не смог воспроизвести его до сих пор, хотя на моем конце. - person Anirudh Ramanathan; 11.12.2012