1. 程式人生 > >第三章文件管理學習筆記

第三章文件管理學習筆記

學習筆記

筆記整理起始時間:2018年3月31日16:16:55

本章內容
文件系統結構元素
創建和查看文佳
復制、轉移和刪除文件
使用Nautilus來管理文件
軟和硬鏈接

文件系統
文件和目錄被組織成一個單根倒置樹結構
文件系統從根木蘭路下開始,用"/"表示
根文件系統:rootfs,root filesystem
文件名稱,默認ext4,xfs下區分大小寫
以.開頭的文件為隱藏文件
路徑分隔的/
文件有兩類數據
元數據:metadata
數據:data
文件系統分層結構:LSB,Linux Standard Base
FHS:(Filesystem Hierarchy Standard)

文件名規則
文件名最長255個字節

包括路徑在內文件名最長4095個字節
藍色-->目錄
綠色-->可執行文件
紅色-->壓縮文件
淺藍色-->鏈接文件
灰色-->其他文件
除了/和NUL,所有字符都有效,但使用特殊字符的目錄名和文件不推薦使用
有些字符需要用引號來引用它們。
標準Linux文件系統ext4,xfs下區分大小寫,如mail,Mail等

文件系統結構
/boot:引導文件存放目錄,內核文件(vmlinuz),引到加載器(bootloader)
/bin:供所有用戶使用的基本命令;不能關聯至獨立分區,os啟動即會用到程序
/sbin:管理類的基本命令,不能關聯至獨立分區,os啟動即會用到的程序
/lib:啟動時程序依賴的基本共享庫文件以及內核模塊文件/lib/modules

/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/home/houstname:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b:block device,隨即訪問
c:character device,線性訪問
/opt:第三方應用程序的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/usr:universal shared,read-only data
/usr/bin:保證系統擁有完整功能而提供的應用程序
/usr/sbin:
/usr/lib:32位使用
/usr/lib64:只存在64位系統
/usr/include:C程序的頭文件(header files)
/usr/share:結構化獨立的數據,例如doc,man等
/local:第三方應用程序的安裝位置
bin,sbin,lib,lib64,etc,share
/var:variable data filesystem
cache:應用程序緩存數據目錄
lib:應用程序狀態信息數據
local:專用於為/usr/local下的應用程序存儲可變數據
lock:鎖文件
log:日誌目錄及文件
opt:專用於為/opt下的應用程序存儲可變數據
run:運行中的進程相關數據,通常用於存儲進程pid文件
spool:應用程序數據池
tmp:保存系統兩次重啟只見產生的臨時數據
/proc:用於輸出內核與進程信息相關的虛擬文件系統
/sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux:security enhanced Linux,selinux相關的安全策略等信息的
存儲位置

Linux上的應用程序的組成部分
二進制程序:/bin,/sbin,/usr/sbin,/usr/local/bin,/usr/local/sbin
庫文件:/lib,lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/DIRECTORY,/usr/local/etc
幫助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,
/usr/local/share/doc

Linux下的文件類型
-:普通文件
d:目錄文件
b:塊設備
c:字符設備
l:符號鏈接文件
p:管道文件pipe
s:套接字文件socket

CentOS 7目錄變化
/bin 和/usr/bin
/sbin 和/usr/sbin
/lib 和/usr/lib
/lib64 和/usr/lib64

顯示當前工作目錄
每個shell和系統進程都有一個當前的工作目錄
CWD:current work directory
顯示當前shell CWD的絕對路徑
pwd:printing working directory
-P 顯示真實物理路徑
-L 顯示鏈接路徑(默認)
如:cd /bin,
pwd,輸出結果為:/bin,
pwd -P ,輸出結果為:/usr/bin

絕對和相對路徑
絕對路徑
以/開始
完整的文件的位置路徑
可用於任何想指定一個文件名的時候
例如:cd /root/Downloads
相對路徑名
不以斜線開始
指定相對於當前工作目錄或某目錄的位置
可以作為一個簡短的形式指定一個文件名
例如:cd ../Downloads/
基名:basename
目錄名:dirname
如:
basename /root/Music/file1 輸出結果為:file1
dirname /root/Music/file1 輸出結果為:/root/Music

cd 更改目錄
cd 更改目錄,可使用相對或絕對路徑
cd /home/wang
cd home/wang
cd .. 切換至父目錄
cd 切換至當前用戶家目錄
cd - 切換至上一個工作目錄
cd ~wang 切換至wang用戶家目錄
cd -P /bin 進入絕對路徑
相關變量
PWD:當前目錄路徑
OLDPWD:上一次目錄路徑

