macOS命令行技巧

2018-02-01|Categories: macOS|

尽管macOS也使用Bash shell,但shell可以调用的外部命令与Linux相比却有很大差异,即使是一些常用操作,到了macOS都必须改头换面才能使用,以下就列举了我碰到的类似情况。

取消设备挂载

# 第一次,Linux用法,错误
$ umount /Volumes/WD-USB-HDD/
umount: unmount(/Volumes/WD-USB-HDD): Operation not permitted

# 第二次,Linux用法,用管理员权限执行,仍然错误
$ sudo umount /Volumes/WD-USB-HDD/
Password:
umount(/Volumes/WD-USB-HDD): Resource busy -- try 'diskutil unmount'

# 第三次,macOS用法,正确
$ diskutil umount /Volumes/WD-USB-HDD/
Volume WD-USB-HDD on disk2s2 unmounted

利用hosts文件解析域名到本机地址

修改/etc/hosts文件可以把域名解析到本机地址,测试时非常有用,例如:

sudo vim /etc/hosts

粘贴以下内容:

# Testing Nginx
172.16.125.71   www.a.com a.com www.b.com b.com www.c.com c.com

如何确认解析已经按照预期生效?macOS下有「专业对口」的工具:

$ dscacheutil -q host -a name www.a.com
name: www.a.com
ip_address: 172.16.125.71

但这个工具太生僻,常用的ping命令可以高效完成同样的工作:

$ ping -c1 www.a.com | head -1
PING www.a.com (172.16.125.71): 56 data bytes
# 括号里面就是解析出来的IP地址

此时就可以通过浏览器或curl命令来访问这些测试域名了。

如果使用了Surge代理所有的网络流量,还需要把测试域名添加到Surge配置文件的skip-proxy字段,避免Surge接管测试域名的解析:

[General]
skip-proxy = a.com, b.com, c.com, www.a.com, www.b.com, www.c.com

这种情况下不能使用dignslookuphost等工具,这些工具不会读取/etc/hosts文件,它们只会通过真实的DNS服务器查询IP地址。

Leave A Comment