在终端中使用指令操做能够帮助咱们减去不少繁琐的操做,大大方便了工做效率,MacOS系统是全世界第一个基于FreeBSD系统采用“面向对象操做系统”的全面的操做系统,且FreeBSD和Linux又都是类Unix的操做系统(意思就是它们都是基于Unix系统从新开发的),因此二者的指令在不少地方都是相同的,若是你玩的了Linux那么MacOS系统天然也就不在话下了python
注意: 如下指令我只在 macOS High Sierra 10.13.3
版本上测试过,跟其余版本或许有所不一样!git
MacOS是基于FreeBSD开发的,而FreeBSD又是Unix派生的,因此你能够理解为MacOS的最底层是Unix,Unix的全部文件都挂在系统的根目录/
下面,因此MacOS也是同样,因此就不要再想象着像Window系统那样C盘、D盘的概念啦!github
**例如:**我在 Macbook 上插了一个叫 empty 的移动硬盘,而且在电脑的桌面上显示了这个硬盘图标,那么它实际位置在哪呐?其实它在/Volumes
目录下,你执行下ls /Volumes/empty
看看是否是移动硬盘里面的内容shell
还有驱动所在位置/Systme/Library/Extensions
数据库
# unix传统的系统目录
/bin 存放unix传统指令的位置「例如:ls、pwd」
/sbin 存放unix传统管理类指令的位置「例如:ifconfig、shutdown」
/usr 第三方程序安装目录,其中/usr/lib目录中存放了共享库「动态连接库」
/etc unix系统配置文件存放目录。「例如:用户密码文件/etc/passwd,此目录实际为指向/private/etc的连接」
/dev 设备文件存放目录
/tmp 临时文件存放目录,此目录实际为指向/private/tmp的连接
/var 存放常常变化的文件,如日志文件,此目录实际为指向/private/var的连接
复制代码
# MAC 特有的系统目录
/Applications 存放应用程序的
/Library 存放系统的数据文件、帮助文件、文档等等
/Network 存放网络节点的
/System 只包含一个名为Library的目录,这个子目录中存放了系统的绝大部分组件,如各类framework以及内核模块和字体文件等等
/Users 存放用户的我的资料和配置,每一个用户有本身的单独目录
/Volumes 文件系统挂载点存放目录
/cores 内核转储文件存放目录,当一个进程崩溃时,若是系统容许则会产生转储文件
/private 里面的子目录存放了/tmp、/var、/etc等连接目录的目标目录
复制代码
当你执行ls -l
指令查看一个文件信息的时候,系统会为你列出以下格式的权限信息,共10个字符编程
权限信息通用格式:
-rwxr-xr-x number user group filesize updatetime filename
复制代码
第一个字符表示的是文件的类型,后 9 个字符分 3 组,表示该文件对于当前用户、当前用户所在组、其余用户的读/写/执行权限json
d
:表明的是目录-
:表明的是文件l
:表明的是连接文件w
表明可写r
表明可读x
表明可执行-
表明无权限例如:vim
-rwxr-xr-x 3 root root 288 3 1 19:46 empty
复制代码
-
: 这是一个文件rwx
: 文件拥有者对它有读写可执行权限,意思就是彻底的拥有权r-x
: 所属组的成员对这个文件只有阅读和执行文件的权利r-x
: 其余用户也是对这个文件只有阅读和执行文件的权利3
: 连接数root
: 当前用户root
: 当前用户所属的组288
: 文件的大小「单位是byte」3 1 19:46
:最后修改的时间是3月1号19:46empty
: 文件名称修改权限浏览器
若是其余用户想拥有对某个文件的修改权限怎么办?这时咱们就须要到修改权限的指令了,指令格式:安全
chmod [<权限范围><权限操做><具体权限>] [文件或目录…]
复制代码
u
:User, 文件或目录的拥有者g
:Group,文件或目录的所属组o
:Other,除了文件或目录拥有者或所属组以外,其余用户皆属于这个范围a
:All, 所有的用户,包含拥有者,所属群组以及其余用户+
:增长权限-
:取消权限=
:设定惟一的权限w
r
x
-
例如:
# 首先咱们先看下权限信息
ls -l empty
-rw-r--r-- 1 root root 0 3 5 11:41 empty
# 使用 chmod 指令,给组其余的成员添加对 empty 文件的修改权限
# 注意 g+w 中间是没有空格的
chmod g+w empty
ls -l empty
-rw-rw-r-- 1 root root 0 3 5 11:41 empty
复制代码
修改文件所属组
# chgrp [-R] 群组名 文件或目录的名称
-R:递归修改
复制代码
修改文件拥有者
chown [-R] 用户名:群组名 文件或目录的名称
复制代码
man
是“manual”的缩写,是一个帮助指令,经过man
指令能够查看 Mac OS X系统中的指令帮助、配置文件帮助和编程帮助等信息
当执行man cd
时,第一行会出现一个(1)
,其中的数字表明指令的类型,经常使用的数字及其类型以下:
1 用户在 shell 环境中能够操做的指令或者可执行文件
5 配置文件
8 系统管理员可使用的管理指令
复制代码
# 查看 cd 指令帮助信息
man cd
# 除了使用 man 查看指令帮助信息外
# 还能够在指令后面加 --help 选项,也是能够查看该指令的帮助信息的
cd --help
复制代码
history
指令用于显示指定数目的指令,读取历史指令文件中的目录到历史指令缓冲区和将历史指令缓冲区中的目录写入指令文件
# 查看之前全部执行过的终端指令(前提是你没清理过)
history
# 查看最近执行过的 6 条指令
history 6
# 当即清空 history 里的历史指令记录
history -c
复制代码
clear
指令用于清除当前屏幕终端上的任何信息
clear
复制代码
!!
执行上一条指令
!!
复制代码
cd
指令用来切换工做目录
# 进入用户根目录
cd
# 或
cd ~
# 进入系统根目录
cd /
# 回到上次所在目录
cd -
# 回到上一级目录
cd ..
# 进入到指定目录下,例如:.Trash「回收站」
cd ~/.Trash
# 前往其余卷
cd /Volumes/
复制代码
pwd
指令以绝对路径的方式显示用户当前所在的工做目录位置
pwd
复制代码
ls
指令用来列出目标目录中全部的子目录和文件。注意参数的大小写
# 列出当前目录下非隐藏的文件和目录,等价于“ls -C(注意:大写)”
ls
# 列出目录下的全部文件,包括以“.”开头的隐含文件
ls -a
ls -all
# 与上面的“ls -a”指令几乎相同,只不过是此指令不显示“.(当前目录)”和“..(父级目录)”这两个
ls -A
# 列出当前目录下非隐藏的文件和目录,并用逗号“,”分割
ls -m
# 列出当前目录下全部的文件或目录详细信息
ls -l
# 列出指定文件的详细信息
ls -l empty
# 用文件或目录修改的时间进行排序
ls -t
# 递归显示文件,会把此根目录下的全部文件都显示出来
ls -R
复制代码
open
指令用于打开文件、目录或执行程序。等同于图形界面下的重复“双击”动做
# 打开指定文件
# 须要书写文件所在位置的完整路径,而且某格式的文件用某格式文件默认的编辑器打开
open ~/Downloads/file.epub
# 加 -a 选项使用自行选择的程序打开此文件
open -a sublime\ text.app ~/Downloads/file.txt
# 加 -e 选项,强制使用TextEdit编辑器打开此文件
open -e ~/Downloads/file.txt
# 打开终端当前所在的根目录
open .
# 打开终端当前所在的根目录的上一级目录
open ..
# 打开用户根目录下一个叫 Downloads 的文件夹
open ~/Downloads/
# 使用默认浏览器打开指定网址
# 须要书写完整的 URL 地址,而且超文本传输安全协议 http 或 https 也不能省略
open https://github.com/
# 使用指定浏览器打开指定网址
# 应用程序名称若是空白的话,须要使用反斜杠转义一下
open -a Google\ Chrome https://github.com/
复制代码
touch
指令用来建立或修改文件
# 建立空白文件
touch empty
# 加 -t 选项,修改文件的建立和修改时间
# 时间格式为:[[CC]YY]MMDDhhmm[.ss]
touch -t 20180324192900 empty
# 加 -mt 选项,修改文件的修改和访问时间
touch -mt 20160324192900 empty
复制代码
cp
指令是用来复制文件或目录
# 复制文件
cp empty
# 将文件复制到用户根目录下
cp empty ~
# 复制目录下全部以 js 结尾的文件到 Downloads/Js 目录下
# 若是 Downloads 目录下没有 Js 文件夹的话,将会自动建立一个
cp *.js ~/Downloads/Js
# 加 -r 选项,复制目录下全部的文件以及子目录
cp -r . ~/Downloads/Js
# 复制一个文件而且从新命名
cp empty newEmpty
# 复制一个文件而且从新命名,而后移动到指定位置
cp empty ~/Downloads/newEmpty
复制代码
mv
指令是用改变文件名或所在目录的位置
# 改变文件或目录名称
mv empty newEmpty
# 移动文件或目录到指定位置
mv empty ~/Downloads/empty
# 先给文件或目录从新命名,而后再移动到指定位置
mv empty ~/Downloads/newEmpty
复制代码
rm
指令是用来删除文件和目录,对于连接文件,只是删除整个连接文件,而原有文件保持不变。使用 rm 指令须要格外当心。由于一旦删除了一个文件,就没法再恢复它
# 普通的删除文件
rm ~/Downloads/empty
# 把欲删除的文件的硬链接数据删除成0,删除该文件
rm -d ~/Downloads/empty
# 强制删除
rm -f ~/Downloads/empty
# 删除文件以前先逐一询问下你是否要删除该文件
rm -i ~/Downloads/empty
# 递归删除目录下全部的文件以及子目录
rm -r empty
# 命令执行完成后,显示都是删除了那些文件或目录
rm -v empty
复制代码
nl
指令用来指定文件的行号显示方式
# 给某个文件添加上行数在终端显示(空白行不会添加)
nl empty.txt
# 或
nl -b t empty.txt
# 不管是否为空行,也一样列出行号
nl -b a empty.txt
# 不添加行号显示
nl -b n empty.txt
# 行号左对齐
nl -n ln empty.txt
# 行号右对齐(默认)
nl -n rn empty.txt
# 行号右对齐(显示六位数的行号,不足六位的前面添加 0)
nl -n rz empty.txt
# 指定行号最多显示的位数(默认为 6)
nl -w 5 empty.txt
# 把行号添加到文件内并另存为一个文件
nl -b t empty.txt > new.txt
复制代码
wc
指令是用来统计文件的字符数、词数和行数
wc empty.txt
# 只统计行数
wc -l empty.txt
# 只统计字节数
wc -c empty.txt
# 只统计字符数
wc -m empty.txt
# 只统计字数
wc -w empty.txt
复制代码
head
指令从头部开始显示指定文件的内容
# 显示文件的头 10 行
head 10 empty.txt
# 显示文件的头 10 个字符(注意:一个中文占两个字符)
head -c 10 empty.txt
复制代码
tail
指令从尾部开始显示指定文件的内容
# 显示文件最后的 10 行
tail 10 empty.txt
# 显示文件最后的 10 个字符(注意:一个中文占两个字符)
tail -c 10 empty.txt
复制代码
mkdir
指令是用来建立文件目录
# 建立一个空白的目录
mkdir empty
# 建立一个有子目录的目录
# -p 选项是,若是要建立的目录的父级目录不存在的话,一并建立
mkdir -p ~/Downloads/New/empty
# 一次性建立多个目录
mkdir emptyA emptyA ~/Downloads/emptyC
# 一次性建立多个目录,而且某个要建立的目录拥有多个字目录
mkdir emptyA emptyB/{emptyB-A, emptyB-B, emptyB-C}
复制代码
rmdir
指令是用来删除空白文件目录
# 删除空白文件目录,若是目录下有东西是删除不了的
rmdir empty
# 加 -p 选项
# 若是删除了某个目录,父目录就变为空目录的话,就一块删除
rmdir ~/Downloads/empty
# 删除多个目录
rmdir emptyA emptyB
复制代码
say
指令是用来文本转换语音的,固然你也能够结合一些其余的指令玩,例如:执行某段程序后,使用say
指令提示你
# 朗读文字
say hello
# 更改朗读的人物
# 可使用“say -v ?”查看,都有哪些人物
say -v Diego
# 朗读一个文件
say -f empty.txt
# 朗读的语音保存成一个音频文件
say -o new.mp3 -f empty.txt
复制代码
shutdown
指令是用来关机、重启或休眠系统的
# 此指令须要管理员权限
# 马上关机
sudo shutdown -h now
# 马上重启
sudo shutdown -r now
# 10分钟后重启
sudo shutdown -r +10
# 今天10:00休眠
sudo shutdown -s 10:00
# 2030年12月12日18时00分关机
sudo shutdown -h 203012121800
# 马上关机
sudo halt
# 马上重启
sudo reboot
# 关闭shutdown指令
# 当你输入密码回车后,会出现以下信息
# Shutdown at Wed Mar 14 13:51:09 2018.
# shutdown: [pid 80246]
#
# 注意上面的 pid 80246,这个是进程的号
# 若是要关闭 shutdown 指令,只须要终结这个进程号就能够了
# sudo kill 80246
复制代码
passwd
修改登陆密码,指令输入完成后回车要求分别输入旧的登录密码和新的登录密码,都输入完成后,回车便可更改
which
指令用来查看某个指令所在的位置
which ls
复制代码
who
指令用列出当前登录的全部用户
whoami
指令用显示当前正进行操做的用户名
alias
指令用来定义指令别名
# 定义一个列出目录树的指令
alias Tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
# 删除定义的指令
unalias Tree
复制代码
caffeinate
指令用来修改屏幕睡眠时间的
# 3600 是秒数,可使 Mac 一小时不进入睡眠状态
caffeinate -t 3600
# 打开 terminal 时,直接输入 caffeinate 指令并回车后
# 当你最小化或隐藏它时,Mac 将会始终保持清醒
# 除非你 Ctrl + C 关闭,Mac 才会进入正常的休眠状态
# 你也可使用 caffeinate 指令,指定某个程序,例如:
caffeinate /Applications/Notes.app
# -i : 防止系统闲置时进入睡眠状态
# -d : 防止显示器进入睡眠状态
# -m : 防止磁盘空闲时进入睡眠状态
# -s : 电脑在插入电源时,始终保持清醒
复制代码
ps
指令用来查看系统进程
# 查看当前用户下的全部进程
ps -A
# 查看全部进程(包含其余用户,至关于系统下的全部进程)
ps -e
复制代码
为了防止误操做破坏系统,在用户状态下是没有权限操做系统重要文件的,因此先要取得root权限,而后输入密码,输入密码时没有任何回显,连星号都没有,只管输完回车就好了
sudo ls -a
复制代码
# echo 指令的方式添加环境变量
echo "export PATH=xxxxxx:$PATH" >> ~/.bash_profile
source ~/.bash_profile
复制代码
按住option
键点击屏幕上方的“无线”图标,查看下 MAC 地址是多少,而后打开 Terminal 终端输入ifconfig
,找到你 MAC 地址对应的参数,例如:个人是在en0
下的ether
里
# 随机生成一个MAC地址
# 系统重启恢复到本来的地址
sudo ifconfig en0 ether `openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'`
复制代码
打开终端,输入:
vim ~/.inputrc
复制代码
粘贴以下语句并保存
set completion-ignore-case on set show-all-if-ambiguous on TAB: menu-complete
复制代码
首先打开终端,输入以下指令:
sudo vim /etc/pam.d/sudo
复制代码
而后在# sudo: auth account password session
的下一行添加以下字符串,保存退出便可
auth sufficient pam_tid.so
复制代码
若是想还原的话,再打开此文件删除此字符串便可
输入 sudo languagesetup
回车后输入开机密码,而后输入选项前面的数字,回车后重启你的 Mac,系统就会加载刚刚设置的系统语言,当系统启动完毕后,你就能够看到系统使用的是你熟悉的语言了
# 查看终端电脑名称
HostName
# 修改终端电脑名称
sudo scutil --set HostName name
复制代码
系统有一个保护叫作 Gatekeeper , 这个是防止第三方应用访问你的隐私信息的。若是你想关掉或者开启在终端里输入
# 开启
sudo spctl --master-disable
# 关闭
sudo spctl --master-enable
复制代码
隐藏文件的开头都会有一个点「.」
,默认状况下你是看不到的,不过你想看的话,也是能够的,快捷键是command + shift + .
# 隐藏某个文件或目录
chflags hidden [File]
# 从新显示
chflags nohidden [File]
# 隐藏桌面全部文件
# 在 Finder - 桌面 内还能够看到,只不过是开机时或直接去桌面上看时是不显示的
defaults write com.apple.finder CreateDesktop -bool false
killall Finder
# 显示
defaults write com.apple.finder CreateDesktop -bool true
killall Finder
# 显示 Finder 内的隐藏文件
# 如下两条指令执行其中一个便可,killall Finder 指令是重启 Finder 的做用
defaults write com.apple.finder AppleShowAllFiles -bool true
killall Finder
defaults write com.apple.finder AppleShowAllFiles YES
killall Finder
# 隐藏 Finder 内的隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool false
killall Finder
defaults write com.apple.finder AppleShowAllFiles NO
killall Finder
复制代码
首先打开 Finder ,而后点击菜单栏中的“Finder” => “偏好设置” => “高级” => “高级”,而后在「显示全部文件扩展名」前面打勾便可
首先打开 Finder ,而后点击菜单栏中的“Finder” => “显示” => “显示/隐藏路径栏”,或者使用快捷键command + option + p
# 在 Finder 的标题栏处显示文件路径
# 不想显示只须要把 YES 改为 NO 便可
defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
killall Finder
复制代码
###更改 Finder 每次打开时默认显示的目录
首先打开 Finder ,而后点击屏幕上面的菜单栏,依次点击“Finder” => “偏好设置” => “通用”,而后在「开启新 Finder 窗口时打开:」项下选择你喜欢的目录便可
若是你不想显示Finder、Quick Time Player、Sublime Text等等最近使用的项目记录的话,点击“系统偏好设置” => “通用” => “最近使用的项目” => “n 个文稿、应用和服务器”,把数字改为 0 就能够了
截取屏幕所有区域:command + shift + 3
截取屏幕所有区域到剪贴板:command + control + shift + 3
截取窗口(不包含菜单栏和程序坞):command + shift + 4 + space
截取所选区域:command + control + shift + 4
截取所选区域到剪贴板:command + shift + 4
截取触摸栏:command + shift + 6
# 更改截图的保存位置
defaults write com.apple.screencapture location ~/Desktop
# 更改截图的保存格式
defaults write com.apple.screencapture type jpg
# 去除截图的阴影,要想改回来只须要把 true 改为 false 便可
defaults write com.apple.screencapture disable-shadow -bool true
# 更改“屏幕快照+时间”的截图命名方式
defaults write com.apple.screencapture name newFlieName
# 重启服务
killall SystemUIServer
# 自定义截图时间、保存名称和图片格式
# 数字3,是多少秒后开始截图
# empty.jpg 则是图片的名称和格式
screencapture -T 3 empty.jpg
复制代码
.DS_Store
是 macOS 保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,至关于 Windows 的 desktop.ini
# 禁止`.DS_store`生成,执行如下命令
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE2
# 恢复`.DS_store`生成,执行
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
复制代码
# 清除旧的日志文件,临时和垃圾文件
sudo periodic daily
# Daily脚本清除了旧的日志文件,临时和垃圾文件
# Weely脚本重建locate和whatis数据库
# monthly聚集了每一个用户的使用信息而且备份
sudo periodic daily weekly monthly
# 默认运行过程是没有任何反馈的,若是你想看到执行的结果,以执行这个指令
ls -al /var/log/*.out
复制代码
依次点击 “” => “强制退出” => “选择要强制退出的程序” => “强制退出”,快捷键command + option + esc
有一次我点击“系统偏好设置” => “用户与群组” => “🔒” 的时候,要我输入密码,那就输呗!但是怎么输入都是不对,密码明明就是这个啊,这怎么回事?后来我去“用户与群组”里面看了下,一看我当前的帐户变成普通用户了,我就去网上查了下,可是搜了不少资料也没解决,最后仍是致电了苹果客服才给解决的,在此贴下
首先在重启电脑的时候按住command + s
键,当出现命令行终端的时候按照如下顺序输入命令「就是那个黑色的全是一行行很小很小的代码界面,注意空格和大小写不要写错了」
mount -uw /
rm /var/db/.AppleSetupDone
reboot
复制代码
回车后你就能够像刚买来电脑的时候,再次注册下管理帐号就能够了,而后从刚注册的帐号登进去给丢失管理员权限的帐号设置下权限就 OK 了,回来你也能够登录旧的帐号把新的帐号给删了,固然新的帐号不删保留着也没啥事
注意:若是你想把旧的帐号给删了的话,须要提早备份下旧帐号的资料
若是你忘记了登录密码,可使用此方式更改管理员密码。首先,在系统开机还未进入登陆界面时按下command+S
进入单用户模式。而后输入
mount -rw /
复制代码
以读写方式挂载文件系统;接着重置管理员 json 的密码,回车后会要求你输入新的密码
passwd json
复制代码
完成后,输入指令重启
reboot
复制代码
option
键的同时便可出现资源库选项open ~/libray
在须要输入的地方同时按shift + option + k
键
在须要输入的地方同时按control + command + space(空格)
键
option
键,而后再点击屏幕上方的“无线图标”便可显示ifconfig
指令# 显示当前网络接口配置信息
# 在一大串的参数中找到 en0 参数,里面就有你想要的 IP 地址
ifconfig
# 只显示网卡的配置信息,注意 en0 中的 0 不是字母 o 哦
ifconfig en0
# 更精确的命令
ipconfig getifaddr en0
复制代码
// 显示系统的全部信息
osascript -e "system info"
// 只显示 IP4
osascript -e "IPv4 address of (system info)"
复制代码
# 查看文件或目录的大小
du -h -d 1 ~/Downloads
# 查看磁盘的占用空间
df -h
复制代码
若是你想观摹或临摹一下设计精良的苹果产品icon的话,只需打开Finder,而后同时按住Command+Shift+G
便可打开 “前往文件夹”的弹出窗口,而后输入如下路径
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
复制代码
打开Finder,而后同时按住Command+Shift+G
便可打开 “前往文件夹”的弹出窗口,而后输入如下路径
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
复制代码
把该目录下的AliasBadgeIcon.icns
文件更改成AliasBadgeIcon-no.icns
,而后打开Terminal重启Finder后会当即生效
killall Finder
复制代码
若是想还原,只须要把文件名从新命名成AliasBadgeIcon.icns
便可
在 Terminal 中进入要分享的文件目录下,执行以下指令,可快速创建 www 服务,能够迅速分享文件给同事,关闭服务的话,只须要关闭终端便可
访问时,只须要输入http://Your IP4 address:8000
# python2
# 若是你未安装 python3 的话,请执行此命令
python -m SimpleHTTPServer 8000
# python3
python3 -m http.server 8000
复制代码
# 修改 hosts 文件时须要注意的
# IP 和 域名之间须要两个空格,不然不会生效
/etc/hosts
复制代码
文档正在不断完善中,欢迎各位Star或者提出意见!地址:https://github.com/qLzhu/macCommand