學(xué)Linux到底學(xué)什么?在線Linux幫你低成本練習(xí)
我們常常聽到很多人說要學(xué)學(xué)Linux或者被人告知說應(yīng)該學(xué)學(xué)Linux,那么學(xué)Linux到底要學(xué)什么?
為什么要學(xué)Linux
在回答學(xué)什么之前,我們先看看為什么要學(xué)。首先我們需要認(rèn)識(shí)到的是,很多服務(wù)器使用的是Linux系統(tǒng),而作為服務(wù)器應(yīng)用程序的開發(fā)者或者維護(hù)者,如果不了解Linux的基本使用,該如何進(jìn)行開發(fā)或者維護(hù)呢?
當(dāng)然,也有可能你聽說Linux更高大上,或者是說Linux對(duì)開發(fā)者更加友好(Windows用戶把刀放下),這都是題外話了。
在我看來,學(xué)習(xí)Linux主要有以下兩點(diǎn)原因
- 使用標(biāo)準(zhǔn)C/C++ 編寫運(yùn)行在Linux上的應(yīng)用程序
- 編寫部署在Linux上的應(yīng)用程序,如Python,Java web服務(wù)程序
- 一探究竟。眾所周知,Linux開源,windows并非如此。
而對(duì)于Python,它有Python解釋器,Java有Java虛擬機(jī),他們實(shí)際上對(duì)Linux的需求是沒有C/C++來的高。即便如此,Linux也是值得Python/Java開發(fā)者去學(xué)習(xí)的。
Linux學(xué)習(xí)方向
那么一般說的學(xué)Linux是要學(xué)什么呢?方向不同,要學(xué)習(xí)的內(nèi)容也不同,可以大致分為這么幾個(gè)方向:
- 運(yùn)維,維護(hù)Linux服務(wù)器
- 應(yīng)用開發(fā),開發(fā)Linux應(yīng)用程序
- 底層開發(fā)
我本人是做Linux應(yīng)用開發(fā)的,因此對(duì)于運(yùn)維方向和底層方向不是很了解,這里僅簡(jiǎn)單說一下。
運(yùn)維Linux主要需要學(xué)會(huì)對(duì)服務(wù)器的基本部署,監(jiān)控,配置,管理等等, 你可以認(rèn)為,這些機(jī)器歸你管了,7*24小時(shí)保障它能正常提供服務(wù)(刪庫跑路就別做了),所以7月24日請(qǐng)對(duì)運(yùn)維的朋友好點(diǎn)。也歡迎運(yùn)維的朋友留言糾正或者補(bǔ)充我的說法。
底層開發(fā)需要了解uboot,文件系統(tǒng),內(nèi)核等底層相關(guān)內(nèi)容,主要工作可能涉及文件系統(tǒng)裁剪,驅(qū)動(dòng)開發(fā),內(nèi)核模塊定制(如內(nèi)存管理,進(jìn)程調(diào)度)等等。底層開發(fā)總體來說要求比較高。
應(yīng)用開發(fā)自然是需要學(xué)習(xí)如何開發(fā)在Linux上運(yùn)行的應(yīng)用程序,如何定位Linux應(yīng)用程序問題等等。
Linux應(yīng)用開發(fā)學(xué)什么
Linux的學(xué)習(xí)很多會(huì)以命令為主,因而初學(xué)會(huì)覺得枯燥甚至疑惑,鼠標(biāo)點(diǎn)點(diǎn)點(diǎn)就能完成的事,為什么要噼里啪啦敲這么多?這里給出兩點(diǎn)理由,也歡迎你補(bǔ)充:
- 出于資源的考慮,絕大部分Linux服務(wù)器沒有圖形界面
- 命令行便于自動(dòng)化,將一系列操作寫入腳本,可代替手動(dòng)操作
而它的學(xué)習(xí)我把它分為這么幾個(gè)階段:
- 基本使用
- 開發(fā)調(diào)試
- 系統(tǒng)認(rèn)識(shí)
這三個(gè)階段對(duì)知識(shí)積累的要求不一樣,但總體來說并沒有嚴(yán)格的先后之分。
類于windows,當(dāng)年你學(xué)習(xí)windows的時(shí)候?qū)W了什么?
- 開關(guān)機(jī)?
- 安裝卸載軟件?如安裝視頻播放器,音樂播放器(為啥要安這玩意?)。
- 如何打開安裝的軟件?如打開瀏覽器上網(wǎng),打開編輯器寫文檔
- 如何存放自己的資料?移動(dòng),創(chuàng)建,刪除等等
- 如何使用office 辦公軟件
- ……
是不是想想好像也沒有特意地去學(xué)習(xí)?
那么對(duì)于學(xué)習(xí)Linux來說也是類似的,就是學(xué)會(huì)這些最普通的使用,
- 如何開關(guān)機(jī)
- 如何上網(wǎng)
- 如何打開命令行
- 如何使用命令行安裝卸載軟件
- 如何編輯文本
- 如何創(chuàng)建,移動(dòng),刪除文件
- 如何查看文件內(nèi)容,解壓縮文件
- ……
這個(gè)階段最難的就是從圖形界面到命令行的轉(zhuǎn)換。
那么第二階段呢,就需要學(xué)會(huì):
- 如何編寫Linux應(yīng)用程序
- 如何編譯或者構(gòu)建你的程序
- 如何運(yùn)行你的程序
- 如何定位程序bug
而第三階段,則是一個(gè)需要漫長(zhǎng)的學(xué)習(xí)過程,但都是為開發(fā)服務(wù),包括:
- 理解并踐行一切皆文件
- ELF文件,Linux主要可執(zhí)行文件格式
- Linux各大機(jī)制的基本原理,如進(jìn)程調(diào)度,內(nèi)存管理,虛擬內(nèi)存,文件系統(tǒng)等,既然要寫Linux應(yīng)用程序,怎么能不了解它所在平臺(tái)的主要機(jī)制呢?
越是疑難問題,越需要這些最基本的知識(shí)。
怎么學(xué)?
來到了大家最關(guān)心的問題了,同樣的,每個(gè)人的情況不太一樣,這里只給出我的個(gè)人建議。
關(guān)于第一階段,你可以先定個(gè)小目標(biāo),例如一段時(shí)間內(nèi)學(xué)會(huì)在Linux下進(jìn)行你的日常活動(dòng)(玩游戲就算了),例如編寫文檔,看視頻等等。同時(shí)建議:
- 選擇主流的發(fā)行版,如ubuntu,centos等,遇到問題時(shí)比較容易解決
- 在window下安裝虛擬機(jī),這樣Linux環(huán)境就隨你折騰了
在這期間,你可能需要了解
- 使用apt-get或者yum安裝或卸載軟件
- 使用tar,unzip,zip,gz等解壓縮軟件安裝包
- 了解運(yùn)行環(huán)境,學(xué)會(huì)如何執(zhí)行命令
這里的學(xué)習(xí)你可以通過網(wǎng)上搜索資料(視頻教程或者博客文章)或者購買相關(guān)書籍進(jìn)行操練。如果你不想安裝虛擬機(jī)或者docker,你可以通過一些在線的Linux來體驗(yàn)。
第二階段也是主要的階段,這一階段要學(xué)習(xí)的東西非常多,多是命令的學(xué)習(xí),這里同樣可以參考《鳥哥的Linux私房菜-基礎(chǔ)篇》。不過初期階段建議抱著一個(gè)目的去學(xué)習(xí),就是如何在Linux寫一個(gè)完整的程序,為了達(dá)到這個(gè)目的你需要學(xué)習(xí)
- cd touch cp mv rm ls,find,切換目錄,創(chuàng)建,復(fù)制,移動(dòng),刪除,查看,查找等等
- vi/vim 編寫代碼,這里有一個(gè)在線練習(xí)網(wǎng)站
- gcc編譯代碼,后期可能需要學(xué)習(xí)makefile,cmake等構(gòu)建工具
- 版本管理,git也是當(dāng)前必備的一個(gè)工具了,學(xué)習(xí)資料推薦pro git
- gdb調(diào)試,可以參考《GDB調(diào)試指南》
- 問題定位,除了觀察最基本的打印之外,還需要知道,如何查看進(jìn)程信息(ps),如何查看網(wǎng)絡(luò)連接信息(ss,netstat),如何強(qiáng)制停止進(jìn)程(kill -9)如何查看進(jìn)程文件打開情況(lsof),如何多種姿勢(shì)查看文本文件(cat,tail,more,less)等等。
- 腳本學(xué)習(xí),學(xué)習(xí)Linux,就不得不學(xué)習(xí)shell腳本了,它在很多時(shí)候能毫無抱怨地幫你做事,前提是你會(huì)調(diào)教。《Linux命令行與shell腳本編程大全》也是調(diào)教教程之一。這里也有一些《必備的shell知識(shí)》
這個(gè)過程涉及到的命令非常多,但是不建議每一個(gè)都去細(xì)學(xué),首先知道有這么一個(gè)命令即可,然后需要的時(shí)候能夠快速找到用法,記住你的目標(biāo)就是流暢地進(jìn)行開發(fā)調(diào)試,而在達(dá)成這個(gè)目標(biāo)地過程中,你自己也會(huì)慢慢接觸到更多。
但是有必要說明的是,開發(fā)Linux應(yīng)用程序并不一定要在Linux下編寫代碼,你可以選擇利用samba等工具在windows和linux之間共享文件,然后再在windows下熟悉的工具中或者你認(rèn)為比較強(qiáng)大合適的工具中編寫代碼,在Linux下進(jìn)行編譯調(diào)試即可。當(dāng)然你也可以選擇Linux下的IDE,或者將vim調(diào)教一下也是可以的。
第三階段要求是比較高的,這個(gè)時(shí)候你應(yīng)該學(xué)習(xí)過操作系統(tǒng)的相關(guān)課程,然后你可以通過諸如《深入理解計(jì)算機(jī)系統(tǒng)》,《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》,《深入Linux內(nèi)核架構(gòu)》,《深入理解Linux內(nèi)核》等書籍進(jìn)行相關(guān)概念學(xué)習(xí),也可以通過閱讀源碼進(jìn)行深入學(xué)習(xí),最終,你需要了解堆和棧,內(nèi)存管理,進(jìn)程調(diào)度,虛擬內(nèi)存,文件系統(tǒng)等相關(guān)知識(shí)。
當(dāng)然相關(guān)命令學(xué)習(xí)也必不可少,例如readelf,nm,ipcs,iostat,objdump,free,chrt,pmap,uptime,top,pidstat等。
以上就是三個(gè)階段Linux相關(guān)的學(xué)習(xí)內(nèi)容和建議,實(shí)際上C/C++相關(guān)的同步學(xué)習(xí)也非常重要,包括相關(guān)數(shù)據(jù)結(jié)構(gòu)與算法,系統(tǒng)編程,網(wǎng)絡(luò)編程等內(nèi)容的學(xué)習(xí),否則看到很多命令的結(jié)果仍然會(huì)一臉懵逼。
最后,建議實(shí)踐再實(shí)踐。
在線就能用的Linux給你找好了
如果你不想安裝虛擬機(jī),這里提供幾個(gè)在線就能把玩Linux的網(wǎng)站,他們不需要注冊(cè)用戶,可以直接使用。
Unix Terminal Online
地址:
https://www.tutorialspoint.com/unix_terminal_online.php

