研究 Linux 版 powershell,却找到了 Linux 的 bug?

2019-03-20 11:24:07 +08:00
 ps1aniuge
------- [环境] -------
虚拟机,centos 7.6
kernel 升级到了最新 kernel.x86_64.0.3.10.0-957.10.1.el7
find 版本最新 findutils-4.5.11-6.el7.x86_64

QQ 群号=183173532
名称=powershell 交流群
群内创作文章,著作权所有者为群

------- [问题从这里开始] -------
我想,用 powershell 统计,系统最大的 10 个文件。


------- [ linux 的 powershell 命令 1,返回的结果] -------
PS /root> Get-ChildItem / -file -Recurse | Sort-Object length -Descending -top 10 |Select-Object {$_.length / 1mb},fullname

$_.length / 1mb FullName
--------------- --------
134217726.007812 /proc/kcore
101.161056518555 /usr/lib/locale/locale-archive
77.8723373413086 /usr/bin/dockerd-ce
65.3838729858398 /usr/bin/docker
63.01171875 /var/lib/rpm/Packages
51.1564149856567 /boot/initramfs-0-rescue-314df5eb857b4ced8b7d82f9365999e7.img
42.2908325195312 /usr/bin/containerd
29.62109375 /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
28.40234375 /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
27.015625 /opt/microsoft/powershell/6.0.5/System.Management.Automation.dll



------- [ linux 的 powershell 命令 2,返回的结果] -------
du -sh (Get-ChildItem / -file -Recurse | Sort-Object length -Descending -top 10 ).fullname
0 /proc/kcore
102M /usr/lib/locale/locale-archive
78M /usr/bin/dockerd-ce
66M /usr/bin/docker
64M /var/lib/rpm/Packages
52M /boot/initramfs-0-rescue-314df5eb857b4ced8b7d82f9365999e7.img
43M /usr/bin/containerd
30M /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
29M /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
28M /opt/microsoft/powershell/6.0.5/System.Management.Automation.dll


我的想法:
咦?怎么变 0 了?我还是用 [正宗 linux 命令] 试试吧。


------- [ linux 的 find 命令 1,返回的结果] -------
find / -type f -exec du -sh {} + | sort -rh | head -n 10
du: 无法访问"/proc/3933/task/3933/fdinfo/6": 没有那个文件或目录
du: 无法访问"/proc/3933/fdinfo/6": 没有那个文件或目录
102M /usr/lib/locale/locale-archive
78M /usr/bin/dockerd-ce
66M /usr/bin/docker
64M /var/lib/rpm/Packages
52M /boot/initramfs-0-rescue-314df5eb857b4ced8b7d82f9365999e7.img
43M /usr/bin/containerd
30M /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
29M /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
28M /opt/microsoft/powershell/6.0.5/System.Management.Automation.dll
27M /opt/microsoft/powershell/6-preview/System.Management.Automation.dll



------- [ linux 的 find 命令 2,返回的结果] -------
find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
du: 无法访问"/proc/4157/task/4157/fdinfo/6": 没有那个文件或目录
102M /usr/lib/locale/locale-archive
78M /usr/bin/dockerd-ce
66M /usr/bin/docker
64M /var/lib/rpm/Packages
52M /boot/initramfs-0-rescue-314df5eb857b4ced8b7d82f9365999e7.img
43M /usr/bin/containerd
30M /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
29M /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
28M /opt/microsoft/powershell/6.0.5/System.Management.Automation.dll
27M /opt/microsoft/powershell/6-preview/System.Management.Automation.dll



------- [ linux 的 find 命令 3,返回的结果] -------
find / -type f -ls | sort -k 7 -r -n | head -10 | column -t | awk '{print $7,$11}'
find: ‘/proc/4267/task/4267/fdinfo/6 ’: 没有那个文件或目录
find: ‘/proc/4267/fdinfo/5 ’: 没有那个文件或目录
140737486266368 /proc/kcore
106075056 /usr/lib/locale/locale-archive
81655064 /usr/bin/dockerd-ce
68559960 /usr/bin/docker
66072576 /var/lib/rpm/Packages
53641389 /boot/initramfs-0-rescue-314df5eb857b4ced8b7d82f9365999e7.img
44345152 /usr/bin/containerd
31059968 /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
29782016 /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
28327936 /opt/microsoft/powershell/6.0.5/System.Management.Automation.dll



