Linux運維學習歷程-第五天-Linux文件系統與管理
本章內容
文件系統
文件和目錄被組織成一個單根倒置樹結構從根目錄下開始,用“/” 表示根文件系統(rootfs) :root filesystem,用路徑分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)
文件系統分層結構:LSB Linux Standard Base
文件系統結構
/boot :引導文件存放目錄,內核文件(vmlinuz) 、引導加載器(bootloader, grub) 都存放于此目錄
/bin :供所有用戶使用的基本命令;不能關聯至獨立分區,OS 啟動即會用到的程序
/sbin :管理類的基本命令;不能關聯至獨立分區,OS 啟動即會用到的程序
/lib :啟動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64 :專用于x86_64 系統上的輔助共享庫文件存放位置
/etc :配置文件目錄
/home/ USERNAME :普通用戶家目錄
/root :管理員的家目錄
/media :便攜式移動設備掛載點
/mnt :臨時文件系統掛載點
/dev :設備文件及特殊文件存儲位置
b: block device ,隨機訪問, 有緩存、物理
c: character device ,線性訪問,無緩存、邏輯
/opt :第三方應用程序的安裝位置
/srv :系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
空設備:/dev/null
/usr: universal shared, read-only data
bin: 保證系統擁有完整功能而提供的應用程序
sbin:
lib :32 位使用
lib64 :只存在64 位系統
include: C 程序的頭文件(header files)
share :結構化獨立的數據,例如doc, man等 等
local :第三方應用程序的安裝位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local :專用于為/usr/local 下的應用程序存儲可變數據;
lock: 鎖文件
log: 日志目錄及文件
opt: 專用于為/opt 下的應用程序存儲可變數據;
run: 運行中的進程相關數據;通常用于存儲進程pid 文件
spool: 應用程序數據池
tmp: 保存系統兩次重啟之間產生的臨時數據
/proc: 用于輸出內核與進程信息相關的虛擬文件系統
/sys :用于輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux: security enhanced Linux ,selinux 相關的安全策略等信息的存儲位置
/misc centos6中存在 可用/misc/cd掛載光驅
/net 涉及到網絡服務
RHEL7 目錄變化
/bin 和 和 /usr/bin
/sbin 和 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 和 /usr/lib64
文件有兩類數據:
元數據:metadata 包括大小、時間、所屬主、組、權限等
數據:data 文件的內容
文件名規則
除了斜杠和NUL, 所有字符都有效. 但使用特殊字符的目錄名和文件不推薦使用,有些字符需要用引號來引用它們。
包括路徑在內文件名稱最長4095 個字節,用/ 分隔的路徑不能超過255 個字節。
標準Linux 文件系統(如ext4 ),文件名稱大小寫敏感。例如:MAIL, Mail, mail, mAiL,但是linxu在FAT文件系統下大小寫不敏感,例如掛載的U盤(FAT文件系統)所以說linux大小寫敏感是基于文件系統的
Linux 下的文件類型
以文件權限開頭區分
– :普通文件 灰色 文本、二進制文件等
可執行文件 綠色 .ELF等
壓縮文件 紅色 .tar等
d: 目錄文件 深藍色
b: 塊設備 隨機訪問 亮黃色 有緩存 物理設備
c: 字符設備 順序訪問 亮黃色 無緩存 邏輯設備
l: 符號鏈接文件 淺藍色
p: 管道文件pipe 黃色
s: 套接字文件socket 粉色 用于進程間通訊
Linux 上的應用程序的組成部分
二進制程序:/bin, /sbin, /usr/bin, /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
顯示當前工作目錄
每個shell 和系統進程都有一個當前的工作目錄CWD:current work directory
顯示當前shell CWD 的絕對路徑
#pwd: printing working directory
絕對和相對路徑名
絕對路徑:以正斜杠開始,完整的文件的位置路徑,可用于任何想指定一個文件名的時候
相對路徑:不以斜線,開始指定相對當前的工作目錄位置,可以作為一個簡短的形式指定一個文件名
更改目錄
cd:改變當前shell工作目錄
cd [-L|[-P [-e]]] [dir]
-p 如果要切換到的目標目錄是一個符號連接,直接切換到符號連接指向的目標目錄
-L 如果要切換的目標目錄是一個符號的連接,直接切換到字符連接名代表的目錄,而非符號連接所指向的目標目錄。 – 當僅實用"-"一個選項時,當前工作目錄將被切換到環境變量"OLDPWD"所表示的目錄。
為絕對或相對路徑:
cd /home/joshua/work
cd project/docs
cd 進入用戶主目錄;
cd ~ 進入用戶主目錄;
cd – 返回進入此目錄之前所在的目錄;
cd .. 返回上級目錄(若當前目錄為“/“,則執行完后還在“/";".."為上級目錄的意思);
cd ../.. 返回上兩級目錄;
cd !$ 把上個命令的參數作為cd參數使用。
相關的環境變量:
PWD :保存了當前目錄路徑;
OLDPWD :上一次所在目錄路徑;
列出目錄內容
列出當前目錄的內容或指定目錄
用法:
ls [options] [files_or_dirs]
Example:
ls -a 包含隱藏文件
ls -l 顯示額外的信息
ls -R 目錄遞歸通過
ls -ld 目錄和符號鏈接信息
ls -1 文件分行顯示
ls –S 按從大到小排序
ls –u 配合-t 選項,顯示并按atime 從新到舊排序
ls –U 不排序按目錄存放順序顯示
glob文件通配符
* 匹配零個或多個字符
? 匹配任何單個字符
~ 當前用戶家目錄
~username 用戶家目錄
~+ 當前工作目錄
~- 前一個工作目錄
[0-9] 匹配一個數字范圍
[1-3] 1到3 [^1a3]或非1或非a或非3
[a-z] 大寫和小寫字母
[A-Z] 大寫字母
[wxc] 匹配列表中的任何的一個字符[^wxc] 匹配列表中的所有字符以外的字符
預定義的字符類:#man 7 glob
[:digit:] :任意數字,相當于0-9
[:lower:] :任意小寫字母
[:upper:]: 任意大寫字母
[:alpha:]: 任意大小寫字母
[:alnum:] :任意數字 或 字母
[:blank:] :水平空白字符
[:space:] :水平或垂直空白字符
[:punct:]: : 標點符號
[:print:] :可打印字符
[:cntrl:] :控制(非打印)字符
[:graph:] :圖形字符
[:xdigit:]:十六進制字符
查看文件狀態
stat
文件:metadata, data
三個時間戳:
access time:訪問時間,atime,讀取文件內容 因為relattime的原因:atime>一天或atime<mtime時更新
modify time: 修改時間, mtime,改變文件內容(數據)
change time: 改變時間, ctime,元數據發生改變
touch 命令:創建空文件和刷新時間
touch [OPTION]… FILE…
-a: 變 僅改變 atime
-m: 變 僅改變 mtime
-t :STAMP:[[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存在,則不予創建
復制文件和目錄cp
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
cp SRC DEST
SRC 是文件:
如果目標不存在:新建DEST ,并將SRC 中內容填充至DEST中 實質是:復制并改名
如果目標存在:
如果DEST 是文件:將SRC 中的內容覆蓋至DEST中;基于安全,建議為cp 命令使用-i 選項
如果DEST 是目錄:在DEST下新建與原文件同名的文件,并將SRC中內容填充至新文件中
cp SRC… DEST
SRC… :多個文件
DEST 必須存在,且為目錄,其它情形均會出錯;
cp SRC DEST
SRC是目錄:此時使用選項:-r
如果DEST 不存在:則創建指定目錄,復制SRC目錄中所有文件至DEST中;
如果DEST存在:
如果DEST是文件:報錯
如果DEST目錄:在DEST下新建與原目錄同名的目錄,并將SRC中內容復制至新目錄中
如果DEST目錄下的內容和復制目錄內的相同,則會連同復制目錄本身也復制過來作為DEST目錄的子目錄,如果再次復制則會產生覆蓋此子目錄的操作
-a, –archive 等于-dR –preserve=all
–backup[=CONTROL 為每個已存在的目標文件創建備份
-b 類似–backup 但不接受參數
–copy-contents 在遞歸處理是復制特殊文件內容
-d 等于–no-dereference –preserve=links
-f, –force 如果目標文件無法打開則將其移除并重試(當 -n 選項
存在時則不需再選此項)
-i, –interactive 覆蓋前詢問(使前面的 -n 選項失效)
-H 跟隨源文件中的命令行符號鏈接
-l, –link 鏈接文件而不復制
-L, –dereference 總是跟隨符號鏈接
-n, –no-clobber 不要覆蓋已存在的文件(使前面的 -i 選項失效)
-P, –no-dereference 不跟隨源文件中的符號鏈接
-p 等于–preserve=模式,所有權,時間戳
–preserve[=屬性列表 保持指定的屬性(默認:模式,所有權,時間戳),如果可能保持附加屬性:環境、鏈接、xattr 等
-c same as –preserve=context
–sno-preserve=屬性列表 不保留指定的文件屬性
–parents 復制前在目標目錄創建來源文件路徑中的所有目錄
-R, -r, –recursive 遞歸復制目錄及其子目錄內的所有內容
–reflink[=WHEN] 控制克隆/CoW 副本。請查看下面的內如。
–remove-destination 嘗試打開目標文件前先刪除已存在的目的地
文件 (相對于 –force 選項)
–sparse=WHEN 控制創建稀疏文件的方式
–strip-trailing-slashes 刪除參數中所有源文件/目錄末端的斜杠
-s, –symbolic-link 只創建符號鏈接而不復制文件
-S, –suffix=后綴 自行指定備份文件的后綴
-t, –target-directory=目錄 將所有參數指定的源文件/目錄復制至目標目錄
-T, –no-target-directory 將目標目錄視作普通文件
命令別名
顯示當前shell 進程所有可用的命令別名
#alias
定義別名NAME ,其相當于執行命令VALUE; ;
#alias NAME='VALUE'
在命令行中定義的別名,僅對當前shell 進程有效
如果想永久有效,要定義在配置文件中
僅對當前用戶:~/.bashrc
對所有用戶有效:/etc/bashrc
編輯配置給出的新配置不會立即生效;
bash 進程重新讀取配置文件:
source /path/to/config_file
. /path/to/config_file
撤消別名:unalias
unalias [-a] name [name …]
如果別名同原命令同名,如果要執行原命令,可使用
“\COMMAND”
’COMMAND’
/PATH/COMMAND 絕對路徑
mv:移動(重命名)文件
source表示源文件或目錄,target表示目標文件或目錄。
mv命令可以用來將源文件移至一個目標文件中,或將一組文件移至一個目標目錄中。
源文件被移至目標文件有兩種不同的結果:
1、如果目標文件是到某一目錄文件的路徑,源文件會被移到此目錄下,且文件名不變。
2、如果目標文件不是目錄文件,則源文件名(只能有一個)會變為此目標文件名,并覆蓋己存在的同名文件。
3、如果源文件和目標文件在同一個目錄下,mv的作用就是改文件名。當目標文件是目錄文件時,源文件或目錄參數可以有多個,則所有的源文件都會被移至目標文件中。所有移到該目錄下的文件都將保留以前的文件名。 注意事項:mv與cp的結果不同,mv好像文件“搬家”,文件個數并未增加。而cp對文件進行復制,文件個數增加了。
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
長選項必須使用的參數對于短選項時也是必需使用的。
–backup[=CONTROL] 為每個已存在的目標文件創建備份
-b 類似–backup 但不接受參數
-f, –force 覆蓋前不詢問
-i, –interactive 覆蓋前詢問
-n, –no-clobber 不覆蓋已存在文件,如果您指定了-i、-f、-n 中的多個,僅最后一個生效。
–strip-trailing-slashes 去掉每個源文件參數尾部的斜線
-S, –suffix=SUFFIX 替換常用的備份文件后綴
-t, –target-directory=DIRECTORY 將所有參數指定的源文件或目錄
移動至 指定目錄
-T, –no-target-directory 將目標文件視作普通文件處理
-u, –update 只在源文件文件比目標文件新,或目標文件
不存在時才進行移動
-v, –verbose 詳細顯示進行的步驟
備份文件的后綴為"~",除非以–suffix選項或是SIMPLE_BACKUP_SUFFIX環境變量指定。版本控制的方式可通過–backup選項或VERSION_CONTROL 環境變量來選擇。以下是可用的變量值:
none, off 不進行備份(即使使用了–backup 選項)
numbered, t 備份文件加上數字進行排序
existing, nil 若有數字的備份文件已經存在則使用數字,否則使用普通方式備份
simple, never 永遠使用普通方式備份
rm:刪除文件或目錄
rm [OPTION]… FILE…
-f, –force 強制刪除。忽略不存在的文件,不提示確認
-d:直接把欲刪除的目錄的硬連接數據刪除成0,刪除該目錄
-i 在刪除前需要確認
-I 在刪除超過三個文件或者遞歸刪除前要求確認。此選項比-i 提
示內容更少,但同樣可以阻止大多數錯誤發生
–interactive[=WHEN] 根據指定的WHEN 進行確認提示:never,once (-I),
或者always (-i)。如果此參數不加WHEN 則總是提示
–one-file-system 遞歸刪除一個層級時,跳過所有不符合命令行參
數的文件系統上的文件
–no-preserve-roo 不特殊對待"/"
–preserve-root 不允許刪除"/"(默認)
-r, -R, –recursive 遞歸刪除目錄及其內容
-v, –verbose 詳細顯示進行的步驟
注意:
默認時,rm 不會刪除目錄。使用–recursive(-r 或-R)選項可刪除每個給定的目錄,以及其下所有的內容。
要刪除第一個字符為"-"的文件 (例如"-foo"),請使用以下方法之一:
rm — -foo
rm ./-foo
請注意,如果使用rm 來刪除文件,通常仍可以將該文件恢復原狀。如果想保證該文件的內容無法還原,請考慮使用shred。
對于鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。
注意:使用rm命令要格外小心。因為一旦刪除了一個文件,就無法再恢復它。所以在刪除文件之前,最好再看一下文件的內容,確定是否真要刪除。
rm命令可以用-i選項,這個選項在使用文件擴展名字符刪除多個文件時特別有用。使用這個選項,系統會要求你逐一確定是否要刪除。這時,必須輸入y并按Enter鍵,才能刪除文件。如果僅按Enter鍵或其他字符,文件不會被刪除。
目錄操作
tree默認系統中沒有安裝,需要手動安裝
tree 顯示目錄樹
-a 顯示所有文件和目錄。
-A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。
-C 在文件和目錄清單加上色彩,便于區分各種類型。
-d 顯示目錄名稱而非內容。
-D 列出文件或目錄的更改時間。
-f 在每個文件或目錄之前,顯示完整的相對路徑名稱。
-F 在執行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|"號。
-g 列出文件或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。
-i 不以階梯狀列出文件或目錄名稱。
-I 不顯示符合范本樣式的文件或目錄名稱。
-l 如遇到性質為符號連接的目錄,直接列出該連接所指向的原始目錄。
-L 層級顯示
-n 不在文件和目錄清單加上色彩。
-N 直接列出文件和目錄名稱,包括控制字符。
-p 列出權限標示。
-P 只顯示符合范本樣式的文件或目錄名稱。
-q 用"?"號取代控制字符,列出文件和目錄名稱。
-s 列出文件或目錄大小。
-t 用文件和目錄的更改時間排序。
-u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。
-x 將范圍局限在現行的文件系統中,若指定目錄下的某些子目錄,其存放于另一個文件系統上,則將該子目錄予以排除在尋找范圍外。
mkdir 創建目錄
長選項必須使用的參數對于短選項時也是必需使用的。
-m, –mode=模式 設置權限模式(類似chmod),而不是rwxrwxrwx 減umask
-p, –parents 需要時創建目標目錄的上層目錄,但即使這些目錄已存在也不當作錯誤處理
-v, –verbose 每次創建新目錄都顯示信息
-Z, –context=CTX 將每個創建的目錄的SELinux 安全環境設置為CTX
–version 顯示版本信息并退出
注意:該命令創建由dirname命名的目錄。如果在目錄名的前面沒有加任何路徑名,則在當前目錄下創建由dirname指定的目錄;如果給出了一個已經存在的路徑,將會在該目錄下創建一個指定的目錄。在創建目錄時,應保證新建的目錄與它所在目錄下的文件沒有重名。
rmdir 刪除空目錄
rmdir [OPTION]… DIRECTORY…
-p或–parents:刪除指定目錄后,若該目錄的上層目錄已變成空目錄,則將其一并刪除;
–ignore-fail-on-non-empty:此選項使rmdir命令忽略由于刪除非空目錄時導致的錯誤信息;
-v或-verboes:顯示命令的詳細執行過程;
–version:顯示命令的版本信息。
在Nautilus 中移動和復制
拖曳及放下
拖動:移動在同一文件系統,在不同的文件系統復制
拖動+ Ctrl鍵 鍵 :始終復制
拖動+ Alt鍵 鍵 :詢問是否復制,移動或創建符號鏈接(別名)
上下文菜單
右鍵單擊要重命名,剪切,復制或粘貼
索引節點
inode (index node )表中包含文件系統所有文件列表
一個節點(索引節點)是在一個表項,包含有關文件的信息
( 元數據 ),包括:
文件類型,權限,UID ,GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
有關文件的其他數據
同一分區下inode編號唯一,不同分區可以一樣,每個分區都有各自的分區表inode table
元數據:存放在 inode table
數據內容:存放在 數據block
指針占據4個字節空間
直接指針:12個 直接能找到低于12*4k數據
間接指針:指向一指針數據塊
一般inode表會占用文件系統磁盤空間的1%,一個目錄文件的內容就是一個該目錄項的列表
目錄
文件引用一個是 inode號
人是通過文件名來引用一個文件
一個目錄是目錄下的文件名和文件inode號之間的映射
cp 和inode
在 在 CP的 的 命令:
分配一個空閑的inode 號,在inode 表中生成新條目在目錄中創建一個目錄項,將名稱與inode 編號關聯,拷貝數據生成新的文件
rm和inode
rm命令:
鏈接數遞減,從而釋放的inode 號可以被重用,把數據塊放在空閑列表中,刪除目錄項,數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋。
mv 和inode
如果mv 命令的目標和源在相同的文件系統,作為mv
命令用新的文件名創建對應新的目錄項
刪除舊目錄條目對應的舊的文件名
不影響inode 表(除時間戳)或磁盤上的數據位置:沒有數據被移動!
如果目標和源在一個不同的文件系統, mv 相當于cp 和rm
硬鏈接(一個文件多個名字)
創建硬鏈接會增加額外的記錄項以引用文件
對應于同一文件系統上一個物理文件
每個目錄引用相同的inode號
創建時鏈接數遞增
注意:
硬連接不能跨分區;不能對目錄操作
centos6中 inode=2的都是分區的根
inode=1的都是虛擬目錄
centos7中 inode=128都是分區的根
刪除文件時:
rm 命令遞減計數的鏈接
文件要存在,至少有一個鏈接數
當鏈接數為零時,該文件被刪除
不能跨越驅動器或分區
語法 :
ln filename [linkname ]
符號(或軟)鏈接
一個符號鏈接指向另一個文件
ls – l的 的 顯示鏈接的名稱和引用的文件
一個符號鏈接的內容是它引用文件的名稱
可以對目錄進行
可以跨分區
指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;不增加或減少目標文件inode 的引用計數;
語法:
ln -s filename [linkname]
原始文件路徑 軟鏈接
軟鏈接文件:
路徑
原始文件相對路徑:相當于軟鏈接文件路徑,而不是相對于當前工作目錄
確定文件內容
文件可以包含多種類型的數據
檢查文文件類型,然后確定適當的開放命令或應用程序使用
file [options] <filename>…
Option:
-b 列出文件辨識結果時,不顯示文件名稱。
-c 詳細顯示指令執行過程,便于排錯或分析程序執行形
-f 列出文件中文件名的文件類型
-F 使用指定分隔符號替換輸出文件名后默認的”:” 分隔符
-i 輸出mime類型的字符串
-L 查看對應軟鏈接對應文件的文件類型
-z 嘗試去解讀壓縮文件的內容
–help顯示命令在線幫助
原創文章,作者:NameLess,如若轉載,請注明出處:http://www.www58058.com/28139
對命令的總結很好,如果能有一些小示例就更好了