宋寶華:LEP(Linux易用剖析器) 是什麼,為什麼以及怎麼辦(1)

2021-12-24 Linux閱碼場

LEP(LINUX EASY PROFILING) 是Linuxer之LEP項目組(Barry Song,Mac Xu,陳松等以及陳莉君老師)正在致力於打造的一個開源項目,這是LEP文檔《LEP是什麼,為什麼,怎麼辦》的第一部分。本部分目錄如下:

1.LEP是什麼? 

  1.1 LEP的架構 

  1.2 LEP的特點 

2.LEP的License

  3.為什麼要做LEP?

    3.1 三類Linux開發者與LEP對他們各自的作用

    3.2 第一類Linux開發者調試方法

    3.3 第三類Linux開發者調試方法

4.LEP類似項目以及LEP的優勢

  4.1 netdata

  4.2 zabbix

  4.3 munin

4.4 帶插件的Eclipse

5.LEP的當前狀態

  5.1 代碼託管

  5.2 支持平臺

  5.3 目前功能

    5.3.1 概況視角

    5.3.2 CPU視角

    5.3.3 內存視角

    5.3.4 I/O視角

    5.3.5 perf視角

  5.4 目前缺陷

LEP項目組歡迎開源愛好者加入和參與。關於項目的最新演講:

【終南山.內核問道】Linux性能剖析的可視化

LEP的全稱是Linux Easy Profiling(Linux易用剖析器),核心特點在於Easy(簡單),主要功能在乎Profiling(剖析)。LEP的網址是http://www.linuxep.com,網站基於Docker部署,代碼倉庫位於:https://github.com/linuxep/linuxep

LEP的設計目標是:便利Linux的程式設計師,以最快最直接的方式,定位到系統裡面一些bug的源頭,以及一些性能瓶頸的原因。

Linux有很多現成的調試和剖析工具,比如top、vmstat、iotop、perf、valgrind、powertop、free、pmap、slabtop等,這些工具通過讀取/proc、/sys,分析硬體的PMU(Performance Monitor Unit)數據、監控內存的申請釋放以及讀寫等手段,獲知單一進程或者系統的運行狀態,以及進行故障分析。LEP除了在功能上是這些工具的超集以外,在可視、交互、深度分析、數據比對、場景貼合等角度對這些工具進行進一步的增強。


1.1 LEP的架構

LEP實際上是一個all-in-one的調試工具,它的軟體架構如圖1。LEP與Linux現有工具重大不同的地方是:被監控的伺服器或者開發板只需要部署LEPD(LEP Daemon),該程序完全用C語言,只需要完成基本的數據採集功能,因此它能最小化對被監控系統本身的影響。數據的分析和處理,都移動到了WEB服務LEPV(LEP Viewer)和瀏覽器一端。LEPD採集被監控目標的運行數據,這些數據被WEB服務端LEPV通過JSONRPC請求獲得,LEPV以Python對從LEPD獲得的原始數據進行有針對性的加工,再發送給瀏覽器,瀏覽器用Javascript等形式,把LEPV加工過的數據,以各種豐富的圖形進行顯示。

這種架構的主要好處是:LEPD和LEPV分離,這樣使得LEPD易於部署在資源貧乏的嵌入式電腦板上(當然更加可以運行在伺服器上),而LEPV一般則運行在比較強壯的X86 PC上。當然,LEPD和LEPV雖然分離,在實際部署的時候,也可以部署於同一個X86 PC。因此,LEP也可以用於非網絡環境下的單機自身監控。

值得一提的是,LEPV目前基於Docker進行部署,這對LEPV的安裝和使用提供了很大的幫助,避免了不同環境下、不同用戶要安裝各種依賴的底層工具的繁瑣動作。LEPV可運行於直接支持Docker的Linux平臺以及間接支持Docker的MAC OS和Windows平臺。

