天天看點

Linux檔案與目錄管理

絕對路徑與相對路徑:

絕對路徑:路徑的寫法『一定由根目錄 / 寫起』,例如: /usr/share/doc 這個目錄。

相對路徑:路徑的寫法『不是由 / 寫起』,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: 『cd ../man』這就是相對路徑的寫法啦!

.    代表此層目錄 

..   代表上層目錄 

~    代表自己的家目錄 

~user 代表到 user 這個人的家目錄

cd

文法:

[root @test /root ]# cd [相對路徑或絕對路徑]  

參數說明: 

路徑有『相對路徑』與『絕對路徑』的分别,請千萬小心啰! 

範例: 

[root @test /root]# cd ..<==回到上一層目錄 

[root @test /root]# cd ../home <==相對路徑的寫法 

[root @test /root]# cd /var/www/html <==絕對路徑的寫法 

[root @test /etc]# cd<==回到使用者的家目錄 

[root @test /etc]# cd ~ <==回到使用者的家目錄! 

[root @test /etc]# cd ~test<==回到 test 這個使用者的家目錄

cd 是 change directory 的縮寫,這是用來變換工作路徑的指令。注意,路徑與 cd 指令之間存在一個空格!

pwd

[root @test /root ]# pwd  

[root @test root]# cd /home/test 

[root @test test]# pwd  

/home/test             <==顯示目前你所在的目錄呦!

說明: 

pwd 是 print working directory 的縮寫,也就是顯示目前所在目錄的指令,例如在上個表格最後的目錄是 /home/test 這個目錄,但是提示字元僅顯示 test ,如果你想要知道目前所在的目錄,可以輸入 pwd 即可。

mkdir 與 rmdir 管理目錄:

那麼要如何建立删除目錄呢?很簡單呀!就用 mkdir 與 rmdir , make/remove directory 的縮寫! 

mkdir

[root @test /root ]# mkdir [-mp] [目錄名稱] 

-m :設定檔案的權限喔!直接設定,不需要看 umask 這個内容的臉色! 

-p :幫助你直接将上面的目錄遞歸建立起來! 

[root @test /root]# cd tmp 

[root @test /tmp]# mkdir test<==建立名稱為 test 的目錄 

[root @test /tmp]# mkdir -p test1/test2/test3/test4 <==直接建立 test2...等上層目錄 

[root @test /tmp]# mkdir -m 711 testqq  <==建立權限為 711 的目錄! 

[root @test /tmp]# ll test* 

drwxrwxr-x   2 test   test       4096 Feb  6 20:47 test/ 

drwxrwxr-x   3 test   test       4096 Feb  6 20:48 test1/ 

drwx--x--x   2 test   test       4096 Feb  6 20:48 testqq/

如果想要建立新的目錄的話,那麼就使用 mkdir 吧! 不過,在預設的情況下,你所需要的目錄得一層一層的建立才行!例如:假如你要建立一個目錄為 /home/bird/testing/test1,那麼首先必須要有 /home 然後 /home/bird ,再來 /home/bird/testing 都必須要存在,才可以建立 test1 這個目錄!假如沒有 /home/bird/testing 時,就沒有辦法建立 test1 的目錄啰!不過,現在有個更簡單有效的方法啦!那就是加上 -p 這個參數喔!你可以直接下達:『 mkdir -p /home/bird/testing』則系統會自動的幫你将 /home, /home/bird, /home/bird/testing 依序的建立起目錄!并且,如果該目錄本來就已經存在時,系統也不會顯示錯誤訊息喔!

rmdir

[root @test /root ]# rmdir [-p] [目錄名稱] 

-p :将上層的目錄也删除吧! 

[root @test /root]# rmdir test<==删除名稱為 test 的目錄 

[root @test tmp]# ll (ll:ls -l)

[root @test tmp]# rmdir test1 

