web-dev-qa-db-ja.com

ディレクトリのシンボリックリンクをたどっているときに、長い形式(-l)を使用してlsする方法は?

ls -lは出力のフォーマットだけでなく、ディレクトリのシンボリックリンクの処理方法も変更することに気付きました。

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

/rmnシンボリックリンクに関する情報ではなく、/rmnの内容の詳細なリストを入手したいと思います。

私が考えることができる1つの回避策は、次のようなことを行うシェル関数を作成することです。

cd /rmn
ls -l
cd -

しかし、特にcd -の次の使用を台無しにするので、それはあまりにもハックしすぎるようです。もっと良い方法はありますか?

(私はCentOS 2.6.9を使用しています)

30
RomanSt

Lsにオプションがあるかどうかを確認します。

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

これらが役に立たない場合は、cd -をめちゃくちゃにすることなくマクロを機能させることができます。

(cd /rmn ; ls -l)

これはサブシェルで実行されます。

30
pjc50

この単純な問題についての考え方がなぜそれほど複雑である必要があるのか​​、私にはよくわかりません。しかし、おそらく間違った方法で質問をしただけでしょう。とにかく、私が同様の機能を必要とするとき、私は使用しました:

_ls -lL
_

私の場合はそれでうまくいった。 ls manページから:

_-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself
_

たとえば、USBスティックのデータにアクセスするための_/media/stick_ショートカットを作成しました。 _ls -l /media/stick_は実際のリンクを表示し、_ls -lL /media/stick_はUSBスティックのcontentsを表示します。

_-H_と_-L_の内部動作の違いについての詳細な調査の結果、この問題についての優れた記事に Shallow Thoughts ブログ(いくつかのきちんとした機能も含む)にようやく出会いましたあなたの喜びのためのシェルスクリプトのトリック!)

これは、2つのオプション間の微妙な違いを次のように指摘します(元のマニュアルよりも優れています!)。

  • _-H_-コマンドラインで明示的に言及されたリンクのみを逆参照します
  • _-L_-コマンドラインでリンクが言及されていない場合でもリンクを逆参照します

(これら2つをsimple日常タスクで使用する場合、一般的に出力に違いはないはずです。)

さらに:長い形式(_--option_)を覚えておきたい場合、_--dereference_を覚えるのは、_--dereference-command-line-symlink-to-dir_。

15
syntaxerror
ls -l /rmn/

やるか

ls -l /rmn/.

ただし、-lの有無にかかわらず、動作に違いはありません。 lsのエイリアスはありますか?

5