Linux文件管理及bash腳本特性

馬哥教育網絡班23期+第2周課程練習

Linux文件管理及bash腳本特性

概述,經過前三天的學習,想必我們已經對Linux 有了一個初步的了解,接下來這講我們要講述一下Linux至關重要的文件管理和bash腳本特性等知識要點

一、Linux 文件管理

1.1 原理概述

  文件管理對于Linux系統來說至關重要,因為Linux 的哲學思想就是一切皆文件,所以說在Linux 系統上全都是文件,設置設備,分區等等都是文件,所以怎樣才能有效的進行文件管理也是一個課題。上次課我們講到了文件系統這個概念,包括根文件系統,設備需要掛載到根文件系統上才能運行等等,這次課我準備深入一點的來介紹一下文件系統的內部組織方式和原理。

  我們知道,我們去電子市場買一臺電腦,回到家之后我們需要安裝操作系統,在安裝操作系統之前需要先進行分區,把硬盤分區分好以后才能進行安裝操作系統后面的步驟,其實硬盤在出廠的時候是進行了一系列分區操作的,我們把它叫做硬盤的低級格式化,就是把硬盤分為 多少磁道 多少柱面 多少扇區 我們知道磁道其實就是硬盤盤面上的一個個同心圓,扇區就是像扇子一樣,在磁道上劃分的一個個區域,柱面就是不同盤片上的同一個磁道 或同一個扇區所處的面,就像是水桶的表面一樣,所以是一個三維的結構,大家可以想象出來最外層的磁道其實是最好尋址的,因為磁頭不用往里面尋磁道,一下子就找到了,所以我們把主引導記錄一般都放在0磁道0扇區就是這個道理,請看下面我為大家準備的硬盤內部刨析圖:

 
圖1

blob.png

圖2

blob.png

圖3

blob.png

  所以說我們拿到手的硬盤其實是沒有分區的,是沒有組織結構的,如果說我們想往硬盤中寸數據的話,是直接放到一個大的硬盤上,就像是放到一個大倉庫一樣,這個倉庫沒有貨架,沒有分存放區域列表,那么當這個倉庫存的東西多了的時候,我們無法找到我們想要的數據,只能一個一個比對,所以說這樣是不行的,需要對這個倉庫進行管理,這就是文件系統的真正目的,就是在于對文件進行有效的管理,也就是我們常常說的建立索引。

  這里我們先簡單了解,Linux 也需要分區之后,在分區后,把相應的分區格式化,其實就是進行建立文件系統,然后再掛載到相應的掛載點才能使用,所以我們說把一個文本文件存放到 /tmp/test/ 目錄下其實并不是簡單的理解成把數據創建,或者拷貝一個數據到目錄下,其實在內部有這樣一個結構

    blob.png

  首先 比如說這個文件就是/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為當前時間

    blob.png

   

  touch -a /PATH/TO/SOMEFILE

     blob.png

  可以看出訪問時間也就是 atime 已經修改了,-m 和-a 類似,這里就不說明了 
  -m 更新mtime為當前時間 
  -t 更新為指定時間 
  -c no-creat 如文件不存在,不創建新文件

  2、nano 命令 
  與touch 命令類似,如果文件不存在就新建

  3、vim 命令 
  與touch nano 命令類似

  4、cp 命令 
  文件或目錄復制類命令,用法如下: 
  (1)單源復制 cp [OPTION]… [-T] SOURCE DEST

   blob.png

 注意: 如果DEST不存在 :則事先創建此文件,并復制源文件的數據流至DEST中 
  如果DEST存在: 
  如果DEST是一個非目錄文件:則覆蓋目標文件

  blob.png

  如果DEST是目錄文件:則先在DEST目錄下創建一個與源文件同名的文件,并復制其數據流至目標文件

  blob.png

  

  (2)多源復制 cp [OPTION]… SOURCE… DIRECTORY 
     如果DEST不存在:錯誤:

  blob.png

     如果DEST存在: 
     如果DEST是非目錄文件 ;錯誤 ,錯誤信息同上

  如果DEST是目錄文件:分別復制每一個文件至目標目錄中,并保持源名;

  blob.png

  復制命令的常用選項 
  -i 交互式復制,及覆蓋之前提醒用戶確認; 
  -f 強制覆蓋目標文件 
  -r,R 遞歸復制目錄;(如果源是目錄),而目標不存在,那么就創建一個目標目錄,把源目錄中的內容遞歸復制到目標目錄中 
  如果目標存在,那么就直接把源目錄中的內容遞歸復制到目標目錄中

  blob.png

  -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到用戶的家目錄 例如:

     blob.png

   {} 命令行展開機制 ,請看下面的例題: 
   (1) 創建/tmp目錄下的a_c , a_d,b_c,b_d

    blob.png   

   (2) 創建/tmp/mylinux 目錄下的:

    blob.png

    結果如下:

    blob.png

2、命令別名

  alias 和 unalias

  我們可以使用alias 來創建命令別名 例如:

   blob.png

  也可以使用unalias 來取消別名

  blob.png

3、命令歷史

  history 之前講過,主要就是通過history 查看命令歷史,包括可以用 
  !STRING 的形式調用之前執行的命令 
  !! 執行上一條命令

