注意似乎我忘了提及这只发生在重新启动后。 一旦启动,启动5分钟后或启动3天后运行命令无关紧要。 但一旦find
运行,它总是会find它(即使5分钟或3天后)。
我有一个运行Linux 4.9.17-v7 +的Raspberry Pi 3。 我不知道为什么会发生这种情况,但每次login到计算机并尝试查找已知的png文件时,提示都会返回,就好像没有结果一样。 知道该文件存在,我再次运行相同的命令(向上箭头键),并返回正确的结果。
如何用find命令获得2个不同的结果(或不一致的结果)? 可能有我缺less的包裹吗?
certificate文件的存在:
me@here:~ $ ls -la /opt/retropie/supplementary/splashscreen/retropie-default.png -rw-r--r-- 1 root root 1168926 Mar 30 19:51 ls -la /opt/retropie/supplementary/splashscreen/retropie-default.png
但是当我运行find命令时,提示符返回没有结果或错误:
me@here:~ $ sudo find / -name *default.png me@here:~ $
如果我再次运行find命令,我得到这些结果:
me@here:~ $ sudo find / -name *default.png /opt/retropie/supplementary/splashscreen/retropie-default.png me@here:~ $
我究竟做错了什么? 我错过了一个包吗? 程序是否腐败? 当我正在寻找某些东西而没有获得任何结果时,我怎么知道它是否存在? 请帮帮我!
更新1:评论请求。
使用引号引用-name
参数运行该命令:
me@here:~ $ sudo find / -name '*default.png' me@here:~ $ sudo find / -name '*default.png' /opt/retropie/supplementary/splashscreen/retropie-default.png me@here:~ $
更新2:把SD卡到另一台电脑,安装它,再次searchsudo find /mnt/flash -name '*default.png'
产生了正确的结果。 所以它必须是操作系统或可能是硬件问题。
更新3:我加载了一个新的操作系统到Raspberry Pi 3上,并拿走了有问题的'sd card / OS',并将其安装在Raspberry Pi 3上。这是为了查看它是否是硬件错误。 sudo find /mnt/flash -name '*default.png'
产生了正确的结果。 所以它必须是操作系统。
最初,我把RetroPie v4.2,停止自动运行。 拿我的娱乐软件,并编译它。 设置它与lirc一起启动运行。 娱乐软件中的一个选项是运行Emulationstation(您注释掉的命令在启动时停止仿真软件的自动运行)。 这一切工作。 所以我不知道会导致这个问题。
据我所知,该文件包含在/ opt目录是没有任何别的不同。
更新4:好吧,search'* default.png'之前,我做了sudo find / -name 'hostname'
,它返回正确的结果。 然后我运行sudo find / -name '*default'
并find它。 所以只有第一个find
命令可能会失败。 其后的所有似乎工作。
更新5:我能够find第一个find
并不总是工作的另一个操作系统。 我有另一个运行Arch Linux 4.1.7-2-ARCH的Raspberry Pi 1 Model B. 它不包含我一直在寻找的PNG,但我仍然search它。
me@there:~ $ sudo find / -name '*default.png' me@there:~ $ sudo find / -name '*default.png' /usr/share/icons/Adwaita/256x256/status/avatar-default.png /usr/share/icons/Adwaita/8x8/emblems/emblem-default.png /usr/share/icons/Adwaita/16x16/emblems/emblem-default.png /usr/share/icons/Adwaita/16x16/status/avatar-default.png /usr/share/icons/Adwaita/22x22/emblems/emblem-default.png /usr/share/icons/Adwaita/22x22/status/avatar-default.png /usr/share/icons/Adwaita/32x32/emblems/emblem-default.png /usr/share/icons/Adwaita/32x32/status/avatar-default.png /usr/share/icons/Adwaita/48x48/emblems/emblem-default.png /usr/share/icons/Adwaita/48x48/status/avatar-default.png /usr/share/icons/Adwaita/24x24/emblems/emblem-default.png /usr/share/icons/Adwaita/24x24/status/avatar-default.png /usr/share/gtk-doc/html/gtk3/window-default.png me@there:~ $
所以2个不同的操作系统和2个不同的树莓派都有同样的问题。 我已经在我的Banana Pi上testing过了,结果第一次是正确的。
更新6:好的,一些评论的更新。 是的,文件retropie-default.png
位于根目录下,系统上的任何地方都没有autofs / unionfs。
sudo find /opt/retropie/supplementary/splashscreen/ -name '*default.png'
行为不一样,并且产生正确的结果。
运行sudo date
两次会产生正确的结果。
请仔细阅读本文开头部分,因为我忘记了一个重点。
今天晚些时候我会继续运行。
更新7:在find
命令之前列出目录仍产生相同的结果。
me@here:~ $ ls /opt/retropie/supplementary/splashscreen/ LICENSE retropie-2015-carbon-video.mp4 README.md retropie-2015.png retropie-2013.png retropie-default-16x10.png retropie-2014.png retropie-default-4x3.png retropie-2015-4x3.png retropie-default.png retropie-2015-carbon-video-4x3.mp4 me@here:~ $ sudo find / -name '*2013.png' me@here:~ $ sudo find / -name '*2013.png' /opt/retropie/supplementary/splashscreen/retropie-2013.png me@here:~ $
更新8: sudo strace -o log1 find / -name '*default.png' and then sudo strace -o log2 find / -name '*default.png'
这些日志文件是巨大的。 我在找什么呢? 做猫logn | grep'x'其中x是'警告,警告,警告,错误,错误,错误。 我还应该检查什么? 日志文件log1 = 9.9M和log2 = 13 M有一个大小差异
我在两个日志文件的结尾都注意到log2中有一个不同的命令。 munmap(0x76f31000, 4096)
不在log1中。 也许这是失败所在?
你可以看到“查找”手册页来获得答案。 如果你想在你的命令中使用正则表达式,你必须引用正则表达式。 你的命令应该是sudo find / -name \*default.png
或者sudo find / -name '*default.png'
NON-BUGS
“路径必须先于表达式”错误消息
$ find . -name *.c -print find: paths must precede expression Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
发生这种情况是因为*.c
已经被shell扩展,导致find发现实际上接收到这样的命令行(如果在.
文件夹中有frcode.c locate.c word_io.c
文件):
find . -name frcode.c locate.c word_io.c -print
那个命令当然不起作用。 不要这样做,你应该把这个模式用引号引起来或者转义通配符:
$ find . -name '*.c' -print $ find . -name \*.c -print