一、電腦基礎和Linux基礎知識 1.馮諾依曼體繫結構 1946年美籍匈牙利數學家馮·諾依曼於提出存儲程式原理,把程式本身當作數據來對待,程式和該程式處理的數據用同樣的方式儲存。馮·諾依曼體系的要點是: 數字電腦的數制採用二進位,bit位, byte位元組1 byte = 8 bit 電腦應該按 ...
一、電腦基礎和Linux基礎知識
1.馮諾依曼體繫結構
1946年美籍匈牙利數學家馮·諾依曼於提出存儲程式原理,把程式本身當作數據來對待,程式和該程式處理的數據用同樣的方式儲存。馮·諾依曼體系的要點是:
- 數字電腦的數制採用二進位,bit位, byte位元組1 byte = 8 bit
- 電腦應該按照程式順序執行
- 電腦硬體由運算器、控制器、存儲器、輸入設備和輸出設備五大部分組成
8個二進位位bit(b)稱為一個位元組byte(B)
(1)二級制和十進位轉換
0
2^0 1
2^1 10 2
2^2 100 4
2^3 1000 8
2^4 10000 16
2^5 100000 32
2^6 1000000 64
2^7 10000000 128
2^8 256
2^9 512
2^10 1024
#綜上,0的個數等於2的次方數
例:十進位26的二進位計算方法
26=16+8+2
10000 16
01000 8
00010 2
11010
#方法:用2的n次方的數去湊成所要求的二進位數,奇數+1
(2)ibase和obase用法
ibase:設置輸入數據的進位
obase:設置輸出數據的進位
[root@rocky01 ~]#bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
obase=2
ibase=10
26
11010
不同進位轉換:
八進位轉十進位: echo "obase=10; ibase=8; 377" lbc
二進位轉十進位: echo "obase=10; ibase=2; 11111111" |bc
二進位轉16進位: echo "obase=16; ibase=2; 11111111" |bc
[root@rocky01 ~]#echo "obase=10; ibase=8; 377" |bc
255
[root@rocky01 ~]#echo "obase=10; ibase=2; 11111111" |bc
255
[root@rocky01 ~]#echo "obase=16; ibase=2; 11111111" |bc
FF
2.摩爾定律
由英特爾(Intel)創始人之一戈登·摩爾於1965年提出,當價格不變時,集成電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,性能也將提升一倍
3.Linux/Unix 哲學思想、原則、理念
- 一切都是一個文件(包括硬體)
- 小型,單一用途的程式
- 鏈接程式,共同完成複雜的任務(shell腳本)
- 避免令人困惑的用戶界面
- 配置數據存儲在文本中
4.開源許可證 GPL、BSD、MIT、Mozilla、Apache和LGPL
(1)區別
(2)查看軟體的發行許可(License)
[root@rocky01 ~]#rpm -qi kernel |grep License
License : GPLv2 and Redistributable, no modification permitted
[root@rocky01 ~]#
[root@rocky01 ~]#rpm -qi openssh|grep License
License : BSD
5.安裝Centos8、Rocky8和Ubuntu20.4
(1)Centos8、Rocky8
(1.1)在啟動安裝時按Tab鍵在命令後面添加" net.ifnames=0 biosdevname=0 "可以將網卡名稱限定為eth開頭
(1.2)系統預設語言選擇:English
(1.3)時區:Asia/Shanghai
(1.4)安裝方式:Minimal Install (建議選擇最小安裝,遇到錯誤去解決後能積累經驗)
(1.5)分區:暫時預設
(1.6)網路和主機名
(1.7)設置root用戶和密碼
(1.8)創建普通用戶
(1.9)重啟安裝完成
(2)Ubuntu
(2.1)系統預設語言選擇:English
(2.2)安裝或升級:選擇Continue without updating 安裝不更新
(2.3)鍵盤語言佈局:預設English
(2.4)網路配置:開啟了DHCP會自動分配一個IP地址
(2.5)代理配置:預設
(2.6)鏡像地址:http://mirrors.aliyun.com/ubuntu/ 使用阿裡雲的鏡像地址,在國內速度快些
(2.7)分區:暫時預設
(2.8)創建普通用戶
(2.9)Enable Ubuntu Advantage:預設
(2.10)開啟SSH
(2.11)Featured Server Snps:預設
(2.12)安裝完成後重啟
6.什麼是Shell
Shell 是Linux系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行。
#各種Shell
[root@rocky01 ~]#echo ${SHELL}
/bin/bash
[root@rocky01 ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
7.shell中可執行的兩類(內外)命令
- 內部命令:由shell自帶的,而且通過某命令形式提供, ,用戶登錄後自動載入並常駐記憶體中
- 外部命令:在文件系統路徑下有對應的可執行程式文件,當執行命令時才從磁碟載入至記憶體中,執行完畢後從記憶體中刪除
查看是內部還是外部命令
type COMMAND
[root@rocky01 ~]# type -a echo
echo is a shell builtin #內部命令
echo is /usr/bin/echo #外部命令
#綜上,echo既是內部命令又是外部命令
[root@rocky01 ~]# type -a who
who is /usr/bin/who #外部命令
hash緩存表
系統初始hash表為空,當外部命令執行時,預設會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去PATH路徑下尋找,利用hash緩存表可大大提高命令的調用速率
命令常見用法
- hash 顯示hash緩存
- hash -l 顯示hash緩存,可作為輸入使用
- hash -p path name 將命令全路徑path起別名為name
- hash -t name 列印緩存中name的路徑
- hash -d name 清除name緩存
- hash -r 清除緩存
8.文件系統目錄結構
(1)結構
文件和目錄被組織成一個單根倒置樹結構
文件系統從根目錄下開始,用“/”表示
根文件系統(rootfs):root filesystem
標準Linux文件系統(如:ext4),文件名稱大小寫敏感,例如:MAIL, Mail, mail, mAiL
以 . 開頭的文件為隱藏文件
路徑分隔的 /
文件名最長255個位元組
包括路徑在內文件名稱最長4095個位元組
藍色-->目錄 綠色-->可執行文件 紅色-->壓縮文件 淺藍色-->鏈接文件 灰色-->其他文件
除了斜杠和NUL,所有字元都有效.但使用特殊字元的目錄名和文件不推薦使用,有些字元需要用引號來引用
(2)常用目錄功能
- /bin:所有用戶使用的基本命令;不能關聯至獨立分區,OS啟動即會用到的程式
- /sbin:管理類的基本命令;不能關聯至獨立分區,OS啟動即會用到的程式
- /boot:引導文件存放目錄,內核文件(vmlinuz)、引導載入器(bootloader, grub)都存放於此目錄
- /dev:設備文件及特殊文件存儲位置
- /etc:配置文件目錄
- /home:普通用戶家目錄
- /lib:啟動時程式依賴的基本共用庫文件以及內核模塊文件(/lib/modules)
- /lib64:專用於x86_64系統上的輔助共用庫文件存放位置
- /media:攜帶型移動設備掛載點
- /mnt:臨時文件系統掛載點
- /opt:第三方應用程式的安裝位置
- /proc:用於輸出內核與進程信息相關的虛擬文件系統
- /sys:用於輸出當前系統上硬體設備相關信息虛擬文件系統
- /root:管理員的家目錄
- /run:目前在系統中運行的一些臨時文件
- /srv:系統上運行的服務用到的數據
- /tmp:臨時文件存儲位置
- /usr: universal shared, read-only data
├── bin: 保證系統擁有完整功能而提供的應用程式
├── sbin:
├── lib:32位使用
├── lib64:只存在64位系統
├── include: C程式的頭文件(header files)
├── share:結構化獨立的數據,例如doc, man等
├── local:第三方應用程式的安裝位置- /var:variable data files
├── cache: 應用程式緩存數據目錄
├── lib: 應用程式狀態信息數據
├── local:專用於為/usr/local下的應用程式存儲可變數據
├── lock: 鎖文件
├── log: 日誌目錄及文件
├── opt: 專用於為/opt下的應用程式存儲可變數據
├── run: 運行中的進程相關數據,通常用於存儲進程pid文件
├── spool: 應用程式數據池
├── tmp: 保存系統兩次重啟之間產生的臨時數據
9.Linux下的文件類型
- - 普通文件
- d 目錄文件directory
- l 符號鏈接文件link
- b 塊設備block
- c 字元設備character
- p 管道文件pipe
- s 套接字文件socket
10.文件元數據和節點表結構
(1)inode 表結構
每個文件的屬性信息,比如:文件的大小,時間,類型等,稱為文件的元數據(meta data)。這此元數據是存放在inode(index node)表中。inode 表中有很多條記錄組成,第一條記錄對應的存放了一個文件的元數據信息
每一個inode表記錄對應的保存了以下信息:
- inode number 節點號
- 文件類型
- 許可權
- UID
- GID
- 鏈接數(指向這個文件名路徑名稱個數)
- 該文件的大小和不同的時間戳
- 指向磁碟上文件的數據塊指針
- 有關文件的其他數據
指針
磁碟是一種塊文件,以塊的方式來存儲數據,每塊通常都是4K,
- 直接指針
直接指針直接指向存放的位置,直接指針只有12個,12x4K=48K,可以表達48K的數據一個文件假如是1K或者哪怕是一個位元組,也要分配一塊4k的空間來存儲這個文件,一個文件假如是10k,分配3塊空間來存放,就有3個指針來指向存放的3個塊- 間接指針
指針不是直接指向數據存儲的位置,而是指向指針塊,指針塊也是4K大小,一個指針放4個位元組,一個指針塊可以放1024個指針,4Kx1024=4M ,可以表達4M的數據超過48K低於4M,就可以用間接指針來表示- 雙重間接指針一個間接指針塊指向另一個間接指針塊矩陣4Kx1024x1024=4G,可以表達4G的數據
- 三重間接指針
4Kx1024x1024x1024=4T,可以表達4T的數據
(2)硬鏈接
硬鏈接本質上就給一個文件起一個新的名稱,實質是同一個文件
硬鏈接特性
- 創建硬鏈接會在對應的目錄中增加額外的記錄項以引用文件
- 對應於同一文件系統上一個物理文件
- 每個目錄引用相同的inode號
- 創建時鏈接數遞增
- 刪除文件時:rm命令遞減計數的鏈接,文件要存在,至少有一個鏈接數,當鏈接數為零時,該文件被刪除
- 不能跨越驅動器或分區
- 不支持對目錄創建硬鏈接
格式
ln filename [linkname ]
(3)軟鏈接或符號鏈接
一個符號鏈接指向另一個文件,就像 windows 中快捷方式,軟鏈接文件和原文件本質上不是同一個文件
軟鏈接特點
- 一個符號鏈接的內容是它引用文件的名稱
- 可以對目錄創建軟鏈接
- 可以跨分區的文件實現
- 指向的是另一個文件的路徑;其大小為指向的路徑字元串的長度;不增加或減少目標文件inode的引用計數
- 在創建軟鏈接時, 如果源文件使用相對路徑,是相對於軟鏈接文件的路徑,而非相對於當前工作目錄,但是軟鏈接的路徑如果是相對路徑,則是相對於當前工作目錄
格式
ln -s filename [linkname]
(4)硬鏈接和軟鏈接的區別
硬鏈接 | 軟鏈接 | |
本質 | 本質是同一個文件 | 本質不是同一個文件 |
跨設備 | 不支持 | 支持 |
inode(節點) | 相同 | 不同 |
鏈接數 | 創建新的硬鏈接,鏈接數增加;刪除硬鏈接,鏈接數減少 | 創建或刪除,鏈接數不會變化 |
文件夾 | 不支持 | 支持 |
相對路徑 | 原始文件相對路徑是相對於當前工作目錄 | 原始文件的相對路徑是相對於鏈接文件的相對路徑 |
刪除源文件 | 只是鏈接數減一,但鏈接文件的訪問不受影響 | 鏈接文件將無法訪問 |
文件類型 | 和源文件相同 | 鏈接文件,和源文件無關 |
文件大小 | 和源文件相同 | 源文件的路徑長度 |
ls -i 列印每個文件的索引號
索引號inode相同的本質上是同一個文件(前提是同一個邏輯捲)
[root@rocky01 ~]# echo abc > f1.txt
[root@rocky01 ~]#
[root@rocky01 ~]# ln f1.txt f2.txt
[root@rocky01 ~]# ln -s f1.txt f3.txt
[root@rocky01 ~]#
[root@rocky01 ~]# ls -li
total 8
201327634 -rw-r--r--. 2 root root 4 Jul 27 15:28 f1.txt
201327634 -rw-r--r--. 2 root root 4 Jul 27 15:28 f2.txt
201327862 lrwxrwxrwx. 1 root root 6 Jul 27 15:28 f3.txt -> f1.txt
11.用戶、組和許可權
(1)用戶
Linux中每個用戶是通過 User Id (UID)來唯一標識的
- 管理員:root, 0
- 普通用戶:1-60000 自動分配
- 系統用戶:1-499 (CentOS 6以前), 1-999 (CentOS 7以後)
- 對守護進程獲取資源進行許可權分配
- 登錄用戶:500+ (CentOS6以前), 1000+(CentOS7以後)
- 給用戶進行互動式登錄使用
(2)用戶組
Linux中可以將一個或多個用戶加入用戶組中,用戶組是通過Group ID(GID) 來唯一標識的。
- 管理員組:root, 0
- 普通組:
- 系統組:1-499(CentOS 6以前), 1-999(CentOS7以後), 對守護進程獲取資源進行許可權分配
- 普通組:500+(CentOS 6以前), 1000+(CentOS7以後), 給用戶使用
(3)用戶和組的關係
- 用戶的主要組(primary group):用戶必須屬於一個且只有一個主組,預設創建用戶時會自動創建和用戶名同名的組,做為用戶的主要組,由於此組中只有一個用戶,又稱為私有組
- 用戶的附加組(supplementary group): 一個用戶可以屬於零個或多個輔助組,附屬組
例:
[root@rocky01 ~]# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
12.磁碟分區
(1)為什麼要分區
- 優化I/O性能
- 實現磁碟空間配額限制
- 提高修複速度
- 隔離系統和程式
- 安裝多個OS
- 採用不同文件系統
(2)分區方式
兩種分區方式:MBR,GPT
(2.1)MBR分區
使用32位表示扇區數,分區不超過2T
MBR分區中一塊硬碟最多有4個主分區,也可以3主分區+1擴展(N個邏輯分區)
MBR分區:主和擴展分區對應的1--4,/dev/sda3,邏輯分區從5開始,/dev/sda5
(2.2)GPT分區
支持128個分區,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
13.文件系統
Linux 常用文件系統
- ext2:Extended fifile system 適用於那些分區容量不是太大,更新也不頻繁的情況,例如 /boot 分區
- ext3:是 ext2 的改進版本,其支持日誌功能,能夠幫助系統從非正常關機導致的異常中恢復
- ext4:是 ext 文件系統的最新版。提供了很多新的特性,包括納秒級時間戳、創建和使用巨型文件(16TB)、最大1EB的文件系統,以及速度的提升
- xfs:SGI,支持最大8EB的文件系統
- swap
- iso9660 光碟
- btrfs(Oracle)
14.RAID
(1)什麼是RAID
"RAID"一詞是由David Patterson, Garth A. Gibson, Randy Katz 於1987年在加州大學伯克利分校發明的。在1988年6月SIGMOD會議上提交的論文"A Case for Redundant Arrays of Inexpensive Disks”"中提出,當時性能最好的大型機不斷增長的個人電腦市場開發的一系列廉價驅動器的性能所擊敗。儘管故障與驅動器數量的比例會上升,但通過配置冗餘,陣列的可靠性可能遠遠超過任何大型單個驅動器的可靠性
獨立硬碟冗餘陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁碟冗餘陣列 (Redundant Array of Inexpensive Disks),簡稱磁碟陣列。利用虛擬化存儲技術把多個硬碟組合起來,成為一個或多個硬碟陣列組,目的為提升性能或數據冗餘,或是兩者同時提升。
RAID 層級不同,數據會以多種模式分散於各個硬碟,RAID 層級的命名會以 RAID 開頭並帶數字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每種等級都有其理論上的優缺點,不同的等級在兩個目標間獲取平衡,分別是增加數據可靠性以及增加存儲器(群)讀寫性能。
簡單來說,RAID把多個硬碟組合成為一個邏輯硬碟,因此,操作系統只會把它當作一個實體硬碟。RAID常被用在伺服器電腦上,並且常使用完全相同的硬碟作為組合。由於硬碟價格的不斷下降與RAID功能更加有效地與主板集成,它也成為普通用戶的一個選擇,特別是需要大容量存儲空間的工作,如:視頻與音頻製作
(1)RAID-0
條帶捲 2+ (最低磁碟個數) 空間利用率100% 讀寫速度快,不容錯
(2)RAID-1
鏡像捲 2 50% 讀寫速度一般,容錯
(3)RAID5
帶奇偶校驗的條帶捲 3+ (n-1)/n 讀寫速度塊,容錯,允許壞一塊盤
(4)RAID6
帶奇偶校驗的條帶集,雙校驗 4+ (n-2)/n 讀寫快,容錯,允許壞兩塊
(5)RAID10
RAID1的安全+RAID0的高速 4 50% 讀寫速度快,容錯
(6)實現軟RAID
mdadm工具:為軟RAID提供管理界面,為空餘磁碟添加冗餘,結合內核中的md(multi devices)
RAID設備可命名為/dev/md0、/dev/md1、/dev/md2、/dev/md3等
常用選項說明:
- 模式:
- 創建:-C
- 裝配:-A
- 監控:-F
- 管理:-f, -r, -a
- <raiddevice>: /dev/md#
- <component-devices>: 任意塊設備
- -C: 創建模式
- -n #: 使用#個塊設備來創建此RAID
- -l #:指明要創建的RAID的級別
- -a {yes|no}:自動創建目標RAID設備的設備文件
- -c CHUNK_SIZE: 指明塊大小,單位k
- -x #: 指明空閑盤的個數
- -D:顯示raid的詳細信息
- mdadm -D /dev/md#
- 管理模式:
- -f: 標記指定磁碟為損壞
- -a: 添加磁碟
- -r: 移除磁碟
- 觀察md的狀態: cat /proc/mdstat
範例
#使用mdadm創建並定義RAID設備
[root@rocky01 ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
#用文件系統對每個RAID設備進行格式化
[root@rocky01 ~]# mkfs.xfs /dev/md0
#使用mdadm檢查RAID設備的狀況
[root@rocky01 ~]# mdadm --detail|D /dev/md0
#增加新的成員
[root@rocky01 ~]# mdadm -G /dev/md0 -n4 -a /dev/sdf1
#模擬磁碟故障
[root@rocky01 ~]# mdadm /dev/md0 -f /dev/sda1
#移除磁碟
[root@rocky01 ~]# mdadm /dev/md0 -r /dev/sda1
#在備用驅動器上重建分區
[root@rocky01 ~]# mdadm /dev/md0 -a /dev/sda1
#系統日誌信息
[root@rocky01 ~]# cat /proc/mdstat
二、Linux基礎命令
1.apt
命令 | 功能 |
apt remove | 會刪除軟體包而保留軟體的配置文件 |
apt purge | 會同時清除軟體包和軟體的配置文件 |
2.查看當前終端設備
VMware同時按Ctrl+Alt+F12345... 可切換新的終端設備
(1)tty
#遠程終端查看
[root@rocky01 ~]#tty
/dev/pts/0
#VMware上查看
[root@rocky01 ~]#tty
/dev/tty1
(2)who
root@ubuntu01:~# who
rye tty1 2022-07-12 11:58
root pts/0 2022-07-12 13:19 (10.0.0.1)
3.設置主機名
註:主機名不支持使用下劃線,但支持橫線,可使用字母,橫線或數字組合
#臨時生效
[root@rocky01 ~]#hostname NAME
#持久生效,支持CentOS7以上和Ubuntu18.04以上版本
[root@rocky01 ~]#hostnamectl set-hostname NAME
4.命令提示符 prompt (PS1)
PS1="\[\e[1;33m\][\u@\h \W]\\$ \[\e[0m\]"
提示符格式說明
- \e 或 \033 控制符
- \u 當前用戶
- \h 主機名簡稱
- \H 主機名
- \w 當前工作目錄
- \W 當前工作目錄基名
- \t 24小時時間格式
- \T 12小時時間格式
- ! 命令歷史數
- # 開機後命令歷史數
範例:
[root@rocky01 ~]# PS1="\[\e[1;33m\][\t-\u@\h \W\!-\#]\\$ \[\e[0m\]"
[00:45:34-root@rocky01 ~243-25]#
註:
243 !命令歷史數
25 #開機後命令歷史數
5.別名alias
定義別名NAME,其相當於執行命令VALUE
alias NAME='VALUE'
#顯示當前shell進程所有可用的命令別名 [root@rocky01 ~]# alias alias cdnet='cd /etc/sysconfig/network-scripts' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias xzegrep='xzegrep --color=auto' alias xzfgrep='xzfgrep --color=auto' alias xzgrep='xzgrep --color=auto' alias zegrep='zegrep --color=auto' alias zfgrep='zfgrep --color=auto' alias zgrep='zgrep --color=auto'
創建別名 alias NAME='VALUE'
[root@rocky01 ~]# alias cdnet='cd /etc/sysconfig/network-scripts'
[root@rocky01 ~]# cdnet
[root@rocky01 network-scripts]# pwd
/etc/sysconfig/network-scripts
撤銷別名 unalias NAME
[root@rocky01 ~]# unalias ls #撤銷單個別名
[root@rocky01 ~]# unalias -a #撤銷所有別名
如果要執行原命令,可使用
\ALIASNAME
"ALIASNAME"
'ALIASNAME'
[root@rocky01 ~]# cp 1 /opt/
cp: overwrite '/opt/1'? y
[root@rocky01 ~]# \cp 1 /opt/
[root@rocky01 ~]# 'cp' 1 /opt/
[root@rocky01 ~]# "cp" 1 /opt/
6.查看硬體信息
(1)查看CPU
[root@rocky01 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
...
[root@rocky01 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 23
model : 96
model name : AMD Ryzen 5 4600H with Radeon Graphics
...
(2)查看記憶體
[root@rocky01 ~]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 275Mi 873Mi 8.0Mi 636Mi 1.3Gi
Swap: 2.0Gi 40Mi 2.0Gi
[root@rocky01 ~]# cat /proc/meminfo
MemTotal: 1828236 kB
MemFree: 894484 kB
MemAvailable: 1350024 kB
Buffers: 4800 kB
Cached: 505376 kB
...
(3)查看硬碟和分區情況
[root@rocky01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 1024M 0 rom
[root@rocky01 ~]# cat /proc/partitions
major minor #blocks name
8 0 209715200 sda
8 1 1048576 sda1
8 2 208665600 sda2
11 0 1048575 sr0
253 0 73400320 dm-0
253 1 2125824 dm-1
253 2 133136384 dm-2
(4)查看系統架構
[root@rocky01 ~]# arch
x86_64
(5)查看內核版本
[root@rocky01 ~]# uname -r
4.18.0-372.9.1.el8.x86_64
(6)查看操作系統發行版本
Centos8、Rocky8
[root@rocky01 ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.6 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.6"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.6 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
Ubuntu
[root@ubuntu2004 ~]#cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[root@ubuntu2004 ~]#cat /etc/issue
Ubuntu 20.04.4 LTS \n \l
7.日期和時間
date
[root@rocky01 ~]# date +"%F %T "
2022-07-12 14:11:02
[root@rocky01 ~]# echo `date +"%F %T "`
2022-07-12 14:11:13
cal
[root@rocky01 ~]# cal
July 2022
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
修改時區
[root@ubuntu2004 ~]# timedatectl set-timezone Asia/Shanghai
8.歡迎信息提示issue、motd文件
/etc/issuc 登錄之前顯示
/etc/motd 登錄之後顯示
9.echo基本用法
常用選項:
- -E (預設)不支持 \ 解釋功能
- -n 不自動換行
- -e 啟用 \ 字元的解釋功能
啟用命令選項-e,若字元串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出
- \a 發出警告聲
- \b 退格鍵
- \c 最後不加上換行符號
- \e escape,相當於\033
顯示顏色:
"\033[字元背景顏色;字體顏色m字元串\033[0m"
"\e[字元背景顏色;字體顏色m字元串\e[0m"
顯示變數:
[root@rocky01 ~]# a=1
[root@rocky01 ~]# echo "$a" #用變數值替換,弱引用
1
[root@rocky01 ~]# echo '$a' #變數不會替換,強引用
$a
10.命令行擴展和被括起來的集合
(1)" " 、' ' 、` ` 三者區別
[root@rocky01 ~]# echo "echo $HOSTNAME"
echo rocky01
[root@rocky01 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@rocky01 ~]# echo `echo $HOSTNAME`
rocky01
#結論:
單引號:強引用,六親不認,變數和命令都不識別,都當成了普通的字元串;'最傻'
雙引號:弱引用,不能識別命令,可以識別變數;"半傻不精"
反向單引號:裡面的內容必須是能執行的命令並且有輸出信息,變數和命令都識別,並且會將反向單引號的內容當成命令進行執行後,再交給調用反向單引號的命令繼續;`最聰明`
(2)括弧擴展:{ }
{ } 可以實現列印重覆字元串的簡化形式
[root@rocky01 ~]# echo {1..3}
1 2 3
[root@rocky01 ~]# echo {a..c}
a b c
[root@rocky01 ~]# echo file{1..3}{a..c}
file1a file1b file1c file2a file2b file2c file3a file3b file3c
11.history命令行歷史
常用選項:
- -c 清空命令歷史
- -d offset 刪除歷史中指定的第offset個命令
- n 顯示最近的n條歷史(例:histtory 10)
顯示時間和用戶:
[root@rocky01 ~]# HISTTIMEFORMAT="%F %T `whoami` "
[root@rocky01 ~]# history |tail -n 3
363 2022-07-27 02:29:18 root HISTTIMEFORMAT="%F %T `whoami` "
364 2022-07-27 02:29:20 root history
365 2022-07-27 02:29:49 root history |tail -n 3
12.調用命令行歷史
- !! 、Ctrl+P 重覆上一個命令
- !n 執行history命令輸出對應序號n的命令
- !$ 表示前一個命令中最後一個參數
[root@rocky01 ~]# cat /etc/motd
I am motd!
[root@rocky01 ~]# !!
cat /etc/motd
I am motd!
[root@rocky01 ~]# history |tail -n 2
375 2022-07-27 02:33:14 root cat /etc/motd
376 2022-07-27 02:33:43 root history |tail -n 2
[root@rocky01 ~]#
[root@rocky01 ~]# !375
cat /etc/motd
I am motd!
[root@rocky01 ~]# ll !$
ll /etc/motd
-rw-r--r--. 1 root root 11 Jul 27 01:58 /etc/motd
13.bash的快捷鍵
- Ctrl + l 清屏,相當於clear命令
- Ctrl + o 執行當前命令,並重新顯示本命令
- Ctrl + s 阻止屏幕輸出,鎖定
- Ctrl + q 允許屏幕輸出,解鎖
- Ctrl + c 終止命令
- Ctrl + z 掛起命令
- Ctrl + a 游標移到命令行首,相當於Home
- Ctrl + e 游標移到命令行尾,相當於End
- Ctrl + d 刪除游標處的一個字元
- Ctrl + u 從游標處刪除至命令行首
- Ctrl + k 從游標處刪除至命令行尾
14.whatis顯示命令的簡短描述
此工具在系統剛安裝後,不可立即使用,需要製作資料庫後才可使用
man -f 等同於 whatis
#CentOS 7 版本以後 [root@rocky01 ~]# mandbmandb #CentOS 6 版本之前 [root@centos6 ~]# mandbmakewhatis
[root@rocky01 ~]# whatis passwd
openssl-passwd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
passwd (5) - password file
[root@rocky01 ~]# man -f passwd
openssl-passwd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
passwd (5) - password file
15.man提供命令幫助的文件
man 幫助段落說明
序號 名稱 含義 1 NAME 名稱及簡要說明 2 SYNOPSIS 用法格式說明 3 DESCRIPTION 詳細說明 4 AUTHOR 作者 5 REPORTING BUGS 報告的錯誤信息 6 COPYRIGHT 版本信息 7 SEE ALSO 其它幫助參考
- < > 必選內容
- [ ] 可選內容
- ... 同一內容可出現多次
- { } 分組
16.pwd顯示當前工作目錄
每個shell和系統進程都有一個當前的工作目錄
- -P 顯示真實物理路徑
- -L 顯示鏈接路徑(預設)
[root@rocky01 ~]# ll /sbin
lrwxrwxrwx. 1 root root 8 Oct 11 2021 /sbin -> usr/sbin
[root@rocky01 ~]# cd /sbin
[root@rocky01 sbin]# pwd -P
/usr/sbin
[root@rocky01 sbin]# pwd
/sbin
17.絕對和相對路徑
絕對路徑:以正斜杠/ 即根目錄開始、完整的文件的位置路徑、可用於任何想指定一個文件名的時候
相對路徑:不以斜線開始,一般情況下,是指相對於當前工作目錄的路徑,特殊場景下,是相對於某目錄的位置,可以作為一個簡短的形式指定一個文件名
(1)basename
基名,只取文件名,不要路徑
[root@rocky01 sbin]# basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
(2)dirname
目錄名,只取路徑,不要文件名
[root@rocky01 sbin]# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
18.ls列出目錄內容
常用選項:
- -a 包含隱藏文件
- -l 顯示額外的信息
- -R 目錄遞歸
- -ld 目錄和符號鏈接信息
- -i 列印每個文件的索引號
- -1 文件分行顯示
- -S 按從大到小排序
- -t 按mtime排序
- -u 配合-t選項,顯示並按atime從新到舊排序
- -U 按目錄存放順序顯示
- -X 按文件尾碼排序
- -F 對不同類型文件顯示時附加不同的符號:*/=>@|
- -C 文件多時,以多列的方式顯示文件,預設是一列(標準輸出)
說明
ls 查看不同尾碼文件時的顏色由 /etc/DIR_COLORS 和變數$LS_COLORS定義
ls -l 看到文件的大小,不一定是實際文件真正占用空間的大小
19.stat 查看文件狀態
每個文件有三個時間戳:
- Access time 訪問時間,atime,讀取文件內容
- Modify time 修改時間,mtime,改變文件內容(數據)
- Change time 改變時間,ctime,元數據發生改變
[root@rocky01 ~]#stat /etc/passwd
File: /etc/passwd
Size: 2504 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 134924395 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2022-07-19 18:12:04.427008996 +0800
Modify: 2022-07-12 07:39:20.510971037 +0800
Change: 2022-07-12 07:39:20.511971037 +0800
Birth: 2022-07-12 07:39:20.510971037 +0800
20.file檢查文件的類型
[root@rocky01 ~]#file linux.txt
linux.txt: ASCII text
[root@rocky01 ~]#file win.txt
win.txt: ASCII text, with CRLF line terminators
修改文件類型:vim打開目標文件
:set ff=unix
:set ff=dos
21.常見通配符
* |
匹配零個或多個字元,但不匹配 "." 開頭的文件,即隱藏文件 |
? |
匹配任何單個字元,一個漢字也算一個字元 |
[0-9] |
匹配數字範圍 |
[a-z] |
一個字母 |
[peng] |
匹配列表中的任何的一個字元 |
[^peng] |
匹配列表中的所有字元以外的字元 |
[:digit:] |
任意數字,相當於0-9 |
[:lower:] |
任意小寫字母,表示 a-z |
[:upper:] |
任意大寫字母,表示 A-Z |
範例: [ ] 和 { }
[root@rocky01 ~]# touch f{1..3}
[root@rocky01 ~]# ls
f1 f2 f3
[root@rocky01 ~]#
[root@rocky01 ~]# ls f{1..5}
ls: cannot access 'f4': No such file or directory
ls: cannot access 'f5': No such file or directory
f1 f2 f3
[root@rocky01 ~]#
[root@rocky01 ~]# ls f[1-5]
f1 f2 f3
22.touch創建空文件和刷新時間
選項說明
- -a 僅改變 atime和ctime
- -m 僅改變 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的時間戳
- -c 如果文件不存在,則不予創建
23.cp複製文件和目錄
常用選項
- -i 如果目標已存在,覆蓋前提示是否覆蓋
- -n 不覆蓋
- -r,-R 遞歸複製目錄及內部的所有內容
- -b 目標存在,覆蓋前先備份,預設形式為filename~,只保留最近一次的備份
- -a 存檔,常用於備份功能
- -v 詳細
範例:
將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式為 backupYYYY-mm-dd,備份過程可見,要求保留原有許可權
[root@rocky01 ~]# cp -av /etc/ /data/backup`date +%F`
'/etc/' -> '/data/backup2022-07-27'
'/etc/dnf' -> '/data/backup2022-07-27/dnf'
'/etc/dnf/dnf.conf' -> '/data/backup2022-07-27/dnf/dnf.conf'
...省略...
24.mv移動和重命名文件
常用選項
- -i 互動式
- -f 強制
- -b 目標存在,覆蓋前先備份
- -t (mv -t dir file 表示將file移動到dir)
25.rm刪除文件
常用選項:
- -i 互動式
- -f 強制刪除
- -r 遞歸
- --no-preserve-root 刪除/
26.目錄操作
(1)tree 顯示目錄數
常見選項:
- -d: 只顯示目錄
- -L level:指定顯示的層級數目
- -P pattern: 只顯示由指定wild-card pattern匹配到的路徑
(2)mkdir 創建目錄
常見選項:
- -p: 存在於不報錯,且可自動創建所需的各目錄
- -v: 顯示詳細信息
- -m MODE: 創建目錄時直接指定許可權
(3)rmdir 刪除空目錄
常見選項:
- -p 遞歸刪除父空目錄
- -v 顯示詳細信息
註意:rmdir只能刪除空目錄,如果想刪除非空目錄,可以使用rm -r 命令,遞歸刪除目錄樹
27.IO重定向
Linux給程式提供三種 I/O 設備
文件描述符 | 設備文件名 | 設備描述 |
0 | stdin | 標準輸入 |
1 | stdout | 標準輸出 |
2 | stderr | 標準錯誤輸出 |
操作符號 | 描述 |
1> 或 > | 把STDOUT重定向到文件 |
2> | 把STDERR重定向到文件 |
&> | 把標準輸出和錯誤都重定向 |
>> | 追加標準輸出重定向至文件 |
2>> | 追加標準錯誤重定向至文件 |
範例:
(1)清除大文件
[root@rocky01 data]# cat /dev/null > /data/big.log
(2)將標準輸出和錯誤都重定向到同一個文件
方法一:
[root@rocky01 ~]# ls /data /xxx > /data/all.log 2>&1
方法二:
[root@rocky01 ~]# ls /data /xxx 2> /data/all.log 1>&2
方法三:
[root@rocky01 ~]# ls /data/ /xxx &> /data/all.log
[root@rocky01 ~]# cat /data/all.log
ls: cannot access '/xxx': No such file or directory
/data/:
all.log
test.txt
28.高級重定向
(1)cmd <<< "string"
# cmd <<< 'string' 將string的內容作為cmd的輸入 (註:只能字元串)
[root@rocky01 ~]# bc <<<`seq -s+ 10`
55
(2)cmd1 < <(cmd2)
cmd1 < <(cmd2) 將cmd2的輸出作為cmd1的輸入(輸入會寫入一個臨時文件,中間通過臨時文件傳遞) 作用等同於 "cmd2 | cmd1"
[root@rocky01 ~]# bc < <(seq -s+ 10)
55
#查看是否會生成臨時文件
[root@rocky01 ~]# ll <(seq -s+ 10)
lr-x------. 1 root root 64 Jul 14 19:55 /dev/fd/63 -> 'pipe:[300474]'
29.tr 轉換和刪除字元
常用選項:
- -d 刪除所有屬於第一個字元集的字元
- -s 把連續重覆的字元以單獨一個字元表示,即去重
- -t 將第一個字元集對應字元轉化為第二字元集對應的字元
範例:
[root@rocky01 ~]# echo 12345 |tr -d 25
134
[root@rocky01 ~]# echo aaabbbccccdffgg |tr -s abcf
abcdfgg
[root@rocky01 ~]# echo abcdef |tr 'a-z' 'A-Z'
ABCDEF
30.用戶和組管理命令
用戶管理命令
- useradd
- usermod
- userdel
組帳號維護命令
- groupadd
- groupmod
- groupdel
(1)useradd 創建新的用戶
常用選項
- -u UID
- -o 配合-u 選項,不檢查UID的唯一性
- -g GID 指明用戶所屬基本組,可為組名,也可以GID
- -c "COMMENT“ 用戶的註釋信息
- -d HOME_DIR 以指定的路徑(不存在)為家目錄
- -s SHELL 指明用戶的預設shell程式,可用列表在/etc/shells文件中
- -G GROUP1[,GROUP2,...] 為用戶指明附加組,組須事先存在
- -N 不創建私用組做主組,使用users組做主組
- -r 創建系統用戶 CentOS 6之前: ID<500,CentOS7 以後: ID<1000
- -m 創建家目錄,用於系統用戶
- -M 不創建家目錄,用於非系統用戶
- -p 指定加密的密碼
useradd 命令預設值設定由/etc/default/useradd定義
[root@rocky01 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
(2)usermod 修改用戶屬性
(3)userdel 刪除用戶
常見選項
- -f, --force 強制
- -r, --remove 刪除用戶家目錄和郵箱
(4)id 查看用戶的UID,GID等信息
(5)su: 切換用戶身份,並且以指定用戶的身份執行命令
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄,即不完全切換
su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至自已的家目錄,即完全切換
說明:root su至其他用戶無須密碼;非root用戶切換時需要密碼
註意:su 切換新用戶後,使用 exit 退回至舊的用戶身份,而不要再用 su 切換至舊用戶,否則會生成很多的bash子進程,環境可能會混亂。
[root@rocky01 ~]# su rye
[rye@rocky01 root]$ exit
exit
[root@rocky01 ~]#
(6)passwd 修改用戶密碼
(7)chage 修改用戶密碼策略
(8)groupadd 創建組
(9)groupmod 組屬性修改
(10)groupdel 刪除組
31.文件許可權管理
(1)chown 設置文件的所有者
chown 命令可以修改文件的屬主,也可以修改文件屬組
[root@rocky01 ~]# ll 1.txt
-rw-r--r--. 1 root root 0 Jul 27 16:20 1.txt
[root@rocky01 ~]# chown rye:rye 1.txt
[root@rocky01 ~]# ll 1.txt
-rw-r--r--. 1 rye rye 0 Jul 27 16:20 1.txt
(2)chgrp 設置文件的屬組信息
chgrp 命令可以只修改文件的屬組
[root@rocky01 ~]# ll
total 0
-rw-r--r--. 1 rye rye 0 Jul 27 16:20 1.txt
[root@rocky01 ~]# chgrp root 1.txt
[root@rocky01 ~]# ll
total 0
-rw-r--r--. 1 rye root 0 Jul 27 16:20 1.txt
#測試能否改屬主
[root@rocky01 ~]# chgrp root:root 1.txt
chgrp: invalid group: ‘root:root’
結論:chgrp 命令可以只修改文件的屬組
(3)chmod 修改文件許可權
32.umask
umask的值可以用來保留在創建文件許可權
實現方式:
- 新建文件的預設許可權: 666-umask,如果所得結果某位存在執行(奇數)許可權,則將其許可權+1,偶數不變
- 新建目錄的預設許可權: 777-umask
非特權用戶umask預設值是 002
root的umask 預設值是 022
範例:
臨時性修改文件許可權為000:
方法一:
[root@rocky01 ~]#touch a.txt; chmod 000 a.txt
[root@rocky01 ~]#ll a.txt
----------. 1 root root 0 Jul 15 20:30 a.txt
方法二:
[root@rocky01 ~]#umask 777; touch a.txt; umask 022;
[root@rocky01 ~]#ll a.txt
----------. 1 root root 0 Jul 15 20:32 a.txt
方法三:
[root@rocky01 ~]#(umask 777; touch a.txt)
[root@rocky01 ~]#ll a.txt
----------. 1 root root 0 Jul 15 20:33 a.txt
33.vim
命令模式 --> 插入模式
- i insert,在游標所在處輸入
- I 在當前游標所在行的行首輸入
- a append,在游標所在處後面輸入
- A 在當前游標所在行的行尾輸入
- o 在當前游標所在行的下方打開一個新行
- O 在當前游標所在行的上方打開一個新行
擴展命令模式基本命令
- w 寫(存)磁碟文件
- wq 寫入並退出
- x 寫入並退出
- X 加密
- q 退出
- q! 不存檔退出
- r filename 讀文件內容到當前
- w filename 將當前文件內容寫入另一個文件
- !command 執行命令
- r!command 讀入命令的輸出
(1)定製vim的工作特性
擴展命令模式的配置只是對當前vim進程有效,可將配置存放在文件中持久保存
配置文件:
/etc/vimrc #全局
~/.vimrc #個人
(1.1)行號
顯示:set number,簡寫 set nu
取消顯示:set nonumber, 簡寫 set nonu
(1.2)忽略字元的大小寫
啟用:set ignorecase,簡寫 set ic
不忽略:set noic
(1.3)自動縮進
啟用:set autoindent,簡寫 set ai
禁用:set noai
(1.4)複製保留格式
啟用:set paste
禁用:set nopaste
(1.5)顯示Tab ^I和換行符 和$(不可見字元)
啟用:set list
禁用:set nolist
(1.6)文件格式
啟用windows格式:set fileformat=dos
啟用unix格式:set fileformat=unix
簡寫 set ff=dos|unix
(1.7)Tab 用空格代替
啟用:set expandtab 預設為8個空格代替Tab
禁用:set noexpandtab
簡寫:set et
(1.8)Tab用指定空格的個數代替
啟用:set tabstop=# 指定#個空格代替Tab
簡寫:set ts=4
(1.9)設置縮進寬度
#向右縮進 命令模式>>
#向左縮進 命令模式<<
#設置縮進為4個字元
set shiftwidth=4
(1.10)設置游標所在行的標識線
啟用:set cursorline,簡寫 set cul
禁用:set nocursorline
(1.11)加密
啟用: set key=password
禁用: set key=
(2)命令模式
命令模式,又稱為Normal模式,功能強大,只是此模式輸入指令併在屏幕上顯示,所以需要記憶大量的快捷按鍵才能更好的使用
(2.1)保存退出
ZZ 保存退出
ZQ 不保存退出
(2.2)行首行尾跳轉
^ 跳轉至行首的第一個非空白字元
0 跳轉至行首
$ 跳轉至行尾
(2.3)行間移動
:# 跳轉至由第#行