我為什麼使用Linux做開發

来源:https://www.cnblogs.com/lvlaotou/p/18066245
-Advertisement-
Play Games

系統選擇 目前市面上主流的桌面操作系統在大多數人眼裡只有Windows和MacOS,那為什麼我沒選擇它們兩呢? 首先,不選MacOS的原因,就是太貴。當然這是我的原因不是蘋果的原因,我最早使用Linux寫代碼的時候是2018年,那時候剛畢業上班不久,根本買不起Mac(雖然現在也覺得有點貴)。 在沒有 ...


系統選擇


目前市面上主流的桌面操作系統在大多數人眼裡只有Windows和MacOS,那為什麼我沒選擇它們兩呢?

首先,不選MacOS的原因,就是太貴。當然這是我的原因不是蘋果的原因,我最早使用Linux寫代碼的時候是2018年,那時候剛畢業上班不久,根本買不起Mac(雖然現在也覺得有點貴)。

在沒有接觸Linux之前,我也是使用Winows的。眾所周知,其實Windows也是收費的,那時候用的基本是破解版本的Windows系統。雖然當時買筆記本電腦會預裝Windows系統,但是預裝的基本都是家庭版。依稀記得當時Windows家庭版無法開啟某些Windows功能(沒記錯的話當時是無法開啟Windows的虛擬化功能),所以就算我買了預裝Windows系統的筆記本電腦,依然還是需要自行重裝Windows專業版系統,那時候就是使用激活軟體破解Windows專業版。但是作為程式員,我個人是很反感破解軟體的,因為我不想以後我寫的軟體也被別人破解。然後在某些機緣巧合之下,我加入了一些Linux愛好者社區,慢慢開始接觸Linux桌面。

重新認識Linux


我第一次接觸Linux是大學的課程,那時候教學用的是Centos。那時候在我印象中Linux就是黑乎乎的命令行視窗,只能部署一些服務端的的程式,畢業以後從事Java後端開發,接觸的Linux也是服務端版本,所以我根本不知道Linux還有桌面環境!

直到一次偶然的機會,在B站刷到一位大佬自己整活的Linux桌面,相當個性化,讓我深受震撼。然後就開始根據視頻信息去搜索Linux桌面相關的知識,也因此加入了一些Linux社區,從此開始我的Linux桌面探險之旅。

Linux桌面


在開始介紹我的Linux探險之旅前,先簡單說一下Linux的組成,Linux的組成部分可以分為以下三個主要部分:

  1. Linux內核(Kernel): Linux內核是操作系統的核心,負責管理硬體資源,提供系統服務,以及允許軟體應用進行控制硬體的基礎。它是一個由Linus Torvalds在1991年首次發佈的開源軟體項目,至今仍在不斷的發展和更新中。GitHub - torvalds/linux: Linux kernel source tree
  2. Linux發行版(Distributions): Linux發行版是基於Linux內核的操作系統,包括了內核以及一套完整的軟體和應用程式,如GNU工具集、桌面環境、辦公軟體等。每個發行版都可能有不同的包管理系統、預設桌面環境、預裝軟體、用戶界面以及獨特的安裝和配置工具。常見的Linux發行版包括Ubuntu、Fedora、Debian、CentOS、Arch Linux、Red Hat Enterprise Linux等。
  3. 桌面環境(Desktop Environment, DE): 桌面環境是提供圖形用戶界面(GUI)的軟體集合,使得用戶可以通過圖形視窗和菜單進行交互,而不是僅通過命令行。桌面環境通常包括視窗管理器、圖標、工具欄、文件管理器、終端模擬器等組件。常見的桌面環境有GNOME、KDE Plasma、XFCE等。

Linux內核和發行版以及桌面環境的組合提供了所需的完整Linux桌面系統。用戶可以根據自己的需要選擇合適的發行版和桌面環境,以滿足個人偏好和特定用途。

這裡再順便提一下GNU和Linux的關係,可能大家經常會看到”GNU/Linux“這樣的辭彙。

GNU和Linux是兩個密切相關但各自獨立的概念,它們共同構成了現代Linux操作系統的基礎:

GNU: GNU是一個自由軟體操作系統項目,由Richard Stallman在1983年啟動,目的是創建一個完全由自由軟體組成的操作系統。"GNU"是"GNU's Not Unix"的遞歸縮寫,表明GNU雖然類似於Unix,但不包含任何Unix代碼。GNU項目創建了許多用於操作系統的核心組件,如GNU Compiler Collection (GCC)、GNU C Library (glibc)和GNU Core Utilities (coreutils)。GNU項目也提倡自由軟體哲學,推動了GNU通用公共許可證(GPL)的編製和普及。

