1. 程式人生 > >Linux 檔案與目錄管理

Linux 檔案與目錄管理

一、目錄與路徑

相對路徑與絕對路徑

  • 絕對路徑:路徑的寫法“一定由根目錄 / 寫起”,例如: /usr/share/doc 這個目錄。
  • 相對路徑:路徑的寫法“不是由 / 寫起”,例如由 /usr/share/doc 要到 /usr/share/man 下面時,可以寫成: “cd ../man”這就是相對路徑的寫法啦!相對路徑意指“相對於目前工作目錄的路徑!”

目錄的相關操作

.         代表此層目錄
..        代表上一層目錄
-         代表前一個工作目錄
~         代表“目前使用者身份”所在的主資料夾
~account  代表 account 這個使用者的主資料夾(account是個帳號名稱)

關於可執行檔案路徑的變數: $PATH

我們知道查閱檔案屬性的指令ls完整檔名為:/bin/ls(這是絕對路徑),但是我們在任何目錄下輸入 ls 就一定可以顯示出一些訊息,這是因為環境變數 PATH 的幫助所致。

當我們在執行一個指令的時候,舉例來說“ls”好了,系統會依照PATH的設定去每個PATH定義的目錄下搜尋檔名為ls的可可執行檔案, 如果在PATH定義的目錄中含有多個檔名為ls的可可執行檔案,那麼先搜尋到的同名指令先被執行!

echo $PATH:

[**@someone ~]$ echo $PATH
/usr/local/jdk1.8.0_111/bin:/usr/local/jdk/bin:/usr/local/bin:/usr/bin/mysql:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

無論是root還是其它使用者都有 /bin 或 /usr/bin, 這個目錄在PATH變數內,所以當然就能夠在任何地方執行ls來找到/bin/ls可執行檔案。

但是對於我們自己解壓安裝的某些程式包,如某些web容器Tomcat或者Jetty,當我們要執行bin目錄的某些sh指令碼,需要使用絕對路徑或者./start.sh這樣的相對路徑。

二、檔案內容查閱

常見的檔案內容查閱命令:

cat   由第一行開始顯示檔案內容
tac   從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!
nl    顯示的時候,順道輸出行號!
more  一頁一頁的顯示檔案內容
less  與 more 類似,但是比 more 更好的是,他可以往前翻頁!
head  只看頭幾行
tail  只看尾巴幾行
od    以二進位制的方式讀取檔案內容!

直接檢視

  • cat
[root@study ~]# cat [-AbEnTv]
選項與引數:
-A  :相當於 -vET 的整合選項,可列出一些特殊字元而不是空白而已;
-b  :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
-E  :將結尾的斷行字元 $ 顯示出來;
-n  :打印出行號,連同空白行也會有行號,與 -b 的選項不同;
-T  :將 [tab] 按鍵以 ^I 顯示出來;
-v  :列出一些看不出來的特殊字元
  • tac(反向展示)
  • nl(新增行號列印)
[root@study ~]# nl [-bnw] 檔案
選項與引數:
-b  :指定行號指定的方式,主要有兩種:
      -b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
      -b t :如果有空行,空的那一行不要列出行號(預設值);
-n  :列出行號表示的方法,主要有三種:
      -n ln :行號在螢幕的最左方顯示;
      -n rn :行號在自己欄位的最右方顯示,且不加 0 ;
      -n rz :行號在自己欄位的最右方顯示,且加 0 ;
-w  :行號欄位的佔用的字元數。

nl 可以將輸出的檔案內容自動的加上行號!其預設的結果與 cat -n 有點不太一樣, nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能。

可翻閱檢視

  • more
空白鍵: 代表向下翻一頁;
Enter : 代表向下翻“一行”;
/字串 : 代表在這個顯示的內容當中,向下搜尋“字串”這個關鍵字;
:f    : 立刻顯示出檔名以及目前顯示的行數;
q     : 代表立刻離開 more ,不再顯示該檔案內容。
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用。
  • less
空白鍵 :   向下翻動一頁;
[pagedown]:向下翻動一頁;
[pageup] : 向上翻動一頁;
/字串 :    向下搜尋“字串”的功能;
?字串 :    向上搜尋“字串”的功能;
n :重複前一個搜尋 (與 / 或 ? 有關!)
N :反向的重複前一個搜尋 (與 / 或 ? 有關!)
g :前進到這個資料的第一行去;
G :前進到這個資料的最後一行去 (注意大小寫);
q :離開 less 這個程式;

