整理了部分mac使用技巧以及Linux学习路线
常用操作
1.文件操作
- 常用目录
/Systme/Library/Extensions // 驱动所在目录
/User/XXX/Desktop // 桌面目录
- 资源库
chflags nohidden ~/Library/ // 显示资源库
chflags hidden ~/Library/ // 隐藏资源库
- 目录
| 命令名 | 功能描述 | 使用举例 |
| mkdir | 创建一个目录 | mkdir XXX |
| rmdir | 删除一个目录 | rmdir XXX |
| mvdir | 移动或重命名一个目录 | mvdir XXX XXX |
| cd | 进入目录 | cd XXX |
| cd .. | 回到上一目录 | cd .. |
| cd ~ | 回到用户根目录 | cd ~ |
| pwd | 显示当前目录的路径名 | pwd |
| ls | 显示当前目录的内容 | ls -al |
| open | 打开当前目录 | open . |
- 文件操作
| 命令名 | 功能描述 | 使用举例 |
| cat | 显示或连接文件 | cat XXX |
| od | 显示非文本文件的内容 | od -c XXX |
| cp | 复制文件或目录 | cp XXX XXX |
| rm | 删除文件或目录 | rm XXX |
| rm -rf | 改变文件名或所在目录 | rm -rf XXX |
| mv | 回到用户根目录 | mv XXX XXX |
| find | 使用匹配表达式查找文件 | find . -name “*.c” -print |
| file | 显示文件类型 | file XXX |
- 选择操作
| 命令名 | 功能描述 | 使用举例 |
| head | 显示文件的最初几行 | head -20 XXX |
| tail | 显示文件的最后几行 | tail -15 XXX |
| cut | 显示文件每行中的某些域 | cut -f1,7 -d: /etc/passwd |
| colrm | 从标准输入中删除若干列 | colrm 8 20 XXX |
| diff | 比较并显示两个文件的差异 | diff XXX XXX |
| sort | 排序或归并文件 | sort -d -f -u XXX |
| uniq | 去掉文件中的重复行 | uniq XXX XXX |
| comm | 显示两有序文件的公共和非公共行 | comm XXX XXX |
| wc | 统计文件的字符数、词数和行数 | wc XXX |
| nl | 给文件加上行号 | nl XXX >XXX |
- 文件编辑
touch abc.txt // 创建 abc.txt 文件
vim abc.txt // vim编辑 abc.txt
:wq // vim保存并退出
:x // vim直接退出
nano abc.txt // nano编辑 abc.txt
- 将文件转成 HTML,支持格式包括 Text, .RTF, .DOC.
textutil -convert html file.extension
2.系统操作
- 进程操作
| 命令名 | 功能描述 | 使用举例 |
| ps | 显示进程当前状态 | ps u |
| kill | 终止进程 | kill -9 30142 |
- 时间操作
| 命令名 | 功能描述 | 使用举例 |
| date | 显示系统的当前日期和时间 | date |
| cal | 显示日历 | cal 4 2016 |
| time | 统计程序的执行时间 | time a.out |
- 启动与退出
shutdown - r now // 重启 Mac OS X
shutdown now // 关闭 Mac OS X
- 电源管理
pmset -g // 获取当前电源管理设置的信息
sudo pmset displaysleep 15 // 设置显示器无活动15分钟后关闭
sudo pmset sleep 30 // 让计算机在无活动30分钟后休眠
- 外观
// 禁用仪表盘
defaults write com.apple.dashboard mcx-disabled -boolean YES
// 启用仪表盘
defaults write com.apple.dashboard mcx-disabled -boolean NO
- 隐藏文件显影
// 终端输入后重启Finder即可
defaults write com.apple.finder AppleShowAllFiles -bool true // 显示
defaults write com.apple.finder AppleShowAllFiles -bool false // 隐藏
- .DS_Store文件处理
// 禁止.DS_Store文件生成
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
// 恢复.DS_Store文件生成
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
// 删除所有.DS_Store文件
sudo find / -name ".DS_Store" -depth -exec rm {} \;
- iTunes
defaults write com.apple.iTunes invertStoreLinks -bool YES // 更改 iTunes 链接行为为本机 iTunes 库,而不是 iTunes Store
defaults write com.apple.iTunes invertStoreLinks -bool NO // 更改 iTunes 链接行为为 iTunes Store,而不是本机 iTunes 库
- 改变截屏图片的保存位置
defaults write com.apple.screencapture location XXX // XXX为存放位置
- 去掉窗口截屏的阴影
defaults write com.apple.screencapture disable-shadow -bool true
- 强制Safari在新标签中打开网页
defaults write com.apple.Safari TargetedClicksCreateTabs -bool true
3.网络操作
- 网络与通信操作
| 命令名 | 功能描述 | 使用举例 |
| telnet | 远程登录 | telnet hpc.sp.net.edu.cn |
| rlogin | 远程登录 | rlogin hostname -l username |
| rsh | 在远程主机执行指定命令 | rsh f01n03 date |
| ftp | 在本地主机与远程主机之间传输文件 | ftp.sp.net.edu.cn |
| rcp | 在本地主机与远程主机之间复制文件 | rcp file1 host1:file2 |
| 阅读和发送电子邮件 | ||
| write | 给另一用户发送报文 | write username pts/1 |
| mesg | 允许或拒绝接收报文 | mesg n |
| ping | 给一个网络主机发送回应请求 | ping hpc.sp.net.edu.cn |
- 检测某个主机是否运行HTTP服务或网络是否可用
curl -I www.baidu.com | head -n 1
- 使用 dig 来诊断域名信息
dig www.oschina.net A
dig www.oschina.net MX
- 查看网络及相关信息
netstat -r // 显示系统路由表
netstat -an // 显示活动网络连接
netstat -s // 显示网络统计
4.其他常用
history // 查看终端输入历史
clear // 清空bash输入框
- 结束进程
killall Finder // 重启Finder
killall Dock // 重启Dock
defaults delete com.apple.dock // 重置系统Dock
killall SystemUIServer // 结束进程
- 其他命令
| 命令名 | 功能描述 | 使用举例 |
| uname | 显示操作系统的有关信息 | uname -a |
| clear | 清除屏幕或窗口内容 | clear |
| alias | 给某个命令定义别名 | alias del=rm -i |
| unalias | 取消对某个别名的定义 | unalias del |
| who | 显示当前所有设置过的环境变量 | who |
| whoami | 显示当前正进行操作的用户名 | whoami |
| tty | 显示终端或伪终端的名称 | tty |
| du | 查询磁盘使用情况 | du -k subdir |
| stty | 显示或重置控制键定义 | stty -a |
| df/tmp | 显示文件系统的总空间和可用空间 | - |
| w | 显示当前系统活动的总信息 | - |
5.查询操作
- find命令
unix命令,试用于OS X和Linux,格式为 find 文件路径 参数
// 在当前路径下搜索名字中包含`.md`的文件
find ~ -iname "*.md"
// 在特定的路径下搜索特定的文件
find SilverBulletZyp.github.io/_posts "*.md"
- mdfind命令
Spotlight功能的终端界面,若Spotlight功能被禁用,则mdfind也无法工作,mdfind命令非常高效迅速
格式为 mdfind -name 文件名字
// 搜索本地所有的.md文件
mdfind -name ".md"
// 搜索本地名为fenxiang@2x文件位置
mdfind -name fenxiang@2x
// 搜索本地所有包含该字段的文件
mdfind "正在连接聊天服务器"
// 添加-onlyin参数搜索指定目录指定文件或文件字段
mdfind -onlyin ~/company/ "正在连接聊天服务器"
mdfind -onlyin ~/company/ plist
6.安装软件打开报错
-
检查隐私里打开任意来源
-
终端改写隐私来源设置
sudo spctl --master-disable
7.打开Mac OSX原生的NTFS功能
- 每次使用时输入命令
diskutil list
sudo vim /etc/fstab
- 编辑内容
LABEL=Win\040Ntfs\040Drive none ntfs rw,auto,nobrowse
// \040代表空格
- 保存写入
sudo ln -s /Volumes ~/Desktop/Volumes
Linux学习
众所周知,mac上的OS X与Linux系统都是类Unix系统,在使用mac进行开发时,终端命令有许多共通之处。本篇对Linux与OS X之间的区别不再概述,由于网络上提供大多为Linux学习教程,在此记录部分Linux命令,在mac上使用的可行性则自行尝试。
1.Linux命令教程汇总
2.Linux学习路线

