為什么很多程序員都建議使用Linux?
本文轉載自微信公眾號「前端壹讀」,作者前端壹讀 。轉載本文請聯系前端壹讀公眾號。
在知乎上有這么一個問題:為什么很多程序員都建議使用Linux?在這個問題上我其實有挺多想聊的,雖然比不上專門用C/C++編譯的工程師了解的那么底層,也比不上運維工程師每天接觸Linux,但是我們的工作中還是會接觸到不少Linux的,今天我們來討論一下學習Linux的必要性以及帶來的價值。
發展歷程
相信對Linux系統有一些了解的童鞋都聽過這么一個故事,Linux是一名芬蘭的學生Linus Torvalds在Unix系統的基礎上開發的,并發布在學校論壇,最后火了起來。但是這么說并不十分的準確,Linux的故事緣起于更早的UNIX系統。
UNIX
說到Linux,就不能提到大名鼎鼎的UNIX系統,在上世紀60年代末的時候,那時候計算機系統還是批處理的,在又大又笨的大型機器上運行,要先將程序卡片裝入設備,然后等1個小時后才能取運算的結果。不僅慢,還很廢紙。
于是美國電話電報公司(下面簡稱AT&T公司)下面的貝爾實驗室聯合麻省理工學院及美國通用電氣公司本來是打算開發一個大型機上的多人使用、多任務、多層次的操作系統multics。但是multics這個系統步子邁得太大了,貝爾實驗室認為這個項目周期長、成本高,不久就撤資了,各方也陸續退出,項目于是涼涼了。
但是貝爾實驗室下面的兩個研究員肯·湯普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)對項目關閉很失望,因為他們在這個系統上開發了一個游戲太空旅行(Space Travel),實驗室的其他人員對這個游戲玩得也很上頭。
太空旅行游戲
于是,為了能夠繼續玩游戲,肯·湯普森和丹尼斯·里奇決定自己開發一個操作系統;是的,你沒有看錯,大神就是大神,出發點都異于常人??稀丈襾砹艘慌_五年前老舊的PDP-7小型機,雖然稱為小型機,但是也有一間屋子那么大!
PDP-7小型機
正好在這段時間,他老婆帶著孩子回娘家住了3個禮拜,也就是說他有整整3個禮拜沒有人打擾他的工作。
這件事告訴了我們,一個男人想要搞大事,老婆不在家是多么的重要!
在這臺機器上,他首先重寫了游戲,然后想要開發一個全新的操作系統,由于有之前multics系統的經驗,在一個月內他很快完成了內核系統、文件系統、編輯器、編譯系統的工作。1969年第一版的UNIX系統正式誕生了。
在《UNIX傳奇》一書中,提及了UNIX系統的高光時刻,上映于1993年的科幻冒險電影《侏羅紀公園》相信不少同學肯定對這部老電影仍舊印象深刻;其中一個名場面,哈蒙德教授的孫女就是操作UNIX系統,關閉了閘門,從而拯救了一行人,有興趣可以重溫B站視頻片段。
這個故事告訴了我們,多學一門操作系統,在關鍵時刻說不定能夠保命。
電影片段截圖
但是UNIX是由不少使用匯編語言完成的,匯編語言用來編程不夠強大,也不具備很好的可移植性,于是1971年丹尼斯·里奇在B語言的基礎上開發出了C語言,1973年UNIX也用C語言進行了重寫,隨后發布了4、5、6幾個版本的UNIX。此后,UNIX被政府機關、研究機構、企業、大學紛紛注意,并逐步流行;隨著UNIX系統的廣泛流行,C語言也成為了最受歡迎的語言之一,一直延續至今。
電影片段UNIX系統界面
一開始AT&T公司也沒有把UNIX當回事,畢竟不是正式的項目,況且在操作系統上(multics)還吃過大虧,也就沒想拿它賣錢,因此被免費提供給大學使用,甚至直接給V7版本的源碼以做研究。
因此在后面的10年,UNIX在各個學術機構得到廣泛應用,甚至許多機構在此源碼基礎上加以改進,其中最著名的變種之一是由加州大學柏克萊分校開發的BSD產品(Berkeley Software Distribution),在此基礎上又誕生了三條分支:FreeBSD、OpenBSD和NetBSD,就連蘋果電腦的內核Darwin所使用的NextSETP也是BSD的衍生版本。
AT&T公司一看,喲呵,UNIX居然這么火,于是意識到了UNIX巨大的商業價值,不再將UNIX源碼授權給學術機構,并對之前的UNIX及其變種聲明了版權,后面引發了各種曠日持久的版權糾紛,這是UNIX的后話。
UNIX
Linux
時間來到了80年代,隨著AT&T公司閉源UNIX系統,在學校里給學生用的操作系統很少;當時計算機主要使用的操作系統有UNIX、MS-DOS和MacOS這幾種,UNIX已經開始商用,比較昂貴,僅局限于大型機;MS-DOS系統比較簡陋,且源代碼被軟件廠商嚴格保密;而MacOS大家肯定也都知道,是專門用在蘋果計算機上的系統,而且當時應該沒有黑蘋果一說。
1987年當時在荷蘭阿姆斯特丹Vrije大學當教授的美國人安迪·塔內鮑姆(AndrewS.Tanenbaum)為了讓學生更好的理解操作系統的原理,就仿照BSD的源代碼,編寫了一個類UNIX系統,取名為MINIX,意為迷你的UNIX,并且開放全部代碼給大學教學和研究用;既然是MINI,它的代碼體量也是比較小的,全部代碼共約12000行,而且只是一個教學工具,沒有什么實際的應用價值。
1991年,我們的主人公Linus Torvalds(簡稱Linus)在芬蘭赫爾辛基大學期間,開始對UNIX產生了濃厚的興趣;在校期間,由于Linus經常要用他的終端仿真器(Terminal Emulator)去訪問大學主機上的新聞組和郵件,他對MINIX只允許在教育上使用很不滿,同時也為了方便讀寫和下載文件,他開始寫屬于自己的類UNIX系統;在一個暑假沒日沒夜的開發中,最終開發出了Linux的第一個內核(0.02版),并取名Linus' Minix,后來改名為Linux。
Linus Torvalds
1991年10月Linus在Minix新聞組發布消息,對外宣布Linux內核的誕生,并公開了內核源碼;公開后Linux因為結構清晰、功能簡潔,一經發布立即收受好評;后來在很多熱心支持者的幫助下,經過多次版本升級迭代,終于在1994年3月,Linux1.0正式發布。
Linux的標志和吉祥物是一只叫做Tux的企鵝,它的由來是因為Linus之前在澳洲時,在動物園里曾被一只企鵝咬了一口,便選擇了企鵝作為Linux的標志。
如同當初湯普森和里奇沒有想到UNIX系統的成功一樣,Linus也沒有想到自己花了一個暑假做著玩的內核系統,竟然能以商品化操作系統的形態,運行在今天全球數十億臺設備上。
在Linux的官網,有這么一篇文章,什么是Linux,詳細的介紹了Linux的功能、內核每個部分作用,以及為什么我們要使用Linux,感興趣的童鞋可以看看。
Linux與UNIX的區別和聯系
我們上面提到了一個詞:類UNIX系統,那什么是類UNIX系統呢?
類UNIX系統是指繼承UNIX的設計風格演變出來的系統。
類UNIX系統就是長得像UNIX、但實際不是UNIX的系統;其實本質上就是借鑒了UNIX系統的界面、特性(多用戶、多任務等),但是沒有直接抄人家的源代碼,畢竟人家是有版權限制的,因此更多是思想理念上的傳承。上面提到的BSD、MINIX系統,以及Linux系統都屬于類UNIX系統。由于UNIX標準認定價格昂貴,所以目前唯一獲得UNIX標準認定的為蘋果的MACOS系統。
Linux系統和UNIX系統主要有以下區別:
- 開源性:UNIX是閉源的,Linux是開源的。
- 跨平臺性:UNIX系統大多是與硬件配套的,只能在工作站或小型機上運行,且價格昂貴;而Linux則可運行在多種硬件平臺上。
Linux發行版
我們很多時候都能看到Linux發行版這個詞,或者又看到說Linux內核怎么樣,很多同學容易混淆這兩個概念。其實當初Linus開發的Linux只是一個內核,是一個提供設備驅動、文件系統、進程管理、網絡通信等功能的系統軟件,是硬件和軟件之間進行通信的橋梁,內核并不是一套完整的操作系統;我們可以把內核理解為手機的芯片,有了芯片,手機的各個功能才能運行起來,因此內核是整個操作系統的核心。我們在The Linux Kernel Archives網站可以下載到各種版本的Linux內核,并且對其進行編譯。
內核是操作系統重要組成部分,接近于物理硬件,不是操作系統。
我們常說的Linux系統,其實更多說的是廣義上Linux眾多的發行版,因為你并不會直接去操作系統的內核。發行版是指一些組織或廠商將Linux的內核與各種軟件、軟件包管理器等封裝起來,并提供系統安裝界面、系統配置和桌面環境等,構成了Linux的發行版。相當于小米、VIVO的手機廠商,將芯片集成到手機里,裝上屏幕、外殼、揚聲器、電池等等部件,然后把手機整個的賣給你。
Linux的各個發行版使用的是同一個Linux內核(內核版本可能有差異),因此在內核層不存在什么兼容性問題;每個發行版有不一樣的感覺,只是在發行版的最外層(比如界面、包管理器)才有所體現。
uname -srm命令可以查看Linux系統的內核版本號。
Linux的發行版本有很多,其大體可以分為兩類:
- 商業公司維護的商業版本,以著名的Red Hat為代表;
- 社區組織維護的免費版本,以Debian、Ubuntu為代表。
有些同學可能會開始疑惑了,上面不是說Linux是開源的嗎?為什么還會有商業版?是的,Linux內核是開源的,但是開源不等于免費,商業版收費的是它的商業服務和支持。
比如Red Hat雖然使用的都是開源軟件,但是付出了很多人工將成千上萬的開源軟件整合成一個系統,并且保證軟件間的兼容性穩定性,提供后續的支持、維護以及升級服務,因此它是收費的;如果你氪金氪了足夠多,比如購買他們的高級服務,你甚至可以讓Red Hat的工程師現場過來給你解決問題。
很多同學可能還是覺得開源收費不太能理解,但其實如果你去嘗試編譯多個開源軟件,或者在操作系統時遇到一些莫名其妙的錯誤,然后你花費幾天找遍github、stackoverflow和Google也沒有找到問題而苦惱時,你會覺得如果有人能夠幫你解決問題是一件非常高興的事。更何況企業項目在運行時往往都會追求快速上線,計時按照天甚至小時,這個時候快速解決問題就顯得非常的重要;這點費用對于企業來說是非常劃算的。
這件事告訴了我們,天下沒有免費的午餐,免費往往是最貴的。
下面我們簡單介紹幾個常見的Linux發行版本。
Red Hat
Red Hat(紅帽公司)創建于1993年,是一家開源解決方案供應商,部位于美國北卡羅來納州的羅利市。
1993年,Bob Young 成立了ACC公司,這家公司主要是做郵購業務,主營業務是出售Linux和Unix的軟件附件。1994年,Marc Ewing創建了自己的Linux發行版,并將其命名為:紅帽Linux,Ewing在就讀卡內基·梅隆大學期間曾經戴著一頂紅色的康奈爾大學長曲棍球帽子,這是他的祖父贈送給他的。Young在1995年收購了Ewing的企業,兩者合并成為紅帽軟件公司,由Young擔任首席執行官。
Red Hat
Red Hat公司的產品主要包括RHEL(Red Hat Enterprise Linux,收費版本)和 CentOS(RHEL 的社區克隆版本,免費版本)、Fedora Core(由 Red Hat 桌面版發展而來,免費版本)。
Fedora
Fedora Linux是由Fedora項目社區開發、紅帽公司贊助,目標是創建一套新穎、多功能并且自由的操作系統。
Fedora對于用戶而言,是一套功能完備、更新快速的免費操作系統;而對贊助者Red Hat公司而言,它是許多新技術的測試平臺,因此它的穩定性不如Centos。
Fedora
CentOS
CentOS可以理解為是基于Red Hat商業版系統的社區編譯重發布版,完全開源免費,因此相較于其他一些免費的Linux發行版會更加穩定,也因此一般企業里常用作服務器操作系統。
Debian
Debian是目前世界最大的非商業性Linux發行版之一,是由世界范圍1000多名計算機業余愛好者和專業人員在業余時間制做。
Ubuntu
Ubuntu是基于Debian發展而來,界面友好,容易上手,對硬件的支持非常全面,是目前最適合做桌面系統的Linux發行版,而且Ubuntu的所有發行版都免費提供,也是筆者個人非常喜歡的一個Linux發行版。
Ubuntu的創始人馬克·沙特爾沃思(Mark Shuttleworth)是一名有傳奇色彩的南非人,他在大學畢業后創建了一家安全咨詢公司,后以5.75億美元被收購,一躍成為南非本地的富翁。2002年馬克自費乘坐羅斯聯盟號飛船,在國際空間站中度過了8天的時光,之后創立了Ubuntu社區。他說太空的所見正是他創立Ubuntu的精神所在。Ubuntu這個詞也是來源自非洲一個部落,意思是"人性""我的存在是因為大家的存在",是非洲傳統的一種價值觀。
Ubuntu官網
作為Linux發行版中的后起之秀,Ubuntu在短短幾年時間里便迅速成長為從Linux初學者到實驗室用計算機/服務器都適合使用的發行版。
如何選擇
Linux系統的發行版有很多,就不逐一介紹了,在《Linux從入門到精通》一書中整理了不同的發行版;我們如何來選擇不同特性的版本呢?
- 如果你需要一個服務器系統,想要一個比較穩定的服務器,可以選擇CentOS或者RHEL。
- 如果你需要桌面系統,既不想用盜版,也不想在系統配置上浪費太多時間,可以選擇Ubuntu。
- 如果你喜歡折騰新功能特性可選Fedora。
Linux的優勢
相信計算機科班出身的同學在大學里都會接觸一門課程:計算機操作系統,筆者在大學里,這門課老師讓用過一段的時間的Ubuntu開發,做做作業,當時覺得命令行shell就像深不見底的黑洞,太麻煩了,完全沒有圖形化界面來的方便快捷;但是工作了一段時間,接觸了一下Linux系統,熟悉命令行之后,哎,真香,比Windows好用多了
簡單介紹一下,筆者也算是Linux系統中度用戶吧,個人桌面系統主力雖然是Windows 10,主要是由于之前系統存了很多文件資料等;目前轉向使用Ubuntu 22.04系統;自己將家用閑置的一臺電腦改造成為家用nas系統,搭載CentOS 7,因此改造的過程中接觸了不少Linux系統的命令,于是就開始自學并喜歡上。
我相信很多童鞋開始學習和使用Linux系統應該和我一樣,主要是在工作中開始的,因為畢竟Linux系統下娛樂、游戲、社交功能有限,全面使用Linux系統會帶來一定的限制(主要是沒有微信),我平時也是將Linux系統作為日常工作和編程開發的一個補充。
PS:steam平臺也支持Ubuntu了,QQ推出了全新的Linux3.0版本。
下面簡單的介紹幾個覺得使用Linux系統的個人推薦看法吧,僅供參考。
界面優雅美觀
常言道:始于顏值,陷于才華;看慣了Windows下千篇一律的圖標,說實話,使用Ubuntu 22有一部分原因確實是被它的界面所吸引的。
Windows圖標
打開Ubuntu系統,我們會發現,整體的風格非常簡潔優雅。
Ubuntu桌面
很多剛從Windows轉過來的小伙伴(包括我自己),一開始接觸Ubuntu桌面,會常常感覺不習慣,經常會疑惑:
桌面的那些我的電腦、回收站等圖標都去哪了?
包括在安裝完很多應用后,我們發現這些應用也不會在桌面留下任何痕跡,沒有Windows軟件那種安裝完后,還要死皮賴臉的請求你創建桌面快捷方式,還給你默認勾選;只要一不留神,你的桌面說不定就多了三四個不常用的圖標。
因此在Windows系統,我們用過一段時間后會有各式各樣繁雜的圖標存在;但是Ubuntu就不會有這樣的煩惱,用了幾個月,我的桌面也僅僅只有剛開始的主目錄文件夾存在,加上Foxit Reader創建的一個圖標,僅此而已。
Ubuntu界面的設計者考慮到,大部分用戶在工作時,桌面上的圖標幾乎都是被應用窗口遮住,把窗口移開來查找想要的應用是一件非常痛苦的事,因此停用了桌面圖標,改用在應用程序中提供了入口;點擊右下角的按鈕,我們可以看到所有的程序。
所有應用程序
對于一些常用的程序,我們可以將它固定到下方的程序塢中,方便隨時訪問。Ubuntu給了我們一個干凈的環境,讓我們能夠更專注于當前的工作環境,更少被其他彈框打擾;因此更適合用來干活。
開源
開源帶來的一大顯而易見的好處就是,你不用每次安裝完系統去找各種Windows激活工具了,相信很多小伙伴都有裝完系統被下面各種軟件支配的恐懼,不裝的話系統各種提示,裝了又怕有風險。
Windows激活軟件
開源意味著使用者可以免費自由使用、查看和修改系統的源代碼,這種完全開放透明的架構對于政府機構或者特殊需求的組織等來說是非常重要的。
同時你會發現Linux系統有廣泛的硬件支持,甚至可以拿出一臺上個世紀老舊的intel奔騰3處理器來運行也能很流暢;正是得益于開源的特點,很多程序員不斷地向Linux社區提供代碼,使得Linux有著豐富的設備驅動資源,對主流硬件有著很好的支持,幾乎能運行在所有主流的處理器上。
在超贊的Linux軟件這篇文章中,作者整理了非常多Linux中開源的軟件,也都是日常很實用的軟件。
系統安全穩定
系統安全穩定之于電腦,如同法律對于人們,是最基本的要求和準則。大多數小伙伴應該也是從Windows開始接觸計算機和網絡的,因此覺得Windows也能滿足日從的工作需求。但客觀來說,在安全性、高性能方面,Windows相比Linux依然有不小的差距。
使用Windows過程中相信大家在日常中會遇到不少卡頓、藍屏的情況發生;筆者在之前的公司就遇到IT裝完系統,一段時間經常藍屏死機的情況發生,然后數次重裝系統,這在辦公時是及其痛苦的。
Windows藍屏
但是Linux系統極少出現卡頓情況,除非你運行多個大型的軟件。在我實際的體驗中,在同一配置的電腦中,運行相同多軟件的情況下,Linux系統的流暢度是明顯優于Windows電腦的。
在Windows中,我們經常會遇到磁盤空間不夠的情況,尤其是C盤空間,很多軟件都會默認安裝到C盤(比如Chrome),或者將緩存文件放到C盤,過一段時間就需要清理;但在Linux系統中不需要。
首先Linux系統安裝完成后,本身不會占用太多的磁盤空間,占用較少的資源;其次Linux系統自身的樹形目錄結構已經將每個文件的位置規范了,/home是用戶目錄,/usr軟件目錄等等進行劃分,我們可以將硬盤格式成一個區,然后直接掛載根目錄。
樹形目錄結構
正是由于Linux系統的安全穩定高效,因此Linux天然適合用來做服務器;無論是企業級的大型服務器,還是最近流行的家用nas系統;無論是你用的手機操作系統,還是看家用大屏電視機,亦或是小巧的機頂盒,Linux系統出現在生活中的各個角落。
總結
要想學好Linux,不能只記住幾個命令,最好的方式是為自己搭建一個Linux的環境,在真實的環境下進行學習;Ubuntu就是一個比較適合初學者的發行版;如果怕裝系統麻煩,最簡單的方式是在Windows10下安裝Ubuntu子系統體驗,參考安裝教程,不過有一些命令會被閹割。
如果手頭有閑置移動硬盤,想要真實體驗一下Ubuntu系統(虛擬機體驗不好),又不想舍棄Windows系統,可以將Ubuntu環境安裝到移動硬盤,打造自己的個人移動工作平臺;這樣你不管是在辦公室還是回家干活,只需要隨身攜帶一塊小小的硬盤就能輕松將工作用到的所有資料打包帶走,保持工作的進度和環境。這里推薦筆者自用的國產的致態1TB SSD固態和綠聯M2移動硬盤盒組合,方便打造自己的Ubuntu To Go環境。
剛裝完系統,看著空蕩蕩的桌面,你可能會不知所措,可能會迷茫Ubuntu系統下可以做什么?;雙擊安裝exe不再存在了,而是通過命令行來安裝,甚至連接網絡也要敲命令,當你熟悉命令行的環境后,你會發現這是一種高效的方式,也是另一種的體驗。借用一位知乎前輩的話:
Windows為不知道自己正在做什么的人設計,Linux為知道自己要做什么,正在做什么的人設計。
在這里,你可以做任何事,你可以熱衷于更換各種酷炫的桌面和主題,也可以享受學習帶來的無窮樂趣;先是命令,再是shell腳本,搭建服務器,學習數據庫,部署自己的網站等等;我相信,你也會喜歡上這個簡潔而優雅的開源世界。