linux系統檔案管理學習
阿新 • • 發佈:2022-04-10
內容大綱:
#檔案系統及Shell的基本概念
#檔案及目錄操作命令
#VI的使用
#軟體包的管理
一、檔案系統及Shell的基本概念
1.檔案系統的含義
檔案系統是用來管理和組織儲存在磁碟驅動器上資料的系統軟體
2.Linux的檔案系統
Linux系統採用虛擬檔案系統技術(VFS)、結構採用倒立樹型、VFS使Linux支援以下檔案系統:
EXT2: 二次擴充套件
EXT3: 三次擴充套件
SWAP: 交換檔案系統
FAT、FAT32
NTFS (預設不支援,需要特定的模組)
VFAT: 虛擬FAT
SYSV: Unix的檔案系統
HPFS: OS/2的檔案系統
ISO9660: 光碟檔案系統
NFS: 網路檔案系統
3.Linux中的檔案分類
(1)普通檔案
文字檔案:採用ASCII編碼方式,可編輯,可修改
二進位制:不可檢視,不可修改
(2)目錄檔案
存放的內容是目錄中的檔名和子目錄名
(3)裝置檔案(/dev)
用於使用者訪問物理裝置所用,分為塊裝置和字元裝置檔案
(4)連結檔案
軟連結檔案:目標檔案和連結檔案可以跨越索引點,相當於檔案的快捷方式
刪除原檔案,則符號連結檔案失去意義
刪除符號連結檔案,不影響原檔案
硬連結檔案:連結同一索引點中的檔案,相當檔案的副本
兩個檔案指向同一儲存區,內容、長度相同
刪除一個檔案不影響,其它檔案
(5)管道檔案
FIFO快取佇列
4.Shell的主要功能
~命令列解釋
互動模式
後臺執行
~命令的多種執行順序
~命令替換 (` `)
~I/O重定向(>,>>,<,<<)
~管道(|)
~萬用字元(*,?,[],[!])
~系統環境維護
~Shell程式設計
~歷史記錄(history)
~自動補齊(TAB)
5.Shell的命令解釋過程
二、檔案操作命令
1.pwd
功能:顯示當前目錄
例項:
?# pwd
2.cd
功能:改變當前目錄
例項:
?# cd /usr/sbin (進入/usr/sbin)
# cd ../u1 (進入父目錄下面的u1目錄)
# cd ..(返回父目錄)
# cd (進入使用者主目錄)
# cd ~ (進入使用者主目錄)
3.mkdir
功能:建立目錄
格式:mkdir [引數] <目錄名>
引數:-m 屬性值:指定目錄的屬性 (r、w、x或4、2、1)
-p :迴圈建立目錄
例項:
# mkdir d1 (在當前目錄下建立d1子目錄)
# mkdir /d1/d2 /d1/d3 /d1/d4(同時在/d1目錄中建立d2,d3,d4子目錄)
# mkdir –p /d1/d2 (在/d1目錄中建立d2子目錄,先建d1)
4.rmdir
功能:刪除空目錄
格式:rmdir [引數] <目錄名>
引數:-p:迴圈刪除
例項:
# rmdir a1 (刪除當前目錄下的a1子目錄)
# rmdir /etc/a2 (刪除/etc下a2子目錄)
# rmdir -p /a1/a2
5.ls
功能:顯示目錄中的檔案及子目錄的名稱
格式:ls [引數] [檔名]
引數:-a: 顯示所有檔案(包括隱含檔案,以“.”開頭的檔案為隱含檔案)
-l: 以長格式顯示檔名及目錄名(顯示檔案的詳細資訊)
-F: 顯示檔名,同時顯示型別
-R: 顯示目錄中所有檔案及子目錄中的檔案結構
-t: 按照修改時間排序顯示
-s: 顯示檔案的大小,以block為單位
-S: 按照檔案大小排序顯示
-m: 分列顯示檔名
例項:
# ls
# ls /bin/
# ls grub.conf 查詢當目錄下是否存在grub.conf
# ls -l
# ls --help 顯示ls的詳細的幫助資訊
# ls -a
6.cp
功能:複製檔案
格式:cp [引數] <源路徑> <目標路徑>
引數:-f:檔案在目標路徑中存在時,則直接覆蓋
-i:檔案在目標路徑中存在時, 提示是否覆蓋
-r:複製指定中所有內容和結構
-b:生成覆蓋檔案的備份
-a:保持檔案原有屬性
例項:
# cp /etc/* /a1/ 把/etc下的所有檔案複製到a1目錄中
# cp /bin/ls /dir1 /bin/ls檔案到/目錄取名為dir1
# cp -f /sbin/* /exe/ 直接將/sbin下的所有檔案到/exe目錄中
# cp -r /soft /abc/
7.rm
功能:刪除檔案
格式:rm [引數] <檔名>
引數:-f: 不提示確認刪除
-i: 提示確認刪除
-r: 遞迴刪除
例項:
# rm /m1/f1 刪除/m1目錄下的f1
# rm –f /m1/* 刪除m1目錄下的所有檔案
#rm -rf /m1 強制刪除一個目錄
8.mv
功能:移動檔案、重新命名檔案
格式:mv [引數] <源路徑> <目標路徑>
引數:-i: 如果存在檔案重名則提示是否覆蓋
-b: 建立覆蓋檔案的備份
-f: 如果存在檔案重名則直接覆蓋
例項:
# mv /m1/f1 /m2/ 移動/m1目錄下f1檔案到/m2目錄下
# mv f1 f2 將當前目錄下的f1檔案改名f2
# mv -f /d1/* /d2/ 移動/d1中的所有檔案到/d2目錄中
9.file
功能:檢測檔案型別
格式:file [引數] <檔名>
引數: -z:檢測壓縮包檔案
-L:跟隨符號連結
例項:
# file /etc/lilo.conf
# file -z 1.gz
10.顯示文字檔案內容
(1) cat
格式:cat [引數] <檔名>
引數:-n 顯示行號
-b 顯示行號,但空白行不顯示行號
例項:
#cat /etc/inittab
#cat -n /d1/f1 /d1/f2 >txt1
(2)more
格式:more [引數] <檔名>
例項:
# ls|more 將ls的顯示結果輸入到more中
# more /etc/rc.d/rc 顯示/etc/rc.d/rc檔案的內容
說明:可以用回車鍵向下換行,空格鍵向下換頁 按Q鍵退出more
(3)less
例項:
# ls|less 將ls的顯示結果輸入到less中
# less /var/named/localhost.zore
說明:Page up /Page Down鍵上下滾動、Q鍵退出
(4)head、tail
例項:
# head -20 /a1 顯示a1中前20行
# tail -20 /a1 顯示中a1後20行
(5)cut
功能:顯示檔案中指定數目的字元、位元組或欄位
格式:#cut 引數 數字 檔案
引數:-c 以字元為單位
-b 以位元組為單位
-f 以欄位為單位
-d 指定分隔符
例項:
#cut -c 3 /etc/passwd
#cut -f 1-6 -d :/etc/passwd
#cut -b -8 /etc/passwd
11.搜尋檔案
(1) find
格式:find 查詢路徑 查詢條件
條件: -name “檔名”:查詢指定名稱檔案
-lname “檔名”:查詢指定檔案所有的接檔案
-user 使用者名稱:查詢指定使用者擁有的檔案
-group 組名:查詢指定組擁有的檔案
-links n:查詢擁有n個連結的檔案
-mtime n:查詢在N天前被修改過的檔案
-atime n:查詢在N天前被訪問過的檔案
-type d/f/b/l/p:查詢指定型別的檔案
-s n[bcwkMG]:查詢指定大小的檔案
-empty:查詢為空的檔案
-perm mode:查詢指定屬性的檔案
-exec command {}; 查詢指定的檔案並執行指定的命令
-newer 檔名 查詢比指定檔案新的檔案
例項:
# find / -name “named*”
# find / -user root
#find ./ -type d -exec chmod 755 {} ;
#find . –empty
#find . -perm 644
#find . -newer oldfile ! -newer newfile
(2) whereis
功能:查詢二進位制可執行、手冊及原始檔
例項:
# whereis umount
(3) locate
功能:在資料庫中查詢指定的檔案
格式:#locate [引數] 檔名
引數:
-u /-U 建立資料庫,-u 會由根目錄開始,-U 則可以指定開始位置
-e <目錄1…> 排除指定目錄在尋找範圍之外
-l <0/1> 設定安全級別,1啟用安全模式,0關閉安全模式
-f <檔案型別> 在資料庫中排除特定型別檔案排除在外
-n 至多顯示n個輸出
-r 使用正規運算式做尋找的條件
-o 指定資料庫存的名稱。
-d 指定資料庫的路徑
例項:
#locate -u
#locate chdrv
#locate -n 100 a.out
(4) which
功能:查詢指定命令檔案
格式:#which 檔名
例項:
#which mount
12.grep
功能:在文字檔案中查詢匹配的字串
格式:#grep [引數] “字串” 檔案
引數: -? 同時顯示匹配行上下的?行
-b 在匹配行前面列印該行所在的塊號
-c 只打印匹配的行數,不顯示匹配的內容
-f File 從檔案中提取模板,空檔案中包含0個模板,所以什麼都不匹配
-h 當搜尋多個檔案時,不顯示匹配檔名字首
-I 忽略大小寫差別
-q 取消顯示,只返回退出狀態。0則表示找到了匹配的行
-l 列印匹配模板的檔案清單
-L 列印不匹配模板的檔案清單
-n 在匹配的行前面列印行號
-s 不顯示關於不存在或者無法讀取檔案的錯誤資訊
-v 反檢索,只顯示不匹配的行
-w 如果被<和>引用,就把表示式做為一個單詞搜尋
正則表示式元字元:
^ 錨定行的開始 如:'^grep'匹配所有以grep開頭的行
$ 錨定行的結束 如:'grep$'匹配所有以grep結尾的行
. 匹配一個非換行符的字元 如:'gr.p'匹配gr後接一個任意字元,然後是p
* 匹配零個或多個先前字元 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。 .*一起用代表任意字元
[] 匹配一個指定範圍內的字元,如'[Gg]rep'匹配Grep和grep
[^] 匹配一個不在指定範圍內的字元,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行
(..) 標記匹配字元,如'(love)',love被標記為1
< 錨定單詞的開始,如:'<grep'匹配包含以grep開頭的單詞的行
> 錨定單詞的結束,如:'grep>'匹配包含以grep結尾的單詞的行
x{m} 重複字元x,m次,如:'0{5}'匹配包含5個o的行
x{m,} 重複字元x,至少m次,如:'o{5,}'匹配至少有5個o的行
x{m,n} 重複字元x,至少m次,不多於n次,如:'o{5,10}'匹配5--10個o的行
w 匹配文字和數字字元,也就是[A-Za-z0-9],如:'Gw*p'匹配以G後跟零個或多個文字或數字字元,然後是p
W w的反置形式,匹配一個或多個非單詞字元,如點號句號等
b 單詞鎖定符,如: 'bgrepb'只匹配grep
+ 匹配一個或多個先前的字元。如:'[a-z]+able',匹配一個或多個小寫字母后跟able的串,如loveable,enable,disable等。
? 匹配零個或多個先前的字元。如:'gr?p'匹配gr後跟一個或沒有字元,然後是p的行。
a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed
() 分組符號,如:love(able|rs)ov+匹配loveable或lovers,匹配一個或多個ov。
x{m},x{m,},x{m,n} 作用同x{m},x{m,},x{m,n}
例項:
# ls -l | grep '^a'
通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
# grep 'test' d*
顯示所有以d開頭的檔案中包含test的行。
# grep 'test' aa bb cc
顯示在aa,bb,cc檔案中匹配test的行。
# grep '[a-z]{5}' aa
顯示所有包含每個字串有5個連續小寫字元的字串的行。
# grep 'w(es)t.*1' aa
如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(1),找到就顯示該行。如果用egrep或grep -E,就不用""號進行轉義,直接寫成'w(es)t.*1'就可以了。
13.檔案壓縮操作
(1)gzip(*.gz)
功能:對單個檔案壓縮
格式:gzip [引數] 壓縮(解壓縮)檔名
引數: -d:用於解壓縮
-t:檢驗壓縮檔案是否損壞
-l:顯示壓縮檔案壓縮比例
-r :遞迴式地查詢指定目錄並壓縮其中的所有檔案或者是解壓縮
-num: 用指定的數字 num 調整壓縮的速度,-1 或 --fast 表示最快壓縮方法(低壓縮比)
例項:
?# gzip /a1
# gzip -d /a1.gz
# gzip -dv /*.gz
# gzip -r /www
(2)zip
功能:壓縮檔案
格式:#zip [引數] 檔案或目錄名
-d 從壓縮檔案內刪除指定的檔案。
-F 嘗試修復已損壞的壓縮檔案。
-t<mmddyy> 把壓縮檔案的日期設成指定的日期。
-u 更換較新的檔案到壓縮檔案內。
-v 顯示指令執行過程或顯示版本資訊。
-z 替壓縮檔案加上註釋。
-<壓縮效率> 壓縮效率是一個介於1-9的數值。
-P 口令 利用指定口令加密壓縮包
-m 新增檔案到ZIP壓縮包中
例項:
?#zip abc.zip f1 f2 f3
#zip -r –P 123 soft.zip /soft/
#zip -d soft.zip soft/wb
#zip –u soft.zip abc.log
#zip -m soft.zip install.log
(3)unzip
功能: 解壓縮zip檔案
格式: #unzip [.zip檔案]
-l 顯示壓縮檔案內所包含的檔案。
-P <密碼>
-d <目錄>指定檔案解壓縮後所要儲存的目錄。
例項:
?#unzip f1.zip -d /f1
#unzip –l f1.zip
(4)tar(*.tar)
功能:為檔案或目錄建立備份
格式:tar [引數] 檔案/目錄名
引數: -t:列出壓縮包中的檔案(*.tar)
-x:解壓縮(*.tar)
-z:使用gzip的壓縮檔案
-c:建立壓縮包
-f:指定檔名
-j:使用bzip的壓縮檔案
-v:顯示操作資訊
-C:指定解壓路徑(預設路徑為當前路徑)
-r: 向壓縮包新增檔案
-u:更新壓縮包中的檔案
-k:還原檔案過程中,遇到相同檔案不覆蓋
-m:還原檔案過程中,修改檔案的時間為當前時間
例項:
?# tar -cvf all.tar *.jpg
# tar -uvf all.tar logo.gif
# tar -rf all.tar *.gif
# tar -cvfz etc.tar.gz /etc
# tar -xvf all.tar
# tar -xzvf etc.tar.gz -C /soft
除以上的壓縮工具外,還有compress(uncompress)、bzip2(unbzip2)
14.ln
功能:建立連結檔案
格式:ln [引數] <原始檔> <連結檔案>
引數:-s:建立軟連結檔案
-i:提示是否覆蓋目標檔案
-f:直接覆蓋已存在的目標檔案
例項:
?# ln /etc/abc /abc
# ln -s /a1 /etc/a1
15. touch
功能:建立空檔案或修改檔案的時間
格式:#touch [引數] 檔名
引數:-r 修改檔案的時間為指定檔案的日期時間
-d <yymmdd> 指定檔案日期時間為yymmdd
-t <yymmddhhmm> 指定檔案日期時間為yymmddhhmm
-c 不建立指定的檔案
例項:
?#touch /f1 /f2
#touch -r /f1 /f2
#touch -d "6:03pm 05/06/2000" file
16. sort
功能:對文字檔案進行排序
格式:sort [引數] [檔案]
引數:-o 檔名 將排序結果儲存到指定檔案中
-u 去除重複行
例項:
?#sort /etc/passwd
#sort –o /etc/oldpass /etc/passwd
17. paste
功能:合併文字檔案
例項:
?#paste f1 f2>f3
18. cmp
功能:比較兩個檔案是否有差異
格式:#cmp [引數] 檔案1 檔案2
引數:-l 顯示不同的位元組位置
-s 不顯示不同之處,只顯示返回狀態
例項:
?#cmp f1 f2
#cmp -l f1 f2
18. diff
功能:顯示檔案的不同之處
格式:#diff [引數] 檔案1 檔案2
引數:-c 顯示全文,並標出不同之處
-u 合併顯示,並標出不同之處
例項:
?#diff f1 f2
#diff -c f1 f2
19. wc
功能:統計檔案中的行數、單詞數、字元數
格式:#wc [引數] 檔名
引數:-c 統計字元數
-w 統計單詞數
-l 統計行數
例項:
?#wc /etc/passwd
#wc -c /etc/passwd
注:
1.命令自動補齊
按TAB鍵進行自動擴充
2.命令歷史記錄
Linux系統採用.history檔案存放命令歷史記錄,以下是與歷史記錄相關的操作:
! n:呼叫正序第n個命令
!! :呼叫上一條命令
history:檢視命令歷史記錄
history -c:清除歷史記錄
history -w 檔名:儲存歷史記錄到指定的檔案中
3.命令重定向
“>”:將命令輸出結果儲存到指定檔案中,如果檔案不存在先建立,存在就覆蓋
“>>”:將命令輸出結果儲存到指定檔案中,如果檔案不在存先建立,存在就覆蓋
“<”:把檔案內容輸入指定命令
“<<”:將一對分隔之間的正文輸入給指定命令
例項:
?#ls>abc.txt
#ls /etc >>abc.txt
#wc</etc/passwd
#wc<<!
4.命令管道(前一個命令的輸出作為後一個命令的輸入)
例項:ls|more
5.命令替換(取指定命令的結果)
例項:# cat `ls abc`
6.多個命令執行順序
“;”:順序執行多個命令
“||”:前後命令的執行存在“邏輯或”關係,只有||前面的命令執行失敗後,它後面的命令才被執行
“&&”:前後命令的執行存在“邏輯與”關係,只有&&前面的命令執行成功後,它後面的命令才被執
例項:
?# ls /etc;cd /etc
# ls /d1/f1||touch f1
7.命令別名
例項:#alias [別名=’命令’]
三、vi編輯器的使用
1.vi 定義
Vi 是Unix/Linux系統中的一種文字編輯軟體
2.vi三種模式
命令模式:刪除字元、排版
插入模式:插入字元、刪除、修改字元
最後行模式:通過命令操作vi軟體
3.vi的使用
(1)啟動VI
# vi [引數] [檔名]
(2)VI常用命令
~移動游標
左移一個字元:按h
右移一個字元:按l
下移一行: 按j
上移一行: 按k
移至行首: 按^
移至行尾: 按$
移至檔案頂部:按H
移至檔案尾部:按L
移至檔案中部:按M
前翻一屏: 按ctrl+f
後翻一屏: 按ctrl+b
前翻半屏: 按ctrl+d
後翻半屏: 按ctrl+u
移動游標到指定行:輸入:數字
~插入文字
在游標右邊插入文字: 按a
在一行的結尾處新增文字: 按A
游標左邊插入文字: 按i
在行首插入文字: 按I
在游標所在行的下一行插入新行:按o
在游標所在行的上一行插入新行:按O
~撤消和重複操作
撤消上一個操作:按u
撤消游標所在行的更改:按U
重複操作:輸入”.”
~刪除文字
刪除當前字元: 按x
刪除一詞: 按dw
刪除一行: 按dd(剪下)
刪除行的部分內容:按D(刪除游標右的內容)或按d0(刪除游標左的內容)
刪除到檔案的結尾:按dG
dL :刪除直到螢幕上最後一行的內容
dH :刪除直到螢幕上第一行的內容
dG :刪除直到工作快取區結尾的內容(文尾)
d1G :刪除直到工作快取區開始的內容 (文頭
:n,md: 從第n行開始刪除m行
~複製和貼上
複製一行內容:按yy
貼上: 按p
查詢和替換命令
/string:向前查詢字串
?string:向後查詢字串
n:繼續上一次查詢
shift+n:以與上一次相反的方向查詢
:%s/字串1/字串2/g:在全文中替換字串1為字串2
n,ms/字串1/字串2/g:替換n到m行中的字串1為字串2
~儲存和退出命令
:w:寫緩衝區
:w 檔名:把緩衝區寫入指定檔案
:wq:儲存退出
:q!:不儲存退出
:wq!:儲存退出,對擁有者忽略只讀許可權
E!:取消自上次儲存以來所做的修改
ZZ:儲存退出
~修改文字命令
cl :更改當前字元
cw :修改到某個單詞的結尾位置
c3w :修改到第三個單詞的結尾位置
cb :修改到某個單詞的開始位置
c0 :修改到某行的結尾位置
c):修改到某個語句的結尾位置
c4):修改到第四個語句的結尾位置
c} :修改到某個段落的結尾位置
c2{ :修改到當前段落起始位置之前的第2個段落位置
ctc :修改當前行直到下一個字元c所出現位置之間的內容
C :修改到某一行的結尾
cc :修改當前行
~會話定製命令
:set: 顯示vi變數
:set all:顯示所有可能的vi變數和它們當前的值
:set nu:顯示行號
:set nonu:隱藏行號
:set showmode:顯示當前操作模式
:set noshowmode:隱藏當前操作模式
:set ai:自動對齊
:set dir=目錄:設定緩衝區的位置
4.VI的高階應用
(1)編輯多個檔案
#vi [-o]檔案1 檔案2 ………
-o:同一視窗開啟多個檔案
:next:編輯下一個檔案
:prev:編輯上一個檔案
:args:顯示所有開啟的檔名稱
Ctrl+ww :切換視窗
:e 檔名:讀入另一檔案
(2)高階複製
:start,end cp dest:將start到end行的內容複製到dest行以下
:start,end m dest:將start到end行的內容移動到dest行以下
nY:將從游標所在行開始的n行內容暫存
:[m],[n]w<檔名>:把m到n內容另存到指定檔案中
(3)其它高階應用
:X 輸入口令:以口令加密儲存
:ctrl+s:鎖定VI(ctrl+q解鎖)
:r !<命令>:執行指定命令,並將命令結果插入到當前檔案中
:J:合併上下兩行
四、軟體包的管理
1.Linux軟體包主要型別
(1)RPM包
由於RedHat公司開發的一種軟體封包方式,可以用於多種Linux系統
RPM包名稱格式為:軟體名-版本號.執行平臺.rpm(foo-1.2.0-3.i386.rpm)
Linux系統會使用專用的資料庫記錄RPM包的安裝情況
(2)TAR包
TAR包封裝的通常是軟體原始碼,並且利用了gzip或其它方式進行二次壓縮
2.RPM包的管理
(1)安裝RPM包
#rpm -ivh [詳細選項] RPM包名稱
詳細選項:
--nodeps 忽略依賴關係
--rplacepkgs 強制覆蓋已存在的RPM包
例項:
?#rpm –ivh grub-0.93-7.i386.rpm
(2)升級RPM包
?#rpm -Uvh [--nodeps/--replacepkgs] 軟體包名稱
例項:
?#rpm –Uvh bind-9.2.20-8.i385.rpm
(3)查詢RPM包
#rpm -q[a/f 檔名/l/] [軟體名稱]
例項:
#rpm –q bind(查詢軟體名為bind的軟體包)
#rpm –qa(查詢系統中所有已安裝的RPM包)
#rpm –qf /boot/grub/grub.conf (查詢grub.conf檔案所屬的RPM包)
#rpm -ql bind (查詢軟體名為bind軟體包並顯示軟體包的內容)
(4)解除安裝RPM包
#rpm -e 軟體名稱
例項:#rpm -e bind
(5)檢驗RPM包
#rpm –V 軟體名稱
例項:#rpm -V bind
3.TAR軟體包的管理
(1)安裝TAR包
解壓縮
配置安裝引數
編譯和安裝
例項:
#tar –xzvf bind-9.2.0.tar.gz
#cd bind-9.2.0
#./configure --prefix=/usr/named
#make
#make install
(2)解除安裝TAR包
直接刪除安裝
例項:
#rm -rf /usr/named