Есть ли способ отслеживать, что удаляет исполняемый флаг из файла?

У меня есть набор git-крюков, которые постоянно удаляют свой исполняемый флаг. Я совершенно не понимаю, что это может сделать, но пока что единственное, что я нашел, которое может немного смягчить проблему, – это иметь chmod +x ~/.git_template/hooks/* в моем файле .bashrc (почти всегда, когда я перезагрузил компьютер). Если не ставить это в моей функции PS1 у меня заканчиваются идеи, и мне интересно, есть ли что-нибудь, что связано с моей конкретной настройкой, которая может быть причиной этого, или я могу узнать, какой процесс вызывает это.

Все мои репозитории git создаются на основе шаблона ~/.git_template который просто содержит символическую ссылку на каталог крючков, который я использую (поэтому они все используют современные версии). Хотя это может быть не совсем прямолинейно, я ничего не вижу в этом, что должно вызывать такое (откровенно) непонятное поведение.

Edit: На самом деле, я заметил, что с добавлением нового крючка ( post-checkout ), что все крючки имеют разрешение на выполнение, удаляются каждый раз, когда выполняется этот крюк (по крайней мере, до сих пор). На всякий случай это может быть актуально, я вложу полный git-крючок здесь:

 #!/usr/bin/env node var spawn = require('child_process').spawn; var providedArguments = process.argv.slice(2) var previousHead = providedArguments[0]; var newHead = providedArguments[1]; var changed = false; var git = spawn('git', ['diff', previousHead, newHead, '--stat', '--', 'package.json']); git.stdout.on('data', function(data) { changed = true; }); git.on('exit', function() { if (changed) { console.log('package.json changed. Running npm install'); spawn('npm', ['install'], { stdio: 'inherit' }); } }); 

  • Почему «find -delete» рекурсивно удаляет все файлы в каталоге
  • Лучший способ синхронизации файлов - копировать только СУЩЕСТВУЮЩИЕ файлы и только если NEWER, чем целевой
  • Найти и удалить все временные файлы в каталоге пользователя
  • Среднее количество подэлементов
  • Какие отношения связаны с маскировкой ACL и стандартным групповым разрешением на файл?
  • Значение fcntl ... F_SETLK ... (Ресурс временно недоступен) в выводе strace?
  • изменить последние 10 символов базы (не расширение) нескольких файлов
  • Запрограммировать файл для самоуничтожения в заданное время
  • One Solution collect form web for “Есть ли способ отслеживать, что удаляет исполняемый флаг из файла?”

    Я бы запускал strace -fo strace.log или эквивалент вашей системы, если не Linux (например, truss на Solaris, tusc на HP / UX, dtruss на OS / X …) в команде, которая (в конце концов) вызывает этот хук.

    Затем в strace.log вы сможете увидеть, что делает chmod() (или fchmod() или fchmodat() …), и следуйте за потоком execve() s, чтобы узнать, что вызвало разрешения файлов на быть изменен.

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