為什麼提到OS X優勢和Windows劣勢的時候都要大說特說Terminal?

只從系統日常應用的角度來講,OS X的Terminal我唯一接觸到的應用也就是簡單的基本文件操作, 複製粘貼刪除修改許可權什麼什麼的。但我想不明白的是但凡能用GUI完成的操作為什麼一定要寫命令行呢?大家都說CMD是渣,可能是功能太少。問題是Windows平時也沒有用CMD的必要啊,任何凡是能通過Explorer直接實現的功能,誰會想去寫CMD呢?用了這麼多年Windows, 想到平常各種GUI無法搞定的要寫CMD的操作,好像也就是禁用休眠、用BCDedit修復引導、修改Bootloader、掛在EFI分區等等這一類的事情了。究竟什麼情況下能體會到「需要一個功能更強大的命令行工具」這種心境呢?

本人幾乎編程盲,實在不了解Terminal在寫代碼寫腳本上的各種神奇效果。但大家真的正經寫代碼的時候不也是各種專門的環境XCode, VS,再不濟也得是個編輯器吧。 Terminal直接搞定主要工作的情形很多嗎?

我身邊用OS X的超多超多,尤其是進了星巴克這種地方,如果哪一次見到一台Win本那簡直是奇蹟,可是所有情況下大家屏幕上也不過就是網頁/PDF/文本編輯/幻燈片/筆記這些東西,還從未見到過誰的屏幕上跑著Terminal滿屏命令行的呀。

各位大神平常OS X的使用習慣到底是什麼樣的,如何才能讓Terminal佔到如此重要的地位以至於成為判定系統優劣的重要標準之一呢?


一個CLI竟然要用滑鼠做copypaste。

聽說Windows 10終於加入hot key了,遲來比沒有好一點。


題主都說自己是個編程盲了,為什麼不先問問是不是,就問為什麼。

至少我身邊這麼多用 OSX 的小夥伴中,沒有人特意地提 Terminal 的好,只有在需要 ssh 登錄遠程伺服器的時候, Terminal 才顯得有那麼些許優勢,不過我在 windows 下用 SecureCRT 也不錯,並不妨礙我的開發工作。

不僅如此,我都基本不用 OSX 的原生 Terminal ,而使用了 iTerm2 。關於後者的好處,有需要的同學可以自行百度,不在這展開做推薦。

如果說讓我推薦一個在 OSX 下對編程開發最友好的東西,那麼毫無疑問是 Alfred ,沒有之一。

如果說不是程序員的話,那麼應該學會使用 Spotlight ,這才是 OSX 下提升工作效率的利器。

相關問題:

藉助 Alfred 2 的 Workflows 功能可以做哪些好玩的事情? - OS X

程序員如何優雅地使用 Mac? - OS X

系統就是拿來給人用的,誰愛用 OSX 就用 OSX ,誰愛用 Win 8 就用 Win 8 ,互相黑來黑去有毛意思……


所以說我一直沒搞懂,說血統純正的 unix shell和說老祖宗留下來的東西一定有他的道理的有什麼區別?!


我兩個都用

在本機寫代碼的時候Win和OSX都用SublimeText

在遠程的開發機的時候Win和OSX都用終端+vim

不會PowerShell

工作在終端的時候,XShell與SecureCRT沒有感覺比OSX上的終端軟體有本質上的不足,最多是字體效果差點啊什麼的,說實話iTerm2那些高級的剪貼板、分屏這類功能我也真的沒在用,用著用著發現跟Terminal.App也沒太大差別。反而是SecureCRT自帶z-modem用著卻非常舒心,而iTerm2為了配個z-modem花了好半天查資料。

Win在這方面輸在使用命令行方式工作在本機很孱弱,本身就沒有那麼多命令行的工具,cmd的體驗也是渣渣,所以很多時候我乾脆不用它命令行了,反正用可視的編輯器開發也不錯。

因為工作在終端,需要經常在不同伺服器上切換,我對zsh/vim這類配置也沒有任何要求,不然哪天我一切換機器上面沒我的配置豈不是很容易抓瞎。事實上我也就只在最最常用的兩三台伺服器上加上了自己的vim配置。

反過來看在大型IDE方面,Visual Studio的體驗也是無可取代的。

結論:

如果用一般編輯器,平手

如果在遠程開發機工作,平手

如果需要用終端操作本機,OSX碾壓式勝利

如果喜歡用IDE,Win碾壓式勝利

對於我自己而言,大部分時候都在遠程的開發機上面寫代碼,所以兩個系統差別不大。反正都是對著一個黑漆漆的窗口……

