访问手机版  

Linux常用命令|Linux培训学习|考试认证|工资待遇与招聘,认准超级网工!

招聘|合作 登陆|注册

网络工程师培训

当前位置:网络工程师 > 技术课程 > linux > 热点关注 > linux常用命令

linux系统下的实现我们自己的命令行补全

时间:2019-08-11

linux重启命令_linux 关机命令_linux命令

当进入某个目录下面的时候,如果忘记名字或者怎么进入的,可以连按两下tab键,这个时候linux会为我们列出来到底有哪些目录,哪些文件。

而这不是linux系统天生就有的,而是需要complete这个自动补全工具。我们用的linux大多数都已经安装。

因为目前我维护10几台服务器,经常会进行登陆。虽然我之前使用了别名的方式,但依然不够灵活,时间长了还是会忘记服务器的名字linux命令,通常还需要看一下记录别名的文件。这是很麻烦的一件事情。

于是我google了一下,发现网上关于complete的资料挺多的。我完成了关于我服务器的命令提示linux命令,同时也完成了ssh,scp的命令行提示。这里做一个记录,供大家参考。

直接上结果:

complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
complete -W "$(echo $(grep '^scp ' .bash_history | sort -u | sed 's/^scp //'))" scp

linux重启命令_linux命令_linux 关机命令

后台登陆新增上一次登陆时间与登陆ip记录,方便用户查看是否有异常登陆。1、记录服务器共享文件夹或共享文件的访问情况,包括读取、拷贝、修改、删除、重命名、打印等情况,可以记录访问者采用的登录账户、ip地址、mac地址、时间、访问时长、具体操作情况等。三、功能介绍1、记录服务器共享文件夹或共享文件的访问情况,包括读取、拷贝、修改、删除、重命名、打印等情况,可以记录访问者采用的登录账户、ip地址、mac地址、时间、访问时长、具体操作情况等。

先看 "$(echo $(grep "^ssh " .bash_history | sort -u | sed 's/^ssh //'))"

这个里面就是执行了获取历史命令里面以ssh开头的,排序并去重,然后去掉开头的ssh.

-W 的意思是 wordlist分割 wordlist 中的单词,作为候选的补全结果

而最后的ssh,就是执行ssh后,触发前面的匹配规则。

当然,scp也是如此。那如果一堆需要管理的服务器呢?

linux命令_linux 关机命令_linux重启命令

我们可以手写的方式,一个一个的写进去,这个完全没毛病。但是,如果增加了一个服务器,或者你需要直接连接某个数据库或者mongodb/redis呢?可能每次都得添加,还比较麻烦。

这里使用case,esac就是特别好的解决办法。

举个例子

我在我的家目录下创建了一个文件,名字是goto.

里面是一个case语句。

#!/bin/bash
case $1 in
    a)
    ssh a@example.text.com ;;
    b)
    ssh b@example.text.com ;;
    c)
    ssh b@example.text.com ;;
esac

linux命令_linux 关机命令_linux重启命令

写完之后,chmod +x goto. 让文件可以执行。然后进入到/etc/bash_completion.d/下,创建一个goto.bash文件,然后写入

_goto() {
    local cur="${COMP_WORDS[COMP_CWORD]}"
    local pro=$(echo $(grep ")" /home/guo/goto | cut -f 1 -d ")" ))
    COMPREPLY=( $(compgen -W "$pro" -- $cur ) )
}
complete -F  _goto goto

其实这个可以像上面的ssh,scp一样写到shell里面,但是这里正常情况下一个这些这里。因为/etc/bash_completion.d是专门管理提示脚本的。

 上一个教程:linux 自定义命令