圖2演示了LEP的一個典型的數據流程。運行於被監控系統的LEPD讀取/proc/loadavg數據,這些數據沒有格式,是原始的,類似「2.58 2.25 2.31…」,而LEPV收到這些數據後,將其進行語義加工為last1、last5、last15這種過去1分鐘、5分鐘、15分鐘系統平均負載,瀏覽器獲取這些數據後,繪製為3條生動活潑的動感曲線。

圖2 LEP的數據流程

1.2 LEP的特點

LEP在功能角度上,全面集成了Linux的多數常用工具,但是在調試和剖析能力上,更加「給力」,它進行了進一步的高強度增強,這些增強主要表現在6個方面:

1.     LEP是all-in-one的。意味著有了LEP後,用戶不用再滿世界去尋找和集成眾多的工具。由於LEP本身的絕大多數工作並不集成在被監控的目標,被監控的目標僅僅需安裝一個最簡單的daemon LEPD做後臺數據採集,因此,這種all-in-one的集成本身也不會增加被監控者文件系統的footprint

2.     LEP是可視化的。當我們用top命令去觀察CPU利用率、平均負載等的時候,top進行周期性的刷新,它顯示的只是此一時刻的數據,因為沒有圖形,所以它無法顯示變化,而LEP則可以以時間為X軸,數據為Y軸,顯示系統一段時間的狀態變遷,如圖3。

圖3 LEP可顯示變化

3.     LEP是可交互的。由於界面豐富,因此,用戶可在瀏覽器網頁上面,對監控本身的頻率、數據類型等進行設置,以及進行方便的數據過濾,譬如在Linux的眾多進程中,設置只關心某些進程。以圖4為例,在進程CPU利用率的監控窗口,我們可以通過簡單的輸入進程名load,過濾掉我們不關心的進程。

4.     LEP帶預警和分析能力。目前的Linux命令,更多的只是顯示數據,本身分析和預警能力不足。比如free命令,它顯示系統的內存,但是當系統出現內存洩漏時,它徹底缺乏提示和預警能力。與之不同的是,LEP可持續跟蹤系統,因此,發現內存洩漏等異常狀況後,可給用戶預警,並進一步給出更深的提示,比如提示內存洩漏的源頭是slab、vmalloc還是用戶態應用程式。

5.     LEP具備數據存儲能力。LEP可以將採集的歷史數據進行保存,並在保存後進行檔案調取。程式設計師經常會修改代碼,並進行修改代碼前和修改代碼後的運行性能比對。歷史數據與當前數據的比對,可便利程式設計師獲知代碼變更對系統真實的影響。我們姑且稱呼上述比對為時間比對,那麼,另外一種可能的比對就是空間比對,比如程式設計師會比對同樣的軟體,運行於不同的硬體平臺時性能差異的不同。LEP的此一能力,可幫助程式設計師摺疊時空

6.     LEP可深度貼合用戶場景。使用LEP工具,除了可以依據Linux CGroup( ControlGroups )進行監控外,用戶可依據應用場景,進行進程的人工幹涉分群,比如,對於多媒體播放場景,把播放相關的service和app歸於一個進程群,並觀察此一群的運行狀態和資源佔用。

LEP是基於GPL v2發布的,這意味著任何人都可以獲得其開源的原始碼,並部署使用之,但是對其本身的修復和提高,也必須再次開源。LEP也歡迎與廠商合作,並可能以功能插件的形式,對廠商的部分原始碼,使用商業license,從而對這部分代碼進行閉源。


3.1 三類Linux開發者與LEP對他們各自的作用

主要的目標還是解決現實的問題,加快問題的調試和定位過程,減輕程式設計師的痛苦,從而提高生產力。

我們大體認為在Linux上從事開發的程式設計師,依據其與Linux平臺本身的親密度可分為3類:

1.     Linux專家,類似遊泳健將。

2.     熟悉Linux的開發者,類似會遊泳的人。

3.     不熟悉Linux平臺本身知識的開發者,類似不會遊泳或者只會狗爬式遊泳的人。

