実行可能ファイルフラグがファイルから削除された理由を追跡する方法はありますか?

実行可能ファイルフラグがファイルから削除された理由を追跡する方法はありますか?

私はgit Hooksセットを持っています続けて実行可能フラグを削除します。私はそれができることを全く知りませんが、これまで問題をある程度軽減する唯一の方法は私のchmod +x ~/.git_template/hooks/*ファイル.bashrcにあることです(コンピュータを再起動するとほとんどいつも消えます)。これを私の機能に入れる以外に、アイデアが不足していて、PS1私の特定の設定に関連するものがこの問題を引き起こしているのか、どのプロセスがこの問題を引き起こしているのかを知る方法があるのだろうか。

私のすべてのgitリポジトリは、私が使用しているフックディレクトリへのシンボリックリンクのみを含むテンプレートに基づいて作成されます~/.git_template(それはすべて最新バージョンを使用します)。完全に簡単ではないかもしれませんが、(正直なところ)混乱した動作を引き起こす可能性はありません。

編集:実際に新しいフック(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' });
    }
});

ベストアンサー1

Linux以外の場合(たとえば、Solaris、HP / UX、OS / X ...)、システム上またはstrace -fo strace.logそれに対応するコマンドを実行して(最終的に)フックを呼び出します。trusstuscdtruss

次に、(またはまたは...)が実行する操作をstrace.log確認し、sの手がかりに沿ってファイル権限が変更された原因を確認できます。chmod()fchmod()fchmodat()execve()

おすすめ記事