嵌入式Linu期末復(fù)習(xí)_第1頁(yè)
嵌入式Linu期末復(fù)習(xí)_第2頁(yè)
嵌入式Linu期末復(fù)習(xí)_第3頁(yè)
嵌入式Linu期末復(fù)習(xí)_第4頁(yè)
嵌入式Linu期末復(fù)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

P8文件屬性

Linux中的文件屬性如圖1.6如示。

可讀可寫可執(zhí)行

首先,Linux中文件的擁有者可以把文件的訪問(wèn)屬性設(shè)成3種不同的訪問(wèn)權(quán)限:

可讀(r)、可寫(w)和可執(zhí)行(x)。文件又有3個(gè)不同的用戶級(jí)別:文件擁有者(u)、

所屬的用戶組(g)和系統(tǒng)里的其他用戶(。)。

第一個(gè)字符顯示文件的類型。

■表示普通文件。

■“d”表示目錄文件。

■“1”表示鏈接文件。

■“c”表示字符設(shè)備。

■“b”表示塊設(shè)備。

■“p”表示命名管道,比如FIFO文件(FirstInFirstOut,先進(jìn)先出)。

■“f”表示堆棧文件,比如LIFO文件(LastInFirstOut,后進(jìn)先出)。

■“s”表示套接字。

第一個(gè)字符之后有三個(gè)三位字符組:

■第一個(gè)三位字符組表示文件擁有者(u)對(duì)該文件的權(quán)限。

■第二個(gè)三位字符組表示文件用戶組(g)對(duì)該文件的權(quán)限。

■第三個(gè)三位字符組表示系統(tǒng)其他用戶(。)對(duì)該文件的權(quán)限。

■若該用戶組對(duì)此沒(méi)有權(quán)限,一般顯示字符。

目錄權(quán)限和文件權(quán)限有一定的區(qū)別。對(duì)于目錄而言,I?代表允許列出該目錄下的

文件和子目錄,W代表允許生成和刪除該目錄下的文件,X代表允許訪問(wèn)該目錄

P14用戶切換(SU)

(1)作用。

變更為其他使用者的身份,主要用于將普通用戶身份轉(zhuǎn)變?yōu)槌?jí)用戶,而且需輸

入相應(yīng)用戶密碼。

(2)格式。

su[選項(xiàng)][使用者]

其中的使用者為要變更的對(duì)應(yīng)使用者。

(3)常見(jiàn)參數(shù)。主要選項(xiàng)參數(shù)如表2』su命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-1,--login為該使用者重新登錄,大部分環(huán)境變量(如HOME、SHELL和USER等)和

工作目錄都是以該使用者(USER)為主。若沒(méi)有指定USER,缺省情況是root

-m,-p執(zhí)行su時(shí)不改變環(huán)境變量

-c,-command變更賬號(hào)為USER的使用者,執(zhí)行指令(command)后再變回原來(lái)使用者

(4)使用示例。

[david@localhost~]$su-root

Password:

[root@localhost

示例通過(guò)su命令將普通用戶變更為root用戶,并使用選項(xiàng)攜帶root環(huán)境變量。

(5)使用說(shuō)明。

■在將普通用戶變更為root用戶時(shí)建議使用選項(xiàng),這樣可以將root的環(huán)境變量

和工作目錄同時(shí)帶入,否則在以后的使用中可能會(huì)由于環(huán)境變量的原因而出錯(cuò)。

■在轉(zhuǎn)變?yōu)閞oot權(quán)限后,提示符變?yōu)?。

P15用戶管理(useradd和passwd)

(1)作用。

①useradd:添加用戶賬號(hào)。

②passwd:更改對(duì)應(yīng)用戶的賬號(hào)密碼。

(2)格式。

①useradd:useradd[選項(xiàng)]用戶名。

