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



Windows命令行和Linux差在哪里? 第1页

  

user avatar   skywind3000 网友的相关建议: 
      

我经常打开 PowerShell 需要 7-8 秒。i7-7700HQ CPU,16G 内存。


user avatar   aloxaf 网友的相关建议: 
      

谈不上孰优孰劣,因为两者的定位本就不同:

PowerShell 是偏向脚本用途的,因为 Windows 下就它一个能打的——cmd 太弱,VBScript/JScript 本质不是干这个的写起来太麻烦,而且一万年不更新随便写个什么东西还会被杀软当成病毒。

而 Linux 下的一通 shell 都是偏向交互式用途的,毕竟要写正经脚本的话有 Python、Perl、Ruby 等等,轮不到你一个 shell。甚至用 shell 写脚本咱都是用“糊”这个词的——因为基本上都是随便写写,不会想着怎么写日后方便维护之类的。

定位的不同就带来了不同的体验:

PowerShell 要照顾脚本体验,那肯定可读性可维护性什么的都得上去吧?那命令肯定不能就只有两个字母,参数也不能是 abcdefg、管道最好传递对象,不然 cut -f2 这种代码过个十天半个月谁还知道第二列到底是啥、传参也不能是 123456、最好还有类型,于是大家搓着搓着就搓成这个样子了——脚本体验倍儿棒,然而交互式体验就勉勉强强了。

首先,启动速度慢,这个是作为交互式 shell 我最不能容忍的。无配置启动时间 0.3 s,如果用上了重量级配置这个数字甚至会达到 1~2 秒。这还能用吗!!作为对比 bash/fish/zsh 的无配置启动时间甚至只有 pwsh 的 1/100,这才是一个合格的交互式 shell 应该有的启动速度。

       ❯ hyperfine "pwsh -nop -c 'exit'" Benchmark #1: pwsh -nop -c 'exit'   Time (mean ± σ):     349.9 ms ±  12.3 ms    [User: 411.4 ms, System: 46.4 ms]   Range (min … max):   327.8 ms … 369.4 ms    10 runs ❯ hyperfine "fish -c 'exit'" Benchmark #1: fish -c 'exit'   Time (mean ± σ):       7.6 ms ±   1.9 ms    [User: 5.7 ms, System: 1.9 ms]   Range (min … max):     4.9 ms …  14.5 ms    249 runs ❯ hyperfine "zsh -c 'exit'" Benchmark #1: zsh -c 'exit'   Time (mean ± σ):       2.8 ms ±   1.3 ms    [User: 1.9 ms, System: 1.0 ms]   Range (min … max):     1.1 ms …   7.3 ms    443 runs ❯ hyperfine "bash -c 'exit'" Benchmark #1: bash -c 'exit'   Time (mean ± σ):       3.0 ms ±   1.9 ms    [User: 2.2 ms, System: 0.9 ms]   Range (min … max):     1.1 ms …  17.9 ms    464 runs     

其次,兼容性问题。这点主要针对在 Linux 下使用的情况(不过说实话如果你在 Windows 上使用 bash 体验也好不到哪儿去……)。

这个兼容性问题绝对不是什么列出文件需要用 dir 而不是 ls 之类的,说这话的人我怀疑根本没怎用过 pwsh。自己手写代码是不会遇到兼容性问题的,有问题的是需要复制别人代码的时候。fish 用户应该对此深有感触,由于 bash 在 Linux shell 中的统治地位,他们常常不得不使用 bash -c 'xxx' 来处理从网上复制来的 bash 代码,甚至有人提出加一个内置命令专门把后面的代码传给 bash 处理。如果对于这一部分有任何异议(如“为啥需要复制代码”、“为啥不自己改一下”)请找一个 fish 用户辩论一下。

排除这两点的话,pwsh 的交互式体验其实还是不错的,可能比不上 zsh/fish,但比 bash 还是强了不少的。比如语法高亮、进行中的 Fish-like autocompletion · Issue #687 · PowerShell/PSReadLine、还有我非常羡慕的有强类型加持的补全系统。

而 bash 这边的脚本体验我觉得不必多说了……各位可以扪心自问一下 bash 的脚本体验如何。那绝对是糟糕透顶:到处都是 123456abcdefg 之类的单字变量/开关、由 shell 展开的通配符、基于字符串的半吊子数据类型、* 和 @ 的区别、时刻注意引号、还有那诡异的语法。