LEP項目堅決反對程式設計師的鄙視鏈,提倡以平常心以公平心看待不同的技術領域。遊泳健將不能鄙視狗爬式,雖然別人遊泳不行,在體育界不好混,但是說不定人家戲演地好,在演藝圈成功了。技術上倡導百萬齊放,行行出狀元。

根據著名的二八定律,我們認為有20%的程式設計師,掌握了80%的Linux知識;而有80%的程式設計師,只掌握了20%的Linux知識。第二、三類Linux用戶數量遠大於第一類Linux用戶。

LEP的主要目的是給第二、三類Linux開發者扔一個救生圈防止他們淹死,同時這個救生圈,也可以給第一類Linux用戶節省體力,可以縮短他們的調試周期。所以,它對第二類和第三類,達到了救命或者續命的效果,對第一類,更多的是達到錦上添花的作用。

如圖5,一旦系統出現問題,Linux專家級開發者,由於心中有丘壑,他的需求很可能只是,敲一些命令,然後看看命令的結果,尋找調試方向,所以,他更多的需求是「我看看」;熟悉Linux的用戶,通過冰冷的命令輸出,可能很難窺探到系統的運行秘密,但是如果能以圖形顯示,他大概能夠知道個七七八八,所以他的訴求,更多的是「幫幫我」;而對於第三類Linux開發者而言,你可能就必須直接給他指出問題出在哪裡,他的訴求是「救救我」。

圖5 三類Linux用戶以及他們的訴求

下面我們以一個內存洩漏為例,看看第一類工程師和第三類工程師的區別。故事的背景是,某使用Linux做產品的公司A,從開發板的製造商買了一批開發板,而後在其提供的Linux之上,增加了一個Qt的應用程式。但是,不幸的是,此開發板的某內核驅動有極其緩慢的slab區域(以kmalloc進行申請)內存洩漏。下面第一類工程師和第三類工程師同時開始調試這個bug。


3.2 第一類Linux開發者調試方法

第一類開發者,理解進程內存消耗的VSS、RSS、PSS、USS概念,並理解內核空間的slab、vmalloc以及用戶空間的malloc都可能是堆內存的洩漏源頭。他的調試過程如下:

1.     以free命令跟蹤系統,發現系統free內存隨著時間遷移而持續減小,他確立內存洩漏存在;

2.     懷疑自己寫的Qt應用程式有內存洩漏,於是以類似smem工具,持續跟蹤自己寫的Qt應用的USS,經過一段時間的觀察,它發現Qt應用本身耗費的內存沒有變大,排除自身問題;

3.     持續觀察/proc/meminfo,跟蹤slab和vmalloc區域的變化,發現slab區域隨著時間遷移增大,確立內核空間kmalloc類似行為有洩漏;

4.     查看/proc/slabinfo,並使能內核kmemleak類似選項,最終定位到洩漏的那一行原始碼。

 

結果上述4個步驟,第一類開發者比較輕鬆地修復了這個內核空間內存洩漏的bug。

3.3 第三類Linux開發者調試方法

第三類開發者沒有這麼幸運。他的調試步驟是:

 

1.     以free命令跟蹤系統,發現系統free內存睡著時間遷移而持續減小,他確立內存洩漏存在;

2.     懷疑自己寫的Qt應用程式有內存洩漏,懷疑Qt本身有內存洩漏;升級Qt的版本,反覆查看自己的代碼;

3.     懷疑自己寫的Qt應用程式有內存洩漏,懷疑Qt本身有內存洩漏;再次升級Qt的版本,反覆查看自己的代碼;

4.     懷疑自己寫的Qt應用程式有內存洩漏,懷疑Qt本身有內存洩漏;降級Qt的版本,反覆查看自己的代碼;

5.     懷疑自己寫的Qt應用程式有內存洩漏,懷疑Qt本身有內存洩漏;再次降級Qt的版本,反覆查看自己的代碼;

6.     懷疑自己寫的Qt應用程式有內存洩漏,懷疑Qt本身有內存洩漏;升級Qt的版本,反覆查看自己的代碼;

7.     …

 

