Linux :使用基本知識:文件名

Linux 使用基本知識:文件名
 
 
 
[From] 紅聯Linux論壇:www.linux110.com/bbs

在Linux中,大小寫字母是嚴格區分開的。例如,my-filE、my-file、my-FILE是三個不同的文件(口令也是要嚴格區分大小寫的。同樣,UNIX和C開發語言也都要嚴格區分大小寫字母)。
  
   文件名長度最大可以爲256個字符,它通常是由字母、數字、“.”(點號)、“_”(下劃線)和“-”(減號)組成的。另外還有一些字母是合法的,但 是,我們並不推薦使用它們。例如,“*”(星號)、“?”(問號)、“ ”(空格)、“$”(美元符號)、“&”和任何括號。這些字母對於Linux shell有特定的含義。
  
  文件名中一定不能含有“/ ”,因爲“/ ”在Linux的目錄樹中表示根目錄或是路徑中的分隔符(如同DOS中的“/”)。
  
  在對一個含有特殊字符的文件操作時,應當用一對單引號將其括起來,這樣shell就不會對它們進行處理了。例如,要刪去一個名爲my file*的文件(文件名中有空格和星號),應當寫爲:
  
  $ rm ´my file*´
  
  這裏要注意的是我們使用單引號而非雙引號進行引用。對某些特殊字符即使用雙引號進行引用,shell還是會對其進行解釋,因此雙引號的功能比單引號要弱一些。
  
  下面是對一些特殊字符的說明:
  
  星號(*):匹配零個或多個字符;
  
  ?:匹配任何一個字符;
  
  [abc1]:匹配任何一個在枚舉集合中的字符。在該例中,該集合是a、b、c或1;
  
  [a-z]:匹配任何一個小寫字符;
  
  [A-F]:匹配任何一個從A到F的大寫字符;
  
  [0-9]:匹配任何一個單個數字;
  
  [a-z A-Z 0-9]:匹配任何字符(小寫或大小)或任何數字。
  
  例如,下面的命令將列出當前目錄下的所有文件的文件名(除了以點號開頭的文件)。
  
  $ ls *
  
  以點號開頭的文件類似於DOS中的隱藏文件。用ls -a或ls .*命令纔可以顯示這些文件。這些以點號開頭的文件常在用戶主目錄中,用做用戶的配置文件。
  
  下面的命令顯示了含有點號的文件。
  
  $ ls *.*
  
  下面的命令顯示了含有兩個點號的文件。
  
  $ ls *.*.*
  
  Linux不具備文件擴展名的概念或者任何其它DOS文件名特性(如,Micro~1.doc)。
  
  例如,下面的命令將顯示當前目錄下所有以“a”、“b”或任何大寫字母開頭的文件的文件名。
  
  $ ls [abA-Z]* 

 

 

***********************************************

 

Linux 系統區分英文字符的大小寫。比如 myfile,Myfile 和 myFILE 表示的是三個不同的文件。同樣,用戶密碼和登錄名也需要區分大小寫(這裏沿用了 Unix 和 C 語言的命名規則)。命名目錄和命名文件的規則是相同的。除非有特別的原因,否則用戶創建的文件和目錄名要使用小寫字符。大多數的 Linux 命令也使用小寫字符。

Linux 系統下的文件名長度最多可到256個字符。通常情況下,文件名的字符包括:字母、數字、“.”(點)、“_”(下劃線)和“-”(連字符)。Linux 允許在文件名中使用除上述符號之外的其它符號, 但並不建議用戶這樣做。 有些轉意字符 (即該字符被系統借用,表示某種特殊含義) 在 Linux 的 命令解釋器(shell)中有特殊的含義(shell 類似於 DOS 下的命令處理器 COMMAND.COM)。這樣的轉意字符有:“?”(問號),“*”(星號), “ ”(空格), “$”(貨幣符), “&”, 擴號等等。在文件名中應儘量避免使用這些字符。文件名中可以有“ ”(空格),但建議用戶用“_”(下劃線)來替代。“/” 既可代表目錄樹的根也可作爲路徑名中的分隔符(類似DOS下的“/”),因此“/“不能出現在文件名中。

和 DOS 一樣,“.” 和 “..”分別用來表示“當前目錄”和“父目錄”, 因此它們也不能作爲文件名。

正如 DOS 中一樣,我們不能將文件命名爲 . 或者 .. (點或者雙點)——它們分別代表當前目錄和當前目錄的父目錄(上一級目錄)。這跟 DOS 中是完全一致的。

下面列出了一些轉意字符及其意義:
   * = 用於匹配任意長度大於等於零的字符序列。以 . (點)開頭的文件名除外。
  ? = 用於匹配任意單個字符
   [abC1] = 用於匹配枚舉集合中任意單個字符。比例中,集合由‘a’,‘b’,‘c’,‘1’組成。
   [a-z] = 用於匹配任意小字字母
   [A-F] = 用於匹配任意大寫字母
   [0-9] = 用於匹配任意個位數字
   [a-zA-Z0-9] = 用於匹配任意字母(大小寫)或者數字。

  /(反斜線)也是一個特殊的字符。它屏蔽後繼特殊字母的特殊含義(轉意),使該字符僅取其符號所代表的字面意義。

  例:下面的命令會列出當前目錄中除了文件名以 . 開頭的文件之外的任何文件。

  ls *