------- [我的疑问] -------

问 1:linux 上所有都是文件么?
是的话,find,du 为什么会报那些错?谁来答答?



问 2:/proc/kcore 是文件么?
测试代码:
root@centos76 ~]#ls -l
-r--------. 1 root root 140737486266368 3 月 20 10:57 /proc/kcore



问:find 不加 [-print0 ] 参数后,能算 [最大 10 个文件] 么?
答:不行。
欢迎帮忙测试,下面的命令:
find / -type f | xargs -0 du -h | sort -rh | head -n 10

find / -type f | xargs du -h | sort -rh | head -n 10




问:加上 [-print0 ] 参数后,返回消失了,这是 find 的 bug 么?
测试代码:
[root@centos76 ~]# find /proc -name 'kc*' -type f
/proc/kcore

/proc/kcore[root@centos76 ~]# find /proc -name 'kc*' -type f -print0
返回空,即无返回



问: [ find / -type f -exec du -sh {}] 也有丢文件的 bug,对么?
答:
应该是 du 的问题。

测试代码:
find /proc -name 'kc*' -type f
/proc/kcore

find /proc -name 'kc*' -type f -exec du -sh {} +
0 /proc/kcore




------- [结论] -------
我认为:
[ linux 的 powershell 命令 1,返回的结果]
[ linux 的 find 命令 3,返回的结果]
靠谱点。
虽然 [/proc/kcore ] 返回的结果我并不需要。

当然,我也认为,没占磁盘,du 不应该返回。

powershell 那两个返回都是可以的,find 的返回就不乐观了。
7113 次点击
所在节点    Linux
51 条回复
CallMeReznov
2019-03-20 20:49:04 +08:00
槽点太多,说不过来了.
block
cs8425
2019-03-20 20:54:08 +08:00
@ps1aniuge #37
`find / -type f -print0 | xargs -0 du -h`
试过, 不行在哪?? 看不懂你这想表达啥

kcore 丟了??
你有试过`find /proc -name kcore -print0 2>/dev/null`去掉错误讯息吗?
你有试过`find /proc -name kcore -print0 2>&1 | grep kcore`
让 grep 告诉你 kcore 有没有出现吗???

`find /proc/ -type f -print0 2>/dev/null | xargs -0 du -sh --apparent-size 2>/dev/null | sort -rh | head -n 10`
无视所有错误讯息的输出你又有试过了吗?


自己不查清楚、不搞清楚意思、不会用 /用错方法怪别人有坑 Zzz
就比如开着船上公路, 开不了, 就开喷"不是交通工具吗? 为啥不让开"一样的 Zzz
ilgharkus
2019-03-21 01:05:29 +08:00
@ps1aniuge 如果你觉得是 Find 的 bug 就说是 Find 的 bug 呗,还非得和 Linux 扯上关系。
yanaraika
2019-03-21 01:52:23 +08:00
看了下楼主发帖历史 告辞…
ihciah
2019-03-21 02:21:54 +08:00
“群里不许分享黑客,提问黑客” 太厉害了!
StarRED
2019-03-21 08:08:55 +08:00
我加入一个群不过很安静,但有真东西。 毕竟个个要养家
ps1aniuge
2019-03-21 10:35:43 +08:00
@cs8425 感谢你的解答。已经给你感谢铜币。
经过我的测试,这个完美了。
find / -type f -print0 | xargs -0 du -sh --apparent-size 2>/dev/null | sort -rh | head -n 10

说明:
1 跟据 41 楼修改而来,第一个命令不需要过滤掉错误,也能正常输出。
2 顶楼问题需求很简单。
3 楼顶上的那些 linux 命令组合,是我搜到的,但是不正确,和最终比差不少。

