寫在前面
命令行已經成為前端程序員必備的一項基礎技能。如今的前端開發嚴重依賴命令行,通過 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'
最后
本文只介紹了常用的基本命令,更詳細的命令可查看下面的文章