Files

Valgrind /usr/lib 文件不是正常的 Linux 文件

  • July 25, 2014

我今天遇到的問題(在帶有 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”字元串。

然後,它們顯示為正常文件(不是管道,不是設備)。但是,很奇怪的是,它們不是通過 simple 找到的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

所以被映射的設備並不真正存在。

這個輸出:

$ 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.

如果您不想列出目錄並將它們顯示為一個條目,請將-d標誌添加到ls

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

至於為什麼scp說“不是正常文件”,因為您沒有提供scp命令行或輸出我不得不猜測,但我的猜測是這是您scp為不是任何類型文件的參數生成的輸出根本,因為它不存在。

引用自:https://unix.stackexchange.com/questions/146501