use*_*631 2 ls directory wildcards files
我今天遇到的问题(在带有 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
Run Code Online (Sandbox Code Playgroud)
首先,请注意它们的名称中没有“valgrind”字符串。
然后,它们显示为常规文件(不是管道,不是设备)。但是,非常奇怪的是,它们不是通过 simple 找到的ls
:
$ ls -al /usr/lib/memcheck-x86-linux
ls: /usr/lib/memcheck-x86-linux: No such file or directory
Run Code Online (Sandbox Code Playgroud)
它们甚至不会出现在常规列表中:
$ ls -al /usr/bin
(snipped)
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
所以,/
是一个设备。
和:
$ whoami
root
Run Code Online (Sandbox Code Playgroud)
所以,我是根。
只是为了完成拼图:
$ ls -al /dev/root
ls: /dev/root: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以映射的设备实际上并不存在。
这个输出:
$ 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
Run Code Online (Sandbox Code Playgroud)
表示您正在列出一个名为/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
Run Code Online (Sandbox Code Playgroud)
至于为什么scp
说“不是常规文件”,因为您没有提供scp
命令行或输出,我不得不猜测,但我的猜测是,这是您scp
为不是任何类型的文件的参数生成的输出根本不存在,因为它不存在。