最近在使用阿里云 ECS 时,发现 Centos 无法进行 tab 补全,特别影响操作效率,本文简单记录下 Linux 下的 tab 命令补全功能,希望对 Linux 初学者有所帮助。

安装

Linux 最小化安装时,是没有 tab 命令补全的,需要自己手动安装。

# 安装
$ yum -y install bash-completion # 重新登录生效

命令补全

默认情况下,在 Linux 中提供下列补全功能:

  • 变量补全
  • 用户名补全
  • 可执行命令补全
  • 文件名和目录补全
  • 主机名补全

变量补全

# echo 在 $ 符号后按两次 tab 将显示所有可用的变量
$ echo $[tab] [tab]

用户名补全

# su 在 “- ” 符号后,按两次 tab 将显示所有用户名
$ su - [tab] [tab] # 同上,按两次 tab 将显示所有用户名
$ cd ~[tab] [tab]

注意:用户名是从 /etc/passwd 文件中获取的。

可执行命令补全

在执行命令时,如果找到单个匹配项的可执行文件,则一个 tab 就会将可执行命令自动补全。

$ ls -lt
总用量 5736
-rwxr-xr-x 1 nginx nginx 5872560 3月 24 15:33 nginx # ./n 之后按一次 tab 将补全可执行命令:./nginx
$ ./n[tab]

当找到多个匹配项时,则两个 tab 将会显示可用命令。

$ ./yum[tab] [tab]
yum yum-builddep yum-config-manager yum-debug-dump yum-debug-restore yumdownloader yum-groups-manager

文件名和目录补全

与可执行命令补全类似,找到单个匹配项时,一个 tab 自动补全,两个 tab 列出所有匹配项。

$ ls -lt
总用量 80
-rw-r--r-- 1 nginx nginx 6542 3月 26 21:06 nginx.conf
drwxr-xr-x 2 root root 4096 3月 26 20:59 site-enable
drwxr-xr-x 2 nginx nginx 4096 3月 24 15:33 ssl
-rw-r--r-- 1 nginx nginx 2656 3月 24 15:33 nginx.conf.default
-rw-r--r-- 1 nginx nginx 636 3月 24 15:33 scgi_params.default
-rw-r--r-- 1 nginx nginx 636 3月 24 15:33 scgi_params
-rw-r--r-- 1 nginx nginx 664 3月 24 15:33 uwsgi_params.default
-rw-r--r-- 1 nginx nginx 664 3月 24 15:33 uwsgi_params
-rw-r--r-- 1 nginx nginx 1077 3月 24 15:33 fastcgi.conf.default
-rw-r--r-- 1 nginx nginx 1077 3月 24 15:33 fastcgi.conf
-rw-r--r-- 1 nginx nginx 1007 3月 24 15:33 fastcgi_params.default
-rw-r--r-- 1 nginx nginx 1007 3月 24 15:33 fastcgi_params
-rw-r--r-- 1 nginx nginx 5231 3月 24 15:33 mime.types.default
-rw-r--r-- 1 nginx nginx 5231 3月 24 15:33 mime.types
-rw-r--r-- 1 nginx nginx 3610 3月 24 15:33 win-utf
-rw-r--r-- 1 nginx nginx 2837 3月 24 15:33 koi-utf
-rw-r--r-- 1 nginx nginx 2223 3月 24 15:33 koi-win # 在cat n 之后按一次 tab 键,会自动补全 cat nginx.conf
$ cat n[tab] # “cd ” 之后按一次 tab 键,会
$ cd [tab]
$ cd s[tab]
site-enable/ ssl/ # 当有很多文件要显示时,会显示以下警告消息
$ ls -l /etc/[tab] [tab]
Display all 194 possibilities? (y or n)

主机名补全

# ssh 在 @ 符号后,按两次 tab 键,获取要连接的主机名
$ ssh root@ [tab] [tab] # 同上,按两次 tab 键,获取要连接的主机名
$ scp nginx.conf nginx@ [tab] [tab]

注意:主机名是从 /etc/hosts 文件中获取的。

查看已有的命令行补全

# 查看已有的命令行补全
$ complete | more
complete -F _minimal
complete -F _filedir_xspec oodraw
complete -F _filedir_xspec elinks
complete -F _filedir_xspec freeamp
complete -F _longopt split
complete -F _longopt sed
complete -F _longopt ld
complete -F _longopt grep
complete -j -P '"%' -S '"' jobs
complete -d pushd
complete -F _minimal sh
complete -F _filedir_xspec playmidi
complete -F _longopt mv
complete -F _known_hosts rlogin
complete -F _service service
complete -b help
complete -A stopped -P '"%' -S '"' bg
complete -F _filedir_xspec cdiff
complete -F _filedir_xspec bibtex
complete -F _filedir_xspec rgview
complete -F _filedir_xspec realplay
complete -F _filedir_xspec xine
complete -F _filedir_xspec xpdf
complete -F _longopt strip
complete -F _longopt pr
complete -F _longopt grub
complete -F _longopt gperf
complete -F _known_hosts ftp
complete -o filenames -F _yu_debug_dump yum-debug-dump.py
complete -o filenames -F _yu_builddep yum-builddep
complete -o filenames -F _yu_repoclosure repoclosure
complete -o filenames -F _yu_repo_rss repo-rss
complete -F _filedir_xspec oowriter
complete -F _filedir_xspec chromium-browser
complete -F _filedir_xspec gqmpeg
complete -F _filedir_xspec tex
complete -F _filedir_xspec zathura
complete -F _filedir_xspec lzegrep
complete -F _longopt m4
complete -F _command time
--More-- # complete 命令详情
$ man complete

