linux知識點總結
學習目錄:
一、基礎篇
二、幫助命令
三、文件與目錄管理(一)
四、文件與目錄管理(二)
五、權限管理 六、Vim文本編輯器
七、文本與文件查找
八、系統管理
九、磁盤分區、邏輯卷和啟動修復
十、Shell篇認識BASH
十一、Shell篇基礎命令
十二、文本操作篇
一、基礎篇
Linux文件與目錄
1.文件顏色代表的意義
綠色文件---------- 可執行文件,可執行的程序
紅色文件-----------壓縮文件或者包文件
藍色文件----------目錄
白色文件----------普通,如文本文件,配置文件,源碼文件等
淺藍色文件----------鏈接文件,主要是使用ln命令建立的文件
紅色閃爍----------表示鏈接的文件有問題
黃色文件----------表示設備文件
灰色文件----------表示其它文件
2.Linux文件目錄結構
/:根目錄,一般根目錄下只存放目錄,在Linux下有且只有一個根目錄。所有的東西都是從這里開始。當你在終端里輸入“/home”,你其實是在告訴電腦,先從/(根目錄)開始,再進入到home目錄。
/bin: /usr/bin: 可執行二進制文件的目錄,如常用的命令ls、tar、mv、cat等。
/boot:放置linux系統啟動時用到的一些文件,如Linux的內核文件:/boot/vmlinuz,系統引導管理器:/boot/grub。
/dev:存放linux系統下的設備文件,訪問該目錄下某個文件,相當于訪問某個設備,常用的是掛載光驅 mount /dev/cdrom /mnt。
/etc:系統配置文件存放的目錄,不建議在此目錄下存放可執行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/x.NETd.d。
/home:系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存放在此目錄下,表示當前用戶的家目錄,edu 表示用戶 edu 的家目錄。
/lib: /usr/lib: /usr/local/lib:系統使用的函數庫的目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助。
/lost+fount:系統異常產生錯誤時,會將一些遺失的片段放置于此目錄下。
/mnt: /media:光盤默認掛載點,通常光盤掛載于 /mnt/cdrom 下,也不一定,可以選擇任意位置進行掛載。
/opt:給主機額外安裝軟件所擺放的目錄。
/proc:此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,由于數據都存放于內存中,所以不占用磁盤空間,比較重要的目錄有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
/root:系統管理員root的家目錄。
/sbin: /usr/sbin: /usr/local/sbin:放置系統管理員使用的可執行命令,如fdisk、shutdown、mount 等。與 /bin 不同的是,這幾個目錄是給系統管理員 root使用的命令,一般用戶只能"查看"而不能設置和使用。
/tmp:一般用戶或正在執行的程序臨時存放文件的目錄,任何人都可以訪問,重要數據不可放置在此目錄下。
/srv:服務啟動之后需要訪問的數據目錄,如 www 服務需要訪問的網頁數據存放在 /srv/www 內。
/usr:應用程序存放目錄,/usr/bin 存放應用程序,/usr/share 存放共享數據,/usr/lib 存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件。/usr/local: 存放軟件升級包。/usr/share/doc: 系統說明文件存放目錄。/usr/share/man: 程序說明文件存放目錄。
/var:放置系統執行過程中經常變化的文件,如隨時更改的日志文件 /var/log,/var/log/message:所有的登錄文件存放目錄,/var/spool/mail:郵件存放的目錄,/var/run:程序或服務啟動后,其PID存放在該目錄下。
3.Linux文件基本屬性
文件基本屬性
在 Linux 中我們可以使用 ll 或者 ls –l 命令來顯示一個文件的屬性以及文件所屬的用戶和組。
在 Linux 中第一個字符代表這個文件是目錄、文件或鏈接文件等等。
當為 d 則是目錄
當為 - 則是文件;
若是 l 則表示為鏈接文檔(link file);
若是 b 則表示為裝置文件里面的可供儲存的接口設備(可隨機存取裝置);
若是 c 則表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。
接下來的字符中,以三個為一組,且均為 rwx 的三個參數的組合。
其中, r 代表可讀(read)、 w 代表可寫(write)、 x 代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號 - 而已。
更改文件屬性命令:
1、chgrp:更改文件屬組
2、chown:更改文件屬主,也可以同時更改文件屬組
3、chmod:更改文件9個屬性
1 絕對路徑
路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。
2 相對路徑
路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd …/man 這就是相對路徑的寫法。
二、幫助命令
三、文件與目錄管理(一)
四、文件與目錄管理(二)
五、權限管理
六、Vim文本編輯器
什么是 vim?
Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。
簡單地來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。 vim 則可以說是程序開發者的一項很好用的工具。
連 vim 的官方網站 (http://www.vim.org) 自己也說 vim 是一個程序開發工具而不是文字處理軟件。
2. vi/vim 的使用
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和末行命令模式(Last line mode)。
這三種模式的作用分別是:
命令模式:
用戶剛剛啟動 vi/vim,便進入了命令模式。
此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字符。比如我們此時按下i,并不會輸入一個字符,i被當作了一個命令。
以下是常用的幾個命令:
i 切換到輸入模式,以輸入字符。
x 刪除當前光標所在處的字符。
: 切換到底線命令模式,以在最底一行輸入命令。
若想要編輯文本:啟動Vim,進入了命令模式,按下i,切換到輸入模式。
命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。
輸入模式:
在命令模式下按下i就進入了輸入模式。
在輸入模式中,可以使用以下按鍵:
字符按鍵以及Shift組合,輸入字符
ENTER,回車鍵,換行
BACK SPACE,退格鍵,刪除光標前一個字符
DEL,刪除鍵,刪除光標后一個字符
方向鍵,在文本中移動光標
HOME/END,移動光標到行首/行尾
Page Up/Page Down,上/下翻頁
Insert,切換光標為輸入/替換模式,光標將變成豎線/下劃線
ESC,退出輸入模式,切換到命令模式
末行命令模式:
在命令模式下按下:(英文冒號)就進入了底線命令模式。
底線命令模式可以輸入單個或多個字符的命令,可用的命令非常多。
在底線命令模式中,基本的命令有(已經省略了冒號):
q 退出程序
w 保存文件
按ESC鍵可隨時退出底線命令模式。
簡單的說,我們可以將這三個模式想成底下的圖標來表示:
七、文本與文件查找
八、系統管理
九、磁盤分區、邏輯卷和啟動修復
Linux 文件系統與磁盤的關系
1.1 磁盤格式
磁盤格式主要有兩種:MBR分區表和GPT分區表。
MBR分區表:第一扇區最重要,里面有:主引導記錄(Master boot record, MBR)及分區表(partition table),其中MBR占446B,而分區表則占有64B。
GPT分區表:除了分區數量擴充較多之外,支持的磁盤容量也可以超過2TB。
1.2 文件系統
磁盤分區后,需要進行格式化(format),之后操作系統才可以使用這個文件系統。原因:每種操作系統所設置的文件屬性/權限不相同,為了存放這些文件所需的數據,因此需要將分區進行格式化,以成為操作系統能夠利用的文件系統格式(filesystem)
每個文件(不管是一般文件還是目錄文件)都會占有一個inode,文件系統通常會將文件的權限與屬性放置到inode中,文件實際的數據放到數據區塊中。
超級區塊(superblock)會記錄整個文件系統的整體信息,包括inode與數據區塊總量、使用量、剩余量等。一般來說,超級區塊的大小為1024B,一個文件系統應該僅有一個超級區塊。
1.3 磁盤與目錄的容量
df(英文全稱:disk full):列出文件系統的整體磁盤使用量
du(英文全稱:disk used):檢查磁盤空間使用量
1.4 硬鏈接與符號鏈接(軟連接)
硬鏈接:只是在某個目錄下新增一條文件名鏈接到某inode號碼的關聯記錄。因此,不管你使用哪一個文件名來編輯,最終的結果都會寫入到相同的inode與區塊中,因此均能對數據進行修改。使用硬鏈接設置鏈接文件時,磁盤的空間與inode的數量都不會改變。硬鏈接只是在某個目錄下的區塊多寫入一個關聯數據而已,既不會增加inode也不會消耗區塊數量。
軟連接:新建一個獨立的文件,而這個文件會讓數據的讀取指向它鏈接的那個文件的文件名。
1.5 觀察磁盤分區狀態
lsblk(英文全稱:list block device ):列出所有存儲設備
blkid:列出設備的UUID等參數
1.6 磁盤分區
fdisk:用于磁盤分區(用于MBR分區表)
gdisk:用于磁盤分區(用于GPT分區表)
partprobe:更新Linux內核的分區表信息
1.7 磁盤格式化(創建文件系統)
mkfs(英文全稱:make filesystem ):磁盤分割完畢后自然就是要進行文件系統的格式化
1.8 文件系統掛載與卸載
mount:掛載
umount:卸載
配置/etc/fstab:系統開機自動掛載該文件所有內容。因此可以把想要開機自啟動的服務寫入到文件中。
autofs服務是一種Linux系統守護進程,當檢測到用戶試圖訪問一個尚未掛載的文件系統時,將自動掛載該文件系統。
1.9 磁盤/文件系統參數自定義
mknod:
十、Shell篇認識BASH
1. 什么是shell
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Ken Thompson 的 sh 是第一種 Unix Shell,windows Explorer 是一個典型的圖形界面 Shell。
2. Shell 腳本
Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。
業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。
由于習慣的原因,簡潔起見,本文出現的 “shell編程” 都是指 shell 腳本編程,不是指開發 shell 自身。
3. Shell 環境
Shell 編程跟 JAVAScript、php 編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux 的 Shell 種類眾多,常見的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
在一般情況下,人們并不區分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同樣也可以改為 #!/bin/bash。
#! 告訴系統其后路徑所指定的程序即是解釋此腳本文件的 Shell 程序
十一、Shell篇基礎命令
Shell變量
定義變量時,變量名不加美元符號($,PHP語言中變量需要),
如:your_name="runoob.com"
注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。
變量名的命名須遵循如下規則:
1.命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭。
2.中間不能有空格,可以使用下劃線 _。
3.不能使用標點符號。
4.不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。
使用變量
使用一個定義過的變量,只要在變量名前面加美元符號即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界
只讀變量
使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
下面的例子嘗試更改只讀變量,結果報錯:
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"
運行腳本,結果如下:
/bin/sh: NAME: This variable is read only.
刪除變量
使用 unset 命令可以刪除變量。語法:unset variable_name
變量類型
運行shell時,會同時存在三種變量:
局部變量 局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
環境變量 所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量。
shell變量 shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
Shell 字符串
字符串是shell編程中最常用最有用的數據類型(除了數字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號,也可以不用引號。
單引號
str='this is a string'
單引號字符串的限制:
1.單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
2.單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。
雙引號
your_name="runoob"
str="Hello, I know you are "$your_name"! n"
echo -e $str
輸出結果為:
Hello, I know you are "runoob"!
雙引號的優點:
1.雙引號里可以有變量
2.雙引號里可以出現轉義字符
拼接字符串
your_name="runoob"
# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
輸出結果為:
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
獲取字符串長度
string="abcd"
echo ${#string} #輸出 4
提取子字符串
以下實例從字符串第 2 個字符開始截取 4 個字符:
string="runoob is a great site"
echo ${string:1:4} # 輸出 unoo
注意:第一個字符的索引值為 0。
查找子字符串
查找字符 i 或 o 的位置(哪個字母先出現就計算哪個):
string="runoob is a great site"
echo `expr index "$string" io` # 輸出 4
注意: 以上腳本中 ` 是反引號,而不是單引號 ',不要看錯了哦。
十二、文本操作篇