學校暑期開了Linux的短期培訓課程,也就是簡單地講一下Linux下的基本知識,包括
1. 基本命令
2.shell編程
3.軟件包和用戶管理
4.計劃任務
5.網絡以及服務器
6.內存泄漏
本篇文章會簡單地介紹一下上面的幾個內容,在後續的文章中再針對各個部分進行詳細的說明。
芬蘭赫爾辛基大學的LinusTorvalds 在1991年宣佈自己寫出了一個可以在Intel 386機器上運行的核心,也就是後來廣爲人知的Linux了。Linux系統遵循GPL(GeneralPublic License)協議,是今天絕大多數服務器使用操作系統。
雖然Linux的創始人曾經也相信Linux不僅可以在服務器所向披靡,還能在桌面系統和Windows抗衡,但是,現實很殘酷。Linux更適合服務器操作系統,非要說Windows可以做到怎樣怎樣,而Linux做不到,這樣的對比是沒有多少意義的。
可以在自己的電腦上安裝Linux虛擬機來開始學習,VMware是比較推薦的軟件。至於Linux的版本,根據個人喜好,喜歡界面漂亮一點的話,可以選擇Ubuntu ,沒有太多要求的話,Fedora 也是不錯的選擇。
在虛擬機上安裝好Linux後,就可以開始了,需要的時候,就像打開一個軟件一樣簡單,不用的時候,關掉就好,不會對物理機造成任何影響,實在是省心省事兒的首選。
1. 基本命令
私以爲鳥哥的Linux私房菜 這本書,從各方面來說都是一本不錯入門書籍,當然,你得適應一下鳥哥的灣灣腔。如果比較適應看網頁這種方式的話,鳥哥的官網 也是很好的學習途徑,這是簡體版,習慣繁體的話,可以用這個。學習Linux,各種命令少不了,每天一個Linux命令,也比較有用。
Linux許多操作通過字符界面下的命令來完成,不同於視窗操作系統,可以用鼠標點來點去,這裏的命令都是需要你一個個去輸入的。也許你認爲這不是太老古董了嗎?鼠標點一下就完成的事情,爲什麼要這麼麻煩呢?實際上,在操作系統中許多命令,是沒有辦法圖形化的,使用圖形化界面會很影響效率。偷懶是人的天性,如果命令行效率又低,操作又麻煩,早就活不過“三集”,被大家拋棄了。
雖然Linux 的命令有很多,但常用的也就是那幾十個,就像你手機裏裝了很多APP,但使用頻率最高也就那幾個。所以只要掌握這些常用的命令,應對日常的任務就足夠了。
命令 |
說明 |
pwd |
顯示當前用戶工作目錄 |
cd |
切換路徑 |
ls |
顯示文件和文件夾列表 |
cat |
查看文件內容 |
grep |
搜索關鍵字 |
cp |
複製 |
mv |
移動 |
rm |
刪除 |
mkdir |
創建文件夾 |
touch |
修改文件日期 |
more |
分頁查看文件內容 |
find |
搜索文件 |
file |
查看文件類型 |
wc |
統計字節數、字數、行數 |
ln |
創建文件鏈接 |
dmesg |
查看系統信息 |
echo |
回顯 |
clear |
清屏 |
shutdown |
關機 |
使用相應的快捷鍵可以打開終端,進行命令操作,就像Windows下的cmd一樣。各個Linux版本的快捷鍵不同,當然也可以自己設定。
每個命令都對應着不同的參數,不同的參數還可以進行搭配使用,所以這讓每個命令都有了很多的用法。比如ls打印文件列表的這個命令,使用參數 -l 可以進行長格式的輸出,也就是輸出詳細信息。使用-a參數可以輸出隱藏文件,將-a和-l組合在一起,就可以輸出所有文件包括的隱藏文件的詳細列表信息了。
每個命令的格式略有不同,但大體都是“命令 參數 對象”這樣的的格式,比如ls這個命令就是“ls[參數] 路徑”,執行這個命令就可以輸出對應路徑的文件的信息,當然缺省的路徑的當前的路徑。使用Tab鍵可以補全命令,比如你輸入了文件名字的前一半,按一下tab鍵,可以自動補全。使用↑上下↓鍵可以切換到之前運行過的命令。
熟練掌握一些基本的常用的命令是進行下一步學習的基礎,如果每次都需要去查詢命令,會很影響效率。
2.shell編程
我覺得下面這張圖可以解釋shell在Linux中的作用
不論是應用還是用戶,都是不能直接接觸到系統核心的,這是出於對系統的保護,因爲用戶的非法操作可能給系統帶來某些不可預料的危害,甚至導致系統的崩潰。用戶可以通過Shell這個交互的界面,給系統下達指令,系統核心操控硬件,進行相應的工作,取得結果。
Shell 有很多的版本,Linux默認使用的是Bash,
使用cat 命令查看用戶信息文件,即可查看到當前用戶的默認Shell。這裏用到的命令“cat/etc/passwd | grep 用戶名”,前面部分是cat查看文件內容的命令,後面grep是查詢關鍵字段的命令,兩個命令通過“管道”(中間的豎線 |)組合在一起。cat返回的結果通過“管道”又作爲grep的命令的輸入,也就是grep命令在cat 的內容中去查詢關鍵字段並返回結果。這裏只是舉例說明管道的用法,針對這個命令,用“grep 用戶名 /etc/passwd”即可。
Shell 有一點像Windows下的批處理,用它來進行數字的處理比較麻煩,比如一個簡單的數字表達式在這裏會變得很麻煩。使用Shell可以幫助我們完成許多需要重複進行的工作。比如你是某個機房的管理員,你每天早上都要進行一些常規的系統檢查,而這些命令可能有幾百條,而且每天都一樣。你會選擇每天都去把這些命令一條條敲一遍嗎?還是選擇把它們寫到一個shell中,需要的時候運行這個shell程序就好了呢?很顯然,後者看起來是個更好的選擇。
使用命令“vi 文件名”來創建並編輯一個shell程序,vi編輯器是Linux默認的編輯器,你可以把它想象成一個記事本,可以通過相應的配置使它更符合你的操作習慣,比如語法高亮,行號標記等。關於vi編輯器的使用可以參考我之前的文章。
一個簡單的shell程序如上圖所示,第一句#號打頭表明這一句是一句註釋,其後的內容說明這個shell程序使用的是bash,第二句註釋說這個文件的名字是hello。第三句,是程序的“正文”,echo命令回顯date,date是顯示當前日期的命令,注意這裏的單引號爲反單引號,也就是在鍵盤左上角ESC鍵下面的那個。
使用chmod+x 文件名 給這個文件賦予可運行的權限,然後執行這個程序,
可以看到這個文件的後綴名爲.sh,說明這是個shell文件,其實Linux是無所謂後綴名的。Linux中所有的東西都可以看作文件,屏幕是文件,打印機是文件,文件夾是文件,一切都是文件,取後綴名的做法是參考了其他系統,方便區分文件。
Shell裏面一樣可以有for循環,while循環等等基本的語法,但是比起C那樣的編程語言,Shell顯得很簡單很簡單。shell的對於格式有很嚴格的要求,比如有空格和沒空格完全不一樣,所以,使用過程中一定要注意。有很多Shell的練習,做幾道就可以對shell有個初步的掌握。
3.軟件包和用戶管理
Linux 是一個多用戶的操作系統,使用su-用戶名 即可切換到另一個用戶。注意這裏的“-”,加了“-”後,會將用戶環境也切換。
使用管理員進行用戶的管理,包括添加新用戶,修改已有用戶的屬性,或者刪除已有的用戶。管理員在Linux系統中擁有無限的權限,所以,爲了系統的安全,進行日常的工作的時候,應該使用普通用戶,必要的時候再切換到管理員。
這是一個創建批量用戶的shell程序,其中有幾個關鍵的命令,groupadd,useradd,passwd,從名字就能大概看出命令的用途。用戶至少屬於一個組,我們先用groupadd創建一個組,再向這個組中用useradd添加用戶,用戶需要設置密碼纔可以登錄,使用passwd命令設置密碼。所以,可以看出,shell程序一個作用就是將某些命令放到一起來按照要求執行,減少勞動量。
Linux下的軟件包有很多版本,但是最後大家都選擇了RPM(RedHat Package Manager),rpm也就成了軟件包的默認標準了。軟件包可以理解爲大家都遵循的一個協議,比如安卓的安裝包是apk。
rpm命令加-q 參數可以查詢機器中通過rpm的方式安裝的軟件,通過其他方式安裝的軟件無法查到,後面通過管道的方式去查詢關鍵字“gcc”。通過rpm 加參數 –I 即可安裝軟件,不過這種安裝方式有個比較頭疼的問題就是需要手動按照各個軟件包的依賴關係去安裝。比如A軟件包需要B軟件包作爲依賴,所以你需要先安裝B,如果B軟件包還依賴於C,那麼你… … 總之安裝這種方式有的時候會讓人抓狂,yum就可以解決這些問題。
yum 是一個在線的安裝方式,通過“yum install 軟件名”命令即可安裝相應的軟件,它會根據包之間的依賴關係自動安裝相關的軟件包,大大減省了用戶的工作。如果說rpm的安裝方式是你自己手動下載應用的安裝文件手動安裝的話,yum的安裝方式就是從軟件市場比如豌豆莢去安裝應用。需要注意的是,yum安裝的還是rpm包,就像你從豌豆莢下載安裝時還是apk文件一樣。
yum有很多的yum源供選,比如國內很多大學都提供了yum源,只需要在配置文件中修改yum的地址即可。當然,你可以用Linux的安裝光盤建立你自己的本地yum源。
4.計劃任務
計劃任務其實我們經常用到,比如讓迅雷下載完後關機,這就是一個計劃任務。Linux中有兩種計劃任務,一種是at,這種計劃任務是一次性的;另一種是crontab,這種任務可以按照設置的規律執行,比如每年生日給朋友發一封祝福郵件。
at計劃任務由atd進程控制,-d爲系統的“守護進程”,這樣的進程還有“httpd”“crond”“vsftpd”等,它們一直在系統中運行着,除非手動地關閉它們。在終端輸入at+時間 即可進入at的編輯模式下,在輸入需要執行的命令後,使用ctrl+d來結束編輯。
crondtab計劃任務通過crontab –e 命令進入編輯,每一行就是一個計劃任務。
前面的五項就是時間,依次爲分 時 日 月 周 ,比如第一個的意思就是每天的16:50執行其後的命令,第二個就是每天的8:00~18:00執行後面的命令。需要注意的是,每隔多少時間的表達,比如8點到18點,每隔兩個小時,就是8-18/2。
5.網絡以及服務器
在虛擬機中安裝的Linux系統,有一些是安裝完就可以上網的,比如Ubuntu,而另外一些,比如Fedora是需要一些額外的配置纔可以上網的。以Fedora爲例,需要配置本機的ip,網關,dns服務器,還需要在宿主機上配置網絡適配器共享,並將vmware的上網方式設置爲自定義。
服務器方面,主要是針對LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)的網站架構,需要安裝Apache服務器,當然,LNMP(linux+nginx+mysql+php)也是不錯的選擇。可以一個個手動安裝,當然也可以選擇LNMP一鍵安裝包 這種簡單的方式。
6.內存泄漏
在Java中,程序編寫者不需要操心內存回收的問題,Java本來就有回收的機制。而在C或者C++這些語言中,是需要自己去釋放先前申請的資源的。由於各方面的原因,程序的編寫者可能沒有對不再使用的資源進行釋放,從而導致內存泄漏。這在一個小程序中看起來或許沒有太大問題,但是,再大的系統也是由很小的部分組成。隨着運行時間的增加,運行規模的擴大,任何一個小小的問題都可能給整個系統帶來致命的損害。
就像消防隊做得最多的不是滅火,而是定期在轄區內進行險情排除一樣,問題發生後再來補救始終是不得已的下策,最好的便是養成良好的編程習慣,避免不必要的麻煩。
Linux下可以通過多種方式對內存泄漏進行檢查,比如在代碼中嵌入mtrace,
在main.c代碼中嵌入:
#include<mcheck.h>
mtrace();
/*你要檢查的代碼段*/
muntrace();
除了這種方式,還可以自己下載內存檢查的工具,用得比較多有Valgrind,Memwatch。
寫得比較簡略,會在後續的文章中進行詳細地介紹。時間能力有限,不免有疏漏之處,還望大家多多包涵,提出批評建議,不勝感激。以下是參考資料:
鏈接:http://pan.baidu.com/s/1c2oiMZ2 密碼:5sf1 Linux培訓