百科问答小站 logo
百科问答小站 font logo



linux 的文件管理机制是否比 Windows 更优秀? 第1页

  

user avatar   cheng-jun-6-50 网友的相关建议: 
      

当一个城市到处是粑粑,怎么可能全怪市民不守规矩?

基础设施当然得背锅。


windows 连个游戏存档都能窝得到处都是。

没 everything,你都不知道你辛苦肝的存档到底放在:

  • 俺滴文档
  • 还是 俺滴文档My Games ,
  • 还是 俺滴文档Saved Game,
  • 还是 userSaved Game,
  • 还是 ProgramData,
  • 还是 PublicDocuments
  • 还是 Roaming,
  • 还是 Local,
  • 还是 LocalLow


规矩太多等于没规矩。

到处可写,到处可拉,就会到处是粑粑。


Linux 目录划分趋于扁平,从根目录到 home,都扁平化。

bin 放一起,lib 放一起, 头文件放一起,conf 放一起。

这种方式,使得 add PATH, include lib 都方便。

配置管理上,.xxx.conf 搞不定的配置,就弄个 .XXX 目录放,就这么简单。

管起来容易,找起来方便。唯一问题,也就是需要 checklist 去跟踪散到各目录的文件。

现代化包管理和各语言的包管理 npm,cargo,goget,远古 DSL 各类史前构建工具,全尊重这种扁平化思路。

小到 vim大到oracle,你点开一看,也是 /bin, /lib,/share,/include, 和根 / 差不多, 点开 oci client 文件夹,照样这层次。

这种统一组织风格,使得你找文件,改配置,链 lib,学一遍,其他也能无师自通。

哪怕 msys 在 window 上,管着 msys/mingw32/mingw64 三条工具链,就简单嵌两个目录,就能保持的清清楚楚,井井有条。

对普通用户,放 bin 的地方不让你写,放系统配置的不让你写,放第三方的 opt 也不让你写,你要拉粑粑去自己 home 或 var 拉 。

这样大概率杜绝了用户级粑粑不至于随便污染系统级 exe 和 config 路径。

用户真非去皇宫拉粑粑,那也得上升级别才能把粑粑落地。


什么是秩序,这就是秩序。

秩序要得以维持就三点:

1.秩序简单清晰无二义

2.有强制执行力

3.标准前后一致

自己掂量下 Windows 沾几条?


user avatar   changwei1006 网友的相关建议: 
      

Windows的AppData也有roaming和local目录严格区分了程序的运行产生的数据应该是如何存放,按照是否应该漫游和本地存储的策略分别存

但是很多软件不遵守这个规定啊,要么全放AppData下面(例如迅雷播放器直接把临时下载的解码器安装包放在AppData根目录下,按规范这种安装包属于临时文件,安装完就应该立即删除的,所以应该放在Temp目录下)

要么全放我的文档下面(例如Adobe,腾讯企业微信,个人微信,QQ等软件会把运行时日志和不需要持久化保存的头像缓存等文件全部放在我的文档里面,事实上这些运行时日志不是普通用户应该直接管理的文件,某些头像缓存也是没有必要永久保存和同步到云端的文件,所以应该分别丢到local里面由程序本身负责上报给厂商,将头像等缓存丢到temp里面由其他垃圾清除软件定时删除或者放在AppData里面由程序自己进行定时删除)

要么还有的直接放在C盘根目录的(例如Xilinx,Fraps,foxmail直接把程序文件夹放在根目录下,爱奇艺把缓存默认放在C盘根目录下)

我见过连主程序都往AppData这里面放的,导致我电脑这个目录变成几十个G,非常难管理,重装系统的时候也不知道到底应该备份这里面哪些文件夹,为了省事索性直接把这几十个G的文件全部备份(还都是一些单个文件尺寸很小的碎片文件,备份到机械硬盘的速度极慢)。

所以问题出在这些垃圾软件,而不是Windows操作系统。我举个例子,腾讯QQ和电脑版微信大家都用过吧,默认情况下这两玩意儿直接把所有运行时文件都放在我的文档里面。当然不只是QQ,什么GTA5啊彩虹六号这些游戏也这样放配置文件,本来是为了方便用户存档和云同步,但是实际上Windows下的我的文档默认不会做云同步(反观macOS只要登录了就默认会把Users目录做云同步),只有OneDrive才会做云同步,你要放存档按理来说也是放OneDrive里面啊,但是问题又来了,微软现在并没有默认给每个用户开启OneDrive,很多用户根本不知道这个东西是什么所以预装系统的时候根本就不会开(也有可能是在中国大陆地区太慢了所以大家不想用,这一点又和Apple iCloud有巨大差距),所以很多软件也找不到OneDrive的目录到底在哪也就没办法存放存档文件了。现在Windows下面的我的文档已经不是用来给用户自己放自己文档的文件夹了,实际上真正含义的【我的文档】在大家电脑里面都是D盘。

另外我再提一下,应用程序按照Windows规范进行存储文件还有一个好处就是进行系统重置或者升级后可以保证软件仍然能够正常工作,所以你会发现用Windows自带的那个重置系统功能可以让按规范实现的软件在重置后仍然可以正常使用(因为Windows重置的时候不会影响用户目录下的AppData数据),但是不按规范实施的软件在重置后就会出问题,大概率要重装才能解决。

