歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 檔案與目錄管理

Linux 檔案與目錄管理

日期:2017/2/28 16:05:40   编辑:Linux教程

1. 相對路徑的妙用

在linux中,只要不是以“/”開頭的都是相對路徑,如:

cd /tmp/123/a

...

cd /tmp/123/b

..

此時如果要回到文件夾a,則使用命令

cd ../a 即可。這樣比較方便

請注意一下路徑並非相對路徑(假設alex是linux的一個用戶):

cd ~alex/123 -----進入alex用戶目錄下的123文件夾,雖然不是以“/”開頭,但是 ~alex代表的意思是用戶alex的家目錄,即路徑為/home/alex,所以第一個字符還是“/”,因此還是絕對路徑,而不是相對路徑。

思考一下,如果你寫了一個軟件,包含3個目錄,a,b,c 但是有的人喜歡安裝在/usr中,有的喜歡安裝在/opt中,那你要怎麼辦呢?當然是使用相對路徑了,這樣就方便的多了。

不過如果是你的寫程序,那麼強烈建議使用絕對路徑,應為絕對路徑雖然相對麻煩一些,但是他絕對正確。

2. 目錄相關指令。

cd (chang directory) 變換工作目錄。

pwd (print working directory) 輸出當前工作目錄 pwd -P (輸出當前實際工作目錄,而非鏈接文件本身的路徑)

# cd /var/mail

# pwd

# pwd -P

mkdir ---建立文件夾

-p ------遞歸建立目錄。

如果 mkdir /tmp/123/123/123

mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 沒辦法直接建立此目錄,此時可以:

mkdir -p /tmp/123/123/123

-m ------建立文件夾的同時,直接設定文件夾權限,而非使用umask的默認權限。

mkdir -m 7777 /tmp/123 ----在/tmp下建立123這個文件夾,給予其滿權限。

rmdir ---刪除空的文件夾

-p ------遞歸刪除目錄(連同上層所有空目錄一起刪除,非空則停止)

3. 執行文件路徑變量PATH

echo $PATH ----輸出path的路徑。

如果一個指令被從$PATH的路徑中移動到了另外一個非$PATH的路徑,而權限並沒有變動,那麼如果直接執行這個指令就不會成功,因為系統在$PATH中找不到的緣故。

此時可以有兩種方法來執行指令:

1. 使用完全路徑來執行這個指令。如:/root/ls -al ---執行/root目錄下的ls這個指令。

2. 將次指令移動後的目錄增加到$PATH路徑中,時$PATH可以識別它。

# PATH="$PATH":/root

4. 復制,移動,刪除,重命名。

復制:cp(copy)

cp -a = cp -pdr

cp -p 連同檔案的屬性一起復制(而非使用默認屬性),常用於備份。

cp -r 持續遞歸賦值

cp -d 如果要復制的文件是鏈接文件(link file),則復制鏈接文件屬性而非檔案本身。如果不加-d,則賦值鏈接文件指向的實際檔案。

cp -s 建立一個符號鏈接文檔,相當於windows中的快捷方式。比如:/var/mail 這就是一個鏈接檔。可以觀察一下。

cp -l 建立一個實體鏈接文檔,inode會增加1。(實體鏈接不可以跨文件系統,不是可以使用目錄)

如果是一般性的賦值,直接使用cp即可,如果是需要備份,則使用cp -a 即可。

rm ---刪除(remove)

-f ---強制性刪除文檔,忽略不存在的信息,即不出現警告信息。

-r ---遞歸刪除,常用於刪除文件夾。

如果要刪除文件夾,可以使用 rm -rf xxxx 這樣整個世界清淨了,不會彈出任何警告信息。。。但是這個刪除法很危險,萬一誤刪可就悲劇了。。。。

如果碰到特殊文件要刪除的話,可以直接使用標注路徑法:如下:

rm -aaa- ----刪除“-aaa-”這個文件。