少數時候我會寫一些自己的玩意,在在OSX上可以用命令行搞些腳本來輔助開發,在Win上可以用Visual Studio,各自感覺也都是非常暢快的,互相不能構成取代關係。


真實的情況是分為3種:

1,大多數小白用戶連答主說的是什麼都不知道,他們根本不會遇到上面的情況

2,就是題主這種類型,可能不了解terminal,可以尋找gui界面的工具來實現

3,類程序員或開發人員,需求或者變更太多,比如修改文件夾許可權,創建用戶,執行腳本,git,修改文件內容,沒有一個gui工具能集成這麼多功能,如果要開發這麼個性化的工具,第一,難用,第二,不好用,所以terminal會是最好的選擇,題主,你試過Vim嗎?很多程序員是重度使用者,可以去問問。

所以說,因人而異,效率最高為第一原則~


1. 數據處理/系統管理用Terminal更方便:

比如看文件有多少行,直接 `wc -l fileA`,把當前文件夾下的文件按照行數排序,直接`wc -l *.txt | sort`, 這東西用GUI做起來多麻煩啊..

2. 不用Powershell是因為大多數伺服器不支持:

比如你買了個雲主機,可能是Amazon的EC2或者阿里雲主機,一般這個主機裝的都是Linux和Bash,沒有Powershell。既然這樣我直接學Bash,Linux上的工具甚至Python/Perl不就完了,何必再多學一個只能在windows上用的Powershell呢?


你真比如說Terminal本身功能豐富也罷(比如 @Cong Qiao 的回答),某些答案說的也是好像Windows下面不能用grep,tail,diff,awk,find一樣。知道某些場景下面某些工具好用,都不知道移植過來,都當Windows程序員傻瓜還是什麼的?一口一個Windows下買軟體啊自我感覺那麼好,不要以為Windows程序員里就沒人用OSX了。


因為windows這麼多軟體但是就是沒有一個好用的ssh軟體,現在伺服器都是linux,所以大家就將目光投向了原生shell 的OS X。一個並不是為大眾設計的功能,用不到的人自然也不會提這事,用到的人總喜歡捍衛自己的習慣,題主看到的不是真實的真相。


terminal的交互是活的,可塑的,取決於你的輸入;

GUI的界面是死的,一個按鈕做一件事,你想做不同的事,新開一個app吧;

mac(linux)的terminal相對windows是優勢是因為windows根本不存在terminal;

terminal是為互聯環境設計的,cmd不是,它最靈活級別的網路可操作性就是telnet。


Terminal 並不比GUI提供更多功能,但是卻能幫助減少重複勞動。

比如我硬碟壞掉後恢復出100+個目錄,其中有一萬餘張圖片,要把其中所有圖片提取出來放到另一目錄中。

CLI用戶可以find ./ -name "*jpg" -exec cp {} "../jpg /;

然後我發現其中有一些qq表情的圖片,它們大小小於200k,於是我把它們複製到一個單獨的文件夾:

mkdir ../emj;find ../jpg -size -100k -exec cp {} "../emj" /;

你感受一下


一天只作一兩次的事,可能GUI還更省事一些。

但如果要作幾千上萬次,或者需要在某些條件下自動作一些事,又或者你讓別人能利用你的智慧一勞永逸的完成一些工作時,你咋辦?

命令行更適用於這些專業需求。


從非程序員的角度說點。

linux/unix/bsd 這些系統的命令行,特別是自帶的一些命令都是按照unix 哲學裡的"do one thing and do it well" 來設計的,所以很多時候我需要完成某個需求並不需要像windows 那樣去找某個特別針對此需求的軟體來實現。

舉個簡單的例子,比如我是個網路工程師,每個月巡檢需要去查看一堆網路設備的運行狀態生成列表。如果在Windows 下面不使用特別的程序來處理的話,在獲得了所有設備的日誌文件後我得在某個字處理軟體里打開這個日誌,然後搜索我需要的那一行結果,然後填入巡檢清單里。

而換做在linux 的命令行下面,我只要打一條命令,它就會把我需要巡檢的內容結果全部列出來。進一步,我再花一點時間把我所要打的命令匯成一個腳本(其實就是簡單的批處理),每月巡檢我就一行命令完成了,這個過程我不需要安裝任何軟體或者懂得任何編程知識。

具體的說,linux下面我只要知道「cat」這個命令是用來顯示文件內容,「grep」這條命令是用來刪選內容,然後用「|」和」&>"這樣的管道符號把兩者連起來就可以了。

