Files
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”字元串。
然後,它們顯示為正常文件(不是管道,不是設備)。但是,很奇怪的是,它們不是通過 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
為不是任何類型文件的參數生成的輸出根本,因為它不存在。