今天談論的Linux操作系統,通常指的是"GNU/Linux"系統,它是指使用Linux內核和GNU軟體及工具的操作系統。Linux提供了操作系統的核心,即內核,而GNU提供了構建完整操作系統所需的許多基本工具和庫。

但是大多數情況下,通常將整個操作系統簡稱為"Linux",但嚴格來講,當包括了大量GNU軟體的時候,它應該被稱為"GNU/Linux"。

那些年我折騰過的Linux桌面


上面給大家說了,在安裝Linux的時候我們需要考慮三個部分,Linux內核、發行版、桌面環境(DE)。但是發行版其實就是Linux內核+工具集,所以發行版是依賴Linux內核才能運行的。因此大多數時候你選擇了一個發行版裡面就包含了內核,就不需要再選擇Linux內核了(安裝完成後可以更換內核)。

而我第一款Linux桌面系統是Ubuntu+GNOME(DE 桌面環境)的組合。至於為什麼是Ubuntu+GNOME,因為在那時候我只接觸過Centos和Ubuntu。而我去網上搜索Centos和Ubuntu的桌面版本時,大多數網站都是建議Ubuntu桌面,事實上也是如此。而Ubuntu桌面版預設的桌面環境(DE)就是GNOME。

這麼多年過去了,我陸續使用過很多Linux發行版和DE的不同組合。發行版使用過Manjaro、大蜥蜴、Debian、Deepin(非UOS)、Arch、CutfishOS等,桌面環境使用過GNOME、KDE、XFCE、DDE(國產Deepin DE)、I3等。目前(2024-03-11)使用的是Arch+KDE,在寫這篇文章的時候剛好KDE6發佈了,這幾天也折騰了一下KDE6,給大家看看效果:

使用Linux遇到的問題?


上面講了我是如何選擇Linux桌面的,接下來講講大家可能最關心的問題,那就是Linux桌面能不能像Windows和MacOS那樣正常辦公或者開發?

Linux桌面相比Windows和MacOS目前最大的問題就是生態,我記得我剛開始使用Linux桌面的時候國內很多軟體都沒有Linux版本,大多數情況下都是使用Wine等技術來相容使用Windows版本。目前情況改善了很多,目前主流的國產辦公軟體都有Linux版本了,比如我們常用的釘釘、飛書、騰訊會議等。QQ、微信也都出了Linux原生版本。

這裡不得不吐槽一下騰訊了,QQ是2023年開始推出全平臺重構版本的,在這之前的QQ Linux版本幾乎就不可用;而微信截至目前(2024-3-11)還只有一個原生Linux測試版本,而且還有白名單限制僅限UOS和麒麟系的Linux發行版使用。反觀人家WPS,Linux版本的WPS一直都沒有廣告,雖然前不久WPS也官宣Windows版本去掉廣告了,而且WPS Linux版本一直活躍更新,功能也不比Windows版本少。

而開發相關的軟體,作為Java後端常用的Idea、DataGrip、Navicat等都有Linux版本,其他的開發工具大多數也都有Linux版本,比如VsCode。這裡不得不說國外的軟體在全平臺支持上確實要比國內軟體好太多了。

這裡給大家列一下我常用的一些軟體:

功能 軟體名稱 官方地址
截圖 Flameshot https://flameshot.org/
郵件 Mailspring https://www.getmailspring.com/
文件管理 Spacedrive https://github.com/spacedriveapp/spacedrive
文檔處理 Wps https://www.wps.com/office/linux/
看圖 Gthumb https://github.com/GNOME/gthumb
SSH Xterminal https://xterminal.cn/
視頻剪輯 Kdenlive https://kdenlive.org/zh/
字幕 Arctime https://arctime.org/
Java IDE IntelliJ IDEA https://www.jetbrains.com/idea/
DataBase IDE DataGrip https://www.jetbrains.com/datagrip/
Vpn V2raya https://v2raya.org/
輸入法 Rime + Fcitx5 https://rime.im/
文本編輯 Neovim https://neovim.io/
系統備份 Timeshift https://github.com/linuxmint/timeshift
介面測試 Insomnia https://insomnia.rest/
Redis客戶端 Redisinsight https://github.com/RedisInsight/RedisInsight
終端 Warp https://www.warp.dev/

Linux桌面的優缺點


