初探Linux
- 2020 年 3 月 12 日
- 筆記
這是一個小小新手根據自己對Linux的理解而寫下的筆記,記錄的是大體的學習內容。記錄的筆記不全面,甚至沒有整體的概念,但也希望能夠給部分人一些入門的幫助,實機基於CentOS 7。
導語:學習一件新事物先從大體把握,了解其組成部分然後再分模組去學習,筆者是依據這樣寫下筆記的
1. 系統的組成
Linux的組成可大致分為:內核、shell、文件系統、應用程式
內核(Kernal):Linux最主要的部分,操作整個電腦的資源,提供記憶體管理,進程管理,驅動管理等基本功能
Shell:提供用戶與內核進行交互的介面,Shell是一個解析器負責解析命令,將用戶傳過來的命令解析過後通知內核執行相應的服務、Shell也可以解析Shell腳本,即Shell腳本可以像用戶傳命令過來一樣有被執行的能力
文件系統:提供文件存儲、管理等功能。Linux抽象出虛擬文件系統以便適應不同類型的文件系統
應用程式:計算器,編輯器,GIMP等
2.文件系統
從一切皆對象的Java變成一切皆文件的Linux了,因為Linux的系統資源都是以文件形式存在。首先來了解文件系統,其實就是認識各種目錄結構及其作用,這裡的內容有個印象即可,真要用到回來再看看
2.1 文件系統結構
- / :根目錄
- /bin:二進位可執行文件,即常用的命令(cd、ls、mkdir)
- /sbin:二進位可執行文件,root專屬命令
- /boot:系統引導文件
- /dev:設備文件
- /etc:系統配置文件
- /home:各用戶的目錄
- /root:管理專屬目錄,不放在home下
- /var:運行時需要改變數據的文件
- /lib :庫
- /usr :系統應用程式
- /tmp:各種臨時文件
- /opt:第三方應用程式
- /proc:系統記憶體映射,虛擬文件系統
- /mnt:臨時文件系統掛載點
- /media:移動設備掛載點
2.2 文件類型、許可權、組
# 文件類型 –:普通文件 d:目錄文件 b:塊文件 c:字元文件 l:符號鏈接文件 p:管道文件pipe s:套位元組文件socket # 許可權 r:可讀,表示文件可讀,目錄可看列表 w:可改,表示文件可改,目錄可在內部新建和刪除文件 x:可運行,表示文件可運行,目錄可進入 可用數字表示:4=r,2=w,1=x 467分別表示:可讀,可讀可寫,可讀可寫可運行
輸入命令cd /
,ls -l
顯示根目錄文件,首字母就表示文件類型,剩餘表示許可權,之後的數字表示連接數,跟著兩個是所有者和所屬組
2.3 關於文件目錄的命令
cd:進入目錄 ls:列出目錄 mkdir:創建目錄 touch:創建文件 mv:移動文件 rm:刪除 cp:複製
2.4 文件打包與壓縮
歸檔:也稱打包,將多個文件或目錄一起建立歸檔,一般是形成 .tar 文件
壓縮:利用演算法對文件進行處理,達到壓縮大小的目的
注意:是不能直接壓縮目錄的,將多個文件或目錄打包成一個 .tar 文件然後才能進行壓縮,所以打包和壓縮一般是同時進行的。壓縮格式有:bz2,xz,zip,gz(最常見)
tar -zcvf:選項從左到右表示gzip壓縮,打包文件,顯示過程,指定文件名 tar -zxvf:其中z表示解壓縮(同一選項不同功能),x表示解包 tar -zcvf file.tar.gz file:表示將file打包與壓縮並命名為file.tar.gz,其後綴是為了方便辨認
2.5 文本編輯器Vim
在一切皆文件下,學會使用文本編輯器很關鍵,這裡介紹Vim
在沒有學Vim之前,筆者進入文本編輯器看著命令行不知所措,亂按一通沒有效果,只好關機重啟,居然被小小的文本編輯器打敗了,不好意思說是電腦專業的,這和windows的記事本完全不一樣。在進入Vim之前,請先看清楚使用方法,不然進去就和筆者一樣要重啟解決
一、Vim的三種模式:
Normal:默認進入時的模式,輸入會被當成命令
i:進入Insert模式 gg:跳轉文頭 G:跳轉文末 /:查找 n:下一個 y:複製 p:粘貼 x:刪除 u:撤回
Insert:輸入的內容會插入到文件中(按 i 進入)
ESC鍵:退出Insert,進入Normal模式
Command :在Normal下輸入:
會進入,在最後一行會有提示
:q 不保存退出 :q! 不保存強制退出 :w 保存但不退出 :w! 強制保存 :wq! 強制保存退出 :w [文件名] 另存為
二、Vim的進入:
vim 文件名:直接進入
3. 應用系統
3.1 應用程式安裝
Linux應用程式的安裝可分為源碼安裝和二進位安裝
源碼安裝:是編寫出的源程式碼,需電腦編譯成二進位文件後才可進行安裝,其編譯時間較長,安裝步驟繁雜,若安裝過程中報錯,新手是很難解決的,但也有優勢:可自由選擇需要的功能甚至可以改寫源程式碼,因為是編譯安裝所以更適合自己的系統,效率和穩定性也有提升(筆者還未接觸到,不做說明)
二進位安裝(舉例rpm包管理器):是源碼經過編譯後的安裝包,安裝速度較快,不需要編譯所以出錯概率很小
rpm安裝是用默認安裝路徑的,不建議修改
i:安裝 v:詳情 h:進度 rpm -ivh 包全名:表示安裝某一程式,注意要出現兩次100%才是安裝完成,第一次表示完成安裝的準備
rpm安裝也有其缺點,因為程式間依賴關係複雜,若rpm安裝過程中缺失依賴會報錯,而且卸載時要從後安裝的依賴開始卸載
a:查詢所有套件 q:查詢是否安裝某軟體 |:管道符,將前面命令的輸出交給後面的命令 grep:搜索 # 查詢某程式是否安裝 rpm -qa | grep 程式包名
查詢 yum程式 是否安裝
這些程式安裝都過於繁雜,有沒有適合新手的? 當然有那就是yum了,yum是基於rpm的,所以也是二進位安裝,安裝速度較快,重要的是自動解決依賴問題,不需要手動下載
yum安裝
y:安裝過程中的選項都選擇yes install:安裝rpm軟體包 search:查看特定安裝包 update:更新rpm軟體包 check-update:檢查是否有可用的更新rpm軟體包 remove:刪除指定的rpm軟體包
這裡舉例 gcc程式 的安裝,gcc是C語言編譯器,這學期上Linux程式設計需要用到
yum -y install gcc
從安裝過程可以看到,yum會自動解決依賴關係,一鍵安裝的感覺
3.2 程式的打開
常規的程式在命令行輸入程式名即可打開,其安裝在 $PATH下,即 /bin,/usr/bin,/usr/local/bin中,系統會去 $PATH 下查找,類似於windows下的環境變數
其他程式則要主動去到程式的安裝目錄下輸入啟動文件來打開,假如要打開lampp
/opt/lampp/./lampp start 其中./表示當前目錄,不然系統會去環境變數找
或者將這個程式的安裝目錄加入到 $PATH中,這樣就可以在命令行直接輸入來啟動程式了(類似windows下添加jdk環境變數)
export PATH = $PATH:/opt/lampp
4. Shell
4.1 Shell編程
Shell編程是對Linux命令的邏輯化處理,筆者筆記的自動上傳也是用了Shell編程,不要覺得很深奧,其實有了程式語言的基礎,幾分鐘就可以入門。筆者挑出部分基礎說明,達到讓大家認識Shell編程的目的即可
簡單入門
touch helloWorld.sh (新建一個helloWorld.sh文件,`後綴`只是為了方便辨認,沒有實質作用) vim helloworld.sh (文件中加入 echo "helloworld" ,echo表示輸出,保存並退出vim) chmod +x helloworld.sh (增加可運行的許可權) ./helloworld.sh (運行Shell腳本)
是不是很簡單?
4.2 與Java的差異
布爾運算 | 解釋 |
---|---|
! | 非 |
-o | 或 |
-a | 與 |
關係運算符 | 解釋 |
---|---|
-eq | 數字是否相等 |
-gt | 大於 |
-lt | 小於 |
字元串運算符 | 解釋 |
---|---|
-z | 長度是否為0,為0返回true |
str | 是否為空 |
if:(簡單事例)
a=1; b=1; if [ $a -eq $b ] then echo "equal" elif [ $a -gt $b ] then echo "大於" else echo "小於" fi
for:(簡單事例)
#!/bin/bash for value in 1 3 5 7 9 do echo $value done exit 0
5. 內核
內核提供進程管理,網路管理等功能,所以筆者將這些內容歸到內核模組下
5.1 進程–ps
e:顯示所有程式 f:顯示UID,PPIP,C與STIME欄位
UID:用戶ID PID:進程ID PPID:父進程ID C:優先順序 STIME:進程啟動的時間 TTY:使用終端 TIME:CPU時間 CMD:顯示完整的啟動進程所用的命令和參數
5.2 進程–kill
關閉進程,那麼首先需要知道進程ID。假如關閉運行的vim
ps -ef | grep vim kill [進程號]
左邊為開著的vim進程
5.3 進程–前後台
jobs:查看後台運行的進程 fg:將後台進程轉至前台 bg:將前台進程轉至後台 在命令行最後加入 &:也是將前台進程轉至後台
這裡將下載redis的任務加入後台(快捷鍵 Ctrl + z),用jobs查看後台進程,再用fg將其調至前台
5.4 網路–埠
netstat
n:不DNS輪詢,顯示IP t:顯示TCP埠 u:顯示UDP埠 l:僅顯示套接字 p:顯示進程標識符和程式名稱 # 查看80埠 netstat -ntp | grep 80
防火牆埠 firewall-cmd
--query-port=<埠號>/<protocol>:查詢指定埠 --add-port=<埠號>/<protocol>:開放埠 --remove-port=<埠號>/<protocol>:關閉埠 --zone=public:作用域 --permanent:永久生效 --reload:重啟防火牆 # 查詢是否開啟 firewall-cmd --zone=public --query-port=80/tcp # 開啟防火牆埠 firewall-cmd --zone=public --add-port=80/tcp --permanent # 重載防火牆 firewall-cmd --reload
這是筆者目前所淺顯理解的Linux,Linux很優秀,需要在不斷地使用中去挖掘
參考:
CentOS 7
菜鳥教程
《鳥哥的私房菜》