玩转 Terminal 终端:入门指南及进阶技巧

杰哥的IT之旅

共 8573字,需浏览 18分钟

 · 2020-07-15



点击关注上方“杰哥的IT之旅”,后台回复“Python自动化”获取精心整理的PDF。

来自:少数派作者:王禹效链接:https://sspai.com/post/45534
怎样看出电影中哪个人是电脑大神?看他是不是在用终端
这是句玩笑话,但是你可能或多或少从电影中见过某个电脑大神或者专业黑客,在一块黑色的窗口前随便敲一点代码,某个问题就迎刃而解了。虽然实际情况不会这么容易,但是不可否认,终端在电脑中确实具备控制一切的能力f408b491d2bd8c0cc3e4a7b4c68b9cbc.webp电影中常常出现的情景你可能会觉得终端太过深奥,其实不然。终端可难可易,有些时候你只需要知道一些简单的用法,就可以自己上手解决一些日常问题了。本文我会首先带你零基础认识终端,了解其常见用写法,告诉你新手入门哪些地方可以碰,那些地方是雷区。接着会实践一些实用命令,如关闭报错提示,显示隐藏文件夹,修改截图类型,整理应用程序栏等。最后我会分析一下这些实用命令的写法,如何举一反三,并谈几个涉及转换文稿格式,快速安装软件和硬盘扩容等操作的进阶命令。

目录

  • 什么是终端?

  • 如何打开终端?

  • 基础知识

  • 常见玩法

    • 关闭崩溃报错

    • 修改文件日期

    • 不要进入休眠状态

    • 程序假死需要强退

    • 截图保存为 JPEG

    • 关闭截图自动阴影

    • 显示隐藏文件夹

    • 整理程序栏

    • 重置程序栏

    • 打印机械感十足的文字

  • 进阶教程

    • 默认设置 defaults

    • 文件格式转换 textutil

    • 磁盘处理 diskutil

    • 常用但有风险的命令 diskutil

    • 自动安装 brew

    • 文件删除 rm

    • 其它命令

  • 写在文后

什么是终端?

我们总在说在终端中如何操作,那么终端到底是什么呢?为什么它会有这么大的权利?要说清终端是什么,我们先来看看操作系统的组成。简化来说,操作系统分为两个部分,一部分称作内核,另一部分成为用户交互界面。内核部分负责系统的全部逻辑操作,由海量命令组成,这一部分是系统运行的命脉,不与用户接触;交互界面则是开机之后所有我们所看到的东西,比如窗口,软件,应用程序等等。65788cf00b3f89a05b3cadaaabdd0f4a.webpnull那么我们若我们想对系统内核的某些操作逻辑做出一些修改,应该怎么办呢?终端就是连接内核与交互界面的这座桥,它允许用户在交互界面上打开一个叫做「Terminal 终端」的应用程序,在其中输入命令,系统会直接给出反馈。因为终端这座桥,实际允许用户间接控制系统内核,也就是系统的大脑,因此它理论上具备控制一切的权利。

如何打开终端?

终端是系统中一个应用程序,你可以直接在所有程序中找到它,点击打开就行。我比较喜欢使用聚焦搜索,输入「终端」或「Terminal」,看到终端被选中了按下回车即可。25ef8d0342ccf3b5f4018df69b731eb6.webp快速打开终端

基础知识

