馬哥教育網絡班23期+第2周課程練習
Linux文件管理及bash腳本特性
概述,經過前三天的學習,想必我們已經對Linux 有了一個初步的了解,接下來這講我們要講述一下Linux至關重要的文件管理和bash腳本特性等知識要點
一、Linux 文件管理
1.1 原理概述
文件管理對于Linux系統來說至關重要,因為Linux 的哲學思想就是一切皆文件,所以說在Linux 系統上全都是文件,設置設備,分區等等都是文件,所以怎樣才能有效的進行文件管理也是一個課題。上次課我們講到了文件系統這個概念,包括根文件系統,設備需要掛載到根文件系統上才能運行等等,這次課我準備深入一點的來介紹一下文件系統的內部組織方式和原理。
我們知道,我們去電子市場買一臺電腦,回到家之后我們需要安裝操作系統,在安裝操作系統之前需要先進行分區,把硬盤分區分好以后才能進行安裝操作系統后面的步驟,其實硬盤在出廠的時候是進行了一系列分區操作的,我們把它叫做硬盤的低級格式化,就是把硬盤分為 多少磁道 多少柱面 多少扇區 我們知道磁道其實就是硬盤盤面上的一個個同心圓,扇區就是像扇子一樣,在磁道上劃分的一個個區域,柱面就是不同盤片上的同一個磁道 或同一個扇區所處的面,就像是水桶的表面一樣,所以是一個三維的結構,大家可以想象出來最外層的磁道其實是最好尋址的,因為磁頭不用往里面尋磁道,一下子就找到了,所以我們把主引導記錄一般都放在0磁道0扇區就是這個道理,請看下面我為大家準備的硬盤內部刨析圖:
圖1
圖2
圖3
所以說我們拿到手的硬盤其實是沒有分區的,是沒有組織結構的,如果說我們想往硬盤中寸數據的話,是直接放到一個大的硬盤上,就像是放到一個大倉庫一樣,這個倉庫沒有貨架,沒有分存放區域列表,那么當這個倉庫存的東西多了的時候,我們無法找到我們想要的數據,只能一個一個比對,所以說這樣是不行的,需要對這個倉庫進行管理,這就是文件系統的真正目的,就是在于對文件進行有效的管理,也就是我們常常說的建立索引。
這里我們先簡單了解,Linux 也需要分區之后,在分區后,把相應的分區格式化,其實就是進行建立文件系統,然后再掛載到相應的掛載點才能使用,所以我們說把一個文本文件存放到 /tmp/test/ 目錄下其實并不是簡單的理解成把數據創建,或者拷貝一個數據到目錄下,其實在內部有這樣一個結構
首先 比如說這個文件就是/tmp/test/test.txt 我們需要把磁盤分成分區分成一個一個的塊,這個塊的大小是一定的,一般是4KB ,由于文件是有元數據和數據的,我們把文件的元數據信息放到圖中所示的inode 塊中,把文件的數據放到如圖所示的綠色的磁盤塊中,文件元數據信息磁盤塊中存儲了文件數據磁盤塊的鏈接 ,所以我們通過文件的元數據可以找到文件的數據信息,至于說文件名并沒有在元數據信息中,文件存在于目錄的磁盤塊中,因為目錄也是文件,我們在查找文件的時候,先找到這個文件的路徑和它的父目錄,找到父目錄之后才找到了文件的文件名,通過文件名找到test.txt文件對應的inode 信息,然后再通過inode 信息查找到了真正的數據信息,把這個數據做相應的操作,添加 修改 刪除等等。。。
了解了原理之后,我們下面來看下Linux 的文件管理類命令
1.2 Linux 文件管理類命令
我把文件管理類命令分為四種,也就是我們常說的CRUD 增刪改查
1.2.1 創建類命令
1、touch 命令
touch 命令雖然是修改文件元數據的時間戳,但是如果 touch 命令后面沒有加選項 而且這個命令所指向的文件不存在,那么默認就是創建一個touch 后面跟參數的文件 例如:
touch /PATH/TO/SOMEFILE
touch 更新文件的timestarp
-a 更新atime為當前時間
touch -a /PATH/TO/SOMEFILE
可以看出訪問時間也就是 atime 已經修改了,-m 和-a 類似,這里就不說明了
-m 更新mtime為當前時間
-t 更新為指定時間
-c no-creat 如文件不存在,不創建新文件
2、nano 命令
與touch 命令類似,如果文件不存在就新建
3、vim 命令
與touch nano 命令類似
4、cp 命令
文件或目錄復制類命令,用法如下:
(1)單源復制 cp [OPTION]… [-T] SOURCE DEST
注意: 如果DEST不存在 :則事先創建此文件,并復制源文件的數據流至DEST中
如果DEST存在:
如果DEST是一個非目錄文件:則覆蓋目標文件
如果DEST是目錄文件:則先在DEST目錄下創建一個與源文件同名的文件,并復制其數據流至目標文件
(2)多源復制 cp [OPTION]… SOURCE… DIRECTORY
如果DEST不存在:錯誤:
如果DEST存在:
如果DEST是非目錄文件 ;錯誤 ,錯誤信息同上
如果DEST是目錄文件:分別復制每一個文件至目標目錄中,并保持源名;
復制命令的常用選項
-i 交互式復制,及覆蓋之前提醒用戶確認;
-f 強制覆蓋目標文件
-r,R 遞歸復制目錄;(如果源是目錄),而目標不存在,那么就創建一個目標目錄,把源目錄中的內容遞歸復制到目標目錄中
如果目標存在,那么就直接把源目錄中的內容遞歸復制到目標目錄中
-d 復制符號鏈接文件本身,而非其指向的源文件;
5、mv命令
mv 命令 move 剪切
注意:當源文件和目標文件在同一個目錄下,就是重命名文件,如果不在同一個目錄下,就是移動
常用選項
-i 交互式
-f force 非交互式,強制執行
此命令的用法和cp 命令幾乎一樣
6、 install命令:
install – copy files and set attributes
單源復制:
install [OPTION]… [-T] SOURCE DEST
多源復制:
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
創建目錄:
install [OPTION]… -d DIRECTORY…
常用選項:
-m, –mode=MODE:設定目標文件權限,默認為755;
-o, –owner=OWNER:設定目標文件屬主;
-g, –group=GROUP:設定目標文件屬組;
1.2.2 刪除類命令
rm 命令
rm命令 remove 刪除文件
鄭重提醒:真正生產環境中,不要刪除,把他mv 走 ,過幾天確認不用再刪除
常用選項:
-i interactive
-f force
-r recursive
刪除目錄 rm -rf /PATH/TO/DIR
rm -rf /* 自殺 危險操作
注意 :所有不用的文件建議不要直接刪除,而是移動至某個專用目錄(模擬回收站)
二 、bash 工作特性
bash工作特性主要有以下幾點,我們一一說明
1、 命令行展開
~ 和 {}
~ 我們之前已經使用過,就是管理員可以通過 cd ~ USERNAME到用戶的家目錄 例如:
{} 命令行展開機制 ,請看下面的例題:
(1) 創建/tmp目錄下的a_c , a_d,b_c,b_d
(2) 創建/tmp/mylinux 目錄下的:
結果如下:
2、命令別名
alias 和 unalias
我們可以使用alias 來創建命令別名 例如:
也可以使用unalias 來取消別名
3、命令歷史
history 之前講過,主要就是通過history 查看命令歷史,包括可以用
!STRING 的形式調用之前執行的命令
!! 執行上一條命令
4、文件名通配
文件名通配之前精講過,這里只是總結,只要記住那些通配符即可
5、快捷鍵
bash 命令的快捷鍵 Ctrl + a Ctrl +e 等等
6、命令補全機制
7、路徑補全機制
在用戶所制定的起始位置進行查找
8、命令哈希
緩存此前命令的查找結果 緩存的結果就叫做命令哈希 hash 是內嵌命令 不是外部命令
外部命令才有命令哈希,因為內部命令是shell提供的,所以不存在命令哈希一說,命令哈希的意義就是把之前執行的外部命令緩存到哈希表中,以后如果再執行這個外部命令的時候,就不用去 PATH 環境變量下從左到右依次查找這個命令所在外置去執行,而是直接從哈希表中找到相應的路徑直接執行即可。
這種方式類似于以空間換時間一說,節省了查找的時間,提高了運行命令的執行效率。
9、命令執行狀態返回值
我們需要了解,每一次輸入命令其實后,都會對執行的狀態結果做保留,系統會把執行的狀態結果保存在一個變量中,我們稱這個變量是特殊變量,用$?來表示 例如:
0 表示 成功 1-255表示各種各樣的失敗,例如:
三、練習及相關名詞解釋
3.1 文件元數據信息
上面已經講過,所謂文件的元數據信息就是指文件的訪問時間,修改時間,改變時間,還有文件的大小,文件的屬主 屬組等等信息,使用stat命令查看例如:
如果要修改文件的時間戳信息,需要用touch命令來修改
3.2 命令中引用另一個命令的執行結果
在命令中,想引用另一個命令的執行結果,需要使用$() 或者 “ (反引號)來使用,例如:
3.3 相關的練習
1、 顯示/var 目錄下所有以l開頭 以一個小寫字母結尾 且中間至少出現一位數字(可以有其它字符)的文件或目錄
2、顯示/etc目錄下 以任意一個數字開頭 且以非數字結尾的文件或目錄
3、顯示/etc目錄下 以非字母開頭 后面跟了一個字母以及其他任意長度任意字符的文件或目錄
4、在/tmp 目錄下創建以tfile 開頭 后跟當前日期和時間的文件 文件名形如 tfile-2016-05-27-09-32-22
5、復制/etc 目錄下所有以p 開頭 以非數字結尾的文件或目錄到/tmp/mytest1目錄中
6、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中
7、復制/etc目錄下所有以l或m或n開頭,以.conf 幾位的文件至/tmp/mytest3目錄中
以上就是第二周的博客作業
原創文章,作者:luobo3692003,如若轉載,請注明出處:http://www.www58058.com/47285
看的出來,在很用心的總結,如果在每個選項下面再寫一條命令來解釋一下的話會更好,加油,另外可以看一下別的同學的排版