• ベストアンサー
  • 困ってます

シンボリックリンクからの被参照を調べたい

サーバー上の要らなくなったディレクトリを削除しようと思っています。 ただ、その配下の階層のどこかに、他からシンボリックリンクで参照されているファイルやフォルダがあるかもしれません。 そういう状況の有無を手軽に調べる方法はあるのでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1008
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • entree
  • ベストアンサー率55% (405/735)

どのシンボリックリンクが参照しているか分からなくても良いなら、 こんな感じでできます。 find / -type l -exec readlink {} \; | grep -cFx <検索対象のファイル> →参照されている数を表示します。 どのシンボリックリンクが参照しているか分かる必要があるなら、 こんな感じでできます。 find / -type l | while read LINK; do readlink "$LINK" | grep -Fx <検索対象のファイル> >/dev/null && echo "$LINK" done

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 頂いたアドバイスのように、一発で調べる方法を知りたいと思っていました。 ただ、いただいたアドバイスの最初のものを試しましたが、私の打ち込み方が悪かったのか、うまく行きませんでした。 ご回答いただいたお二人のものを合わせた感じで find ~/www/ -type l -ls | grep -E '\->.+/dirName/.+' とやってみたところ、消したいディレクトリ(dirName)配下のファイルやフォルダを参照先にしたシンボリックリンクがリストアップされました。 ただし、消したいディレクトリと同名のディレクトリが他の場所に存在する場合、そのディレクトリ配下のものを参照するものもリストアップされると思います。が、ここまで出来ればあとはなんとかなります。 ありがとうございました。

質問者からの補足

望んでいる方向の内容をご回答いただいたのでベストアンサーとさせていただきます。

その他の回答 (1)

  • 回答No.1
  • ki073
  • ベストアンサー率77% (491/634)

多分ファイル自体はどこからシンボリックリンクされているかは知らないと思いますので、 まずシンボリックリンクを全体から探します。 find / -type l -ls でシンボリックリンクファイルとリンク先が出力されます。 それをもとにリンクされているか探せます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました! この方法を頼りに探せる範囲内の数のシンボリックリンクでした。 今回削除したいディレクトリ内のファイルやフォルダを参照するシンボリックリンクはありませんでした。

