摘要:使用什麼模式並不重要,因爲你可以使用 --hide 選項創建自己的排除項:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar.xfc baz.txt #foo.asc# foo.asc\u003Cbr\u003E$ ls --hide=\"#*#\"\u003Cbr\u003Ebar.xfc baz.txt foo.asc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E遞歸地列出目錄\u003C\u002Fh1\u003E\u003Cp\u003E除非你在指定目錄上運行 ls,否則子目錄的內容不會與 ls 命令一起列出:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -F\u003Cbr\u003Eexample\u002F quux* xyz.txt\u003Cbr\u003E$ ls -R\u003Cbr\u003Equux xyz.txt\u003Cbr\u003E.\u002Fexample:\u003Cbr\u003Ebar.xfc baz.txt #foo.asc# foo.asc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E使用別名使其永久化\u003C\u002Fh1\u003E\u003Cp\u003Els 命令可能是 shell 會話期間最常使用的命令。可以覆蓋該別名以查看備份文件:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar baz foo\u003Cbr\u003E$ \\ls\u003Cbr\u003Ebar baz baz~ foo\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E做一件事,把它做好\u003C\u002Fh1\u003E\u003Cp\u003Els 命令有很多選項,其中許多是特定用途的或高度依賴於你所使用的終端。

"\u003Cdiv\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F4d9b6556e6b346c18e9f7cc7c347d16e\" img_width=\"999\" img_height=\"563\" alt=\"精通 Linux 的 ls 命令\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cblockquote\u003E\u003Cp\u003ELinux 的 ls 命令擁有數量驚人的選項,可以提供有關文件的重要信息。\u003C\u002Fp\u003E\u003Cp\u003E-- Seth Kenlon(作者)\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003Els 命令可以列出一個 POSIX 系統上的文件。這是一個簡單的命令,但它經常被低估,不是它能做什麼(因爲它確實只做了一件事),而是你該如何優化對它的使用。\u003C\u002Fp\u003E\u003Cp\u003E要知道在最重要的 10 個終端命令中,這個簡單的 ls 命令可以排進前三,因爲 ls 不會只是列出文件,它還會告訴你有關它們的重要信息。它會告訴你諸如擁有文件或目錄的人、每個文件修改的時間、甚至是什麼類型的文件。它的附帶功能能讓你瞭解你在哪裏、附近有些什麼,以及你可以用它們做什麼。\u003C\u002Fp\u003E\u003Cp\u003E如果你對 ls 的體驗僅限於你的發行版在 .bashrc 中的別名,那麼你可能錯失了它。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003EGNU 還是 BSD?\u003C\u002Fh1\u003E\u003Cp\u003E在瞭解 ls 的隱藏能力之前,你必須確定你正在運行哪個 ls 命令。有兩個最流行的版本:包含在 GNU coreutils 包中的 GNU 版本,以及 BSD 版本。如果你正在運行 Linux,那麼你很可能已經安裝了 GNU 版本的 ls(LCTT 譯註:幾乎可以完全確定)。如果你正在運行 BSD 或 MacOS,那麼你有的是 BSD 版本。本文會介紹它們的不同之處。\u003C\u002Fp\u003E\u003Cp\u003E你可以使用 --version 選項找出你計算機上的版本:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls --version\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果它返回有關 GNU coreutils 的信息,那麼你擁有的是 GNU 版本。如果它返回一個錯誤,你可能正在運行的是 BSD 版本(運行 man ls | head 以確定)。\u003C\u002Fp\u003E\u003Cp\u003E你還應該調查你的發行版可能具有哪些預設選項。終端命令的自定義通常放在 $HOME\u002F.bashrc 或 $HOME\u002F.bash_aliases 或 $HOME\u002F.profile 中,它們是通過將 ls 別名化爲更復雜的 ls 命令來完成的。例如:\u003C\u002Fp\u003E\u003Cpre\u003Ealias ls='ls --color'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E發行版提供的預設非常有用,但它們確實很難分辨出哪些是 ls 本身的特性,哪些是它的附加選項提供的。你要是想要運行 ls 命令本身而不是它的別名,你可以用反斜槓“轉義”命令:\u003C\u002Fp\u003E\u003Cpre\u003E$ \\ls\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E分類\u003C\u002Fh1\u003E\u003Cp\u003E單獨運行 ls 會以適合你終端的列數列出文件:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls ~\u002Fexample\u003Cbr\u003Ebunko jdk-10.0.2\u003Cbr\u003Echapterize otf2ttf.ff\u003Cbr\u003Edespacer overtar.sh\u003Cbr\u003Eestimate.sh pandoc-2.7.1\u003Cbr\u003Efop-2.3 safe_yaml\u003Cbr\u003Egames tt\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這是有用的信息,但所有這些文件看起來基本相同,沒有方便的圖標來快速表示出哪個是目錄、文本文件或圖像等等。\u003C\u002Fp\u003E\u003Cp\u003E使用 -F(或 GNU 上的長選項 --classify)以在每個條目之後顯示標識文件類型的指示符:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls ~\u002Fexample\u003Cbr\u003Ebunko jdk-10.0.2\u002F\u003Cbr\u003Echapterize* otf2ttf.ff*\u003Cbr\u003Edespacer* overtar.sh*\u003Cbr\u003Eestimate.sh pandoc@\u003Cbr\u003Efop-2.3\u002F pandoc-2.7.1\u002F\u003Cbr\u003Egames\u002F tt*\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E使用此選項,終端中列出的項目使用簡寫符號來按文件類型分類:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E斜槓(\u002F)表示目錄(或“文件夾”)。\u003C\u002Fli\u003E\u003Cli\u003E星號(*)表示可執行文件。這包括二進制文件(編譯代碼)以及腳本(具有 可執行權限 的文本文件)。\u003C\u002Fli\u003E\u003Cli\u003E符號(@)表示符號鏈接(或“別名”)。\u003C\u002Fli\u003E\u003Cli\u003E等號(=)表示套接字。\u003C\u002Fli\u003E\u003Cli\u003E在 BSD 上,百分號(%)表示 塗改(whiteout)(某些文件系統上的文件刪除方法)。\u003C\u002Fli\u003E\u003Cli\u003E在 GNU 上,尖括號(>)表示 門(door)( Illumos 和 Solaris上的進程間通信)。\u003C\u002Fli\u003E\u003Cli\u003E豎線(|)表示 FIFO 管道。 這個選項的一個更簡單的版本是 -p,它只區分文件和目錄。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E(LCTT 譯註:在支持彩色的終端上,使用 --color 選項可以以不同的顏色來區分文件類型,但要注意如果將輸出導入到管道中,則顏色消失。)\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E長列表\u003C\u002Fh1\u003E\u003Cp\u003E從 ls 獲取“長列表”的做法是如此常見,以至於許多發行版將 ll 別名爲 ls -l。長列表提供了許多重要的文件屬性,例如權限、擁有每個文件的用戶、文件所屬的組、文件大小(以字節爲單位)以及文件上次更改的日期:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -l\u003Cbr\u003E-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh\u003Cbr\u003E-rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial\u003Cbr\u003E-rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz\u003Cbr\u003E-rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito\u003Cbr\u003E-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh\u003Cbr\u003E[...]\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果你不想以字節爲單位,請添加 -h 標誌(或 GNU 中的 --human)以將文件大小轉換爲更加人性化的表示方法:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls --human\u003Cbr\u003E-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh\u003Cbr\u003E-rwxrwxr-x. 1 seth seth 662 Apr 29 22:27 factorial\u003Cbr\u003E-rwxrwx---. 1 seth users 20M Jun 29 2018 fop-2.3-bin.tar.gz\u003Cbr\u003E-rwxrwxr-x. 1 seth seth 6.1K May 22 10:22 geteltorito\u003Cbr\u003E-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E要看到更少的信息,你可以帶有 -o 選項只顯示所有者的列,或帶有 -g 選項只顯示所屬組的列:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -o\u003Cbr\u003E-rwxrwx---. 1 seth 455 Mar 2 2017 estimate.sh\u003Cbr\u003E-rwxrwxr-x. 1 seth 662 Apr 29 22:27 factorial\u003Cbr\u003E-rwxrwx---. 1 seth 20M Jun 29 2018 fop-2.3-bin.tar.gz\u003Cbr\u003E-rwxrwxr-x. 1 seth 6.1K May 22 10:22 geteltorito\u003Cbr\u003E-rwxrwx---. 1 seth 177 Nov 12 2018 html4mutt.sh\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E也可以將兩個選項組合使用以顯示兩者。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E時間和日期格式\u003C\u002Fh1\u003E\u003Cp\u003Els 的長列表格式通常如下所示:\u003C\u002Fp\u003E\u003Cpre\u003E-rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh\u003Cbr\u003E-rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial\u003Cbr\u003E-rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz\u003Cbr\u003E-rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito\u003Cbr\u003E-rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E月份的名字不便於排序,無論是通過計算還是識別(取決於你的大腦是否傾向於喜歡字符串或整數)。你可以使用 --time-style 選項和格式名稱更改時間戳的格式。可用格式爲:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003Efull-iso:ISO 完整格式(1970-01-01 21:12:00)\u003C\u002Fli\u003E\u003Cli\u003Elong-iso:ISO 長格式(1970-01-01 21:12)\u003C\u002Fli\u003E\u003Cli\u003Eiso:iso 格式(01-01 21:12)\u003C\u002Fli\u003E\u003Cli\u003Elocale:本地化格式(使用你的區域設置)\u003C\u002Fli\u003E\u003Cli\u003Eposix-STYLE:POSIX 風格(用區域設置定義替換 STYLE)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E你還可以使用 date 命令的正式表示法創建自定義樣式。\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E按時間排序\u003C\u002Fh1\u003E\u003Cp\u003E通常,ls 命令按字母順序排序。你可以使用 -t 選項根據文件的最近更改的時間(最新的文件最先列出)進行排序。\u003C\u002Fp\u003E\u003Cp\u003E例如:\u003C\u002Fp\u003E\u003Cpre\u003E$ touch foo bar baz\u003Cbr\u003E$ ls\u003Cbr\u003Ebar baz foo\u003Cbr\u003E$ touch foo\u003Cbr\u003E$ ls -t\u003Cbr\u003Efoo bar baz\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E列出方式\u003C\u002Fh1\u003E\u003Cp\u003Els 的標準輸出平衡了可讀性和空間效率,但有時你需要按照特定方式排列的文件列表。\u003C\u002Fp\u003E\u003Cp\u003E要以逗號分隔文件列表,請使用 -m:\u003C\u002Fp\u003E\u003Cpre\u003Els -m ~\u002Fexample\u003Cbr\u003Ebar, baz, foo\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E要強制每行一個文件,請使用 -1 選項(這是數字 1,而不是小寫的 L):\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -1 ~\u002Fbin\u002F\u003Cbr\u003Ebar\u003Cbr\u003Ebaz\u003Cbr\u003Efoo\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E要按文件擴展名而不是文件名對條目進行排序,請使用 -X(這是大寫 X):\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar.xfc baz.txt foo.asc\u003Cbr\u003E$ ls -X\u003Cbr\u003Efoo.asc baz.txt bar.xfc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E隱藏雜項\u003C\u002Fh1\u003E\u003Cp\u003E在某些 ls 列表中有一些你可能不關心的條目。例如,元字符 . 和 .. 分別代表“本目錄”和“父目錄”。如果你熟悉在終端中如何切換目錄,你可能已經知道每個目錄都將自己稱爲 .,並將其父目錄稱爲 ..,因此當你使用 -a 選項顯示隱藏文件時並不需要它經常提醒你。\u003C\u002Fp\u003E\u003Cp\u003E要顯示幾乎所有隱藏文件(. 和 .. 除外),請使用 -A 選項:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -a\u003Cbr\u003E.\u003Cbr\u003E..\u003Cbr\u003E.android\u003Cbr\u003E.atom\u003Cbr\u003E.bash_aliases\u003Cbr\u003E[...]\u003Cbr\u003E$ ls -A\u003Cbr\u003E.android\u003Cbr\u003E.atom\u003Cbr\u003E.bash_aliases\u003Cbr\u003E[...]\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E有許多優秀的 Unix 工具有保存備份文件的傳統,它們會在保存文件的名稱後附加一些特殊字符作爲備份文件。例如,在 Vim 中,備份會以在文件名後附加 ~ 字符的文件名保存。\u003C\u002Fp\u003E\u003Cp\u003E這些類型的備份文件已經多次使我免於愚蠢的錯誤,但是經過多年享受它們提供的安全感後,我覺得不需要用視覺證據來證明它們存在。我相信 Linux 應用程序可以生成備份文件(如果它們聲稱這樣做的話),我很樂意相信它們存在 —— 而不用必須看到它們。\u003C\u002Fp\u003E\u003Cp\u003E要隱藏備份文件,請使用 -B 或 --ignore-backups 隱藏常用備份格式(此選項在 BSD 的 ls 中不可用):\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar.xfc baz.txt foo.asc~ foo.asc\u003Cbr\u003E$ ls -B\u003Cbr\u003Ebar.xfc baz.txt foo.asc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E當然,備份文件仍然存在;它只是過濾掉了,你不必看到它。\u003C\u002Fp\u003E\u003Cp\u003E除非另有配置,GNU Emacs 在文件名的開頭和結尾添加哈希字符(#)來保存備份文件(#file#)。其他應用程序可能使用不同的樣式。使用什麼模式並不重要,因爲你可以使用 --hide 選項創建自己的排除項:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar.xfc baz.txt #foo.asc# foo.asc\u003Cbr\u003E$ ls --hide=\"#*#\"\u003Cbr\u003Ebar.xfc baz.txt foo.asc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E遞歸地列出目錄\u003C\u002Fh1\u003E\u003Cp\u003E除非你在指定目錄上運行 ls,否則子目錄的內容不會與 ls 命令一起列出:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls -F\u003Cbr\u003Eexample\u002F quux* xyz.txt\u003Cbr\u003E$ ls -R\u003Cbr\u003Equux xyz.txt\u003Cbr\u003E.\u002Fexample:\u003Cbr\u003Ebar.xfc baz.txt #foo.asc# foo.asc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E使用別名使其永久化\u003C\u002Fh1\u003E\u003Cp\u003Els 命令可能是 shell 會話期間最常使用的命令。這是你的眼睛和耳朵,爲你提供上下文信息和確認命令的結果。雖然有很多選項很有用,但 ls 之美的一部分就是簡潔:兩個字符和回車鍵,你就知道你到底在哪裏以及附近有什麼。如果你不得不停下思考(更不用說輸入)幾個不同的選項,它會變得不那麼方便,所以通常情況下,即使最有用的選項也不會用了。\u003C\u002Fp\u003E\u003Cp\u003E解決方案是爲你的 ls 命令添加別名,以便在使用它時,你可以獲得最關心的信息。\u003C\u002Fp\u003E\u003Cp\u003E要在 Bash shell 中爲命令創建別名,請在主目錄中創建名爲 .bash_aliases 的文件(必須在開頭包含 .)。 在此文件中,列出要創建的別名,然後是要爲其創建別名的命令。例如:\u003C\u002Fp\u003E\u003Cpre\u003Ealias ls='ls -A -F -B --human --color'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E這一行導致你的 Bash shell 將 ls 命令解釋爲 ls -A -F -B --human --color。\u003C\u002Fp\u003E\u003Cp\u003E你不必僅限於重新定義現有命令,還可以創建自己的別名:\u003C\u002Fp\u003E\u003Cpre\u003Ealias ll='ls -l'\u003Cbr\u003Ealias la='ls -A'\u003Cbr\u003Ealias lh='ls -h'\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E要使別名起作用,shell 必須知道 .bash_aliases 配置文件存在。在編輯器中打開 .bashrc 文件(如果它不存在則創建它),幷包含以下代碼塊:\u003C\u002Fp\u003E\u003Cpre\u003Eif [ -e $HOME\u002F.bash_aliases ]; then\u003Cbr\u003E source $HOME\u002F.bash_aliases\u003Cbr\u003Efi\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E每次加載 .bashrc(這是一個新的 Bash shell 啓動的時候),Bash 會將 .bash_aliases 加載到你的環境中。你可以關閉並重新啓動 Bash 會話,或者直接強制它執行此操作:\u003C\u002Fp\u003E\u003Cpre\u003E$ source ~\u002F.bashrc\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果你忘了你是否有別名命令,which 命令可以告訴你:\u003C\u002Fp\u003E\u003Cpre\u003E$ which ls\u003Cbr\u003Ealias ls='ls -A -F -B --human --color'\u003Cbr\u003E \u002Fusr\u002Fbin\u002Fls\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E如果你將 ls 命令別名爲帶有選項的 ls 命令,則可以通過將反斜槓前綴到 ls 前來覆蓋你的別名。例如,在示例別名中,使用 -B 選項隱藏備份文件,這意味着無法使用 ls 命令顯示備份文件。 可以覆蓋該別名以查看備份文件:\u003C\u002Fp\u003E\u003Cpre\u003E$ ls\u003Cbr\u003Ebar baz foo\u003Cbr\u003E$ \\ls\u003Cbr\u003Ebar baz baz~ foo\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Ch1 class=\"ql-align-center\"\u003E做一件事,把它做好\u003C\u002Fh1\u003E\u003Cp\u003Els 命令有很多選項,其中許多是特定用途的或高度依賴於你所使用的終端。在 GNU 系統上查看 info ls,或在 GNU 或 BSD 系統上查看 man ls 以瞭解更多選項。\u003C\u002Fp\u003E\u003Cp\u003E你可能會覺得奇怪的是,一個以每個工具“做一件事,把它做好”的前提而聞名的系統會讓其最常見的命令揹負 50 個選項。但是 ls 只做一件事:它列出文件,而這 50 個選項允許你控制接收列表的方式,ls 的這項工作做得非常、非常好。\u003C\u002Fp\u003E\u003Chr\u003E\u003Cp\u003Evia: https:\u002F\u002Fopensource.com\u002Farticle\u002F19\u002F7\u002Fmaster-ls-command\u003C\u002Fp\u003E\u003Cp\u003E作者: Seth Kenlon 選題: lujun9972 譯者: wxy 校對: wxy\u003C\u002Fp\u003E\u003Cp\u003E本文由 LCTT 原創編譯, Linux中國 榮譽推出\u003C\u002Fp\u003E\u003Ch1 class=\"ql-align-center\"\u003E點擊“瞭解更多”可訪問文內鏈接\u003C\u002Fh1\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6), groupId: '6718949918729306638
相關文章