②passwd:passwd[選項(xiàng)J[用戶名]。

其中的用戶名為修改賑號(hào)密碼的用戶,若不帶用戶名,缺省為更改當(dāng)前使用者的密碼。

(3)常用參數(shù)

①useradd主要選項(xiàng)參數(shù)如表2.3所示。uscradd命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-g指定用戶所屬的群組

-m自動(dòng)建立用戶的登入目錄

-n取消建立以用戶名稱為名的群組

②passwd:一般很少使用選項(xiàng)參數(shù)。

(4)使用實(shí)例。

(root0localhostuseradddavid

(root0localhostpasswddavid

Newpassword:(輸入密碼)

Retypenewpassword:(再輸入一次密碼,以確認(rèn)輸入的正確性)

passwd:allauthenticationtokensupdatedsuccessfully

[root@localhostsu-david

[david@localhost

[david@localhost~]$pwd(查看當(dāng)前目錄)

/home/david(該用戶的工作目錄)

實(shí)例中先添加了用戶名為david的用戶,接著又為該用戶設(shè)置了賬號(hào)密碼。

從su的命令可以看出,該用戶添加成功,其工作目錄為“/home/david”。

(5)使用說(shuō)明。

■在添加用戶時(shí)I這兩個(gè)命令是一起使用的,其中,useradd必須用root的權(quán)限。

而且useradd指令所建立的賬號(hào),實(shí)際上是保存在“/etc/passwd”文本文件中,

文件中每一行包含一個(gè)賬號(hào)信息。

■在缺省情況下,useradd所做的初始化操作包括在“/home”目錄下為對(duì)應(yīng)賬

號(hào)建立一個(gè)同名的主目錄,并且還為該用戶單獨(dú)建立一個(gè)與用戶名同名的組。

■adduser只是useradd的符號(hào)鏈接(關(guān)于符號(hào)鏈接的概念在本節(jié)后面會(huì)有介紹),

兩者是相同的。

■passwd還可用于普通用戶修改賬號(hào)密碼,Linux并不采用類似Windows的密

碼回顯(顯示為*號(hào)),所以輸入的這些字符用戶是看不見(jiàn)的。密碼最好包括

字母、數(shù)字和特殊符號(hào),并且設(shè)成6位以上。

P17系統(tǒng)管理命令(ps和kill)

(1)作用。

①ps:顯示當(dāng)前系統(tǒng)中由該用戶運(yùn)行的進(jìn)程列表。

②kill:輸出特定的信號(hào)給指定PID(進(jìn)程號(hào))的進(jìn)程,并根據(jù)該信號(hào)完成指定

的行為。其中可能的信號(hào)有進(jìn)程掛起、進(jìn)程等待、進(jìn)程終止等。

(2)格式。

①ps:ps[選項(xiàng)]。②kill:kill[選項(xiàng)]進(jìn)程號(hào)(PID)。

kill命令中的進(jìn)程號(hào)為信號(hào)輸出的指定進(jìn)程的進(jìn)程號(hào),當(dāng)選項(xiàng)是缺省時(shí)為輸出終

止信號(hào)給該進(jìn)程.

(3)常見(jiàn)參數(shù)。

①ps主要選項(xiàng)參數(shù)如表2.5所示。ps命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-ef查看所有進(jìn)程及其PID(進(jìn)程號(hào))、系統(tǒng)時(shí)間、命令詳細(xì)目錄、執(zhí)行者等

-aux除可顯示vf所有內(nèi)容外,還可顯示CPU及內(nèi)存占用率、進(jìn)程狀態(tài)

-w顯示加寬并且可以顯示較多的信息

②kill主要選項(xiàng)參數(shù)如表2.6所示。kill命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-S將指定信號(hào)發(fā)送給進(jìn)程

-P打印出進(jìn)程號(hào)(PID),但并不送出信號(hào)

-1列出所有可用的信號(hào)名稱

(4)使用實(shí)例。

[root@localhostroot]#ps-ef

UIDPIDPPIDCSTIMETTYTIMECMD

root1002005?00:00:05init

root2102005?00:00:00[keventd]

root3002005?00:00:00[ksoftirqd_CPU0]

400200500:00:00[ksoftirqd_CPUl]

root7421102005?00:00:00/usr/local/bin/ntpd-c/etc/ntp.

root2178721739017:16pts/100:00:00grepntp

[root@localhostroot]#kill-97421(殺死進(jìn)程)

〔root@localhostroot]#ps-ef|grepntp

root2178921739017:16pts/100:00:00grepntp

該實(shí)例中首先查看所有進(jìn)程,并終止進(jìn)程號(hào)為7421的ntp進(jìn)程,之后再次查看時(shí)

已經(jīng)沒(méi)有該進(jìn)程號(hào)的進(jìn)程。

(5)使用說(shuō)明。

■ps在使用中通??梢耘c其他一些命令結(jié)合起來(lái)使用,主要作用是提高效率。

■ps選項(xiàng)中的參數(shù)w可以寫多次,通常最多寫3次,它的含義為加寬3次,

這足以顯示很長(zhǎng)的命令行了。例如:ps-auxwwwo

P19文件系統(tǒng)掛載命令(mount)

(1)作用。

掛載文件系統(tǒng),它的使用權(quán)限是超級(jí)用戶或/etc/fstab中允許的使用者。正如1.2.1

節(jié)中所述,掛載是指在分區(qū)和目錄之間建立映射關(guān)系的過(guò)程,而掛載點(diǎn)是指掛載在文

件樹中的位置。使用mount命令可以把文件系統(tǒng)掛載到相應(yīng)的目錄下,并且由于Linux

中把設(shè)備都當(dāng)成文件一樣使用,因此,mount命令也可以掛載不同的設(shè)備。

通常,在Linux下“/mnt”目錄是專門用于掛載不同的文件系統(tǒng)的,它可以在該

目錄下新建不同的子目錄來(lái)掛載不同的設(shè)備文件系統(tǒng)。

(2)格式。

mount[選項(xiàng)][類型]設(shè)備文件名掛載點(diǎn)目錄

其中的類型是指設(shè)備文件的類型。

(3)常見(jiàn)參數(shù)

mount常見(jiàn)參數(shù)如表2.8所示。mount命令選項(xiàng)常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-a依照/etc/fstab的內(nèi)容裝裁所有相關(guān)的硬盤

-1列出當(dāng)前已掛載的設(shè)備、文件系統(tǒng)名稱和掛載點(diǎn)

-t類型將后面的設(shè)備以指定類型的文件格式裝載到掛載點(diǎn)上。常見(jiàn)的類型有前面介紹過(guò)

的幾種:vfat、ext3、ext2>iso9660、nfs等

-f通常用于除錯(cuò)。它會(huì)使mount不執(zhí)行實(shí)際掛上的動(dòng)作,而是模擬整個(gè)掛上的過(guò)程,通常會(huì)和

-V一起使用

(4)使用實(shí)例。

使用mount命令主要通過(guò)以下幾個(gè)步驟。

①確認(rèn)是否為L(zhǎng)inux可以識(shí)別的文件系統(tǒng),Linux可識(shí)別的文件系統(tǒng)只要是以下兒種。

■Windows95/98常用的FAT32文件系統(tǒng):vfat。

■WindowsNT/2000的文件系統(tǒng):ntfs。

■OS/2用的文件系統(tǒng):hpfso

■Linux用的文件系統(tǒng):ext2、ext3、nfs?

■CD-ROM光盤用的文件系統(tǒng):iso9660。

②確定設(shè)備的名稱,可通過(guò)使用命令"fdisk-1”查看。

③查找掛載點(diǎn)。

必須確定掛載點(diǎn)已經(jīng)存在,也就是在“/mnt”下的相應(yīng)子目錄已經(jīng)存在,一般建

議在“/mnt”下新建幾個(gè)如“/mnt/windows",“/mnt/usb”的子目錄,現(xiàn)在有些新版本

的Linux(如Fedora、Ubuntu、紅旗Linux、中軟Linux、MandrakeLinux)都可自動(dòng)

掛載文件系統(tǒng),RedHatLinux僅可自動(dòng)掛載光驅(qū)。

④掛載文件系統(tǒng)如下所示。

[root@locaohostmkdir-p/mnt/win/c

[root@locaohostmount-tvfat/dev/hdal/mnt/win/c

[root@localhostcd/mnt/win/c

24.s03e01.pdtv.xvid-sfm.rmvbDocumentsandSettingsProgramFiles

24.s03e02.pdtv.xvid-sfm.rmvbDownloadsRecycled

C盤是原先筆者Windows系統(tǒng)的啟動(dòng)盤??梢?jiàn),在掛載了C盤之后,可直接訪

問(wèn)Windows下的C盤的內(nèi)容。

⑤在使用完該設(shè)備文件后可使用命令umount將其卸載。

[root@localhostumount/mnt/win/c

[root@localhost-]#cd/mnt/win/c

[root@localhostIs/mnt/win/c

可見(jiàn),此時(shí)目錄“/mnt/win/c”下為空。Windows下的C盤已被成功卸載。

P21cd和Is

1.cd

(1)作用。

改變當(dāng)前工作目錄。

(2)格式。

cd[路徑]

其中的路徑為要改變的工作目錄,可為相對(duì)路徑或絕對(duì)路徑。

(3)使用實(shí)例。

(root@localhostcd/home/david/

[root0localhostdavid]#pwd

[root@localhostdavid]#/home/david/

該實(shí)例中變更工作目錄為“/home/david/",在后面的“pwd”(顯示當(dāng)前目錄)的結(jié)果中可

以看出。

(4)使用說(shuō)明。

■該命令將當(dāng)前目錄改變至指定路徑的目錄。若沒(méi)有指定路徑,則回到用戶的

主目錄(例如:”/home/david”為用戶david的主目錄)。為了改變到指定目

錄,用戶必須擁有對(duì)指定目錄的執(zhí)行和讀權(quán)限。

■該命令可以使用通配符。

■使用“cd可以回到前次工作目錄。

■代表當(dāng)前目錄,代表上級(jí)目錄。

2.Is

(1)作用

列出目錄和文件的信息。

(2)格式。

1s[選項(xiàng)][文件]

其中文件選項(xiàng)為指定查看指定文件的相關(guān)內(nèi)容,若未指定文件,默認(rèn)查看當(dāng)前目

錄下的所有文件。

(3)常見(jiàn)參數(shù)。

1s主要選項(xiàng)參數(shù)見(jiàn)表2.9所示。1s命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-1?-format=single-column一行輸出一個(gè)文件(單列輸出)

-a,-all列出目錄中所有文件,包括以開頭的隱藏文件

-d將目錄名和其他文件一樣列出,而不是列出目錄的內(nèi)容

-l,-fbrmat=long,除每個(gè)文件名外,增加顯示文件類型、權(quán)限、硬鏈接數(shù)、所有者名、

-fbrmat=verbose組名、大?。˙yte)及時(shí)間信息(如未指明是其他時(shí)間即指修改時(shí)間)

-f不排序目錄內(nèi)容,按它們?cè)诖疟P上存儲(chǔ)的順序列出

(4)使用實(shí)例。

[david@localhosttest]$Is-1

total220

drwxr-xr-x2rootroot4096Mar312005bin

drwxr-xr-x3rootroot4096Apr32005boot

-rw-r——r——1rootroot0Apr242002test.run

該實(shí)例查看當(dāng)前目錄下的所有文件,并通過(guò)選項(xiàng)“-1”顯示出詳細(xì)信息。

顯示格式說(shuō)明如下。

文件類型與權(quán)限鏈接數(shù)文件屬主文件屬組文件大小修改的時(shí)間名字

(5)使用說(shuō)明。

■在1s的常見(jiàn)參數(shù)中,-1(長(zhǎng)文件名顯示格式)的選項(xiàng)是最為常見(jiàn)的??梢栽?/p>

細(xì)顯示出各種信息。

■若想顯示出所有開頭的隱藏文件,可以使用-a,這在嵌入式開發(fā)中很常用。

P23cat

(1)作用。

連接并顯示指定的一個(gè)或多個(gè)文件的有關(guān)信息。

(2)格式。

cat[選項(xiàng)]文件1文件2“?

其中的文件1、文件2為要顯示的多個(gè)文件。

(3)常見(jiàn)參數(shù)。

cat命令的常見(jiàn)參數(shù)如表2.11所示。cat命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-n由第一行開始對(duì)所有輸出的行數(shù)編號(hào)

-b和-n相似,只不過(guò)對(duì)于空白行不編號(hào)

(4)使用實(shí)例。

(david@localhost~]$cat-nhellol.chello2.c

1#include<stdio.h>

2voidmain()

3(

4printf("Hello!Thisismyhome!\nH);

5}

6#include<stdio.h>

7voidmain()

8(

9printf(*'Hello!Thisisyourhome!\nn);

10)

在該實(shí)例中,指定對(duì)hellol.c和hello2.c進(jìn)行輸出,并指定行號(hào)。

P24cp、mv和rm

(1)作用。

①cp:將給出的文件或目錄復(fù)制到另一文件或目錄中。

②mv:為文件或目錄改名或?qū)⑽募梢粋€(gè)目錄移入另一個(gè)目錄中。

③rm:刪除一個(gè)目錄中的一個(gè)或多個(gè)文件或目錄。

(2)格式。

①cp:cp[選項(xiàng)]源文件或目錄目標(biāo)文件或目錄

②mv:mv[選項(xiàng)]源文件或目錄目標(biāo)文件或目錄

③nn:rm[選項(xiàng)]文件或目錄

(3)常見(jiàn)參數(shù)。

①cp主要選項(xiàng)參數(shù)如表2.12所示。cp命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-a保留鏈接、文件屬性,并復(fù)制其子目錄,其作用等于dpr選項(xiàng)的組合

-d復(fù)制時(shí)保留鏈接

-f刪除已經(jīng)存在的S標(biāo)文件而不提示

-i在覆蓋目標(biāo)文件之前將給出提示要求用戶確認(rèn)。回答y時(shí)目標(biāo)文件將被覆蓋,而且是交互式復(fù)制

-P此時(shí)cp除復(fù)制源文件的內(nèi)容外,還將把其修改時(shí)間和訪問(wèn)權(quán)限也復(fù)制到新文件中

-r若給出的源文件是?個(gè)目錄文件,此時(shí)cp將遞歸復(fù)制該目錄下所有的子目錄和文件。此時(shí)目標(biāo)文件

必須為一個(gè)目錄名

②mv主要選項(xiàng)參數(shù)如表2.13所示。mv命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-i若mv操作將導(dǎo)致對(duì)已存在的目標(biāo)文件的覆蓋,此時(shí)系統(tǒng)詢問(wèn)是否重寫,并要求用戶回答y或n,

這樣可以避免誤覆蓋文件

-f禁止交互操作。在mv操作要覆蓋某已有的目標(biāo)文件時(shí)不給任何指示,在指定此選項(xiàng)后,

i選項(xiàng)將不再起作用

③rm主要選項(xiàng)參數(shù)如表2.14所示。nn命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-i進(jìn)行交互式刪除

-f忽略不存在的文件,但從不給出提示

-r指示rm將參數(shù)中列出的全部目錄和子目錄均遞歸地刪除

(4)使用實(shí)例。

①卬

(root@wwwhello]#cp-a./my/why/./

(root@wwwhello]#Is

mywhy

該實(shí)例使用-a選項(xiàng)將“/my/why”目錄下的所有文件復(fù)制到當(dāng)前目錄下。而此時(shí)

在原先目錄下還有原有的文件。

②mv

[root@wwwhello]#mv-i./my/why/./

[rootQwwwhello]#Is

mywhy

該實(shí)例中把,,/my/why”目錄下的所有文件移至當(dāng)前目錄,則原目錄下文件被自動(dòng)刪除。

③rm

[root@wwwhello]#rm-r-i./why

rm:descendintodirectory*./why*?y

rm:remove*./why/my.c*?y

rm:removedirectory*./why*?y

該實(shí)例使用“-r”選項(xiàng)刪除“./why”目錄下所有內(nèi)容,系統(tǒng)會(huì)進(jìn)行確認(rèn)是否刪除。

(5)使用說(shuō)明。

①卬:該命令把指定的源文件復(fù)制到目標(biāo)文件,或把多個(gè)源文件復(fù)制到目標(biāo)目錄中。

②mv

■該命令根據(jù)命令中第二個(gè)參數(shù)類型的不同(是目標(biāo)文件還是目標(biāo)目錄)來(lái)判

斷是重命名還是移動(dòng)文件,當(dāng)?shù)诙€(gè)參數(shù)類型是文件時(shí),mv命令完成文件

重命名,此時(shí),它將所給的源文件或目錄重命名為給定的目標(biāo)文件名;

■當(dāng)?shù)诙€(gè)參數(shù)是已存在的目錄名稱時(shí),mv命令將各參數(shù)指定的源文件均移

至目標(biāo)目錄中;

■在跨文件系統(tǒng)移動(dòng)文件時(shí),mv先復(fù)制,再將原有文件刪除,而連至該文件

的鏈接也將丟失。

③rm

■如果沒(méi)有使用-r選項(xiàng),則rm不會(huì)刪除目錄:

■使用該命令時(shí)一旦文件被刪除,它是不能被恢復(fù)的,所以最好使用-i參數(shù)。

P27chmod

7.chmod

(1)作用。

改變文件的訪問(wèn)權(quán)限。

(2)格式。

chmod可使用符號(hào)標(biāo)記進(jìn)行更改和八進(jìn)制數(shù)指定更改兩種方式,因此它的格式也

有兩種不同的形式。

①符號(hào)標(biāo)記:chmod[選項(xiàng)]…符號(hào)權(quán)限[符號(hào)權(quán)限]…文件

其中的符號(hào)權(quán)限可以指定為多個(gè),也就是說(shuō),可以指定多個(gè)用戶級(jí)別的權(quán)限,但

它們中間要用逗號(hào)分開表示,若沒(méi)有顯式指出則表示不作更改。

②八進(jìn)制數(shù):chmod[選項(xiàng)]…八進(jìn)制權(quán)限文件…

其中的八進(jìn)制權(quán)限是指要更改后的文件權(quán)限。

(3)選項(xiàng)參數(shù)。

chmod主要選項(xiàng)參數(shù)如表2.16所示。表2.16chmod命令常見(jiàn)參數(shù)列表

選項(xiàng)參數(shù)含義

-C若該文件權(quán)限確實(shí)已經(jīng)更改,才顯示其更改動(dòng)作

-f若該文件權(quán)限無(wú)法被更改也不要顯示錯(cuò)誤信息

-V顯示權(quán)限變更的詳細(xì)資料

(4)使用實(shí)例。

chmod涉及文件的訪問(wèn)權(quán)限,在此對(duì)相關(guān)的概念進(jìn)行簡(jiǎn)單的回顧。

在1.3.1節(jié)中已經(jīng)提到,文件的訪問(wèn)權(quán)限可表示成:-rwxrwxrwx。在此設(shè)有3

種不同的訪問(wèn)權(quán)限:讀(r)、寫(w)和運(yùn)行(x)。3個(gè)不同的用戶級(jí)別:文件擁有者

(u)、所屬的用戶組(g)和系統(tǒng)里的其他用戶(o)。在此,可增加一個(gè)用戶級(jí)別a(all)

來(lái)表示所有這3個(gè)不同的用戶級(jí)別。

①第一種符號(hào)連接方式的chmod命令中,用加號(hào)“+”代表增加權(quán)限,用減號(hào)“-”

代表刪除權(quán)限,等于號(hào)“=”代表設(shè)置權(quán)限。

例如,原先筆者系統(tǒng)中有文件uClinux20031103.tgz,其權(quán)限如下所示。

[root@localhosttest]#Is-1

-rw-r-r-1rootroot79708616Mar242005

uClinux20031103.tgz

[root0localhosttest]#chmoda+rxzu+wuClinux20031103.tgz

[root@localhosttest]#Is-1

-rwxr-xr-x1rootroot79708616Mar242005

uClinux20031103.tgz

可見(jiàn),在執(zhí)行了chmod之后,文件擁有者除擁有所有用戶都有的可讀和執(zhí)行的權(quán)

限外,還有可寫的權(quán)限。

②對(duì)于第二種八進(jìn)制數(shù)指定的方式,將文件權(quán)限字符代表的有效位設(shè)為“1”,

即“rw-”“rw-”和“…”的八進(jìn)制表示為“110”、“110”、“100”,把這個(gè)二進(jìn)制串

轉(zhuǎn)換成對(duì)應(yīng)的八進(jìn)制數(shù)就是6、6、4,也就是說(shuō)該文件的權(quán)限為664(三位八進(jìn)制數(shù))。

這樣對(duì)于轉(zhuǎn)化后八進(jìn)制數(shù)、二進(jìn)制及對(duì)應(yīng)權(quán)限的關(guān)系如表2.17所示。

表2.17轉(zhuǎn)化后八進(jìn)制數(shù)、二進(jìn)制及對(duì)應(yīng)權(quán)限的關(guān)系

轉(zhuǎn)換后八進(jìn)制數(shù)-進(jìn)制對(duì)應(yīng)權(quán)限轉(zhuǎn)換后八進(jìn)制數(shù)二進(jìn)制對(duì)應(yīng)權(quán)限

0000沒(méi)有任何權(quán)限1001只能執(zhí)行

2010只寫3011只寫和執(zhí)行

4100只讀5101只讀和執(zhí)行

6110讀和寫7111讀、寫和執(zhí)行

同上例,原先筆者系統(tǒng)中有文件genromfs-0.5.1.tar.gz,其權(quán)限如下所示。

[root@localhosttest]#Is-1

-rw-rw-r——1daviddavid20543Dec292004

genromfs-0.5.1.tar.gz

[root0localhosttest]#chmod765genromfs-0.5.1.tar.gz

[root@localhosttest]#Is-1

-rwxrw-r-x1daviddavid20543Dec292004

genromfs-0.5.1.tar.gz

可見(jiàn),在執(zhí)行了chmod765之后,該文件的擁有者權(quán)限、文件組權(quán)限和其他用戶

權(quán)限都恰當(dāng)?shù)貙?duì)應(yīng)了。

(5)使用說(shuō)明

■使用chmod必須具有root權(quán)限。

P31In

(1)作用。

為某一個(gè)文件在另外一個(gè)位置建立一個(gè)符號(hào)鏈接。當(dāng)需要在不同的目錄用到相同

的文件時(shí),Linux允許用戶不用在每一個(gè)需要的目錄下都存放一個(gè)相同的文件,而只

需將其他目錄下的文件用In命令鏈接即可,這樣就不必重復(fù)地占用磁盤空間。

(2)格式。

In[選項(xiàng)]目標(biāo)目錄

(3)常見(jiàn)參數(shù)。

■-s建立符號(hào)鏈接(這也是通常惟一使用的參數(shù))。

(4)使用實(shí)例。

[root@localhosttest]#In-s../genromfs-0.5.1.tar.gz./hello

[root@localhosttest]#Is-1

total77948

Irwxrwxrwx1rootroot24Jan1400:25hello

->../genromfs-0.5.1.tar.gz

該實(shí)例建立了當(dāng)前目錄的hello文件與上級(jí)目錄之間的符號(hào)鏈接,可以看見(jiàn),在

hello的Is-1中的第一位為“1”,表示符號(hào)鏈接,同時(shí)還顯示了鏈接的源文件。

(5)使用說(shuō)明。

■In命令會(huì)保持每??處鏈接文件的同步性,也就是說(shuō),不論改動(dòng)了哪一處,其

他的文件都會(huì)發(fā)生相同的變化。

■In的鏈接分軟鏈接和硬鏈接兩種。

軟鏈接就是上面所說(shuō)的In-s****,它只會(huì)在用戶選定的位置上生成一個(gè)文件的

鏡像,不會(huì)重復(fù)占用磁盤空間,平時(shí)使用較多的都是軟鏈接。

硬鏈接是不帶參數(shù)的In****,它會(huì)在用戶選定的位置上生成一個(gè)和源文件大小

相同的文件,無(wú)論是軟鏈接還是硬鏈接,文件都保持同步變化。

P34表2.25Linux常見(jiàn)類型的文件解壓命令一覽表

文件后綴解壓命令示例

atarxvtarxvhello.a

.ZUncompressuncompresshello.Z

gzGuiizipgunziphello.gz

.tar.ZtarxvZftarxvZfhello.tar.Z

.tar.gz.tgztarxvzftarxvzfhello.tar.gz

tar.bz2tarjxvftarjxvfhello.tar.bz2

安裝:rpm-i安裝:rpm-ihello.rpm

rpm

解壓縮:rpm2qjio解壓縮:rpm2qpiohello.rpm

安裝:dpkg-i安裝:dpkg-ihello.deb

deb(Debain中的文件格

式)解壓縮:dpkg-deb-fs^-tarfile解壓縮:dpkg-deb-fs^-tarhello

hello,deb

.zipUnzipunaphello.zip

P62函數(shù)靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

在成功編譯之后,就進(jìn)入了鏈接階段。這里涉及一個(gè)重要的概念:函數(shù)庫(kù)。

讀者可以重新查看這個(gè)小程序,在這個(gè)程序中并沒(méi)有定義“printf”的函數(shù)實(shí)

現(xiàn),且在預(yù)編譯中包含進(jìn)的“stdio.h”中也只有該函數(shù)的聲明,而沒(méi)有定義函數(shù)的

實(shí)現(xiàn),那么,是在哪里實(shí)現(xiàn)"printf”函數(shù)的呢?最后的答案是:系統(tǒng)把這些函數(shù)

的實(shí)現(xiàn)都放到名為libc.so.6的庫(kù)文件中去了,在沒(méi)有特別指定時(shí),gcc會(huì)到系統(tǒng)默

認(rèn)的搜索路徑“/usr/lib”下進(jìn)行查找,也就是鏈接到libc.so.6函數(shù)庫(kù)中去,這樣就

能調(diào)用函數(shù)“printf”T,而這也正是鏈接的作用。

函數(shù)庫(kù)有靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種。鄢態(tài)庫(kù)是指編譯鏈接時(shí),將庫(kù)文件的代碼全部加

入可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫(kù)文件了。其后

綴名通常為“.a”。動(dòng)態(tài)庫(kù)與之相反,在編譯鏈接時(shí)并沒(méi)有將庫(kù)文件的代碼加入可執(zhí)行

文件中,而是在程序執(zhí)行時(shí)加載庫(kù),這樣可以節(jié)省系統(tǒng)的開銷。一般動(dòng)態(tài)庫(kù)的后綴名

為“.so”,如前面所述的libc.so.6就是動(dòng)態(tài)庫(kù)。gcc在編譯時(shí)默認(rèn)使用動(dòng)態(tài)庫(kù)。

完成了鏈接之后,gcc就可以生成可執(zhí)行文件,如下所示。

[root@localhostgcc]#gcchello.o-ohello

運(yùn)行該可執(zhí)行文件,出現(xiàn)的正確結(jié)果如下。

(root@localhostgcc]#./hello

Hello!Thisisourembeddedworld!

P76makefile

3.5.2makefile變量

david:kang.oyul.o

gcckang.obar.o-omyprog

kang.o:kang.ckang.hhead.h

gcc-Wall-0-g-ckang.c-okang.o

yul.o:bar.chead.h

gcc-Wall-0-g-cyul.c-oyul.o

在這個(gè)makefile中有3個(gè)目標(biāo)體(target)?分別為david、kang.o和yul.o,其中

第一個(gè)目標(biāo)體的依賴文件就是后兩個(gè)目標(biāo)體。如果用戶使用命令"makedavid",則

make管理器就是找到david目標(biāo)體開始執(zhí)行。

這時(shí)、make會(huì)自動(dòng)檢查相關(guān)文件的時(shí)間戳。首先,在檢查“kang.o"、“yul.o”和

“david”3個(gè)文件的時(shí)間戳之前,它會(huì)向下查找那些把“kang.o”或“yul.o”作為目標(biāo)

文件的時(shí)間戳。比如,"kang.o”的依賴文件為“kang.c"、“kang.h"、“head.h"。如果

這些文件中任何一個(gè)的時(shí)間戳比“kang.o”新,則命令"gcc-Wall-0-g-ckang.c-o

kang.o”將會(huì)執(zhí)行,從而更新文件“kang.。"。在更新完“kang.?!被颉皔ul.o”之后,

make會(huì)檢查最初的“kang.o"、"yul.o"和"david”3個(gè)文件,只要文件“kang.o”或

“yuL。”中的至少有一個(gè)文件的時(shí)間戳比“david”新,則第二行命令就會(huì)被執(zhí)行。這

樣,make就完成了自動(dòng)檢查時(shí)間戳的工作,開始執(zhí)行編譯工作。這也就是make工作

的基本流程。

接下來(lái),為了進(jìn)一步簡(jiǎn)化編輯和維護(hù)makefile,make允許在makefile中創(chuàng)建和使

用變量。變量是在makefile中定義的名字,用來(lái)代替一個(gè)文本字符串,該文本字符串

稱為該變量的值。在具體要求下,這些值可以代替目標(biāo)體、依賴文件、命令以及makefile

文件中其他部分。在makefile中的變量定義有兩種方式:一種是遞歸展開方式,另一

種是簡(jiǎn)單方式。

遞歸展開方式定義的變量是在引用該變量時(shí)進(jìn)行替換的,即如果該變量包含了

對(duì)其他變量的引用,則在引用該變量時(shí)一次性將內(nèi)嵌的變量全部展開,雖然這種類

型的變量能夠很好地完成用戶的指令,但是它也有嚴(yán)重的缺點(diǎn),如不能在變量后追

加內(nèi)容(因?yàn)檎Z(yǔ)句:CFLAGS=$(CFLAGS)-O在變量擴(kuò)展過(guò)程中可能導(dǎo)致無(wú)窮循環(huán))。

為了避免上述問(wèn)題,簡(jiǎn)單擴(kuò)展型變量的值在定義處展開,并且只展開一次,因此

它不包含任何對(duì)其他變量的引用,從而消除變量的嵌套引用。

遞歸展開方式的定義格式為:VAR=var。

簡(jiǎn)單擴(kuò)展方式的定義格式為:VAR:=var。

make中的變量使用均使用的格式為:$(VAR)?

變量名是不包括“:”、"鏟’、以及結(jié)尾空格的任何字符串.同時(shí),變

量名中包含字母、數(shù)字以及下劃線以外的情況應(yīng)盡量避免,因?yàn)樗鼈兛赡茉趯?/p>

來(lái)被賦予特別的含義。

變量名是大小寫敏感的,例如變量名“foo”、“FOO”、和“Foo”代表不

同的變量.

推薦在makefile內(nèi)部使用小寫字母作為變量名,預(yù)留大寫字母作為控制隱含規(guī)

則參數(shù)或用戶重載命令選項(xiàng)參數(shù)的變量名。

下面給出了上例中用變量替換修改后的makefile,這里用OBJS代替kang.o和

yul.o,用CC代替gcc,用CFLAGS代替“-Wall-0-g”。這樣在以后修改時(shí),就可以

只修改變量定義,而不需要修改下面的定義實(shí)體,從而大大簡(jiǎn)化了makefile維護(hù)的工作量。

經(jīng)變量替換后的makefile如下所示:

OBJS=kang.oyul.o

CC=gcc

CFLAGS=-Wall-0-g

david:$(OBJS)

$(CC)$(OBJS)-odavid

kang.o:kang.ckang.h

$(CC)$(CFLAGS)-ckang.c-okang.o

yul.o:yul.cyul.h

$(CC)$(CFLAGS)-cyul.c-oyul.o

可以看到,此處變量是以遞歸展開方式定義的。

makefile中的變量分為用戶自定義變量、預(yù)定義變量、自動(dòng)變量及環(huán)境變量。如

上例中的OBJS就是用戶自定義變量,自定義變量的值由用戶自行設(shè)定,而預(yù)定義變

量和自動(dòng)變量為通常在makefile都會(huì)出現(xiàn)的變量,它們的一部分有默認(rèn)值,也就是常

見(jiàn)的設(shè)定值,當(dāng)然用戶可以對(duì)其進(jìn)行修改。

預(yù)定義變量包含了常見(jiàn)編譯器、匯編器的名稱及其編譯選項(xiàng)。表3.15列出了

makefile中常見(jiàn)預(yù)定義變量及其部分默認(rèn)值。

表3.15makefile中常見(jiàn)的預(yù)定義變量

預(yù)定義變量含義

AR\庫(kù)文件維護(hù)程序的名稱,默認(rèn)值為ar

AS匯編程序的名稱,默認(rèn)值為as

CCC編譯器的名稱,默認(rèn)值為cc

CPPC預(yù)編譯器的名稱,默認(rèn)值為$((:0-£

CXXC1編譯器的名稱,默認(rèn)值為g++

FCFortran編譯器的名稱,默認(rèn)值為

RM文件刪除程序的名稱,默認(rèn)值為rm-f

ARFLAGS庫(kù)文件維護(hù)程序的選項(xiàng),無(wú)默認(rèn)值

ASFLAGS匯編程序的選項(xiàng),無(wú)默認(rèn)值

CFLAGSC編譯器的選項(xiàng),無(wú)默認(rèn)值

CPPFLAGSC預(yù)編譯的選項(xiàng),無(wú)默認(rèn)值

CXXFLAGSC++編譯器的選項(xiàng),無(wú)默認(rèn)值

FFLAGSFortran編譯器的選項(xiàng),無(wú)默認(rèn)值

可以看出,上例中的CC和CFLAGS是預(yù)定義變量,其中由于CC沒(méi)有采用默認(rèn)

值,因此,需要把“CC=gcc”明確列出來(lái)。

由于常見(jiàn)的gcc編譯語(yǔ)句中通常包含了目標(biāo)文件和依賴文件,而這些文件在

makefile文件中目標(biāo)體所在行已經(jīng)有所體現(xiàn),因此,為了進(jìn)一步簡(jiǎn)化makefile的編寫,

就引入了自動(dòng)變量。自動(dòng)變量通??梢源砭幾g語(yǔ)句中出現(xiàn)目標(biāo)文件和依賴文件等,

并且具有本地含義(即下一語(yǔ)句中出現(xiàn)的相同變量代表的是下一語(yǔ)句的目標(biāo)文件和依

賴文件)。表3.16列出了makefile中常見(jiàn)的自動(dòng)變量。

自動(dòng)變量含義

S*不包含擴(kuò)展名的目標(biāo)文件名稱

所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依

$+

賴文件

$<第一個(gè)依賴文件的名稱

$?所有時(shí)間戳比目標(biāo)文件晚的依賴文件,并以空格分開

s@目標(biāo)文件的完整名稱

$A所有不重且的依賴文件,以空格分開

5%如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱

自動(dòng)變量的書寫比較難記,但是在熟練了之后使用會(huì)非常方便,請(qǐng)讀者結(jié)合下例

中的自動(dòng)變量改寫的makefile進(jìn)行記憶。

OBJS=kang.oyul.o

CC=gcc

CFLAGS=-Wall-0-g

david:$(OBJS)

$(CC)$A-o$@

kang.o:kang.ckang.h

$(CC)$(CFLAGS)-c$<-o$@

yul.o:yul.cyul.h

$(CC)$(CFLAGS)-c$<-o$@

另外,在makefile中還可以使用環(huán)境變量。使用環(huán)境變量的方法相對(duì)比較簡(jiǎn)單,

make在啟動(dòng)時(shí)會(huì)自動(dòng)讀取系統(tǒng)當(dāng)前已經(jīng)定義了的環(huán)境變量,并且會(huì)創(chuàng)建與之具有相

同名稱和數(shù)值的變量。但是,如果用戶在makefile中定義了相同名稱的變量,那么用

戶自定義變量將會(huì)覆蓋同名的環(huán)境變量。

3.5.3makefile規(guī)則

makefile的規(guī)則是make進(jìn)行處理的依據(jù),它包括了目標(biāo)體、依賴文件及其之間的命

令語(yǔ)句。在上面的例子中,都顯式地指出了makefile中的規(guī)則關(guān)系,如“$(CC)$(CFLAGS)

-c$<-o$@w,但為了簡(jiǎn)化makefile的編寫,make還定義了隱式規(guī)則和模式規(guī)則,下面就

分別對(duì)其進(jìn)行講解。

1.隱式規(guī)則

隱含規(guī)則能夠告訴make怎樣使用傳統(tǒng)的規(guī)則完成任務(wù),這樣,當(dāng)用戶使用它們

時(shí)就不必詳細(xì)指定編譯的具體細(xì)節(jié),而只需把目標(biāo)文件列出即可。make會(huì)自動(dòng)搜索

隱式規(guī)則目錄來(lái)確定如何生成目標(biāo)文件。如上例就可以寫成:

OBJS=kang.oyul.o

CC=gcc

CFLAGS=-Wall-0-g

david:$(OBJS)

$(CC)$A-o$@

為什么可以省略后兩句呢?因?yàn)閙ake的隱式規(guī)則指出:所有“.o”文件都可自

動(dòng)由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-cEle.c-ofile.o"來(lái)生成。

這樣“kang.o”和“yul.o”就會(huì)分別通過(guò)調(diào)用<($(CC)$(CFLAGS)-ckang.c-okang.oM

和“$(CC)$(CFLAGS)-cyul.c-oyul.o”來(lái)生成。

在隱式規(guī)則只能查找到相同文件名的不同后緩名文件,如“kang.o”文件必須

由"kang.c"文件生成。

表3.17給出了常見(jiàn)的隱式規(guī)則目錄。

對(duì)應(yīng)語(yǔ)言后綴名隱式規(guī)則

C編譯:<變?yōu)?0$(CC)-c$(CPPFLAGS)S(CFLAGS)

C++編譯:.cc或.C變?yōu)?0$(CXX)yS(CPPFLAGS)$(CXXFLAGS)

Pascal編譯:.p變?yōu)?o$(PC)y$(PFLAGS)

Fortran編譯:.1?變?yōu)?o$(FC)<$(FFLAGS)

