フォルダーが実際にシンボリックリンクであるかどうかを確認するにはどうすればよいですか?また、壊れている場合はどうすれば修正できますか?


28

Linuxにシンボリックリンク、何らかのショートカット、またはフォルダーがあるかどうかを確認するにはどうすればよいですか?次のスクリーンショットをご覧ください。

Linuxシェルのシンボリックリンク

ご覧のように、lsコマンドはオブジェクトのリストを表示しますが、一部のオブジェクトは濃い青色で、他のオブジェクトは明るい青(シアン)で色付けされています。これらのシアン色のオブジェクトは何ですか?これらは実際のシンボリックリンクですか?

あなたが見ることができるように、私はcdHDDと呼ばれるものにできません。

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

リダイレクトする必要がある/media/hddと思いますが、hddフォルダーが見つからないことに気付きました。

これを修正する方法はありますか?

更新:ls -alコマンドの結果は次のとおりです。

Linuxシェル2のシンボリックリンク

あなたが見ることができるように、それは言いhdd -> /media/hdd、それは赤で着色されています。これは、破損している、または自動マウントされていることを意味しますか?つまり、物理hddが接続されている場合ですか?

更新:これgrep media /etc/auto*コマンドの結果です。

Linuxシェル3のシンボリックリンク

これら/etc/auto.master:/media/net/etc/auto.networkエントリは何をしますか?

ls -Fal /mediaコマンドの結果は次のとおりです。

Linuxシェル4のシンボリックリンク

これは助けになりますか?...

以下はコマンドstatfileコマンドの結果、および/ usrと/ binのリストです。

Linuxシェル5のシンボリックリンク

これは私を助けますか?...あなたは私を助けますか?...

サイドとしてではなく、あなたが知っておくべきことは、これがBusyBoxを備えたLinuxベースのSTBであり、組み込みシステムであることです。そのため、すべてのコマンドがサポートされるわけではありません。

更新: / sbinおよび/ usr / sbinにあるファイルとサポートされるコマンドを示す最後のスクリーンショット。

Linuxシェル6のシンボリックリンク

更新:新しい共有が追加されました...

古い共有を削除し、以前と同じ名前の共有を再作成し、2番目の共有を追加しました。だから今、私はそれらの2つを持っています。

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

記録は/ media / net / dream1 / movieに配置されます。

また、共有dream2については、複数のHDDとして動作させることはできないと思われるため、Mount ManagerでHDDの代替としてマウントしないことを選択しました。どこで記録しますか?両方の場所に?データレートが2倍になったら?...可能だとは思わない。

そのため、dream2共有にはmovieという名前のサブフォルダーはありません。作成時にHDDの交換として指定されたもののみが、ムービーサブフォルダーを取得します。

私は場合はcd、ルートからHDDへのそれはに行きます/media/net/dream1。私cd..(親)であれば、に戻りroot (/)ます。

ルートで ls -al与えるhdd -> media/hddls -al hdd与えるhdd -> media/hddls -al media与える/media/net/dream1

また、I場合cd/media別の存在であるhddシンボリックリンクが。気づいたことがありません。これは、共有がマウントされると自動的に作成されると思います。そして、cdこのHDDに私はそれが行く場合/media/net/dream1

hdd別のhddシンボリックリンク(/ media / hdd)を指すシンボリックリンク(/ hdd)、さらに共有フォルダー(/ media / net / dream1)を指すシンボリックリンク(/ hdd )?.....めまいがする...

バージョン3.2.3以前、またはEnigma2イメージの少なくとも3.2.0以前はこのようではありませんでした。

編集: 2番目の共有をHDDの代替として機能するように設定すると、それが記録用のアクティブな共有になります。同時に、以前はHDDの交換として機能するように設定されていた共有は、「はい」に設定されている(HDDの交換として機能)場合でも、アクティブではなくなります。

