1. 程式人生 > >linux文件屬性、特殊符號、通配符、通配符與正則的區別

linux文件屬性、特殊符號、通配符、通配符與正則的區別

linux運維 正則 文件屬性 特殊符號


作者Georgekai

歸檔:學習筆記

2017/12/25

本章正題:linux文件屬性、特殊符號、通配符、通配符與正則的區別

1.1 軟鏈接與硬連接的區別

1.1.1 1.創建軟連接(怎麽來的)

cp -s 或 ln -s 意思一樣

1.1.2 2.創建硬鏈接(怎麽來的)

ln 源文件 鏈接文件

1.1.3 區別(什麽意思)

1.軟連接相當於windows中快捷方式,存放的是源文件的位置

2.硬鏈接相當於是文件的入口。多個硬鏈接,相當於是超市的前後門

3.硬鏈接也是個普通文件 (-),軟鏈接是個鏈接文件(l),也叫符號鏈接

4.不能對目錄創建硬鏈接,對文件創建硬鏈接防止誤刪除

5.在同一個分區中,倆個inode相同的文件互為硬鏈接

6.軟連接/符號鏈接最常用

7.創建軟鏈接一定要用絕對路徑,軟連接的默認權限是777

1.1.4 刪除鏈接的影響(怎麽沒的)

1.只刪除源文件,軟鏈接失效

2.只刪除硬鏈接,沒有影響

3.刪除源文件和硬鏈接,相當於沒有任何的入口(硬連接數為0


1.2 linux下面一個文件被徹底刪除條件:

1.2.1 條件:

1.文件的硬連接數為0 rm

2.進程調用數為 0(誰還在使用這個文件)

1.2.2 找出誰正在使用這個文件

[root@georgekai ~]# lsof |grep "/var/log/secure"

rsyslogd 1090 root 4w REG 8,3 5566 3

94252 /var/log/secure

註: rsyslog #進程/軟件

1092 #PID進程號

5566 #文件大小

94252 #文件的Inode號碼

secure #進程名


實例1-1 企業故障案例:文件沒有徹底刪除導致磁盤空間不足

註:文件沒有徹底刪除幹凈(硬鏈接數為0,進程調用不為0),導致磁盤空間滿了

技術分享圖片z

模擬故障:

[root@georgekai ~]# seq 500000000 >> /var/log/messages

排查過程:

1. du -sh /* | grep G (不能統計沒有文件名問的文件),查看空間被哪些文件占用

[root@georgekai ~]# du -sh /*

8.0K /app

4.0G /var

註:grep G 是為了找出占磁盤空間更大的文件,還可以用 du -sh /var/* 這樣繼續排查哪個文件占用的

2. \rm /var/log/messages -f (詢問後在刪除),刪除或轉移占用空間的文件

[root@georgekai ~]# \rm /var/log/messages -f

註:刪除/var/log/messages ,重啟服務後,會自動生成


3. df -h 查看後還沒有釋放出空間,說明可能是進程調用不為0

[root@georgekai ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 19G 2.0G 16G 72% /


4. lsof | grep deleted 查看哪個文件已經刪除了還被占用著

[root@georgekai ~]# lsof |grep deleted

註:一般過濾出帶deleted ,就表示文件刪除了,但還被占用著


5. 然後重啟這個服務,最後在用df -h查看會發現空間被釋放

[root@georgekai ~]# /etc/init.d/rsyslog restart

磁盤空間不足小結:

1. block滿了,文件沒有被徹底刪除(硬鏈接書為0,進程調用數不為0

1lsof | grep delete

2. block滿了,正常

1df -h 哪裏滿了

2du -sh /* 一層一層排查,排查帶某個文件/目錄

3)確認之後在刪除大文件

3. Inode用光了,某個目錄下有大量的小文件(使用定時任務)

1)找出系統中大於1M的目錄 (一般目錄下小文件多了,目錄的大小也會變大)

[root@georgekai ~]# ls -ldh /kai/

drwxr-xr-x. 83 root root 1.0M Dec 25 10:22 /kai/

註:只能查看文件夾本身的大小,不包含內容的大小

查看目錄下的文件總大小:

[root@georgekai ~]# du -sh /etc/

31M /etc/

註:包含目錄裏面內容的大小


1.2.3 如何在 linux中刪除大量的小文件

1)創建大量小文件

[root@georgekai ~]# echo {1..400000}.txt |xargs touch

2)刪除大量小文件

[root@georgekai ~]# ls *.txt |xargs rm

註:刪除大量文件時,需要ls或find 和|xargs rm的配合

如果文件量太大還是不行,分類刪除,如ls 1*.txt |xargs rm

也可以用find !-name“” 去排除後在刪除。

1.3 linux中的三種時間戳

1mtime 修改時間 modify time

文件的內容變化,ls默認的時間

[root@georgekai data]# echo "123123" >> qq.txt

[root@georgekai data]#stat qq.txt

File: `qq.txt'

Size: 175 Blocks: 8 IO Block: 4096 regular file

Device: 803h/2051d Inode: 523271 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2017-12-24 23:52:08.795965710 +0800

Modify: 2017-12-25 10:57:53.949964031 +0800

Change: 2017-12-25 10:57:53.949964031 +0800

註:mtime和ctime都會改變(內容和大小)

2ctime 改變時間 change time

文件屬性、大小、所有者、權限、所有者

[root@georgekai data]# ln george.txt /tmp/george.txt

[root@georgekai data]# stat qq.txt

File: `qq.txt'

Size: 175 Blocks: 8 IO Block: 4096 regular file

Device: 803h/2051d Inode: 523271 Links: 2

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2017-12-24 23:52:08.795965710 +0800

Modify: 2017-12-25 10:57:53.949964031 +0800

Change: 2017-12-25 10:59:06.172972245 +0800

註:只有ctime會改變 (links變了)

3 atime 訪問時間 access time

查看文件的內容cat

[root@georgekai data]# cat george.txt

[root@georgekai data]# stat qq.txt

File: `qq.txt'

Size: 175 Blocks: 8 IO Block: 4096 regular file

Device: 803h/2051d Inode: 523271 Links: 2

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2017-12-25 10:59:32.379970440 +0800

Modify: 2017-12-25 10:57:53.949964031 +0800

Change: 2017-12-25 10:59:06.172972245 +0800

註:atime會根據內容改變和訪問的條件才會改變。

驗證屬性的詳細信息


[root@georgekai data]# stat qq.txt

File: `qq.txt'

Size: 154 Blocks: 8 IO Block: 4096 regular file

Device: 803h/2051d Inode: 523271 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2017-12-24 23:52:08.795965710 +0800

Modify: 2017-12-19 04:59:48.141998251 +0800

Change: 2017-12-19 23:04:58.263444678 +0800

1.4 通配符

1.4.1 回顧之前使用過的特殊符號

沒特殊含義系列:

$ 1.命令行中 取出變量內容

2.awk中 區某一列

3.普通用戶的命令提示胡

! 1.findawksed中,取反的意思

2.命令行中,取歷史命令並執行(echo !rm 然後在按方向鍵↑選擇需要使用的命令)

echo !awk

!awk 表示取出最近一次以awk開頭的命令並執行

history | grep awk

ctrl + r 輸入awk

| 1.管道


# 1.註釋

2.root用戶的命令提示符

引號系列:

$() `` 1. 先運行裏面的命令,把顯示到屏幕上的內容留下來


' ' 1. 所見即所得,單引號的內容會原封不動顯示出來

"" 1. 對雙引號裏面的特殊符號進行解析 如:$ $() `` !

重定向系列:

> 1. 重定向符號

>> 1. 追加輸出重定向

2> 1. 錯誤輸出重定向

2>> 1. 錯誤追加輸出重定向

< 1. 輸入重定向 常用的:xargs

<< 1. 追加輸入重定向

~ 1. 用戶的家目錄

root ~/root

george ~ /home

. 1. 當前目錄

.. 1. 當前目錄的上級目錄

判斷系列:

&& 1. 並且

2. 前面的命令執行成功以後&&在執行後面的命令

如:ifdown eth0&&ifup eth0

| | 1. 或者

2. 前面的命令執行失敗之後&&在執行後面的命令(一般這個目錄不存在,然後在創建 ls /root/kai || mkdir /root/kai

1.4.2 通配符(wildcard

作用:1.方便我們查找出文件名

2.linux中大部分命令都可以使用通配符

1) * 所有、任意

1:找出/oldboy/中以.txt結尾的文件

[root@georgekai data]# find /oldboy/ -type f -name "*.txt"

2:找出系統中帶config的命令

[root@georgekai /]# find /sbin -type f -name "*config*" |egrep "/bin|/sbin"

2 {} 生成序列

1[root@georgekai /]# echo stu{01..10}

stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

2[root@georgekai /]# echo stu{01,08,10}

stu01 stu08 stu10

3[root@georgekai /]# echo {z..a} {01..10}

z y x w v u t s r q p o n m l k j i h g f e d c b a 01 02 03 04 05 06 07 08 09 10

4[root@georgekai /]# echo {z..a}{01..10} |xargs -n10

z01 z02 z03 z04 z05 z06 z07 z08 z09 z10

y01 y02 y03 y04 y05 y06 y07 y08 y09 y10

5[root@georgekai data]# echo qq.txt{,.bak}

qq.txt qq.txt.bak

6:[root@georgekai data]# cp qq.txt{,.bak} 可以用來備份

1.5 正則表達式

作用:1.特殊符號幫助我們處理文件===正則表達式

2.在文件中過濾出你想要的或不想要的內容

1.5.1 正則表達式分類:

1)基礎正則表達式:basic regular expression (BRE)

^ $ . [] [^]

2)擴展正則表達式:extended regular expression (ERE)

| + ( ) {} ?

1.5.2 正則與通配符的區別:

通配符: 作用:查找文件名

支持的命令:linux大部分命令都支持

正則: 作用:在文件中過濾文本內容

支持的命令: sedgrepawk 語言也支持:Python Java


linux文件屬性、特殊符號、通配符、通配符與正則的區別