2.模式規(guī)則

模式規(guī)則是用來(lái)定義相同處理規(guī)則的多個(gè)文件的。它不同于隱式規(guī)則,隱式規(guī)則

僅僅能夠用make默認(rèn)的變量來(lái)進(jìn)行操作,而模式規(guī)則還能引入用戶自定義變量,為

多個(gè)文件建立相同的規(guī)則,從而簡(jiǎn)化makefile的編寫。

模式規(guī)則的格式類似于普通規(guī)則,這個(gè)規(guī)則中的相關(guān)文件前必須用“%”標(biāo)明。

使用模式規(guī)則修改后的makefile的編寫如下:

OBJS=kang.oyul.o

CC=gcc

CFLAGS=-Wall-0-g

david:$(OBJS)

$(CC)$A-o$@

%.o:%.c

$(CC)$(CFLAGS)-c$<-o$@

3.5.4make管理器的使用

使用make管理器非常簡(jiǎn)單,只需在make命令的后面鍵入目標(biāo)名即可建立指定的

目標(biāo),如果直接運(yùn)行make,則建立makefile中的第一個(gè)目標(biāo)。

此外make還有豐富的命令行選項(xiàng),可以完成各種不同的功能。

表3.18列出了常用的make命令行選項(xiàng)。

命令格式含義