zsh 和 fish 倒是做一定出了改进,但代价就是一个比一个不兼容 bash(zsh 兼容 bash 这种话就不要说了,这就好像说 C++ 兼容 C 一样,甚至还不如 C++ 对 C 的兼容程度……)。

至于生态问题两者其实也是半斤八两,bash 这边可能还更差一点。因为 pwsh 放到 Linux 上能直接拿 Linux 上的命令行工具来用(虽然你有几率被管道坑到……),bash 反过来却难以在 Windows 上调用 COM 组件调 WMI 。

===以下为牢骚===

有些人说到底都是偏见,我估计用都没用用过 pwsh 就来这里黑了,黑都黑不到点子上。

pwsh 不兼容 bash 所以不行?fish 也不兼容为啥照样大把人用做交互式 shell?

管道传对象是邪道?evlish、nushell 表示你这个地图炮开得有点大啊……

还有很多人拿 Linux 上的 bash 和 Windows 上的 pwsh 比 Linux 下的常用操作。你咋不倒过来比?pwsh 在 Windows 上还能调用 Excel 处理表格甚至画图、WMI 包揽系统管理,你们 Linux 这边好像没一个能打的?是不是生态不行啊?更别说大部分 Linux 下的常用工具都有 Windows 版本,甚至还能装 MinGW/CygWin/WSL。


