5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3267|回复: 1
打印 上一主题 下一主题

shell基础-bash基本功能-别名与快捷键

[复制链接]

670

主题

785

帖子

8278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8278
跳转到指定楼层
楼主
发表于 2018-11-22 10:00:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 命令别名 alias
作用:查询或者设置命令别名。

命令格式:alias 别名=’原命令’

给原命令设定一个别名(这样设置的别名,只会临时生效,重启系统后,别名就会消失)。

为了防止覆盖原有的命令,最好不要将别名设置成和现有的命令同名称。

常见用法:

  1. alias           
  2. 查看所有的命令别名。

  3. alias vi='vim'
  4. 给vim命令设置别名vi。
  5. 这样,执行vi时,实际上执行的是vim。而且原有的vi命令被覆盖,就失效了。

  6. [root@localhost ~]# alias
  7. alias cp='cp -i'
  8. alias l.='ls -d .* --color=auto'
  9. alias ll='ls -l --color=auto'
  10. alias ls='ls --color=auto'
  11. alias mv='mv -i'
  12. alias rm='rm -i'
  13. alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
复制代码



以这条 alias rm=’rm -i’ 为例进行说明,原始的rm命令删除文件时,本身是不会进行询问的。但rm是rm -i的别名,因此,当执行rm命令时,实际上执行的是rm -i命令,故会询问是否要删除。

命令执行时的顺序(优先级):

优先级从高到低依次是:

绝对路径或相对路径执行的命令
别名
bash的内部命令(shell的内置命令)
按照$PATH环境变量定义的目录查找顺序找到的第一个命令
也就是说,绝对路径或相对路径执行的命令的优先级最高。

查看环境变量$PATH的值:

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


归根结底,Linux中的所有命令和可执行文件,要想运行,都应该用带有路径。之所以在使用命令时,可以不带路径,是因为环境变量的作用。

让别名永久生效:

让别名永久生效的方法就是将别名写入用户家目录下的.bashrc配置文件。用户家目录下的.bashrc配置文件只对该用户生效。

vi /root/.bashrc
编辑root用户家目录下的别名配置文件

删除别名:

命令格式:unalias 别名

2. bash快捷键
bash常用的快捷键,如下表:

常用快捷键
回复

使用道具 举报

670

主题

785

帖子

8278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8278
沙发
 楼主| 发表于 2018-11-23 08:52:05 | 只看该作者
快捷键        快捷键说明
CTRL-A       
将光标移到行首(在命令行下)

CTRL-B       
退格 (非破坏性的),这个只是将光标位置往回移动一个位置。

CTRL-C       
中断,终结一个前台作业。

CTRL-D       
"EOF" (文件结尾:end of file)。它用于表示标准输入(stdin)的结束。在控制台或xterm 窗口输入文本时,CTRL-D 删除在光标下的字符。

从一个shell中退出 (类似于exit)。如果没有字符存在,CTRL-D 则会登出该会话。在一个xterm窗口中,则会产生关闭此窗口的效果。

CTRL-E       
将光标移动到行尾(在命令行下)

CTRL-F       
将光标向前移动一个字符(在命令行下)

CTRL-G       
BEL。在一些老式打印机终端上,这会引发一个响铃。在xterm终端上可能是哔的一声。

CTRL-H       
擦除(Rubout)(破坏性的退格)。在光标往回移动的时候,同时擦除光标前的一个字符。

CTRL-I        水平制表符。
CTRL-J       
新行(换行[line feed]并到行首)。在脚本中,也可能表示为八进制形式('\012')或十六进制形式('\x0a')。

CTRL-K       
垂直制表符(Vertical tab)。在控制台或 xterm 窗口输入文本时,CTRL-K会删除从光标所在处到行尾的所有字符。

在脚本中,也可能表示为八进制形式('\013')或十六进制形式('\x0b')。在脚本中,CTRL-K可能会有不一样的行为,下面的例子给出其不一样的行为:

#!/bin/bash
## 一个CTRL-K垂直制表符的例子

var=$'\x0aBottom Line\x0bTop line\x0a'
## 直接输出
echo "$var"
## 使用col来过滤控制字符
echo "$var" | col

## 上面的显示将会不一样

exit 0
CTRL-L       
跳纸,换页(Formfeed),清屏。

清空终端屏幕。在终端上,这个命令的作用和clear命令一样。但当这个命令发送到打印机时,Ctrl-L会直接跳到纸张(Paper sheet)的末尾。

CTRL-M       
回车(Carriage return)。

CTRL-N       
擦除从history缓冲区召回的一行文本(在命令行下)。如果当前输入是历史记录中选择的时候,这个是从这个历史记录开始,每按一次,是更接近的一条命令。