這個(gè)網(wǎng)站也支持代碼的編譯運(yùn)行,而且速度還可以。
JS/UIX - Terminal
地址:
https://www.masswerk.at/jsuix/index.htm

進(jìn)入后,點(diǎn)擊open terminal即可。它提供非常簡(jiǎn)單的終端環(huán)境,而且沒有自帶gcc等編譯套件,不過練習(xí)基本命令和shell腳本還是可以的。整體使用起來也比較流暢。
cb.vu
地址:
http://cb.vu

它使用的是 FreeBSD,整體也是非常流暢,不過同樣不支持代碼編譯運(yùn)行。
copy.sh
地址:
https://copy.sh/v86/?profile=linux2

它可以全屏體驗(yàn),讓你感覺就是在一臺(tái)真的Linux上玩耍,同時(shí)還支持多種發(fā)行版,想體驗(yàn)不同系統(tǒng)的可以試試。

jsLinux
地址:
https://bellard.org/jslinux/

它提供多種系統(tǒng)選擇,你也可以在上面編譯運(yùn)行代碼。
不過整體感覺不是很流暢。
Bash Shell
地址:
https://www.jdoodle.com/test-bash-shell-script-online/

這里可以專門用來練習(xí)shell編程
paiza
地址:
https://paiza.io/en/projects/new?language=bash

同上,可以用來學(xué)習(xí)shell腳本。
ShellCheck
地址:
https://www.shellcheck.net/
就像它的名字一樣,它是用來檢查你的腳本可能存在的問題的。
寫好的腳本就是沒有如預(yù)期一樣運(yùn)行?不如shellcheck一下?