操作系統的主要功能之一就是文件的管理。文件管理是由文件系統來實現的,Linux 系統支持多種格式 的文件系統,本屆我們主要講解下文件系統的類型,以及文件操作的一些常用命令。 2.8.1 Linux 文件系統類型 我們在使用 Windows 系統的時候,有時會對硬盤,U 盤等的存儲設備進行格式化,在格式化的時候會要求 我們選擇文件系統的類型,比如:exFAT、FAT32、NTFS,同樣 Linux 系統也支持各種不同類型的文件系統, 比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。這里我們主要講解下幾種常用的文件系統。 FAT32 文件系統: FAT32 指的是文件分配表是采用 32 位二進制數記錄管理的磁盤文件管理方式,因 FAT 類文件系統的核心是 文件分配表,命名由此得來。FAT32 是從 FAT 和 FAT16 發展而來的,優點是穩定性和兼容性好,能充分兼容 Win 9X 及以前版本,且維護方便。缺點是安全性差,且最大只能支持 32GB 分區,單個文件也只能支持最大 4GB。 3 ext3 文件系統 EXT3 是第三代擴展文件系統(英語:Third extended filesystem,縮寫為 ext3),是一個日志文件系統, 常用于 Linux 操作系統。它是很多 Linux 發行版的默認文件系統。Stephen Tweedie 在 1999 年 2 月的內核 郵件列表中,最早顯示了他使用擴展的 ext2,該文件系統從 2.4.15 版本的內核開始,合并到內核主線中。 ext4 文件系統 4 EXT4 是第四代擴展文件系統(英語:Fourth extended filesystem,縮寫為 ext4)是 Linux 系統下的日志 文件系統,是 ext3 文件系統的后繼版本。Ext4 是由 Ext3 的維護者 Theodore Tso 領導的開發團隊實現的, 并引入到 Linux2.6.19 內核中。Ext4 產生原因是開發人員在 Ext3 中加入了新的高級功能。 上面幾種文件系統是我們在 Linux 下經常使用的,那么我們安裝的 Ubuntu 系統下的文件系統使用的是哪種 格式的呢?我們可以在終端輸入“df -T”命令來查看下,如下圖所示: 從上圖紅色方框的文件就是我們安裝 Ubuntu 的磁盤,在 Linux 下一切皆為文件,“/dev/sda1”就是我 們的磁盤分區,可以看到他的類型是 ext4。我們在 Windows 系統下有 C、D、E 盤這樣的概念,但是通過上 面的命令我們可以看到 Linux 下對磁盤的管理與 Windows 是不一樣的,沒有 C、D、E 盤這樣的概念。Linux 系統只有一個跟目錄“/”,我們可以在 Ubuntu 的桌面打開“文件”應用,我們可以看到打開的文件路徑 并不是在根目錄下,這是因為 Ubuntu 是支持多用戶的,會為每個用戶分配一個根目錄,比如我的 Ubuntu 登錄的用戶是 topeet,那么默認進入的就是 topeet 用戶的根目錄“home”,如下圖所示: 我們在上圖中點擊左側的“計算機”,如下圖所示: 上圖就是 UBuntu 的根目錄,那么前面我們的說的 Ubuntu 會為每一個用戶創建一個根目錄,那么這個根目 錄具體位置在哪里呢?我們在創建用戶的時候,Ubuntu 同時會在“/home”目錄下創建與應戶名同名的文 件夾,這個文件夾就是用戶的根目錄,比如我這里登陸的用戶名是 topeet,那么 topeet 用戶對應的用戶根 目錄就是“/home/topeet”這個目錄。用戶可以對自己用戶根目錄下的文件進行任意的讀寫操作。我們可 以打開終端使用“cd /”命令,進入到系統根目錄下,然后在輸入“ls”命令,產看下系統根目錄下都有哪 些文件,如下圖所示: 從上圖可以看到系統根目錄下都有哪些文件夾,我們來看下這些文件夾的具體功能: /bin 存儲一些二進制可執行命令文件 /boot 存放 Ubuntu 系統內核和系統啟動文件 /dev 存放設備節點 /etc 存放系統管理所需的配置文件 /home 普通用戶默認目錄,每個用戶在改目錄下都有一個以本用戶名命名的文件夾 /lib /lib64 存放系統程序運行所需的庫文件 /media 存放 Ubuntu 系統自動掛載的設備文件 /mnt 用于掛載的文件系統的掛載點 /opt 可選文件和程序的存放目錄 /proc 通常用來保存系統信息和進程信息 /root 超級用戶 root 的根目錄文件 /sys 系統設備和文件層次結構,并向用戶程序提供詳細的內核數據信息 /tmp 存儲系統和用戶的臨時文件 /usr 包括與系統用戶直接有關的文件和目錄 /var 存儲一些不斷變化的文件,比如日志文件 2.8.2 文件操作命令 創建文件命令 touch 我們在前面學習 vim 的時候,可以通過 vim 來創建一個文本文件,“touch”不僅可以用來創建文本文件, 還可以創建其它類型的文件,命令格式如下: touch [參數] [文件名] 參數說明: -a 只更改存取時間 -c 不建立任何文件 -d<日期> 使用指定的日期創建文件 -t<時間> 使用指定的時間創建文件 當我們使用“touch”命令創建文件的時候,如果創建的文件不存在,則會直接創建,如果創建的文件 已經存在,則會修改下文件的最后修改日期(修改成運行該命令時候的系統日期)。現在我們使用命令“cd ~”進入到用戶的根目錄下,然后使用“touch”命令創建一個名為 ceshi 的文件,運行結果如下圖所示: 文件夾創建命令 mkdir mkdir 是用來創建文件夾的命令,在使用該命令的時候,要求當前用戶在當前的目錄下具有寫權限,并且創 建的文件夾名稱不能是當前目錄中又有的目錄,命令格式如下: mkdir [選項] 目錄... 選項的說明如下: -m //設定權限<模式>(類似 chmod) -p //可以是一個路徑命令,如果路徑中的目錄不存在,則依次創建他們 -v //每次創建新目錄都顯示信息 --help //顯示幫助信息 --version //輸出版本信息 我們可以使用 mkdir 創建一個名為“test”的文件夾,我們在終端運行命令“mkdir test”,運行結果如下圖 所示: 文件刪除命令 rm rm 命令可以刪除文件和文件夾,在使用該命令的時候,要求當前用戶在當前的目錄下具有寫權限,命令格式如下: rm [選項]... 目錄... 選項的說明如下: -d //刪除可能仍有數據的目錄(只限超級用戶 root) -f //略過不存在的文件,不顯示任何信息 -i //進行任何刪除操作前,必須先確認 -r //同時刪除該目錄下的所有目錄層 -v //詳細顯示進行的步驟 --help //顯示幫助信息并退出 --version //顯示版本信息并退出 我們使用“rm”命令刪除前面創建的文件“ceshi”,我們在終端輸入“rm ceshi”,然后回車就可以刪 掉文件“ceshi”了,運行結果如下圖所示: “rm”命令也可以刪除文件夾,我們刪除前面創建的 test 目錄,我們在終端執行“rm -rf test”,運行結果 如下圖所示: 文件復制命令 cp Linux 下文件復制的命令是“cp”,命令格式如下: cp [參數] [源文件] [目標文件] 參數的說明如下: -d //復制有符號連接的文件時,保留原始的連接 -f //強行復制文件,不管要復制的文件是否已經存在于目標目錄 -r //遞歸處理,將指定目錄下的文件及子目錄一并處理 我們在用戶跟目錄下使用 mkdir 命令創建兩個文件夾:ceshi1、ceshi2,如下圖所示: 然后進入“ceshi1”文件夾,在 ceshi1 文件夾創建 a 文件,如下圖所示: 我們將文件 a 復制到用戶根目錄下的 ceshi2 文件夾,運行結果如下圖所示: 完成文件的復制,接下來我們來實現文件夾的復制,首先我們返回到用戶根目錄下,然后將 ceshi1 文件夾 復制到 ceshi2 文件夾,運行結果如下圖所示: 移動文件命令 mv Linux 下文件移動的命令是 mv,命令格式如下: mv [參數] [源文件] [目標文件] 參數說明: -b //如果要覆蓋文件的話覆蓋前先進行備份 -f //若目標文件或目錄與現在的文件重復,直接覆蓋目的文件或目錄 -i //若目標文件存在,則會詢問是否覆蓋 -u //若目標文件已經存在,且源文件比較新,則會更新 我們在前面創建了兩個文件夾:ceshi1、ceshi2,在 ceshi1 文件夾創建了文件 a,我們將文件 a 重命名成文 件 b,然后將文件 b 移動到 ceshi2 文件夾,運行結果如下圖所示: 文件接壓縮命令 tar Linux 下常用的壓縮包格式有兩種:.bz2 和.gz。我們可以使用 tar 命令來解壓或壓縮這兩種格式的壓縮包, 命令格式如下: tar [必要參數] [選擇參數] [文件] 必要參數說明如下: -A //新增壓縮文件到已存在的壓縮 -B //設置區塊大小 -c //建立新的壓縮文件 -d //記錄文件的差別 -r //添加文件到已經壓縮的文件 -u //添加改變了和現有的文件到已經存在的壓縮文件 -x //從壓縮的文件中提取文件 -t //顯示壓縮文件的內容 -z //支持 gzip 解壓文件 -J //支持 bzip2 解壓文件 -Z //支持 compress 解壓文件 -v //顯示操作過程 -k //保留原有文件不覆蓋 -m //保留文件不被覆蓋 -W //確認壓縮文件的正確性 可選參數如下: -b //設置區塊數目 -C //切換到指定目錄 -f //指定壓縮文件 --help //顯示幫助信息 --version //顯示版本信息 我們使用 tar 命令壓縮生成.bz2 和.gz 壓縮包,運行結果如下圖所示: 在上圖中我們分別壓縮了.bz2 和.gz 兩個格式的壓縮包,其中壓縮.bz2 格式的壓縮包我們使用的參數 是-jcvf,而.gz 格式的壓縮包使用的參數是-zcvf。下面在我們在來學習下 tar 解壓文件,操作如下圖所示: 在上圖中,我們分別解壓了.tar.bz2 和.gz 兩種格式的壓縮包。其中.tar.bz2 壓縮包使用的-jxvf 參 數來解壓的,而.gz 格式的壓縮包使用-zxvf 參數來解壓的。關于 tar 的命令我們就介紹到這里,更多詳細 的用法大家可以去網上找下相關的文檔。 文件查找命令 find 文件查找在我們的平常使用中也是很常見的,比如在 Linux 內核源碼中,我們要查找某個文件的路徑,這 是就會用到文件查找 find 命令了,器格式如下: find [路徑][參數][關鍵字] 路徑標識要從哪個目錄下開始查找文件,如果不寫默認從執行 find 的當前目錄下開始查找。 參數說明如下: -name -depth 從指定目錄下的最深層的子目錄開始查找 -size<文件大小> 查找符合指定文件大小的文件 -type<文件類型> 查找符合指定文件類型的文件 -user<擁有者> 查找符合指定的擁有者的文件或目錄 -gid<群組識別碼> 查找符合指定的群組識別碼的文件或目錄 -group<群組名稱> 查找符合指定的群組名稱的文件或目錄 該命令的參數有很多,我們這里只是列舉除了一些常用的。我們來使用 find 命令查找一下在目錄“/etc” 下以“host”開頭的文件,我們在終端輸入“find /etc -name host*”命令,運行結果如下圖所示: 從上圖中我們可以看到在“/etc”目錄下,以“host”關鍵字開頭的文件全部查找出來了。 文本搜索命令 grep 有時候我們需要搜索出包含特定關鍵字的文件有哪些,這樣就會用到 grep 這個命令,命令格式如下: grep [參數] 關鍵字 文件列表 參數說明如下: -b //在顯示符合關鍵字的那一列前,標記處該列第 1 個字符的位編號 -a //不要忽略二進制的數據 -c //計算符合范本樣式的列表 -i //忽略字符的大小寫 -n //在顯示符合樣本范式的那一列前面,標出該列的列數編號 -r //在指定目錄中遞歸查找 -v //反轉查找,只顯示不匹配的行 比如我們在“/etc”下遞歸查找包含字符“topeet”的文本,運行結果如下圖所示: |