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
基礎操作篇
目錄結構
在Linux
或Unix
作業系統中,所有的檔案和目錄都被組織成一個以根/
節點開始的倒置的樹狀結構。
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 -i
給alisa
成了 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
這兩種命令能合併出所有列印的內容,如ls
、cat
等。
我們也可以一次性指定多個檔案進行合併,如下所示:
[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
下有兩種演算法,分別是gzip
與bzip2
。
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)
。
vim
和vi
的基本用法相同,但是某些場景下更為強大。
使用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+:程序執行時長