另外,complete 可以让自己写的程序也支持自动补全功能,目前我没有此需求,需要时再研究。

Linux 提高操作效率之 tab 命令补全的更多相关文章

  1. CentOS 安装tab命令补全

    CentOS 安装tab命令补全 1. 安装epel 源 yum -y install epel-release 2. 加快yum速度 yum -y install yum-plugin-fastes ...

  2. Python tab 命令补全,以及 vim 补全

    在python 命令行中,使用补全 python 查看 packages 的目录 可用 sys.path 查看. /usr/lib/python2.7/site-packages vim tab.py ...

  3. CentOS7系统tab命令补全

    在新安装的CentOS7系统中,如果没有安装命令补全的话,在systemctl管理服务的时候就没法用tab来自动补全,因此在安装完系统后,我们要再安装命令补全这个软件: yum -y install ...

  4. ubuntu tab命令补全失效

    主要是由于环境变量设置出了问题,修改/etc/environment即可. sudo nano /etc/environment 修改后source /etc/environment

  5. shell介绍、命令历史、命令补全和别名、通配符、输入输出重定向

    第5周第5次课(4月20日) 课程内容: 8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 8.1 shell介绍 使用yum+管道方式查看zsh和ks ...

  6. Linux命令之tab 键补全

    tab 键补全 tab 键可以实现命令及路径等补全,提高输入效率,避免出错 命令补全 用户给定的字符串只有一条惟一对应的命令,直接补全, 两次Tab会给出列表 内部命令: 外部命令:bash根据PAT ...

  7. Linux使用退格键时出现^H + Tab键命令补全失效/方向键失效 + ls文件夹和文件没有颜色

    删除问题 安装kalilinux使用普通用户的的时候按退格键无法实现删除功能 解决的办法有两个 一改变快捷键: 使用Ctrl+Backspace组合键可以实现删除功能 ctrl + backspace ...

  8. linux命令补全 忘记命令只记得开头

    linux的shell不仅提供上下箭头来翻阅历史使用过的命令,还提供命令补全功能. 例如,你想创建一个文件夹,只记得是m开头的命令,此时可以: ①输入m ②按键盘上的Tab键两次 (有可能还出现这句话 ...

  9. Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向

    一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计 ...

随机推荐

  1. [深入学习C#] 匿名函数、委托和Lambda表达式

    匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...

  2. Leetcode_474. 一和零(二维01背包)

    每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包. code class Solution { public: int w[605][2]; int dp[105][105]; int ...

  3. cookie sessionStorage localStorage 使用小结

    1.cookie 随http 一起发送 2.webStorage 客户端本地存储功能 可以在客户端 本地建立 一个数据库 不参与与服务器的通讯 setItem (key, value)   —— 保存 ...

  4. Building Applications with Force.com and VisualForce (DEV401) (四):Building Your user Interface

    Dev 401-004:Application essential:Building Your user Interface: Module Agenda1.Custom Applications2. ...

  5. 玩转控件:对Dev中GridControl控件的封装和扩展

    又是一年清明节至,细雨绵绵犹如泪光,树叶随风摆动.... 转眼间,一年又过去了三分之一,疫情的严峻让不少企业就跟清明时节的树叶一样,摇摇欲坠.裁员的裁员,降薪的降薪,996的996~~说起来都是泪,以 ...

  6. 一个完整的机器学习项目在Python中演练(四)

    大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往d是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块" ...

  7. TensorFlow系列专题(五):BP算法原理

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 一.反向传播算法简介 二.前馈计算的过程 第一层隐藏层的计算 第 ...

  8. 局部变量表中Slot复用对垃圾回收的影响详解

    看两段代码 1. package com.jvm; public class Test { public static void main(String[] args) { { byte[] plac ...

  9. ArrayList中的Iterator详解

    每个实现Iterable接口的类必须提供一个iterator方法,返回一个Iterator对象,ArrayList也不例外 public Iterator<E> iterator() { ...

  10. extend()和append()的区别

    append()方法用于在列表末尾添加新的对象(对象可以是值或列表),一般用于添加列表项. extend()方法用于在列表末尾追加另一个序列中的多个值.