【教程】在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常用命令
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快速安装命令行程序
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的所有内建命令