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命令
-P、-L和不加任何參數的不同之處如下:
同理cd命令也有-P和-L選項,它們的使用和pwd的-P、-L一模一樣:
舉例如下:
3、basename和dirname命令
舉例如下:
4、ls命令
舉例如下:
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。
練習:
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變了。
舉例如下:
9、硬鏈接、硬鏈接
硬鏈接:爲某一個文件創建硬鏈接文件實際上就是再分配一個inode號,並將該inode號指向新的文件名,但是這兩個文件名都是指向的同一個block,因此,當通過一個文件更改該block數據時,它的硬鏈接文件的數據也變了,因爲是同一個block。所以硬鏈接不能跨分區創建。
軟連接:就是快捷鍵,可以跨分區創建,它不會創建額外的inode號,和源文件共享一個inode號。
10、/dev/zero文件
11、file命令
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]
舉例如下:
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命令的作用就是:把標準輸入的數據保存到一個文件當中,並且打印到標準輸出上來。
tee的使用場景:
保存不同階段的輸出
複雜管道的故障排除
同時查看和記錄輸出
正是因爲tee的多重輸出性質,因此tee通常都是與管道符聯合使用的,如下:
命令1 | tee -a 文件名 | 命令2
作用:把命令1的STDOUT保存在文件中,並將tee的STDOUT做爲命令2的輸入,-a(append)追加的意思,即不會覆蓋源文件的內容。