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

У меня есть набор 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' }); } }); 

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, чтобы узнать, что вызвало разрешения файлов на быть изменен.

  • Как сократить текущий путь к каталогу, указанный на терминале?
  • Как скопировать структуру каталогов с одного сервера на другой без пользователя root?
  • потерянный в переводе: "изменено на
  • Где мои данные 7za записываются в
  • Завершение команды не работает с именами, содержащими `:`
  • Предотвратите случайное удаление файла
  • NFSv4, какой «домен» помещать в idmapd.conf?
  • Магический файл, перенаправляющий на стандартный вывод
  • Выполнение команды по нескольким файлам в нескольких каталогах
  • Сортировка файла с целым числом в круглых скобках без пробела
  • zcat файл по строкам?
  • Linux и Unix - лучшая ОС в мире.