一. 目錄結構
使用ls命令我們首先要了解Linux下的目錄結構
Linux系統是由各種文件和目錄構成的,就像Windows系統下文件和文件夾的關系,一級一級的向下包含擴展,例如在根目錄下有bin,boot,dev,etc,home等目錄而在這些目錄下又包含了其他的文件和目錄,這樣就形成了以根目錄”/”為根的樹形結構
另:每個目錄下都有“.”“..”這樣的兩個隱藏文件,“.”表示本文件,“..”表示父目錄
二. Linux下的文件類型
在Linux下一切皆文件 everything is file,包括目錄也是文件的一種而這些文件被分為七種類型:
• -:普通文件
• d: 目錄文件
• b: 塊設備
• c: 字符設備
• l: 符號鏈接文件
• p: 管道文件pipe
• s: 套接字文件sock
三.Linux中ls命令及其常用參數
ls功能: 列出非目錄的文件項,然后是每一個目錄中的“可顯示”文件(可理解為ls命令將本目錄向下展開兩級)
ls用法:ls [參數] [目錄名]
(如過要顯示當前目錄的文件可不加目錄名)
ls常用參數
-a 顯示所有文件,包含隱藏文件
-A 顯示所有文件,包含隱藏文件,但不包含.及..
-l 顯示為long format(長格式),列出文件的類型、權限、鏈接數、owner、group、大 小,時間,名字
-R
-d 不展開目錄,只顯示目錄自身,一般與-l配合使用以顯示目錄自身的屬性信息(只顯示當前目錄的內容)
-1 數字1,成列顯示內容
-S 以文件大小排序顯示,默認從大到小 -r后,從小到大
-U 按存放順序排序顯示
-X 按擴展名的首字母來排序
-t 按mtime排序(先顯示時間最近的)
-ul 按atime排序(先顯示時間最近的)
-ct 按ctime排序(先顯示時間最近的)
補充:
關於時間戳:
atime 訪問時間
mtime 數據修改時間 (寫入,修改數據mtime改變,mtime改變ctime必改變)
ctime 元數據修改時間 (修改權限的時候只有ctime改變)
可過“stat 文件路徑”查看全部時間戳
擴展: 如何通過ls只顯示指定格式的文件
首先我們要了解什么是文件名通配符
Shell提供了一套完整的字符串模式匹配規則,或者稱之為元字符,當s h e l l遇到上述字符時,就會把它們當作特殊字符,而不是文件名中的普通字符,這樣用戶就可以用它們來匹配相應的文件名,我理解這可以稱為通配符。
常用通配符:
* 匹配0或多個任意字符
? 匹配任意1個字符
[ ] 當中括號內為幾個確定字符時,表示匹配括號內任意一個字符,當中括號內為一個范圍時表示匹配這個范圍中的任意一個字符(中括號表示的是一個范圍,匹配的是一個字符)
例:
[ab46e] 表示是a,b,4,6,e中的任意一個字符
[a- z] 表示aAbBcC……z(Linux中的默認編碼順序是一個小寫字母一個大寫字母即aAbBcC.....Z)
[A-Z] 表示AbBcC……Z
[a- Z] 表示所有大小寫字母
[^ae] 表示即不是a也不是e的其他任意單一字符
[:lower:] 表示一個小寫字母
[:upper:] 表示一個大寫字母
[:alpha:] 表示一個大小寫字母 等同於[a-Z]
[:digit:] 表示任意一個數字 等同於[0-9]
[:alnum:] 表示任意一個字母或數字 等於[a-Z0-9]或[[:digit:][:alpha:]]
[:blank:]:一個水平空白字符
[:space:]:一個水平或垂直空白字符(文件名不可能包含回車,故此處使用與[:blank:]:效果相同)
[:punct:]: 表示一個符號
通過ls命令和通配符查找指定格式的文件:
格式:ls [參數] [目錄名][通配符]
以下是一些例子:
1. 查找/usr/share/man 目錄下以m開頭且以一個數字加x結尾的文件
命令:ls -d /usr/share/man/m*[0-9]x
運行結果:
解釋:-d 只展開一級目錄
/usr/share/man/ 目錄路徑
m*[0-9]x m表示以m開頭,[0-9]x表示以數字加x結尾,因為對文件的中間沒
有加以限制所以用*代替中間部分,*表示任意個數的任意字符
2. 查找root下的隱藏文件和目錄
命令: ls -d /root/.*
運行結果:
解釋:-d 只展開一級目錄
/root 目錄路徑
因為Linux下以“.”開頭的文件是隱藏文件,所以用“.”加上“*”來表示隱藏文件
3. 查找/etc下所有以k開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件
命令:ls -d /etc/k*[0-9]*[[:lower:]]
運行結果:
解釋:-d 只展開一級目錄
/etc 目錄路徑
k表示以k開頭,[0-9]表示一個數字,[[:lower:]]表示一個小寫字母,因為[:lower:]表示為小寫字母,也就是abcdefg...z,所以在[:lower:]外面加
上[ ]以表示在這寫子母中取任意一個,因為只規定了開頭和結尾,對中間只要求至少出現一位數字,所以中間用*[0-9]*來表示