檔案系統中的目錄與切換操作

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第9天,點選檢視活動詳情

cd

cd,change directory,切換當前工作目錄。

除指定目錄外,還有以下特殊目錄。

  • .: 當前工作目錄。
  • ..: 父級工作目錄。
  • /: 根目錄。
  • ~: home 目錄,即當前的使用者目錄,同時也可用環境變數 $HOME 表示。假設當前使用者為 shanyue,則 ~ 目錄為 /Users/shanyue (mac系統)。

另外,cd - 為進入上一次的工作目錄,如同 git checout - 切回上次的分支一樣。

bash $ cd ~ $ cd - $ cd $HOME

cd 外,有一個擁有強大功能切換目錄的小工具 autojump

autojump 需要進行手動下載。

``` bash

切換至含有 foo 子字串的某個目錄

$ j foo ```

Q: 你知道 autojump 原理嗎,你可以寫出來一個 autojump 命令列小工具嗎?

pwd

pwd,print working directory,列印當前工作目錄。

``` bash

列印當前路徑,該目錄為 react 原始碼內容

$ pwd /Users/shanyue/Documents/react ```

ls

ls,列出某個工作目錄的內容。

ls 單指令不會列出以 . 開頭的檔案,比如 .git.babelrc.eslintrc 均不會預設顯示。而使用 -a,將會把所有檔案列出。

在日常工作中,常使用 ls -lah 列出工作目錄內容。

``` bash

-l: 使用長列表格式

-a: 列出所有檔案,包括以 . 開頭的檔案

-h: 以可讀的形式表示檔案體積,比如 100M

$ ls -lah total 2176 drwxr-xr-x 36 shanyue shanyue 1.1K 6 10 15:45 . [email protected] 242 shanyue shanyue 7.6K 5 29 09:37 .. drwxr-xr-x 3 shanyue shanyue 96B 6 10 15:45 .circleci drwxr-xr-x 3 shanyue shanyue 96B 6 10 15:45 .codesandbox -rw-r--r-- 1 shanyue shanyue 294B 5 22 2021 .editorconfig -rw-r--r-- 1 shanyue shanyue 759B 6 10 15:45 .eslintignore -rw-r--r-- 1 shanyue shanyue 8.4K 6 10 15:45 .eslintrc.js drwxr-xr-x 14 shanyue shanyue 448B 6 10 15:45 .git -rw-r--r-- 1 shanyue shanyue 12B 5 22 2021 .gitattributes drwxr-xr-x 6 shanyue shanyue 192B 9 8 2021 .github -rw-r--r-- 1 shanyue shanyue 881B 6 10 15:45 .gitignore -rw-r--r-- 1 shanyue shanyue 7.6K 5 22 2021 .mailmap -rw-r--r-- 1 shanyue shanyue 9B 6 10 15:45 .nvmrc -rw-r--r-- 1 shanyue shanyue 546B 6 10 15:45 .prettierignore -rw-r--r-- 1 shanyue shanyue 363B 5 22 2021 .prettierrc.js -rw-r--r-- 1 shanyue shanyue 3B 5 22 2021 .watchmanconfig -rw-r--r-- 1 shanyue shanyue 42K 5 22 2021 AUTHORS -rw-r--r-- 1 shanyue shanyue 198K 6 10 15:45 CHANGELOG.md -rw-r--r-- 1 shanyue shanyue 3.5K 5 22 2021 CODE_OF_CONDUCT.md -rw-r--r-- 1 shanyue shanyue 216B 5 22 2021 CONTRIBUTING.md -rw-r--r-- 1 shanyue shanyue 1.1K 5 22 2021 LICENSE -rw-r--r-- 1 shanyue shanyue 5.1K 6 10 15:45 README.md -rw-r--r-- 1 shanyue shanyue 1.5K 6 10 15:45 ReactVersions.js -rw-r--r-- 1 shanyue shanyue 400B 5 22 2021 SECURITY.md -rw-r--r-- 1 shanyue shanyue 671B 9 2 2021 appveyor.yml -rw-r--r-- 1 shanyue shanyue 1.0K 5 22 2021 babel.config.js drwxr-xr-x 6 shanyue shanyue 192B 9 4 2021 build drwxr-xr-x 2 shanyue shanyue 64B 9 4 2021 build2 -rw-r--r-- 1 shanyue shanyue 7.5K 6 10 15:45 dangerfile.js drwxr-xr-x 23 shanyue shanyue 736B 6 10 15:45 fixtures -rw-r--r-- 1 shanyue shanyue 220B 5 22 2021 netlify.toml drwxr-xr-x 1426 shanyue shanyue 45K 9 2 2021 node_modules -rw-r--r-- 1 shanyue shanyue 7.2K 6 10 15:45 package.json drwxr-xr-x 39 shanyue shanyue 1.2K 6 10 15:45 packages drwxr-xr-x 22 shanyue shanyue 704B 9 2 2021 scripts -rw-r--r-- 1 shanyue shanyue 733K 6 10 15:45 yarn.lock ```

那在 ls 每一行都代表什麼資訊?在下一節內容講述。

Q: 如何配置顏色區分目錄和檔案呢,見下截圖。

exa

一個 ls 的替代品,擁有更友好的色彩更豐富的輸出,同時支援更豐富的選項。

``` bash

支援檢視 git 情況

$ exa -lah --git ```

tree

tree,以樹狀圖的形式列出檔案。

該命令需要手動下載。

``` bash

macos

$ brew install tree

centos

$ yum install tree ```

可通過 -L 指定層級,平常工作可使用以下指令。

``` bash

-a: 列出所有檔案

-F: 對目錄末尾新增 /,對可執行檔案末尾新增 *

-L: 指定層級

$ tree packages/react-dom -aF -L 2 packages/react-dom |-- README.md |-- client.js |-- index.classic.fb.js |-- index.experimental.js |-- index.js |-- index.modern.fb.js |-- index.stable.js |-- npm/ | |-- client.js | |-- index.js | |-- profiling.js | |-- server.browser.js | |-- server.js | |-- server.node.js | |-- test-utils.js | -- unstable_testing.js |-- package.json |-- server.browser.js |-- server.js |-- server.node.js |-- src/ | |-- __tests__/ | |-- client/ | |-- events/ | |-- server/ | |-- shared/ |-- test-utils/ |-- test-utils.js |-- unstable_testing.classic.fb.js |-- unstable_testing.experimental.js |-- unstable_testing.js |-- unstable_testing.modern.fb.js `-- unstable_testing.stable.js

8 directories, 25 files ```

同時,也可以使用更高階的 exa -T 列印樹狀檔案。

``` bash

-T: --tree,以樹狀圖的形式列出檔案

-L: --level,指定層級

$ exa -lah -T -L 2 packages/react-dom ```

作業

  1. 熟悉 cd、pwd、ls、exa、tree 等命令
  2. ls 單指令列出檔案列表時為何不顯示 .git 目錄,應如何顯示
  3. 在 Node.js 或其它語言中如何獲得 pwd
  4. 在 Node.js 或其它語言中如何獲得 ls 子檔案列表。參考 fsp.readdirreaddir