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