一、文件系統概述
1.文件和目錄被組織成一個單根倒置樹結構;
2.文件系統從根目錄下開始,用“/”表示;
3.名稱是大小寫敏感;
4.以.開頭的文件爲隱藏文件;
5.路徑分隔的/;
6.文件有兩位數據:
6.1:元數據(文件名、大小屬性等):metadata;
數據:data;
二、文件名命名規則
1.包括路徑在內文件名稱最長4095個字節,用/分隔的路徑不能超過255個字節;
2.文件名除了/以外的任意字符,但不建議使用特殊字符,有些字符需要引號來引用它們;
3.標準Linux文件系統(如ext4),文件名稱大小寫敏感。例如:MAIL,Mail,mail,mAil;
三、文件系統結構
1./boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)都存放與此目錄; 2./bin:供所有用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序(核心的二進制程序); 3./sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序; 4./lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules); 5./lib64:專用於x86_64系統上的輔助共享庫文件存放位置; 6./etc/:配置文件目錄; 7./home/USERNAME:普通用戶家目錄; 8./root:管理員的家目錄; 9./media:便捷式移動設備掛載點; 10./mnt:臨時文件系統掛載點; 11./dev:設備文件及特殊文件存儲位置; b:block device,隨機訪問; c:character device,線性訪問; 12./opt:第三方應用程序的安裝位置; 13./srv:系統上運行的服務用到的數據; 14./tmp:臨時文件存儲位置; 15./usr:Unix操作系統軟件資源存放位置; bin:保證系統擁有完整功能而提供的應用程序; sbin: lib:32位使用; lib64:只存在64位系統 include:C程序的頭文件 share:結構化獨立的數據,例如doc,man等; local:第三方應用程序的安裝位置; bin,sbin,lib,lib64,etc,share 16./var:經常發生變化的文件的存放位置 cache:應用程序緩存數據目錄; lib:應用程序狀態信息數據; local:專用於爲/usr/local下的應用程序存儲可變數據; lock:鎖文件; log:日誌目錄及文件; opt:專用於爲/opt下的應用程序存儲可變數據; run:運行中的進程相關的數據,通常用於存儲進程的pid文件; spool:應用程序的數據池; tmp:保存系統兩次重啓之間產生的臨時數據; 17./proc:用於輸出內核與進程信息相關的虛擬文件系統; 18./sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統; 19./selinux:Linux相關的安全策略等信息的存儲位置;
四、Linux上的應用程序的組成部分
1.二進制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin;
2.庫文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64;
3.配置文件:/etc,/etc/DIRECTORY,/usr/local/etc;
4.幫助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc;
五、Linux下文件類型
1.-(f):普通文件; 2.d:目錄文件; 3.b:塊設備; 4.c:字符設備 5.l:符號鏈接文件; 6.p:管道文件 7:s:套接字文件,socket
六、pwd命令
pwd:顯示當前工作目錄
-P:顯示出真實的路徑,而非使用鏈接的路徑;
七、絕對路徑和相對路徑
絕對路徑:
1.以/開始;
2.完整的文件位置路徑;
3.可用於任何想指定一個文件名的時候;
相對路徑:
1.不以/開始;
2.指定相對與當前工作目錄或某目錄的位置;
3.可以作爲一個簡短的形式指定一個文件名;
八、cd命令
cd:改變工作目錄
1.cd ..:切換至父目錄;
2.cd或cd ~:切換當前用戶的主目錄;
3.cd ~USERNAME:切換到指定用戶的家目錄;
4.cd -:在上一個目錄和當前目錄之間來回切換;
九、ls命令
ls:列出當前目錄的內容或指定目錄;
語法:ls [OPTIONS] [FILE_OR_DIREVTORY]
OPTIONS:
-a:- -all列出所有文件,包括隱藏文件;
-l:- -long長格式顯示文件信息,(文件的原數據信息);
顯示結果如下:
drwxr-xr-x. 2 root root 25 Jul 24 02:43 /testdir/
其中:
最左側第一位表示文件類型,前面有講過,d表示目錄;後面的9位分別表示:
1.訪問權限,perm;
2.數字2:表示文件被硬鏈接的次數;
3.左root:文件的所有者,owner;
4.右root:文件的所屬組,group;
5.25:文件的大小
6.Jul 24 02:43:文件最近一次被修改的時間
7./testdir/:目錄名
-R:目錄遞歸通過(連同子目錄的內容一起列出來,子目錄下文件一起列出來);
-d:僅列出目錄本身(與-l選項合用);
-1(數字):目錄或文件分行顯示;
-S:按從大到小排序(文件容量大小排序);
-u:配合-t選項,顯示並按atime從新到舊排序;
-U:不排序,按目錄存放順序顯示;
-h:將文件容量以人類較易讀的方式(GB,KB)列出來;
-r:將排序結果反向輸出;
-i:列出inode號;
十、stat命令
OPTIONS:
-f:顯示文件系統狀態而非文件狀態;
-t:以簡潔的方式輸出信息;
三個時間戳:
access time:訪問時間,atime,讀取文件內容;
modify time:修改時間,mtime,改變文件內容(數據),ls -l顯示的就是mtime時間;
change time:改變時間,ctime,元數據發生改變;
注:atime發生改變的情況:
1.文件atime已經是一天前的了;
2.文件的atime要比mtime要早,兩者必須滿足,atime纔會發生改變;
規律:
1.ctime改變,mtime不變,atime不變;
2.mtime改變,ctime改變,atime不變;
3.atime改變,ctime不變,mtime不變;
十一、文件通配符(man 7 glob)
1.*:匹配0個或多個字符;
2.?:匹配任何單個字符;
3.[0-9]:匹配任意單個數字
4.[a-z]:匹配任意單個字母(不區分大小寫)
5.[A-Z]:匹配任意單個字符
6.[wzc]:匹配列表中的任何一個字符;
7.[^wzc]:匹配列表中的所有字符以外的字符;
字符集表示方法:
[:digit:]:任意數字,相當0-9;
[:lower:]:任意小寫字母;
[:upper:]:任意大寫字母;
[:alpha:]:任意大小寫字母(不區分大小寫);
[:alnum:]:任意數字和字母;
[:blank:]:水平空白字符;
[:space:]:水平或垂直空白字符;
[:punct:]:標點符號;
[:print:]:可打印字符;
[:cntrl:]:控制(非打印)字符;
[:graph:]:圖形字符;
[:xdigit:]:十六進制字符;
十二、touch命令
touch:創建空文件和刷新時間
語法:touch [OPTION]...FILE...
OPTION:
-a:僅改變atime;
-m:僅改變mtime;
-t:[[CC]yy]MMDDhhmm[.ss],修改制定時間戳爲某時間;
-c:如果文件存在,則不創建;
十三、cp命令
cp:複製文件和目錄 語法: cp [OPTION]...[-T] SOURCE DEST;; cp [OPTION]...SOURCE...DIRECTORY; cp [OPTION]...-t DIRECTORY SOURCE... 簡要講: cp SRC...DEST
1.如果SRC是文件:
(1)如果目標不存在:新建DEST,並將SRC中的內容填充至DEST中;
eg: [root@centos7 ~]# ls /testdir/ [root@centos7 ~]# cp /etc/issue /testdir/aaa [root@centos7 ~]# ll !* ll /etc/issue /testdir/aaa -rw-r--r--. 1 root root 50 Jul 14 18:17 /etc/issue -rw-r--r--. 1 root root 50 Jul 26 10:33 /testdir/aaa
(2)如果目標存在:
2.1.如果DEST是文件:將SRC中的內容覆蓋至DEST中;(可以使用-i選項來提醒用戶是否覆蓋)
eg: [root@centos7 ~]# cp /etc/issue /testdir/aaa cp: overwrite ‘/testdir/aaa’? y
2.2.如果DEST是目錄:在DEST下新建與源文件同名的文件,並將SRC中的內容填充至新文件中;
eg: [root@centos7 ~]# cp /etc/fstab /testdir/ [root@centos7 ~]# ll !* ll /etc/fstab /testdir/ -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab /testdir/: total 8 -rw-r--r--. 1 root root 50 Jul 26 10:39 aaa -rw-r--r--. 1 root root 595 Jul 26 11:01 fstab
(3)如果SRC是多個文件:
3.1.如果DEST不存在:報錯;
eg: [root@centos7 ~]# ls /testdir/ aaa fstab [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/xxx cp: target ‘/testdir/xxx’ is not a directory
3.2.如果DEST存在並且是文件:報錯;
eg: [root@centos7 ~]# ls /testdir/ aaa fstab [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/fstab cp: target ‘/testdir/fstab’ is not a directory
3.3.如果DEST存在並且是目錄:在DEST下新建與原文件同名的文件,並將原文件內容複製進新文件中;
eg: [root@centos7 ~]# ls -d /testdir/ /testdir/ [root@centos7 ~]# cp /etc/issue /etc/hostname /testdir/ [root@centos7 ~]# ls -l /testdir/ total 16 -rw-r--r--. 1 root root 50 Jul 26 10:39 aaa -rw-r--r--. 1 root root 595 Jul 26 11:01 fstab -rw-r--r--. 1 root root 22 Jul 26 11:16 hostname -rw-r--r--. 1 root root 50 Jul 26 11:16 issue
2.如果SRC是目錄:則必須使用-r選項
(1)如果DEST不存在,則先創建DEST目錄,並將SRC中的所有內容複製到DEST目錄中
eg: [root@centos7 ~]# cp -r /etc/sysconfig/ /testdir/xxx [root@centos7 ~]# ls -ld /etc/sysconfig/ /testdir/xxx drwxr-xr-x. 6 root root 4096 Jul 26 09:05 /etc/sysconfig/ drwxr-xr-x. 6 root root 4096 Jul 26 11:30 /testdir/xxx
(2)如果DEST存在,則其必須是目錄,否則報錯;先在DEST目錄下創建與SRC同名的目錄,並將SRC中的所有內容複製到DEST中;
eg: [root@centos7 ~]# cp -r /etc/sysconfig/ /testdir/xxx [root@centos7 ~]# ls -ld /etc/sysconfig/ /testdir/xxx/sysconfig/ drwxr-xr-x. 6 root root 4096 Jul 26 09:05 /etc/sysconfig/ drwxr-xr-x. 6 root root 4096 Jul 26 11:34 /testdir/xxx/sysconfig/
圖片總結:
OPTION:
-i:交互式;
-r,-R:遞歸複製目錄及內部的所有內容;
-a:歸檔,相當於-dR - -preserv=all;
-d:不復制文件,只複製鏈接名 - -no-dereference - -preserv=link;
- -preserv=[ATTR_LIST]
mode:權限;
ownership:屬主屬組;
timestamp:
links:
xattr:
context:
all
-p:保持原有文件的屬性信息;等同於- -preserv=mode,ownership,timestamp;
-v:顯示過程;
-f:強制覆蓋;
eg: (-a選項例子,相當於保留文件原有屬性) [root@centos7 ~]# ls /testdir/ aaa fstab hostname issue xxx [root@centos7 ~]# cp /etc/fstab /testdir/f1 [root@centos7 ~]# ll !* ll /etc/fstab /testdir/f1 -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab -rw-r--r--. 1 root root 595 Jul 26 11:42 /testdir/f1 [root@centos7 ~]# cp -a /etc/fstab /testdir/f11 [root@centos7 ~]# ll !* ll -a /etc/fstab /testdir/f11 -rw-r--r--. 1 root root 595 Jul 11 19:59 /etc/fstab -rw-r--r--. 1 root root 595 Jul 11 19:59 /testdir/f11
eg:(-d選項例子) [root@centos7 ~]# cp -d /etc/redhat-release /testdir/www [root@centos7 ~]# ll !* ll -d /etc/redhat-release /testdir/www lrwxrwxrwx. 1 root root 14 Jul 11 20:00 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root 14 Jul 26 11:58 /testdir/www -> centos-release [root@centos7 ~]# touch /testdir/centos-release [root@centos7 ~]# ll -d /etc/redhat-release /testdir/www lrwxrwxrwx. 1 root root 14 Jul 11 20:00 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root 14 Jul 26 11:58 /testdir/www -> centos-release
十四、alias命令
1.顯示當前shell進程所有可用的命令別名:#alias
2.定義別名NAME,其相當執行命令VALUE:#alias NAME='VALUE'
3.在命令行定義的別名,僅對當前shell進程有效;
4.要想永久有效,要定義在配置文件中:
僅對當前用戶有效:~/.bashrc;
對所有用戶有效:/etc/bashrc;
5.編輯配置文件給出的新配置不會立即生效;
6.bash進程重新讀取配置文件:
source /path/to/config_file
或者./path/to/config_file
7. 撤銷別名:unalias name
8.如果別名同原命令相同,如果要使用原命令,可以使用以下3種方法:
8.1.“\COMMAND”;
8.2.'COMMAND';
8.3./PATH/COMMAND 外部命令,例如:lis,/bin/ls;
十五、mv命令
mv:移動和重命名文件
語法:
mv [OPTION]...[-T] SOURCE DEST;
mv [OPTION]...SOURCE...DIRECTORY;
mv [OPTION]... -t DIRECTORY SOURCE...
OPTION:
-i:交互式;
-f:強制
十六、rm命令
rm:刪除
語法:rm [OPTION]...FILE...
OPTION:
-i:交互式;
-f:強制刪除;
-r:遞歸;
十七、tree命令
tree:顯示目錄樹
OPTION:
-d:只顯示目錄;
-L level:指定顯示的層級目錄;
-P pattern:只顯示由指定pattern匹配到的路徑;
十八、mkdir命令
mkdir:創建目錄
語法:mkdir [OPTION]...DIRECTORY...
OPTION:
-p:表示存在時不返回報錯,不存在時,自動創建所需的各目錄;
-v:顯示其過程詳細信息;
-m Mode:創建目錄時直接指定權限
十九、rmdir命令
rmdir:刪除空目錄
語法:rmdir [OPTION]...DIRECTORY..
OPTION:
-p:遞歸刪除父空目錄;
-v:顯示執行過程;
二十、索引節點
inode叫做索引節點號,這是Linux文件系統管理文件的方式。在建立文件系統時,會建立一個索引節點表,裏面包含一定數量的索引節點。每當建立一個文件時,就會爲他分配一個索引節點號,相當於文件的地址。
1.inode表中包含文件系統所有文件列表;
2.inode包含文件的元數據信息:
文件類型,選項,UID,GID;
鏈接數(指向這個文件名路徑名稱個數);
該文件的大小和不同的時間戳;
指向磁盤上文件的數據塊指針;
有關文件的其他數據;
總之,除了文件名之外的所有文件信息,都存在inode中;
二十一、硬鏈接和軟鏈接
硬鏈接
1. 硬鏈接是通過索引節點進行的鏈接。在Linux中,多個文件指向同一個索引節點是允許的,像這樣的鏈接就是硬鏈接。硬鏈接只能在同一文件系統中的文件之間進行鏈接,不能對目錄進行創建。如果刪除硬鏈接對應的源文件,則硬鏈接文件仍然存在,而且保存了原有的內容,這樣可以起到防止因爲誤操作而錯誤刪除文件的作用。由於硬鏈接是有着相同inode 號僅文件名不同的文件,因此,刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。
2.創建硬鏈接時鏈接數會遞增;
3.刪除文件名時,就會使得inode節點中的鏈接數減1,。當鏈接數爲0時,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域;
4.鏈接數=文件名字的數量
語法:
ln filename [link name]
eg1:(創建f11硬鏈接,當給原文件f1增加文件內容時,硬鏈接f11也會相應增加)
[root@centos7 ~] # ln f1 dir./f11
[root@centos7 ~] # ls -l f1 dir./f11
-row-r--r--. 2 root root 0 Jul26 09:09 dir/f11
-rw-r--r--. 2 root 0 Jul 2609:09 f1
[root@centos7 ~]# echo xxx>>f1
[root@centos7 ~]# ls -l f1 dir/f11
-rw-r--r--. 2 root root 4 Jul26 09:12 dir/f11
-rw-r--r--. 2 root root 4 Jul26 09:12 f1
eg2:(硬鏈接不能跨分區)
[root@centos7 ~]# ln f1/testdir/f11
ln: failed to create hard link‘/testdir/f11’ => ‘f1’: Invalid cross-device link
eg3:(不能對目錄鏈接)
[root@centos7 ~]# pwd
/root
[root@centos7 ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Public
Desktop Downloads Music Templates
dir f1 Pictures Videos
[root@centos7 ~]# ln dir/ dir1
ln: ‘dir/’: hard link notallowed for directory
軟鏈接(符號鏈接)
1. 軟鏈接(也叫符號鏈接)與硬鏈接不同,文件用戶數據塊中存放的內容是另一文件的路徑名的指向。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接可對文件或目錄創建。
2. 軟鏈接主要應用於以下兩個方面:一是方便管理,例如可以把一個複雜路徑下的文件鏈接到一個簡單路徑下方便用戶訪問;另一方面就是解決文件系統磁盤空間不足的情況。例如某個文件文件系統空間已經用完了,但是現在必須在該文件系統下創建一個新的目錄並存儲大量的文件,那麼可以把另一個剩餘空間較多的文件系統中的目錄鏈接到該文件系統中,這樣就可以很好的解決空間不足問題。刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接就變成了死鏈接。
3.鏈接數不會增加;
4.軟連接文件大小看文件路徑字符數,例如,f2,文件大小爲2;
語法:
ln -s filename [linkname]
eg1:(鏈接數不會增加)
[root@centos7 ~]# ln -s f2f2link
[root@centos7 ~]# ls -l f2f2link
-rw-r--r--. 1 root root 0 Jul26 09:23 f2
lrwxrwxrwx. 1 root root 2 Jul26 09:24 f2link -> f2
eg2: (軟鏈接能跨分區)
[root@centos7 ~]# ln -s/root/initial-setup-ks.cfg /testdir/aaa
[root@centos7 testdir]# ll/testdir/aaa
lrwxrwxrwx. 1 root root 26 Jul26 09:29 /testdir/aaa -> /root/initial-setup-ks.cfg
eg3:(能對目錄鏈接)
[root@centos7 ~]# pwd
/root
[root@centos7 ~]# ls
anaconda-ks.cfg Documents f2 Music Templates
Downloads f2link Pictures Videos
dir f1 initial-setup-ks.cfg Public
[root@centos7 ~]# ln -s dir/dir1
[root@centos7 ~]# ls -l dir1
lrwxrwxrwx. 1 root root 4 Jul26 09:33 dir1 -> dir/
eg4:
[root@centos7 ~]# ln -s../root/f1 /testdir/f11
[root@centos7 ~]# ls -l/testdir/f11
lrwxrwxrwx. 1 root root 10 Jul26 09:36 /testdir/f11 -> ../root/f1
注:ln -s+原始文件的絕對路徑或相對路徑(是相對於軟鏈接的文件路徑)+軟鏈接文件
eg5:(鏈接文件不寫路徑就是相對於當前所在目錄的路徑)
[root@centos7 testdir]# pwd
/testdir
[root@centos7 testdir]# ln -s/etc/issue is
[root@centos7 testdir]# ls -l is/etc/issue
-rw-r--r--. 1 root root 50 Jul14 18:17 /etc/issue
lrwxrwxrwx. 1 root root 10 Jul26 09:44 is -> /etc/issue
硬鏈接和軟鏈接區別:
1. 硬鏈接是在目錄文件創建了node節點指針,文件的元數據和文件數據本身沒有變化,刪除文件需要把文件的所有硬鏈接都刪除,文件纔算刪除
2. 軟鏈接本身是一個類似文本文件,自身存放指向文件的目錄信息,所指向的文件一旦移除,軟鏈接將失效。
3.硬鏈接不能跨分區或設備;不能對目錄鏈接;
4.軟鏈接可以跨分區,能對目錄鏈接;
二十二、hexdump命令
hexdump:一般用來查看“二進制”文件的十六進制編碼,但實際上它能查看任何文件,而不只限於二進制文件。
語法:hexdump [OPTION] file [...]
OPTION:
-n:length 只格式化輸入文件的前length個字節。
-C:輸出規範的十六進制和ASCII碼。
-b:單字節八進制顯示。
-c:單字節字符顯示。
-d:雙字節十進制顯示。
-o:雙字節八進制顯示。
-x:雙字節十六進制顯示。
-s:從偏移量開始輸出。
-e:指定格式字符串,格式字符串包含在一對單引號中,格式字符串形如:'a/b"format1" "format2"'。
二十三、生成隨機數
echo $[$RANDOM%80]:%的意思表示取模,在0-80之間隨機生成任意數字;
二十四、Windows記事本格式轉換成Linux的方法
dos2unix filename(例如,f1.txt),dos2unix工具系統默認沒安裝,安裝後即可使用;
二十五、cp和inode
在cp的命令:
1.分配一個空閒的inode號,在inode表中生成新條目;
2.在目錄中創建一個目錄項,將名稱與inode編號關聯;
3.拷貝數據生成新的文件;
二十六、rm和inode
在rm的命令:
1.鏈接數遞減,當鏈接數爲0時,從而釋放的inode號可以被重用;
2.把數據塊放在文件裏表中;
3.刪除目錄項;
4.數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋;
二十七、mv和inode
如果mv命令的目標和源在相同的文件系統,作爲mv 命令:
1.用新的文件名創建對應新的目錄項
2.刪除舊目錄條目對應的舊的文件名
3.不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動!
如果目標和源在一個不同的文件系統, mv相當於cp和rm
二十八、file命令
file:查看文件類型
語法:file[OPTION] <filename>...
OPTION:
-b列出文件辨識結果時,不顯示文件名稱;
-c詳細顯示指令執行過程,便於排錯或分析程序執行;
-f列出文件中文件名的文件類型;
-F使用指定分隔符號替換輸出文件名後默認的”:”分隔符;
-i輸出mime類型的字符串;
-L查看對應軟鏈接對應文件的文件類型;
-z嘗試去解讀壓縮文件的內容;
--help顯示命令在線幫助;