天天看點

linux基礎

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和不加任何參數的不同之處如下:

linux基礎
linux基礎

同理cd指令也有-P和-L選項,它們的使用和pwd的-P、-L一模一樣:

cd -P 進入真實的實體路徑中。
cd -L 如果目錄是軟連接配接,那麼-L進入的就是軟連接配接目錄,而不是真正的實體路徑。

舉例如下:

linux基礎
linux基礎

3、basename和dirname指令

basename 擷取基名
dirname 擷取目錄名
linux基礎
linux基礎

4、ls指令

ls -R 目錄遞歸顯示,目錄裡面有什麼檔案,都會一一顯示出來。
ls -t 按mtime排序
ls -S 按從大到小排序顯示
ls -l --time=ctime file ls -l預設顯示的是mtime,--time=ctime,使其顯示ctime
linux基礎
linux基礎

5、檢視檔案/目錄的狀态

三個時間戳:

access time:通路時間,atime,讀取檔案内容

modify time: 修改時間, mtime,改變檔案内容(資料)

change time: 改變時間, ctime,中繼資料發生改變

stat指令可以檢視檔案的三個時間戳,如下:

linux基礎
linux基礎

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表中的指針尋找檔案的資料,而管理者通過檔案名引用

linux基礎
linux基礎

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值不變也就意味着磁盤塊不變。是以同一分區移動檔案特别快
linux基礎
linux基礎

9、硬連結、硬連結

硬連結:為某一個檔案建立硬連結檔案實際上就是再配置設定一個inode号,并将該inode号指向新的檔案名,但是這兩個檔案名都是指向的同一個block,是以,當通過一個檔案更改該block資料時,它的硬連結檔案的資料也變了,因為是同一個block。是以硬連結不能跨分區建立。

軟連接配接:就是快捷鍵,可以跨分區建立,它不會建立額外的inode号,和源檔案共享一個inode号。

ln A B 為A建立硬連結檔案B
ln -sv A B 為A建立軟連結檔案B

10、/dev/zero檔案

linux基礎
linux基礎

11、file指令

file -f filename 用于批量顯示檔案的類型,filename中每一行列出一個檔案或目錄

file和file -f的差別舉例如下:

linux基礎
linux基礎

12、标準輸入和輸出

Linux給程式提供三種I/O裝置

标準輸入(STDIN):用0表示, 預設的标準輸入來自鍵盤的輸入

标準輸出(STDOUT):用1表示, 預設的标準輸出為輸出到終端視窗

标準錯誤(STDERR):用2表示, 預設的标準錯誤Wie輸出到終端視窗

上面的預設輸入和輸出在Linux中有專門的僞檔案定義,如下,每個終端使用者登入上來之後,都會在系統的/proc/$$/fd目錄中建立一個對該shell對應的終端,是以系統也就知道每一個使用者的預設輸出是哪個終端。fd: file descriptor (檔案描述符):

linux基礎
linux基礎

13、tr指令

tr用作轉換和删除字元,用法如下:

tr [OPTION]... SET1 [SET2]

tr [a-z] [A-Z] 從标準輸入中讀取資料,然後将小寫字母轉換成大寫字母
tr -d [a-z] 從标準輸入中讀取資料,然後将小寫字母删除
tr -s "a" 将一行中多個連續重複的a字元壓縮成一個
linux基礎
linux基礎

14、重定向

1)把标準輸出 1 和标準錯誤 2 重新定向到檔案

linux基礎
linux基礎

2)重定向标準輸入

輸入重定向有兩種符号:

< :單行重定向,使用者每輸入一行都會立即被發送給stdin。

<<"終止符号" :多行重定向,使用者每輸入一行都會被緩存下來,直到使用者輸入“終止符”之後才會将這些資料一并發送給stdin。

使用單行重定向< 重定向标準輸入時,除了手動輸入資料外還可以使用檔案作為标準輸入源。

linux基礎
linux基礎

使用多行重定向<< “終止詞”時,終止詞可以随意寫,表示結束輸入,是以一般使用EOF或者END(結束的意思),多行重定向一般都是手動輸入資料,而非檔案。

linux基礎

15、管道符号 |

管道符的格式如下:

指令1 | 指令2 | 指令3 | …

管道的作用是:将指令1的STDOUT發送給指令2的STDIN,指令2的STDOUT發送到指令3的STDIN,最後一個指令會在目前shell程序的子shell程序中執行

值的注意的是:STDERR預設不能通過管道轉發的,這是因為管道隻會轉發标準輸出。但可利用2>&1将标準錯誤“洗白”

linux基礎
linux基礎

16、tee指令

tee -a 檔案 從标準輸入中讀取資料儲存到檔案當中,并列印到标準輸出上。

tee指令的作用就是:把标準輸入的資料儲存到一個檔案當中,并且列印到标準輸出上來。

tee的使用場景:

  • 儲存不同階段的輸出
  • 複雜管道的故障排除
  • 同時檢視和記錄輸出
linux基礎
linux基礎

正是因為tee的多重輸出性質,是以tee通常都是與管道符聯合使用的,如下:

指令1 | tee -a 檔案名 | 指令2

繼續閱讀