Linuxシステム上のすべてのファイルを繰り返し実行し、それに関するいくつかのメタデータを生成するスクリプトを実行しています。壊れたシンボリックリンクが見つかるとエラーが発生します。
私は*nixを初めて使用していますが、リンクファイルの主なアイデアと壊れたリンクの存在方法を理解しています。私が知る限り、彼らは通りのゴミのようです。アンインストールしようとするプログラムは、自分が存在し、属しているという事実やアップグレード中に何かが残っているという事実をパッケージマネージャに知らせるほど賢くはありません。最初は実行中のスクリプトをスキップするために調整を始め、「まあ、私たちがここにいる間はいつでも削除できます…」と思いました。
私は走っているUbuntu14.04(信頼できる乗り物)。これを行わない理由はありません。しかし、開発システムでこれを実行する前に、これが本当に悪い考えである可能性がある理由はありますか?私が知らない壊れたシンボリックリンクの目的は何ですか?
答え1
シンボリックリンクはさまざまな理由で破損する可能性があります。
- 存在しなくなった宛先へのリンクが作成されました。
解決策:壊れたシンボリックリンクを削除します。 - 移動した宛先へのリンクが作成されます。または、ターゲットに基づいて移動する相対リンクです。 (相対的なシンボリックリンクは悪い考えではありません。逆です。絶対シンボリックリンクはターゲットが移動するため、古い可能性が高くなります。)
回避策:意図したターゲットを見つけてリンクを修正します。 - リンクの作成中にエラーが発生しました。
解決策:意図したターゲットを見つけてリンクを修正してください。 - リンクは、リムーバブルディスク、ネットワークファイルシステム、または現在マウントされていない他の記憶領域のファイルを指します。回避策:なし。リンクが途切れることはありません。このリンクは、ストレージがインストールされたときに機能します。
- リンクは、意図的にいくつかの時間にのみ存在するファイルを指します。たとえば、ファイルはプロセスのキャッシュされた出力であり、情報が使用されなくなったときに削除されますが、明示的に要求された場合にのみ再生成されます。または、リンクが受信トレイを指し、受信トレイは空の場合は削除されます。または、リンクは、その周辺機器が接続されている場合にのみ存在するデバイスファイルを指します。回避策:なし。リンクが途切れることはありません。
- リンクは他のストレージ層でのみ有効です。たとえば、chroot Jailでのみ有効、またはNFSサーバーからエクスポートされた場合にのみ有効で、サーバーまたは一部のクライアントでのみ有効です。
回避策:なし、リンクはどこでも壊れません。 - 宛先に到達するためにディレクトリを通過する権限がないため、リンクは失われましたが、適切な権限を持つユーザーの場合は切断されません。
解決策:なし、誰もがリンクを切ったわけではありません。 - このリンクは、次の情報を保存するために使用されます。vinc17が引用したFirefoxロックの例。これを行う1つの理由は、シンボリックリンクをアトミックに入力する方が簡単です。他の方法はありません。一方、ファイルをアトミックに埋めるのはより複雑です。一時的な名前でファイルの内容を作成し、その場所に移動して処理する必要があります。以下のクラッシュレガシー古い一時ファイル。もう一つの理由は、シンボリックリンクが一部のファイルシステムのinode内に直接保存されることが多いため、ファイルの内容を読むよりもシンボリックリンクを読む方が速いためです。
回避策:なし。この場合、リンクを削除すると有害になる可能性があります。
シンボリックリンクが最初のカテゴリに属すると確信できれば、当然削除することができます。そうでなければ、棄権してください。
ディレクトリを再帰的に移動し、ファイルの内容に興味を持っているプログラムは通常、壊れたシンボリックリンクを無視する必要があります。
答え2
ぶら下がっているすべてのシンボリックリンクを盲目的に削除しないでください。一部の情報を伝達するために存在することも、シンボリックリンクの生成が原子的に行われるため、通常のファイルよりも安全である可能性があります。
たとえば、Firefoxは、値が「IP_address:+ PID」の形式のシンボリックリンクであるロックファイル「lock」を生成します。
答え3
これら二つフォードそしてガトリングWebサーバーは、Unixファイルシステムを構成データベースとして使用します(たとえば、Windowsレジストリを使用するMicrosoft IISや解析が困難な構成ファイルを使用するApacheとは異なり)。
たとえば、仮想ホストは単なるディレクトリにすぎず、新しい仮想ホストを作成することは次のとおりです。
mkdir www.example.com:80
構成にはどのファイルが必要ですか?
chmod o+r file_that_should_be_served
chmod o-r secret_passwords
CGIで実行するように構成されたファイルとは何ですか?提供されるファイルは何ですか?
chmod a-x plain_file.html
chmod a+x cgi_script.html
最後に(この質問に関連して):リダイレクトを設定しますか?
ln -s 'http://www.google.com/?q=awesome+query+site:www.example.com' search.html
search.html
どこにも行きませんが、サイトの実行に不可欠なシンボリックリンクが作成されます。
答え4
廃止されたシンボリックリンクを削除する際の重要な欠点の1つは、そのリンクが一時的にポイントした場所への参照を失うことです。これは非常に便利です!
ファイルが存在しないと仮定し、send_to
「」というファイルへのシンボリックリンクがあるとします。/Users/myname/tmp
/Users/myname/tmp
シンボリックリンクを介してファイルがどこにあるかを知っています。故意にになる。たとえば、この場合はそれが一時ディレクトリであることがわかり、それを「修正」する必要がある場合は一時ディレクトリをターゲットにすることを検討する必要があります。
my_config
同様に、リンクを指すリンクは、まだ有用な情報である確認ファイルに名前が変更されている/etc/conf_file
ため、「間違っています」。ディレクトリconf_file
に移動/etc
して操作を実行しls
、呼び出されたファイルが見つからないconf_file
場合は、confirmation_file
リンクを変更するのに十分な情報がある可能性があります。