光陰似箭日月如梭,第三類程式設計師,在不斷地重複試錯中「鬼打牆」,耗盡了青春,也辜負了年華,一晃就過去了大半年。

 

第一類程式設計師這個時候就會鄙視第三類程式設計師,但是,殊不知,第三類程式設計師,也有鄙視第一類程式設計師的理由,因為「術業有專攻,聞道有先後」,彼此關注的領域並不一定一樣。

對於第三類程式設計師,如果他在調試的第一步就有了LEP,那麼,LEP的數據採集和深度分析能力,將可以直接提示它問題出在內核的slab,直接提示其進一步的調試方向。


4.1 netdata

netdata(如圖6)是一款 Linux 性能實時監測工具,提供web界面的界面視角,是github上的2016年度星標項目,項目網址:http://netdata.firehol.org/

圖6 netdata的用戶界面

netdata以5分鐘為單位,持續刷新系統的運行情況。netdata的web端部署於被監控的平臺。它目前的局限性有三:

1.    不具備歷史數據分析能力(只有5分鐘)

2.    不適合部署於嵌入式系統,web服務本身的開銷大

3.    更大地是面向運維,缺乏對開發人員的支持

LEP在具備比netdata更強大功能的前提下,也要解決netdata上述的3個問題,LEP也可更多的面向程式設計師。


4.2 zabbix

zabbix(如圖7)是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。項目網址:https://www.zabbix.com

圖7 zabbix的用戶界面

Zabbix仍然是面向運維的,缺乏調試和分析能力。但是,其「靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題」特徵這部分值得LEP學習。


4.3 munin

munin(如圖8)是用於Linux系統的監控軟體,munin可以監控系統的各項數值之外,最大的好處是可以自己編寫插件自定義監控需要的數值。munin除了可以監控結果,也可以設置報警。項目網址為:http://munin-monitoring.org/

圖8 munin的用戶界面

munin具備性能分析能力,」設置報警」和「自定義監控」數據等特徵都值得我們學習,但是它仍然缺乏面向程式設計師的深度分析能力,也不適合嵌入式系統。

4.4 帶插件的Eclipse


Eclipse IDE(IntegratedDevelopment Environment,集成開發環境)提供了一個類似Visual Studio的集成開發環境。它可以集成一些插件,類似:

此方法的主要問題在於實施難度較大,Eclipse本身過於龐大,對嵌入式的支持也不太完善。安裝了插件的Eclipse更像是一個工具大熔爐,它仍然需要用戶知道每個工具以及每個工具的具體用法,另外IDE也缺乏持續監控和直接的預警能力。

就易用性角度,LEP直面狗爬式遊泳人員,可以進一步降低開發者對Linux本身知識的了解程度的要求。


5.1 代碼託管

目前LEP的代碼託管於github上面,地址:https://github.com/linuxep,代碼倉庫中LEPD和LEPV是分離的。分別位於:

https://github.com/linuxep/lepd

https://github.com/linuxep/lepv

下面演示在64位Ubuntu機器上,同時運行LEPD和LEPV,最後用瀏覽器監控本機或者ARM板的操作流程:

1.下載、編譯和運行LEPD

git clone https://github.com/linuxep/lepd.git

baohua@ubuntu:~/lep/lepd$ make

baohua@ubuntu:~/lep/lepd$ sudo ./lepd--debug

[sudo] password for baohua:

注意,如果要編譯LEPD的ARM版本,命令為:

baohua@ubuntu:~/lep/lepd$ make ARCH=arm

編譯後將LEPD拷貝入ARM電路板或者Android手機即可。

 

2.下載、編譯和運行LEPV

git clone https://github.com/linuxep/lepv.git

baohua@ubuntu:~/lep/lepv$ ./buildDockerImage.sh

baohua@ubuntu:~/lep/lepv$./runDockerContainer.sh

3. 開啟瀏覽器

訪問127.0.0.1:8889

在彈出的對話框設置監控本機:

如果是監控ARM電路板或Android手機,填寫它們的IP位址。

 

Enjoy:


5.2 支持平臺