如果Windows下面每个软件都按照规范把自己产生的数据放好(也就是不需要云同步的就老老实实放在local里面,需要云同步就放roaming里面,然后主程序核心文件就放program Files里面,除环境变量之外的地方不要产生任何文件,除非这些文件是用户手动授权读写,例如Office Word的保存文档操作就是由用户手动操作,所以这种不算违反规范),而不是到处乱放,甚至污染环境变量,污染公共库,那么Windows下面也可以非常规范干净整洁,也不会存在某个软件无法完全卸载干净的情况,而且用户在重装前需要备份的时候也可以很快速地得知哪些是需要备份的重要文件,而不是浪费时间把一大堆乱七八糟的日志和缓存也都备份出来。这就像Android一样,本来Android也设计了一些优秀的目录规范,但是很多APP都无脑往手机根目录下面放垃圾,导致现在很多人手机打开根目录直接一大堆乱七八糟的东西,要找自己的文件都找不到。明明这些文件大部分都是日志或者图片缓存是可以清除的,但是用户又不敢随便删,因为根本不知道删了之后哪些APP会崩溃或者出现配置文件丢失的情况。

当然这里面也有微软自己的问题,比如号称宇宙最好用的IDE:VS,在一些人电脑上经常不能完全卸载干净,还要用到专门的卸载工具才可以卸载,SQL Server也一样。这一点Linux也好不了多少,用apt remove的时候也会出现一些环境变量目录的东西删不干净,var目录下有一些日志或者临时文件删不干净,评论区有人提到了apt purge可以纯净卸载,那这个只是针对使用了 apt 等包管理工具的情况下可以用,如果是make install源码安装的呢?那就得看写 makefile 作者的敬业程度了,有的提供了 make uninstall 那还好办,有的没有提供那就得自己分析处理了。论纯净卸载方面,两个OS也不过半斤八两而已。


user avatar   pansz 网友的相关建议: 
      

这个问题其实也是个历史问题。

所以Windows因此曾经被一部分开源作者笑话:一个天生有问题的设计不会因为缝缝补补变得合理。

要让我一句话评价就是:其实当前版本的现代Windows设计的机制并不差。。。

但是,但是,由于历史上微软并没有在一开始就设计一个好的机制,所以后边为了软件兼容性,都必须让旧机制保留下来,为了保留软件兼容性,就造成了现在Windows系统下混乱的样子。

不过,万万没想到的是,同样的历史在Android系统下居然重新上演了一遍。Android也是一开始没有对应用写sdcard文件目录作出规范,后面想要做规范已经来不及了,毕竟,你要保证现有软件兼容性。

Linux一开始就是仿造Unix设计的,而Unix一开始就对文件目录用途进行了严格的划分,所以确实一开始就感觉组织得更有条理一些。一开始就有条理的设计,后续就不会为了保证兼容性而使局面变得难以收拾。


顺便吐槽一下部分Windows软件的诡异设计:

1,某些软件安装到用户目录。这个设计原本是为了让「只有普通用户权限」的用户能够正常安装使用这款软件。——但是,某些安装到用户目录的软件,安装的时候居然需要管理员权限。我是真的没有见过如此精分的设计。

安装需要管理员权限,会导致弹出对话框输入管理员密码,然后,该软件会被安装到管理员的用户目录,普通用户无法访问

所以正确的处理方式是:

  • 如果你的软件安装需要管理员权限,那么你必须安装到公共目录,这样装完之后普通用户可用。
  • 如果你的软件安装到用户目录,那么你绝对不能在安装时要求管理员权限,因为这样会导致软件安装到管理员的用户目录,使得普通用户永远无法看见该软件。

2,某些软件默认安装到D盘。。。这个设计更加离谱,你怎么默认人家一定要有个D盘呢?——我见过安装软件发现电脑没D盘,安装程序就直接闪退的神设计。

当然,D盘这种事情确实也是Windows设计缺陷,因为物理设备与文件存储路径之间没有隔离分层。所以系统规则中没有办法保证一个路径一定是可访问的。安装软件默认安装到C会被一部分人骂,默认安装到D会被另外一部分人骂。C盘党跟D盘党的圣战永远不可调和。

Linux的设计就不一样,文件路径始终是可访问的,/home /data 总是存在的,至于你把他挂载到C盘还是D盘还是E盘都随便。你可以把你的 D 盘完全挂载到 /home 然后只要写home的就是写D盘。至于安装软件,并不需要知道你有没有D盘。


那么吐槽就到这里为止,总结一下:从机制上来说,Windows确实可以设计出优秀的机制,然而为了兼容老旧的应用程序,这些问题已经无法解决。只要不能完全放弃对老旧应用程序的兼容,那么就没有办法推广新的优秀的管理机制。


user avatar   luv_letter 网友的相关建议: 
      

最新消息:陈小武的学生们已经被排成一排,挨个查手机了。




  

相关话题

  是否有办法在malloc的hook函数中调用原生malloc? 
  semaphore和mutex的区别? 
  关于Linus和Mac OS X内核, 《Linus Torvalds 的短视》这篇文章的真实性如何? 
  学了三年的 Linux 了,我现在不能立马写出一个简单的 shell 脚本,怎么回事啊? 
  在Windows下用VIM来写代码,会不会很蛋痛? 
  从wsl到wsl2明显是退步,为什么还有人鼓吹wsl2? 
  假如世界上只有Windows和Android,从来没有iOS和macOS,生活会不会变得更简洁一点? 
  为什么 Windows 上还没有普及 64 位的软件? 
  Windows 在服务端市场没人用吗? 
  为什么 Windows 测试版绿屏会显示「Windows 预□体验成员内□版本遇到问题」? 

前一个讨论
我想问下,在小儿麻痹症疫苗出来之前,我们中国是如何对待小儿麻痹的?
下一个讨论
什么叫做新闻写作中的「华尔街日报体」和「倒金字塔体」?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利