Linux: tmux工具

使用命令行时,通常会遇到同时执行多个任务的场景。一种方式是使用打开多个窗口运行任务,另一种方式是使用终端多路复用器的工具在一个窗口中运行多个窗格执行任务。

阅读更多

Linux: Bash笔记

Shell 是一种广泛使用的操作系统外壳和脚本语言,其版本发展可以分为以下几个阶段:

  1. Bourne shell (sh) 通常称为 sh,由 Stephen Bourne 于 1977 年开发,是最早的 Unix shell
  2. Bash (Bourne-again shell) 由 Brian Fox 开发,是 Bourne shell 的一个向后兼容的替代品。它是 Linux 系统的默认 shell
  3. Korn shell (ksh) 由 David Korn 开发,是 Bourne shell 的另一个扩展版本。ksh 在交互性和脚本语言方面提供了改进
  4. Z shell (zsh) 是 Bourne shell 的另一个扩展版本,提供了更多的功能和改进,包括自动补全、主题自定义和插件等
  5. C shell (csh) 由 Bill Joy 开发,语法类似于 C 语言。csh 主要用于交互式使用,但不太适合编写脚本

<– more –>

Bash Shell 功能

history 记录

Bash history 是一个很有用的功能,它记录了你在 shell 中执行的命令并允许你查看和重复使用这些命令。

Bash history 的使用方法:

  • 列出 history 中的命令:使用 history 命令可以显示最近执行的命令列表,每条命令都有一个编号
  • 重新执行 history 中的命令:使用 ! 可以重新执行历史命令。例如,!1234 会重新执行编号为 1234 的命令
  • 搜索 history 中的命令:使用 Ctrl + R 可以搜索历史命令。输入关键字后,按 Ctrl + R 将会显示包含该关键字的最近命令
  • 清除 history 中的命令:使用 history -c 可以清除当前 session 中的所有历史命令。如果要清除特定的命令,可以使用 history -d <编号>
  • 控制 history 的长度:使用 HISTSIZEHISTFILESIZE 环境变量可以控制 history 的长度。
    Bash history 可以提高命令行效率,节省重复输入的时间,是 shell 用户的一个重要工具。

    Tab 补全

    Bash 中的 Tab 补全(Tab completion)是一项非常有用的功能,可以节省输入时间并提高准确性。当你在命令行中输入文件名、目录名或命令时,按下 Tab 键可以自动完成输入内容。

Tab 补全的基本使用方法:

  • 文件和目录补全:输入文件或目录的开头几个字符,然后按下 Tab 键。Bash 会显示匹配的文件和目录列表。如果只有一个匹配项,将自动完成输入
  • 命令补全:输入命令的开头几个字符,然后按下 Tab 键。Bash 会显示匹配的命令列表。如果只有一个匹配项,将自动完成输入
  • 命令选项补全:对于支持选项的命令,可以在输入选项名称的开头几个字符后按 Tab 键获取补全建议

    Script 脚本

    Bash Script 脚本是一系列 Bash 命令的文本文件,可以自动执行。

    Wildcard 通配符

    Bash 中的通配符(Wildcard)是一种方便且强大的工具,可以用来匹配文件和目录名称的模式。最常用的通配符有以下几种:
  • *:匹配零个或多个字符
  • ?:匹配一个字符
  • [character-range]:匹配一个指定范围内的字符
  • [!character-range]:匹配不在指定范围内的任意一个字符

下面是一些通配符的使用示例:

  1. 列出目录中所有以 file 开头的文件:ls file*
  2. 列出目录中所有以 file 开头且后面跟随着数字的文件:ls file[0-9]*
  3. 列出目录中所有的 .txt 文件:ls *.txt
  4. 列出目录中所有的 .txt 文件,但不包括以 file 开头的文件:ls [!f]*.txt

使用通配符可以简化命令的输入,实现强大的功能。

Bash 其他功能

变量中几种引号的差异

在 Bash 的变量使用中,常用到的引号包括单引号('),双引号(") 和反引号(`)。三者在变量使用中有不同的意义和结果:

  • 双引号: 可以将字符串定义为字面量,但是与单引号不同的是,它会进行变量展开、通配符扩展和命令替换
  • 单引号:
    • 可以将字符串定义为一个字面量,意味着其值是直接指定的,不会进行变量展开、通配符扩展或命令替换
    • 单引号也可以用于转义特殊字符,以免它们被解释为具有特殊意义的命令或通配符
    • 在单引号中,可以使用多行字符串
  • 反引号: 用于转义特殊字符,以免它们被解释为具有特殊意义的命令、通配符或其他字符