ls 列出當前目錄的內容或指定目錄
用法:ls [options] [files or dirs]
ls -a 顯示所有文件或目錄,含隱藏
ls -l 顯示文件詳細信息,==ll
ls -R 遞歸,顯示目錄裏面的內容
ls -ld 目錄和符號鏈接信息
ll -d 目錄/ 對於普通目錄,加和不加/都會顯示目錄信息,但是對於鏈接
目錄,比如/bin,加/會顯示鏈接目的目錄信息,不加/會顯示鏈接
文件本身的信息。
ls -1 單列顯示
ls -S 按大小從大到小排序
ls -t 按mtime排序
ls -u 需配合-t使用,顯示並按atime從新到舊排序
ls -U 按目錄存放順序顯示
ls -X 按文件後綴排序
ls -r 倒序排列

stat 查看文件狀態
三個時間戳
access time, atime,表示文件的最後讀取時間
modify time, mtime,表示文件的最後修改時間
change time, ctime,表示元數據發生改變的時間

文件通配符

  • 匹配零個或多個字符
    ? 匹配任何單個字符
    ~ 當前用戶家目錄
    ~mage 用戶mage家目錄
    ~+ 當前工作目錄
    ~- 前一個工作目錄
    [0-9] 匹配列表中的任何一個字符
    [a-Z] 匹配任意字母
    [wang] 匹配列表中的任何一個字符
    [^wang] 匹配列表中的所有字符意外的字符
    預定義的字符類:man 7 glob
    [:digit:] 任意數字,相當於0-9
    [:lower:] 任意小寫字母
    [:upper:] 任意大寫字母
    [:alpha:] 任意大小寫字母
    [:lanum:] 任意數字或字母
    [:blank:] 水平空白字符
    [:space:] 水平或垂直空白字符
    [:punct:] 標點符號
    [:print:] 可打印字符
    [:graph:] 圖形字符
    [:cntrl:] 控制(非打印)字符
    [:xdigit:] 十六進制字符

小練習:
1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數
字的文件或目錄
ls -d /var/l[0-9][[:lower:]]
? 2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄
ls -d /etc/[0-9][^[:digit:]]
? 3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字符
的文件或目錄
ls -d /etc/[^[:alpha:]][a-Z]

? 4、顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它為任意字符
的文件或目錄
ls -d /etc/rc[0-6]
? 5、顯示/etc目錄下,所有以.d結尾的文件或目錄
ls -d /etc/
.d
? 6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄
ls -d /etc/[mnrp].conf
? 7、只顯示/root下的隱藏文件和目錄
ls -d /root/.

? 8、只顯示/etc下的非隱藏目錄

ls -d /etc/[^.]*/

touch命令 創建空文件和刷新時間戳
touch [OPTION]...FILE...
-a 僅改變atime和ctime
-m 僅改變mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的時間戳
-c 如果文件不存在,則不予創建
用法:文件存在,刷新時間戳,文件不存在,則創建文件
touch file{1..5} 創建file1..file5

cp復制文件和目錄
用法使用規則
cp SRC DEST
復制單個文件到單個文件
如文件名不存在,則創建
cp Music/file3 f3
如文件名已存在,則覆蓋,root賬號默認使用別名-i,會詢問是否覆蓋
cp Music/file3 f3 此時f3已存在
復制單個文件到目錄
在目標DEST下新建與源SRC同名的文件,並將SRC內容填充到新文件
復制多個文件到單個文件
不管文件名是否存在,均會報錯
cp: target ‘f3’ is not a directory
復制多個文件到目錄
在目標DEST下新建與源SRC同名的文件,並將SRC內容填充到新文件
cp Music/file1 Music/file2 Videos/
如目標文件名已存在,則覆蓋,默認root賬號會詢問
復制目錄到單個文件
如DEST已存在,直接報錯
cp: cannot overwrite non-directory ‘f3’ with directory ‘Music/’
如DEST不存在
創建指定的DEST同名目錄,復制SRC目錄中所有內容至新目錄
復制目錄到目錄
在DEST中新建與SRC同名目錄,且復制SRC中內容到新目錄
如目錄已存在,默認root賬號會提示覆蓋
PS:如復制目錄,必須加-r選項

   cp -i       覆蓋前提示
   cp -n      不覆蓋,必須在-i後面才有效
   cp -a      歸檔,相當於-dR --preserv=all
   cp -d      --no-dereference --preserv=links 不復制源文件,只復制鏈接
   --preserv[=ATTR_LIST]
          mode:權限
          ownership:屬主屬組
          timestamp:
          links
          xattr
          context
          all
   cp -p     等同於--preserv=mode,ownership,timestamp
   cp -v      --verbose過程可視
   cp -f      --force   強制
   cp -u      --update 只復制源比目標更新文件或目標不存在的文件
   cp -=backup=numberd      如目標存在,覆蓋前先備份加且加數字後綴

