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

image.png

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

cd -P

進入真實的物理路徑中。

cd -L

如果目錄是軟連接,那麼-L進入的就是軟連接目錄,而不是真正的物理路徑。

舉例如下:

image.png

3、basename和dirname命令

basename

獲取基名

dirname

獲取目錄名

舉例如下:

image.png

4、ls命令

ls -R

目錄遞歸顯示,目錄裏面有什麼文件,都會一一顯示出來。

ls -t

按mtime排序

ls -S

按從大到小排序顯示

ls -l --time=ctime file

ls -l默認顯示的是mtime,--time=ctime,使其顯示ctime

舉例如下:

image.png

5、查看文件/目錄的狀態

三個時間戳:

access time:訪問時間,atime,讀取文件內容

modify time: 修改時間, mtime,改變文件內容(數據)

change time: 改變時間, ctime,元數據發生改變

stat命令可以查看文件的三個時間戳,如下:

image.png

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表中的指針尋找文件的數據,而管理員通過文件名引用

image.png

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值不變也就意味着磁盤塊不變。因此同一分區移動文件特別快

舉例如下:

image.png

9、硬鏈接、硬鏈接

硬鏈接:爲某一個文件創建硬鏈接文件實際上就是再分配一個inode號,並將該inode號指向新的文件名,但是這兩個文件名都是指向的同一個block,因此,當通過一個文件更改該block數據時,它的硬鏈接文件的數據也變了,因爲是同一個block。所以硬鏈接不能跨分區創建。

軟連接:就是快捷鍵,可以跨分區創建,它不會創建額外的inode號,和源文件共享一個inode號。

ln A B

爲A創建硬鏈接文件B

ln -sv A B

爲A創建軟鏈接文件B

10、/dev/zero文件

image.png

11、file命令

file -f filename

用於批量顯示文件的類型,filename中每一行列出一個文件或目錄

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

image.png

12、標準輸入和輸出

Linux給程序提供三種I/O設備

標準輸入(STDIN):用0表示, 默認的標準輸入來自鍵盤的輸入

標準輸出(STDOUT):用1表示, 默認的標準輸出爲輸出到終端窗口

標準錯誤(STDERR):用2表示, 默認的標準錯誤Wie輸出到終端窗口

上面的默認輸入和輸出在Linux中有專門的僞文件定義,如下,每個終端用戶登錄上來之後,都會在系統的/proc/$$/fd目錄中創建一個對該shell對應的終端,因此係統也就知道每一個用戶的默認輸出是哪個終端。fd: file descriptor (文件描述符):

image.png

13、tr命令

tr用作轉換和刪除字符,用法如下:

tr [OPTION]... SET1 [SET2]

tr [a-z] [A-Z]

從標準輸入中讀取數據,然後將小寫字母轉換成大寫字母

tr -d [a-z]

從標準輸入中讀取數據,然後將小寫字母刪除

tr -s "a"

將一行中多個連續重複的a字符壓縮成一個

舉例如下:

image.png

14、重定向

1)把標準輸出 1 和標準錯誤 2 重新定向到文件

image.png

2)重定向標準輸入

輸入重定向有兩種符號:

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

<<"終止符號" :多行重定向,用戶每輸入一行都會被緩存下來,直到用戶輸入“終止符”之後纔會將這些數據一併發送給stdin。

使用單行重定向< 重定向標準輸入時,除了手動輸入數據外還可以使用文件作爲標準輸入源。

image.png

使用多行重定向<< “終止詞”時,終止詞可以隨意寫,表示結束輸入,因此一般使用EOF或者END(結束的意思),多行重定向一般都是手動輸入數據,而非文件。

15、管道符號 |

管道符的格式如下:

命令1 | 命令2 | 命令3 | …

管道的作用是:將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN,最後一個命令會在當前shell進程的子shell進程中執行

值的注意的是:STDERR默認不能通過管道轉發的,這是因爲管道只會轉發標準輸出。但可利用2>&1將標準錯誤“洗白”

image.png

16、tee命令

tee -a 文件

從標準輸入中讀取數據保存到文件當中,並打印到標準輸出上。

tee命令的作用就是:把標準輸入的數據保存到一個文件當中,並且打印到標準輸出上來。

tee的使用場景:

  • 保存不同階段的輸出

  • 複雜管道的故障排除

  • 同時查看和記錄輸出

image.png

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

命令1 | tee -a 文件名 | 命令2

作用:把命令1的STDOUT保存在文件中,並將tee的STDOUT做爲命令2的輸入,-a(append)追加的意思,即不會覆蓋源文件的內容。

image.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章