1. 程式人生 > >Linux入門詳解

Linux入門詳解

Linux基礎知識

Linux&Unix

   說起Linux,就不得不提Unix作業系統。

   Unix系統號稱世界上最穩定的系統,就連蘋果公司也從中獲取靈感開發出了移動端大名鼎鼎的IOS

   Unix作業系統有一個特點即為多使用者多工,同一時刻允許多個使用者同時使用該系統且互不干擾。

   Linux的全稱為GNU/Linux,核心於1991年10月5日首次釋出,是基於Unix系統開發而來的。

   它的基本思想是一切皆檔案,其描述如下:

   每個檔案都有確定的用途。其中第一條詳細來講就是系統中的所有都歸結為一個檔案,包括命令、硬體和軟體裝置、作業系統、程序等等對於作業系統核心而言,都被視為擁有各自特性或型別的檔案。

   Linux全稱中的GNU也是一個可以聊的點,GNU是一個專案,由Richard Stallman在1983年9月27日公開發起,它的目標就是建立一套完全自由的作業系統,在其中有一條GPL條款,該條款大體思想如下:

   可以自由的使用,複製,修改,釋出GNU專案下的軟體。

   所有GNU軟體都有一份在進位制其他人新增任何限制的情況下授予所有權利給任何人的協議條款。

   1.你有自由以任何目的來執行該程式

   2.你有修改程式滿足自己需求的自由

   3.你有權利重新發布副本,既可以白送也可以收取一定的費用

   4.你有權利釋出該程式修改過的版本,從而讓其他人得益於你的改進

   所以Linux其原始碼完全開源,歷經這麼多年的沉澱已經非常優秀,大量的程式設計師對研究它樂此不疲。

  

Os&Kernel&系統呼叫介面

   Os即為作業系統的意思,作業系統是一個用來協調,管控計算機硬體和軟體資源的系統程式。它位於硬體和應用程式之間。

   每個作業系統都有一個核心Kernel,它是為應用程式提供對計算機硬體安全訪問的一個軟體,負責所有的物理資源。包括:檔案系統,記憶體管理,裝置管理和程序管理。

   因此我們一般將計算機分為三層:

  

   一個應用軟體如果想操縱底層硬體,必須經過系統呼叫介面發起系統呼叫,再由系統呼叫操縱核心,最後經核心幫助呼叫底層的系統硬體。

  

   所以說作業系統的呼叫介面是服務於應用層面的軟體的,但其本身屬於作業系統這一層。

   在核心進行操縱硬體時,實際上會切換CPU狀態,核心態與使用者態,詳情參見: 計算機基礎

映象安裝

   Linux下有很多發行版本,如最近大火的UOS常年霸佔新聞頭條,除此之外還有CENTOS(企業級), RHEL(紅帽), FEDORA, UBUNTU(烏班圖), SUSE等...

   在這裡我將採用CentOs7.3進行展示,其實各大發行版本的命令大差不差,可以說一通百通。

   Windows環境下可採用虛擬機器的方式進行安裝,這裡我將採用vmware workstation

   點選進行下載Vmware workstation:版本(16.1.0),啟用金鑰:

ZF3R0-FHED2-M80TY-8QYGC-NPKYF

   在下載虛擬機器時,同時下載Centos7.3

   點選進行下載Centos 7.3 iso:

  

   這裡將不演示Vmware的安裝,一路點選下一步即可。

   安裝Centos映象:

  

  

  

  

  

  

  

  

  

  

  

  

  

Centos安裝

  

  

  

記憶體最低要求:512MB

時區選擇  亞洲中國上海
鍵盤選擇  美式標準鍵盤

帶GUI的伺服器(請勿選擇最小安裝)

建立普通使用者與ROOT密碼(如果密碼強度不夠,按兩次done)

BOOT:引導分割槽 一般給 500M 核心

SWAP:虛擬記憶體 一般給實體記憶體的1.5倍至2.0倍(一般不超過8GB)  作用是緩解記憶體的壓力臨時存放資料

/:根目錄,類似於Windows 的C:\\ D:\\ E:\\ F:\\ 這些碟符概念。實際就叫根目錄

CentOS 預設最小安裝:可以手動選擇一些自帶的軟體

在成功安裝後如果提示:沒有足夠的記憶體自動啟用 kdump,請使用system-config-kdump手動配置 
出現這樣的資訊。意思是說系統意外崩潰之後,kdump程式就負責將核心作業系統的狀態備份下來。

基本介紹

Terminal

   在桌面上單擊滑鼠右鍵,選擇Open Terminal開啟第一個終端。

   也可以使用CTRL + SHIFT + N開啟一個新的終端(當前終端已開啟)。

   Linux終端又叫虛擬控制檯,Linux終端採用字元命令列方式工作,使用者通過鍵盤輸入命令,通過Linux終端對系統進行控制

  

   Linux下可以開啟多個終端,使用CTRL + ALT + [ F1-F6 ]進行終端的切換。

   當用戶登入完成後會有提示符資訊,如上圖所示以普通使用者登入系統後的提示符為$,如果使用root使用者進行登入,提示符為#

# 普通使用者
[yunya@localhost ~]$  

# root使用者
[root@localhost yunya]# 

   使用exit命令退出終端。

   使用tab鍵進行命令補全。

