vlambda博客
学习文章列表

Linux和MacOS都能用的Unix命令,你了解吗?



W indows/MacOS/Linux三大系统都有“漂亮”的GUI界面。 在日常的使用中,通过移动鼠标,点击就能很轻松的完成可能需求。
但是,如果有些情况需要多次重复执行某个任务,这个时候如果能借助命令行工具,也许就能很方面的解决。 
由于Linux和MacOS都属于类Unix操作系统,他们都“继承”了Unix系统上的很多相同的命令。
本文就来介绍10个Linux和MacOS以及其他类Unix系统都能使用的基本命令。




什么是Shell?





Shell大致就相当于 Windows中的命令窗口工具(cmd或PowerShell)。本文介绍的命令理论上来说能在任何类Unix的系统上运行,像是Linux,Darwin(MacOS的前身),FreeBSD,甚至是带有Git Bash或Windows 10中Linux子系统。可能在参数和输出结果不所不同。

在运行命令之前,,你必须打开一个Shell,有时你也可能在其他地方看到终端窗口(terminal)这样的说法,都是一样的。
在MacOS中,你可以在“启动台”>“其他”>“终端”中找到终端。
在Linux发行版Ubuntu中,通过CTRL+ALT+T就能快速打开窗口。
Linux和MacOS都能用的Unix命令,你了解吗?
上图显示的就是macOS 10.15下打开的shell窗口。
可以看到,在窗口顶部显示了:用户名, Shell的类型,在本例中macOS默认使用的zsh shell(大多数Linux发行版中的默认的 bash shell),以及窗口的大小。
窗口内显示的是提示信息,包括上一次登陆时间,同时也提示显示计算机的用户名@主机名称(bruce@brucedeMacBook-Air),当前工作目录的名称(~是用户主目录的简写),最后是提示符号(%)。注意的是,当你在文件系统中移动时,或者使用其他用户(例如,用于运行管理命令的超级用户或超级用户)时,提示符将发生变化。提示符可以轻松识别出位置和身份。




Shell环境





了解如何控制Shell环境是命令行是比较重要的部分。
通过输入env命令可以查看环境:
Linux和MacOS都能用的Unix命令,你了解吗? 初次接触命令可以不用了解所有环境变量,目前来说知道它们在哪儿就行,对于一些基本的环境变量,例如,SHELL=/bin/zsh 告诉我们正在使用的是zsh shell。
HOME=/Users/bruce指定用户主目录的位置。你可以更改或创建环境变量 
也可以通过命令行设置环境变量:

Linux和MacOS都能用的Unix命令,你了解吗?

在上图中,我们将变量HELLO(一般用大写)赋值为world,使用环境变量时,在变量前加上一个$符号,该$告诉命令解释器使用的变量的值。如果不使用$,那么echo上面的命令将只打印变量名HELLO。





Unix命令





无论使用哪个shell,只要在shell中键入命令,都能运行Unix命令。Unix的设计哲学是创建能做好一件事情的程序,并将它们链接(或“管道”)在一起以完成有用的工作。
一个简单的例子,如何快速计算/ etc目录中的文件数?
Linux和MacOS都能用的Unix命令,你了解吗?

ls -l | wc -l
该命令说明了两个重要的概念:管道和选项。该ls命令(和Windows中的命令dir类似)的作用是显示目录里的内容。
wc(word count)是显示有多少个字数。
注意到它们之间的竖线了吗?那是管道字符。
管道的作用是将第一条命令的输出作为第二条命令的输入。你可以在shell中通过管道将一个命令与另一个命令链接在一起。

第二个点是每个命令的选项。在类Unix中,选项通常以单破折号(-)开头,Windows中用斜杠(/)来接选项。
这些命令行选项可更改命令的行为。在此示例中,该-l 选项表示以“长”格式输出目录内容,

许多命令允许你将选项组合在单个字符串中,例如,ls -la,就是 ls -s -a的组合。

你可以通过查看命令的手册或“手册页”(通过命名man)来了解该命令的所有选项。
学习和使用命令行选项是在Unix命令行上高效的重要组成部分。某些命令具有太多选项,因此文档长达数十页,不过通常只需要几个选项即可执行给定的任务,并且许多选项仅在以Shell语言编写程序时才使用。




说明文档





一旦你了解了命令行和环境的基础知识,就可以开始更深入地研究系统。

macOS和Linux命令的优点之一是高质量的文档。有用于用户,系统管理员和软件开发人员的文档。你可以使用man命令访问文档。”
Linux和MacOS都能用的Unix命令,你了解吗?
这些说明文档分为八个部分,根据你使用的是Linux / Mac还是Unix的System V类型,会稍有不同。
如果不确定所要查找的命令,可以尝试-f和-k选项。如果知道命令的名称,它将告诉你命令的功能,同时会根据一个或多个关键字列出相关命令的名称。这两个选项都将搜索内置数据库(如果已配置;通常具有)并返回所有匹配项。例如,将显示以字符串开头的说明文档:
man –f command man –k hint man –k bz