再舉個例子,比如有好幾個目錄每天都會有文件更新,為了確保它每天都工作正常我得去查看下這些目錄下的文件是不是最新的,Windows 下面沒特殊程序的話我得每天打開看一遍對吧。

Linux或OSX下面我只要知道」stat「這條命令是用來查看文件系統狀態的,」awk」用來處理文本(這裡我用它顯示最後一行,「mail」這條命令可以用來發郵件。然後把這幾個通過管道符號連起來放到crontab裡面,每天早上我看下郵件就好了。


全是vim黨,emacs不服。蘋果下emacs也是爽爆。

說起來有次上課,渣渣老師說r語言有綁定的emacs可以用。然後來了句,這是mac下專用的。當時我就笑了,名字看起來卻是像mac下專用的。紅紅火火恍恍惚惚


麻煩個別答主的回答不要表現得終端使用得很熟練是一個程序猿基本的素養,不會熟練使用的都是渣渣好嗎?我之前做Windows開發的時候沒用過終端,去年做了一年的Android開發也沒用過終端。如果我在Linux上進行開發我當然要掌握這項能力。這個完全是要看需求的好嗎?

什麼?你說我的圈子不行? 哦,這樣啊?那我就勉為其難地 「奉承」 一下你的圈子比較高大上吧!!


首先覺得這東西看需求吧。。沒有對命令行的需求或者說不喜歡命令行完全可以用GUI。。

然後從個人角度說說Terminal的一些好處。。覺得Terminal可以簡單的完成很多工作。。比如vim。。可以在雙手不離開鍵盤的情況下碼代碼編譯調試運行。。。還有一些工具。。直接輸一些簡單的命令就好了。。。習慣的人可能會覺得比GUI不知道高到哪裡去了。。

所以說這東西最終還是看習慣和需求。。最適合自己效率最高的永遠是最好的。。


呃可能還是因為大家不太會用PowerShell。。。

主要是PowerShell的命令完全是另一套語系的感覺,所以習慣*nix體系的不願重新學習的碼農當然會瘋狂吐槽(

==

我覺得有些人的答案很有趣啊,一邊說「世界是多樣的」,一邊否定別人使用Windows的方法。

本身,Windows Server的正確管理方式就是PS和RD,從多年前開始就所有的專業版Windows里都預置了PS和RD,而且PS不僅預置了PS,還預置了PS ISE,最新版是2013年針對PS4.0推出的PS-ISE。

ISE自帶Intellisense和tab補全,控制台或是腳本編輯器右側就有幾乎所有命令的參考和檢索。我在13年時用了大半年的Windows Server 2008,從配置MSSQL到Sharepoint Server到搭建實驗性的http://ASP.NET站,全部命令都可以直接用PS-ISE完成,整套東西從零開始學一共三四天就很熟練了(雖然現在忘的差不多了)。我敲的最多的按鈕除了空格就是tab鍵,你跟我說它補全殘次命令行OO有病?

==

PS、PS-ISE、RD本來就是針對Windows設計的,在Windows到Windows下好用就行,你跟我扯什麼*nix?

照你這麼說的話是不是ssh 得對Windows有良好支持才算好啊?

真是可笑lol


terminal是針對程序員的。你不寫程序當然不明白terminal的重要性。而且你也沒有必要去研究這個。


Terminal 是純流式文本界面, 用 Terminal 就和聊 QQ 一樣, 有什麼難理解的...

IDE 編輯器也都是文本界面, 介於流式和結構式之間

字處理軟體, 網頁表單就是比較結構化的文本界面了

界面結構化程度越高, 限制越多, 被你搞砸的可能性越低, 不過自由表達能力也越弱

不過越來越少的人使用端末, 其實是因為網路端末遺傳子正在逐漸消失!

(過兩周出第 8 話, 別忘了看喲)


因為 DEC 的小型機沒有顯卡,IBM PC 有。

人類想像出的所有外星人,都是地球生物的排列組合。


哎喲,不友善內容了,真好玩。保留核心內容吧:

夏蟲不可語冰,你不是搞技術的,你的工作生活全部都不需要Terminal,自然無法理解Terminal的好處。


推薦閱讀:

你怎樣在 OS X 里組織文件?
如果 Windows 系統全套源代碼(技術文檔)泄漏,會發生什麼?
控制面板和設置在 Windows 10 正式版中會被合併嗎?
windows的記事本有存在的價值么?
為什麼 Windows 中的軟體不像 Android 中的應用一樣強制自啟動?

TAG:macOS | MicrosoftWindows | 操作系統 | 編程 | 代碼 |