dream1が最初にHDDの交換として使用され(「yes」が交換として機能する)、その後dream2がHDDの交換として機能するように設定されている場合、それが記録用の新しい共有になります。dream1に保存されているビデオファイルは引き続き表示および表示できますが、記録することはできません。レコーディングにdream1を使用する場合は、最初にdream2を「no」に設定し(HDDの交換としての動作を停止)、dream1を「yes」にリセットする必要があります。

いいえ、同時に2つの共有に記録することはできません。それらの1つは行かなければなりません。したがって、両方ではなくdream1またはdream2のいずれかです。両方が同じトランスポンダーにある場合、複数のサービス(テレビチャンネル)を記録することは可能ですが、そうでない場合は「無料チューナーなし」メッセージが表示されます。これは、チューナーが1つしかないSTBです。


3
テキスト用のスクリーンショットを貼り付けないでください。代わりにテキストをコピーして貼り付け、preまたはcodeタグまたはバックティックを使用して、インデント/フォーマットを保持します。そして、表示しようとしているものを表示するために必要な最小限までテキストを編集します。ところで、スクリーンショットの問題の1つは、高解像度の画面(1920x1200または2566x1440など)で表示したときに、小さなフォントがさらに小さくなり、読み取り不能になることです。ピクセルが固定されているため、テキストを拡大縮小できます。
cas

@CraigSanders Sandersあなたは高いです...解像度で!;)ひどく、あなたの男の声が聞こえます!私はその側面については本当に考えていませんでした。ヒントをありがとう。次回はコードブロックを使用してみます。
サミール

どのようなls -al実際に行うことは、それが長い(-l)リスト内のすべてのファイル(-a)を示しています。はい、これはより多くの情報を提供しますが、シンボリックリンクを識別するのに役立ちますか?右側に矢印がある場合、それがシンボリックリンクであるかどうかをどのように判断していますか?他の識別子は明らかに色コードですが、色を信頼しないことを提案する人もいます。
サミール

これはもはや問題ではありません。Mount Managerプラグイン(Dreambox、Enigma 2、リリース3.2.3)を使用してWindows CIFS共有をマウントし、HDDの交換として使用することを選択しました。これを実行した後、ls -alコマンドは表示されましたhdd -> media/hdd。そして今ではcd、hdd することが可能であり、リンクが機能します。しかし、興味深いのはそのls -al mediaショーでhdd -> /media/net/mydreamあり、これは実際に私cdがhddに行くときに行く場所です。「mydream」は共有の名前です。なぜ異なる結果が得られるのですか?
サミール

私の推測では、マウントされているデバイスまたは共有を指すように/ hddシンボリックリンクが更新され、他のプログラムやスクリプトが/ hddを使用できるようにするための何らかのメカニズム(おそらくudevルール)があります(ディレクトリをテストした後)指しているのはfs)です。好奇心から、2番目のドライブまたは共有をマウントするとどうなりますか?/ hdeシンボリックリンクを作成しますか?または、ドリームボックスは1つの録音ディレクトリに制限されていますか?
cas

回答:


29

file、stat、またはlsを使用できます。

ファイル:

fileコマンドは、タイプ(シンボリックリンク、ディレクトリ、デバイス)またはコンテンツ(拡張子に関係なく、テキスト、gzip、イメージ、tar、...)に基づいてファイルを分類するために使用されます。

$ file / dev / stdout
/ dev / stdout: `/ proc / self / fd / 1 'へのシンボリックリンク
$ファイル/ proc / self / fd / 1
/ proc / self / fd / 1: `/ dev / pts / 0 'へのシンボリックリンク
$ファイル/ dev / pts / 0
/ dev / pts / 0:特殊文字(136/0)
$ファイル/ etc / passwd
/ etc / passwd:ASCIIテキスト

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1ルートルート15 Jan 27 07:55 / dev / stdout-> / proc / self / fd / 1

stat:

statコマンドは、パーミッション、サイズ、ブロック数などのファイルメタデータを出力します...

$ stat / dev / stdout
  ファイル: '/ dev / stdout'-> '/ proc / self / fd / 1'
  サイズ:15ブロック:0 IOブロック:4096シンボリックリンク