CTRL-O       
产生一个新行(在命令行下)。

CTRL-P       
从history缓冲区召回上一次的命令(在命令行下)。此快捷键召回的顺序是由近及远的召回,即按一次,召回的是前一次的命令,再按一次,是召回上一次之前的命令,这和CTRL-N都是以当前的输入为起点,但是两个命令操作刚好相反,CTRL-N是从起点开始由远及近(如果起点是历史命令的话)。

CTRL-Q       
Resume (XON)。恢复/解冻,这个命令是恢复终端的stdin用的,可参见CTRL-S。

CTRL-R       
回溯搜索(Backwards search)history缓冲区内的文本(在命令行下)。注意:按下之后,提示符会变成(reverse-i-search)'':输入的搜索内容出现在单引号内,同时冒号后面出现最近最匹配的历史命令。

CTRL-S       
Suspend(XOFF),挂起。这个是冻结终端的stdin。要恢复可以按CTRL-Q。

CTRL-T       
交换光标位置与光标的前一个位置的字符内容(在命令行下)。比如:echo $var;,假设光标在a上,那么,按下C-T之后,v和a将会交换位置:echo $avr;。

CTRL-U       
擦除从光标位置开始到行首的所有字符内容。在某些设置下,CTRL-U会不以光标位置为参考而删除整行的输入。

CTRL-V       
在输入文本的时候,按下C-V之后,可以插入控制字符。比如:echo -e ‘\x0a';和echo <CTRL-V><CTRL-J>;这两种效果一样。这点功能在文本编辑器内非常有效。

CTRL-W       
当在控制台或一个xterm窗口敲入文本时, CTRL-W 会删除从在光标处往后(回)的第一个空白符之间的内容。在某些设置里, CTRL-W 删除光标往后(回)到第一个非文字和数字之间的字符。

CTRL-X       
在某些文字处理程序中,这个控制字符将会剪切高亮的文本并且将它复制到剪贴板中。

CTRL-Y       
将之前已经清除的文本粘贴回来(主要针对CTRL-U或CTRL-W)。

CTRL-Z       
暂停一个前台的作业;在某些文本处理程序中也作为替换操作;在MSDOS文件系统中作为EOF(End-of-file)字符。

CTRL-\       
退出。和CTRL-C差不多,也可能dump一个"core"文件到你的工作目录下(这个文件可能对你没用)。

CTRL-/       
撤消操作,Undo。

CTRL-_       
撤消操作。

CTRL-xx       
在行首和光标两个位置间进行切换,此处是两个"x"字符。

ALT-B       
光标往回跳一个词,词以非字母为界(跳动到当前光标所在词的开头)。

ALT-F       
光标往前跳一个词(移动到光标所在词的末尾)。

ALT-D       
删除光标所在位置到光标所在词的结尾位置的所有内容(如果光标是在词开头,则删除整个词)。

ALT-BASKSPACE       
删除光标所在位置到词开头的所有内容。

ALT-C       
将光标所在位置的字母转为大写(如果光标在一个词的起始位置或之前,则词首字母大写)。

ALT-U       
将光标所在位置到词尾的所有字母转为大写。

ALT-L       
将光标位置到词尾的所有字母转为小写。

ALT-R       
取消所有变更,并将当前行恢复到在历史记录中的原始状态(前提是当前命令是从历史记录中来的,如果是手动输入,则会清空行)。

ALT-T       
当光标两侧都存在词的时候,交换光标两侧词的位置。如:abc <ALT-T>bcd -> bcd abc

ALT-.       
使用前一次命令的最后一个词(命令本身也是一个词,参见后一篇的Bang命令中的词指示符概念)。

ALT-_        同ALT-.。
ALT-数值       
这个数值可以是正或者是负,这个键单独没有作用,必须后面再接其他内容,如果后面是字符,则表示重复次数。如:[ALT-10,k]则光标位置会插入10个k字符(负值在这种情况下无效);如果后面接的是命令,则数字会影响后面命令的执行结果,如:[ALT--10,CTRL-D]则向CTRL-D默认方向相反(负数)的方向执行10次操作。

ALT-<       
移动到历史记录中的第一行命令。

ALT->       
移动到历史的最后一行,即当前正在输入的行(没有输入的情况下为空)。

ALT-P       
从当前行开始向前搜索,有必要则向"上"移动,移动时,使用非增量搜索查找用户提供的字符串。

ALT-N       
从当前行开始向后搜索,如果有必要向"下"移动,移动时,使用非增量搜索查找用户提供的字符串。

