Shell & Bash
命名行在程序员的常用的技能,命令行由Shell提供,传递给操作系统内核。学习命令行就是在学Shell指令,Mac-OS 下的默认shell是bash
。
Shell
Shell:命名语言解释器(command-language-interpreter),你和操作系统内核之间的接口程序,内建了shell指令集。
Bash
一个命令处理器,全称:Bourne-Again Shell,Bash是Bourne shell后继兼容版本与开放源代码版本,Bourne shell 是一个交换式的命令解释器和命令编程语言。bash的命令语法是Bourne shell命令语法的超集。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。更多细节查看bash与shell的关系。
Mac下命令行的基本使用
上面我们提到Mac下默认使用bash shell,初次接触使用bash即可,安装其他的第三方shell并学习一些花样语法没有太多必要,找出和自己工作相关的常用命令用以提高工作效率,熟练之后再去探索诸如提升体验的配置皮肤、自定义快捷键、或熟悉其他第三方shell。以下列出Mac比较常用的命令。
快捷键
1. 文件和文件夹自动补全1
Tab: 文件和文件夹名自动补全
2. 光标位置控制1
2
3
4Ctrl + A :跳到当前行的开始
Ctrl + E :跳到当前行的结束
Option + -> : 向前移动一个词 // windows 键盘使用Alt键
Option + <- : 向后移动一个词
3. 文字内容控制1
2
3
4Ctrl + L :清空屏幕
Ctrl + U :清空光标前的行
Ctrl + K :清空光标后的行
Ctrl + W :删除光标前的词(注意与`Ctrl + U`的区别,前者删除一个词,后者清空整行命令)
4.进程控制1
2
3Ctrl + C : 关闭你正在运行的任何程序
Ctrl + D :退出当前命令行窗口
Ctrl + Z : 暂停当前程序的运行(注意`Ctrl + C`相当于closed,而`Ctrl + Z`相当于stoped)
特别说明
如果你Ctrl + Z
将程序挂起到后台,那么如何恢复前台运行呢
看上面我启动了一个监听任务:http://localhost:8084
然后按Ctrl + Z,暂停监听bg(background)
查询后台挂起的任务,当前只有一个fd(front desk)
查询前台运行的任务,默认执行最后一个,也就是将挂起任务激活执行。 也可以指定fd npm run dev
另外jobs
命令查看前后台所有任务
参考:在LINUX中,用Ctrl+Z挂起的命令怎么切回到原任务的命令窗口?
基本指令
1. 目录路径操作1
2
3
4
5
6
7
8
9
10
11/ : 顶层目录
. : 当前目录
.. : 父级目录
~ : Home目录
cd : Home 目录
cd ~ : Home 目录
cd / : 驱动的根节点
cd - : 你浏览的上一个文件夹或目录
pwd : 展示当前目录路径
cd .. : 移动到父级目录
cd ../.. : 移动两层父级目录
2.列表目录内容1
2
3
4
5
6
7
8ls:显示目录中文件和子目录的名字
ls -1 : 以每行一个的格式显示文件列表
ls -F : 在每个目录路径后立即显示/(斜杠),在可执行程序或脚本后显示*(星号),在符号链接后显示@
ls -S : 按文件尺寸从小到大对文件或目录进行排序
ls -l : 长格式的列表。包含文件模式、所有者和组名、修改的日期和时间文件、路径名等
ls -lt : 以文件的修改顺序列出文件(最近修改的在前)
ls -lh : 长清单,以KB、MB或GB表示人类可读的文件大小
ls -la :列出目录详情,包括隐藏文件、文件时间戳
3.文件尺寸和磁盘空间1
2
3
4
5
6
7
8
9// du:disk utility 磁盘实用工具
du : 列出子目录的磁盘使用情况
du * : 列表所有子文件夹和文件的磁盘使用情况
du -s [file/folder]: 显示指定文件或文件夹的磁盘使用情况,如果没有指定显示当前目录所在文件的磁盘总尺寸,`-s`:(display)显示指定文件的条目
du -sh : 与`du -s`的区别是多加了一个h,(human-readable),以可读方式输出,即输出会加上单位,比如Byte,KB,GB等
du -sh * : 查看当前文件夹内文件和目录的大小
du -sh * | sort -nr : 查看当前文件夹内文件和目录的大小并从大到小排序显示
df -h : 计算系统剩余磁盘空间(disk free)
df -H : 使用以10为底的大小(而不是1024)计算磁盘剩余空间,最终数字是三位或更少
关于磁盘使用情况单位及命令的解释
使用
du
命令查看磁盘使用情况的时候,默认是没有显示单位,只显示数字,而这个数字的单位是512byte,而非1024byte,也就是说,假如你使用du -s [file]
命令显示的大小为536,那么du -sh [file] 加上单位的显示为268k
。而关于-h、-s等指令的具体含义,可以使用man du
命令查看du的使用手册。
参考:
Mac OS 命令du单位问题
Mac du 笔记
4.文件和目录管理1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30open + 文件 : 打开一个文件
// 创建
mkdir <dir> : 创建名称为<dir>的新文件夹
mkdir -p <dir>/<dir> : 创建嵌套文件夹
mkdir <dir1><dir2><dir3> : 一次创建多个文件夹
mkdir ' <dir>' : 创建一个有空格的文件夹
rmdir <dir> : 删除文件夹(只对空文件夹有效,如果非空文件夹,用下一条命令)
rm -R <dir> : 删除文件夹和它的内容
touch <file> : 以任何拓展名创建文件
// 拷贝
cp <file><dir> : 拷贝一个文件到一个目录
cp <file> <newfile> : 复制当前文件夹下的指定文件
cp <file>~/<dir>/<newfile> : 拷贝当前文件到一个新的文件夹下并重新命名
cp -i <file><dir> : 如果覆写文件会给一个提醒
cp <file1> <file2> /Users/<dir> : 拷贝多个文件到一个文件夹
// 删除
rm <file> : 删除指定文件(永久删除,谨慎使用)
rm -i <file> : 删除文件时给你一个确认
rm -f <file> : 强制删除不给提醒
rm <file1> <file2> <file3> : 删除多个文件
// 移动
mv <file> <newfilename> : 移动/重命名
mv <file><dir> : 移动一个文件到文件夹,可能覆写已经存在的文件
mv -i <file><dir> : 移动文件到一个文件夹,覆写文件之前会给提示,如果没有覆写直接移动
mv *.png ~/<dir> : 移动所有的PNG图片从当前文件夹到一个不同的文件夹
5.权限控制1
2
3
4
5sudo x : 以超级用户的权限运行命令
ls -ld : 默认显示home目录的权限
ls -ld <dir> : 显示一个文件夹的读写和访问权限
chmod 755 <file> : 改变一个文件的权限为755,chmod本身表示修改文件权限的意思
chmod -R 600 <dir> : 改变一个文件夹和它的内容的权限为600
关于文件权限数字和用户的对应关系
上图出自How to set File Permissions in Mac OS X,作者的这两个图已经把数字和权限的对应关系表现的一目了然。所有的权限由0-7表示,其实是一个八进制数字。
Mac一般会有三类用户:owner
(所有者)staff
(组–与文件所有者同在一个用户组的用户)everyone
(其他用户组的用户):
而权限的三个数字分别对应如上三类用户,比如755,分别对应如上三种权限,7 代表读写和执行权限(为owner所拥有)、第一个5可读可执行(为staff所拥有)、第二个5为可读可执行(为everyone所拥有)
6.进程查看1
2
3
4
5
6ps -ax : 显示操作系统当前运行的所有进程,这里 `a`展示所有用户进程,`x`展示所有未连接到终端的进程
top : 显示操作系统当前运行程序的时实信息
top -ocpu -s 5 : 按CPU使用情况排序进程,每5秒更新一次
top -o rsize : 根据内存使用情况进行排序
kill PID : 使用ID<PID>退出进程,可以通过活动监视器查看进程的PID
ps -ax | grep <appname> : 通过名字或PID查找一个进程,`grep`为UNIX工具程序,可做文件内的字符串查找
7.网络相关1
2
3
4
5ping <主机> : Ping主机和显示状态,如ping www.cnblogs.com
whois <域名> : 输出一个域名的查询信息
curl -O <url/to/file> : 下载文件通过HTTP,HTPS,or FTP
ssh <username>@<host> : 建立SSH连接给<host>用<username>这个用户
scp <file> <user>@<host>:/remote/path : 复制文件给一个远程主机
8.搜索文件和文本1
2
3find <dir> -name <"file"> : 发现目录<dir>内文件名为<file>的所有文件.可以使用(*)去搜索文件名部分,如:`find demo01 -name "*.png"`
grep "<text>" <file> : 输出在file中出现的所有<text>文本(添加 -i大小写不敏感)
grep -rl "<text>" <dir> : 搜索<dir>包含<text>文本的所有文件
9.输出文件内容1
2
3cat <file> : 输出文件的内容
less <file> : 使用less命令输出<file>内容,支持分页和更多
head <file> : 输出前10行
10.历史命令查找1
2
3
4Ctrl + R : 搜索之前使用的命令
history n : 展出之前使用过的命令,n为指定查询的条数
![value] : 执行以一个值开头的最后一个被写的命令
!! : 执行最后一个命令
11.查看帮助1
2[command] -h : 帮助文档,如git -h
man [command] :展示该命令的帮助手册 ,进入帮助手册后按`wq`退出