本节会从零开始,一步步讲解基础知识。若你只想查看实际命令,可以完全跳过这一部分。终端启动后,就会进入一个问你要指令的状态,你只需要将指令输入在光标后,按下键盘回车,指令就会被执行。那么什么是命令?命令就是你告诉电脑希望它做什么的那句话。若我现在希望告诉电脑说 hi,这句话的命令就是 say hi,就这么简单。命令由三个部分组成,第一个部分是命令对象,在 say hi 这个命令中,「say」 是我们的命令对象,我们希望电脑说话;第二个部分是修饰命令对象的关键词,可有可无,若我希望电脑说话时慢一点,可以输入 say -r 500 hi,这里的 「-r 500」 则是修饰说话语速的关键词;第三部分是命令内容,这里填写希望电脑说的内容是「hi」这句话。9abdb0a12e9b6201226a62142f32687a.webp命令的组成我们先来尝试让电脑将我们所打的话复述出来,这一步的指令是 echo "想说的话",将这句指令复制进终端并回车后,可以看到,它会将我们输入进去的文字在下一行重新打出来。58bd52bc37141fbf8f44b6787d68de2c.webpecho终端运行常常离不开对文件,文件夹的操作。当你需要使用终端对文件夹进行操作时,终端需要你告诉它,你想要修改的文件在哪里,这时我们需要了解路径的概念。系统中的每一个文件都有一个存放位置,这一存放位置就称作路径。终端启动后,它的默认路径在当前用户文件夹的根目录上,为了确定这一点,你可以输入 pwd 命令来查看当前路径。在下图中,输入命令后,终端告诉我当前路径是 /Users/我的名字7e1d860c248a4d816f00d46219ddb7fa.webppwd路径的一般写法为 /文件夹名/文件夹名,但路径其实分为两种。一种叫相对路径,另一种叫绝对路径,它们两有什么区别呢?我们从当前路径说起,当前路径指的是现在终端所处的位置,若你想改变当前路径,则可以输入 cd /其他文件夹。比如我希望系统将当前路径改为所有应用程序文件夹,则输入 cd /Applications,在下图中可以看到,Legolas 前出现了一个 Applications,表示当前路径已经在应用程序文件夹中。75667d9e2e0948754fbb64757c91697b.webpcd /刚刚提到的路径的一般写法 「/文件夹名/文件夹名」,它指的其实就是绝对路径,你必须指定它从根目录一直到达具体的文件夹。与其相对的是相对路径,**相对路径允许你告诉终端从现在开始,接下来应该怎么走。**相对路径的书写方法实在绝对路径前加一个 .若你现在已经处在应用程序文件夹中,想前往其中的一个名叫 Utilities 的子文件夹应该怎么办?下图中,当前位置的绝对路径是 /Applications/Utilities,但由于我已经处于 /Applications 文件夹中,因此可以使用相对路径的写法 cd ./Utilities,表示将当前路径转到 Utilities 文件夹。66fe4056155a2c12e8dce35845fcfe2c.webpcd ./说了这么多关于路径的写法,你可能已经头大了,懒得去这么写,那么有没有快速导入路径的方法呢?有,直接将待编辑文件或文件夹拖入终端中即可,它会自动把绝对路径提取出来,实际情况下常用的也是这种自动提取或手动复制的方法。23b886ec0f82d82e59fb348944bd81a4.webp拖入快速提取路径当你想要查看当前路径下有什么文件时,可以使用 ls 命令,它会列举当前路径下的全部文件,若你希查看进阶设定,比如列举当前路径下的全部文件并展开所有子文件夹,可以在 ls 命令后加上 -R 的识别符,新指令就变成了 ls -R,运行结果如下,可以看到我放在资源文件夹中的所有子文件都被显示出来了。1401364951c7abf5277510ef23fd1549.webpls -R讲到这里,你也许会发现自己的终端已经满满当当的了,看着不舒服,这时可以使用 clear指令来清屏,运行结果如下。44543022bc8a18091d490c374c8eac36.webpclear以上讲的所有指令,都是无害指令,这里的无害指的是不会对系统文件造成破坏,但是还有一些指令,可以瞬间删掉你的整个系统,若你知道这些指令的用法那也没问题,但若是不小心根据网上的教程用了从而误删了东西就不好了。内核为了确保你知道某些指令的用法,要求你必须在这些有风险的指令前加输 sudo,这就是所谓的超级管理员指令,它会在你密码确认后,赋予 sudo 之后的命令最高权限,可以进行任何操作。比如我需要把电脑上的 Windows 分区彻底删除时,只需要输入下面这串代码,一瞬间整个磁盘分区就会被删除
sudo diskutil eraseVolume free none diskx
关联阅读:如何彻底移除你的 Boot Camp 分区?[1]到这里为止,终端的非常基础教学就已经讲完了,这只是略过了终端海量指令中最常见的一小部分,毕竟终端控制的是整个系统的内核,其指令库非常之大,没有办法全部讲完。那么,当你在网上见到一个新命令的时候,怎么知道它该如何用?你可以使用 man 指令查看其用法,比如,当你见到了一个磁盘管理命令 diskutil,可以使用 man diskutil来查看这个磁盘管理命令的具体用法说明,想要退出这个说明按下键盘 Q 即可。2273c49b078575e4c53b06e0f905dc2f.webpman若你使用的是带有触控条的 Mac,可以点按触控条按钮进行快速更改终端颜色,添加书签等操作。62058878973a3615c3fee1d8a51e9d79.webp触控栏更改颜色若你想要完全自定义终端,可以在「终端 - 偏好设置 - 描述文件」中进行更改。33b3ac81d342c1c930eec1b74d920f7c.webp自定义

