Cygwin bash sedがファイルをロックします


12

sedコマンドでcygwin bashのファイルを変更すると、ファイルがロックされます。

再現:

  1. 開いcmdcd非ユーザーディレクトリに(fe temp
  2. echo aaa > test.txt
  3. テキストエディターで開き、行を追加し、保存してみてください=>作品
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
  5. テキストエディターで、別の行を追加し、保存しようとします=> "Access denied"

WTF ?! ロックせずにファイルをsedする、またはその後ファイルハンドルを解放するにはどうすればよいですか?

  • Windowsのセキュリティ許可はファイルに完全にねじ込まれているように見えます:

    前の許可:

    前の許可(画像!)

    許可後:

    許可後(画像!)

  • ただし、ユーザーディレクトリで動作します(Desktop

  • LockHunterでファイルをチェックしましたが、ファイルをロックするプロセスが表示されません
  • Cygwin FAQは、いくつかのプログラムへの干渉に言及しています。AntivirとCatalystをアンインストールして再起動してみました。
  • しようとUnxTools(クラッシュ)、GnuWin32は(インプレース置換をサポートしていないSED)、Interexは ... *ため息をつく(インストーラはW7 Proがサポートしていません)*

2
これは、Windowsのねじれた哲学「ユーザーを自分自身から保護する必要がある」のように聞こえます。幸運を。
シェルター

ラムダー+1。Cygwinでこの動作を確認しましたが、そのとおりです。これはかなり奇妙です。ファイルはロックされていません(つまり、ファイルは使用されていません)。ファイル許可の読み取り専用/読み取り/書き込み許可が変更されます。

W7 64ビットでGnuWin32 sedを使用しましたが、インプレース置換で問題はありませんでした。getGnuWin32プロジェクトでダウンロードしたsed 4.2.1 です。
スペンサー

回答:



5

findをgrepとcygwinの下でsedと組み合わせて使用​​して、Javaソースコードファイルでいっぱいのフォルダーを自動的に処理した後、まったく同じトラブルが発生しました。SedはファイルのNTFSファイルのアクセス権を台無しにしましたが、これは再起動後も永続的であったため、これを修正する簡単な方法を探しました。

実際に、ファイルのアクセス許可を古い値に戻す簡単な方法を見つけました。一度に非常に多くのファイル(数百)を変更したため、フォルダー全体に対して再帰的に実行できますが、これは私にとって重要です。悲しいことに、メニューエントリのドイツ語の名前しか知らないので、メニューエントリ(Windowsエクスプローラー内)が正しい英語でどのように呼び出されるかわかりません。

ドイツ語の場合:sed、「Eigenschaften」(コンテキストメニュー)、「Sicherheit」(ダイアログのタブ)、「Erweitert」(ボタン)、「Berechtigungenändern...」を使用したフォルダーの親フォルダーを右クリックします。 "(UACプロンプトのあるボタン)、今は両方のチェックボックスをオンにします(上のチェックボックスは既に設定されていますが、下のチェックボックスは設定されていませんが、設定する必要があります)。ここで、[OK]を3回クリックします。

これによって行われる実際の変更は、下のチェックボックスにより、フォルダーのコンテンツに対する現在のアクセス許可が、右クリックしたフォルダーのアクセス許可に再帰的に置き換えられるため、すべての壊れたアクセス許可が修正されることです。私にとって魅力的であり、また非常に高速です(多くのファイルで数秒しかかかりません)。

可能性のある翻訳(私が推測):

  • 「アイゲンシャフテン」->「プロパティ」
  • 「Sicherheit」->「セキュリティ」
  • 「Erweitert」->「詳細設定」
  • 「Berechtigungenändern...」->「権限の変更...」

2

独自のテストセットを実行しましたが、実際には、sedコマンドと後続のcygwinコマンドがこれを読み取り専用ファイルとして認識した後、ファイルの権限がr-xr-xに設定されます。

C:\Temp>echo aaa > test.txt
C:\Temp>ls -l
total 1
----------+ 1 bikeguy ???????? 6 Feb 21 08:51 test.txt
C:\temp>sed -i 's/aaa/bbb/' test.txt
C:\temp>cat test.txt
bbb
C:\temp>ls -l test.txt
-r-xr-x---+ 1 bikeguy mkgroup-l-d 5 Feb 21 08:52 test.txt
C:\temp>

これらの-r-xr-x ---許可は、一部のソフトウェアによる後続の書き込みを防ぎます。

C:\temp>echo xxx > test.txt
Access is denied.
C:\temp>

そのため、回避策は、ファイルに追加のchmodを追加することです

C:\temp>chmod 777 test.txt
C:\temp>echo xxx > test.txt
C:\temp>

奇妙なことは、最初の許可マスクです '---------- + 1 bikeguy ????????' また、Cygwin / Windowsを使用して実行します。次に、「これらの-r-xr-x ---許可は、一部のソフトウェアによる後続の書き込みを防止します」と記述します。問題?おかげで、このデバッグはこの問題を解決してくれました。皆さんお元気で。
シェルター

ええ、@ shellter私もその答えを調査していたときに気づきました。セキュリティが存在しないことを意味する「----------- +」行(したがって、完全なアクセス権がある)に対して、「-r-xr-x --- +」は書き込みアクセスがある場所にセキュリティが存在することを意味すると仮定行方不明。chmod 000を実行した場合、「---------- +」も取得されますが、今回は間違いなくセキュリティがあり、このファイルを読み書きする権限がありません。

gitバージョン1.9.5.msysgit.1を使用していますが、同じ問題もありますchmod 777 test.txt。コマンドを使用してこの問題を回避します。
ollydbg23
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.