問題タブ [hardlink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
filesystems - ファイルをアトミックに別のファイルへのハードリンクに置き換える
a と b の 2 つのディレクトリ エントリがあります。以前は、a と b は異なる inode を指していました。その後、b が a と同じ inode を指すようにします。私はこれが安全であることを望んでいます - つまり、どこかで失敗した場合、b は元の i ノードまたは a i ノードを指します。特に、b が消えてしまいたくないのです。
mv は上書き時にアトミックです。
宛先が既に存在する場合、ln は機能しないように見えます。
だから私は言うことができるように見えます:
ln a tmp mv tmp b
障害が発生した場合、「tmp」ファイルが残ります。これは望ましくありませんが、災害ではありません。
これを行うより良い方法はありますか?
(私が実際にやろうとしているのは、同じコンテンツを持つファイルを、そのコンテンツを含む単一の i ノードに置き換え、すべてのディレクトリ エントリ間で共有することです)
unix - Unix のハード リンクとシンボリック リンク
ハード/シンボリックリンクが実際に作成されたファイルであるかどうかを明確にしたかっただけです??
コマンドを実行しました:
-- ls コマンドは、この 2 つのリンクをファイルとして表示します。
私の質問は、ln / ln -s
実際にファイルを作成しますか?
よろしく、 darkie15
windows - 読み取り専用ビットをクリアせずにファイルへのリンクを削除する
複数のリンクを含む一連のファイルがあります。
ファイルは TFS ソース管理によって所有されていますが、それらへの他のリンクが作成されています。読み取り専用ビットをクリアせずに追加のリンクを削除するにはどうすればよいですか。
仮定するのは安全です:
- ファイルには複数のリンクがあります
- TFSが所有する名前を削除していません
- 潜在的な競合状態はありません
- ファイルに対する ACL の完全な制御権を持っている
- 時間がかかりすぎない限り、マシンの電源が失われることはなく、プログラムが強制終了されることもありません。
仮定するのは安全ではありません:
- 読み取り専用ビットが設定されている (設定されていない場合は設定しないでください)
- エラーが発生し、最初に設定されていた場合は、読み取り専用ビットをクリアのままにしておくことができます
スーパーユーザーに移行しないでください。そこに移行した場合、これを実行できる標準ツールがないため、答えは不可能です。
ファイルを削除するためにファイルへの書き込み許可が必要な架空の *nix システムでは、fchmod() を使用した解決策があります。ただし、この動作を示すシステムは Windows システムです。
c# - C#でハードリンクを作成するにはどうすればよいですか?
C#でハードリンクを作成するにはどうすればよいですか?コードスニペットをお願いします。
winapi - GetFileInformationByHandle() を使用せずに Windows ハードリンク数を取得する
GetFileInformationByHandle() を使用せずに Windows でファイルのハードリンク数を取得する方法はありますか?
MSDN は次のように述べています。
オペレーティング システムの基盤となるネットワーク機能および接続されているサーバーの種類によっては、GetFileInformationByHandle 関数が失敗し、特定のファイルの部分的な情報または完全な情報が返される場合があります。
実際には、ネットワーク共有のリンク数を取得すると、両端の Windows バージョンに関係なく、常に 1 が返されます。これが機能する唯一のケースは、samba 共有にアクセスする場合です。Windows のバグ/制限を複製するのを忘れていたようです。また、部分的であることを通知しない「部分的な結果」は、API 呼び出しには非常に適しています。
c++ - Windows 7でハードリンクと実際のファイルをプログラムで区別するにはどうすればよいですか?
ファイルサイズと使用済みディスク容量に違いがあります(合計ファイルサイズはディスクサイズよりもさらに大きくなります)。Windows 7 / Vistaには(WinSxSコンポーネントへの)多くのハードリンクが存在するためだと思います。しかし、Windows 7でハードリンクと実際のファイルをプログラムで区別するにはどうすればよいですか?
linux - Git とハードリンク
Git はリポジトリの外部を指すシンボリック リンクを認識しないことを考えると、ハード リンクの使用に問題はありますか?
Git はそれらを壊すことができますか? 詳細な情報を教えてください。
ntfs - ファイルを指すすべてのNTFSハードリンクのパスを列挙するにはどうすればよいですか?
GetFileInformationByHandle
ファイルに関連付けられているハードリンクの数を確認するために使用できます。これらのリンクを構成するパスをどのように列挙できますか?
たとえば、C:\TEMP_1.BIN
とC:\TEMP_2.BIN
が同じコンテンツへのハードリンクであり、そこから判断したGetFileInformationByHandle
場合、他のリンクへのパスをどのように見つけることができますか?(例)C:\TEMP_1.BIN
nNumberOfLinks=2
C:\TEMP_2.BIN
GetFileInformationByHandle
:
http: //msdn.microsoft.com/en-us/library/aa363788%28v=VS.85%29.aspx
c# - ターゲットの相対パスで CreateHardLink(string lpSymlinkFileName, string lpTargetFileName, IntPtr lpSecurityAttributes) を使用する方法は?
使用する
lpTargetFileName に相対パスを使用できるようにする必要がありますか?
私にはうまくいかないようです。それはすべきですか?フルパスで動作します。
編集:
これは Windows 7 および/または 2008 です
emacs - emacs が hg 制御ファイルのハード リンクを解除しない
マスター リポジトリの 1 つのクローンを作成し、cp -rlp を使用してそのコピーを作成することによって作成した一連の Mercurial クローンがあります。私の期待は、デフォルト設定でemacsを使用しているので、それらを個別に使用できることでした。そのため、ハードリンクが壊れているはずです。しかし、そうではありません。1 つのファイルを変更すると、ハードリンクされたすべての「コピー」も変更されます。ls -i は、予想どおり、それらがすべて同じ inode であり、親ディレクトリが異なることを示しています。
「コピーによるバックアップ」はゼロです。「make-backup-files」は t です。
サンプル ファイルを作成し、ハード リンクして編集すると、必要に応じて emacs がリンクを解除します。
これを覆すmercurialモードについて何かありますか? (ステータス行には "Hg:50503" と表示されており、ある種の水銀意識が進行していることはわかっています。ただし、Ctrl-H m ではマイナー モードとして表示されません。)