3.18 Linux懒人神器:命令自动补全功能!

简介: 文件名(或者目录名)是执行 linux 命令中最常见的参数,例如前面介绍的 cd、mkdir、cp 等命令,都涉及到了文件名。然而对初学者来说,输入完整的文件名感觉很麻烦,尤其面临文件名(目录名)特别长的时候。

文件名(或者目录名)是执行 linux 命令中最常见的参数,例如前面介绍的 cd、mkdir、cp 等命令,都涉及到了文件名。然而对初学者来说,输入完整的文件名感觉很麻烦,尤其面临文件名(目录名)特别长的时候。

考虑到这种情况,shell(Bash)提供了一种称为“命令行自动补全”的功能,即在输入文件名的时候,只需要输入该文件名的前几个字符,然后按 Tab 键,Shell 就可以自动将文件名补全。

举个例子,在 /etc 目录下,执行如下命令:

[root@localhost ~]# cd /etc
[root@localhost etc]# cd fs <-- 按一次 Tab 键

当按下 Tab 键时,你会发现 Shell 自动将 "fs" 补全成了 "fatab",这是因为当前 /etc 目录中只有 fstab 是以 "fs" 开头,因此 Shell 可以确定这里想要输入的文件名称为 fstab。

那么,如果当前目录中含有多个以指定字符(或字符串)开头的目录或文件,Shell 还可以成功辨认吗?答案是否定的,但它会以列表的形式给出所有以指定字符或字符串开头的文件或目录,供用户选择。

例如,还是在 /etc 目录下,执行如下命令:

[root@localhost etc]# cd b <-- 连续按两次 Tab 键
bash_completion.d/      blkid/          bonobo-activation/
bashrc                  bluetooth

可以看到,当按一次 Tab 键时,Shell 没有任何反映,原因就是当前目录下以 "b" 为开头的文件或目录有多个(2 个以上),仅凭一个字符 "b" 无法精准判断出具体指的是哪个文件。而当再一次按下 Tab 键时,Shell 会列表的形式显示给用户当前目录下所有以 "b" 开头的文件或目录。

事实上,Shell 提供的命令行补全功能不仅适用于补全文件名,也同样适用于所有 Linux 命令。举个例子,当输入 ca 并连续按下 2 次 Tab 键时,Shell 会罗列出所有以 "ca" 开头的 Linux 命令,如下所示:

[root@localhost etc]# ca <--连续按两次 Tab 键
cacertdir_rehash    cache_restore       capsh       catchsegv
cache_check         cal                 captoinfo
cache_dump          caller              case
cache_repair        canberra-gtk-play   cat

另外,Shell 还有一套被称作通配符的转用符号(如表 1 所示),这些通配符可以搜索并匹配文件名的一部分,从而大大简化了文件名的输入。

符号 作用
* 匹配任意数量的字符。
? 匹配任意一个字符。
[] 匹配括号内的任意一个字符,甚至 [] 中还可以包含用 -(短横线)连接的字符或数字,表示一定范围内的字符或数字。

为了学习这些通配符的用法,首先需要建立一个空目录(如 test),并在该目录中创建一些文件(供测试用),执行命令如下:

[root@localhost etc]# makdir test
[root@localhost etc]# cd test
[root@localhost test]# touch apple banana grape grapefruit watermelon
[root@localhost test]# ls
apple banana grape grapefruit watermelon

在此基础上,继续执行如下命令:

[root@localhost test]# ls a* <--匹配所有以 a 字符开头的文件名
apple
[root@localhost test]# ls g*t <--匹配所有以 g 字符开头,以 t 字符结尾的文件名
grapefruit
[root@localhost test]# ls *e* <--匹配所有包含 e 字符的文件名
apple grape grapefruit watermelon
[root@localhost test]# ls *n* <--匹配所有包含 n 字符的文件名
banana watermelon

结合以上实例,因为 * 可以匹配任何数量的字符,因此可以一一实现实例中标注的功能。

接下来,列举一下使用 ? 匹配文件名的示例:

[root@localhost test]# ls ????e
apple grape
[root@localhost test]# ls g???e*
grape grapefruit

因为 1 个 ? 只能匹配 1 个任意字符,因此该示例中第一个例子表示的是匹配任意包含 5 个字符但以 e 结尾的文件(apple 和 grape),第二例子表示匹配任何以 g 开头且第 5 个字符为 e 的文件(grape 和 grapefruit)。

最后,列举一些使用括号 [] 匹配文件名的示例:

[root@localhost test]# ls [abw]*
apple banana watermelon
[root@localhost test]# ls [agw]*[ne]
apple grape watermelon

此示例中,第一个例子表示匹配任何以 a、b 或 w 开头的文件;第二个例子中表示匹配任何以 a、g、w 开头,以 n 或 e 结尾的文件名。

不仅如此,[] 中还可以通过 -(短横线)表示一定范围内的任意字符(或数字),例如:

[root@localhost test]# ls [a-g]*
apple banana grape grapefruit

其中,[a-g]* 表示匹配以字母 a 到 g 之间任何一个字母开头的文件名。

目录
相关文章
|
编解码 安全
租个5000人玩的游戏服务器一年多少钱?好用的游戏服务器推荐
​游戏服务器最重要的就是安全稳定,特别是需要防攻击,所以租用带防御的高防服务器是很有必要的。那么可以供5000人玩的游戏服务器一年大概多少钱呢?
6226 0
租个5000人玩的游戏服务器一年多少钱?好用的游戏服务器推荐
Potato土豆提权工具绕过防护思路-1
Potato土豆提权工具绕过防护思路-1
834 0
|
测试技术
ONVIF协议测试工具 ONVIF Device Test Tool 29 12.12 最新版
ONVIF协议测试工具 ONVIF Device Test Tool 29 12.12 最新版 包含文档和工具,本人亲测,好用! http://download.csdn.net/detail/li_dabo/9761440
4710 0
|
测试技术 API
微信支付开发(9) 沙箱密钥
关键字:微信支付 微信支付v3 沙箱密钥 getsignkey作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv3-signkey.html    一、仿真测试系统 为降低商户测试门槛,微信支付团队开发了一套独立的仿真测试系统。
3700 0
|
API Android开发
Android利用DownloadManager实现文件下载
Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManager,这是Android提供的系统服务,通过这个服务下载文件,整个过程全部交给了系统负责,免去了我们别的操作。
898 0
|
人工智能 监控 数据可视化
bashplotlib,一个有趣的 Python 数据可视化图形库
bashplotlib,一个有趣的 Python 数据可视化图形库
370 4
|
缓存 Linux PHP
yum安装PHP
yum安装PHP
1290 3
|
人工智能 自然语言处理 搜索推荐
AI之HCI:人机交互Human-Computer Interaction的简介、发展历史、案例应用之详细攻略(一)
AI之HCI:人机交互Human-Computer Interaction的简介、发展历史、案例应用之详细攻略(二)
AI之HCI:人机交互Human-Computer Interaction的简介、发展历史、案例应用之详细攻略(一)
|
前端开发 JavaScript 容器
css实现瀑布流布局
css实现瀑布流布局