我們已經在ARM 32電腦板、ARM 64位Android手機和雙核、四核X86上部署過LEPD,並以LEPV進行數據跟蹤和採集。

目前LEPV僅支持運行於X86 64位機器上,32位機器暫時不支持。


5.3 目前功能

目前LEP具備概況、處理器、內存、磁碟(I/O)和Perf五個視角。

5.3.1 概況視角

概況視角顯示CPU、內存、I/O總體的狀態:

5.3.2 CPU視角

CPU視角顯示各個進程的CPU利用率,多核下負載均衡,IDLE,每個核的CPU佔用情況,IRQ+SoftIRQ的比例等:

 

上述IRQ+SoftIRQ視角,對指導中斷負載均衡、SoftIRQ負載均衡(網絡下RPS——ReceivePacket Steering等),有很強的指導意義。

5.3.3 內存視角

內存視角顯示系統的內存消耗(used、free、page cache等),以及每個進程的內存佔用比例,進程的VSS、RSS、PSS和USS等信息:

5.3.4 I/O視角

目前可顯示I/O隊列情況以及每個進程的I/O訪問流量:

5.3.5 perf視角

目前可顯示系統運行時,基於symbol的時間分布,類似perf top命令的功能:


5.4 目前缺陷

目前的缺陷及改造方向:

1.    監控是瀏覽器觸發的,如果瀏覽器不點擊開始,不會開始。改造目標:自動監控,無論瀏覽器連接不連接。所以LEPV需要後臺,後臺設置後就連續從LEPD採集數據。

2.    沒有資料庫,沒有歷史數據。未來考慮除了顯示最近五分鐘視圖以外,增加類似股市的日線圖、周線圖、月線圖。另外,需要增加採集數據和分析後數據的保存與讀取能力。

3.    功能性缺失,比如中斷、軟中斷、上下文切換次數,基於cgroups的CPU、內存、I/O分析。改造方向:增加中斷、軟中斷、上下文切換、swapin、swapout、slab、vmalloc等的視角,增加cgroups的分析視角。

4.    沒有系統的測試以及剖析LEPD本身對監控目標的消耗。改造方向:增加測試案例,執行Q/A,執行LEPD本身對監控目標性能影響的報告。

5.    深度分析能力仍然不夠。比如,我們只是單純的顯示負載,沒有辦法提示用戶目前負載重,沒有辦法監控到內存洩漏後進行提示。界面上也缺乏對用戶適當的提示,對於初級用戶來說,還是看不懂。

6.    缺乏中文英文的自動切換,目前暫時只有中文版。改造方向:默認根據瀏覽器語言,選擇英文、中文,提供用戶設置的能力。

7.    以監控為主,控制能力不足。理想上面,我們可以對目標監控系統進行一定的配置,比如設置某個進程的nice,可以在top裡面點右鍵來設置;比如,我只想監控某個進程,某個進程的所有線程等。

本文未完待續 >>> 