4 还是 powershell 简单。实现此需求的 linux 命令很难写出,需要命令高手,或者还需要研究很久。
4.1 find / -type f 我想大家都能写出,但刷刷报错。
4.2 会加 -print0 的人就很少,就算是搜到,还要另一个命令的-0 协作。但这并不能解决顶楼问题,还会丢对文件的统计。
4.3 --apparent-size 有有几个人会呢?起码写“统计 10 个 linux 最大文件”命令的那‘网上分享者’不会。
4.4 或许你们认为你们都会,就我是猪。
我欢迎你们把这道题写入"linux 开发人员,运维人员面试题"。
如上述命令中,--apparent-size 干嘛用的,不加行么?
看几个人能正确写出。

@ihciah 那很正常啊,win 客户机多,是 linux 的 90 多倍。再说一个 linux 群 /论坛 /社区,会欢迎 linux 黑客么?谁敢再说我就要分享 linux 黑客技术 /工具了。

最后,我想说,这是一个单纯技术研究的提问帖子,不讨论技术的滚远点。带节奏的滚远点。
no1xsyzy
2019-03-21 14:45:31 +08:00
@ps1aniuge
> ps 是我心爱的东西,我不想社区脏了。可以吗?
可以,那就放开安全相关讨论,否则就真的脏了。


> 凡是游戏,就要封杀外挂,大家怎么看?
对,而你的行为就是说游戏公司不要封杀外挂,把说要封杀外挂的人封了就没人说了。
> 凡是多人游戏,中国开挂最多,外国人都想封杀国区,大家怎么看?
对,而你的行为就是说不要封杀国区,把说要封杀国区的人封了就没人说了。

> 脚本小子,大义凛然,阵阵有词,大家怎么看?
朝你看。
> 从 winxp,到 win10,收紧权限,大家怎么看?
好,所以我们不能封了提出要收紧权限的人。

> 堕落的人多否?
少得可怜。万人不出一。
> win 中脚本小子多否?
少得可怜。万人不出一。
> 教旨好否?
教旨不错,而你是最大的违背者。
no1xsyzy
2019-03-21 15:00:07 +08:00
@ps1aniuge 你这是典型的 “不解决问题,解决提出问题的人” 的思路。
安全威胁一直存在,避而不谈不是解决问题的方法。
避而不谈最明显的结果就是大家都写出来有漏洞可以被利用的程序。

假设你群中有名群友因为你封堵信息,不知道某个漏洞的存在,写出来被此漏洞影响的程序。
造成经济损失,你怎么办?
造成人员伤亡你又怎么办?
自然,法理上你是没什么责任的,但你正是直接造成这件事的人。

linux 群、论坛、社区 都很欢迎黑客,只要并不是故意地破坏社区,任何工具的分享都很受欢迎。
当然 v2 并不是 linux 论坛, “ V2EX 的使命是为创意工作者打造一个最好的社区,他们在这里可以获得灵感,分享想法,找到伙伴,获得通向目标的加速度。” 所以在此分享非自己所写的任何工具原则上不被接受——也不因非原创而排斥就是了。
lxmfly123
2019-03-21 18:15:21 +08:00
今天心情好,就免你一顿嘲讽,只 block 你好了。
ps1aniuge
2019-03-22 14:03:03 +08:00
@no1xsyzy 光说不做假把式。
v2ex 里有个分享创造版,你先上去分享点黑客工具,木马我看看。
你在 linux 版,分享点攻击人机子的技法,我看看。

转贴:
中央网络安全和信息化委员会成立一年以来,经党中央作出一系列重大决策,我国网络安全保障能力稳步提升,
管得住才是硬道理。
主管部门协同发力、联合整治,依法约谈网站 1497 家,取消违法网站许可或备案、关闭违法网站 6417 家,移送司法机关相关案件线索 1177 件。依法管网治网进一步加强,我国网络空间日渐晴朗,公民网络素养也正大幅提升,我国网信事业快速健康发展成果,,正越来越好的造福人民。

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

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

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

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

© 2021 V2EX