利益相关:Linux 下的 zsh 用户(


user avatar   Hentioe 网友的相关建议: 
      

更新一下:

我说 Bash 是垃圾貌似让一些人“信仰崩塌”了,默认的东西就应该顶礼膜拜不容差评吗?这种认知是非常不好的。说 Bash 是垃圾不等于说 Linux 或 GNU 是垃圾啊。

如果说它是垃圾过分了,那准确点说就是“历史垃圾”,有一堆历史包袱,所以充满了糟粕。

再更新一下(这部分主要怼奇葩,过一段时间会移动到最后):

这人挺逗的,他把「有很多替代品」当成 Bash 是垃圾的“证明”了。然后基于自己小学学前没毕业的理解能力跑来评论区瞎喷。笑死。

一个基本三零的用户写了五百多个点赞为零的回答,居然称我的回答“没营养”。把自己不经过某主要器官就乱喷的评论称之为“习惯性吐槽”。

我问他眼神是否正常?因为我在最前面就写了“后续”会更新有关 Bash 如何糟粕的内容。然后他又开始教我草稿怎么用,噗,草稿能告诉别人后续还有更新?你用懂知乎了吗?

而且上面还在喷自行扭曲后产生的「替代品多等于垃圾」观点。现在又喷我没有说明它为什么是垃圾。笑死。这并不能证明你没有乱喷的事实啊?

嗯…… 这样就溜了?说好的奉陪呢,这下又不关您事儿了?虽然我清楚得很这类人懂个毛啊,根本就没有讨论的能力可言。但我还是想说,学习顺序简直错误啊,他就不应该先学 Bash 的拼写,而是先回去重读小学语文。


这个纯三零的用户更会评论,娱乐性简直吊打楼上:

这句话我怎么看都怎么想笑。Windows 没有命令行生态所以 bash 是垃圾?这已经可以把 Windows 扭曲成苹果的软件产品了吧。

然后举了一个更搞笑的例子,“贝克汉姆不打篮球,所以乔丹也是垃圾”。我想不明白你们来这发评论是来搞笑的,还是丢人的。你前一句话还至少都和命令行相关,怎么后一句扯了一个跟篮球毫无关系的人去证明篮球垃圾呢?动动脑子啊,你扭曲我的观点没关系,你把自己的观点都扭曲了啊。

我建议这些人还是不评论得好。说实在的,你们懂技术吗?短期培训出来的?甚至这都不重要,你们连最基本的理解和辩论能力都不具备,还在这发些丢人言论瞎喷,完全就是为我的回答创建更新素材啊。


用 PowerShell 去对比 Bash 无法解释这个问题,甚至都不沾边,因为 Bash 在 Linux 上也是个垃圾。如果你是 Linux 新手或 Windows 用户大概会疑惑,Linux 命令行不是很强大方便吗?Bash 居然是垃圾?

是的,因为这些跟 Bash 无关。Linux 上存在大量的 Bash 替代品,我们有很多的人压根不用 Bash。

你要稍微有点追求就应该知道它是一个很恶劣、糟粕的东西。为了让这个垃圾能写出可维护、漏洞少,像点样子的东西,业界总结出了好几百条应该遵守的规范:

github.com/koalaman/she


PowerShell 作为一个晚了这么多年的软件如果连 Bash 都超不过那微软的人可以直接切腹谢罪了。无论是 PowerShell 还是更强大得多得多的 Shell 也不能直接颠覆 Windows 命令行的现状,因为 Windows 日常软件压根没有命令行生态可言。

你 Shell 程序再强大能让 QQ 在终端窗口中聊天吗?毕竟 QQ 作为一个国内最常用的 Windows 软件压根不理会命令行,没有提供任何接口。

所以命令行能做什么不取决于 Shell 程序的强弱。Shell 首先是一个调度各个外部程序的胶水,现在的 Windows 没有多少可用的外部程序。

一个基本没有生态可言的系统,固然也大大降低了出现更强大的 Shell 程序,终端软件的意义。所以 Windows 上烂得要死的 cmd 都能存活那么多年,毕竟使用它的需求太少,太简单。


不过当前现状确实在改善,例如 Chocolatey 和 Scoop 这种命令行包管理工具。它们可以实现很多图形化软件在终端的静默安装,这与 Windows 提供了更强的 Shell 也是密不可分的。

在 Windows 服务器上应该有更多类似的东西,因为服务端软件普遍要迎合没有图形界面的需求。

所以命令行好用不好用就是生态决定的,有更强的 Shell 程序能促使这个生态更好的发展。而 Linux 的命令行软件生态比图形软件还要强,这是当初的基因决定的。


user avatar   li-sheng-qiu 网友的相关建议: 
      

这个问题需要从至少 3 个不同的方面来看——首先你得把 Shell 和 Terminal 这两个概念分开,然后还要考虑的是围绕命令行界面(CLI)所构建的生态环境。很多人都把他们混在了一起,得出的结论就大不相同甚至截然相反。

Shell 就是真正解释并执行命令的那个程序,比如 cmd/PowerShell/bash,它们各自使用自己的语言,比如 cmd 使用的语言叫 Batch(批处理)。Terminal 是用来显示结果、处理输入输出的那个程序,Windows 上自带的叫 conhost,Linux 不同的桌面环境自带的 Terminal 不同。由于 bash 是大多数 Linux 发行版默认的 shell,下面就都是拿他跟 cmd/PowerShell 作比较了。


Shell 语言所提供的功能角度讲,Batch 无疑是这三个当中最弱鸡的,例如没有函数(只能用 CALL 和标签模拟)、没有 switch-case 等等。PowerShell 功能最强,面向对象、并且与 .net 有良好的互操作性,甚至可以嵌入 C# 代码:

       $id = get-random $code = @" using System; namespace HelloWorld {  public class Program$id  {   public static void Main(){    Console.WriteLine("Hello world!");   }  } } "@  Add-Type -TypeDefinition $code -Language CSharp  iex "[HelloWorld.Program$id]::Main()"     

当然 Bash 也能模拟一下面向对象甚至函数式编程,但这不是语言提供的一等功能。PowerShell 也有一个相当明显的缺点,就是跟 bash 相比太啰唆。

Shell 程序所提供的功能角度讲,cmd 仍然是最弱鸡的,例如历史记录无法持久化保存、没有 profile 支持。PowerShell 目前这两点都是支持的。

因此如果有人说 cmd(Batch) 比 bash 差,这完全没有问题。但是要是拿 PowerShell 跟 bash 相比,我认为还是 PS 技高一筹。


下面说一下 Terminal:Windows 自带的那个 conhost 被 Linux 上一众 Terminals 吊打我认为毫无问题,随便就能想得到很多槽点(有一些槽点在 Windows 10 上解决了,但还是很想吐):

  • 字体受限
  • 颜色受限
  • 窗口宽度受限
  • 行选择
  • 默认是当前语言的编码
  • 不支持 ANSI terminal code
  • 功能上的缺失,比如标签页、搜索…
  • ……

由于 conhost 在兼容性上无法妥协,因此有了新的 Windows Terminal。还有很多其他的第三方 Terminal,比如 ConEmu,不过这些都不是“系统自带”的。因此如果有人说 conhost 难用的一批,请不要反驳并加入他们。


最后是围绕命令行界面所构建的生态。从系统管理与维护的角度讲,其实 Windows 与 Linux 并没有太大差距,比如 Windows ServerCore 就是不带桌面环境的 Windows Server。还有很多程序专门提供了 PowerShell Module 来对软件进行管理,例如 CosmosDB Emulator。

但在其他方面(第三方程序的丰富程度、命令行包管理器等),Linux 无疑要比 Windows 强很多,甚至 bash 不喜欢的话还可以换别的。我认为主要原因在于 Linux 的桌面环境不是必需品,用户用什么桌面环境、甚至有没有桌面环境都不一定,而 Windows API 就实实在在在那,还有相当好的兼容性,图形界面又对普通用户更友好。这样的 API 不用白不用,用了不白用,白用谁不用 _(:з」∠)_


user avatar   Ivony 网友的相关建议: 
      

你要拿cmd去和bash比,那是欺负人。


但是你说powershell和bash,本质上来说PowerShell不论是设计理念还是各方面都是全方位领先的。差别主要就是生态和偏见了。

当然,powershell的版本和需要手动安装也是个麻烦事儿。


我这边只随便说一点,PowerShell有完整的dotnet支持,很多问题你要依赖某个小工具的,PowerShell可以直接调dotnet类库来解决。这并不是写个脚本或者程序,而是PowerShell本质上就是dotnet的命令行前端。



其实,有些人真的是非常完美的诠释了什么叫做偏见:

例如大家都熟悉 ls是列目录,非要来一个 dir。

事实上我估计dir比他的年龄都大,而且,你要真说是列目录的话,dir是directory的缩写,ls则是list的缩写,你说哪个更贴近列目录?而dir和ls都是pwsh的alias这种常识我都懒得说了。

更搞笑的是:

都不明白bash的精髓吗?bash的精髓不是语法,而是能将一堆Linux命令轻松的包裹在一起。语法再高级,再完备有啥用,这个世界缺高级动态语言吗?Python够不够?缺的是各种小工具。

真是不好意思,这个精髓被pwsh几乎完全的继承并且发扬光大了,那就是pwsh的管道,说发扬光大是因为pwsh的管道是强类型的。

pwsh内置的绝大多数指令都可以直接通过管道来解决。比如说我们需要递归列出所有a开头的文件,我们会写:

       ls a* -r     

不用怀疑pwsh是完全支持这个脚本的。

好了,我们现在确认了,我们要把这些文件删掉,怎么做?

因为pwsh管道传输的是对象,而且所有的内置指令几乎都支持管道,所以:

       ls a* -r | rm     

完事……你完全不用考虑ls输出的格式是什么,有没有全路径什么的,因为,管道传输的是对象!


你再看看这个精髓,pwsh这个学生,学的不错吧……


更别说,pwsh还有非常强大的where和select……

       ls -r |? Name -like a* |? Length -lt 10000 |select -First 10| rm     

你现在告诉我,这是bash的精髓,还是pwsh的?

我真心觉得这是欺负人……



对了,pwsh还可以呼叫帮凶dotnet:

       ls |? LastWriteTime -gt ([System.DateTime]::Now.AddDays( -100 ))     

数百万个基础类型的小工具够不够?


====================================================

其实大部分人说了半天就是这么一句话:

新东西是不可能学的,这辈子都不可能学的,dotnet又不会,只能用bash这样子,才能维持的了生活这样。用bash就像回家一样,指令个个都是人才,缩写又很漂亮,我超喜欢bash的……

嗯,祝好……


user avatar   pansz 网友的相关建议: 
      

好比我开个银行,免费给你存钱,结果你2秒钟存进去的钱,我告诉你要取钱你得在我这站两星期。你怒不怒?品一品。

其实解决这个方法简单,把上传也限速即可。然而百度是即想要你上传的文件,又不想让你痛快下载,就形成了现在的上传一瞬间,下载一辈子的情况。

哪怕是个免费的服务,如果你上传只要一瞬间的东西下载要花几天一星期才能下来,你都会觉得它在抢劫。

我个人觉得限速是可以接受的,然而网盘这东西跟视频不同,里面的内容是用户免费提供的,你至少要能够提供不低于上传的下载速度,否则这不就是抢劫么,你的就是我的,我的还是我的?


user avatar   chen-bin-88 网友的相关建议: 
      

这两个游戏都有自己的问题。但严重程度完全不一样。

赛博朋克最大的问题是人力不够,没有人手把愿景在限期内做出来,导致后期狂砍。但从已有的成品来看,CDPR是完全有人才有能力把东西做出来的,只不过没时间做。光影效果,已有的垂直城市设计,以及主线和很多支线任务的演出都有毫不输巫师3的气质,尤其是日本城浮空平台那关,无论是游戏流程还是画面还是音乐,都把类似银翼杀手2047的那种气氛和感受做到了极致。有人说CDPR的人才都跑了,或者CDPR傲娇了开始放水,这并不客观。2077确实是个半成品,主机优化的问题尤其严重,但你关注已经完成的部分,用高配置PC玩,其质量并未令人失望,依然是巫师3的水准。

2077就像是一个优等生忘了做背后的几题的考卷,开天窗导致不及格,但已经做了的题目还是正确率极高的。

谈到E3的demo,单从画面上讲你很难说它缩水了。只不过CDPR没告诉你想要E3画面,就得上3080+光线追踪。。。

我猜想没有光追的话,游戏在大多数情况下也是可以达到光追的效果的,只不过人工工作量会很大,有些地方需要离线烘培,而有些地方需要人工设置虚拟光源。CDPR可能发现项目后期工作量太大搂不住了,就上了光追这个大杀器。。。


至于无人深空,现在口碑很好,但我要不客气地讲,这个游戏到了今天依然是垃圾,只配卖$19.95,打折的时候卖2.95的那种。

Hello工作室自始自终都没有把初始愿景实现的技术能力。

你可以看无人深空进入大气层的技术实现。先是一段飞船进入大气层摩擦发红的特效,然后可以看见地形通过一种非常粗糙、视距很近的情况下刷新出来,并且刷出来的地貌和太空中看到的地貌完全不同。所以从头到尾,hello工作室都没有类似精英危险和星际公民的无缝行星登陆技术。

无人深空更新了十几次,并没有触动这个游戏除了机械刷就没有任何深度的本质。这是一个极其无聊的游戏。但它刷了两年的DLC,玩家也就给他点面子,没功劳有苦劳。它每次更新我都会进游戏看看,但玩不了半小时就会放弃。一是实在无聊,二是它美术设计和渲染水平有限,色彩及其刺眼。比如在母船机库里,到处都是亮瞎狗眼的点状光源,但这些光源不会照亮周围的任何东西,看的时间长了有种不带护目镜看焊接的流泪效果。你说更新了那么久,这么简单的问题都不解决,有什么用呢。游戏中随处可见低级设计的痕迹,比如说有很多行星上有一种可以卖钱的球,这种球没有任何贴图,只有亮瞎眼的纯白色材质,在HDR效果下极其刺眼,但它又不是个光源,放在地上不会照亮周围任何东西。这种打开Blender就存盘的建模初手垃圾素材居然也能放在游戏里,真是活久见。

所以无人深空就像是一个学渣冒充学霸,把期望提得无限高,却每题都答错结果接近0分,被骂,然后花了漫长的时间在那里订正,一题一题的改,最后终于接近30分了,然后获得了大家的赞赏,全然忘记了它改了那么久依然是不及格。

无人深空的贴图我就不贴了,首发的时候真是纯垃圾,基本上是2008年魔兽世界首发的那个水准。现在也依然是垃圾,开个HDR看着眼睛都疼。




  

相关话题

  如何评价GPD MicroPC? 
  Windows 上的空当接龙第 11982 关到底能不能通过? 
  Surface 升级 Windows 10 后体验如何? 
  为什么现在还有很多人不肯升级到 Windows 10? 
  Windows 上最小的「HelloWorld.exe」能有多小? 
  windows如何监控文件的修改? 
  linux 操作系统和 windows 操作系统哪个对科研更有效,有前辈能详细讲讲吗? 
  一般人用 Linux 算是找虐吗? 
  各位VIM大神,如何学习VIM,有很多命令感觉都没有什么意思的,如何记忆,熟能生巧耳? 
  假如没有Windows系统、Office套件、Matlab、Ansys等商用软件,您还可以工作吗? 

前一个讨论
大家觉得网上的就医平台对医生的评价客观真实吗?
下一个讨论
能否把PC主机设为私人服务器,出门只带网络终端(手机或平板)?





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