如何在 ls 命令中更改目錄和文件的顏色

已發表: 2022-01-29

如果你在 Bash 中運行過ls命令,你會注意到你看到的目錄和文件是根據它們的類型著色的。 您可以自定義自己的配色方案,以選擇不同的文本顏色、背景顏色和粗體和下劃線等格式。

這是如何工作的

顏色方案存儲在 LS_COLORS 變量中。 要查看您當前的配色方案,您可以告訴 Bash 打印變量的內容:

 迴聲 $LS_COLORS

您會看到一長串文件類型和數字代碼。 我們將解釋如何自己創建這樣的列表。

在玩這個之前,我們建議將 LS_COLORS 變量的當前內容保存到另一個變量中。 這將允許您快速恢復默認設置,而無需退出 shell 並重新登錄,或者關閉並重新打開終端窗口。 要將 LS_COLORS 變量的當前內容保存到名為 ORIGINAL 的新變量中,請運行:

 原件=$LS_COLORS 

您可以隨時運行以下命令來撤消更改並恢復默認顏色:

 LS_COLORS=$ORIGINAL
廣告

在您編輯文件以使其成為新的默認值之前,您的更改始終是臨時的。 您始終可以退出並重新登錄或關閉並重新打開終端窗口以將顏色恢復為其默認設置。 但是,這使得只需一個快速命令即可輕鬆完成此操作。

如何設置自定義顏色

LS_COLORS 變量包含文件類型列表以及相關的顏色代碼。 默認列表很長,因為它為許多不同的文件類型指定了不同的顏色。

讓我們開始一個基本示例來演示它是如何工作的。 假設我們要將目錄的顏色從默認的粗體藍色更改為粗體紅色。 我們可以運行以下命令來做到這一點:

 LS_COLORS="di=1;31"

di=1;31位告訴ls目錄 ( di ) 是 ( = ) 粗體 ( 1; ) 紅色 ( 31 )。

但是,這只是一個非常簡單的 LS_COLORS 變量,它將目錄定義為一種顏色,並將所有其他類型的文件保留為默認顏色。 假設我們想要將具有 .desktop 文件擴展名的文件也設為帶下劃線的青色。 我們可以運行以下命令來做到這一點:

 LS_COLORS="di=1:31:*.desktop=4;36"
廣告

這告訴ls目錄 ( di ) 是 ( = ) 粗體 ( 1; ) 紅色 ( 31 ) 並且 ( : ) 任何以 .desktop ( *.desktop ) 結尾的文件是 ( = ) 下劃線 ( 4; ) 青色 ( 36 )。

這是組裝文件類型和顏色列表的過程。 以 filetype=color 的形式指定任意數量,用冒號 (:) 分隔每個字符。

相關:如何自定義(和著色)你的 Bash 提示

要組裝您自己的列表,您只需要知道顏色代碼和文件類型代碼的列表。 這使用與您在 Bash 提示中更改顏色時使用的相同的數字顏色代碼。

這是前景文本的顏色代碼列表:

  • 黑色:30
  • 藍色:34
  • 青色:36
  • 綠色:32
  • 紫色:35
  • 紅色:31
  • 白色:37
  • 黃色:33

例如,由於黃色文本的顏色代碼為 33,因此您可以使用di=33將目錄設為黃色。

這是文本顏色屬性的列表:

  • 普通文本:0
  • 粗體或淺色文本:1(取決於終端仿真器。)
  • 暗淡的文字:2
  • 下劃線文字:4
  • 閃爍文本:5(這在大多數終端仿真器中不起作用。)
  • 反轉文本:7(這會反轉前景色和背景色,因此如果當前文本是黑色背景上的白色文本,您將看到白色背景上的黑色文本。)
  • 隱藏文字:8

當指定一個屬性或多個顏色代碼時,用分號 (;) 字符分隔代碼列表。 您不需要為普通文本指定 0,因為當您未在此處指定屬性時使用普通文本。

例如,由於粗體文本是顏色代碼 1,而黃色文本是顏色代碼 33,因此您可以使用di=1;33使目錄變為黃色粗體。 您還可以指定多個屬性。 例如,您可以使用di=1;4;33使目錄變為粗體,並帶有黃色下劃線。

這是背景顏色代碼的列表:

  • 黑色背景:40
  • 藍色背景:44
  • 青色背景:46
  • 綠色背景:42
  • 紫色背景:45
  • 紅色背景:41
  • 白色背景:47
  • 黃色背景:43

例如,由於藍色背景是顏色代碼 44,您可以使用di=44為目錄使用藍色背景。 您還可以組合背景顏色代碼、前景顏色代碼和任意數量的屬性。 例如, di=1;4;33;44會在藍色背景上為您提供粗體、帶下劃線的黃色文本。

這是文件類型代碼的列表:

  • 目錄:di
  • 文件:fi
  • 符號鏈接:ln
  • 命名管道(FIFO):pi
  • 插座:所以
  • 塊設備:bd
  • 字符設備:cd
  • 孤立符號鏈接(指向不再存在的文件):或
  • 缺失文件(孤立符號鏈接指向的缺失文件):mi
  • 可執行文件(具有“x”權限):ex
  • *.extension:任何以您指定的擴展名結尾的文件。 例如,對以 .txt 結尾的文件使用 *.txt,對以 .mp3 結尾的文件使用 *.mp3,對以 .desktop 結尾的文件使用 *.desktop,或者您喜歡的任何其他文件。 您可以指定任意數量的不同文件擴展名。
廣告

指定盡可能多的不同類型的文件類型代碼,使用盡可能多的不同顏色,由 : 字符分隔。 重複此過程以組裝您的 LS_COLORS 變量。

例如,假設您想為目錄使用粗體紫色文本,為可執行文件使用帶下劃線的紅色文本,為 .mp3 文件使用紅色背景上的粗體綠色文本。 將上面列表中的文件類型代碼和顏色代碼放在一起,您會得到:

 LS_COLORS="di=1;35:ex=4;31:*.mp3=1;32;41" 

如何設置新的默認顏色

您現在有一個在當前 Bash 會話中起作用的自定義 LS_COLORS 變量。 但是,您可能希望將其永久化,以便在您開始新的 Bash 會話時自動使用它,而無需記住這一點。

您可以通過將自定義 LS_COLORS 變量添加到您的用戶帳戶的 .bashrc 文件來設置您喜歡的任何其他 Bash 變量。 該文件位於 ~/.bashrc。 因此,如果您的用戶名是 bob,您可以在 /home/bob/.bashrc 中找到它。 還有其他設置環境變量的方法,但這是一種簡單的方法。

首先,在您喜歡的文本編輯器中打開此文件。 我們將在這裡使用 nano 作為示例,但您可以使用 vi、emacs 或任何其他您喜歡的東西。

 納米〜/ .bashrc 

將您的自定義 LS_COLORS 變量添加到文件末尾的新行,如下所示:

 LS_COLORS="di=1;35:ex=4;31:*.mp3=1;32;41"
廣告

保存文件並退出。 在 nano 中,按 Ctrl+O 然後按 Enter 保存,然後按 Ctrl+X 退出。

每當您啟動新的 Bash 會話時,Bash 都會讀取 .bashrc 文件並自動設置您的 LS_COLORS 變量。 要在將來更改顏色,請返回 .bashrc 文件並編輯 LS_COLORS 行。

您也可以刪除添加到 .bashrc 文件中的LS_COLORS=行以再次使用默認顏色。 如果您不設置 LS_COLORS 值,Bash 將使用默認顏色。