Try `rm --help' for more information. <== 因為 "-" 是選項嘛!所以系統誤判了!

可以使用 rm -- -aaa- 這個方法刪除,也可以使用

rm ./-aaa- 這樣指明路徑也可以刪除。

mv ---移動檔案(相當於剪切),更改檔案名稱。

mv 123.txt test 將123.txt這個檔案剪切到test這個目錄。

mv 123.txt 456.txt 將123.txt這個檔案更名為456.txt

mv 123.txt 456.txt test 將123.txt和456.txt這兩個檔案都移動到test這個目錄。

basename ---取得當前檔名 如: basename /root/123.txt 得到 123.txt

dirname ----取得當前目錄名 如:dirname /root/123.txt 得到/root

5. 檔案內容查詢,有以下命令。

cat xxx 貓一下,就可以知道檔案中的內容了。如果 cat -n /etc/fstab 查看檔案 /etc/fstab 的內容,並顯示行號

tac xxx 反著貓一下,從最後一行開始倒序顯示檔案內容。

nl xxx 顯示檔案內容並自動加上行號,類似 cat -n xxx

more xxx 一頁一頁的查看檔案的內容,但是不能夠向上翻頁。

less xxx 類似more的功能,但是可以向上翻頁。

head -n xxx 攫取檔案的頭幾行數據

tail -n xxx 攫取檔案的末尾幾行數據

od xxx 查看二進制數據文件。

不過請注意的是,如果使用more或者less來查看文檔內容的話,是可以進行搜索的,向下搜索使用“/123”,即可搜素“123”這個字符串,反向搜索使用“?123”。

當使用“/”或者“?”進行搜素的時候,使用n表示繼續前一個搜素,使用N表示反向繼續前一個搜索。

touch xx 新建空檔案。touch 也可以修改已經存在檔案的時間屬性。如 touch -d "2 days ago" /etc/issue

6. 檔案目錄的默認權限和隱藏權限。

(1)默認權限

umask ----查看檔案目錄的預設權限(linux中檔案默認拿掉x權限)

一般情況下linux中root用戶umask一下得到的結果時 0022 普通用戶為0002

下邊解釋一下,其中第一位是特殊權限,即3種,SUID,SGID,SBIT

SUID

查看一下/usr/bin/passwd的屬性先, ls -l /usr/bin/passwd

顯示結果如下 -rwsr-xr-x 1 root root 22984 JAN 7 2007 /usr/bin/passwd

我們發現“/usr/bin/passwd”這個檔案的擁有者的可執行權限變了,變成了s,而不再時x了。解釋如下:

當s這個特殊權限出現在檔案擁有者的x權限上時,被稱為Set UID權限,建成SUID的特殊權限。

這個權限的意義在於:

1. SUID權限僅僅對二進制文件有效。

2. 此權限在執行者執行期間有效(run-time)

3. 執行者需要有此文件的x權限。

4. 執行者在執行此程序過程中將擁有該程序擁有者的權限。

如果不理解這個概念的話,可以看一下 /usr/bin/passwd 這個執行檔就明白了。

#passwd 是修改用戶密碼的意思。 但是我們可以看到 /etc/shadow 這個檔案的擁有者為root 並且只有root可以讀並且強制寫入。但是我們每個用戶運行passwd還是可以修改自己的密碼,即可以更改/etc/shadow這個檔案,這就是SUID的功勞了。。。

SGID 類似於SUID 只不過,SUID在owner的x權限上,而SGID出現在group的x權限上。

SBIT 查看一下 /tmp 這個目錄的權限即可知道。

1. SBIT 只對目錄有效。

2. SBIT 出現在others的x權限上。以t表示。(SUID和SGID都是以s表示的)

2. SBIT 權限的目錄,如果用戶有此目錄的寫入和執行權限的話(w和x),該用戶建立的檔案只有用戶自己和root才能刪除,其他人是不可以刪除的。

如果按照rwx的分數來對照的話,SUID,SGID,SBIT的分數分別為4,2,1 代號為s,s,t

可以使用數字發賦予權限,也可以使用增減法賦予,如下:

chmod 4777 /root/123.txt 給123.txt 滿權限,並且加上SUID的特殊權限。

chmod u-s /root/123.txt 將123.txt的SUID權限拿掉。

回過頭來,umask的第一位指的就是這3個特殊權限,預設為0,即沒有任何特殊權限。

umask的後3位就比較容易理解了。

是建立目錄或者檔案時需要去掉的權限,比如root用戶為0022,也就是說如果root用戶建立一個目錄的話,默認沒有任何特殊權限,owner具有全部權限,group具有r和x權限,other也具有r和x權限 即為: -rwxr-xr-x

由於檔案默認沒有執行權限,所以root用戶建立檔案的默認權限為 -rw-r--r--

如果想要改變umask的默認值,設定方式為 umask = 0022

(2)隱藏權限和屬性

除了(1)中所講的權限以外,linux中還有一些隱藏的權限和屬性,這些屬性需要使用chattr來修改。

chattr +a /etc/login 給/etc/login這個檔案加上特殊權限,此檔案任何用戶都不能修改,刪除,只能增加內容。(如果要取消這個屬性,chattr -a /etc/login 即可)

chattr +i /etc/login 給/etc/login這個檔案加上特殊權限,此檔案任何用戶都不能修改,刪除和增加如何內容。(如果要取消這個屬性,chattr -i /etc/login 即可)

這兩個屬性只有root用戶可以設定。

查看一個檔案的屬性,可以使用lsattr

lsattr /etc/login 顯示檔案/etc/login的隱藏屬性。

Copyright © Linux教程網 All Rights Reserved