Shell编程
1.规范
#!指向系统执行该脚本的程序
#! /bin/bash // 脚本首行默认
默认为sh,按需要修改为bash或tcsh
shell编程规范:所有的变量都由字符串组成,并且不需要对变量进行声明
- 赋值格式: 变量名=值
- 首字符为字母,不可使用标点符号
- 中间不可空格,可使用下划线
- 不可使用关键字(help可查询shell关键字)
- 取值: $变量名
- 打印: echo
- 运算符前后需有空格
- 变量拼接时:${变量名}
以下sh下会出错
- let 表示数学运算
- $[] 表示将中括号内的表达式作为数学运算先计算结果再输出
- expr 用于整数值运算,每一项用空格隔开
注:C shell只支持整数的运算
附运算符:

2.范例
1.if语句
[ -f "somefile" ] //判断是否是一个文件
[ -x "/bin/ls" ] //判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] // 判断$var变量是否有值
[ "$a" = "$b" ] // 判断$a和$b是否相等
例
varOne=1
varTwo=2
varThree=3
if [ "$varOne" = "$varTwo" ]; then
echo "varTwo:$varTwo"
elif [ "$varOne" = "$varThree" ]; then
echo "varThree:$varThree"
else
echo "varOne:$varOne"
fi
2.&& 和 || 操作符
varOne=1
varTwo=2
varThree=3
if [ "$varOne" = "$varThree" ] || [ "$varOne" = "$varTwo" ]; then
echo "|| 进入"
else
echo "No || 进入"
fi
if [ "$varOne" = "$varOne" ] && [ "$varOne" = "$varTwo" ]; then
echo "&& 进入"
else
echo "No && 进入"
fi
3.case语句
ftype=`file "$1"` # Note ' and ` is different
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac
4.select语句
格式
select var in ... ; do
break;
done
例
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break;
done
echo "You have selected $var"
5.while/for语句
varOne=1
varTwo=1
# while
while [ "$varOne" = "$varOne" ]; do
echo "while Done"
break
done
# for
for varStr in H I M I ; do
echo "varStr is $varStr"
done
3.调试
- 打开脚本执行权限
chmod +x yourScriptName
- 执行脚本
./yourScriptName
- 执行脚本并显示所有变量的值
sh -x yourScriptName
- 不执行脚本只检查语法
sh -n yourScriptName
4.cocoapods脚本分析
实际应用:了解shell脚本编写时顺带看了iOS开发中cocoapods的脚本执行情况,项目更新pod时会跑如下脚本
diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
if [[ $? != 0 ]] ; then
cat << EOM
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
EOM
exit 1
fi
manifest.lock简单可以理解为我们在本地执行一次pod install后生成的当前Podfile的状态的表征文件。而Podfile.lock是同步他人更新过Podfile后的状态。
- 解读
1.通过diff命令来检查Podfile.lock和Manifest.lock的区别。这个命令中的> /dev/null 可以视为一个黑洞,等价于一个只读文件,所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到。由于在执行diff命令的过程中可能产生大量的标准输出,可能会干扰我们的的工作流程执行,所以我们将它们全部丢弃给黑洞,只关心返回值。
2.if [[ $? != 0 ]] then这个命令指的上一个命令的返回值如果不等于0,就执行xxxx。其中$?也就代表着上一个命令diff的返回值。
3.如果返回值不为0,说明有差异,因此通过cat « EOM 和 EOM将处于这两者之前的内容输出到标准输出。
- 可自行修正
如果在pod更新时并不想出现报错情况,那么我们希望,当有差异时可以自行去pod install
diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
if [[ $? != 0 ]] ; then
pod install --project-directory="${PODS_ROOT}/../"
fi
mac与shell编程学习持续进行中,如理解有误请发邮件至我的邮箱。邮箱地址为在github个人主页,非常感谢!