Mac 常用终端命令

前言

什么是终端?什么是shell?在Linux中这两者有什么关系和区别呢,对于很多和我一样的初学者来说肯定会有这样的疑问。本小结简单讲解下什么是终端、什么是shell和shell和终端的关系

说明一下发文章的目的主要是为了方便自己复习和解答和我有一样疑问初学者。内容来自网络和自己的总结所以内容的正确性仅供参考,有问题欢迎指出


一、终端(terminal)

对于学习Linux的初学者来说,肯定会接触到 “终端” 这个词,那到底什么是终端呢?百度百科上这样说的:

终端(英语:Computer terminal),是与计算机系统相连的一种输入输出设备,通常离计算机较远。根据功能不同,可分若干类。具有某些处理功能的终端称为灵巧终端或智能终端,这类终端有它自己的微处理器和控制电路;没有此功能的叫做哑终端,它没有微处理器。支持与计算机会话或处理的终端叫交互终端或联机终端。

说白了其实终端就是——人与机器交互的接口。

人和机器是两个相互独立的实体。当人使用机器时,必须借助某种接口(interface)才能与机器交流信息。台式机的接口包括显示器、键盘、鼠标、扬声器、麦克风等。CPU、内存、硬盘、光驱、显卡、网卡等其他硬件属于主机(host)。Unix和Linux把这种使得人和机器可以交互的接口称为终端。

终端具有两个基本功能:向主机输入信息和向外部输出信息。所以终端可以分为输入设备和输出设备。台式机的输入设备通常包括键盘、鼠标、麦克风,输出设备包括显示器、扬声器等。
我们可以将上面的两段内容归纳为两个公式:

计算机 = 主机 + 终端 = 输入设备 + 输出设备

linux上面终端(terminal)(就是你输入指令的那个黑色框框)就是一个仿真终端,你可以把它当作一个模拟的输入设备。作用是提供一个命令的输入输出环境,在linux下使用组合键ctrl+alt+T打开的就是终端(ctrl+D可以关闭终端)。

在Linux中有图形界面和命令行界面(按Alt+Ctrl+F1~F6组合键可进行切换),图形界面下的命令行窗口,叫做伪终端。但是这个伪终端是跟那个脱离图形界面的、黑漆漆的、按Alt+Ctrl+F1~F6组合键出来的那个终端而说的。伪终端的工作方式是在桌面上申请一个窗口,然后在里面模拟显示出一个黑漆漆的界面。比如Gnome终端、Konsole终端、xterm终端、urxvt终端等等。

终端有以下几种:

  1. 物理终端:直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,一般是多台服务器共享一套终端,简称KVM(Keyboard键盘,video显示器,mouse鼠标)
  2. 虚拟终端(tty):附加在物理终端之上,用软件方式虚拟实现,CentOS默认启用6个虚拟终端,可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1–6], 对应的文件是/dev/tty#。可以同过tty命令来查看当前的虚拟终端号。tty是teletypewriter的简称。
  3. 伪终端(pty):两种应用场景,第一在图形界面下打开的命令行接口,第二基于ssh协议或telnet协议等远程打开的命令行界面,是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。
  4. 控制终端(/dev/tty) 这是个在应用程序中的一个概念,前台进程有个控制终端,就对应这个。不过它并不指任何物理意义上的终端,其实/dev/tty会映射到当前的设备(通过tty命令可以看到),比如你如果在控制台界面下(即字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当前的控制台号),但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到的是/dev/pts的伪终端上。比如你可以输入命令 #tty 那么将显示当前映射终端如:/dev/tty1或者/dev/pts/0等。

二、shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

shell是一个命令行解释器,是linux内核的一个外壳,负责外界与linux内核的交互。shell是包裹在操作系统外层的一道程序,就好像是操作系统的壳,shell(壳)的名称也由此而来。shell接收用户或者其他应用程序的命令, 然后将这些命令转化成内核能理解的语言并传给内核, 内核执行命令完成后将结果返回给用户或者应用程序。当你打开一个terminal(终端)时,操作系统会将terminal和shell关联起来,当我们在terminal中输入命令后,shell就负责解释命令。

