正则表达式 locate --regex 'bin/(bz|gz|zip)'有没语法问题?

205 天前
 sleepingdog
我在 ubuntu 上使用 locate --regex 'bin/(bz|gz|zip)' 结果什么输出都没有。
我用 find 搜索,明明都存在/usr/bin/zip 。
517 次点击
所在节点    正则表达式
18 条回复
sleepingdog
205 天前
是复制粘体《 linux 命令行大全》书上的
locate --regex 'bin/(bz|gz|zip)'
这是中文 2012 版



这是英文 2019 版

因为中文版( 2012 )有一些地方错误,而英文版似乎作者也有一些地方有问题,不敢肯定所以问问这个先
sleepingdog
205 天前

这本书。不知道有没人看过,我感觉还是不错的,瑕不掩瑜。


这是我 ubuntu find 找到的
NEO17
205 天前
看着没错。Ubuntu 版本是? locate 版本? updatedb 试下
sleepingdog
205 天前
@NEO17 #3 忘了说了,
ubuntu 是 2204lts ,locate 版本是


奇怪我在树莓派上执行这个命令也没有出现内容。树莓派上也是有那个
/usr/bin/zip 的
两个 locate 都是那个 4.8.0
sleepingdog
205 天前
直接用 locate bin/zip ,它是能出来的,所以应该是哪里出了问题
zhuisui
205 天前
我原样复制你的,能找到。语法也没问题。
你确定你用的是你贴的命令,而不是 --regexp ?另外你用了 updatedb 更新过数据库?
sleepingdog
205 天前
@zhuisui #6
然后也 sudo updatedb 过了。
这是虚拟机的 ubuntu 系统,zip 也都装了好几天了,应该不是这个问题。

关键我在树莓派上也是这个结果,真是蚌埠住了。树莓派是树莓派的 os ,发现没有 locate ,手动 apt 安装了
sleepingdog
205 天前
手动输入也不行。试了 n 次
sleepingdog
205 天前


奇怪。。
JinTianYi456
205 天前
不明所以

> updatedb
> locate --regex 'bin/(bz|gz|tar)'
/bin/gzip
/bin/tar
/usr/bin/bzcat
/usr/bin/bzip2
> locate bin/tar
/bin/tar
julyclyde
204 天前
@sleepingdog 那你 strace locate 看看它到底都做了些啥?
sleepingdog
204 天前
@JinTianYi456 #10
update 是不是一般都要加 sudo ?
不过我即使加了,前面也弹出这个东西


我去到该位置,发现权限是这样。

但感觉这两个文件应该和上述的应该没有关系吧



回到问题,又试了下也还是这样。locate --regex '/bin/zip' ,倒是可以出来结果
sleepingdog
204 天前
@Livid 我 10 楼的最后一张图片包含了用户信息,能帮我删除该图片么
sleepingdog
204 天前

树莓派也是这样。
奇怪你们为什么就能输出正常的结果
sleepingdog
204 天前
@julyclyde #11 因为没用过 strace ,不知 strace locate --regex '/bin/(bz|gz|zip)'这样对不对?

它显示的东西太多了只截取前部分和后部,中间基本都是 read(3,.....之类的内容

~/workspaces/cat$ strace locate --regex '/bin/(bz|gz|zip)'
execve("/usr/bin/locate", ["locate", "--regex", "/bin/(bz|gz|zip)"], 0x7ffd16805b50 /* 53 vars */) = 0
brk(NULL) = 0x5643604f8000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffe61c87470) = -1 EINVAL (无效的参数)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbfa3762000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (没有那个文件或目录)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=73967, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 73967, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbfa374f000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\244;\374\204(\337f#\315I\214\234\f\256\271\32"..., 68, 896) = 68
newfstatat(3, "", {st_mode=S_IFREG|0755, st_size=2216304, ...}, AT_EMPTY_PATH) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2260560, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfa3400000

......

read(3, "0000cf67-0006076eea03b003.journa"..., 4096) = 4096
read(3, "e-le64.cache-7\0\0d677cdf-5295-4fc"..., 4096) = 4096
read(3, "le64.cache-7\0\377101a04ab-0cd4-493e"..., 4096) = 3493
read(3, "", 4096) = 0
close(3) = 0
close(1) = 0
close(2) = 0
exit_group(1) = ?
+++ exited with 1 +++
sleepingdog
204 天前
两个系统的语言都是这个,

不知有没关系
julyclyde
204 天前
@sleepingdog updatedb 必须用 root 身份运行,否则无权限看所有的文件,没权限写 locate.db
julyclyde
204 天前
@sleepingdog strace 的输出很长的。慢慢读吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX