在终端中使用指令操作可以帮助我们减去很多繁琐的操作,大大方便了工作效率,系统是全世界第一个基于系统采用“面向对象操作系统”的全面的操作系统,且和又都是的操作系统(意思就是它们都是基于Unix系统重新开发的),所以两者的指令在很多地方都是相同的,如果你玩的了那么系统自然也就不在话下了
注意: 以下指令我只在 版本上测试过,跟其他版本或许有所不同!
目录
系统目录
是基于开发的,而又是派生的,所以你可以理解为的最底层是,的所有文件都挂在系统的根目录/
下面,所以也是一样,所以就不要再想象着像系统那样C盘、D盘的概念啦!
**例如:**我在 Macbook 上插了一个叫 empty 的移动硬盘,并且在电脑的桌面上显示了这个硬盘图标,那么它实际位置在哪呐?其实它在/Volumes
目录下,你执行下ls /Volumes/empty
看看是不是移动硬盘里面的内容
还有驱动所在位置/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 组,表示该文件对于当前用户、当前用户所在组、其他用户的读/写/执行权限
- 常见的文件类型:
d
:代表的是目录-
:代表的是文件l
:代表的是链接文件
- 权限:
w
代表可写r
代表可读x
代表可执行-
代表无权限
例如:
-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 emptyls -l empty-rw-rw-r-- 1 root root 0 3 5 11:41 empty复制代码
修改文件所属组
# chgrp [-R] 群组名 文件或目录的名称-R:递归修改复制代码
修改文件拥有者
chown [-R] 用户名:群组名 文件或目录的名称复制代码
终端的基本指令操作
man
man
是“manual”的缩写,是一个帮助指令,通过man
指令可以查看 Mac OS X系统中的指令帮助、配置文件帮助和编程帮助等信息
当执行man cd
时,第一行会出现一个(1)
,其中的数字代表指令的类型,常用的数字及其类型如下:
1 用户在 shell 环境中可以操作的指令或者可执行文件5 配置文件8 系统管理员可以使用的管理指令复制代码
# 查看 cd 指令帮助信息man cd# 除了使用 man 查看指令帮助信息外# 还可以在指令后面加 --help 选项,也是可以查看该指令的帮助信息的cd --help复制代码
history
history
指令用于显示指定数目的指令,读取历史指令文件中的目录到历史指令缓冲区和将历史指令缓冲区中的目录写入指令文件
# 查看以前所有执行过的终端指令(前提是你没清理过)history# 查看最近执行过的 6 条指令history 6# 立即清空 history 里的历史指令记录history -c复制代码
clear
clear
指令用于清除当前屏幕终端上的任何信息
clear复制代码
!!
!!
执行上一条指令
!!复制代码
cd
cd
指令用来切换工作目录
# 进入用户根目录cd# 或cd ~# 进入系统根目录cd /# 回到上次所在目录cd -# 回到上一级目录cd ..# 进入到指定目录下,例如:.Trash「回收站」cd ~/.Trash# 前往其他卷cd /Volumes/复制代码
pwd
pwd
指令以绝对路径的方式显示用户当前所在的工作目录位置
pwd复制代码
ls
ls
指令用来列出目标目录中所有的子目录和文件。注意参数的大小写
# 列出当前目录下非隐藏的文件和目录,等价于“ls -C(注意:大写)”ls# 列出目录下的所有文件,包括以“.”开头的隐含文件ls -als -all# 与上面的“ls -a”指令几乎相同,只不过是此指令不显示“.(当前目录)”和“..(父级目录)”这两个ls -A# 列出当前目录下非隐藏的文件和目录,并用逗号“,”分割ls -m# 列出当前目录下所有的文件或目录详细信息ls -l# 列出指定文件的详细信息ls -l empty# 用文件或目录修改的时间进行排序ls -t# 递归显示文件,会把此根目录下的所有文件都显示出来ls -R复制代码
open
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
指令用来创建或修改文件
# 创建空白文件touch empty# 加 -t 选项,修改文件的创建和修改时间# 时间格式为:[[CC]YY]MMDDhhmm[.ss]touch -t 20180324192900 empty# 加 -mt 选项,修改文件的修改和访问时间touch -mt 20160324192900 empty复制代码
cp
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
指令是用改变文件名或所在目录的位置
# 改变文件或目录名称mv empty newEmpty# 移动文件或目录到指定位置mv empty ~/Downloads/empty# 先给文件或目录重新命名,然后再移动到指定位置mv empty ~/Downloads/newEmpty复制代码
rm
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
指令用来指定文件的行号显示方式
# 给某个文件添加上行数在终端显示(空白行不会添加)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
指令是用来统计文件的字符数、词数和行数
wc empty.txt# 只统计行数wc -l empty.txt# 只统计字节数wc -c empty.txt# 只统计字符数wc -m empty.txt# 只统计字数wc -w empty.txt复制代码
head
head
指令从头部开始显示指定文件的内容
# 显示文件的头 10 行head 10 empty.txt# 显示文件的头 10 个字符(注意:一个中文占两个字符)head -c 10 empty.txt复制代码
tail
tail
指令从尾部开始显示指定文件的内容
# 显示文件最后的 10 行tail 10 empty.txt# 显示文件最后的 10 个字符(注意:一个中文占两个字符)tail -c 10 empty.txt复制代码
mkdir
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
指令是用来删除空白文件目录
# 删除空白文件目录,如果目录下有东西是删除不了的rmdir empty# 加 -p 选项# 如果删除了某个目录,父目录就变为空目录的话,就一块删除rmdir ~/Downloads/empty# 删除多个目录rmdir emptyA emptyB复制代码
say
say
指令是用来文本转换语音的,当然你也可以结合一些其他的指令玩,例如:执行某段程序后,使用say
指令提示你
# 朗读文字say hello# 更改朗读的人物# 可以使用“say -v ?”查看,都有哪些人物say -v Diego# 朗读一个文件say -f empty.txt# 朗读的语音保存成一个音频文件say -o new.mp3 -f empty.txt复制代码
shutdown
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
passwd
修改登录密码,指令输入完成后回车要求分别输入旧的登陆密码和新的登陆密码,都输入完成后,回车即可更改
which
which
指令用来查看某个指令所在的位置
which ls复制代码
who
who
指令用列出当前登陆的所有用户
whoami
whoami
指令用显示当前正进行操作的用户名
alias
alias
指令用来定义指令别名
# 定义一个列出目录树的指令alias Tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"# 删除定义的指令unalias Tree复制代码
caffeinate
caffeinate
指令用来修改屏幕睡眠时间的
# 3600 是秒数,可以使 Mac 一小时不进入睡眠状态caffeinate -t 3600# 打开 terminal 时,直接输入 caffeinate 指令并回车后# 当你最小化或隐藏它时,Mac 将会始终保持清醒# 除非你 Ctrl + C 关闭,Mac 才会进入正常的休眠状态# 你也可以使用 caffeinate 指令,指定某个程序,例如:caffeinate /Applications/Notes.app# -i : 防止系统闲置时进入睡眠状态# -d : 防止显示器进入睡眠状态# -m : 防止磁盘空闲时进入睡眠状态# -s : 电脑在插入电源时,始终保持清醒复制代码
ps
ps
指令用来查看系统进程
# 查看当前用户下的所有进程ps -A# 查看所有进程(包含其他用户,相当于系统下的所有进程)ps -e复制代码
系统配置
获取权限
为了防止误操作破坏系统,在用户状态下是没有权限操作系统重要文件的,所以先要取得root权限,然后输入密码,输入密码时没有任何回显,连星号都没有,只管输完回车就行了
sudo ls -a复制代码
添加环境变量
# echo 指令的方式添加环境变量echo "export PATH=xxxxxx:$PATH" >> ~/.bash_profilesource ~/.bash_profile复制代码
随机生成一个MAC地址
按住option
键点击屏幕上方的“无线”图标,查看下 MAC 地址是多少,然后打开 Terminal 终端输入ifconfig
,找到你 MAC 地址对应的参数,例如:我的是在en0
下的ether
里
# 随机生成一个MAC地址# 系统重启恢复到原本的地址sudo ifconfig en0 ether `openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'`复制代码
开启Terminal自动补全功能
打开终端,输入:
vim ~/.inputrc复制代码
粘贴如下语句并保存
set completion-ignore-case on set show-all-if-ambiguous on TAB: menu-complete复制代码
使用Touch ID进行sudo身份验证
首先打开终端,输入如下指令:
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复制代码
终端开启允许安装任何来源App
系统有一个保护叫做 , 这个是防止第三方应用访问你的隐私信息的。如果你想关掉或者开启在终端里输入
# 开启sudo spctl --master-disable# 关闭sudo spctl --master-enable复制代码
显示或隐藏文件
隐藏文件的开头都会有一个点「.」
,默认情况下你是看不到的,不过你想看的话,也是可以的,快捷键是command + shift + .
# 隐藏某个文件或目录chflags hidden [File]# 重新显示chflags nohidden [File]# 隐藏桌面所有文件# 在 Finder - 桌面 内还可以看到,只不过是开机时或直接去桌面上看时是不显示的defaults write com.apple.finder CreateDesktop -bool falsekillall Finder# 显示defaults write com.apple.finder CreateDesktop -bool truekillall Finder# 显示 Finder 内的隐藏文件# 以下两条指令执行其中一个即可,killall Finder 指令是重启 Finder 的作用defaults write com.apple.finder AppleShowAllFiles -bool truekillall Finderdefaults write com.apple.finder AppleShowAllFiles YESkillall Finder# 隐藏 Finder 内的隐藏文件defaults write com.apple.finder AppleShowAllFiles -bool falsekillall Finderdefaults write com.apple.finder AppleShowAllFiles NOkillall Finder复制代码
显示文件的扩展名
首先打开 Finder ,然后点击菜单栏中的“Finder” => “偏好设置” => “高级” => “高级”,然后在「显示所有文件扩展名」前面打勾即可
显示文件路径
首先打开 Finder ,然后点击菜单栏中的“Finder” => “显示” => “显示/隐藏路径栏”,或者使用快捷键command + option + p
# 在 Finder 的标题栏处显示文件路径# 不想显示只需要把 YES 改成 NO 即可defaults write com.apple.finder _FXShowPosixPathInTitle -bool YESkillall 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 文件
.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/.AppleSetupDonereboot复制代码
回车后你就可以像刚买来电脑的时候,再次注册下管理账号就可以了,然后从刚注册的账号登进去给丢失管理员权限的账号设置下权限就 OK 了,回来你也可以登陆旧的账号把新的账号给删了,当然新的账号不删保留着也没啥事
注意:如果你想把旧的账号给删了的话,需要提前备份下旧账号的资料
重置被遗忘的管理员密码
如果你忘记了登陆密码,可以使用此方式更改管理员密码。首先,在系统开机还未进入登录界面时按下command+S
进入单用户模式。然后输入
mount -rw /复制代码
以读写方式挂载文件系统;接着重置管理员 json 的密码,回车后会要求你输入新的密码
passwd json复制代码
完成后,输入指令重启
reboot复制代码
前往资源库
- 打开 Finder 文件夹,点击右上角的菜单栏"前往"选项,然后按住
option
键的同时即可出现资源库选项 - 在终端输入
open ~/libray
输入苹果图标
在需要输入的地方同时按shift + option + k
键
调出 emoji 表情
在需要输入的地方同时按control + command + space(空格)
键
查看本地IP地址
- 按住
option
键,然后再点击屏幕上方的“无线图标”即可显示 - 点击“系统偏好设置” => “网络”后,在右侧的状态中即可看到
- 指令
# 显示当前网络接口配置信息# 在一大串的参数中找到 en0 参数,里面就有你想要的 IP 地址ifconfig # 只显示网卡的配置信息,注意 en0 中的 0 不是字母 o 哦ifconfig en0# 更精确的命令ipconfig getifaddr en0复制代码
- 输入下方任意一个苹果脚本代码
// 显示系统的所有信息osascript -e "system info" // 只显示 IP4osascript -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
即可
快速建立 www 服务
在 Terminal 中进入要分享的文件目录下,执行如下指令,可快速建立 www 服务,可以迅速分享文件给同事,关闭服务的话,只需要关闭终端即可
访问时,只需要输入http://Your IP4 address:8000
# python2# 如果你未安装 python3 的话,请执行此命令python -m SimpleHTTPServer 8000# python3python3 -m http.server 8000复制代码
hosts文件的位置
# 修改 hosts 文件时需要注意的# IP 和 域名之间需要两个空格,否则不会生效/etc/hosts复制代码
结语
文档正在不断完善中,欢迎各位Star或者提出意见!