首页 >>  正文

linux+find

来源:baiyundou.net   日期:2024-09-23

金磊 发自 凹非寺

量子位 | 公众号 QbitAI

风风火火的Linux之父,Linus Torvalds,他又跃入公众的视线。

“打开方式”依旧是熟悉的配方——骂人

我们先来看下Linus怒怼的名场面:

你的代码就是垃圾。

我要把你丢进垃圾邮件一周。

而这一次的“受害者”,是来自谷歌的一位程序员,Steven Rostedt。

而且他并非是随随便便的一位开发者,用网友的话来说“也算是大佬了”。

△图源:“OSC开源社区”评论区

不仅如此,从时间线上来看,双方已经交锋了足足有4天之久……

那么这到底是怎么一回事?

一个“inodes”,吵了四天

这场激辩是发生在Linux内核邮件列表。

Steven起初是发了个帖子,主题是关于eventfs(事件文件系统)的补丁。

具体而言,就是想探讨一下inodes(索引节点)是否应该保持唯一性的问题。

(注:inodes是Linux文件系统中的一个核心概念。它是一个数据结构,用于存储文件或目录的元数据,而不是文件的实际内容。)

Steven认为:

Linus之前建议在eventfs中使用相同的inode来简化getdents()的实现,这意味着所有文件和目录都将使用相同的inode。

然而,这种做法后来被发现会导致“find”命令出现问题,因为目录和文件的inode相同。

Linus随后发现在64位机器上,eventfs_inode结构中存在一个由于对齐而产生的空洞,可以用来存储目录的inode,这解决了目录的问题,但文件仍然保留了自己的inode。

在Steven看来,由于tar命令依赖于inode来确定文件的唯一性,这种做法会破坏tar命令的功能:

目前,tar命令在tracefs(事件文件系统的一个变体)中已经出现问题,因为它显示所有文件的大小为零,导致tar不复制任何内容。

除此之外,Steven也给出了自己想到的解决办法——建议将VFS层的get_next_ino()函数复制到tracefs的tracefs_get_next_ino()函数中,并添加一个“files”参数。

这样,当创建eventfs目录时,就可以预先知道所需的inode数量。tracefs_get_next_ino()将返回一个新的inode,并预留下一个“files”个inode供调用者使用。

当创建文件的inode时,其inode将是其父目录的inode加上在该目录文件数组中的索引,从而为每个文件提供一个唯一的inode。

然而,如此提案却被Linus强烈反对。

Linus的核心观点是“inode已经不再是唯一的描述符,我们不应该继续依赖于这种旧有的机制”

不过对于Linus的回复,Steven并没有买账,他坚持认为:

所有的文件和目录应该有唯一的inode,这样做可以对文件系统的某些方面起到简化的作用。

然而在几轮探讨过后,Linus就坐不住了,随即就出现了刚才怒怼的名场面:

不要把事情变得那么复杂。

你没有充分理解这些函数的用途和必要性

你的代码就是垃圾。

双方似乎都是各执己见,来来回回博弈了良久,从1月26日一直battle到了1月29日……

不过戏剧性的一点是,Linus在争吵之余,后来还发布了Linux内核6.8-rc2版本。

他希望这个版本能够解决之前版本中发现的问题,并鼓励用户进行测试。

并非第一次公开“交锋”

其实在此之前,Steven也曾在2020年初之际,在一场活动演讲中,公开与Linus“交锋”过。

他甚至直接将演讲的主题定位“Arguing with Linus Torvalds”,内容依旧是围绕着如何让Linux效率得到改善而做出的建议。

不过对于这次最新的battle,网友们也是各抒己见。

有认为应该抛弃历史包袱的,有认为只是二人设计理念的差距:

△图源:“OSC开源社区”评论区

你觉得呢?

参考链接:

[1]https://lkml.iu.edu/hypermail/linux/kernel/2401.3/04208.html

[2]https://www.youtube.com/watch?v=0pHImHVrI2I

[3]https://mp.weixin.qq.com/s/S0R_5OBSiSbDnl1-U6I4wg

— 完 —

量子位 QbitAI · 头条号签约

