Shell基础之Bash基本功能

一、历史命令与补全功能

1、历史命令

  • history命令是Linux中一个常用的命令,它可以显示用户在当前shell会话中执行的所有命令。这些命令按照从最近到最早的顺序排列,并且每条命令都以一个唯一的数字作为标识。
  • history会读取主目录下的.bash_history文件与当前缓存中的命令合并为一个命令历史列表history 命令就可以用来查看并管理这个列表。当我们退出Shell或者使用-w(write)选项时,缓存中的命令就会写入.bash_history文件中。
  • 我们还可以通过-c(clear)选项清空所有历史命令(慎重使用,历史命令可以让我们了解系统之前发生了什么)。
  • 历史命令默认保存1000条,超过1000条时,系统会删除最旧的命令。我们可以在配置文件中/etc/profile中修改这个数据。

2、历史命令的调用

  • 使用上、下箭头调用历史命令。
  • 使用!n命令来执行历史命令中的第n个命令。
  • 使用!!执行上一条命令。
  • 使用!字符串执行最后一条以该字符串开头的命令。

3、补全功能

  • Linux中的补全功能可以帮助用户快速输入命令和路径,提高命令行操作效率。补全功能通常包括命令和参数补全、文件名和路径补全等。
  • 用户只需要输入前几个字符,并按下Tab键,系统就会根据已输入的内容自动匹配并显示可能的选项。如果存在多个选项,连续按下两次Tab键,系统会将所有可能的选项输出。

二、别名与快捷键

1、命令别名

在Linux中,alias命令可以用来为命令设置别名。它可以帮助用户以一种更简单、直观且容易记忆的方式执行命令,并提高工作效率。

使用alias命令设置别名的语法格式如下:

alias new_name='command' //设置别名
unalias 别名 //删除别名

例如:

alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

注:
通过alias设置的别名仅在当前的shell环境中有效,退出shell或者重新登录后,之前设置的别名会被清除。
如果希望永久保存别名,则可以将其添加到/root/.bashrc文件中。bashrc文件是一个bash shell启动时读取的脚本文件,可以在其中添加需要设定的别名信息。

2、命令的执行顺序

  • 第一顺位:绝对路径与相对路径执行的命令。
  • 第二顺位:别名命令。
  • 第三顺位:bash的内部命令。
  • 第四顺位:按照$PATH环境变量定义的目录查找顺序的第一个命令。

3、快捷键

快捷键 作用
Ctrl + C 终止当前命令的执行
Ctrl + D 退出当前的shell会话
Ctrl + L 清屏并将光标移动到顶部
Ctrl + U 删除光标前的全部内容
Ctrl + K 删除光标后的全部内容
Ctrl + Y 粘贴Ctrl + K或Ctrl + U删除的内容
Ctrl + Z 将当前进程转入后台,并暂停其执行,使用“bg”命令可以将其切换到后台继续执行
Ctrl + A 将光标移动到命令行的开头
Ctrl + E 将光标移动到命令行的结尾
Ctrl + W 删除光标前的一个单词
Tab 键 动补全命令或路径
Ctrl + R 搜索最近使用过的命令历史记录

三、输出重定向与输入重定向

1、标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

2、输出重定向

输出重定向是一种在Linux系统中的shell命令,该命令将命令的输出结果输出到指定文件中。
当用户执行某个命令时,命令执行后的输出通常会显示在屏幕上。使用输出重定向可以将命令的输出结果捕获并重定向到指定文件中,而不是显示在屏幕上。

标准输出重定向:

  • 命令 > 文件,将命令的输出结果输出到指定文件中。如果该文件不存在,则会自动创建一个新的文件,如果文件已经存在,则会覆盖原有文件的内容。
  • 命令 >> 文件,以追加的方式,将命令的正确输出追加的文件中。

标准错误输出重定向:

  • 错误命令 2> 文件,将命令的错误输出结果输出到指定文件中。如果该文件不存在,则会自动创建一个新的文件,如果文件已经存在,则会覆盖原有文件的内容。
  • 错误命令 2>> 文件,以追加的方式,将命令的错误输出追加的文件中。

正确输出与错误输出同时保存:

  • 命令 > 文件 2>&1命令 &> 文件,以覆盖的方式,同时保存正确输出与错误输出到指定文件。
  • 命令 >> 文件 2>&1命令 &>> 文件,以追加的方式,同时保存正确输出与错误输出到指定文件。
  • 命令 >> 文件1 2>> 文件 2,将正确输出追加到文件1中,将错误输出追加到文件2中。

注:命令 &> /dev/null,该命令的含义是将标准输出和标准错误输出都重定向到/dev/null文件中。/dev/null是一个特殊的文件,所有写入该文件的数据都会被丢弃,因此这个命令的实际作用是将命令的所有输出都忽略掉,不显示在终端屏幕上,也不写入文件。

3、输入重定向

输入重定向是一种Linux系统中的shell命令,该命令将输入来自文件中的文本或命令行之外其他源的数据重定向到命令的标准输入。
当用户执行某个命令时,命令需要从标准输入中获取输入数据进行处理,通常情况下标准输入是来自键盘的输入,但是通过输入重定向技术,用户可以将命令的标准输入重定向到一个文件或者其他来源,从而实现对命令输入的控制。

一般输入重定向常用于wc命令。

命令语法:wc [选项] [文件],用于计算文本文件中的字数、词数和行数等信息。

其中,选项用于控制命令的输出格式,文件用于指定要计数的文件。如果不指定文件,则wc默认从标准输入中读取数据。常用的选项有:

  • -c(chars):显示文件中的字符数。
  • -w(words):显示文件中的单词数。
  • -l(lines):显示文件中的行数。

常用的输入重定向:

wc < .profile  //计算.profile文件中的行数、字数和字符数。

