Unix系統(tǒng)中文件管理和文件權(quán)限設(shè)置教程
在 UNIX 中的所有數(shù)據(jù)被都組織成文件。所有文件被都組織成目錄。這些目錄被組織成一個(gè)稱(chēng)為文件系統(tǒng)的樹(shù)狀結(jié)構(gòu)。
當(dāng)您使用 UNIX 時(shí),你將花費(fèi)大部分時(shí)間用一種方式或另一種方式去處理文件。本教程將教你如何創(chuàng)建和刪除文件,復(fù)制和重命名它們,創(chuàng)建鏈接到它們等。
在 UNIX 中有三種基本類(lèi)型的文件:
普通文件: 一個(gè)普通的文件是系統(tǒng)上包含數(shù)據(jù)、 文本或程序指令的文件。在本教程中,你將使用普通文件。
目錄: 目錄存儲(chǔ)特殊和普通文件。 UNIX 目錄對(duì)于熟悉 Windows 或者 Mac OS 的用戶(hù),相當(dāng)于文件夾。
特殊文件: 一些特殊的文件提供訪問(wèn)硬件,例如硬盤(pán)、 CD - ROM 驅(qū)動(dòng)器、 調(diào)制解調(diào)器和以太網(wǎng)適配器。其他特殊文件類(lèi)似于別名或快捷方式,使您能夠訪問(wèn)單個(gè)文件使用不同的名稱(chēng)。
文件列表
為了列出存儲(chǔ)在當(dāng)前目錄中的文件和目錄。使用下面的命令:
復(fù)制代碼代碼如下:
$ls
這里是上述命令的示例輸出:
復(fù)制代碼代碼如下:
$ls
binhosts lib res.03
ch07 hw1pub test_results
ch07.bak hw2res.01 users
docs hw3res.02 work
命令 ls 支持 -l 選項(xiàng),將幫助您獲得有關(guān)列出的文件的詳細(xì)信息:
復(fù)制代碼代碼如下:
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root4096 Nov 25 2007 usr
drwxr-xr-x 2200300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
這里是有關(guān)所有列出的列信息:
第一列: 表示文件類(lèi)型,給出了該文件的權(quán)限。后面是所有類(lèi)型的文件的說(shuō)明。
第二列: 表示文件或目錄所采取的內(nèi)存塊的數(shù)目。
第三列: 表示該文件的所有者。這是創(chuàng)建此文件的 UNIX 用戶(hù)。
第四列: 表示用戶(hù)組。每個(gè) UNIX 用戶(hù)會(huì)有一個(gè)相關(guān)聯(lián)的組。
第五列: 表示文件大小以字節(jié)為單位。
第六列: 表示此文件被創(chuàng)建或最后一次修改的日期和時(shí)間。
第七列: 表示文件或目錄的名稱(chēng)。
在 ls -l 清單示例中,每個(gè)文件的行開(kāi)頭為 d ,- ,或 l。這些字符指示列出的文件的類(lèi)型。
元字符
元字符在 UNIX 中具有特殊的意義。例如 * 和 ? 是元字符。我們使用 * 匹配 0 或多個(gè)字符,問(wèn)號(hào) ? 與單個(gè)字符匹配。
舉個(gè)例子:
復(fù)制代碼代碼如下:
$ls ch*.doc
顯示名稱(chēng)以 ch 開(kāi)頭,并以 .doc 結(jié)束的所有文件:
復(fù)制代碼代碼如下:
ch01-1.doc ch010.doc ch02.docch03-2.doc
ch04-1.doc ch040.doc ch05.docch06-2.doc
ch01-2.doc ch02-1.doc c
在這里 * 作為元字符可以和任何字符相匹配。如果你只是想要顯示以 .doc 結(jié)尾的所有文件,你可以使用以下命令:
復(fù)制代碼代碼如下:
$ls *.doc
隱藏文件
隱藏文件,是第一個(gè)字符是圓點(diǎn)或句點(diǎn)字符 (.) 的文件。 UNIX 程序 ( 包括 shell ) 大多數(shù)使用這些文件來(lái)存儲(chǔ)配置信息。
隱藏文件的一些常見(jiàn)的例子包括文件:
.profile: Bourne shell ( sh ) 初始化腳本。
.kshrc: Korn shell ( ksh ) 初始化腳本。
.cshrc: C shell ( csh ) 初始化腳本。
.rhosts: remote shell 配置文件。
若要列出不可見(jiàn)文件,請(qǐng)指定到 ls -a 選項(xiàng):
復(fù)制代碼代碼如下:
$ ls -a
. .profile docs lib test_results
...rhostshostspub users
.emacsbinhw1 res.01 work
.exrc ch07 hw2 res.02
.kshrcch07.bak hw3 res.03
$
單個(gè)點(diǎn) . : 這個(gè)代表當(dāng)前目錄。
兩個(gè)點(diǎn) .. : 這個(gè)代表父目錄。
創(chuàng)建文件
您可以使用 vi 編輯器來(lái)創(chuàng)建任何 UNIX 系統(tǒng)上的普通文件。你只需要給出以下命令:
復(fù)制代碼代碼如下:
$ vi filename
上面的命令會(huì)打開(kāi)一個(gè)給定的文件名的文件。您將需要按鍵 i 來(lái)進(jìn)入編輯模式。一旦您處于編輯模式下你可以在如下圖所示文件中寫(xiě)入您的內(nèi)容:
This is unix file....I created it for the first time.....
I"m going to save this content in this file.
一旦你做完上一步,請(qǐng)執(zhí)行以下步驟:
按鍵 esc 退出編輯模式。
一起按兩個(gè)鍵 Shift + ZZ 完全退出文件。
現(xiàn)在你會(huì)有一個(gè)已經(jīng)創(chuàng)建好的叫 filename 的文件在當(dāng)前目錄中。
復(fù)制代碼代碼如下:
$ vi filename
編輯文件
您可以使用 vi 編輯器編輯現(xiàn)有的文件。我們將在一個(gè)單獨(dú)的教程中詳細(xì)介紹。但總之,您可以打開(kāi)現(xiàn)有的文件,如下所示:
復(fù)制代碼代碼如下:
$ vi filename
一旦文件被打開(kāi),您將能在編輯模式下按鍵 i ,然后您可以如您所想的編輯文件。如果您想要在一個(gè)文件里左右移動(dòng)首先您需要按下鍵 esc 退出編輯模式來(lái),然后您可以使用下列鍵在文件內(nèi)部移動(dòng):
l 鍵移動(dòng)到右側(cè)。
h 鍵移動(dòng)到左側(cè)。
k 鍵移動(dòng)到上面。
j 鍵移動(dòng)到下面。
使用上面的鍵您可以將光標(biāo)放在任何您想要編輯的地方。一旦您定位好然后您可以使用 i 鍵來(lái)在編輯模式下編輯該文件。當(dāng)您編輯完文件您可以按下 esc 鍵然后按下 Shift + ZZ 鍵來(lái)從文件完全的退出。
顯示文件的內(nèi)容
你可以使用 cat 命令來(lái)查看文件的內(nèi)容。以下是簡(jiǎn)單的示例來(lái)查看上面創(chuàng)建文件的內(nèi)容:
復(fù)制代碼代碼如下:
$ cat filename
This is unix file....I created it for the first time.....
I"m going to save this content in this file.
你可以通過(guò)按如下方式使用 -b 選項(xiàng)和 cat 命令顯示行號(hào):
復(fù)制代碼代碼如下:
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I"m going to save this content in this file.
統(tǒng)計(jì)文件中字?jǐn)?shù)
你可以使用 wc 命令來(lái)獲取一個(gè)文件中的總的行數(shù),字?jǐn)?shù)和字符數(shù)。以下是簡(jiǎn)單的示例來(lái)查看有關(guān)上面創(chuàng)建的文件的信息:
復(fù)制代碼代碼如下:
$ wc filename
2 19 103 filename
這里是所有四個(gè)列的細(xì)節(jié):
第一列: 代表文件中的行數(shù)。
第二列: 代表文件中的字?jǐn)?shù)。
第三列: 代表文件中的字符數(shù)。這是文件的實(shí)際大小。
第四列: 代表文件名。
在獲取有關(guān)這些文件的信息的時(shí)候,你可以給多個(gè)文件。這里是簡(jiǎn)單的語(yǔ)法:
復(fù)制代碼代碼如下:
$ wc filename1 filename2 filename3
復(fù)制文件
要使用 cp 命令文件的副本。該命令的基本語(yǔ)法如下:
復(fù)制代碼代碼如下:
$ cp source_file destination_file
下面是創(chuàng)建一個(gè)已有文件 filename 的副本的例子。
復(fù)制代碼代碼如下:
$ cp filename copyfile
現(xiàn)在你會(huì)發(fā)現(xiàn)多了一個(gè)文件 copyfile 在您的當(dāng)前目錄。此文件與原始文件 filename 完全相同。
刪除文件
若要更改文件的名稱(chēng)使用 mv 命令。其基本的語(yǔ)法是:
復(fù)制代碼代碼如下:
$ mv old_file new_file
下面是把現(xiàn)有文件 filename 重命名為 newfile 的示例:
復(fù)制代碼代碼如下:
$ mv filename newfile
mv 命令將現(xiàn)有文件完全移動(dòng)到新的文件。所以在這種情況下你只能發(fā)現(xiàn) newfile 在你當(dāng)前的目錄中。
刪除文件
若要?jiǎng)h除現(xiàn)有文件使用 rm 命令。其基本的語(yǔ)法是:
復(fù)制代碼代碼如下:
$ rm filename
警告: 要?jiǎng)h除一個(gè)文件可能會(huì)很危險(xiǎn),因?yàn)樗赡馨杏玫男畔ⅰK栽谑褂么嗣顣r(shí)要小心。這推薦使用 -i 選項(xiàng)和 rm 命令。
以下是完全刪除現(xiàn)有文件 filename 的示例:
復(fù)制代碼代碼如下:
$ rm filename
您可以在一行中刪除多個(gè)文件,如下所示:
復(fù)制代碼代碼如下:
$ rm filename1 filename2 filename3
標(biāo)準(zhǔn) UNIX 流
在正常情況下每個(gè) UNIX 程序在它啟動(dòng)時(shí)打開(kāi)的三個(gè)流 ( 文件 ):
stdin : 這指作為標(biāo)準(zhǔn)輸入,關(guān)聯(lián)文件描述符為 0。它也可以表示為 STDIN 。UNIX 程序默認(rèn)從 STDIN 中讀取。
stdout : 這指作為標(biāo)準(zhǔn)輸出,關(guān)聯(lián)文件描述符為 1。它也可以表示為 STDOUT 。UNIX 程序默認(rèn)從 STDOUT 中讀取。
stderr : 這指作為標(biāo)準(zhǔn)錯(cuò)誤,關(guān)聯(lián)文件描述符為 2。它也可以表示為 STDERR 。UNIX 程序會(huì)將所有的錯(cuò)誤信息寫(xiě)入 STDERR。
文件權(quán)限
文件所有權(quán)是 UNIX 的一個(gè)重要的組成部分,提供了一種安全的方法來(lái)存儲(chǔ)文件。在 UNIX 中每個(gè)文件有以下屬性:
所有者權(quán)限:所有者的權(quán)限決定文件的所有者可以對(duì)文件執(zhí)行的操作。
組權(quán)限:組權(quán)限決定了屬于該組的成員對(duì)他所擁有的文件能夠執(zhí)行的操作。
其他人權(quán)限:其他人權(quán)限表示其他所有人對(duì)于該文件能夠進(jìn)行的操作。
權(quán)限表示符
當(dāng)使用 ls -l 命令的時(shí)候,會(huì)將與文件相關(guān)的各種權(quán)限展示出來(lái),如下:
復(fù)制代碼代碼如下:
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
輸出的第一列表示的是與文件或者目錄相關(guān)的訪問(wèn)模式或者權(quán)限。
權(quán)限被分為三組,組中的每個(gè)位置代表一個(gè)特定的權(quán)限,這個(gè)順序是:讀(r)、寫(xiě)(w)和執(zhí)行(x):
前三個(gè)字符 (2-4) 表示文件的所有者的權(quán)限。例如 -rwxr-xr-- 代表,文件的所有者擁有讀 (r)、寫(xiě) (w) 和執(zhí)行 (x) 的權(quán)限。
第二組的三個(gè)字符 (5-7) 包含了該文件所屬組的權(quán)限。例如 -rwxr-xr-- 表示了所屬組擁有讀 (r) 和執(zhí)行 (x) 的權(quán)限,但沒(méi)有寫(xiě)權(quán)限。
最后一組三個(gè)字符 (8-10) 代表其他人的權(quán)限。例如 -rwxr-xr-- 代表其他人只有讀 (r) 的權(quán)限。
文件訪問(wèn)模式
文件的權(quán)限是 UNIX 系統(tǒng)安全性的第一道防線。UNIX 權(quán)限的基本組成部分是讀,寫(xiě),執(zhí)行權(quán)限,如下所述:
讀:分配對(duì)文件的內(nèi)容進(jìn)行讀取和查看文件的權(quán)限。
寫(xiě):分配對(duì)文件的內(nèi)容進(jìn)行修改或者刪除的權(quán)限。
執(zhí)行:允許用戶(hù)將該文件作為一個(gè)程序進(jìn)行執(zhí)行的權(quán)限。
目錄訪問(wèn)模式
目錄訪問(wèn)模式采用和其他文件用相同的方式組織。但是有一些差異,還是需要提到:
讀:訪問(wèn)目錄意味著用戶(hù)可以讀取目錄下的內(nèi)容。用戶(hù)可以查看目錄內(nèi)的文件名。
寫(xiě):這個(gè)權(quán)限意味著用戶(hù)可以在目錄下面刪除或者新建文件。
執(zhí)行:執(zhí)行一個(gè)目錄并沒(méi)有真正的意義,因此將它當(dāng)作可以遍歷目錄的權(quán)限。
用戶(hù)為了執(zhí)行 ls 或者 cd 命令就必須先訪問(wèn)了 bin 目錄。
改變權(quán)限
改變文件或目錄的權(quán)限,您可以使用 chmod(change mode)命令。有兩種方法可以使用 chmod:符號(hào)模式和絕對(duì)模式。
符號(hào)模式中使用 chmod
對(duì)于初學(xué)者來(lái)說(shuō)使用符號(hào)模式是最簡(jiǎn)單的來(lái)修改文件或目錄的權(quán)限方法。可以用下表中的符號(hào)來(lái)添加、刪除或指定你想要設(shè)置的權(quán)限。
如下是以 testfile 文件為示例。對(duì) testfile 文件運(yùn)行 ls -l 就會(huì)像下面一樣顯示文件的權(quán)限:
復(fù)制代碼代碼如下:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
接下來(lái)將前面表格中的 chmod 命令都對(duì) testfile 運(yùn)行一下,下面的是在 ls -l 運(yùn)行之后,你可以看到文件權(quán)限的改變:
復(fù)制代碼代碼如下:
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
下面將展示如何將上面的命令組合成一行:
復(fù)制代碼代碼如下:
$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
chmod 命令中使用絕對(duì)權(quán)限
用chmod命令修改權(quán)限的第二種方法,是使用一個(gè)數(shù)字來(lái)指定文件的一些列權(quán)限。
每個(gè)權(quán)限被分配了一個(gè)數(shù)值,如下表所示, 并且給每個(gè)權(quán)限集的總和提供了一個(gè)數(shù)值。
如下是針對(duì) testfile 文件的示例。運(yùn)行 ls -l 命令會(huì)顯示與該文件相關(guān)的權(quán)限如下:
復(fù)制代碼代碼如下:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
對(duì) testfile 運(yùn)行上面表格中每個(gè) chmod 示例命令,如下是在 ls -l 之后的,你可以從下面命令中看出權(quán)限的改變情況:
復(fù)制代碼代碼如下:
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
改變所有者和所屬組
在 UNIX 上創(chuàng)建一個(gè)帳戶(hù)時(shí),系統(tǒng)會(huì)給每個(gè)用戶(hù)分配一個(gè)所有者 ID 和組 ID。所有上面提到的權(quán)限也會(huì)基于所有者和組進(jìn)行分配。
如下的兩個(gè)命令可以改變一個(gè)文件的所有者和組:
chown:chown 表示的是 “change owner”,并且它是被用來(lái)改變一個(gè)文件的所有者。
chgrp:chgrp 表示的是 “change group”,并且它是被用來(lái)一個(gè)文件所屬的組。
改變所有者關(guān)系
chown 命令用來(lái)改變一個(gè)文件的所有者,它的基本語(yǔ)法如下:
復(fù)制代碼代碼如下:
$ chown user filelist
上面命令中的 user 既可以是系統(tǒng)中的用戶(hù)名,也可以是系統(tǒng)中用戶(hù)的 id(uid)。 示例:
復(fù)制代碼代碼如下:
$ chown amrood testfile
改變 testfile 文件的所有者為 amrood 用戶(hù)。
注意:超級(jí)用戶(hù),root 用戶(hù),擁有不受限制的權(quán)限,能夠更改所有文件的所有者,但是普通用戶(hù)只能修改他們所擁有的文件的所有者。
改變組關(guān)系
chgrp 命令被用來(lái)修改文件所屬的組。基本語(yǔ)法如下:
復(fù)制代碼代碼如下:
$ chgrp group filelist
上面命令中的 group 既可以是系統(tǒng)中存在的組的名稱(chēng),也可以是系統(tǒng)中存在的組的 ID(GID)。
示例:
復(fù)制代碼代碼如下:
$ chgrp special testfile
改變給定的文件的組為 special 組。
SUID 和 SGID 文件權(quán)限
通常執(zhí)行一個(gè)命令時(shí),為了完成該任務(wù)它必須擁有某些特殊的權(quán)限。
舉一個(gè)例子,當(dāng)你使用 passwd 命令改變了你的密碼后,您的新密碼存儲(chǔ)在文件 /etc/shadow 中。
作為一個(gè)普通用戶(hù),出于安全原因你沒(méi)有讀或?qū)懺L問(wèn)這個(gè)文件的權(quán)限,但是當(dāng)你改變你的密碼時(shí),你需要擁有對(duì)這個(gè)文件寫(xiě)權(quán)限。這意味著 passwd 程序必須給你額外的權(quán)限,以便您可以編寫(xiě)文件 /etc/shadow,也就是需要額外的權(quán)限。
通過(guò)設(shè)置用戶(hù) ID(SUID)和組 ID(SGID) 位可以給程序額外的權(quán)限。
當(dāng)您執(zhí)行一個(gè)啟用了 SUID 的程序,你繼承了程序所有者的權(quán)限。啟動(dòng)改程序的用戶(hù)就可以不用設(shè)置 SUID 直接運(yùn)行該程序。
這對(duì)于 SGID 同樣是適用的。通常程序是按組的權(quán)限進(jìn)行執(zhí)行,除非你的組改變了該程序所屬組的擁有者。
如果 SUID 和 SGID 權(quán)限是可用的,它們將會(huì)以小寫(xiě)的 “s” 出現(xiàn)。SUID 的 “s” 位通常位于權(quán)限中所有者執(zhí)行權(quán)限的旁邊。如下:
復(fù)制代碼代碼如下:
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
上面的顯示了 SUID 被設(shè)置了并且該命令被 root 用戶(hù)所擁有。在使用大寫(xiě)字母 S 而不是小寫(xiě)字母表示執(zhí)行位沒(méi)有設(shè)置。
如果對(duì)一個(gè)目錄設(shè)置了防刪除位(sticky bit),那么只有你是如下任意一種用戶(hù)時(shí)你才可以刪除該文件:
該目錄的擁有者
被刪除文件的擁有者
超級(jí)用戶(hù),root 用戶(hù)
你可以使用如下的方式設(shè)置任何目錄的 SUID 和 SGID 位。
復(fù)制代碼代碼如下:
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
相關(guān)文章:
1. win7文件管理常見(jiàn)問(wèn)題解決2. 對(duì)話(huà) UNIX: Squirrel--可移植的 shell 和腳本語(yǔ)言3. SCO UNIX講座(2)4. 把它藏起來(lái) Windows7文件管理新法5. Win11 22H2系統(tǒng)自動(dòng)彈出文件管理器怎么辦?Win11 22H2文件管理器自動(dòng)出現(xiàn)解決方法6. UNIX 網(wǎng)絡(luò)分析7. win11文件管理器位置介紹8. Longhorn效仿Unix安全性9. linux文件管理命令實(shí)例分析【權(quán)限、創(chuàng)建、刪除、復(fù)制、移動(dòng)、搜索等】10. linux文件管理命令實(shí)例分析【顯示、查看、統(tǒng)計(jì)等】