常见玩法


关闭崩溃报错

有时软件崩溃就已经很让人烦心了,重新打开后一遍遍弹出的问题报告更是烦不胜烦。这时你可以使用 defaults write com.apple.CrashReporter DialogType none 命令关闭这个问题报告。若你希望恢复其显示,可以输入 defaults write com.apple.CrashReporter DialogType crashreport408ed7788e5fedacacda55d0194256e6.webp

修改文件日期

有时你可能需要修改文件创建或修改日期,这时可以使用 touch -t 199505090000 拖入文件命令。这句命令中的数字表示 1995 年 5 月 9 日 00:00 分,你可以根据实际需要修改。92e0b2a9221d80bbefe5941d7cd2f198.webp任意修改文件日期

不要进入休眠状态

当你临时不希望电脑进入休眠状态时,可以使用 caffeinate 命令让电脑时刻清醒。当你需要其恢复正常时,按下 ⌃Control - C 即可停止该命令。e37605f03b0d6542fcf3ead9a8a95639.webpcaffeinate

程序假死需要强退

有时候程序假死了,强行退出也没用,这时可以使用 killall 命令。以微信为例,若想强退它,只需输入 killall WeChat 即可。8f2b456803d95485b4d54fb058e85518.webpkillall

截图保存为 JPEG

Mac 的默认截图格式为 PNG,若你想让默认的截图保存类型为 JPEG,可以输入如下指令 defaults write com.apple.screencapture type jpg,结果如下图所示,以后的截图都会变成 JPEG 格式。如果你希望撤销这条指令,输入 defaults write com.apple.screencapture type png 即可。9f3de42722de46450d34fd6199bd3e13.webp运行命令后所有截图均为 JPEG

关闭截图自动阴影

若你使用 Mac 自带的截图,会发现每次的窗口截图均会自动添加阴影,当你需要后期处理这些图片时,这些阴影可能会对你造成困扰。你可以使用下面这串命令来关闭截图阴影:
defaults write com.apple.screencapture disable-shadow -bool truekillall SystemUIServer
当你希望重新启动阴影时,可以输入:
defaults write com.apple.screencapture disable-shadow -bool falsekillall SystemUIServer
查看下方的截图,你就会发现它和本文的其他截图不同,没有阴影。952b6959ef3e9bef1f935a54743af4e0.webp关闭阴影后的截图

显示隐藏文件夹

在你跟着网络上的教程进行一些操作时,难免会遇到让你寻找隐藏文件夹的情况,这时你可以使用:
defaults write com.apple.finder AppleShowAllFiles -bool truekillall Finder
来显示所有隐藏文件夹,当你不需要再显示时,输入:
defaults write com.apple.finder AppleShowAllFiles -bool falsekillall Finder
即可恢复隐藏。查看下图,你会发现所有隐藏文件夹全部显示出来了。7496f5582d90d335f2053ecc4b1b3f07.webp显示隐藏文件夹

整理程序栏

你也许会发现,底部的程序栏越用越乱,有时候内容多的半天找不到所需程序。这时你可以考虑为其加入几个隐藏的分界符将其归为几个区域,输入:
defaults write com.apple.dock persistent-apps -array-add  {"tile-type"="spacer-tile";} killall Dock
即可添加一个空白分界符,需要几个重复运行几遍命令即可。当你不需要这个白分界符了,将它从程序栏拖走即可删除。07dce1fa70919de73e1fa17fdbf3f54e.webp为程序栏加分界符

重置程序栏

当你想要重新整理底部程序栏时,有时候从默认状态开始整理也许是个好办法。这是你可以使用 defaults delete com.apple.dock; killall Dock 命令将程序栏恢复为电脑刚刚激活时的状态。803595b0984fe8690fcc78a7ac714274.webp恢复后的状态

打印机械感十足的文字