命令演示

   在Linux中命令語法格式為:命令 [選項] [引數]

  

   命令:要求Linux(Unix)執行的指令

   選項:用來修飾命令,告訴命令具體怎麼樣去執行(也可以改變命令)。部分是以‘-’字元開頭的。

   引數:引數就是說命令影響(操作)的是什麼(比如一個檔案,一個視訊等等 ls -a/)

  

   基本命令

   使用init 0關閉當前Linux系統。

   使用clear命令或者快捷鍵CTRL + R進行清屏。

   使用CTRL + C對一條正在執行的命令進行中止。

   檢視幫助:man [命令]

   檢視幫助:命令 --help

   檢視歷史命令記錄:history

   目錄檢視

   使用ls命令進行目錄瀏覽。

   命令選項-l檢視詳細資訊。

   命令選項-a檢視隱藏目錄。

   如下所示,瀏覽根目錄下的詳細資訊:

[root@localhost yunya]# ls -l /

  

   使用者相關

   使用who命令,列出目前該系統上工作的使用者:

[root@localhost yunya]# who
yunya    :0           2021-01-28 13:18 (:0)
yunya    pts/0        2021-01-28 13:32 (:0)
yunya    tty2         2021-01-28 13:29
root     tty3         2021-01-28 13:31

   使用whoami命令,顯示自身使用者的名稱:

[root@localhost yunya]# whoami
root

   使用useradd [username]新建使用者。

   使用passwd [username]修改指定使用者的密碼,如果不加選項[username],則預設清楚當前使用者的密碼。

   從當前使用者切換到另一個使用者,命令su [username]

   如下示例,使用su root命令切換至Root使用者,會提示你進行輸入密碼。(首次輸入密碼即相當於設定密碼)

# 密碼是隱藏的
[yunya@localhost ~]$ su root
Password: 
# 登入成功
[root@localhost yunya]# 

  

   日期相關

   使用date命令檢視日期:

[root@localhost yunya]# date
Thu Jan 28 13:44:29 PST 2021

   如果想設定日期,格式為:date '月日時分年',需要root許可權:

[root@localhost yunya]# date '120112002011'
Thu Dec  1 12:00:00 PST 2011

   使用hwcclock -s命令同步硬體時間:

[root@localhost yunya]# hwclock -s
[root@localhost yunya]# date
Thu Jan 28 13:51:49 PST 2021

   使用cal檢視萬年曆:

[root@localhost yunya]# cal
    January 2021    
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

基礎操作篇

