初探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

​ 菜鳥教程

《鳥哥的私房菜》