Linux和MacOS都能用的Unix命令,你了解吗?

Linux和MacOS都能用的Unix命令,你了解吗?





文件系统相关命令





有许多与Unix文件系统有关的命令,因为它是操作系统的核心。我们之前看到了其中的一个:ls,它列出了目录中的文件:
Linux和MacOS都能用的Unix命令,你了解吗?
该ls命令可能是所有命令中最常用的命令,并且有许多选项可以调整其输出。你想立即知道的一个选项是ls -a(列出全部)。这将显示“隐藏”文件(名称以点或点开头的文件或目录),默认情况下隐藏这些文件。这些文件或目录通常包含Unix系统的配置信息或日志文件。例如,.zsh_history文件记录你在命令行上输入的所有命令。
Linux和MacOS都能用的Unix命令,你了解吗? 另一个非常常用的命令是cd,用于更改目录的命令。这和Windows中的命令相同,但有一个重要区别。在Unix中,所有驱动器(设备)都显示为单个驱动器。在Windows中,你的图片可能放在显示为E:的外部硬盘驱动器上,而在Unix中,该驱动器可能是/ home / user / pictures。Unix系统上的所有文件都是通过以/(根目录)开头的路径访问的,你可以根据需要在文件系统的不同位置装载不同的硬盘驱动器。

还有一个命令:pwd。
该命令可以快速的打印当前的工作目录,在制作shell脚本时是非常有用的。

Linux和MacOS都能用的Unix命令,你了解吗?
如何想要快速跳转到主目录的话,就可以使用cd不带任何参数。也可以输入 cd ~

你知道了如何在文件系统中移动并列出目录的内容。现在,我们需要一种读取存储在其中的文件的方法。如今,大多数系统都带有less用于此目的的命令。less将逐页显示文件,并允许你使用Vi命令进行导航(按j向下k移动,向上移动,h获取帮助以及q退出文件)。

要查看/etc/passwd文件中的内容,可以输入:
less /etc/passwd
Linux和MacOS都能用的Unix命令,你了解吗? passwd文件列出了Unix系统上的用户帐户,以及它们的用户名和组ID号,其主目录以及相应命令或shell的路径。但是,在MacOS上,你只能在passwd中找到系统服务帐户。这是因为实际用户是在MacOS的系统偏好设置中的“用户和组”下配置的。





磁盘空间相关命令






你可以使用两个命令来检查可用空间并确定哪些文件正在占用磁盘:(du磁盘使用情况)和df(磁盘空闲)。他们都-h选项可选择(人类可读)。
要了解磁盘的容量,使用以下df命令:

Linux和MacOS都能用的Unix命令,你了解吗?

Linux和MacOS都能用的Unix命令,你了解吗?如果想要知道 所有空间都在哪里使用呢?——使用du命名:

Linux和MacOS都能用的Unix命令,你了解吗?

在上面的例子中,通过 head命令,将输出限制为前10行。否则,du将列出计算机上的每个目录,这可能很容易掌握。从该清单中可以看到每个目录占用了多少空间。如何再结合Sort命令,就可以很轻松的实现查看磁盘大小文件前10排序。(MacOS相比Linux而言实现会略复杂一下,有兴趣的可以去了解一下)




超级用户:su和sudo






许多命令与系统管理有关,必须要在超级用户下运行,同样在Linux/MacOS下对很多文件进行修改都需要有root(管理员)权限,比如对/ect/profile等文件的修改。

通常情况下,我们有两种方法实现上述目的。
  • 利用su命令切换到root用户 , 在root用户下对那些文件进行修改,完成相关配置工作。
  • 在命令前加上sudo,获取单次root权限。

sudo并不是对所有用户都有用,如果当前登陆的用户没有在/etc/sudoers下的话,那么sudo也是无效的,通常情况下,MacOS在首次运行创建时的用户的默认的管理员,也就是说,在该用户下运行sudo是有效的。
如果你的Mac上还有其他用户,并且是普通用户的话,那么就没办法运行sudo,需要将其变为管理员才行。
为什么用sudo代替su?
root用户权限大,但是危害也大。因此最佳的实践方式,就是以普通用户的身份做所有可能的事情,并仅在需要时才成为超级用户。究竟如何获得超级用户特权将取决于你的Unix发行版。
Linux和MacOS都能用的Unix命令,你了解吗?

Linux和MacOS都能用的Unix命令,你了解吗?




结语






本文介绍了这些命令不管是在MacOS还是Linux系统上,首次接触到命令时,出现频率较高的。
还有其他更详细的命令介绍,可以查看下方的文章: