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
註: 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)
1)lsof | grep delete
2. block滿了,正常
1)df -h 哪裏滿了
2)du -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中的三種時間戳
1)mtime 修改時間 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都會改變(內容和大小)
2)ctime 改變時間 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.find或awk或sed中,取反的意思
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大部分命令都支持
正則: 作用:在文件中過濾文本內容
支持的命令: sed、grep、awk 語言也支持:Python Java
linux文件屬性、特殊符號、通配符、通配符與正則的區別