関連するQ&A

  • シンボリックリンクについて

    OSはRedhat5です。 シンボリックリンクの作成がうまくいきません。 実体がある作業ディレクトリ上でシンボリックリンクを作成すると参照できるのですが、 作業ディレクトリ以外に作成すると作成できるのですが、参照しようとすると「シンボリックリンクの階層が多すぎます」と出てきます。 こちらの質問コーナーの「質問番号:502147」にも同様の質問がされており、 自分自身へのシンボリックシンクを張ってたりしませんか? と回答されていますがよく意味がわからない状態です。 お手数ですがご教授頂けると助かります。

  • 壊れたシンボリックリンクについて

    hoge.phpというファイルに対してindex.phpというシンボリックリンクを作り、hoge.phpを削除した場合、 file_exists()でindex.phpの有無を調べると、falseが返ってきてしまいます。 このような壊れたシンボリックファイルの有無を調べることはできないんでしょうか?

    • ベストアンサー
    • PHP
  • NFS接続+シンボリックリンクを使ったディレクトリの参照先について

    2台のLinuxサーバ(いずれもRedHat AS3.0) にて、 NFS接続+シンボリックリンクを使ったディレクトリにファイルをコピーしようとしています。 2台のLinuxサーバはそれぞれ  ・サーバA(NFSサーバ)  ・サーバB(NFSクライアント) と記載しています。 初めに、サーバBの「/home/SAVEDATA」をマウントポイントとして、 サーバAの「/home/SAVEDATA」にNFS接続するよう設定した後、 サーバBにtenletでログインし、NFS接続したサーバAのディレクトリをたどっていくと、 途中で「そのようなディレクトリは無い」と言われてしまいます。 ------------------------------------------------------------------------------------ [サーバB] $ vdir /home/SAVEDATA/ lrwxrwxrwx 1 user user 34 10月 3 12:21 /home/SAVEDATA/2005 -> /DSK10/SAVEDATA/2005 [サーバB] $ vdir /home/SAVEDATA/2005/ vdir: /home/SAVEDATA/2005/: そのようなファイルやディレクトリはありません ------------------------------------------------------------------------------------ おそらく、最後のコマンドでは 「サーバB」の「/DSK10/SAVEDATA/2005」を探してしまっているのではないかと思うのですが、 実際見て欲しいのは「サーバA」の「/DSK10/SAVEDATA/2005」です。 (サーバBには「/DSK10」は存在しません。) この環境で、正しくサーバAの「/DSK10/SAVEDATA/2005」を参照するようにすることは可能でしょうか。 お分かりになる方がいらっしゃいましたら、アドバイスをお願い致します。

  • LinuxのシンボリックリンクをMacで開きたい。

    LinuxのシンボリックリンクをMacで開きたい。 Fedora12を使用している初心者です。御教授ください。 /home/userディレクトリ内に、/var/www/htmlディレクトリのシンボリックリンクを作成し、これをSamba接続したMac OS10.5.5から参照しようとすると、ディレクトリではなくファイルとして見え、フォルダを開くことができませんでした。 そこで、smb.conf内にunix extention = noの記述を加えたところ、フォルダとして認識されるようになったのですが、中身は空の状態です。中身ファイルの所有権を777に変更してみたりもしたのですがダメでした。 対処方法をお教え下さい。

  • シンボリックリンクがある場合のスクリプト

    シェルスクリプトに関して教えてください。 ディレクトリを指定の場所にコピーしたいのですが、 コピーしたいディレクトリ配下に一部シンボリックリンクになっているファイルやディレクトリがあり、その部分のコピーがcpコマンドで出来ません。 シンボリックリンクになっているものは10個ほどと多くなく、そのリンク先もそれぞれわかっている為、 リストを書き出してそのファイル(ディレクトリ)はそれぞれ別の場所にコピーする ようなことは出来るのでしょうか? 日によってコピー元にシンボリックリンクのファイルがなくコピーしない時もあるので、 コピーするディレクトリ内にシンボリックがあれば、シンボリックリンク先にそのファイルをコピーするような処理です。 簡単に下記にイメージを書きます。 (1)home直下にcopy-motoディレクトリがあった場合、/usr/copy-sakiにコピーする cd /home if [ -d copy-moto ] ; then cp -pr copy-moto/* /usr/copy-saki echo "copy-sakiにコピーしました" fi ここはこんな感じでスクリプトを書きました。 更に(2)の事を追加したいです。 (2)copy-moto配下にhoge1やhoge2,hoge3と多くのディレクトリやファイルがある。  その中でhoge1やhoge2の下にSymbolicXXやSymbolicYYがあった場合、そのファイルやディレクトリはシンボリックリンク先にコピーしたい。  リストで以下のようにシンボリックになっているものは把握している。  そのリスト内にあるものは/usr/copy-sakiではなくhome/Symbolic_link~にコピーしたい的なことをしたいと思っています。    /home/copy-moto/hoge1/SymbolicXX→home/Symbolic_link/SymbolicXX  /home/copy-moto/hoge1/SymbolicYY→home/Symbolic_link/SymbolicYY  /home/copy-moto/hoge2/SymbolicZZ→home/Symbolic_link_AA/SymbolicZZ  /home/copy-moto/hoge2/SymbolicQQ→home/Symbolic_link_AA/SymbolicQQ   この例外処理?のような記載などどのようにスクリプトをかけばいいかわからず… わかる方いればご教授ください。

  • シンボリックリンク作成のバッチファイル

    親フォルダーに、aフォルダーとbフォルダーが入っています。 aフォルダー配下には、xフォルダーがあり、その中には複数のテキストファイルが入っています。 parent\a\x\test.txt parent\b\ 以下の様なバッチファイルを「送る」に登録しました。 @echo off rem 選択ディレクトリ配下のxディレクトリに移動 cd /D %1\x\ rem カレントディレクトリにあるすべてのファイルを、bディレクトリにコピー for %%i in (*.*) do ( copy "%%i" "..\..\b\" ) これにより、aフォルダーを選択してバッチファイルを実行すると、xフォルダー配下のテキストファイルがbフォルダーの中にコピーされることは確認しました。 ここで、コピーではなく、シンボリックリンク(mklink)を作成したいのですが、引数をどのように設定すればよいでしょうか。いろいろ試しましたがうまくいきませんでした。 ご教示よろしくお願いします。

  • Windows8.1でのシンボリックリンク

    Windows8.1のシンボリックリンクのやり方を教えて下さい。 ↓乱文につき読み飛ばし可↓ 私は自営業をしており、お店の状況をエクセルに記録しており、Dropboxで自宅のPCにもデータが残るようにしています。 ただ私が休むときはアルバイトの子にお店を任せています。 信頼して雇った子ですが、やはりPCの中身をすべて見られるのは困るので、別のアカウント(Microsoftファミリーセーフティアカウント)を用意し、エクセルファイルがあるフォルダ以外はアクセスできないようにしました(このフォルダはDropboxの範囲外) しかし、それでは同期できなくなってしまいます。 そこで通常のDropboxのフォルダ以外にも同期できる方法はないかと調べた結果、シンボリックリンクに行き着きました。 この方法以外でもうまい方法があれば教えて下さい

  • ディスクの使用サイズ表示の違い

    UNIXコマンドであるディレクトリ配下のディスクの使用サイズを表示させようと思っています。 ・du -k ・find -lsでファイルサイズを足す(ファイル、ディレクトリ、シンボリックリンクを含む) ・ls -Rでファイルサイズを足す(ファイル、ディレクトリ、シンボリックリンクを含む) 上記3つで行いましたが、全て違う結果になりました。 なぜこの様な事になるのでしょうか? よろしくお願いいたします。

  • LinuxからNASを使用したときのシンボリックリンク

    Linuxからマウントして使いたいと、ある業者からLinux対応をうたうNASを購入しました。 ところが、NAS内部にシンボリックリンクは使えない、ファイルはロック出来ない(Cのlockf()という関数)という問題が発生しました。 メッセージは、ディスクIOエラーですが、NASのOS(NFS)がサポートしていないというのが原因なのは突き止めました。 セキュリティーの問題で他の上位ディレクトリにリンクが作れないのは分かりますが、同じディレクトリにさえ作れません。tarまとめたリンクを展開してもエラーとなります。 またWindowsのショートカットなら作れます。 業者に質問しても、他のNASも全部同じ仕様だと言われました。 他のNASもそうなのでしょうか?NASの標準的な仕様から外れているのでしょうか? NASにシンボリックリンクを置く事は期待してはいけないのでしょうか?

  • IIS5の仮想ディレクトリが「ディレクトリの参照をチェック」しても表示されない

    Windows 2000 Serverに付属しているIISを利用し、WebサーバとFTPサーバを構築しようと思っています。 その際、Webサーバの方で、あるフォルダの下に仮想ディレクトリを作成しました。 例えば、サーバのローカルルートパスが C:\issfolder\ だとして、その下に「test」というフォルダを作成し、 C:\issfolder\test というフォルダがあるとします。 http://サーバアドレス/test/ で表示した場合、ISSの設定より各フォルダのプロパティにて"ディレクトリの参照"という項目にチェックを入れてあれば、「test」というフォルダの下に存在する通常のフォルダやファイルは表示されると思います。しかし、「test」のフォルダの下に仮想ディレクトリを作成した場合、そのディレクトリの参照の一覧に仮想ディレクトリのフォルダが表示されません。 どうやらその仮想ディレクトリの名前にあたるパスを直打ちすると表示がされるようなのですが、「test」フォルダ下には相変わらず表示される気配はないようです。 同様のことがIISのFTPサーバでの仮想ディレクトリにも言えるようでどうにかして仮想ディレクトリも上位ディレクトリの"ディレクトリの参照"で表示させることが出来ないか悩んでいます。 何か方法はございますでしょうか? よろしくお願いします。