Alex_McAvoy

想要成为渔夫的猎手

Linux 终端与命令

【终端】

概述

终端(terminal),是一个提供了命令的输入输出环境,在 Linux 下使用组合键 Ctrl+Alt+T 打开的就是终端

而 shell 是一个命令行解释器,是 Linux 内核的一个外壳,负责外界与 Linux 内核的交互

shell 接收用户或者其他应用程序的命令,然后将这些命令转化成内核能理解的语言并传给内核,内核执行命令完成后将结果返回给用户或者应用程序

因此,当打开一个 terminal 时,操作系统会将 terminal 和 shell 关联起来,当在 terminal 中输入命令后,shell 就负责解释命令

通用命令格式

在 Linux 中,无论是命令名还是文件名,是区分大小写的,一个命令的各组成部分间用空格分隔,一个命令的输入由回车结束

命令的通用格式为:命令字 [选项] [参数]

选项用于调节命令的具体功能,其书写形式如下:

  • - 引导短格式选项,即单个字符
  • -- 引导长格式选项,即多个字符
  • 多个短格式选项可以写在一起,用一个 - 引导

命令字前缀

在终端中:

  • @ 符号前,是当前登录的用户名
  • @ 符号后到 : 符号前,是计算机的主机名(hostname)
  • : 符号后到 $ 符号前,是当前目录
  • $ 符号,是普通用户的命令提示符
  • # 符号,是 root 用户的命令提示符

输入与输出

在 Linux 中,最重要的就是命令,这就包含了两个过程:输入与输出

输入,就是打开终端,然后按键盘输入,最后按回车

输出,如果是查看,会返回你想要的结果,比如返回文件的内容;如果是执行,执行成功会没有输出,执行失败会告诉你哪里错了

下面介绍几条初学者常用的命令:

  • 打印命令:echo [输出内容]
  • 创建空文件:touch [文件名]
  • 删除文件:rm [文件名]
  • 进入目录: cd [目录名]
  • 查看当前目录: pwd
  • 查看当前目录下的内容:ls

常用快捷键

按键 作用
Tab 可得到提示,用于补全命令、目录、命令参数
Ctrl+c 强行终止当前程序
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按任意键继续
Ctrl+k 删除从光标所在位置到行末
Ctrl+a 将光标移至行头
Ctrl+e 将光标移至行末
Alt+Backspace 向前删除一个单词
Shift+Pgup 将终端显示向上移动
Shift+Pgdn 将终端显示向下移动

通配符

通配符是一种特殊语句,主要有星号 * 和问号 ?,用来对字符串进行模糊匹配

例如,在查找文件夹时,不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符

终端里面输入的通配符是由 Shell 处理的,不是由所涉及的命令语句处理的,它只会出现在命令的”参数值”里(它不能出现在命令名称里,命令不记得,那就用 Tab 补全)

当 Shell 在”参数值”中遇到了通配符时,Shell 会将其当作路径或文件名在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展),否则就将该通配符作为一个普通字符传递给”命令”,然后再由命令进行处理

总之,通配符实际上就是一种 Shell 实现的路径扩展功能。在通配符被处理后, Shell 会先完成该命令的重组,然后继续处理重组后的命令,直至执行该命令

Shell 常用通配符

字符 含义
* 匹配 $0$ 或多个字符
匹配任一字符
[list] 匹配 list 中的任意单一字符
[!list] 匹配除 list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符
{string1,string2,…} 匹配 string1 或 string2 或更多其一字符串
{c1..c2} 匹配 c1-c2 中全部字符

例如:使用通配符一次创建多个名为 testX.txt 的文件,其中 X 从 1 到 5

【内建命令与外键命令】

内建命令

内建命令属于 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令(写在 bash 源码里 builtins 的 .def 中),由 shell 程序识别并在 shell 程序内部完成运行

shell 通常在 Linux 系统加载运行时,就被加载并驻留在系统内存中,且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快

常见内建命令有:historycdexit

外部命令

外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存

外部命令虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的

外部命令是在 Bash 之外额外安装的,通常放在 /bin/usr/bin/sbin/usr/sbin 等目录中

常见外部命令有:lsvi

区分方法

使用 type 命令即可来区分内建命令与外部命令

语法:type 要判断的命令名

当显示结果为:xxx is a shell builtin 时,说明 xxx 命令是内建命令

例如:

当显示结果为:xxx is /usr/bin/xxx 时,说明 xxx 命令是外部命令

例如:

当显示结果为:xxx is an alias for xxx —xx 时,说明 xxx 命令为 xxx —xx 命令的别名

例如:

感谢您对我的支持,让我继续努力分享有用的技术与知识点!