[华为云在线课程][Linux基础入门和帮助][第四章命令行及括号扩展、Tab键补全、命令行历史及调用][学习笔记]

举报
John2021 发表于 2022/03/18 20:03:39 2022/03/18
【摘要】 命令行扩展和被括起来的集合 命令行拓展:’'和$()把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令$(COMMAND) 或 `COMMAND`例子:比较"",’’,``三者区别[root@localhost ~]# echo "echo $HOSTNAME"echo localhost.localdomain[root@localhost ~]# echo 'e...

命令行扩展和被括起来的集合

命令行拓展:’'和$()

把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令

$(COMMAND)`COMMAND`

例子:比较"",’’,``三者区别

[root@localhost ~]# echo "echo $HOSTNAME"
echo localhost.localdomain
[root@localhost ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@localhost ~]# echo `echo $HOSTNAME`
localhost.localdomain

结论:
单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串
双引号:弱引用,不能识别命令,可以识别变量
反向单引号:里面的内容必须是能够执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续
例子:

[root@localhost ~]# echo "This system's name is $(hostname)"
This system's name is localhost.localdomain
[root@localhost ~]# echo "I am `whoami`"
I am root
[root@localhost data]# touch `date +%F`.txt
[root@localhost data]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 17 22:23 2022-03-17.txt
[root@localhost data]# touch `hostname`-`date +%F`.txt
[root@localhost data]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 17 22:23 2022-03-17.txt
-rw-r--r--. 1 root root 0 Mar 17 22:23 localhost.localdomain-2022-03-17.txt

例子:$()和``

[root@localhost data]# ll `echo `date +%F`.txt`
bash: .txt: command not found...
ls: cannot access date: No such file or directory
ls: cannot access +%F: No such file or directory
[root@localhost data]# ll $(echo $(date +%F).txt)
-rw-r--r--. 1 root root 0 Mar 17 22:23 2022-03-17.txt
[root@localhost data]# ll `echo $(date +%F).txt`
-rw-r--r--. 1 root root 0 Mar 17 22:23 2022-03-17.txt
[root@localhost data]# ll $(echo `date +%F`.txt)
-rw-r--r--. 1 root root 0 Mar 17 22:23 2022-03-17.txt

括号拓展:{}

{}可以实现打印重复字符串的简化形式

{元素1,元素2,元素3}
{元素1..元素2}

例子:

[root@localhost data]# echo file{1,3,4}
file1 file3 file4
[root@localhost data]# rm -f file{1,3,4}
[root@localhost data]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@localhost data]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost data]# echo {1..10..2}
1 3 5 7 9
[root@localhost data]# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020

例子:关闭和启用{}的拓展功能

[root@localhost ~]# echo $-
himBH
[root@localhost ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# set +B
[root@localhost ~]# echo $-
himH
[root@localhost ~]# echo {1..10}
{1..10}
[root@localhost ~]# set -B
[root@localhost ~]# echo $-
himBH
[root@localhost ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10

tab键补全

tab键可以实现命令及路径等补全,提高输入效率,避免出错

命令补全

  • 内部命令:
  • 外部命令:bash根据PATH环境变量定义的路径,从左到右在每个路径搜寻以给命令名命名的文件,第一次找到的命令即为要执行的命令
  • 命令的子命令补全,需要安装bash-completion
    注意:用户给定的字符串只有一条唯一对应的命令,直接补全,否则,再次Tab给出列表

路径补全

把用户给出的字符串当作路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
如果唯一:则直接补全
否则:再次tab给出列表

双击Tab键

  • command 2Tab 所有子命令或文件补全
  • string2Tab 以string开头命令
  • /2Tab 显示所有根目录下一级目录,包括隐藏目录
  • ./2Tab 当前目录下子目录,包括隐藏目录
  • *2Tab 当前目录下子目录,不包括隐藏目录
  • ~2Tab 所有用户目录
  • $2Tab 所有变量
  • @2Tab /etc/hosts记录(centos7不支持)
  • =2Tab 相当于ls -A(centos7不支持)

命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会在用户正常退出时"追加"至历史文件中
利用命令历史,可以用它来重复执行命令,提高输入效率
命令:history

history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]

常用选项:

-c:清空命令历史
-d offset:删除历史中指定的第offset个命令
n:显示最近的n条历史
-a:追加本次会话新执行的命令历史列表至历史文件
-r:读历史文件附加到历史列表
-w:保存历史列表到指定的历史文件
-n:读历史文件中未读过的行到历史列表中
-p:展开历史参数成多行,但不存在历史列表中
-s:展开历史参数成一行,附加到历史列表后

命令历史相关环境变量

HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami`" 显示时间和用户
HISTIGNORE="str1:str2*:..." 忽略str1命令,str2开头的历史
HISTCONTROL:控制命令历史的记录方式
ignoredups:是默认值,可忽略重复的命令,连续且相同为"重复"
ignorespace:忽略所有以空白开头的命令
ignoreboth:相当于ignoredups,ignorespace的组合
erasedups:删除重复命令

持久保存变量
以上变量可以export变量名="值"形式存放在/etc/profile或~/.bash_profile
例子:

[root@localhost ~]# cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

调用命令行历史

#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以"string"开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$(上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换成string2
!:gs/string1/string2 将上一条命令中所有的string1都替换成string2
使用up(向上)和down(向下)键来上下浏览从前输入的命令
ctrl+r 在命令历史中搜索命令
(reverse-i-search)`':
ctrl+g 从历史搜索模式退出
#要重新调用前一个命令中最后一个参数
!$ 表示前一个命令中最后一个参数
Esc, . 点击Esc键后松开,然后点击.键
Alt+ . 按住Alt键的同时点击 . 键
command !^ 利用上一个命令的第一个参数做command的参数
command !$ 利用上一个命令的最后一个参数做command的参数
command !* 利用上一个命令的全部参数做command的参数
command !:n 利用上一个命令的第n个参数做command的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以string开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以string开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以string开头的命令,并获取它的第n个参数
command !string:* 从命令历史中搜索以string开头的命令,并获取它的所有参数

bash的快捷键

ctrl+l 清屏,相当于clear命令
ctrl+o 执行当前命令,并重新显示本命令
ctrl+s 阻止屏幕输出,锁定
ctrl+q 允许屏幕输出,解锁
ctrl+c 终止命令
ctrl+z 挂起命令
ctrl+a 光标移到命令行首,相当于Home
ctrl+e 光标移到命令行尾,相当于End
ctrl+f 光标向右移动一个字符
ctrl+b 光标向左移动一个字符
ctrl+xx 光标在命令行首和光标之间移动
alt+f 光标向右移动一个单词位
alt+b 光标向左移动一个单词首
ctrl+u 从光标处删除至命令行首
ctrl+k 从光标处删除至命令行尾
alt+r 删除当前整行
ctrl+w 从光标处向左删除至单词首
alt+d 从光标处向右删除至单词尾
alt+backspace 删除左边单词
ctrl+d 删除光标处的一个字符
ctrl+h 删除光标前的一个字符
ctrl+y 将删除的字符粘贴至光标后
alt+c 从光标处开始向右更改为首字母大写的单词
alt+u 从光标处开始,将右边一个单词更改为大写
alt+l 从光标处开始,将右边一个单词更改为小写
ctrl+t 交换光标处和之前的字符位置
alt+t 交换光标处和之前的单词位置
alt+# 提示输入指定字符后,重复显示该字符#次
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。