與此等價的命令是 ls 或者 dir (不需要後跟 “*”)。 文件名以 . 開頭的文件不被列出是因爲 “.”是文件名的首字符,它並不與“*”匹配。我們可以把文件名以 . 開頭的文件等價地理解成 DOS 中隱藏文件。使用ls –a (帶 all 選項的 ls 命令)或者 ls .* 命令來查看這些“點”文件。“點”文件在用戶的 home 目錄中很常見。它們通常是用戶級的配置文件。

  以下命令可列出當前目錄中文件名含 . 的任何文件 (文件名以點開頭的除外)。

  ls *.*

  以下命令可列出當前目錄中文件名含兩個點的任何文件(文件名以點開頭的除外)。

  ls *.*.*

請注意 Linux 中沒有與 DOS 中文件擴展名相應的概念,但是你可以使用擴展名。例如,一個文件可以命名爲 my_text.txt.zip 。另有一些 DOS 中的命名特色在 Linux 中是完全找不到的(比方說Micro~1.doc )。

以下的命令會找出擴展名爲“htm”後再跟任意一個字符的文件:

  locate *.htm?

以下命令可列出當前目錄中所有文件名以a,b或者任意大寫字母開頭的文件:

  ls [abA-Z]*

以下命令可列出當前目錄中所有文件名以a開頭,以n結尾的文件:

  ls a*n

命令行自動完成是一個有用的功能——使用[Tab]鍵可以極大的節約時間,使處理複雜的長文件名變得輕鬆。例如,使用自動完成的功能,可以極大的減化輸入以下這個長文件名的工作。

  dir Eurosong/ 2000/ Olson/ Brothers/ -/ Fly/ on/ the/ wings/ of/ love/ /(denmark/).mp3

我只要輸入

  dir Eu<Tab>

如果沒有其他文件的文件名以 Eu 開頭,輸入<Tab>之後,系統會自動輸入文件名的其餘部分。
如果還有其他文件的文件名也以 Eu 開頭,我們可以查看一下可能的選擇(系統會列出),進一步輸入文件名中的下一兩個字符,從而使文件的選擇唯一化,系統的自動寫成功能就可以啓動完成整個長文件名的輸入了。文件名中的反斜線作用在於提示系統其後繼的字符“空格”僅取其字面意義,即,文件名中包含的確實是空格。

文件名中的有“怪”字符怎麼辦?大部分問題可以通過自動完成功能解決。另外,處理文件名中含有轉意字符的文件,我們可以使用成對的‘’(單引號)。由於這些特殊的轉意字符被單引號引用,命令解釋器不會試圖去解釋其特殊意義。例如,給一個名爲 my file* 的文件更名(文件名中含空格和*),我們可以使用:

  mv 'my file*' filename_without_weird_characters.txt

請注意我使用了一對‘’號(單引號)。使用成對的“”(雙引號)引用通常沒有使用‘’有效。如果你使用“”號(雙引號),部份轉意字符可能會被命令解釋器加以解釋(這就意味着它們可能被轉意,而不是保持字面意義)。

跟從UNIX的傳統,在 Linux上 ,創建文件時,我們可以在文件名中可以使用幾乎任何字符,包括不可打印字符(控制字符)。但是這情況非常少見。如果你在遇到文件名使用了這些字符,你可能會感覺很異樣。我通常會在適當的位置使用一個轉意字符*對這種文件進行重命名。我會先使用 ls 命令確認我要重命名的文件的文件名,然後對這個文件進行更名(使用 mv 命令):

  ls –l myfile*y.html
  mv myfile*y.html myfile.html

  (此例中我假定非標準字符位於字母e和y之間)

這裏舉一個關於在文件名中使用非常規字符的極端的例子:創建一個文件名以短橫線 - 開頭的文件,再等它刪除。用常規的刪除命令似乎沒有辦法(因爲短橫錢通常是用來引導命令選項的)。例如:

  dir > -junk

以上命令將創建一個以-junk 爲名的文件(跟 DOS 類似,符號 > 將 dir 命令的輸出重定向到一個名爲“-junk”的文件。常規的刪除文件命令無法把這個文件刪除。我們需要使用:

  rm ./-junk

文件名前的./ 表示當前目錄。在此其目的是避免文件名把的首字符 - 被命令解釋器當作 rm 命令的選項引導。事實上沒有必要在文件名中使用這些特殊字符。遵從傳統的命名規則,不會過多地使事情複雜化。

除了使用自動完成,單引號,雙引號之外,我們也可以利用/(反斜線)對文件名中包含了非常規字符的文件進行操作。反斜線的作用在於屏蔽其後繼字符的特殊意義。例如,我可以使用如下命令創建一個以 *?[ 爲文件名的文件:

 touch /*/?/[

 (touch 命令創建一個空文件。如果同名文件已存在,則改變該文件最後更新的日期/時間)。

 

 

 

 


 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章