rmdir: `test1': Directory not empty 

[root @test tmp]# rmdir -p test1/test2/test3/test4 

[root @test tmp]$ ll

如果想要建立删除舊有的目錄時,就使用 rmdir 吧!例如将剛剛建立的 test 殺掉,使用 rmdir test 即可!請注意呦!目錄需要一層一層的删除才行!而且被删除的目錄裡面必定不能還有其它的目錄或檔案!那如果要将所有目錄下的東西都殺掉呢?!這個時候就必須使用 rm -rf test 啰!不過,還是使用 rmdir 比較不危險!不過,你也可以嘗試以 -p 的參數加入,來删除上層的目錄喔! 

環境變量 PATH

當我們在執行一個指令的時候,系統會依照 PATH 的設定去每個 PATH 定義的路徑下搜尋檔案,先搜尋到的指令檔案先被執行之!

顯示系統環境變量PATH:

[root@test root]# echo $PATH 

/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

可以使用printenv列出系統所有的環境變量:

-bash-3.2$ printenv

HOSTNAME=fedora.unix-center.net

TERM=vt100

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=222.206.94.170 10321 22

QTDIR=/usr/lib/qt-3.3

QTINC=/usr/lib/qt-3.3/include

SSH_TTY=/dev/pts/2

USER=。。。。。

檔案與目錄管理:

顯示屬性:

# ls [-ailS] 

-a      :全部的檔案都列出(連同隐藏檔) 

-i      :印出 inode 的值 

-l      :長的列出,連同檔案大小的資料等等 

-S      :以檔案大小排序 

--color=never    :不要顯示顔色 

--color=always   :均顯示顔色 

--color=auto     :由系統自行判斷

拷貝

[root @test /root ]# cp [-drsu] [來源檔] [目的檔] 

-d     :在進行 copy 的時候,如果是 copy 到 link 檔案,若不加任何參數,則預設情況中會将 link 到的源檔案 

copy 到目的地,若加 -d 時,則 link 檔案可原封不動的将 link 這個快捷方式其拷貝到目的地! 

-r     :可以進行目錄的 copy 呦! 

-s         :做成連結檔,而不 copy 之意!與 ln 指令相同功能! 

-u, --update:如果來源檔比較新,或者是沒有目的檔,那麼才會進行 copy 的動作!可用于備份的動作中! 

[root @test /root]# cp    .bashrc bashrc     <==将 .bashrc 拷貝成 bashrc 這個檔案! 

[root @test /root]# cp -r /bin /tmp/bin       <==這個功能就好玩啦!這是用來 copy 整個目錄的參數! 

[root @test /root]# cp -s .bashrc bashrc        <==将 .bashrc 建立一個連結檔,檔名為 bashrc 

[root @test /root]# cp -u /home/.bashrc .bashrc <==先檢查 /home/.bashrc 是否與 .bashrc 不同,如果不同的話就開始 copy 一份!如果相同則不做任何動作!

删除

[root @test /root ]# rm [-fir] [檔名] 

-i    :提供使用者确認(這是預設值) 

-r    :循環,就是一直殺掉,直到沒有東西為止的意思 

-f    :force ,就是強力殺掉啦! 

[root @test /root]# cp .bashrc bashrc<==建立一個新檔案, bashrc 

[root @test /root]# rm bashrc           <==會顯示如下的提示: 

rm: remove `bashrc'? 

[root @test /root]# mkdir testing 

[root @test /root]# cp .bashrc testing 

[root @test /root]# rmdir testing 