相關焦點

  • LEP與負載均衡—— 以PCDUINO實際案例來使用LEP提高網絡帶寬
    其宗旨在於便利Linux的程式設計師,以最快最直接的方式,定位到系統裡面一些bug的源頭,以及一些性能瓶頸的原因。這篇文章的內容涉及用LEP(LINUX EASY PROFILING)監控PCDUINO 3nano電路板網絡流量,觀察負載均衡IDLE、IRQ和SoftIRQ,以及用RPS/RFS提高高網絡負載情況的網絡帶寬。LEP項目組歡迎開源愛好者加入和參與。
  • 宋寶華: Linux內核編程廣泛使用的前向聲明(Forward Declaration)
    那麼前向聲明究竟是個什麼鬼?在內核寫代碼和看代碼的童鞋,經常發現Linux內核裡面充斥著這樣的代碼,比如include/vim linux/regulator/driver.h文件中:我們以regmap這個結構體為例,這個地方就是一個前向聲明,告訴後面的代碼regmap是個結構體,至於這個結構體裡面有什麼鬼,不知道!
  • 理解Linux內核搶佔模型(最透徹一篇)
    /#.XrKLcfnx05k作者:Liran B.H譯者:宋寶華當配置Linux內核的時候,我們可以選擇一些參數,這些參數能影響系統的行為。你可以用不同的優先級、調度類和搶佔模型來工作。正確地選擇這些參數是非常重要的。本文將論述不同的搶佔模型如何影響用戶和系統的行為。當你使用 make menuconfig配置內核的時候,你能看到這樣的菜單:為了深入理解這三個搶佔模型的區別,我們將寫一個案例:如果低優先級的線程陷入系統調用,高優先級的線程睡眠到期,究竟會發生什麼?
  • Windows為什麼越用越慢而Linux卻不會?
    我們要問幾個為什麼:這些臨時文件是用來幹什麼的?為什麼臨時文件會越來越多?如果臨時文件越來越多,為什麼會使系統變慢?Linux難道就不創建臨時文件嗎?在詳細回答上面幾個問題之前,首先要說一個非技術方面的事實,或許會回答本文題目的問題有所指引。
  • 為什麼建議大家用 Linux 開發?爽啊!
    Linux 能用嗎?我身邊還有些朋友對 linux 的印象似乎還停留在黑乎乎的命令行界面上。當我告訴他或者建議他使用 linux 時,會一臉驚訝的問我,那個怎麼用(來開發或者日常使用)?https://www.linuxprobe.com/eight-linux-distribution.html2018年10大最漂亮的 Linux 發行版 https://www.cnbeta.com/articles/soft/695605.htm展望2017年的七款好用Linux發行版 https://www.linuxidc.com/Linux/2017-01/139414.htm支持日常開發
  • Gear-Lib 1.1.15 發布,簡單易用的 IoT 開發庫
    Gear Lib 是一組面向IOT及網絡流媒體開發的C基礎庫,接口簡潔易用,適用於物聯網嵌入式設備端的開發,如IOT採集傳感器,視頻監控,設備端網絡直播等場景。
  • Linux超基礎術語科普:什麼是Linux發行版?為什麼稱其為「發行」?
    讓我們來討論一下什麼是Linux發行版,為什麼它被稱為發行版,以及它與Linux內核有什麼不同。
  • Linux磁碟分區以及目錄掛載詳解
    硬碟主引導扇區    以機械硬碟為例,其中硬碟主引導扇區位於硬碟的 0磁頭0柱面1扇區(也就是所謂的Boot Sector),它又分為:硬碟主引導記錄(MBR) + 硬碟分區表(DPT),共512個字節,其中MBR446位元組、分區表64位元組以及2位元組的結束標誌。  4. 硬碟主引導記錄(MBR)     位於磁碟最前邊的一段引導(Loader)代碼。
  • Linux 為什麼要動態連結?與靜態連結的區別是什麼?
    老規矩,先拋出幾個問題:為什麼要進行動態連結?如何進行動態連結?什麼是地址無關代碼技術?什麼是延遲綁定技術?如何在程序運行過程中進行顯式連結?/test$ func 1通過-fPIC和-shared可以生成一個動態連結庫,再連結到可執行程序就可以正常運行。
  • 安裝docker,讓你的linux主機更易用
    如果有什麼疑問和建議,歡迎在留言區友好交流。作業系統默認ubuntu18.04 lts。在PC端閱讀可以獲得更好的閱讀體驗。前面簡單介紹了基本的文件操作和系統查看命令。可以點開連結或者公號歷史文章來查看,重點關註標題圖片是ubuntu的那種就可以很容易找到。這次分享一個部署應用的神器,docker。按照相關法律法規,先貼一下docker的圖片。
  • 為什麼Pylint既有用又不能用,以及如何使用它
    你讀完本文會明白為什麼這個工具有用,為什麼不能用,以及Python項目中應該如何有效地使用它。(不是Python程式設計師?同樣的問題和解決方案可能適用於你的生態系統。)Pylint化險為夷如果用Haskell編碼,編譯器幫了你。如果用Java編碼,編譯器通常伸出援助之手。
  • 【IT基礎-Linux系統基礎和CentOS實踐】第1章-Linux系統基礎概述(上)
    為什麼選擇企鵝,而不是選擇獅子、老虎或者小白兔?有人說因為李納斯•託瓦茲是芬蘭人,所以選擇企鵝,有人說因為其他動物圖案都被用光了,李納斯•託瓦茲只好選擇企鵝。我更願意相信以下說法,企鵝是南極洲的標誌性動物,根據國際公約,南極洲為全人類共同所有,不屬於世界上的任何國家,可國家都無權將南極洲納入其版圖。
  • Python 集合是什麼,為什麼應該使用以及如何使用? | Linux 中國
    既然你知道了如何創建一個集合以及它可以包含哪些類型的元素,那麼讓我們繼續看看為什麼我們總是應該把它放在我們的工具箱中。為什麼你需要使用它寫代碼時,你可以用不止一種方法來完成它。有些被認為是相當糟糕的,另一些則是清晰的、簡潔的和可維護的,或者是 「Python 式的pythonic[2]」。
  • 嵌入式 Arm Linux 入門必讀書籍推薦
    1、Linux 系統環境熟悉 Linux 系統環境是一切的前提 —— Linux 系統環境中,最強大的開發武器是命令行和 Shell 腳本。為什麼?至少我現在還經常看到有同學問:我照著教程敲的這個命令,為什麼報錯了?我問他:你明白這個命令是什麼意思嗎?你看懂它報錯的提示信息了嗎?他說不知道。所以你要熟悉命令行,至少你要知道你敲下去的每個命令是什麼意思,能看懂它的錯誤提示信息。能會用 help 命令行去查閱相關工具的用法。
  • 為什麼建議大家使用 Linux 開發
    Linux 能用嗎?我身邊還有些朋友對 linux 的印象似乎還停留在黑乎乎的命令行界面上。當我告訴他或者建議他使用 linux 時,會一臉驚訝的問我,那個怎麼用(來開發或者日常使用)?(https://www.linuxprobe.com/eight-linux-distribution.html)2018年10大最漂亮的 Linux 發行版(https://www.cnbeta.com/articles/soft/695605.htm)展望2017年的七款好用Linux發行版(https://www.linuxidc.com/Linux/2017-01
  • FTP是什麼呀?【1月9日錄課講稿】
    FTP是什麼呀?有同學說我不想知道,那我不能強行灌輸這個概念對不。可是如果我要說你入職後老闆問你,咱公司這麼多內部文件,怎麼才方便快捷地在同事之間相互共享呢?嗯,你說我知道啊,qq可以傳。對方不在線怎麼辦?那我可以離線傳輸。
  • 為什麼建議大家使用Linux開發?
    原文連結 : cnblogs.com/summertime-wu/p/11140052.htmlLinux 能用嗎?我身邊還有些朋友對 linux 的印象似乎還停留在黑乎乎的命令行界面上。當我告訴他或者建議他使用 linux 時,會一臉驚訝的問我,那個怎麼用(來開發或者日常使用)?
  • 蘋果id被禁用怎麼辦?為什麼蘋果會被鎖?
    為什麼這些騙子如此「厲害」呢?那麼到底蘋果id被禁用後怎麼辦?為什麼蘋果會被鎖呢?騙子怎麼獲取的蘋果帳號呢?其實是來自於iCloud帳號。蘋果id被禁用怎麼辦?為什麼蘋果會被鎖? 圖1  要弄清楚蘋果id被禁用的原因,先來了解下蘋果ID是什麼?
  • 為什麼程式設計師一定要學 Linux?
    首先,我想先說一下:「為什麼要學習Linux」?
  • 為什麼黑客使用 Linux?有哪些流行的黑客發行版
    點擊上方藍字 ● 關注Linux公社 Linux作業系統在黑客中很受歡迎,因為開源,高度定製化,以及大量Linux黑客軟體的可用性,所有這些都不需要支付任何費用