在這裡總結一下我認為的Linux桌面的優點和缺點。

  • 優點:
    1. 開源免費,無論是Windows還是MacOS都是收費的,而Linux是開源免費的,開源項目總比閉源項目在安全性上更可靠。
    2. 發行版眾多,Linux有很多發行版,可以根據自己的喜好選擇不同的發行版,不會像Windows和MacOS那樣被一家公司或者組織束縛。
    3. 自由度高,Linux上面你可以隨便折騰,一個發行版可以換不同的桌面環境,不會像Windows和MacOS那樣只有一個桌面環境,而且桌面環境可以高度個性化。
    4. 穩定性好,Linux的穩定性比Widnows要好很多,這也是伺服器操作系統大多數都是Linux的原因之一。
    5. 技術支持好,這個跟發行版有很大的關係,比如我正在使用的Arch Linux,有非常完善的Wiki系統,而且有非常活躍的社區。當你在使用中出現問題,絕大多數情況下你都可以在Arch wiki上找到解決方案,極少數找不到解決方案的問題你也可以在Arch社區發帖提問,會有很多熱心的大佬給你提供建議和幫助。這點我想如果你不是Widnows企業用戶的話估計很難得到技術支持。
  • 缺點:
    1. 軟體生態差,目前Linux相比Windows和MacOS最大的問題就是軟體應用生態不足了,但是如果只是普通辦公和開發也完全足夠了。
    2. 對新手不友好,雖然Linux桌面環境已經在努力改善了,但是依然會出現很多和開發相關的名詞和知識,對於非電腦行業的朋友可能不太友好。
    3. 游戲支持差,對於喜歡玩游戲的朋友來說,Linux就不適合了,雖然Steam也有Linux版,但是裡面可玩的游戲很少。

上面的優缺點我認為是對所有人都適用的,我作為Java後端使用Linux開發還有其他的優勢:

  1. 容器化技術原生支持,比如Docker,就是使用Linux命名空間(namespaces)和資源隔離(CGroups)實現的。
  2. Linux上寫的Java代碼直接部署在Linux伺服器上能避免一些操作系統差異引起的bug,雖然Java號稱跨平臺的,但是還是可能會因為一些操作系統上的差異導致的bug。比如Tomcat預設埠是80,如果你在Widnows上開發是能正常運行的,但是你將寫好的程式打包到Linux上以非root用戶是無法運行的,因為Linux上1024以下的埠是普通用戶無法使用的。
  3. 能學習更多的Linux知識,對於工作中需要使用Linux的人來說,這確實能提升技術能力。

以上就是我分享的為什麼使用Linux做開發的經驗,當然也不是勸大家使用Linux桌面,這個根據個人情況自己決定,本文只是純經驗分享。

本文使用 markdown.com.cn 排版


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、基礎知識 1、Lucene 是什麼 Lucene 是一個本地全文搜索引擎,Solr 和 ElasticSearch 都是基於 Lucene 的封裝 Lucene 適合那種輕量級的全文搜索,我就是伺服器資源不夠,如果上 ES 的話會很占用伺服器資源,所有就選擇了 Lucene 搜索引擎 2、倒排索 ...
  • Java HashMap HashMap 是一種哈希表,它存儲鍵值對。鍵用於查找值,就像數組中的索引一樣。HashMap 的優勢在於它可以使用任何類型作為鍵,並且查找速度很快。 創建 HashMap // 導入 HashMap 類 import java.util.HashMap; public c ...
  • 一、什麼是 Java Java 是 Sun Microsystems 於 1995 年首次發佈的一種編程語言和計算平臺。編程語言還是比較好理解的,什麼是計算平臺呢? 計算平臺是電腦中運行應用程式(軟體的環境),包括硬體環境和軟體環境。一般系統平臺包括一臺電腦的硬體體繫結構,操作系統、運行時庫。 Ja ...
  • 哈嘍大家好,我是鹹魚。 今天鹹魚列出了一些大家在初學 Python 的時候容易踩的一些坑,看看你有沒有中招過。 原文:https://www.bitecode.dev/p/unexpected-python-traps-for-beginners 不明顯的字元串拼接 Python 在詞法分析的時候會 ...
  • InLine_Function How to Write it? example-> inline void func(); inline int sum(int v1 , int v2 ); inline void func(){ std::cout<<"func()"<<std::endl; } ...
  • JDBC是指資料庫連接技術,用於java連接mySQL等資料庫。本文詳細介紹了尚矽谷課程中JDBC的學習內容和補充知識。 概述 java語言只提供規範介面,存在於java.sql.javax.sql包下,然後資料庫軟體根據java提供的規範實現具體的驅動代碼(jar) jar包是java程式打成的一 ...
  • 不知道大家在 Java 日常開發中是否會經常遇到關於 JSON 的各種轉換的場景,我把自己日常工作中遇到的 JSON轉換場景做了一個總結,希望可以對大家有幫助。 註:本文都是基於阿裡的 fastjson 來講解操作的。 ...
  • Redis大家都不陌生,就算是沒用過,也都聽說過了。 作為最廣泛使用的KV記憶體資料庫之一,在當今的大流量時代,單機模式略顯單薄,免不了要有一些拓展的方案。 筆者下文會對各種方案進行介紹,並且給出場景,實現 等等概述,還會提到一些新手常見的誤區。 正文 先從基礎的拓展方式開始,這樣更便於理解較高級的模 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...