デバイス:5h / 5d iノード:1212リンク:1
アクセス:(0777 / lrwxrwxrwx)Uid:(0 / root)Gid:(0 / root)
アクセス:2014-01-27 11:22:47.971187828 -0200
変更:2014-01-27 07:55:13.996981285 -0200
変更:2014-01-27 07:55:13.996981285 -0200
 誕生:-

何をfile hdd指しますか?
サミール

stat hdd私を与えます-sh: stat: not found
サミール

statコマンドがない(または$ PATHにない)と思います。とにかく、ファイルコマンドはあなたにショットを与えることができます...
filipenf

Mac端末でのbashの場合、fileコマンドはデフォルトでシンボリックリンクに従います。シンボリックリンクかどうかを確認するには、-hコマンドを追加します。これはシンボリックリンクをたどりません。
ClintM

7

バッシュ:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi

3

特定のファイルがどのようなエンティティであるかを確認する最も簡単な方法は、fileコマンドを使用することです。ls分類子マークが何であるかを覚えたり、ユーザーごとに、またマシンごとに異なる可能性のある色付きの出力に依存したりすることなく、明確で健全な出力が得られます。例えば:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

システムをfile使用せずに自分自身を見つけた場合は、statコマンドを使用して、ファイルエントリの種類とその場所を確認できます。リンクが壊れているかどうかを確認するには、リンクstat -Lを参照解除するために実行する必要があります。リンクが壊れているとエラーになります。

質問の2番目の部分については、mediaディレクトリは多くの場合、何らかの自動マウンターによって管理されます。/media/hddエントリは、USBマスストレージデバイスのためのあなたのシステムで使用することができる、あるいはハードドライブの正しい種類(ATA、SCSI対のXenブロックデバイス対)待っている可能性があります。壊れたリンクは、プログラムがそれらを使用しようとしない限り、何も傷つけません。そして、メディアリンクは本当にあなたの便宜のためです。/hddリンクは安全に残すことも削除することもできます。


あなたは正しいです、ファイルはここのコマンドではないように見えます、それは-sh: file: not found私がやるfileと入力すると言います。
サミール

$ PATHが少し制限されているように聞こえます。代わりに直接実行してみてください/usr/bin/file
。– joruffin

他のコメントから、あなたがセットトップボックスにいることがわかります。Busybox以外には何もインストールされていない可能性があり、Busyboxはfileコマンドをエミュレートしませんが、statコマンドがコンパイルされている場合、コマンドをサポートします。 / usr / sbin / stat。
ジョルフィン

fileまたはのいずれかをサポートしているようには見えませんstat。言及したパスをチェックインしました(上記のスクリーンショットを参照)。とにかく...あなたが言っているのは、理想的なLinuxシステムでは、fileコマンドに続いてターゲットファイルまたはフォルダの検索パスがどのようなエンティティであるかを私に明らかにするということですか?
サミール

2
Busyboxでサポートされているコマンドについては、実行できます/usr/bin/busybox。コマンドがインストールされていなくても、サポートされているすべてのコマンドが表示されます。busyboxコマンドを使用するには、を実行し/usr/bin/busybox <command> <parameters>ます。statコマンドをサポートしていると言われたら、実行できます/usr/bin/busybox stat /hdd。簡単に使用できるように、呼び出すコマンドの名前でBusyboxのシンボリックリンクを作成できます。statコマンドをサポートしている場合は、で簡単に実行できますln -s /usr/bin/busybox /usr/bin/stat
ジョルフィン

1
  1. はい、シアンはシンボリックリンクです
  2. 彼らが指している場所を見るには: ls -Fal
  3. 出力 ls -Fal /media

これは適切な何らかの自動マウントポイントです。

grep media /etc/auto* ヒットする可能性があります。


自動マウントポイントとは何ですか?つまり、物理SATAディスクドライブを接続すると、この時点でマウントされますか?...これはLinux STBであり、内蔵HDDはありませんが、背面にeSATAポートがあります。これは、この目的専用です。
サミール

@Sammy Yes /mediaは、PnPデバイスの標準マウントポイントです。
Nils
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.