目錄結構

   在LinuxUnix作業系統中,所有的檔案和目錄都被組織成一個以根/節點開始的倒置的樹狀結構。

   Linux中的目錄相當於Windows中的資料夾,目錄中存放的既可以是檔案也可以是其他子目錄。

   Linux下的頂層目錄用/來表示,俗稱為根目錄。在Linux下只能有一個,而Windows下可以有多個,相當於C:\\ D:\\這樣的碟符概念。

   使用.代表當前目錄,即使用者工作的工作目錄。

   使用..代表上層目錄,即當前目錄的上一層目錄。

   使用*表示選中所有檔案及目錄,如/*

重要目錄

   使用ls /可檢視根目錄下的目錄和檔案,其中有一些重要的目錄:

[root@localhost yunya]# ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

   Linux下重要目錄解釋:

目錄名稱描述使用方向
/bin 存放常用的可執行檔案binary二進位制的可執行檔案 不推薦隨意使用
/sbin 存放系統的可執行檔案super binary系統的命令 不推薦隨意使用
/usr 存放常用的可執行檔案binary二進位制的可執行檔案 隨便用
/dev 裝置檔案目錄,存放linux系統下的裝置檔案,訪問該目錄下某個檔案,相當於訪問某個裝置 不推薦隨意使用
/home 家目錄,root使用者家目錄為/root,普通使用者家目錄都存放在/home目錄下,使用使用者名稱作家目錄下的名稱,如使用者名稱yunya的家目錄則存放在/home/yunya,另外使用~代表當前使用者的家目錄 隨便用
/mnt 掛載點目錄,通常可移除式硬體會掛載在此目錄或/media目錄下 隨便用
/media 掛載點目錄,通常可移除式硬體會掛載在此目錄或/mnt目錄下 隨便用
/proc 此目錄的資料都在記憶體中,如系統核心,外部裝置,網路狀態,由於資料都存放於記憶體中,所以不佔用磁碟空間 不推薦隨意使用
/srv 服務啟動之後需要訪問的資料目錄,如www服務需要訪問的網頁資料存放在/srv/www內 不推薦隨意使用
/etc 配置檔案目錄,不建議在此目錄下存放可執行檔案 不推薦隨意使用
/tmp 臨時檔案存放目錄 類似於Windows中的回收站,推薦將暫時不用的檔案存放至此
/var 放置系統執行過程中經常變化的檔案 不推薦隨意使用
/boot 放置linux系統啟動時用到的一些檔案 不推薦隨意使用
/lib 系統使用的函式庫的目錄,程式在執行過程中,需要呼叫一些額外的引數時需要函式庫的協助,比較重要的目錄為/lib/modules。 不推薦隨意使用
/opt 給主機額外安裝軟體所擺放的目錄,但是一般情況下下載的軟體都會存放在/usr/local目錄下 隨便用

重要命令演示

   工作目錄

   使用pwd命令展示當前的工作目錄

  

   切換目錄

命令描述
cd 返回家目錄,也可使用cd ~產生相同效果(root使用者回到/root下,普通使用者回到/home/username下)
cd [路徑] 進入某個目錄
cd .. 返回上級目錄
cd - 返回上一次所在的目錄中

   ls命令

命令描述
ls 檢視當前目錄下的檔案及目錄
ls -l 檢視當前目錄下的檔案及目錄的詳細資訊,可簡寫為ll
ls -d 檢視當前目錄下的子目錄,如加上-l引數,則為檢視目錄的詳細資訊
ls -a 檢視當前目錄下的顯示檔案/隱藏檔案/顯示目錄/隱藏目錄
ls [選項] [路徑引數] 根據選項檢視某一目錄下的檔案及目錄

  

   檢視目錄大小

命令描述
du -sh [目錄名] 檢視目錄大小

   檢視檔案

命令描述
cat [目標檔案路徑] 檢視文字檔案全部內容
head [行數] [目標檔案路徑] 檢視文字檔案內容(預設頭十行) -1 顯示一行
tail [行數] [目標檔案路徑] 檢視文字檔案內容(預設尾部十行)
tail -f [目標檔案路徑] 檢視文字檔案內容,並動態監測文字變化(文字有檔案更新立馬返回)
more [目標檔案路徑] 檢視文字檔案內容,根據螢幕佔比百分比顯示
less [目標檔案路徑] 檢視文字檔案內容,使用上下鍵來翻頁文件

   複製和剪下

命令描述
cp [原檔案路徑] [目標檔案路徑] 拷貝檔案到目標目錄中,如果目標檔案路徑不存在,則建立
cp -r [目錄] [目標檔案路徑] 遞迴的拷貝目錄下的子目錄及檔案至模板目標檔案路徑,如果目標檔案路徑不存在,則建立
mv [原檔案路徑] [目標檔案路徑] 剪下檔案到目標目錄中,如果目標檔案路徑不存在,則建立

   注意:mv命令可用於重新命名,如原檔案路徑和目標檔案路徑相同,則相當於重新命名操作

   建立目錄/檔案

命令描述
touch [目標檔案路徑] 新建檔案到目標檔案路徑中
mkdir [目錄名] 建立一個空目錄
mkdir [目錄名1/目錄名2/目錄名3] 建立一串空目錄

   rm命令

命令描述
rm [目標檔案] 刪除指定檔案,並彈出提示
rm -f [目標檔案] 刪除指定檔案,不彈出提示
rm -rf [目標目錄] 刪除一個目錄樹。包括所有檔案,並且不提示(rm -rf /*萬惡之源刪庫跑路)

管道符過濾

   |管道符

   管道符的作用就是將一系列操作交由下一個命令繼續操作。待所有命令處理完後再打印出來。

   grep

   grep命令是過濾命令,使用正則進行過濾。

   通常與管道符進行配合使用,如下所示:

# 檢視home目錄下所有專案
[root@localhost ~]# ls /home
Jack  ken  NewUser  yunya

# 檢視home目錄下以J或者k開頭的專案名
[root@localhost ~]# ls /home | grep '^[Jk]'
Jack
ken

# 使用grep -v進行反向過濾
# 檢視home目錄下不以J或者k開頭的專案名
[root@localhost ~]# ls /home | grep -v '^[Jk]'
NewUser
yunya

   head

   head命令可以從頭部提取幾條資訊進行檢視。

   除了在讀取文字的時候直接使用,也可以和管道符進行連線配合其他命令使用:

# 只檢視home目錄下的第一個專案
[root@localhost ~]# ls /home | head -1
Jack

   tail

   tail命令可以從底部提取幾條資訊進行檢視。

   除了在讀取文字的時候直接使用,也可以和管道符進行連線配合其他命令使用:

# 只檢視home目錄下的最後一個專案
[root@localhost ~]# ls /home | tail -1
yunya

alias內建命令

   在Linux作業系統中,所有的命令都是有一些預設引數。

   要麼在/bin目錄下,要麼在/sbin目錄下。

   alias命令(注意全為小寫)的功能是設定命令的別名,以簡寫命令,提高操作效率。根據引數的不同,該命令可檢視已設定的別名,或為命令設定新的別名。

   比如cp裡面有個-i的引數,它的作用是在於如果你複製檔案時目標路徑擁有相同檔案,會提示你是否去覆蓋,但是我們呼叫的時候並沒有加 -i 引數,卻還是有這樣的提醒。那就說明系統把 cp -ialisa成了 cp了。

copy的原理

   作業系統中的copy底層實際原理其實就是在copy的目標目錄建立一個和被copy檔案同名的檔案。

   再將被copy檔案中的內容讀取出來再寫入到被拷貝檔案的拷貝目標目錄中的同名檔案裡。這就完成了一次copy

  

   step01:開啟被copy的檔案,載入內容至記憶體中

   step02:在拷貝的目標目錄中建立同名檔案

   step03:將記憶體中存放的被copy檔案資料寫入至同名檔案中

   step04:刪除原目錄下被copy的檔案

使用者與群組篇

使用者資訊檔案

   Linux下一切皆檔案,當使用useradd命令新建一個使用者的話,其實內部也會發生一些變化。

   舉例,當我們使用新建名創建出NewUser後,變化如下:

[yunya@localhost /]$ su root
Password: 
[root@localhost /]# useradd NewUser

   1.使用者資訊檔案:/etc/passwd

   擷取最後兩行內容:

yunya:x:1000:1000:yunya:/home/yunya:/bin/bash
NewUser:x:1001:1001::/home/NewUser:/bin/bash

   在此檔案中,每一行代表一個使用者的資訊。並且以冒號為分隔符,將一行資訊分為七段。

   第一段:使用者名稱

   第二段:密碼佔位符

   第三段:UID(user id),即使用者識別碼,系統管理員是0,1-999為系統使用者,1000-65535為普通使用者

   第四段:GID,(group id),即使用者組識別碼,不同的使用者可以屬於同一個組,並且享有該組的共同許可權

   第五段:COMMENT賬號描述資訊(隨便寫)

   第六段:家目錄路徑,普通使用者在/home下,而root使用者在/root下

   第七段:這一段是一個可執行檔案的路徑,如果該段內容是/bin/bash則說明該使用者可以登入該系統,而如果是在/sbin/nologin下面則說明該使用者不可以登入該系統

   2.使用者密碼檔案:/etc/shadow

   擷取最後兩行內容:

yunya:$1$Af9h4qoA$6AkEHGBWgQjC1RGGAAFRp/:18655:0:99999:7:::
NewUser:!!:18657:0:99999:7:::

   第一段:使用者名稱

   第二段:經過加密的密碼

   後面所有部分為過期時間,過期時的提示資訊等

  

   3.組檔案:/etc/group

   擷取最後兩行內容:

yunya:x:1000:yunya
NewUser:x:1001:NewUser

   第一段:組名,組名預設為使用者名稱,可以說一個使用者就是一個組

   第二段:組密碼佔位符,其真實密碼是存放在/etc/gshadow中

   第三段:組ID,具有唯一性

   第四段:組預設成員,預設的組成員就只有自己

   4.組密碼檔案:/etc/gshadow

yunya:!::
NewUser:!::

   5.使用者家目錄:/home/userName

[root@localhost /]# ls /home
NewUser  yunya

   6.使用者郵箱:/var/spool/mail

[root@localhost /]# ls /var/spool/mail
NewUser  root  rpc  yunya

   在瞭解完上述內容之後,我們發現其實useradd這條命令就是修改了這一系列檔案,那麼我們其實也可以手動的修改檔案內容達到新增使用者的目的。

   第一步:編輯基本使用者資訊,vim /etc/passwd開啟該檔案,按下G跳轉到最後一行,按下o進行編輯,寫入以下內容後按下ESC鍵進入命令模式,按下:進入擴充套件模式,輸入wq!進行儲存退出。

ken:x:1002:1002:this is test user:/home/ken:/bin/bash

   第二步:編輯使用者密碼相關,vim /etc/shadow,重複上述步驟,寫入內容如下:

ken:!::ken

   第三步:編輯使用者組相關,vim /etc/group,重複上述步驟,寫入內容如下:

ken:x:1002:ken

   第四步:編輯使用者組密碼相關,vim /etc/gshadow,重複上述步驟,寫入步驟如下:

ken:!::

   第五步 :建立使用者家目錄,命令如下:

[root@localhost /]# mkdir /home/ken
[root@localhost /]# cp -r /etc/skel/.[!.]* /home/ken
[root@localhost /]# ls -a /home/ken
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

   第六步:建立使用者郵箱檔案,命令如下:

[root@localhost /]# touch /var/spool/mail/ken

   嘗試使用su命令進行切換賬戶:

[root@localhost /]# su ken
[ken@localhost /]$ cd ~
[ken@localhost ~]$ 

使用者相關命令

   檢視使用者id

   你可以使用id userName的方式來檢視某一使用者的ID

  

   useradd命令

命令/選項描述
useradd [選項] [使用者名稱] 使用預設方式建立新使用者
選項:-u 指定使用者的uid
選項:-g 指定使用者所屬的群組
選項:-d 指定使用者的家目錄
選項:-c 指定使用者的備註資訊
選項:-s 指定使用者所用的shell(是否可登入)
選項:-G 指定使用者所屬的附加組

   命令演示:

[root@localhost /]# useradd -u1003 -gken -d/home/Jack -cJack -s/bin/bash Jack
[root@localhost /]# su Jack
[Jack@localhost /]$ 
建立使用者id是1003,群組為ken的群組,家目錄為/home/Jack,賬號描述資訊是Jack,登入狀態是允許登入,使用者名稱是Jack

   userdel命令

命令描述
userdel -r [使用者名稱] 刪除使用者,一定要帶上引數-r,否則將會失敗

   命令演示:

[root@localhost /]# userdel Jack

   usermod命令

命令/選項描述
usermod [選項] [使用者名稱] 修改現有的使用者相關資訊及許可權
選項:-u 修改使用者UID
選項:-g 修改使用者所屬的GID
選項:-d 修改使用者的家目錄(如果家目錄修改,無法通過su切換該使用者)
選項:-c 修改使用者的備註資訊
選項:-s 修改使用者所用的shell(登入狀態)
選項:-G 將使用者所在的組加入到另一個指定的組
選項:-L 鎖定使用者,不能登入
選項:-U 解鎖使用者,可以登入
選項:-o 一般與-g選項同時使用,表示新使用者組的GID可以與系統已有使用者組的GID相同

   命令演示:

[root@localhost /]# id NewUser
uid=1001(NewUser) gid=1001(NewUser) groups=1001(NewUser)
[root@localhost /]# usermod -u1020 -gyunya -cnew_user_message NewUser
[root@localhost /]# id NewUser
uid=1020(NewUser) gid=1000(yunya) groups=1000(yunya)
[root@localhost /]# 

   passwd命令

命令/選項描述
passwd [選項] [使用者名稱] 如果選項為空,則修改使用者密碼
選項:-l 鎖定口令,即禁用該使用者
選項:-u 解鎖口令,即接出該使用者的禁用狀態
選項:-d 使該賬號無口令
選項:-f 強迫使用者下次登陸時修改口令

群組相關命令

   grounpmod命令

命令/選項描述
grounpmod [選項] [群組名] 修改現有的組名相關資訊及許可權
選項:-g 修改群組的GID
選項:-n 修改群組的名稱
選項:-G 將使用者加入到一個指定的組中
選項:-L 鎖定群組,該群組下的使用者將不能登入
選項:-U 解鎖群組,該群組下的使用者將可以登入

   groupdel命令

命令描述
grounpmod [群組名] 刪除一個已有的群組

許可權相關篇

檔案許可權操作

   使用命令ll可檢視一個檔案的詳細資訊,如下所示:

[root@localhost ~]# touch test
[root@localhost ~]# ll test
-rw-r--r--. 1 root root 0 Jan 30 05:19 test

   -rw-r--r--屬於檔案許可權資訊,1是連線數,第一個root是建立者(屬主),第二個root是建立者所屬的群組(屬組),後面的資訊是檔案展位位元組大小與時間。

   對於許可權資訊來說,它分為10個部分:

   第一部分:第1位置,-是普通檔案,d是目錄檔案,b是塊檔案,p是管道檔案,l是軟連結

   第二部分:第2、3、4位,代表屬主的許可權,-是無許可權,r是讀許可權,w是寫許可權,x是可執行許可權

   第三部分:第5、6、7位,代表屬組的許可權,-是無許可權,r是讀許可權,w是寫許可權,x是可執行許可權

   第四部分:第8、9、10位,代表其他使用者的許可權(即除了root和屬主之外的使用者許可權),-是無許可權,r是讀許可權,w是寫許可權,x是可執行許可權

   另外,root許可權使用者高於其他所有,不可對其進行限制

   執行可執行檔案

   如果具有x許可權,代表該檔案可執行,執行方式如下:

# 方式1
sh [檔名]

# 方式2
./ [檔名]

   許可權修改命令chmod

   修改檔案許可權的命令是chmod,分別有在原有基礎上的 +-許可權方法,如原本只有 r--則可以修改成 +xw 就成了 rxw 了。還有一種就是 = 賦值法,清除原有許可權,賦予新的許可權。

   chmod uga=(取消全部許可權)-(只用輸入一個) 用a可以直接等同於 uga= 的操作

   u是屬主,g是屬組,o是其他使用者,a是全部

# 取消所有許可權
[root@localhost ~]# chmod uga= test
[root@localhost ~]# ll test
----------. 1 root root 0 Jan 30 05:19 test

# 取消所有許可權
[root@localhost ~]# chmod a= test
[root@localhost ~]# ll test
----------. 1 root root 0 Jan 30 05:19 test

# 增加所有許可權
[root@localhost ~]# chmod a=rwx test
[root@localhost ~]# ll test
-rwxrwxrwx. 1 root root 0 Jan 30 05:19 test

# 取消屬組的所有許可權
[root@localhost ~]# chmod g= test
[root@localhost ~]# ll test
-rwx---rwx. 1 root root 0 Jan 30 05:19 test

# 取消使用者的所有許可權
[root@localhost ~]# chmod u= test
[root@localhost ~]# ll test
-------rwx. 1 root root 0 Jan 30 05:19 test

# 給屬組增加所有許可權
[root@localhost ~]# chmod g=rwx test
[root@localhost ~]# ll test
----rwxrwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的許可權只有r
[root@localhost ~]# chmod g=r test
[root@localhost ~]# ll test
----r--rwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的許可權在原有基礎上增加w
[root@localhost ~]# chmod g+w test
[root@localhost ~]# ll test
----rw-rwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的許可權在原有基礎上減少w
[root@localhost ~]# chmod g-r test
[root@localhost ~]# ll test
----r--rwx. 1 root root 0 Jan 30 05:19 test

# 修改其他使用者的許可權在原有基礎上減少x
[root@localhost ~]# chmod o-x test
[root@localhost ~]# ll test
----r--r-x. 1 root root 0 Jan 30 05:19 test
[root@localhost ~]# 

目錄許可權操作

   使用ll -d來檢視某個目錄的詳細資訊,如下所示:

[root@localhost ~]# mkdir testDir
[root@localhost ~]# ll -d testDir
drwxr-xr-x. 2 root root 6 Jan 30 05:51 testDir

   對於目錄的可讀許可權來說,意味著能夠檢視該目錄下的內容。

   對於目錄的可寫許可權(只限制子代,超子代不限制)來說,意味著能夠在此目錄中新建、刪除、重新命名專案,對於專案本身的內容操作並不在此範疇之中,如開啟文字檔案編輯其內容。

   對於目錄的執行許可權來說,意味著能夠cd進該目錄中,如果沒有x許可權,就cd不進去。

  

   許可權修改命令chmod

   使用chmod也可對目錄許可權進行操作,操作方式與上述檔案許可權操作方式相同。不再一一例舉。

   以下有一些注意事項:

   要在某個目錄下建立子檔案,該目錄必須要有w許可權,否則不可能建立。

   如果對超父目錄並沒有w許可權,那麼是不影響在父目錄中建立刪除子檔案的。

屬主屬組轉移

   我們既然可以建立一個檔案,當然也可將其送給別人。

   具體命令就是chown

   屬主屬組轉移命令chown

   檢視test檔案:

[root@localhost ~]# ll test
----r--r-x. 1 root root 0 Jan 30 05:19 test

   將其屬主變更為yunya,但是屬組不變,不加.

[root@localhost ~]# chown yunya test
[root@localhost ~]# ll test
----r--r-x. 1 yunya root 0 Jan 30 05:19 test

   將其屬組變更為NewUser使用者,加.,注意與上面的區別:

[root@localhost ~]# chown .NewUser test
[root@localhost ~]# ll test
----r--r-x. 1 yunya NewUser 0 Jan 30 05:19 test

   chown 名字 是隻改屬主

   chown .名字是隻改屬組

   如果想一次性遞迴修改目錄及其子檔案/目錄的屬主數屬組,則命令如下:

chown -R 屬主名 .屬組名 目錄名

   如下所示,在testDir資料夾下新建下迴圈新建了兩個子檔案,對其進行批量轉移屬主:

# 迴圈建立檔案
[root@localhost ~]# cd testDir
[root@localhost testDir]# touch {1..3}.txt
[root@localhost testDir]# touch {a..c}.txt
[root@localhost testDir]# cd ..
[root@localhost ~]# ll testDir/*
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/1.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/2.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/3.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/a.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/b.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/c.txt

# 遞迴轉移屬主
[root@localhost ~]# chown yunya testDir/*
[root@localhost ~]# ll testDir/*
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/1.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/2.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/3.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/a.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/b.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/c.txt
[root@localhost ~]# 

數字許可權

   許可權所對應的數字:

   r -> 4

   w -> 2

   x -> 1

   如果一個檔案的許可權是754,則該檔案許可權代表資訊如下:

   屬主:所有許可權,4+2+1=1

   屬組:讀和執行許可權:4+1=5

   其他使用者:僅有讀許可權:4

   如下示例,直接使用數字許可權對test檔案進行許可權修改:

[root@localhost ~]# chmod 754 test
[root@localhost ~]# ll test
-rwxr-xr--. 1 yunya NewUser 0 Jan 30 05:19 test

檔案操作篇

文件縱向合併

   >覆寫的使用

   >命令可以將一個列印的內容寫入到檔案中,如果該檔案不存在將自動建立,如果檔案中已有內容,此操作將覆蓋原有內容。

   如下所示:

[root@localhost ~]# echo 'Hello,World;' > new_file.txt
[root@localhost ~]# cat new_file.txt
Hello,World;

   >>追寫的使用

   >>命令作用與>命令相同,但是如果原檔案中已有內容,該操作不會覆蓋原檔案內容而是進行追寫操作。

   如下所示:

[root@localhost ~]# echo 'Hello,Linux' >> new_file.txt
[root@localhost ~]# cat new_file.txt 
Hello,World;
Hello,Linux

   這兩種命令能合併出所有列印的內容,如lscat等。

   我們也可以一次性指定多個檔案進行合併,如下所示:

[root@localhost ~]# cat /etc/passwd /etc/shadow > new_file.txt

   這樣的話我們合併檔案裡就有了兩個檔案的內容了。

文件行數統計

   wc命令

   使用wc -l [文件路徑]對文件的行數進行統計:

[root@localhost ~]# wc -l new_file.txt 
88 new_file.txt

  

檔案歸檔操作

   歸檔和壓縮還是有一部分區別的:

   歸檔:相當於去超市買東西,最後拎了一大袋零食出來了

   壓縮:相當於去超市買完東西,領著一大袋子零食還要把空氣擠了

   tar命令之打包

   我們將對以下檔案進行打包操作:

[root@localhost ~]# ls testDir/
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt

   使用tar命令進行打包,命令格式如下:

tar -cvf [打包後的名字即存放地址] [被打包檔案1] [被打包檔案2] [被打包檔案N]

   如下所示:

[root@localhost ~]# tar -cvf testDir.tar testDir/*
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt

[root@localhost ~]# ll testDir.tar 
-rw-r--r--. 1 root root 10240 Jan 30 07:00 testDir.tar

   如果想檢視一個打包後文件中所包含的內容檔案,則使用以下命令:

tar -tf [tar包名]

   示例如下:

[root@localhost ~]# tar -tf testDir.tar 
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt

   tar命令之解包

   如果想解包一個tar檔案,命令格式如下:

tar -xvf [tar包名] -C [解包的路徑(必須存在)]

   示例如下:

[root@localhost ~]# mkdir newDir
[root@localhost ~]# tar -xvf testDir.tar -C newDir
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt
[root@localhost ~]# ls newDir/testDir/
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt

  

檔案壓縮操作

   檔案壓縮必須依賴壓縮演算法,讓其被壓縮後的佔空間容量更小,但是原本內容還能提取出來。

   壓縮的好處有兩個,一是節省儲存空間,而是在網路傳輸時能節省使用者頻寬。

   目前在Linux下有兩種演算法,分別是gzipbzip2

  

   gzip壓縮與解壓

   使用gzip進行壓縮的命令格式如下:

gzip [被壓縮檔案]
# 注意:被壓縮後的檔案都會自動帶上字尾.gz

   使用gunzip命令對gz型別檔案進行解壓,命令格式如下:

gunzip [被解壓的gz型別檔案]

   進行示例演示:

[root@localhost ~]# echo 'Hello,Linux' > newFile.txt
# 壓縮
[root@localhost ~]# gzip newFile.txt
# 解壓
[root@localhost ~]# gunzip newFile.txt.gz

   bzip2壓縮與解壓

   使用bzip2進行壓縮的命令格式如下:

bzip2 [被壓縮檔案]
# 注意:被壓縮後的檔案都會自動帶上字尾.bz2

   使用bunzip2命令對bz2型別檔案進行解壓,命令格式如下:

bunzip2 [被解壓的bz2型別檔案]

   進行示例演示:

# 壓縮
[root@localhost ~]# bzip2 newFile.txt 
# 解壓
[root@localhost ~]# bunzip2 newFile.txt.bz2 

tar.gz安裝包

   tar.gz是在Linux下常見的二進位制安裝包,其實究其原理就是打包和壓縮的結合應用。

   歸檔與壓縮以及如何壓縮目錄

   上面介紹的命令都不能壓縮目錄,同時原始檔在單純的壓縮後也將被刪除,一般來說,我們壓縮目錄或檔案之前都會先對其進行歸檔,但是如果按照先歸檔再壓縮的命令流程來執行其操作會十分繁瑣。

   所以這裡提供一種非常便捷的壓縮目錄和檔案的方式,並且原始檔不會被刪除:

tar cvzf [歸檔並壓縮後的包名.tar.gz] [將要歸檔和壓縮的目錄/檔名]

   解壓縮和解包的命令如下:

tar xvf [被歸檔並壓縮後的報名.tar.gz] -C [解包後的存放路徑]

   示例如下:

# 打包並解壓
[root@localhost ~]# tar cvzf testDir.tar.gz ./testDir
./testDir/
./testDir/1.txt
./testDir/2.txt
./testDir/3.txt
./testDir/a.txt
./testDir/b.txt
./testDir/c.txt

# 解壓並解包
[root@localhost ~]# tar xvf testDir.tar.gz -C /usr/tmp/
./testDir/
./testDir/1.txt
./testDir/2.txt
./testDir/3.txt
./testDir/a.txt
./testDir/b.txt
./testDir/c.txt

VIM編輯器

   vim編輯器作為Linux的自帶編輯器可以說十分強大,也被很多追捧的人譽為編輯器之神,它的操作方式非常具有特色但是學習難度較大,所以本章節只會介紹基礎操作,感興趣的小夥伴可以自行學習這一技能,絕對加分不少。

   vim編輯器分為兩種,一種叫vi,一種叫vim(vi modify)

   vimvi的基本用法相同,但是某些場景下更為強大。

   使用vim編輯器的基本語法:

vim [檔案路徑]
# 檔案不存在將建立

   vim有三種模式,如圖所示:

  

   以下是命令列模式或擴充套件模式中一些常用命令或快捷鍵:

命令/快捷鍵描述
h 游標向左移動
l 游標向右移動
j 游標向上移動
k 游標向下移動
dd 刪除游標所在的行,一直摁住一直刪除
ndd 刪除游標所在行下的n行
u 撤銷上一步操作
vv 複製游標所在的行
P 貼上內容到游標所在行的上一行
p 貼上內容到游標所在行的下一行
gg 跳到檔案第一行
G 跳到檔案最後一行
nG 跳到檔案的第n行
$ 跳到當前游標所在行的尾部
0 跳到當前游標所在行的首部
H 游標移動到當前螢幕展示內容區域第一行的第一個字元
M 游標移動到當前螢幕展示內容區域中間行的第一個字元
L 游標移動到當前螢幕展示內容區域最後一行的第一個字元
/ 進入搜尋模式,支援正則表示式。N是上一個,n是下一個
set nu 顯示行號(擴充套件模式)
CART + R 重做操作

系統與程序篇

Linux啟動流程

   1.載入BIOS硬體並進行自我測試,獲取第一個可啟動裝置

   由BIOS去載入COMS的配置項,配置項包括主機各項硬體資訊。然後BIOS會進行自我測試,開始硬體初始化,定義可啟動裝置的順序,為下一步讀取MBR做準備。

   2.讀取並執行第一個啟動裝置內MBR的boot loader程式(該程式也可能是grub,spfdisk等)

   BIOS通過INT13讀取MBR

   硬碟中第一個扇區MBR中儲存啟動管理程式Boot Loader,該程式作用是處理並載入核心檔案。

   3.根據Boot Loader配置載入Kernal,Kernal開始檢測硬體並且載入驅動程式

   Boot Loader管理讀取核心檔案之後,Linux系統將會被壓縮至主記憶體中。

   此時Linux核心Kernal會再檢測一次硬體,但不一定會使用BIOS檢測硬體資料。

   檢測完畢之後,由核心開始接管工作,檔案位於/boot/vmlinuz

   4.硬體驅動載入成功後,Kernal主動呼叫init程式,而init程式會獲得Run Level資訊

   核心會主動呼叫的第一個執行程式就是/sbin/init

   該程式主要功能是準備軟體執行環境,包括系統主機名稱、網路配置、語系處理、檔案系統格式以及其他服務的啟動等。

   在該程式執行時,會去載入/etc/inittab檔案中的專案,該檔案主要用於設定Linux執行等級。

   預設載入等級為5級及以上:

id:5:initdefault

   關於等級劃分如下所示:

   0:關機,如init 0命令就是呼叫該等級

   1:單使用者模式

   2:無網路支援的多使用者模式

   3:有網路支援的多使用者模式

   4:保留,未使用(開發者模式)

   5:有網路支援,有X-Window支援的多使用者模式(圖形化介面,GUI)

   6:重新引導系統,即重啟

   5.init執行/etc/rc.d/rc.sysinit或init.d檔案來準備軟體執行的作業環境

   在執行等級確定之後,Linux開始執行使用者級別的檔案,其第一個執行的檔案就是/etc/rc.d/rc.sysinit,該指令碼程式所做的工作非常多,包括設定PATH,設定網路配置(/etc/sysconfig/network)、啟動swap分割槽,設定/proc等等。

   當/etc/rc.d/rc.sysinit指令碼執行完成之後,將會從/etc/modules.conf檔案或者從/etc/modules.d檔案讀取配置來裝載核心模組。

   6.init以Run Level來啟動各個服務(script方式)

   根據執行級別的不同,系統會在/etc/rc.d目錄下執行rc0.d

   到rc6.d中對應的指令碼程式,來完成初始化工作和啟動相應的服務。

   7.init執行/etc/rc.d/rc.local檔案

   該檔案載入完畢後,我們就可以對系統發出操作命令,進行使用者個性化設定等操作。

   8.init執行終端機模擬程式mingetty來啟動login程式,等待使用者登入後即可使用

   執行/sbin/mingetty檔案,該檔案就是啟動終端機的命令,最後將執行/bin/login程式。

   擴充套件閱讀

   從 CentOS7開始,/etc/inittab下的檔案已停用。

   https://blog.csdn.net/eaefahdbe/article/details/95739112

   CentOs8忘記密碼怎麼辦?檢視下面教程:

   https://it.baiked.com/linux/4895.html

   如何進行MBR加密?保證系統安全?檢視下面教程:

   https://www.cnblogs.com/junjind/p/8993420.html MBR破解使用者密碼

   https://www.cnblogs.com/kevingrace/p/8387827.html MBR加密

   如何對BIOS進行加密?BIOS加密安全嗎?

   https://baijiahao.baidu.com/s?id=1609967141725113371&wfr=spider&for=pc

任務&記憶體檢視

   在Linux中一切皆檔案,對於程序而言就是一些正在執行狀態中的檔案。

   檔案本身躺在硬碟中是死的,但是當被載入到記憶體中從而讓CPU進行呼叫的時候就活了過來,因此可以理解為當前正在被CPU呼叫的檔案就是一個程序。

   關閉程序知識

   什麼是關閉程序?

   被關閉的程序實際上就是在記憶體中被釋放。這種釋放的時機可以是被動的,也可以是手動的,當程序被關閉後將不會佔用CPU運算資源以及記憶體的儲存資源了。

   Linux程序相關名詞

   父程序:當程式A執行過程中呼叫了程式B,程式A可稱為程式B的父程序

   子程序:當程式A執行過程中呼叫了程式B,程式B可稱為程式A的子程序

   守護程序:當程式A執行過程中呼叫了程式B,而當程式A執行完畢後程序B也被強制關閉,程式B可稱為守護程序

   殭屍程序:當程式A執行完畢後並未釋放所有資源,如程序編號等未被釋放,此時的程式A將可以被稱為殭屍程序

   中斷資訊:中斷資訊用於控制程序的執行

   動態監控作業系統命令(工作管理員):top

   使用top命令可檢視如下資訊,節選:

top - 19:18:41 up 17:38,  5 users,  load average: 0.03, 0.04, 0.05
Tasks: 177 total,   1 running, 176 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.1 us,  2.4 sy,  0.0 ni, 88.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999936 total,    83316 free,   692712 used,   223908 buff/cache
KiB Swap:  2097148 total,  2042268 free,    54880 used.    92496 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND    
  2861 yunya     20   0 1509200 366360  24612 S  9.0 36.6   2:36.44 gnome-shell
  2308 root      20   0  219124  25416   3876 S  4.3  2.5   0:50.00 Xorg       
 46695 yunya     20   0  551872  18888  11260 S  1.3  1.9   0:13.38 gnome-term+
     1 root      20   0  193628   4820   2816 S  0.0  0.5   0:04.68 systemd    
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd   
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.46 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0

   命令視窗描述如下所示:

   top - 19:18:41:當前系統時間

   up 17:38:本次開機時長

   5 users:當前系統登入使用者數量

   load average: 0.03, 0.04, 0.05:CPU平均負載

   Tasks: 177 total, 1 running, 176 sleeping, 0 stopped, 0 zombie:total任務總數,running正在執行,sleeping睡眠程序,stopped暫停的程序,zombie殭屍程序

   %Cpu(s):當前展示多個CPU(百分比顯示),可按下數字1顯示每個CPU的詳細資訊

   us:使用者程序佔比

   sy:系統程序佔比

   ni:儲存值佔比

   id:剩餘佔比

   wa:輸入輸出操作佔比

   hi:硬體中斷佔比

   gi:軟體中斷佔比

   st:CPU被其他虛擬機器所佔用的百分比

   KiB Mem:記憶體資訊

   total:總記憶體

   free:剩餘記憶體

   used:被使用記憶體

   buff/cache:記憶體緩衝區

   KiB Swap:虛擬記憶體

   total:總記憶體

   free:剩餘記憶體

   used:被使用記憶體

   avail Mem:可使用記憶體

   PID:程序號

   USER:使用者

   PR:優先值

   NI:排後值

   VIRT:虛擬記憶體佔用

   RES:實體記憶體佔用

   SHR S:貢獻記憶體執行狀態,S代表停止,R代表執行

   %CPU:程序佔用CPU百分比

   %MEM: 程序佔用記憶體百分比

   TIME+:程序執行時長