4、文件名通配

  文件名通配之前精講過,這里只是總結,只要記住那些通配符即可

5、快捷鍵

  bash 命令的快捷鍵 Ctrl + a Ctrl +e 等等

6、命令補全機制
7、路徑補全機制

  在用戶所制定的起始位置進行查找

8、命令哈希

  緩存此前命令的查找結果 緩存的結果就叫做命令哈希 hash 是內嵌命令 不是外部命令 
外部命令才有命令哈希,因為內部命令是shell提供的,所以不存在命令哈希一說,命令哈希的意義就是把之前執行的外部命令緩存到哈希表中,以后如果再執行這個外部命令的時候,就不用去 PATH 環境變量下從左到右依次查找這個命令所在外置去執行,而是直接從哈希表中找到相應的路徑直接執行即可。 
  這種方式類似于以空間換時間一說,節省了查找的時間,提高了運行命令的執行效率。

    blob.png

9、命令執行狀態返回值

  我們需要了解,每一次輸入命令其實后,都會對執行的狀態結果做保留,系統會把執行的狀態結果保存在一個變量中,我們稱這個變量是特殊變量,用$?來表示 例如:

 blob.png

  0 表示 成功 1-255表示各種各樣的失敗,例如:

  blob.png

三、練習及相關名詞解釋

3.1 文件元數據信息

  上面已經講過,所謂文件的元數據信息就是指文件的訪問時間,修改時間,改變時間,還有文件的大小,文件的屬主 屬組等等信息,使用stat命令查看例如:

   blob.png

  如果要修改文件的時間戳信息,需要用touch命令來修改

3.2 命令中引用另一個命令的執行結果

  在命令中,想引用另一個命令的執行結果,需要使用$() 或者 “ (反引號)來使用,例如:

  blob.png

3.3 相關的練習

  1、 顯示/var 目錄下所有以l開頭 以一個小寫字母結尾 且中間至少出現一位數字(可以有其它字符)的文件或目錄

    blob.png

  2、顯示/etc目錄下 以任意一個數字開頭 且以非數字結尾的文件或目錄

    blob.png

  3、顯示/etc目錄下 以非字母開頭 后面跟了一個字母以及其他任意長度任意字符的文件或目錄

    blob.png

  4、在/tmp 目錄下創建以tfile 開頭 后跟當前日期和時間的文件 文件名形如 tfile-2016-05-27-09-32-22

    blob.png

  5、復制/etc 目錄下所有以p 開頭 以非數字結尾的文件或目錄到/tmp/mytest1目錄中

    blob.png

  6、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中

    blob.png

  7、復制/etc目錄下所有以l或m或n開頭,以.conf 幾位的文件至/tmp/mytest3目錄中

    blob.png

以上就是第二周的博客作業

原創文章,作者:luobo3692003,如若轉載,請注明出處:http://www.www58058.com/47285

(0)
luobo3692003luobo3692003
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • N23_第1周博客作業

    1、描述計算機的組成及其功能。     根據馮·諾依曼體系計算機有中央處理器、主存儲器、輸入/輸出三個子系統組成。 1.中央處理器 CPU(Central Processing Unit)用于數據運算。CPU有控制單元、算數邏輯單元、寄存器組組成。 (1)控制單元:控制各個子系統操作 (2)算數邏輯單元:對數據進行邏輯、移位和算數運算 邏…

    Linux干貨 2016-09-19
  • 磁盤配額、陣列與邏輯卷

    一、磁盤配額 在內核中執行以文件系統為單位啟用對不同組或者用戶的策略不同 根據塊或者節點進行限制執行軟限制(soft limit)硬限制(hard limit) 步驟一:獲得文件系統支持臨時有效:mount -o remount,usrquota,grpquota {mount_point|device}永久有效:寫入配置文件 /etc/fstab 中檢查文…

    Linux干貨 2016-08-29
  • 22期第十三周課堂練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2017-01-09
  • 內核編譯之增加ntfs文件系統

    內核編譯 內核編譯 單內核體系設計,但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。 內核組成部分:     Kernel,內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-WERSION- RELEASE;     Kernel object…

    Linux干貨 2016-09-13
  • LVM 2 介紹以及怎么使用?

    一、 LVM是什么? LVM利用Linux內核的device-mapper來實現存儲系統的虛擬化(系統分區獨立于底層硬件)。 通過LVM,你可以實現存儲空間的抽象化并在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分區時無需擔心某個硬盤上沒有足夠的連續空間, without getting caught up …

    Linux干貨 2017-01-06
  • vsftpd基于mysql存儲認證(centos7)

    (1)首先開發包組和服務器平平臺開發包組 (2)yum安裝需要的依賴包 (3)編譯安裝pam_mysql模塊 (4)配置mysql,并添加mysql中的vsftpd進程用戶,且創建vsftpd數據庫,并將vsftpd數據庫授權給vsftpd用戶,且創建vsftpd.users表,并在表中添加用戶tom (5)創建vsftpd要上傳和下載的URL (6)創建基…

    Linux干貨 2016-10-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 10:28

    看的出來,在很用心的總結,如果在每個選項下面再寫一條命令來解釋一下的話會更好,加油,另外可以看一下別的同學的排版

欧美性久久久久