mv 移動和重命名文件
mv,用法規則和cp類似
mv -i 覆蓋前提示
mv -f 強制

rm 刪除
rm file1 刪除file1
rm -i file1 刪除前詢問
rm -f 強制刪除,不再詢問
rm --no-preserve-root 刪除/
如:
rm -rf / --no-preserve-root
自殺,刪除根目錄下-所有文件,史上最危險命令

tree 顯示目錄樹
tree /etc 顯示指定目錄樹
tree -d 只顯示目錄
tree -L level, 指定顯示的層級數
tree -P pattern 只顯示由指定pattern匹配到的路徑
tree -p 顯示tree的時候顯示文件類型(-,d,b..)

mkdir 創建目錄
mkdir /root/f1 在root下創空目錄f1
mkdir -p /root/go1/go2/go3/go 遞歸創建,即父目錄不存在則自動創建
mkdir -v 是過程可視
mkdir -m MODE 創建目錄時直接指定權限

rmdir 刪除空目錄
rmdir /root/f1 刪除root下空目錄f1
rmdir -p /root/go1/go1/go2/go3/go
遞歸刪除,如刪除目標之後父目錄空,則一起刪除
rmdir -v 顯示詳細信息,是過程可見

索引節點:
一個文件系統維護了一個索引節點的數組,每個文件或目錄都與索引節點數組
中的唯一一個元素對應,系統給每個索引節點分配了一個號碼,也就是該節點
在數組中的索引號,索引節點號。

   Linux為每個文件分配一個inode(索引節點編號),可以將inode簡單理解成
   一個指針,它永遠指向本文件的具體存儲位置,系統是通過inode來定位每一
   個文件。
   inode(index node)表中包含文件系統所有文件列表
   一個節點(索引節點)是在一個表項,包含有關文件的信息(元數據),包括
          文件類型,權限,uid,gid
          鏈接數(指向這個文件名路徑名稱個數)
          該文件的大小和不同的時間戳
          指向磁盤上文件的數據塊指針
          有關文件的其他數據
   文件名可以隨時更改,但是索引節點對文件是唯一的,並且隨文件的存在而存在

目錄:
文件系統引用一個文件是用inode號
人是通過文件名來引用一個文件
一個目錄的數據部分記錄的信息為:
目錄下文件名和文件inode號之間的映射

cp和inode:
在cp的命令執行時:
分配一個空閑的inode號,在inode表中生成新條目(inode編號)
在目錄中創建一個目錄項(新映射),將名稱與inode編號關聯
拷貝數據生成新的文件

rm和inode
rm命令執行過程:
鏈接數遞減,從而釋放的inode號可以被重用
把數據塊放到空閑列表中
刪除目錄項
數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋

mv和inode
如果mv命令的目標和源在相同的文件系統,作為mv命令
用新的文件名創建對應新的目錄項(映射)
刪除舊目錄條目對應的舊的文件名
不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動。
如果目標和源在一個不同的文件系統,mv相當於cp和rm

硬鏈接:
創建硬鏈接會增加額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每個目錄引用相同的inode號
創建時鏈接數遞增
刪除文件時:
rm命令遞減計數的鏈接數
文件要存在,至少有一個鏈接數
當鏈接數為零時,該文件被刪除
不能跨越驅動器或分區
語法:
ln filename [linkname]
如 ln /root/f3 /root/Music/fgo1

符號(軟)鏈接
一個符號鏈接指向另一個文件
ls -l 顯示鏈接的名稱和引用的文件
一個符號鏈接的內容是它引用文件的名稱
可以對目錄進行
可以跨分區
指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;不增加或減少
目標文件inode的引用計數
語法:
ln -s filename [linkname]
ln -s /data/f5 /root/f5_link
PS:如使用刪除命令rm刪除軟鏈接
rm -rf /root/f5_link
此命令如最後不加/,會刪除軟鏈接本身,
如使用tab鍵補全命令,後面默認會帶/,此時刪除的將會是目f5下所有文件

   readlink /root/f5_link          顯示軟鏈接指向的源文件

確認文件內容
file f1 顯示f1的文件類型
file -b f1 累出文件辨識結果時,不顯示文件名稱
file -f filelist 列出文件filelist中所有文件名的文件類型
file -F , 34 使用指定分隔符號(,)替換輸出結果文件名後默認
的:分隔符
flie -L 查看對應軟鏈接對應文件的文件類型

筆記整理完成時間:2018年4月1日15:24:49

第三章文件管理學習筆記