less 的用法比起 more 又更加的有彈性,在 more 的時候,我們並沒有辦法向前面翻, 只能往後面看,但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往後翻看檔案。

資料擷取

  • head (取出前面幾行)
[root@study ~]# head [-n number] 檔案
選項與引數:
-n  :後面接數字,代表顯示幾行的意思

[root@study ~]# head /etc/man_db.conf
# 預設的情況中,顯示前面十行!若要顯示前 20 行,就得要這樣:
[root@study ~]# head -n 20 /etc/man_db.conf
  • tail (取出後面幾行)
[root@study ~]# tail -n 20 /etc/man_db.conf

範例一:如果不知道/etc/man_db.conf有幾行,卻只想列出100行以後的資料時?
[root@study ~]# tail -n +100 /etc/man_db.conf

範例二:持續偵測/var/log/messages的內容
[root@study ~]# tail -f /var/log/messages
  <==要等到輸入[crtl]-c之後才會離開tail這個指令的偵測!

通常用這個tail來刷日誌。

三、命令與檔案查詢

指令碼名的查詢

  • which(尋找“執行檔案”)

根據PATH這個環境變數所規範的路徑去查詢“執行檔案”的檔名。所以,重點是找出執行檔案而已。

檔名的查詢

因為 whereis 與 locate 是利用資料庫來查詢資料,所以速度相當快,find 要實際查詢硬碟。

  • whereis(尋找特定檔案)
-b: 只找二進位制格式的檔案
-m: 只找在說明檔案 manual 路徑下的檔案
-s: 只找 source 原始檔
-u: 查詢不在上述三個選項當中的其他特殊檔案
  • locate

locate 尋找資料是由已建立的資料庫 /var/lib/mlocate/ 裡面的資料所查詢的,而資料庫的建立預設是每天執行一次,新建的檔案直接查詢會找不到,需要手動更新資料庫,直接輸入“updatedb”就可以了。

  • find

與時間有關的引數:

-mtime n  : n為數字,意義為在n天之前的“一天之內”被更改過的檔案
-mtime +n : 列出在n天之前的(不含n本身)被更改過的檔名
-mtime -n : 列出在n天之內(含n天本身)被更改過的檔名
-newer file: file為一個存在的檔案,列出此file還有新的檔名

時間軸表示:
           |4|
           -4|----------> 
<----------|+4
<------7-6-5-4-3-2-1-now--------

範例:

# 將過去系統上面24小時內有改動的檔案列出
find / -mtime 0

# 尋找 /etc 下面的檔案,如果檔案日期比 /etc/passwd 新就列出
find /etc -newer /etc/passwd
 

與使用者或使用者組名有關的引數:

-uid n: n為數字,這個數字是使用者的賬號ID,即UID,這個UID是記錄在/etc/passed 裡面與賬號名稱對應的數字
-gid n: n為數字,這個數字是使用者組名的ID,即GID,這個GID記錄在/etc/group中
-user name:  name為使用者賬號名稱
-group name: name為使用者組名
-nouser:    尋找檔案的所有者不存在/etc/passwd 的人
-nogroup:   尋找檔案的所有使用者組不存在於 /etc/group 中的檔案

範例:

# 查詢/home 下面屬於 vbird 的檔案
# 可以利用這個命令將屬於某個使用者的所有檔案都找出來
find /home -user vbird

# 查詢系統中不屬於任何人的檔案
# 通過這個命令可以找出那些不太正常的檔案
find / -nouser

與檔案許可權及名稱有關的引數:

-name filename: 查詢檔名為 filename 的檔案
-size [+-]SIZE: 查詢比SIZE還要大(+)或小(-)的檔案,這個SIZE的規格有:c-byte k-1024bytes
-type TYPE: 查詢檔案的型別為TYPE的,型別主要有:一般正規檔案(f)、裝置檔案(b,c)、目錄檔案(d)、連線檔案(l)、socket(s)、FIFO(p)等
-perm mode: 查詢檔案許可權“剛好等於mode的檔案” mode類似chmod的屬性值,如-rwxr-xr-x的屬性值為4755