【教程】在macOS上用VSCode寫C++程式碼 4 認識終端和shell
內建程式與內建命令
開啟終端,其實相當於開啟了shell。shell 可以執行一些程式(例如 sayhello
、 /bin/mkdir
)。
shell自身也帶著一些程式(二進位制可執行檔案),這些程式就叫內建程式。
特點:呼叫shell內建程式的時候只需要敲一個單詞就行了。一個單詞,很短,所以把它們稱作內建命令。
重要內建命令:which, echo, history, pwd, cd
Ps. 系統自帶的程式如果也能用一個單詞就呼叫那麼也可以稱它們為系統命令
與路徑無關
which
檢視shell如何解釋後面的命令
which which
which echo
which history
which pwd
which cd
得到結果:which: shell built-in command
which /bin/date
得到結果:/bin/date
即一個二進位制可執行檔案
echo
將後面輸入的東西返回。在顯示變數的時候會顯示變數的值而不是那個字串
樣例解釋:
echo $SHELL
檢視正在使用的 shell
,此時就是bin目錄下的zsh程式。還有其他 shell
,但是 macOS
預設的 shell
是 zsh
history
顯示輸入命令的歷史
可以帶引數,表示最近幾次
history
history -3
date
輸入:
which date
which /bin/date
發現都返回 /bin/date
,說明shell用同種方式解析二者。
所以直接輸入 date
,shell
就會幫我解析這個單詞,然後去呼叫在檔案系統中的 /bin/date
這一個二進位制程式,執行這個程式,然後返回當前的時間。
與shell當前工作目錄相關
pwd
%
前的 ~
表示當前所在的目錄,用 pwd
可以返回shell當前所在的工作目錄,即 ~
檔案的絕對路徑和相對路徑
絕對路徑:從根目錄開始
相對路徑:.
當前路徑;..
當前路徑的上一級路徑,即返回上一級資料夾;...
上級的上級;-
剛剛在的目錄;~
家目錄
絕對路徑和相對路徑詳解
cd
跳轉 shell
的當前工作目錄到指定的目錄,引數不區分大小寫
想回到上一層目錄?用相對路徑 cd ..
%
前是當前目錄
shell常用命令
參考2020年清華大學電子系科協暑培|Linux
ls
列出當前資料夾下的所有檔案,可有引數
ls
ls -a #顯示隱藏檔案
ls -l
cat
開啟檔案,顯示檔案的內容
cat hello.txt
clear
清空終端中存在的已經執行過的命令( history
仍然可以檢視)
mkdir
在當前目錄下建立資料夾
touch
在當前目錄下建立檔案(一般是文字檔案)
touch test.md
touch t #沒有字尾名的文字檔案,可透過文字編輯開啟,就是之前想要的純文字!
rm
rm test.md #移除某個檔案(不是移動到廢紙簍,而是直接抹掉!!!)
rm -d newFolder #移除某個資料夾
rm -rf newFolder #強制刪除(使用一定慎重!!!)
Ps. 輸入過程中點 tab
可以自動補全帶字尾的檔名
mv/cp
移動檔案與複製檔案
移動檔案到原地相當於重新命名
mv final.c C_Xcode #把final.c移動到C_Xcode資料夾中
mv newFolder/final.c newFolder/ffff.c #重新命名
man
檢視命令的幫助文件
man date
按 Q
退出
open
open foo.md
open -a Visual\ Studio\ Code.app foo.md
open $(pwd)
open .
-a
引數指定開啟程式(需要使用程式全名)
$(pwd)
表示當前目錄,open $(pwd)
表示用 Finder
開啟 shell
當前的工作目錄 ( open .
也可)
shell常用的操作
輸出流重定向
echo "hello world" > my.txt
echo "hhhh" > my.txt #發現檔案內容只有hhhh,因為 > 表示覆蓋
echo "hahaha" >> my.txt # >> 實現追加
預設的輸出是螢幕顯示,現在重定向,不在終端中顯示,而是直接寫到my.txt檔案中去
管道
|
:上一個命令(程式)的輸出作為下一個命令的輸入
history -100 | grep "mkdir" #最近100條中有哪些是帶有mkdir的
grep相當於搜尋,從給他的字串中搜尋帶有關鍵詞的行
⌃C
輸入有誤時,停止當前輸入,退出
this is wrong
此時點 ⌃C
,可以不執行此行,重開一行
空格
shell透過空格來分辨命令與引數
如果引數中有空格,需要 \
(轉義空格)或 ""
(給引數加引號)
終端進階與常用的終端操作
where
where
也是一個 shell
內建命令,和 which
的功能差不多,告訴我們一個命令如何被 shell
解析。
區別:where
能夠告訴我們 shell
去解析這個命令的全部可能性,which
是 where
的第一行
vim極簡入門
可以編輯文字
vim my.txt
按 i
進入編輯模式
退出插入模式並儲存:⎋ > :
> wq
Ps. ⎋是 esc
⌃D
和 ⌃C
差不多,都是退出當前
chmod
修改檔案許可權
chmod a+x <filepath> #使一個檔案有可執行許可權
環境變數
shell
認識給它的命令(單詞),所以它就用這個命令(單詞)找到需要執行的程式,然後執行這個程式。那 shell
是怎麼認識我們給它的單詞呢???
檢視環境變數:
echo $PATH
返回:
其中冒號是分隔符。當給 shell
扔了一個命令之後,shell
先在自己的內建程式中找有沒有這個單詞,沒找到再到環境變數去找。
其他的工具
shell指令碼--組合你的命令
shell指令碼:就是把許多命令組合起來,完成一項任務
homebrew--macOS快速安裝命令列程式
brew官網
zsh配置檔案
想要在終端執行自己寫的程式,需要給出路徑。如果直接 % sayhello
,會得到 zsh: command not found: sayhello
。如何讓shell認識我們的單詞 sayhello
?
先退回家目錄 ~
open ~/.zshrc #返回The file /Users/chasetsai/.zshrc does not exist.說明沒有這個檔案
touch ~/.zshrc #建立一個
echo "alias sayhello=~/desktop/sayhello" > ~/.zshrc #設定別名
source .zshrc #使該檔案生效
此時我們直接輸入 sayhello
就能得到預期輸出!!!
檢視所有的shell內建命令
man builtins
可以檢視shell的所有內建命令
man zshbuiltins
可以檢視zsh的所有內建命令