教程|认识终端和shell¶
【教程】在macOS上用VSCode写C++代码 4 认识终端和shell
内建程序与内建命令¶
打开终端,其实相当于打开了shell。shell 可以运行一些程序(例如 sayhello
、 /bin/mkdir
)。
shell自身也带着一些程序(二进制可执行文件),这些程序就叫内建程序。
特点:调用shell内建程序的时候只需要敲一个单词就行了。一个单词,很短,所以把它们称作内建命令。
重要内建命令:which, echo, history, pwd, cd
Ps. 系统自带的程序如果也能用一个单词就调用那么也可以称它们为系统命令
与路径无关¶
which¶
查看shell如何解释后面的命令
得到结果:which: shell built-in command
得到结果:/bin/date
即一个二进制可执行文件
echo¶
将后面输入的东西返回。在显示变量的时候会显示变量的值而不是那个字符串
样例解释:
查看正在使用的 shell
,此时就是bin目录下的zsh程序。还有其他 shell
,但是 macOS
默认的 shell
是 zsh
history¶
显示输入命令的历史
可以带参数,表示最近几次
date¶
输入:
发现都返回 /bin/date
,说明shell用同种方式解析二者。
所以直接输入 date
,shell
就会帮我解析这个单词,然后去调用在文件系统中的 /bin/date
这一个二进制程序,执行这个程序,然后返回当前的时间。
与shell当前工作目录相关¶
pwd¶
%
前的 ~
表示当前所在的目录,用 pwd
可以返回shell当前所在的工作目录,即 ~
文件的绝对路径和相对路径
绝对路径:从根目录开始
相对路径:.
当前路径;..
当前路径的上一级路径,即返回上一级文件夹;...
上级的上级;-
刚刚在的目录;~
家目录
cd¶
跳转 shell
的当前工作目录到指定的目录,参数不区分大小写
想回到上一层目录?用相对路径 cd ..
%
前是当前目录
shell常用命令¶
ls¶
列出当前文件夹下的所有文件,可有参数
cat¶
打开文件,显示文件的内容
clear¶
清空终端中存在的已经执行过的命令( history
仍然可以查看)
mkdir¶
在当前目录下创建文件夹
touch¶
在当前目录下创建文件(一般是文本文件)
rm¶
Ps. 输入过程中点 tab
可以自动补全带后缀的文件名
mv/cp¶
移动文件与复制文件
移动文件到原地相当于重命名
man¶
查看命令的帮助文档
按 Q
退出
open¶
-a
参数指定打开程序(需要使用程序全名)
$(pwd)
表示当前目录,open $(pwd)
表示用 Finder
打开 shell
当前的工作目录 ( open .
也可)
shell常用的操作¶
输出流重定向¶
默认的输出是屏幕显示,现在重定向,不在终端中显示,而是直接写到my.txt文件中去
管道¶
|
:上一个命令(程序)的输出作为下一个命令的输入
grep相当于搜索,从给他的字符串中搜索带有关键词的行
⌃C¶
输入有误时,停止当前输入,退出
此时点 ⌃C
,可以不执行此行,重开一行
空格¶
shell通过空格来分辨命令与参数
如果参数中有空格,需要 \
(转义空格)或 ""
(给参数加引号)
终端进阶与常用的终端操作¶
where¶
where
也是一个 shell
内建命令,和 which
的功能差不多,告诉我们一个命令如何被 shell
解析。
区别:where
能够告诉我们 shell
去解析这个命令的全部可能性,which
是 where
的第一行
vim极简入门¶
可以编辑文本
按 i
进入编辑模式
退出插入模式并保存:⎋ > :
> wq
Ps. ⎋是 esc
⌃D¶
和 ⌃C
差不多,都是退出当前
chmod¶
修改文件权限
环境变量¶
shell
认识给它的命令(单词),所以它就用这个命令(单词)找到需要执行的程序,然后执行这个程序。那 shell
是怎么认识我们给它的单词呢???
查看环境变量:
返回:
其中冒号是分隔符。当给 shell
扔了一个命令之后,shell
先在自己的内建程序中找有没有这个单词,没找到再到环境变量去找。
其他的工具¶
shell脚本--组合你的命令¶
shell脚本:就是把许多命令组合起来,完成一项任务
homebrew--macOS快速安装命令行程序¶
zsh配置文件¶
想要在终端运行自己写的程序,需要给出路径。如果直接 % sayhello
,会得到 zsh: command not found: sayhello
。如何让shell认识我们的单词 sayhello
?
先退回家目录 ~
此时我们直接输入 sayhello
就能得到预期输出!!!
查看所有的shell内建命令¶
man builtins
可以查看shell的所有内建命令
man zshbuiltins
可以查看zsh的所有内建命令