寫在前面
命令行已經成為前端程序員必備的一項基礎技能。如今的前端開發嚴重依賴命令行,通過 node 部署前端開發環境,通過 git 實現版本管理,命令行還可以更有效地控制操作系統(mac 尤甚)。熟練地掌握命令行,可以極大地提升工作效率,本文將介紹前端開發所需要的常用命令行操作
定義
命令行( command line ) 是一個應用程序,它是一個基於文本(或者說基於命令)的進行文件操作的應用程序,類似於 mac 中的 Finder 或者 Windows 中的資源管理器,但是沒有圖形界面
一般地,命令行( command line )又代指命令行界面( command line interface ),簡稱為CLI,也稱為字符用戶界面。在 Windows 中稱為 cmd 或者 命令提示符,在 Mac 中稱為 終端 或者 控制台,在 Linux 中稱為 shell(常見的是 bash )

常用命令
DOS 系統和 Linux 系統的命令有些不同,下面主要介紹 Linux 系統下的 bash 命令
一般規則
在了解命令行常用命令之前,要先了解命令行的一般規則。如果命令行正確執行,則界面不會有任何反饋;如果錯誤執行,則會提示報錯信息
特殊符號
# 代表注釋
\ 代表轉義字符,可以將特殊符號變成一般字符
$ 代表的是目前這個 Shell 的線程代號,即是所謂的 PID(process ID),使用echo $$,出現的數字就是 SHELL 的 PID 代碼
$ echo $$ # 5477
? 是一個特殊的變量,代表上一個執行的命令所回傳的值。如果成功執行該命令,則會回傳一個 0 值,如果執行過程發生錯誤,就會回傳一個非 0 的值
$ echo $? # 0
縮寫
所謂的命令實際上就是單詞的縮寫,有以下幾種常見縮寫方式:
1、最常見的縮寫是取每個單詞的首字母
cd Change Direcroty 切換目錄
2、如果首字母后為h,則保留h
chmod CHange MODe 切換文件權限
3、 如果只有一個單詞,通常取每個音節的首字母
cp Copy 文件拷貝
4、取前幾個字母作為縮寫
diff DIFFerences 比較文件差異
操作命令
clear 清屏
unset 取消變量
$ unset abc # 取消變量 abc
alias 用來設置別名,單獨使用alias,可以查看當前已經設置的別名;unalias 用來取消設置的別名
$ alias # 查看當前已經設置的別名
$ alias lm='ls -l | more' # 設置別名 lm
$ unalias lm # 取消別名 lm 的設置
open 可以使用默認方式打開文件,使用 alias 和 open 配合,可以使用命令行來打開網頁
alias cnblogs='open https://cnblogs.com'
目錄命令
【特殊符號】
.表示當前目錄
..表示上級目錄
-表示前一次目錄
~表示用戶目錄
【顯示目錄】
pwd # print work directory 顯示當前工作目錄的絕對路徑
【切換目錄】
cd # change directory 切換工作目錄
# 如果不帶任何參數,或使用波浪號(~),切換到用戶目錄
【創建目錄】
mkdir # make directory 創建目錄
$ mkdir a # 創建目錄 a
$ mkdir b c # 創建目錄 b 和 c
$ mkdir -p a/b/c # 創建有層級的目錄(a/b/c),需要使用 -p 選項
【刪除目錄】
rmdir # 刪除空目錄
rm -r # 刪除目錄及該目錄下的所有目錄及文件
$ rm -r a # 刪除目錄 a
# 千萬不要使用 rm -rf /,該命令會刪除所有文件
【復制目錄】
cp # copy 復制文件(或目錄)
$ cp -r a b # 將目錄 a 復制到目錄 b
【移動目錄】
mv # move 移動文件(或目錄)),或者重命名
$ mv a b # 將目錄 a 從當前目錄移動到目錄 b 下
$ mv a b # 如果沒有目錄 b,則目錄 a 重命名為目錄 b
文件命令
【特殊符號】
> 表示覆蓋
>> 表示累加
【顯示目錄下文件】
ls # 顯示該目錄下的所有文件 list files,默認不顯示以點開頭的文件
ls -a # 顯示所有文件,包括隱藏文件
ls -l # 顯示每個文件的詳細信息
ls ./y # 顯示指定路徑 ./y 下的所有文件
【查看文件內容】
open # 使用默認軟件打開文件
cat # 顯示文件內容
其實,更常用的文件查看方式是使用 vscode
$ code a.txt # 使用 vscode 打開 a.txt 文件
要使用上述命令,需要進行如下設置:運行 vscode 並打開命令面板(⇧⌘P ),輸入 shell command 找到: Install ‘code' command in PATH,並點擊
【新建文件】
touch # 創建文件
$ touch a.txt # 創建空文件a.txt,如果a.txt已經有內容,則修改文件最后更新時間
echo # 輸出字符串,也可以新建或改寫文件
$ echo 123 # 輸入字符串'123'
$ echo -e '111\n222' # 輸入多行內容,需要使用-e選項
$ echo 123 > 1.txt # 將1.txt的內容改寫為'123'
$ echo abc >> 1.txt # 向1.txt追加內容,則1.txt的內容為'123 \n abc'
【刪除文件】
rm # remove 刪除文件
rm -f # 強制刪除
rm -i # 刪除文件之前先詢問確認,用戶回復y或Y之后,文件才會真的被刪除
$ rm a.txt # 刪除文件a.txt
【復制文件】
cp # copy 復制文件(或目錄)
$ cp 1.txt 2.txt # 將1.txt的內容復制到2.txt
【移動文件】
mv # move 移動文件(或目錄),或者重命名
$ mv 1.txt 2.txt # 如果在同一目錄下,則將1.txt重命名為2.txt
$ mv 1.txt a # 如果不在同一目錄下,則將1.txt移動到指定的目錄a下
$ mv 1.txt a/2.txt # 也可以在移動到目錄a的同時,重命名為2.txt
快捷鍵
在 Mac 下,iTerm2 需要設置才能使用 alt 快捷鍵
打開 Preferences > Profiles > Keys,left Keys 選擇 Esc+
【光標移動】
ctrl + a 移動到命令行最左側(ahead)
ctrl + e 移動到命令行最右側(end)
alt + b 向左移動一個單詞(back)
alt + f 向右移動一個單詞(forward)
【內容剪貼】
ctrl + k 剪切從光標位置到行尾的字符 (kill)
ctrl + u 剪切從光標位置到行首的字符 (undo)
ctrl + w 或 alt + backspace 剪切光標前的單詞(word)
alt + d 剪切光標后的單詞(delete)
ctrl + y 將剪貼板的內容粘貼到光標處
【控制】
ctrl + c 強制終止當前命令
ctrl + l 清屏
一次 tab 補全
兩次 tab 提示
命令組合
使用多命令執行符和管道符可以實現命令組合的目的
【多命令執行符】
命令1;命令2 多個命令順序執行,命令之間沒有任何邏輯關系
命令1&&命令2 邏輯與,命令1成功,才會執行命令2
命令1||命令2 邏輯或,命令1不成功,才會執行命令2
【管道符】
命令1 | 命令2 命令1的正確輸出作為命令2的操作對象
$ ls -al /etc | less
上面代碼中,使用 ls 命令輸出后的內容就能夠被 less 讀取,並利用 less 的功能,就能夠前后翻動相關的信息了
腳本文件
腳本文件類似於DOS操作系統中的批處理文件.bat,它可以將不同的命令組合起來,並按確定的順序自動連續地執行
比如,一個常見的需求是把 chrome 的下載目錄中的 excel 文件存儲到專門的文檔文件夾里
1、新建並打開腳本文件
$ touch mvExl.txt
$ chmod + x mvExl.txt
$ code mvExl.txt
2、修改腳本文件,將 Downloads 目錄下所有的 excel 文件都移動到 backup 目錄下的 xls 目錄中
mv /Users/xiaohuochai/Downloads/*.xls /Users/xiaohuochai/Desktop/backup/xls
3、執行該文件即可
sh mvExl.txt
# 或者
sh ./mvExl.txt
當然,可以利用傳參,將其他類型的文件比如 zip 文件也移動到 backup 目錄下的 zip 目錄中
# 設置變量
basePath=/Users/xiaohuochai
targetPartPath=Desktop/backup
# 如果不存在 $1 文件夾,則新建 $1 文件夾
# $1 表示第一個參數
# -d 表示該文件名是否存在且是一個目錄
if [ -d $basePath/$targetPartPath/$1 ]; then
echo 'exist'
else
cd $basePath/$targetPartPath
mkdir $1
fi
# 移動文件
# 注意,如果加上引號,寫成"$basePath/Downloads/*.$1",則 * 只表示 * 本身,而不表示任意字符
mv $basePath/Downloads/*.$1 $basePath/$targetPartPath/$1
echo 'done'

最后
本文只介紹了常用的基本命令,更詳細的命令可查看下面的文章