shell广义上可以指操作系统和用户接口的界面,图形界面也是一种shell。因为图形界面的本质也是实现“把人类用户的操作意图转述个内核”。

三、shell和终端的关系

shell是一个程序,一个二进制可运行可执行的程序,一般情况下,我们并不会感觉它的存在,因为我们很少主动去调用它,除非我们人为去执行bash程序。那么shell跟终端有什么关系呢?

  shell和终端的关系就是终端程序会自动调用shell程序。体现在每次打开终端(伪终端、虚拟终端)的时候,终端程序都会去调用shell。终端调用终端程序成功的情况下,终端就会显示如下的信息:

[root@localhost ~]#

其中root代表的就是登录人是谁,host指示登录到的主机,~表示当前操作目录,$表示的是命令提示符(如果登陆人是root的话就显示为#),表示等待输入命令。

如上图所示其中,root为打开shell的用户名;@为分隔符;local为主机名称;~为工作目录名称;#为身份提示符,#表示超级用户,$表示普通用户。

linux 终端命令是使用 bash 编程语言编写的。bash 是一种命令行解释器,用于 linux 和 macos 操作系统,具有可移植性、灵活性、丰富的库和可扩展性等优点,使其适用于编写 linux 命令。

Linux 终端命令是什么语言的?

Linux 终端命令是基于Bash 编程语言编写的。

什么是 Bash

Bash(Bourne Again Shell)是一种功能强大的命令行解释器,通常在 Linux 和 macOS 操作系统中使用。它是 Bourne Shell(sh)的改进版本,提供了更高级的功能和特性。

绝对路径和相对路径

绝对路径

大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。(也可以认为以”/”开头的都为绝对路径)

相对路径

所谓相对路径,顾名思义就是自己相对与目标位置。不论将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。   另外我们使用“../”来表示上一级目录,“../../”表示上上级的目录,以此类推。(也可认为不是以”/”开头的都是相对路径)

举个栗子

   示例一
   比如说你的C盘ABC文件夹下有两个文件1和2(它们都在ABC文件下),如果要文件1说出文件2的位置
   (也就是路径),那么它有两种表示方法:

  1.绝对路径:  C:\ABC\2  
   因为它指明2文件在C盘ABC文件下,从最大的目录C盘开始表示出来.   
  2.相对路径:  2
   因为1文件和2文件都在C:\ABC下,所以它们的路径前面"C:\ABC"都是一样,就不用表示出来了.
   示例二
   比方C盘ABC文件夹有个1文件,还有一个DEF文件夹,而DEF文件下有个2文件1和2的文件路径分别为:
   (都是绝对路径)
   C:\ABC\1
   C:\ABC\DEF\2
   如果让1文件来表示2文件的路径
   * 绝对路径: C:\ABC\DEF\2
   * 相对路径: DEF\2 (因为1和2文件前面的C:\ABC这段路径相同就不用写出来了)。

常用mac终端操作命令符

1. 显示当前目录的路径

    显示当前目录的路径(让你实时查看当前所处的路径)    
pwd

2. 查看当前目录下的内容(让你实时查看当前路径下的内容)

    ls 参数 目录名
    参数: -w 显示中文,-l 详细信息, -a 包括隐藏文件,
    每一行开头是 “d” 则为文件夹,开头是 “-” 则为文件。
    ls                 显示在当前目录下的所有文件或文件夹
    ls + 目录          显示在该目录下的所有文件或文件夹
    ls + 空格 +   -a   显示当前目录下隐藏文件
    ls + 空格 +   -l   显示当前目录下详细信息
    ls + 空格 +   -R   显示当前目录下子目录文件      
    ls + 空格 +  -w    显示当前目录下中文文件
    ls + 空格 +  -la   显示所有文件
    例: 看看驱动目录下有什么:ls /System/Library/Extensions

3.切换路径(也可称为转化目录) 就是将从一个路径中,进入到另外一个路径

    cd 目录名
cd . 表示当前目录
cd .. 表示返回上一级目录
cd ../.. 表示返回上两级
cd ../.. /.. 表示返回上三级目录
cd  + 空格 + 下一目录  表示将从当前路径进入到下一目录
cd  + 空格 + 〜           表示从当前目录进入到用户根目录
cd  + 空格  + /            表示从当前目录进入根目录
cd  + 空格 + ./            表示从当前目录进入到当前目录(一个点"." 表示当前)
例:想到驱动目录下溜达一圈:cd /System/Library/Extensions

4. 建立新目录(也可理解为创建文件夹)

    mkdir 目录名 
mkdir + 空格 +文件夹名       表示创建一个文件夹
  mkdir + 空格 + 绝对路径      表示创建一个文件夹和上面的功能相同,
  只不过上面是通过相对路径创建, 下面是通过绝对路径创建.
例:在驱动目录下建一个备份目录 backup:mkdir /System/Library/Extensions/backup

5. 删除目录(也可理解为删除文件夹)

    rmdir 目录名
rmdir + 空格 + 文件夹名      表示删除一个文件夹
rmdir + 空格 + 绝对路径     表示删除一个文件夹和上面的功能相同,只不过上面是通过相对路径删除,下面是通过绝对路径删除
例:在桌面删除一个叫new的文件  MacBook-Air:Desktop admin$ rmdir  new

6.建立新文件

    touch 文件名        
例:在当前目录下建一个备份文件 backup:touch backup.txt

7.删除文件

    rm  参数 文件 参数-rf          表示递归和强制,千万要小心使用,如果执行了 rm -rf /
你的系统就全没了 
rm + 空格 + 文件名和格式     表示删除一个文件
rm   + -r   + 文件夹          表示强制删除文件夹中包含文件的文件夹
(当文件夹中包含有文件, 通过"rmdir + 空格+ 文件夹名"的方式 是删不掉文件夹的,只有通过"rm + -f + 文件夹名",进行强制删除)
rm   + -rf   + 文件夹       表示强制删除文件夹中包含文件的文件夹
(和"rm + -r + 文件夹名" 功能相同)
注意: rm 可以删除多个文件而不止一个文件 ,但是两个文件的路径必须用空格隔开.
例:想删除驱动的缓存:rm -rf /System/Library/Extensions.kextcache                                                    rm -rf /System/Library/Extensions.mkext  

8. 拷贝

    cp 参数 源文件 目标文件        
例:想把桌面的 Natit.kext 拷贝到驱动目录中 cp -R /User/用户名/Desktop/Natit.kext /System/Library/Extensions
参数 R 表示对目录进行递归操作,kext 在图形界面下看起来是个文件,实际上是个文件夹。
把驱动目录下的所有文件备份到桌面 backup:cp -R /System/Library/Extensions/
/User/用户名/Desktop/backup

9.移动文件和重命名文件

    mv 源文件 目标文件
mv + 需要移动的文件或文件夹 + 空格 + 移动到的路径(这里路径可以是相对路径,也可以是绝对
路径);mv + a.c + 空格 +b.c 表示将a.c 重命名为b.c
例:想把 AppleHDA.Kext 移到桌面:
mv /System/Library/Extensions/AppleHDA.kext /User/用户名/Desktop
mv file ../ 将文件file移动到父目录

10.文本编辑

    vim 文件名
vim + 文件名 表示编辑文件内容
例:  
vim /System/Library/Extensions/Natit.kext/Info.plist 
编辑完成后 用 Ctrl +O 存盘,Ctrl+X 退出 
注意:
* 在默认的"指令模式"下按 i 进入编辑模式 
* 在非指令模式下按 ESC 返回指令模式 
* 在"指令模式"下输入: 
:w 保存当前文件 
:q 退出编辑,如果文件为保存需要用强制模式 
:q! 强制退出不保存修改 
:wq 组合指令, 保存并退出 
* 在"指令模式"下移动: 
h 左 
j 下 
k 上 
l 右 

11. 清屏

    clear

12.打开某个文件,文件夹或应用

  open
* 如果是open .则是打开当前命令里的目录,如果要打开指定的文件夹或者文件则格式为open 要打开的路径即可。(这里绝对路径或相对路径都可以)
* open命令可以在终端中开启应用,使用-n可以开启多个相同应用。比如你可以使用下面的命令开启新Safari窗口
open -n /Applications/Safari.app/
Share:

You May Also Like