当你想要打出机械感十足的文字时,可以玩玩banner -w 80 legolas.me这句命令,只需要将代码结尾处的文字替换为你想打印的字即可。f44bee9813e1e291aeb152a0110ae064.webp打印文字

进阶教程


上面讲了不少指令,你也许会好奇,这些指令到底修改的是什么?可以修改什么?若我想改别的,应该去哪里找?

默认设置 defaults

上面这些 defaults 开始的指令,实际修改的是系统默认的 Plist 表单,这些表单管理着系统中全部程序的默认设置,上面所做的修改无非是改了某些程序的默认设置罢了。若你想查看还有哪些可以修改,可以在访达中按下键盘 ⌥Option,点击「前往 - 资源库」,找到 Perference 文件夹,你会发现所有的 Plist 文件均在这里,你也可以根据便好手动修改。96f2d84b80995f7d0bb7714f7565a47d.webpPerference 文件夹

文件格式转换 textutil

textutil 是一个系统自带的,用于处理文稿的命令,其中我最常用的功能是其下属功能 convert,这句指令允许你将任何文件,在以下文件格式中互相转换 txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive。若你手头有一篇 DOCX 文件需要被转换成 TXT,则可以输入 textutil -convert txt 文件路径,这句代码中的 txt 处,可以替换为任何你需要转换到的文件格式,文件路径则可以采用拖拽文件到终端的方法自动填充。f6def08d0559d65e7b307e47ce35f0ab.webptextutil -convert

磁盘处理 diskutil

磁盘处理也是常用的命令行操作之一,因为其命令需要根据具体情况具体对待,所以我只简单介绍其中无风险的两个,下方列举的其余操作均会直接处理磁盘内容,请务必清楚你在做什么,然后再输入命令。若你的电脑采用的是 APFS 磁盘分区,则应使用 diskutil apfs 开头的命令;若你的电脑采用的是 HFS,HFS+ 磁盘分区,则应使用 diskutil 开头的命令;若你的电脑采用的是 coreStorage 磁盘分区,则应使用 diskutil cs开头的命令。diskutil list 命令会将你的现有磁盘状况显示出来,如下图所示。615c19744f07aa7cbfa168cff5aab5b1.webpdiskutil listdiskutil cs list 命令会将你的现有的 Core Storage 逻辑分区状况显示出来,如下图所示。076160da4b4e9a7ab3413e95924183cc.webpdiskutil cs list

常用但有风险的命令 diskutil

  • 查看分区上限:sudo diskutil resizeVolume /dev/disk1s3 limits
  • 重置空间大小:sudo diskutil resizeVolume /dev/disk1s2 100GB
  • 断开驱动器:sudo diskutil unmountDisk force /dev/disk1
  • 彻底移除逻辑磁盘: diskutil unmount /Volumes/Macintosh HD
  • 显示 GUID 分区结构:gpt -r show /dev/disk1
  • 删除 EFI NO NAME:gpt remove -I 4 /dev/disk1
  • 新增存储区块:gpt add -I 3 -b 1362424032 -s 1269536 -t 426F6F74-0000-11AA- AA11-00306543ECAC
  • 新增分区:newfs_hfs -J -v “Recovery HD” /dev/disk0s3
  • 物理 Core Storage 扩容: diskutil cs resizeDisk 11111111-2222-3333-4444-555555555555 980g
  • 逻辑 Core Storage 扩容: diskutil cs resizeVolume 11111111-2222-3333-4444-555555555555 980g

自动安装 brew

Mac 有个很方便的包管理器,名叫 Homebrew[2],它允许你自动安装许多应用程序。Homebrew 不是 terminal 的自带内容,需要运行这串命令来进行安装:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
eb8c715509346f97aad939eb88c319f8.webp使用 brew 命令前需要安装 Homebrew安装完成后你可以直接使用 brew cask install 软件英文名 等命令来快速安装需要的软件。Homebrew 在少数派已经有不少介绍了,因此这里不再详述。关联阅读:9 条进阶命令,把 HomeBrew 打造成第三方应用的 App Store[3];Mac 上高质量的开源应用,你可以在这里一次找到[4]

文件删除 rm

这一指令本是 删除文件 用的,但正因为它可以不分敌我的删除任何文件,新手误用有极大风险,因此我不打算详细介绍这个。网上有一个臭名远扬的传言,欺骗别人用 sudo rm -rfv /Cool 来删除系统文件,从而使整个系统崩溃,这条命令绝对不要尝试。我们来用前面学到的知识分析一下为什么这句命令会使得系统崩溃。首先 sudo 表示管理员命令并获取最高权限,rm 表示删除文件,用 man rm 命令查看手册,可以发现 -r 是用来修饰 rm 命令的,表示删除当前工作路径下的全部子文件,-f 也是修饰 rm 命令的,表示无视被保护的文件依旧执行删除。前文在讲默认路径时提到,打开终端之后默认工作路径正是当前用户的根目录,因此执行 sudo rm -rfv /Cool 后,会从根目录开始,无视被保护的文件并且删除当前路径下的所有文件及子文件夹,包括系统文件,这样一来系统就废了。既然谈到了这个代码的破坏力,我索性用与 Mac 同源的 fedora 系统在虚拟机上跑了一遍,下图是跑代码前:cb53cab36fbe26ce16ba57ee12a2eb84.webp虚拟机 fedora 中运行破坏代码下图是跑代码后,遇到了一个小问题,下面这张截图已经是在 Mac 上了。你仔细观察可以发现截图里的复制窗口前面的图标损坏了,这是因为当我在虚拟机中运行此破坏代码时,Parallel Desktop 实际并没有将 fedora 系统独立于沙盒中。半分钟后我发现了这个问题但为时已晚,这个小实验直接破坏了我正在使用的 Mac 系统并造成超过 100 GB 文件丢失,许多系统软件已无法正常运行,万幸访达等核心功能还可以正常工作。为了修复这个错误,我不得不评估损失,备份文件以及重装系统。17f7c601075e17907cefa6852b04acfb.webp直接对 Mac 造成无法挽回的破坏至于什么是沙盒,什么是虚拟机,这是另一个话题了,若你有兴趣可以在本文下方评论。简单来说,虚拟机可以在在工作电脑中模拟一个独立运行环境,使用它,可以允许你在一个系统的同时运行另一个系统。沙盒是一种保护机制,保证了当前在虚拟机中运行的任何内容不会影响工作机本身。这个在虚拟机 Fedora 中运行的破坏代码的实验本来不应该破坏我正常使用的 Mac 系统,最终导致 Mac 被破坏时由于 Parallel Desktop 这个软件默认虚拟机不开启沙盒模式导致的惨剧。

其它命令

当然命令远不止上面所提到的这些,常见的还有 cp复制文件;mv 移动文件;mkdir 创建目录;cat 显示文件内容等等,这里就不再一一介绍了。若你有兴趣可以阅读下面这篇文章,里面有每个命令的详细介绍。关联阅读:每天一个linux命令[5]

写在文后

如本文开头所说,终端是衔接内核和用户界面的桥梁,可易可难。你可以用它学习简单的轻度操作,来帮你节省时间,让电脑为你优化;也可以深入学习,定制整个系统的细枝末节如果你曾经惧怕终端不敢点开,那么读完本文之后,你也许有了尝试新命令的冲动,这没问题,绝大部分命令完全无害,每个人都可以尝试。但切记,终端不是玩具,请怀有一颗敬畏之心,确定代码无害后再运行,因为终端中严重误操作的后果往往是无法挽回的。

参考资料

[1]如何彻底移除你的 Boot Camp 分区?: https://sspai.com/post/43699[2]Homebrew: https://brew.sh/[3]9 条进阶命令,把 HomeBrew 打造成第三方应用的 App Store: https://sspai.com/post/43451[4]Mac 上高质量的开源应用,你可以在这里一次找到: https://sspai.com/post/45554[5]每天一个linux命令: https://www.cnblogs.com/peida/archive/2012/12/05/2803591.html

- End -

本公众号全部博文已整理成一个目录,请在公众号后台回复「m」获取!
推荐阅读:1、Linux 常用监控指标总结
2、写出漂亮 Python 代码的 20条准则
3、除了 P 站,程序员摸鱼还喜欢上哪些网站?
4、一文搞懂什么是 vlan、三层交换机、网关、DNS、子网掩码、MAC地址
5、实用!五款新型 Linux 命令行工具
6、这 7 个免费的 Git 教程/课程,适合所有程序员关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信即可加入读者交流群。

点个[在看],是对杰哥最大的支持!
浏览 10
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报