Можно ли создать непустой файл без write_close и переименовать событие?

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

Я не могу объяснить этот журнал:

/path/to/file.ext.filepart 0 IN_MODIFY /path/to/file.ext.filepart 0 IN_MODIFY /path/to/file.ext.filepart 0 IN_MODIFY /path/to/file.ext.filepart 0 IN_MODIFY /path/to/file.ext.filepart 0 IN_CLOSE_WRITE /path/to/file.ext 0 IN_CREATE /path/to/file.ext.filepart 0 IN_DELETE /path/to/file.ext 0 IN_ATTRIB 

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

И что меня смущает, так это то, что /path/to/file.ext создается только IN_CREATE и его атрибуты изменяются IN_ATTRIB (не знаю, какие из них, но я думаю, что именно там происходит вся магия).

Самое странное здесь:

  1. file.ext не является результатом перемещения file.ext.filepart – было бы другое событие переноса
  2. file.ext не является результатом копирования file.ext.filepart – там будет куча событий записи, следующих за IN_CLOSE_WRITE

Поэтому мой вопрос: что происходит здесь под капотом: как file.ext был создан с содержимым без явного переименования или копии данных?

  • Как использовать sftp для получения каталога и всего его содержимого?
  • Что такое приложение sfp для графического интерфейса по умолчанию в Debian?
  • Файл acls (setfacl) не работает, как я ожидал бы их
  • Сценарий чтения оболочки для sftp
  • kio sftp не работает, но рыбные работы
  • ssh работает, но sftp не делает
  • Скрипт работает без sudo, не работает с sudo
  • scp не может загружать / скачивать файлы, даже если ssh работает
  • One Solution collect form web for “Можно ли создать непустой файл без write_close и переименовать событие?”

     $ inotifywait -m /tmp Setting up watches. Watches established. /tmp/ CREATE file.ext.filepart /tmp/ OPEN file.ext.filepart /tmp/ MODIFY file.ext.filepart /tmp/ CLOSE_WRITE,CLOSE file.ext.filepart /tmp/ CREATE file.ext /tmp/ DELETE file.ext.filepart 

    Стенограмма от запуска

     $ echo hello >/tmp/file.ext.filepart $ ln /tmp/file.ext.filepart /tmp/file.ext $ rm /tmp/file.ext.filepart 

    Перемещение файла генерирует событие move , но создание жесткой ссылки создает одно и то же событие создания, как создание нового, пустого файла (как и mkfifo и другие способы создания файлов).

    Почему SCP или SFTP-сервер создает жесткую ссылку, а затем удаляет временный файл, а не перемещает временный файл на место? В исходном коде OpenSSH (Portable 6.0), в sftp-server.c , в функции process_rename , я вижу следующий код (переформатирован и упрощен, чтобы проиллюстрировать часть, которую я хочу показать):

     if (S_ISREG(sb.st_mode)) { /* Race-free rename of regular files */ if (link(oldpath, newpath) == -1) { if (errno == EOPNOTSUPP || errno == ENOSYS) { /* fs doesn't support links, so fall back to stat+rename. This is racy. */ if (stat(newpath, &st) == -1) { rename(oldpath, newpath) == -1) } } } else { unlink(newpath); } } 

    То есть: попытайтесь создать жесткую ссылку из временного имени файла в нужное имя файла, а затем удалите временный файл. Если создание жесткой ссылки не работает, потому что ОС или файловая система этого не поддерживают, вернитесь к другому методу: проверьте, существует ли нужный файл, а если нет, переименуйте временный файл. Поэтому нужно переименовать временный файл в его окончательное местоположение, не рискуя перезаписать файл, который, возможно, был создан во время копирования. Переименование не будет выполняться, потому что rename перезаписывает целевой файл, если он существует.

    Interesting Posts

    cmake find_package boost не работает на Debian Jessie

    Заменить отсутствующие шрифты в OpenOffice

    Не видеть файл NetworkManager.conf в папке / etc / NetworkManager /

    как добавить вывод в виде нового столбца с именами файлов

    Невозможно установить оболочку в качестве оболочки рыбы из-за ошибки при использовании chsh из-за файла блокировки

    Как работают резервные копии, которые используют LVM?

    Перенаправление всего нелокального трафика с определенного ip на внешний прокси

    Можно ли отличать идентификатор и идентификатор сеанса от демона?

    Скройте раздел в таблице разделов и снова запустите его

    Отфильтровать несогласованные блоки данных

    запустить php-скрипт в centos и время и таймаут

    Разделить tmux окна с теми же ключами, что и в Emacs?

    Что означает установка устройства в Linux?

    unshare -m, похоже, не создает пространство имен mount

    Мониторинг портов на маршрутизаторе NAT на основе GNU / Linux

    Linux и Unix - лучшая ОС в мире.