-Cdir讀入指定目錄下的makefile

-ffile讀入當(dāng)前目錄下的file文件作為makefile

-I忽略所有的命令執(zhí)行錯(cuò)誤

-Idir指定被包含的makMle所在目錄

-n只打印要執(zhí)行的命令,但不執(zhí)行這些命令

-P顯示make變量數(shù)據(jù)庫(kù)和隱含規(guī)則

-s在執(zhí)行命令時(shí)不顯示命令

-w如果make在執(zhí)行過(guò)程中改變目錄,則打印當(dāng)前目錄名

P133NFS文件系統(tǒng)

NFS為NetworkFileSystem的簡(jiǎn)稱,最早是由Sun公司提出發(fā)展起來(lái)的,其目的

就是讓不同的機(jī)器、不同的操作系統(tǒng)之間通過(guò)網(wǎng)絡(luò)可以彼此共享文件。NFS可以讓不

同的主機(jī)通過(guò)網(wǎng)絡(luò)將遠(yuǎn)端的NFS服務(wù)器共享出來(lái)的文件安裝到自己的系統(tǒng)中,從客戶

端看來(lái),使用NFS的遠(yuǎn)端文件就像是使用本地文件一樣。在嵌入式中使用NFS會(huì)使

應(yīng)用程序的開發(fā)變得十分方便,并且不用反復(fù)地?zé)龑懹诚裎募?/p>

