Valgrind /usr/lib ファイルは通常の Linux ファイルではありません。

Valgrind /usr/lib ファイルは通常の Linux ファイルではありません。

今日(Linuxを含むデバイス上で)経験している問題は、いくつかのファイル(特にValgrind/usr/libファイル)が非常に奇妙に動作してコピーできないことですscp(エラーはnot a regular file:)。

だから:

$ ls -al /usr/lib/*valgrind*
drwxr-xr-x    2 root     root          4096 Sep 30 00:01 .
drwxr-xr-x   24 root     root         12288 Sep 30 00:00 ..
-rwxr-xr-x    1 root     root       1816444 Jun  6  2014 cachegrind-x86-linux
-rwxr-xr-x    1 root     root       1910732 Jun  6  2014 callgrind-x86-linux
-rw-r--r--    1 root     root         28429 Jun  6  2014 default.supp
-rwxr-xr-x    1 root     root       1884080 Jun  6  2014 drd-x86-linux
-rwxr-xr-x    1 root     root       1770688 Jun  6  2014 exp-bbv-x86-linux
-rwxr-xr-x    1 root     root       1852668 Jun  6  2014 exp-ptrcheck-x86-linux
-rwxr-xr-x    1 root     root       1910200 Jun  6  2014 helgrind-x86-linux
-rwxr-xr-x    1 root     root       1778880 Jun  6  2014 lackey-x86-linux
-rwxr-xr-x    1 root     root       1792524 Jun  6  2014 massif-x86-linux
-rwxr-xr-x    1 root     root       1942904 Jun  6  2014 memcheck-x86-linux
-rwxr-xr-x    1 root     root       1766560 Jun  6  2014 none-x86-linux
-rwxr-xr-x    1 root     root          2620 Jun  6  2014 vgpreload_core-x86-linux.so
-rwxr-xr-x    1 root     root         65296 Jun  6  2014 vgpreload_drd-x86-linux.so
-rwxr-xr-x    1 root     root         17904 Jun  6  2014 vgpreload_exp-ptrcheck-x86-linux.so
-rwxr-xr-x    1 root     root         37908 Jun  6  2014 vgpreload_helgrind-x86-linux.so
-rwxr-xr-x    1 root     root         15128 Jun  6  2014 vgpreload_massif-x86-linux.so
-rwxr-xr-x    1 root     root         26652 Jun  6  2014 vgpreload_memcheck-x86-linux.so

まず、名前に "valgrind"文字列がないことに注意してください。

その後、通常のファイル(パイプやデバイスではありません)として表示されます。しかし、非常に奇妙なことに、簡単な方法では見つけることができませんls

$ ls -al /usr/lib/memcheck-x86-linux
ls: /usr/lib/memcheck-x86-linux: No such file or directory

一般リストにも表示されません。

$ ls -al /usr/bin
(snipped)

Linuxでこれらの動作が発生する原因は何ですか?

また、デバイスには「ファイル」のようなユーティリティはありませんが、これが私に多くの役に立つかどうか疑問です。

出力df

$ df
Filesystem           1024-blocks    Used Available Use% Mounted on
/dev/root               980308    175548    754964  19% /
tmpfs                    10240       112     10128   1% /dev
tmpfs                   246728         0    246728   0% /tmp
tmpfs                     2048        12      2036   1% /var/log
tmpfs                   246728       128    246600   0% /dev/shm
tmpfs                   246728         0    246728   0% /run
tmpfs                   246728        20    246708   0% /var/run

だから/デバイスです。

そして:

$ whoami
root

だから私は根です。

パズルを完成させるには:

$ ls -al /dev/root
ls: /dev/root: No such file or directory

したがって、マッピングされたデバイスは実際には存在しません。

答え1

この出力は次のようになります。

$ ls -al /usr/lib/*valgrind*
drwxr-xr-x    2 root     root          4096 Sep 30 00:01 .
drwxr-xr-x   24 root     root         12288 Sep 30 00:00 ..
-rwxr-xr-x    1 root     root       1816444 Jun  6  2014 cachegrind-x86-linux

これは、名前付きディレクトリを一覧表示していることを意味します/usr/lib/*valgrind*(おそらくただ/usr/lib/valgrind)。最大の手がかりは、および.に表示されるディレクトリエントリです..

これはls -al /usr/lib/memcheck-x86-linux、ファイルが存在しないと言う理由を説明します。ファイルが呼び出されるためです/usr/lib/valgrind/memcheck-x86-linux

ディレクトリを一覧表示し、1つのエントリとして表示したくない場合は、次に-dフラグを追加しますls

$ ls -ald /usr/lib/*valgrind*
drwxr-xr-x    2 root     root          4096 Sep 30 00:01 /usr/lib/valgrind

scpコマンドラインや出力を提供していないため、「一般ファイルではない」と表示される理由はscp推測する必要がありますが、私の考えでは、これはファイルではscpなくパラメータに対して生成する出力のようです。単にそれが存在しないので、ある種の。

答え2

マイケル・ホーマー(Michael Homer)が書いた文だが起こった、ここにあるなぜそのようなことが起こります(彼の答えに対するあなたの意見を考慮すると、あなたはすでに知っていると仮定しますが、この問題を抱えている他の人はそうではないかもしれません)。

あなたが下した命令は

ls -al /usr/lib/*valgrind*

ls が実行される前に、シェルはアスタリスクを解釈し、パターンに一致するファイル名のリストに置き換えます。一致する名前が1つしかない場合(例/usr/lib/valgrind:)、もちろんリストにはその名前だけが含まれます。したがって、実行される実際のコマンドは次のようになります。

ls -al /usr/lib/valgrind

これで、lsはパラメータが与えられたことを確認し、その単一のパラメータを調べると、それがディレクトリであることがわかります。そのオプションが指定されていないため、-dディレクトリ名の場合、ディレクトリエントリはリストされず、ディレクトリの内容がリストされます。そしてただ与えられたので一つディレクトリ名を使用している場合は、最初にディレクトリ名を印刷しません(単一のディレクトリ名を引数として指定すると、リストされたファイルがどのディレクトリに属しているのか疑問に思わないためですls。ファイル名拡張子)。

ディレクトリの実際の名前を知りたい場合(リテラルは推測であることを覚え/usr/lib/valgrindておいてください(たとえ1つかもしれません)/usr/lib/valgrind-3.7)、次のものを使用できます。

ls -ald /usr/lib/*valgrind*

.valgrindまた、追加の隠しディレクトリまたは隠しファイル(たとえば.valgrind-foo/usr/libがある場合いいえls-aシェル拡張は、ユーザーが提供したオプションに興味がなく、そのファイルがファイルリストに含まれていないため、そのファイルも表示したいとは思わないため、オプションにもかかわらずコマンドlsによってls引き続き表示されます。したがって、ドットファイルもリストされていることを確認するには、次のものを使用する必要があります。

ls -ld /usr/lib/*valgrind* /usr/lib/.*valgrind*

-aこれはいいえ引数として与えられたポイントファイルはに無条件にリストされているので、ここで必要ですls。もちろん、valgrindドットファイルを含む名前に含まれるディレクトリの内容を一覧表示するには〜する-aこれらのドットファイルは、拡張後にコマンドラインに表示されないために必要です。つまり、この場合は次を使用します。

ls -la /usr/lib/*valgrind* /usr/lib/.*valgrind*

一方、一致するディレクトリの内容には興味がありますが、.*valgrind*その中に含まれるドットファイルには興味がない場合は使用されません-a

使用している場合bash(おそらく他のシェルでも同じですがわかりません)、最初の2つのコマンドを次のように単純化できます。

ls -ld /usr/lib/{,.}*valgrind*

それぞれ

ls -la /usr/lib/{,.}*valgrind*

関連情報