1.2 历史命令
1.2.1 !在命令中的应用
当我们在linux中执行命令时,执行过的每一条命令都会被保存到家目录的.bash_history文件中,需要注意的是:只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中
!!:连续两个!表示执行上一条指令
[root@localhost ~]# pwd /root [root@localhost ~]# !! pwd /root |
!n:表示执行命令历史中的第n条指令
[root@localhost ~]# history |grep 90 90 bash 1.sh 155 history |grep 90 [root@localhost ~]# !90 bash 1.sh bash: 1.sh: 没有那个文件或目录 |
!字符串:表示执行命令历史中最近执行的一次以其开头的命令
[root@localhost ~]# !bash bash 1.sh bash: 1.sh: 没有那个文件或目录 |
1.2.2补全
一次TAB键可以补全一个指令、一个路径、一个文件名;连续两次TAB键,系统列出所有命令或文件名
1.2.3别名
在shell中,别名(alias)是一种将一个或多个命令绑定到一个自定义名称上的方法
创建别名: alias 别名=“实际命令”
[root@localhost ~]# alias ll="ls -l" [root@localhost ~]# ll 总用量 552 -rw-------. 1 root root 1257 9月 21 17:25 anaconda-ks.cfg drwxr-xr-x. 4 root root 75 10月 8 08:42 shell1 -rw-r--r--. 1 root root 560272 7月 13 09:34 wget-1.14-18.el7_6.1.x86_64.rpm |
查看已有别名:alias
[root@localhost ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' |
删除别名:unalias 别名
[root@localhost ~]# unalias ll [root@localhost ~]# ll -bash: ll: 未找到命令 |
1.2.4通配符
在shell中,通配符是一种特殊的字符,用于匹配文件名或路径中的特定模式,以下是常用通配符及其含义:
(1)星号*:代表零个或多个任意字符
例:
◎*.txt匹配所有扩展名为.txt的文件
◎a*匹配以字母a开头的所有文件
◎*b*匹配任何包含字母b的文件
- 问号?:代表一个单一的任意字符
例:
◎?.txt匹配单个字符后跟.txt扩展名的文件,如a.txt或1.txt
◎file?.log匹配file1.log,file2.log.不匹配file10.log
- 方括号[]:代表括号内的任何一个字符,可以指定范围
例:
◎[abc]匹配文件名中包含a、b、c中任意一个字符的文件
◎[a-c]同上,等价于[abc]
◎[0-9]匹配文件名中包含0到9之间任何一个数字的文件
◎[!abc]或[^abc]匹配不在a、b、c范围内的字符
1.2.5输入/输出重定向
在Shell中,输入/输出重定向是一种强大的功能,它允许你改变命令的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的流向。这可以让你将命令的输出保存到文件中,或者从文件读取输入,甚至可以将一个命令的输出作为另一个命令的输入。
输出重定向
◎>:将命令的输出写入到指定的文件中,如果文件已经存在,则会覆盖文件内容
[root@localhost ~]# echo "Hello,World" > output.txt [root@localhost ~]# cat output.txt Hello,World |
◎>>:将命令的输出追加到指定的文件中,不会覆盖文件原有内容
[root@localhost ~]# echo "Another line" >> output.txt [root@localhost ~]# cat output.txt Hello,World Another line |
◎&>或>&:将标准输出和标准错误都重定向到同一个文件中
[root@localhost ~]# some_command &> combined_output.txt [root@localhost ~]# cat combined_output.txt -bash: some_command: 未找到命令 |
◎2>:将标准错误单独重定向到一个文件中
[root@localhost ~]# some_command 2> error_output.txt [root@localhost ~]# cat error_output.txt -bash: some_command: 未找到命令 |
输入重定向
◎<:从指定的文件中读取输入
假设input.txt文件中有如下未排序的行
[root@localhost ~]# vi input.txt banana apple cherry date elderberry |
执行命令
[root@localhost ~]# sort < input.txt apple banana cherry date elderberry |
输出的内容将会按字母顺序排序后输出到终端
1.2.6管道符
在shell中,管道符(|)允许你将一个命令的输出作为另一个命令的输入
[root@localhost ~]# cat /etc/passwd |wc -l 19 |
1.2.7作业控制
当运行进程时,你可以使它暂停(Ctrl+Z),然后使用fg(foreground的简写)命令恢复它,或者是使用bg(background的简写)命令使它到后台运行。此外,你也可以使它终止(Ctrl+C)
[root@localhost ~]# vi test1.txt Testtestetstetste #随便输入一些内容,按Esc键,使用Ctrl+Z暂停任务
#此时提示进程已经停止,使用fg命令恢复,输入jobs,可以查看被暂停或在后台运行的任务 [root@localhost ~]# jobs
#如果想把暂停的任务放在后台重新运行,就使用bg命令 [root@localhost ~]# bg [1]+ vi test1.txt &
#可以看出vi不支持在后台运行,换一个命令查看 [root@localhost ~]# vmstat 1 > /tmp/1.log ^Z [2]+ 已停止 vmstat 1 > /tmp/1.log [root@localhost ~]# jobs [1]- 已停止 vi test1.txt [2]+ 已停止 vmstat 1 > /tmp/1.log [root@localhost ~]# bg 2
#在上面的例子中,出现一个新的知识点,就是多个被暂停的任务会有编号,使用jobs命令可以看到两个任务,使用bg命令或者fg命令时,需要在后面加上编号 [root@localhost ~]# jobs [2]+ 运行中 vmstat 1 > /tmp/1.log & [root@localhost ~]# ps aux|grep vmstat root 1591 0.0 0.1 152576 1376 pts/0 S 13:22 0:00 vmstat 1 root 1594 0.0 0.0 112720 968 pts/0 R+ 13:25 0:00 grep --color=auto vmstat [root@localhost ~]# kill -9 1591 #在kill命令后面直接加pid即可 |