","gnid":"925028194c5c42bab","img_data":[{"flag":2,"img":[{"desc":"","height":"584","title":"","url":"https://p0.ssl.img.360kuai.com/t018fc6c97cbbeadc51.jpg","width":"1080"},{"desc":"","height":"888","title":"","url":"https://p0.ssl.img.360kuai.com/t0162edb19132aea1b8.jpg","width":"1080"},{"desc":"","height":"238","title":"","url":"https://p0.ssl.img.360kuai.com/t01ac095f208937750c.jpg","width":"912"},{"desc":"","height":"642","title":"","url":"https://p0.ssl.img.360kuai.com/t0162cf3f590ac0cad7.jpg","width":"1080"},{"desc":"","height":"512","title":"","url":"https://p0.ssl.img.360kuai.com/t010b58586c5e467bff.jpg","width":"1080"},{"desc":"","height":"335","s_url":"https://p0.ssl.img.360kuai.com/t0148cc3688ed5609b7_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0148cc3688ed5609b7.gif","width":"640"},{"desc":"","height":"736","title":"","url":"https://p0.ssl.img.360kuai.com/t01826dfd9b7d2e9895.jpg","width":"1080"},{"desc":"","height":"562","title":"","url":"https://p0.ssl.img.360kuai.com/t016da8787d16586e98.jpg","width":"1080"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"pika","pub_time":1706592480000,"pure":"","rawurl":"http://zm.news.so.com/d68b355155e8a556b8189018b5400e94","redirect":0,"rptid":"18f0457a31fb651b","rss_ext":[],"s":"t","src":"量子位","tag":[{"clk":"ktechnology_1:linux","k":"linux","u":""},{"clk":"ktechnology_1:谷歌","k":"谷歌","u":""}],"title":"Linus新年首骂:和谷歌大佬大吵4天,“你的代码就是垃圾”

常疤剑2089鸟哥的linux私房菜 find命令使用 -
裴唐胖15693414903 ______ find命令用于查找文件,格式为:“find [查找路径] 寻找条件 操作”.咱们在Linux系统中的搜索工作一般都是通过find命令来完成的,它可以根据不同的文件特性来做为匹配项(如文件名、大小、修改时间、权限等信息),一旦匹配到了则会默...

常疤剑2089linux中的find 命令怎么查找介于 两个大小之间的文件 -
裴唐胖15693414903 ______ find / -size +5k #查找系统中大于5k字节的文件 -a表示 and 可以试试 -size -60k是否小于的意思(手边没有环境试) 最后跟一个 -exec ls -l应该可以,或者用管道

常疤剑2089Linux中在当前目录下查找某个文件. -
裴唐胖15693414903 ______ 在 Linux 中查找文件有两种方法.一种是使用 find 命令,另外一种是使用 locate 命令. 1、Find 命令 使用 Linux find 命令可以用不同的搜索标准如名字、类型、所属人、大小等来搜索目录树.基本语法如下: # find path expression search-term ...

常疤剑2089linux find 怎样取得文件名呢? -
裴唐胖15693414903 ______ find ./ -name "*.m" -exec grep -l 'myCenter' {} \; grep加入-l选项,就能将找到的文件名列出 linux中的find命令——查找文件名 1.在某目录下查找名为“elm.cc”的文件 find /home/lijiajia/ -name elm.cc2.查找文件名中包含某字符(如"elm")的文...

常疤剑2089linux find命令使用求助
裴唐胖15693414903 ______ 直接把你的内容保存为3g.sh chmod +x 3g.sh cp -a 3g.sh /etc/cron.daily/ /etc/init.d/crond restart 即可

常疤剑2089Linux 怎么搜索关键字 -
裴唐胖15693414903 ______ 在终端上用less命令打开文件.输入/,后面跟上单词,就能向下搜索该单词.输入?,后面跟上单词,就能向上搜索该单词....

常疤剑2089Linux shell 执行这句 find 命令总是报错,怎么修改呢
裴唐胖15693414903 ______ 在 Linux 系统中,find 的使用方法一般是:#find / -name "*.c" -print 其中:/ 表示从根目录开始查找文件;*.c 表示查找以 *.c 为后缀的 C 语言源程序;-print 表示将查找到的结果显示在屏幕上.至于说关于 shell 编程方面的程序调试,由于 shell 的语法相当严格,所以你必须要严格按照 shell 的语法和结构来书写才行.哪怕差一点都不能够通过.你再仔细检查一下你的 shell 文件.

常疤剑2089linux 怎么查找文件关键词 -
裴唐胖15693414903 ______ 方法一:find命令 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. 命令格式:find <指定目录> <指定条件> <指定动作> - <指定目录>: 所要搜索的目录及其所有子目录.默认为当前目录. - <指定条件>: 所要搜索的文件...

常疤剑2089Linux:find指令后面的~是什么意思呢?求解 -
裴唐胖15693414903 ______ ~是指用户家目录.

常疤剑2089linux 用一个find命令是否可以同时查找出某个目录下以log或者是out结尾的二种文件? -
裴唐胖15693414903 ______ find ./ -name "*.log" -o -name "*.out" 其中-o是或者的意思,就是在当前目录下,查找以log或者out结尾的文件. 类似的还有-a,并且,查找同时满足多个条件的文件 -not,查找不满足条件的文件. 具体例子: sudo find /etc -size +1M -exec ...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024