1、Linux下的檔案類型
-:普通檔案
d: 目錄檔案
b: 塊裝置
c: 字元裝置
l: 符号連結檔案
p: 管道檔案pipe
s: 套接字檔案socket
CentOS 7目錄變化:
Centos7的如下目錄都變成了軟連接配接檔案了:
/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64
2、pwd指令
pwd -P | 顯示真實實體路徑 |
pwd -L | 顯示連結路徑(預設) |
-P、-L和不加任何參數的不同之處如下:

同理cd指令也有-P和-L選項,它們的使用和pwd的-P、-L一模一樣:
cd -P | 進入真實的實體路徑中。 |
cd -L | 如果目錄是軟連接配接,那麼-L進入的就是軟連接配接目錄,而不是真正的實體路徑。 |
舉例如下:
3、basename和dirname指令
basename | 擷取基名 |
dirname | 擷取目錄名 |
4、ls指令
ls -R | 目錄遞歸顯示,目錄裡面有什麼檔案,都會一一顯示出來。 |
ls -t | 按mtime排序 |
ls -S | 按從大到小排序顯示 |
ls -l --time=ctime file | ls -l預設顯示的是mtime,--time=ctime,使其顯示ctime |
5、檢視檔案/目錄的狀态
三個時間戳:
access time:通路時間,atime,讀取檔案内容
modify time: 修改時間, mtime,改變檔案内容(資料)
change time: 改變時間, ctime,中繼資料發生改變
stat指令可以檢視檔案的三個時間戳,如下:
6、檔案通配符
* 比對零個或多個字元
? 比對任何單個字元
~ 目前使用者家目錄
~mage 使用者mage家目錄
~+ 目前工作目錄
~- 前一個工作目錄
[0-9] 比對數字範圍
[a-z]:字母
[A-Z]:字母
[wang] 比對清單中的任何的一個字元
[^wang] 比對清單中的所有字元以外的字元
預定義的字元類:man 7 glob
- [:digit:]:任意數字,相當于0-9
- [:lower:]:任意小寫字母
- [:upper:]: 任意大寫字母
- [:alpha:]: 任意大小寫字母
- [:alnum:]:任意數字或字母
- [:blank:]:水準空白字元
- [:space:]:水準或垂直空白字元
- [:punct:]:标點符号
- [:print:]:可列印字元
- [:cntrl:]:控制(非列印)字元
- [:graph:]:圖形字元
- [:xdigit:]:十六進制字元
通配符練習:
1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的檔案或目錄
2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的檔案或目錄
3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄
4、顯示/etc/目錄下所有以rc開頭,并後面是0-6之間的數字,其它為任意字元的檔案或目錄
5、顯示/etc目錄下,所有以.d結尾的檔案或目錄
6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的檔案或目錄
7、隻顯示/root下的隐藏檔案和目錄
8、隻顯示/etc下的非隐藏目錄
7、touch,cp,mv和rm指令
touch file:需要注意的是如果file檔案存在,則touch是不會覆寫原檔案的,它隻會更新檔案的ctime。
cp -t DEST SRC | 預設情況下cp都是源目錄在前,目标位址在後,-t可以颠倒這個順序 |
cp -r或者cp -R | 請注意,cp指令不加任何參數時是不能夠複制檔案夾的,需要加上-r或者-R選項複制檔案夾 |
cp -p | 保留時間戳、屬主,權限這些中繼資料複制。 |
cp -av | 保留源檔案的所有屬性複制,也可以複制檔案夾,-v顯示複制過程。 |
cp -i | 當目的地有同名檔案時,-i選項可以發出告警資訊提示是否覆寫,否者将直接覆寫。系統預設的cp指令其實是cp -i的别名 |
mv -t DEST SRC | 同cp -t,預設情況下mv都是源目錄在前,目标位址在後,-t可以颠倒這個順序 |
mv -i | -i:互動式,和cp -i一樣,同樣系統自帶的mv也是mv -i的别名 |
rm -i | -i:互動式,和cp -i一樣,同樣系統自帶的rm也是rm -i的别名 |
rm -f | -f:強制的意思,不提示 |
練習:
1)定義别名指令baketc,每天将/etc/目錄下所有檔案,備份到/app獨立的子目錄下,并要求子目錄格式為 backupYYYY-mm-dd,備份過程可見。
alias baketc="cp -av /etc /app/etc_backup$(date +%F)"
2)rm指令太危險了,如何盡可能的避免讓使用者使用該指令。定義rm别名,相當于把rm給隐藏了。
alias rm="mv -t /backups"
8、inode
inode(index node)表:用于存放磁盤上檔案的中繼資料資訊。
檔案的中繼資料資訊包括如下幾個部分:
- 檔案類型,權限,UID,GID
- 連結數(指向這個檔案名路徑名稱個數)
- 該檔案的大小和不同的時間戳
- 資料塊指針:指向磁盤上檔案的真正資料的磁盤塊block
- 有關檔案的其他資料
系統通過inode表中的指針尋找檔案的資料,而管理者通過檔案名引用
cp指令和inode的關系:cp指令做的事情實際上就是配置設定一個空閑的inode号,然後在inode表中生成一個新條目,然後在目錄中建立一個目錄項,然後将名稱與inode編号關聯,最後拷貝資料生成新的檔案
rm 指令和inode的關系:删除檔案時,實際上是釋放檔案的inode号,檔案的block資料實際上并不會馬上被删除,直到有另一個檔案使用該block時才會删除。
mv和inode的關系:如果mv的目标檔案和源檔案在同一個分區内,那麼move後的檔案的inode号并不會改變,因為該檔案實際的block位置并沒有改變。但是如果目标和源在一個不同的分區中, 那麼mv就相當于cp和rm了,mv後的檔案的inode号将會被改變,因為檔案的block變了。
ls -i | 顯示檔案的inode節點号,每個分區的inode節點編号都是獨立配置設定的。是以不同分區中的檔案的inode值可能會一樣。 |
df -i | 顯示每個分區的inode編号最大值,在同一分區mv檔案,檔案的inode值不變,inode值不變也就意味着磁盤塊不變。是以同一分區移動檔案特别快 |
9、硬連結、硬連結
硬連結:為某一個檔案建立硬連結檔案實際上就是再配置設定一個inode号,并将該inode号指向新的檔案名,但是這兩個檔案名都是指向的同一個block,是以,當通過一個檔案更改該block資料時,它的硬連結檔案的資料也變了,因為是同一個block。是以硬連結不能跨分區建立。
軟連接配接:就是快捷鍵,可以跨分區建立,它不會建立額外的inode号,和源檔案共享一個inode号。
ln A B | 為A建立硬連結檔案B |
ln -sv A B | 為A建立軟連結檔案B |
10、/dev/zero檔案
11、file指令
file -f filename | 用于批量顯示檔案的類型,filename中每一行列出一個檔案或目錄 |
file和file -f的差別舉例如下:
12、标準輸入和輸出
Linux給程式提供三種I/O裝置
标準輸入(STDIN):用0表示, 預設的标準輸入來自鍵盤的輸入
标準輸出(STDOUT):用1表示, 預設的标準輸出為輸出到終端視窗
标準錯誤(STDERR):用2表示, 預設的标準錯誤Wie輸出到終端視窗
上面的預設輸入和輸出在Linux中有專門的僞檔案定義,如下,每個終端使用者登入上來之後,都會在系統的/proc/$$/fd目錄中建立一個對該shell對應的終端,是以系統也就知道每一個使用者的預設輸出是哪個終端。fd: file descriptor (檔案描述符):
13、tr指令
tr用作轉換和删除字元,用法如下:
tr [OPTION]... SET1 [SET2]
tr [a-z] [A-Z] | 從标準輸入中讀取資料,然後将小寫字母轉換成大寫字母 |
tr -d [a-z] | 從标準輸入中讀取資料,然後将小寫字母删除 |
tr -s "a" | 将一行中多個連續重複的a字元壓縮成一個 |
14、重定向
1)把标準輸出 1 和标準錯誤 2 重新定向到檔案
2)重定向标準輸入
輸入重定向有兩種符号:
< :單行重定向,使用者每輸入一行都會立即被發送給stdin。
<<"終止符号" :多行重定向,使用者每輸入一行都會被緩存下來,直到使用者輸入“終止符”之後才會将這些資料一并發送給stdin。
使用單行重定向< 重定向标準輸入時,除了手動輸入資料外還可以使用檔案作為标準輸入源。
使用多行重定向<< “終止詞”時,終止詞可以随意寫,表示結束輸入,是以一般使用EOF或者END(結束的意思),多行重定向一般都是手動輸入資料,而非檔案。
15、管道符号 |
管道符的格式如下:
指令1 | 指令2 | 指令3 | …
管道的作用是:将指令1的STDOUT發送給指令2的STDIN,指令2的STDOUT發送到指令3的STDIN,最後一個指令會在目前shell程序的子shell程序中執行
值的注意的是:STDERR預設不能通過管道轉發的,這是因為管道隻會轉發标準輸出。但可利用2>&1将标準錯誤“洗白”
16、tee指令
tee -a 檔案 | 從标準輸入中讀取資料儲存到檔案當中,并列印到标準輸出上。 |
tee指令的作用就是:把标準輸入的資料儲存到一個檔案當中,并且列印到标準輸出上來。
tee的使用場景:
- 儲存不同階段的輸出
- 複雜管道的故障排除
- 同時檢視和記錄輸出
正是因為tee的多重輸出性質,是以tee通常都是與管道符聯合使用的,如下:
指令1 | tee -a 檔案名 | 指令2