6.1 文本文件
文本文件格式是一種由若干行字符構(gòu)成的計(jì)算機(jī)文件檐薯。文本文件存在于計(jì)算機(jī)文件系統(tǒng)中。通常,通過(guò)在文本文件最后一行后放置文件結(jié)束標(biāo)志來(lái)指明文件的結(jié)束。 文本文件是指一種容器台谍,而純文本是指一種內(nèi)容趁蕊。文本文件可以包含純文本。 一般來(lái)說(shuō)掷伙,計(jì)算機(jī)文件可以分為兩類(lèi):文本文件和二進(jìn)制文件 任柜。
6.1.1 常見(jiàn)文本文件
ASCII
ASCII標(biāo)準(zhǔn)使得只含有ASCII字符的文本文件可以在Unix宙地、Macintosh、Microsoft Windows参袱、DOS和其它操作系統(tǒng)之間自由交互抹蚀,而其它格式的文件是很難做到這一點(diǎn)的企垦。但是钞诡,在這些操作系統(tǒng)中湃崩,換行符并不相同竹习,處理非ASCII字符的方式也不一致。
MIME
文本文件在MIME標(biāo)準(zhǔn)中的類(lèi)型為“text/plain”拗窃,此外随夸,它通常還附加編碼的信息宾毒。在Mac OS X出現(xiàn)前,當(dāng)Resource fork指定某一個(gè)文件的類(lèi)型為“TEXT”時(shí)乙各,Mac OS就認(rèn)為這個(gè)文件是文本文件耳峦。在Windows中焕毫,當(dāng)一個(gè)文件的擴(kuò)展名為“txt”時(shí)邑飒,系統(tǒng)就認(rèn)為它是一個(gè)文本文件疙咸。此外,處于特殊的目的聚唐,有些文本文件使用其它的擴(kuò)展名杆查。例如亲桦,計(jì)算機(jī)的源代碼也是文本文件,它們的后綴是用來(lái)指明它的程序語(yǔ)言的豫领。
.txt
.txt是包含極少格式信息的文字文件的擴(kuò)展名等恐。.txt格式并沒(méi)有明確的定義备蚓,它通常是指那些能夠被系統(tǒng)終端或者簡(jiǎn)單的文本編輯器接受的格式郊尝。任何能讀取文字的程序都能讀取帶有.txt擴(kuò)展名的文件流昏,因此,通常認(rèn)為這種文件是通用的谚鄙、跨平臺(tái)的襟锐。
在英文文本文件中粮坞,ASCII字符集是最為常見(jiàn)的格式初狰,而且在許多場(chǎng)合莫杈,它也是默認(rèn)的格式。對(duì)于帶重音符號(hào)的和其它的非ASCII字符奢入,必須選擇一種字符編碼筝闹。在很多系統(tǒng)中,字符編碼是由計(jì)算機(jī)的區(qū)域設(shè)置決定的腥光。常見(jiàn)的字符編碼包括支持許多歐洲語(yǔ)言的ISO 8859-1关顷。
由于許多編碼只能表達(dá)有限的字符,通常它們只能用于表達(dá)幾種語(yǔ)言武福。Unicode制定了一種試圖能夠表達(dá)所有已知語(yǔ)言的標(biāo)準(zhǔn)议双,Unicode字符集非常大捉片,它囊括了大多數(shù)已知的字符集平痰。Unicode有多種字符編碼汞舱,其中最常見(jiàn)的是UTF-8,這種編碼能夠向后兼容ASCII宗雇,相同內(nèi)容的ASCII文本文件和UTF-8文本文件完全一致昂芜。
*.txt文件
微軟的MS-DOS和Windows采用了相同的文本文件格式,它們都使用CR和LF兩個(gè)字符作為換行符赔蒲,這兩個(gè)字符對(duì)應(yīng)的ASCII碼分別為13和10泌神。通常,最后一行文本并不以換行符(CR-LF標(biāo)志)結(jié)尾嘹履,包括記事本在內(nèi)的很多文本編輯器也不在文件的最后添加換行符腻扇。
大多數(shù)Windows文本文件使用ANSI债热、OEM或者Unicode編碼砾嫉。Windows所指的ANSI編碼通常是1字節(jié)的ISO-8859編碼,不過(guò)對(duì)于像中文窒篱、日文焕刮、朝鮮文這樣的環(huán)境,需要使用2字節(jié)字符集墙杯。在過(guò)渡至Unicode前配并,Windows一直用ANSI作為系統(tǒng)默認(rèn)的編碼。而OEM編碼高镐,也是通常所說(shuō)的MS-DOS代碼頁(yè)溉旋,是IBM為早期IBM個(gè)人電腦的文本模式顯示系統(tǒng)定義的。在全屏的MS-DOS程序中同時(shí)使用了圖形的和按行繪制的字符嫉髓。新版本的Windows可以使用UTF-16LE和UTF-8之類(lèi)的Unicode編碼观腊。
大多數(shù)多媒體交互都用自己的編程工具。且一部分是收費(fèi)的算行。但有個(gè)任何人都能見(jiàn)到的程序編寫(xiě)器卻不是每個(gè)人都知道——這就是windows下的附件程序——記事本梧油。記事本可以說(shuō)是每個(gè)人都認(rèn)識(shí)的程序。但同時(shí)又是編程外行都視而不見(jiàn)的編程工具州邢。他的存儲(chǔ)格式就是有極高曝光率的*.txt格式
/etc/passwd
root:x:0:0:root:/root:/bin/bash
注冊(cè)名(login_name):用于區(qū)分不同的用戶(hù)儡陨。在同一系統(tǒng)中注冊(cè)名是惟一的。在很多系統(tǒng)上量淌,該字段被限制在8個(gè)字符(字母或數(shù)字)的長(zhǎng)度之內(nèi)骗村;并且要注意,通常在Linux系統(tǒng)中對(duì)字母大小寫(xiě)是敏感的呀枢。這與MSDOS/Windows是不一樣的胚股。
口令(passwd):系統(tǒng)用口令來(lái)驗(yàn)證用戶(hù)的合法性。超級(jí)用戶(hù)root或某些高級(jí)用戶(hù)可以使用系統(tǒng)命令passwd來(lái)更改系統(tǒng)中所有用戶(hù)的口令硫狞,普通用戶(hù)也可以在登錄系統(tǒng)后使用passwd命令來(lái)更改自己的口令信轿。
現(xiàn)在的Unix/Linux系統(tǒng)中晃痴,口令不再直接保存在passwd文件中,通常將passwd文件中的口令字段使用一個(gè)“x”來(lái)代替财忽,將/etc /shadow作為真正的口令文件倘核,用于保存包括個(gè)人口令在內(nèi)的數(shù)據(jù)。當(dāng)然shadow文件是不能被普通用戶(hù)讀取的即彪,只有超級(jí)用戶(hù)才有權(quán)讀取紧唱。
此外,需要注意的是隶校,如果passwd字段中的第一個(gè)字符是“*”的話(huà)漏益,那么,就表示該賬號(hào)被查封了深胳,系統(tǒng)不允許持有該賬號(hào)的用戶(hù)登錄绰疤。
用戶(hù)標(biāo)識(shí)號(hào)(UID):UID是一個(gè)數(shù)值,是Linux系統(tǒng)中惟一的用戶(hù)標(biāo)識(shí)舞终,用于區(qū)別不同的用戶(hù)轻庆。在系統(tǒng)內(nèi)部管理進(jìn)程和文件保護(hù)時(shí)使用 UID字段。在Linux系統(tǒng)中敛劝,注冊(cè)名和UID都可以用于標(biāo)識(shí)用戶(hù)余爆,只不過(guò)對(duì)于系統(tǒng)來(lái)說(shuō)UID更為重要;而對(duì)于用戶(hù)來(lái)說(shuō)注冊(cè)名使用起來(lái)更方便夸盟。在某些特 定目的下蛾方,系統(tǒng)中可以存在多個(gè)擁有不同注冊(cè)名、但UID相同的用戶(hù)上陕,事實(shí)上桩砰,這些使用不同注冊(cè)名的用戶(hù)實(shí)際上是同一個(gè)用戶(hù)。
組標(biāo)識(shí)號(hào)(GID):這是當(dāng)前用戶(hù)的缺省工作組標(biāo)識(shí)唆垃。具有相似屬性的多個(gè)用戶(hù)可以被分配到同一個(gè)組內(nèi)五芝,每個(gè)組都有自己的組名,且以自己的組標(biāo) 識(shí)號(hào)相區(qū)分辕万。像UID一樣枢步,用戶(hù)的組標(biāo)識(shí)號(hào)也存放在passwd文件中。在現(xiàn)代的Unix/Linux中渐尿,每個(gè)用戶(hù)可以同時(shí)屬于多個(gè)組醉途。除了在 passwd文件中指定其歸屬的基本組之外,還在/etc/group文件中指明一個(gè)組所包含用戶(hù)砖茸。
用戶(hù)名(user_name):包含有關(guān)用戶(hù)的一些信息隘擎,如用戶(hù)的真實(shí)姓名、辦公室地址凉夯、聯(lián)系電話(huà)等货葬。在Linux系統(tǒng)中采幌,mail和finger等程序利用這些信息來(lái)標(biāo)識(shí)系統(tǒng)的用戶(hù)。
用戶(hù)主目錄(home_directory):該字段定義了個(gè)人用戶(hù)的主目錄震桶,當(dāng)用戶(hù)登錄后休傍,他的Shell將把該目錄作為用戶(hù)的工作目錄。 在Unix/Linux系統(tǒng)中蹲姐,超級(jí)用戶(hù)root的工作目錄為/root磨取;而其它個(gè)人用戶(hù)在/home目錄下均有自己獨(dú)立的工作環(huán)境,系統(tǒng)在該目錄下為每 個(gè)用戶(hù)配置了自己的主目錄柴墩。個(gè)人用戶(hù)的文件都放置在各自的
命令解釋程序(Shell):Shell是當(dāng)用戶(hù)登錄系統(tǒng)時(shí)運(yùn)行的程序名稱(chēng)忙厌,通常是一個(gè)Shell程序的全路徑名.
這里注冊(cè)名理解為用戶(hù)登錄時(shí)的名,用戶(hù)名時(shí)系統(tǒng)多用來(lái)表示用戶(hù)的江咳,沒(méi)有什么長(zhǎng)度上的要求
null false true nologin 可以阻止用戶(hù)的登錄 shell指定這幾個(gè)的一定不能登錄逢净,其他的一句不同系統(tǒng)
使用nobody登錄,起user id 是65534 課登錄但沒(méi)有任何權(quán)限
陰影口令
在上一節(jié)我們?cè)峒霸祝瑢?duì)U N I X口令通常使用的加密算法是單向算法汹胃。給出一個(gè)密碼口令婶芭,找不到一種算法可以將其反變換到普通文本口令(普通文本口令是在P a s s w o r d :提示后鍵入的口令)东臀。但是可以對(duì)口令進(jìn)行猜測(cè),將猜測(cè)的口令經(jīng)單向算法變換成加密形成犀农,然后將其與用戶(hù)的加密口令相比較惰赋。如果用戶(hù)口令是隨機(jī)選擇的,那么這種方法并不是很有用呵哨。但是用戶(hù)往往以非隨機(jī)方式選擇口令(配偶的姓名赁濒、街名、寵物名等)孟害。一個(gè)經(jīng)常重復(fù)的試驗(yàn)是先得到一份口令文件拒炎,然后用試探方法猜測(cè)口令。( G a r f i n k e l和S p a ff o r d〔1 9 9 1〕的第2章對(duì)unix口令及口令加密處理方案的歷史情況及細(xì)節(jié)進(jìn)行了說(shuō)明挨务。)
為使企圖這樣做的人難以獲得原始資料(加密口令)击你,某些系統(tǒng)將加密口令存放在另一個(gè)通常稱(chēng)為陰影口令( shadow password)的文件中。該文件至少要包含用戶(hù)名和加密口令谎柄。與該口令相關(guān)的其他信息也可存放在該文件中丁侄。例如,具有陰影口令的系統(tǒng)經(jīng)常要求用戶(hù)在一定時(shí)間間隔后選擇一個(gè)新口令朝巫。這被稱(chēng)之為口令時(shí)效鸿摇,選擇新口令的時(shí)間間隔長(zhǎng)度經(jīng)常也存放在陰影口令文件中。
組文件
用戶(hù)組文件劈猿,沒(méi)什么內(nèi)容
附加組ID
在Unix中拙吉,組的使用已經(jīng)作了些更改潮孽。在Version7中,每個(gè)用戶(hù)任何時(shí)候都只屬于一個(gè)組筷黔。當(dāng)用戶(hù)登錄時(shí)恩商,系統(tǒng)就按口令字文件中與其相關(guān)記錄中的數(shù)字組ID,賦給他實(shí)際組ID必逆。我們可以在任何時(shí)候執(zhí)行newgrp(1)以更改組ID怠堪。如果newgrp命令執(zhí)行成功(關(guān)于許可權(quán)規(guī)則,請(qǐng)參閱手冊(cè)頁(yè))名眉,則我們的實(shí)際組ID就更改為新的組ID粟矿,它將被用于后續(xù)的文件存取許可權(quán)檢查。執(zhí)行不帶任何參數(shù)的newgrp损拢,則可返回到原來(lái)的組陌粹。
這種組的成員關(guān)系一直維持到1983年左右。此時(shí)福压,4.2BSD引入了附加組ID(supplementary group ID)的概念掏秩。我們不僅屬于我們的口令字記錄中組ID所對(duì)應(yīng)的組,也可屬于多至16個(gè)另外的一些組荆姆。文件存取權(quán)檢查相應(yīng)修改為:不僅將進(jìn)程的有效組ID與文件的組ID相比較蒙幻,而且也將所有附加組ID與文件的組ID進(jìn)行比較。
使用附加組ID的優(yōu)點(diǎn)是我們不必再顯式地經(jīng)常更改組胆筒。一個(gè)用戶(hù)常常會(huì)參加多個(gè)項(xiàng)目組邮破,因此也就要同時(shí)屬于多個(gè)組。