wc << EOF      //以计算EOF之前标准输入中的行数、字数和字符数。
> This is line 1.
> This is line 2.
> EOF

四、多命令顺序执行与管道符

1、多命令顺序执行

在Linux中,可以使用;&&||来连接多个命令实现条件执行的功能,如下:

  • command1 ; command2:多个命令之间使用分号分隔,命令之间没有逻辑联系。
  • command1 && command2:逻辑与,前一个命令执行成功后才会继续执行下一个命令。如果前一个命令执行失败,则后面的命令将不会执行。
  • command1 || command2:逻辑或,前一个命令执行失败后才会继续执行下一个命令。如果前一个命令执行成功,则后面的命令将不会执行。

注:这些运算符也可以联合使用,例如判断命令是否正确:command && echo "yes" || echo "no"

2、dd命令

多命令顺序执行经常与dd命令结合使用。

Linux中的dd命令是一个用于复制和转换文件的工具,可以复制任意格式的文件,包括二进制文件、设备文件等,也可转换数据格式、修改分区表等。

dd命令的基本语法:dd [if=input_file] [of=output_file] [bs=bytes] [count=number]

  • if选项用于指定输入文件。
  • of选项用于指定输出文件。
  • bs选项用于指定一次输入/输出多少字节,即把一个数据块多少字节。
  • count选项用于指定输入/输出多少数据块。

dd命令常见的用途包括:

  1. 复制磁盘镜像:使用dd命令可以将整个磁盘或分区内容复制到另一个磁盘或分区上。
  2. 创建随机数据文件:使用dd命令可以快速生成一定大小的随机二进制数据文件。
  3. 修改磁盘分区表:使用dd命令可以读取和修改磁盘的分区表信息。
  4. 恢复损坏的启动扇区:使用dd命令可以将备份的启动扇区数据写入硬盘,以恢复启动扇区。
  5. 格式化移动设备:使用dd命令可以在Linux系统上格式化U盘、SD卡等移动存储设备。

dd命令应该谨慎使用,因为它没有安全检查机制,误操作可能会导致数据丢失等问题。

例子:

//创建一个大小为100000KB的文件需要多少时间
date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date

详细如下:

  1. “date”:表示打印当前日期和时间的命令,用于记录命令执行的起始时间。
  2. “dd”:表示一个用于复制和转换文件的工具,这里是使用dd命令创建一个名为testfile的文件。
  3. “if=/dev/zero”:表示使用/dev/zero设备中的空数据作为输入数据。
  4. “of=/tmp/test”:表示将输出数据写入/root/testfile文件中。
  5. “bs=1k”:表示每次读取和写入1KB的数据。
  6. “count=100000”:表示总共要读取和写入100000次,即创建一个大小为100000KB的文件。
  7. “date”:表示在命令执行完成后再次打印当前日期和时间,用于记录命令执行的结束时间。

注:/dev/zero是一个特殊的文件,可以提供任意多个空字符。同时也是一个虚拟设备,它没有与任何外部存储器相关联。从/dev/zero读取数据会得到一些连续的0字节,而且读取次数不受限制。在很多情况下,这样的连续0字节可以被用来作为初始值,比如清空内存、创建空文件、初始化数据存储、测试磁盘空间等等。

3、管道符

Linux中的管道符“|”是一种用于将一个命令的输出传递给另一个命令作为输入的操作符。具体来说,管道符可以将前一个命令的标准输出直接传递给后一个命令的标准输入。

管道符语法:命令1 | 命令2

例1,列出/etc/目录下的所有文件和目录,使用管道符“|”将结果传递给more命令进行分页显示。

ll -a /etc/ | more

例2,输出正在运行的进程中包含"stattups"的进程信息。

ps aux | grep stattups

grep命令是Linux下一种文本搜索工具,可以在文件或者标准输入中查找匹配的字符串,并打印相应的行。该命令可以用来搜索单个文件,还可以搜索整个目录及其子目录下的所有文件,同时还支持正则表达式的使用。

grep语法:grep [选项] "搜索内容"

选项:

  • -i(ignore):忽略字母大小写。
  • -n(number):打印匹配行的行号。
  • -v(invert):反向匹配,只输出不匹配的行。
  • -r(recursion):递归搜索指定目录及其子目录下的所有文件。
  • -E(extended):支持使用扩展正则表达式。
  • -w(whole):只匹配整个单词,而不是其中的部分。
  • –color=auto:搜索出的关键字用颜色显示。

五、通配符与其他特殊字符

1、通配符

Linux中通配符是一种特殊语句,用于匹配指定的文件名或路径。

通配符 作用 举例
? 匹配一个任意字符 ls ?re
* 匹配0个或任意多个任意字符,也就是匹配任何内容 ls ab*
[] 匹配中括号中任意一个字符,-代表范围,例如[a-z]表示匹配所有小写字母 ls [0-9]*
[^] 匹配除括号内指定字符之外的任意一个字符,[^0-9]代表匹配一个不是数字的字符 echo {a,b,c}{a,b,c}
{} 匹配其中任意一个字符串,例如{jpg,png,gif}表示匹配jpg、png和gif文件 ls [^abc]*

2、其他常用特殊符号

符号 作用
‘’ 单引号,在单引号中所有特殊符号都没有特殊含义
“” 双引号,在双引号中除$、 ` 和 \ 除外,其他特殊符号都没有特殊含义
`` 反引号,反引号中的内容是系统命令,在bash中会先执行
$() 和反引号作用一样
# 在shell脚本中,#代表注释
$ 用于调用变量的值,比如有一个变量name,则用$name可获得该变量的值
\ 转义符,跟在\之后的特殊符号失去特殊含义

你可能感兴趣的:(Linux之Shell,bash,linux)