rmdir: `testing': Directory not empty  <==由于 testing 裡面有 .bashrc ,是以砍不掉! 

[root @test /root]# rm -rf testing     <==持續删除該目錄下的所有檔案與目錄

移動

# mv [-u] [來源檔] [目的檔] 

-u  :同樣的,為 update 的簡寫,當來源檔比目的檔還新的時後才會動作! 

[root @test /root]# cp .bashrc bashrc 

[root @test /root]# mv bashrc bashrc.old 

[root @test /root]# mv bashrc bashrc2 /tmp<==将 bashrc 與 bashrc2 移動到 /tmp 這個目錄下!請注意,最後一個才是最終的目标,其它的都是 SOURCE

basename 與dirname

[root @test /root ]# basename [目錄] 

[root @test /root]# basename /usr/local/etc 

etc 

這個指令會将後面的[目錄]僅撷取出最後面的那個目錄或檔案, 

以上面的例子來看, /usr/local/etc 不論 etc 是目錄或檔案, 

他都會被撷取出來,因為他是最後一個出現的咚咚!

[root @test /root ]# dirname [目錄] 

[root @test /root]# dirname /usr/local/etc 

/usr/local 

恰恰與 basename 相反,他僅是秀出來前面的『目錄』部分喔!

檢視檔案内容:

cat  由第一行開始顯示檔案内容 

tac  從最後一行開始顯示,可以看出 tac 是 cat 的倒着寫! 

more 一頁一頁的顯示檔案内容 

less 與 more 類似,但是比 more 更好的是,他可以往前翻頁! 

head 隻看頭幾行 

tail 隻看尾巴幾行 

nl   顯示的時候,順道輸出 行号! 

od   以二進制的方式讀取檔案内容!

具體用法man一下就知道了。

ln

有點像是 Windows 的『快捷方式』一樣,不過, link 的功能要好的多呦! Link 又分為 hard link 與 symbolic link 兩種方式,分别來談一談: 

Hard Links:

剛剛說過,當系統要讀取某一個檔案的時候,就會先去讀 inode table ,然後再根據 inode 的資訊到 block area 去将資料取出來利用!而 hard link 就是直接再建立一個 inode 連結到檔案放置的 block 區塊。也就是說,進行 hard link 的時候,實際上,你的檔案内容不會改變,隻是你在查詢的時候,利用原來的 inode 與後來的 inode 均可被指定到該檔案放置的地點,是以兩個檔案的内容會是一樣的!是以讀取任何一個 inode 的結果都是存取在同一個檔案的内容就是了。不過,這樣一來就有個問題啦,因為 inode 是會連結到 block 區域去的,而『目錄』本身僅消耗 inode 而已,那麼一來的話, hard link 不就不能 link 目錄啦?對的!沒錯! Hard link 有兩個最大的限制: 

不能跨 filesystem ,因為不同的 filesystem 有不同的 inode table 嘛!

不能 link 目錄!

Symbolic Links:

相對于 hard link , Symbolic link 可就好了解多了,基本上,他就是在建立一個獨立的檔案,而這個檔案會讓資料讀取指向他 link 的那個檔案内容!由于隻是利用檔案來做為指向的動作,是以,當來源檔被删除之後,symbolic link 的檔案會『開不了』,會一直說『無法開啟某檔案!』

用法:ln [-s] [來源檔] [目的檔] 

-s  :提供連結檔的連結!如果直接以 ln 不加任何參數的話,那麼就屬于 hard link 啰! 

權限管理:

chown 改變檔案的擁有人 

chgrp 改變檔案的所屬群組 

chmod 改變檔案的可寫、可讀、可執行等屬性 

umask 改變預設的建立檔案或目錄時的屬性(777需要減掉的權限)

chattr 改變檔案的特殊屬性 

lsattr 顯示檔案的特殊屬性!

搜尋檔案或目錄:

檔案的搜尋可就厲害了!因為我們常常需要知道那個檔案放在哪裡,是以來談一談怎麼搜尋吧!在 Linux 底下也有相當優異的搜尋系統呦!通常 find 不很常用的!因為速度慢之外,也很操硬碟!通常我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦!為什麼呢?因為 whereis 與 locate 是利用資料庫來搜尋資料,是以相當的快速,而且并沒有實際的搜尋硬碟,比較省時間啦!

which   檢視可執行檔案的位置 

whereis 檢視檔案的位置 

-b   :隻找 binary 的檔案 

-m   :隻找在說明檔案 manual 路徑下的檔案 

-s   :隻找 source 來源檔案 

-u   :沒有說明檔的檔案!

locate  配合資料庫檢視檔案位置 

updatedb        <==立刻更新資料庫

find    實際搜尋硬碟去查詢檔案名稱(比較慢)

其他指令:

du:統計目錄的占用空間大小

file:檢視檔案類型

touch建立檔案

本文轉自feisky部落格園部落格,原文連結:http://www.cnblogs.com/feisky/archive/2009/11/15/1603304.html,如需轉載請自行聯系原作者