ALT-CTRL-Y       
在标志点上插入前一个命令的第一个参数(一般是前一行的第二个词)。如果有参数n,则插入前一个命令的第n个词(前一行的词编号从0开始,见历史扩展)。负的参数将插入冲前一个命令的结尾开始的第n个词。参数n通过M-No.的方式传递,如:[ALT-0,ALT-CTRL-Y]插入前一个命令的第0个词(命令本身)。

ALT-Y       
轮询到删除环,并复制新的顶端文本。只能在yank[CTRL-Y]或者yank-pop[M-Y]之后使用这个命令。

ALT-?       
列出能够补全标志点前的条目。

ALT-*       
把能够补全[ALT-?]命令能生成的所有文本条目插入到标志点前。

ALT-/       
试图对标志点前的文本进行文件名补全。[CTRL-X,/]把标志点前的文本当成文件名并列出可以补全的条目。

ALT-~       
把标志点前的文本当成用户名并试图进行补全。[CTRL-X,~]列出可以作为用户名补全标志点前的条目。

ALT-$       
把标志点前的文本当成Shell变量并试图进行补全。[CTRL-X,$]列出可以作为变量补全标志点前的条目。

ALT-@       
把标志点前的文本当成主机名并试图进行补全。[CTRL-X,@]列出可以作为主机补全标志点前的条目。

ALT-!       
把标志点前的文本当成命令名并试图进行补全。进行命令名补全时会依次使用别名、保留字、Shell函数、shell内部命令,最后是可执行文件名。[CTRL-X,!]把标志点前的文本当成命令名并列出可补全的条目。

ALT-TAB       
把标志点前的文本与历史记录中的文本进行比较以寻找匹配的并试图进行补全。

ALT-{       
进行文件名补全,把可以补全的条目列表放在大括号之间,让shell可以使用。

在Bash下,如果能够妥善的使用快捷键,在Linux系统的操作会变得非常快捷,比如我们在使用cat创建一个文件时,我们可以使用快捷键[CTRL-D]:

## 不用快捷键
cat >>/tmp/test<<_EOF
##这里是内容
##最后我们要在新行里面输入_EOF
##cat见到_EOF才会将内容写到文件中

##使用快捷键
cat >>/tmp/test
##这里输入内容
##输入完毕之后,直接[CTRL-D]结束
有的时候我们需要创建一个文件,而后对这个文件进行操作:

touch /tmp/a-test-file-from-blog.useasp.net

## 不使用快捷键,文件名要重新输入
chmod u+x /tmp/a-test-file-from-blog.useasp.net

##使用快捷键
chmod u+x <ALT-.>
## 快捷键[M-.]自动会将上面的最后一个参数附加
怎么样,有没有更有效率?

当然,Bash的快捷键只有在不断的使用中,才能达到真正的高效,在开始连要用那个快捷键都要思考半天的情况下,高效是很难的——但磨刀不误砍材工,前期的投入是值得的。

如果你想自己的Bash有那么一些不同,你也可以自己自定义快捷键,使用bind命令即可,Bash中的快捷键其实是Readline来提供的,因此,这里快捷键的设置其实就是配置Readline,Readline中分两种快捷键,一种是Readline内部的函数快捷键,另外一种是执行Shell命令,设置的时候稍有不同:

##查看Readline中可以使用的函数名称
bind -l
##查看当前绑定的案件配置与其对应的功能
bind -v
##已经绑定的快捷键
bind -p

##绑定自定义执行命令shell命令的快捷键
bind -x '"\C-x\C-l":ls -al'
## 绑定后,按[C-x,C-L]就能执行ls -al

## 绑定内置函数功能
bind "\C-x":backword-delte-char
##这个是这行Readline库中的函数backword-delte-char
这种设置只是针对当前的会话有效,一旦会话丢失,这样设置的快捷键就会丢失,为了能够让设置的快捷键永久有效,我们就需要将快捷键的配置写入文件。在Linux系统中,能永久保存快捷键的地方有两个,全局和用户的配置文件,全局的是/etc/inputrc,而用户的是在用户的根目录下~/.inputrc,全局的会影响所有的用户,而用户根目录下的只会对相应的用户产生影响。inputrc文件的大概样子像下面这样:

## 本例来自CentOS6.4的默认配置文件
$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif
说明:

在配置文件中,\C代表CTRL,\M代表ALT,\e代表ESC,\\是反斜杠\,\'是单引号,\"是双引号;
\C-    control prefix
\M-    meta prefix
\e     an escape character
\\     backslash
\"     literal ", a double quote
\’     literal ’, a single quote
如果要查看某一个功能键的字符序列可以通过[CTRL-V]来实现,或者输入cat后回车,进入编辑中,直接按快捷键
配置文件中可能会使用八进制或者十六进制来表示字符。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2024-6-24 03:20 , Processed in 0.406250 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表