NFS的使用分為服務(wù)端和客戶端,其中服務(wù)端是提供要共享的文件,而客

戶端則通過(guò)掛載(“mount")這一動(dòng)作來(lái)實(shí)現(xiàn)對(duì)共享文件的訪問(wèn)操作。下面主要

介紹NFS服務(wù)端的使用。在嵌入式開發(fā)中,通常NFS服務(wù)端在宿主機(jī)上運(yùn)行,

而客戶端在目標(biāo)板上運(yùn)行。

NFS服務(wù)端是通過(guò)讀入它的配置文件“/etc/exports”來(lái)決定所共享的文件目錄的。

下面首先講解這個(gè)配置文件的書寫規(guī)范。

在這個(gè)配置文件中,每一行都代表一項(xiàng)要共享的文件目錄以及所指定的客戶端對(duì)

它的操作權(quán)限??蛻舳丝梢愿鶕?jù)相應(yīng)的權(quán)限,對(duì)該目錄下的所有目錄文件進(jìn)行訪問(wèn)。

配置文件中每一行的格式如下:

[共享的目錄][客戶端主機(jī)名稱或[P][參數(shù)1,參數(shù)2…]

在這里,主機(jī)名或IP是可供共享的客戶端主機(jī)名或IP,若對(duì)所有的IP都可以訪

問(wèn),則可用“*”表示。這里的參數(shù)有很多種組合方式,常見(jiàn)的參數(shù)如表5.1所示。

選項(xiàng)參數(shù)含義

rw可讀寫的權(quán)限

ro只讀的權(quán)限

NFS客戶端分享目錄使用者的權(quán)限,即如果客戶端使用的是root用戶,那么對(duì)于

no__root_$qua$h

這個(gè)共享的目錄而言,該客戶端就具有root的權(quán)限

sync資料同步寫入到內(nèi)存與硬盤當(dāng)中

async資料會(huì)先暫存于內(nèi)存當(dāng)中,而非直接寫入硬盤

如在本例中,配置文件"/etc/exports”的代碼如下:

(root@localhostfs]#cat/etc/exports

/root/workplace192.168.1.*(rw,no_root_squash)

在設(shè)定完配置文件之后,需要啟動(dòng)nfs服務(wù)和portmap服務(wù),這里的portm叩服

務(wù)是允許NFS客戶端查看NFS服務(wù)在用的端口,在它被激活之后,就會(huì)出現(xiàn)一個(gè)端

口號(hào)為111的sunRPC(遠(yuǎn)端過(guò)程調(diào)用)的服務(wù)。這是NFS服務(wù)中必須實(shí)現(xiàn)的一項(xiàng),

因此,也必須把它開啟。如下所示:

[root0localhostfs]#serviceportmapstart

啟動(dòng)portmap:[確定]

(rootQlocalhostfs]#servicenfsstart

啟動(dòng)NFS服務(wù):[確定]

關(guān)掉NFS配額:[確定]

啟動(dòng)NFS守護(hù)進(jìn)程:[確定]

啟動(dòng)NFSmountd:[確定)

可以看到,在啟動(dòng)NFS服務(wù)的時(shí)候啟動(dòng)了mountd進(jìn)程。這是NFS掛載服務(wù),用

于處理NFS遞交過(guò)來(lái)的客戶端請(qǐng)求。另外還會(huì)激活至少兩個(gè)以上的系統(tǒng)守護(hù)進(jìn)程,然

后就開始監(jiān)聽客戶端的請(qǐng)求,用"cat/var/log/messages"命令可以查看操作是否成功。

這樣,就啟動(dòng)了NFS的服務(wù),另外還有兩個(gè)命令,可以便于使用NFS。

其中一個(gè)是exportfs,它可以重新掃描“/etc/exports”,使用戶在修改了“/etc/exports”

配置文件之后不需要每次重啟NFS服務(wù)。其格式為:

exportfs[選項(xiàng)]

exportfs的常見(jiàn)選項(xiàng)如表5.2所示。

選項(xiàng)參數(shù)含義

-a全部掛載(或卸載)/etc/exports中的設(shè)定文件目錄

-r重新掛載/etc,exports中的設(shè)定文件目錄

-u卸載某一目錄

-V在export的時(shí)候,將共享的目錄顯示到屏晶上

另外一個(gè)是showmount命令,它用于當(dāng)前的掛載情況。其格式為:

showmount[選項(xiàng)]hostname

showmount的常見(jiàn)選項(xiàng)如表5.3所示。

選項(xiàng)參數(shù)含義

-a在屏辭上顯示目前主機(jī)與客戶端所連上來(lái)的使用目錄狀態(tài)

-e顯示hostname中/etcexports里設(shè)定的共享目錄

P154:open。、read。、write。、lseek()和close。

6.3.1基本文件操作

(1)函數(shù)說(shuō)明。

open。函數(shù)用于打開或創(chuàng)建文件,在打開或創(chuàng)建文件時(shí)可以指定文件的屬性及用

戶的權(quán)限等各種參數(shù)。

close。函數(shù)用于關(guān)閉一個(gè)被打開的文件。當(dāng)一個(gè)進(jìn)程終止時(shí),所有被它打開的文

件都由內(nèi)核自動(dòng)關(guān)閉,很多程序都使用這一功能而不顯示地關(guān)閉一個(gè)文件。

read。函數(shù)用于將從指定的文件描述符中讀出的數(shù)據(jù)放到緩存區(qū)中,并返回實(shí)際

讀入的字節(jié)數(shù)。若返回0,則表示沒(méi)有數(shù)據(jù)可讀,即已達(dá)到文件尾。讀操作從文件的

當(dāng)前指針位置開始。當(dāng)從終端設(shè)備文件中讀出數(shù)據(jù)時(shí),通常一次最多讀一行。

write。函數(shù)用于向打開的文件寫數(shù)據(jù),寫操作從文件的當(dāng)前指針位置開始。對(duì)磁

盤文件進(jìn)行寫操作,若磁盤已滿或超出該文件的長(zhǎng)度,則write。函數(shù)返回失敗。

lseek()函數(shù)用于在指定的文件描述符中將文件指針定位到相應(yīng)的位置。它只能用

在可定位(可隨機(jī)訪問(wèn))文件操作中。管道、套接字和大部分字符設(shè)備文件是不可定

位的,所以在這些文件的操作中無(wú)法使用lseek()調(diào)用。

(2)函數(shù)格式。

open。函數(shù)的語(yǔ)法格式如表6.1所示。

前nchide<sys/type$.h>/*提供類型pid_【的定義*/

所需頭文件芹include<sys/stat.h>

存include

函數(shù)原型intopen(constchar"pathname,intflags,intperms)

pathname被打開的文件名(可包括路竹名予

O_RDONLY:以*讀方有打胭件

O_WRONLY:以代寫方式打開文件

O_RDWR:以讀寫方樂(lè)打開文件

O_CREAT:如果該文件不存在,就創(chuàng)建一個(gè)新的文件,并用第

三個(gè)參數(shù)為其設(shè)置權(quán)限

O_EXCL:如果使用O_CREAT時(shí)文件存在,則可返回錯(cuò)誤消息。

flag:文件打開這一參數(shù)可測(cè)試文件息否存在.此時(shí)open是原子操作,防止多

的方式“弋進(jìn)程同時(shí)創(chuàng)建同一個(gè)文件

0_N0CE:使用本參數(shù)時(shí),若文件為終端,那么該終端不會(huì)

函數(shù)傳入值成為調(diào)用open。的那個(gè)進(jìn)程的控制終端

O_TRUNC:若文件已經(jīng)存在,那么會(huì)刪除文件中的全部原有數(shù)

據(jù),并且設(shè)置文件大小為0。

O_APPEND:以添加方式打開文件,在打開文件的同時(shí),文件

指針指向文件的末尾,即將寫入的數(shù)據(jù)添加到文件的末尾

被打開文件的存取權(quán)限

可以用一組宏定義:S_I(RWX)(USRGRPOTH)

其中RWX分別表示讀號(hào)/執(zhí)行權(quán)限

perms

USRGRPOTH分別表示文件所有者/文件所屬組/其他用戶

例如,SJRUSRS_IWUSR表示設(shè)置文件所有者的可讀可寫屬

性.八加制

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論