bash功能——命令行编辑、内部命令 外部命令、命令补全 、命令历史、文件名通配符、命令别名
命令行编辑:
Ctrl + a : 跳转到当前编辑行首
Ctrl + e:跳转到当前编辑行尾
# mkdir /home/dira /home/diab
像这种命令,/home/dira 和 /home/diab 属于单词,如果想删掉单词,可以用backspace慢慢删除,也可以快捷键 Ctrl + w
比如光标此时在如下位置,想删除光标后所有内容,Ctrl + k 。反之删除光标以前所有内容 Ctrl + u
当xshell界面显示内容较多时,使用 clear 或者 Ctrl + l 可以清屏。(WIndows下可以cls)
内部命令 外部命令
内部命令 shell程序自带的命令
外部命令 在系统的某个路径下的可执行程序
外部命令查找 依赖于 PATH变量
查看外部命令搜索路径 查看PATH变量
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
typepwd查看pwd是内部命令还是外部命令
# type pwd
pwd is a shell builtin
which命令查看命令所在的目录
# which ping
/bin/ping
# which ifconfig
/sbin/ifconfig
命令补全
命令补全 连按tab键 列出所有可能的命令。
注意:这里说命令补全并不是什么情况下都可行。比如我以root身份新建一个脚本demo1.sh,默认情况下权限是644,即rw-r--r--。(这个是怎么算的参考:Linux命令——umask、setuid、setgid、sticky bit、chmod、chown )这样的权限是不可执行的。虽然文件后缀是sh,shell脚本道理上可以执行。但是Linux下面又不是根据后缀名区分文件是否可执行,Windows才那么干。这时候你再输入命令./dem,然后tab是没办法补全的,因为他跟就不是一个可执行文件。但是如果把demo1.sh作为ls命令参数,则是可以对demo1.sh进行补全的。接下来执行命令chmod +x demo1.sh,赋予demo1.sh执行权限,现在。/dem就可以补全了。
hash表缓存命令所在位置
# hash
hits command
/bin/rm
/usr/bin/yum
/bin/cp
/usr/bin/man
/bin/ls
hash –d ls 删除ls命令的缓存
hash –r 清空缓存表
# hash
hits command
/bin/rm
/usr/bin/yum
/bin/cp
/usr/bin/man
/bin/ls
# hash -d ls
# hash
hits command
/bin/rm
/usr/bin/yum
/bin/cp
/usr/bin/man
# hash -r
有了hash缓存,就不用每次输入命令都搜寻$PATH变量了,只在第一次使用命令时搜寻$PATH。但是这里可能会有个问题,在上面rm在/bin/rm下面,如果我把rm移动到/usr/bin下面,再次使用rm时,就会提示“没有哪个文件 或 目录”。解决办法就是使用hash -d rm删除rm这条缓存,在执行一遍rm命令,这样hash回生成一个新位置的缓存。
help hash可以查看hash使用方法
命令历史
命令历史文件 和 命令历史缓存
用户在登陆OS的时候加载命令历史文件,此时执行history看的是命令历史文件内容。如果用户后续又执行了相关操作,再次使用history会看到之前的操作,但新纪录是保存在命令历史缓存里面的。只有当用户退出bash的时候才保存到命令历史文件。同一用户不同终端登陆时,对命令历史文件的操作是追加写的。
缓存多少条命令
# echo $HISTSIZE
命令历史文件能够保存多少条命令
# echo $HISTFILESIZE
查看命令历史文件
# echo $HISTFILE
/root/.bash_history
查看保存命令历史
# cat /root/.bash_history
ip addr show
ping www.baidu.com
ping 192.168.80.2
shutdown -h now
将缓存的新命令(连接Linux以后,相较命令历史文件新增加的命令) 追加到历史文件 history -a 如果是-w就是覆盖写。
# history -a
# cat /root/.bash_history
ip addr show
ping www.baidu.com
ping 192.168.80.2
shutdown -h now
hash
history
man history
help history
history
cd /
history
echo $HISTSIZE
echo $HISTFILESIZE
echo $HISTFILE
cat /root/.bash_history
history –a
history
history –a
help history
history -a
查看$HISTCONTROL变量的值
# echo $HISTCONTROL
ignoredups
$HISTCONTROL取值
ignoredups 不记录后面重复的命令 只记录第一个
ignorespace 不记录以空格开始的命令
ignoreboth 不记录以空格开始命令 也不记录后面重复的命令
执行以前的命令
!!执行上一条命令
history查看命令历史
!6 可以执行命令历史中第6行命令
!-1 可以执行命令历史中的倒数第一个命令
上下键可以翻命令历史
当前命令 调用上一条命令的最后一个参数
第一种方法
ESC松开 再按 .
第二种方法 输入!$
History命令参数
-c 清空命令历史
-w 保存命令历史到历史文件
-a 附加命令历史 到历史文件
-d 4 删除命令历史的第4条命
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
文件名通配符
通配符 特殊的字符 不表示字符的表面意义 而是能够匹配符合指定特征的字符
* 代表任意长度的字符
? 代表任意单个字符
[] 代表指定范围的单个字符
使用专门的方法标识特定字符
[[:space:]] 空格
[[:digit:]] [0-9]
[[:lower:]] [a-z]
[[:upper:]] [A-Z]
[[:alpha:]] [a-Z]
命令别名
语法:
alias cmdalias=’command [option] [argument]’
查看当前用户可用的别名
[root@51cto ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
查看alias是内部命令还是外部命令
[root@51cto ~]# type alias
alias is a shell builtin
试着定义以一个别名alias if1='ifconfig eth0'
[root@51cto ~]# alias if1='ifconfig eth0'
[root@51cto ~]# alias
alias cp='cp -i'
alias if1='ifconfig eth0'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@51cto ~]# if1
eth0 Link encap:Ethernet HWaddr :0C:::AA:8B
inet addr:192.168.80.222 Bcast:192.168.80.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe82:aa8b/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (33.4 KiB) TX bytes: (37.2 KiB)
可否定义的别名与原来命令一样呢?? 可以,但是若想使用定期前的命令就要再命令前加 \
切换目录也可以定义成别名,Redhat网卡配置文件路径在/etc/sysconfig/network-scripts/,可以定义成别名cdnet
[root@51cto /]# alias cdnet='cd /etc/sysconfig/network-scripts/'
[root@51cto /]# cdnet
[root@51cto network-scripts]# ls
ifcfg-eth0 ifdown-ippp ifdown-routes ifup-bnep ifup-plip ifup-sit network-functions
ifcfg-lo ifdown-ipv6 ifdown-sit ifup-eth ifup-plusb ifup-tunnel network-functions-ipv6
ifdown ifdown-isdn ifdown-tunnel ifup-ippp ifup-post ifup-wireless
ifdown-bnep ifdown-post ifup ifup-ipv6 ifup-ppp init.ipv6-global
ifdown-eth ifdown-ppp ifup-aliases ifup-isdn ifup-routes net.hotplug
像这种修改别名的方式,别名只在一个shell周期内有效,关闭shell在登陆就没了。
要想永久生效可以更改当前用户家目录下面的.bashrc文件
[root@51cto network-scripts]# cd /
[root@51cto /]# cd ~
[root@51cto ~]# l.
. .. .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@51cto ~]# pwd
/root
增加一条cdnet
[root@51cto ~]# cat .bashrc
# .bashrc # User specific aliases and functions alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias cdnet='cd /etc/sysconfig/network-scripts/'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
.bashrc只对当前用户生效,若要对所有用户生效,可以修改/etc/bashrc,在这里面添加别名对所有用户都生效。
删除别名unalias
[root@51cto network-scripts]# alias
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@51cto network-scripts]# unalias cdnet
[root@51cto network-scripts]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@51cto network-scripts]# cd /
[root@51cto /]# cdnet
-bash: cdnet: command not found
由于我这个别名cdnet是写道配置文件.bashrc的,现在删除别名只是暂时删除,断开shell在登陆cdnet还可以使用。
bash功能——命令行编辑、内部命令 外部命令、命令补全 、命令历史、文件名通配符、命令别名的更多相关文章
- bash特性-命令历史命令行编辑
bash: GUI:Gnome,KDE,XFCE CLI:sh,csh,bash,ksh,tcsh,zsh shell,子shell tree:查看目录树 pstree:查看进程目录树 bash: 1 ...
- Linux命令行编辑常见的快捷键(有用, 通用)
本文讲述了Linux命令行编辑常见的快捷键,希望对您有所帮助. Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 ...
- Bash命令行编辑
1.Readline库和命令行编辑 bash shell提供了两个内置编辑器:emacs和vi,利用它们可以以交互模式对命令行列表进行编辑,这项特性是通过Readline库的软件包实现的.当使用命令行 ...
- Linux命令行编辑快捷键
Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 ...
- LINUX 命令行编辑快捷键
转自:http://www.cnblogs.com/edwardlost/archive/2012/07/27/2611536.html 删除 ctrl + d 删除光标所在位置上的字符相当于VIM里 ...
- LINUX 命令行编辑
向 <-前 后 -> 删除 ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl ctrl + h 删除光标 ...
- mysql 无法退出sql命令行编辑
mysql 无法退出sql命令行编辑 | ANBOBhttp://www.anbob.com/archives/579.html mysql 无法退出sql命令行编辑 - 码农甲乙丙 - CSDN博客 ...
- [转] Linux命令行编辑常用键
ctrl + a 将光标移动到命令行开头相当于VIM里shift+^ ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$ ctrl + 方向键左键 光标移动到前一个单词开头 ctr ...
- Node.js在任意目录下使用express命令‘不是内部或外部命令’解决方法
1.一开始我只能在nodejs全局目录下使用express命令建一个新的项目,建在其他任意一个目录命令行都会提示"不是内部或外部命令",导致目录会乱,目录如下. 2.尝试了一会,发 ...
随机推荐
- Python 练习题总结(待续)
1.编写一个函数,接受一个参数n,n为正整数,左右两种打印方 式.要求数字必须对齐 正三角 倒三角 实现思路: 思路1.一行一行打印,前面追加空格,每一个空格的宽度等于数字字符串的宽度 #正三角打印d ...
- vmware安装密钥
VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMware Workstation 14永久激活密钥: CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ...
- Tools - Tcpdump
Tcpdump homepage - tcpdump wiki - tcpdump 常用格式 tcpdump -i eth<网卡号> port <端口号> -s0 -w < ...
- python面向对象学习笔记(一)
粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...
- (1) laravel php artisan list make
php artisan list make Laravel Framework 5.4.36 Usage: command [options] [arguments] Options: -h, --h ...
- 优化apk的odex处理
前文讲到了apk的反编译流程,但在有的情况下会出现apk的资源文件和代码文件分开的情况,这种情况会出现如下目录结构,并且在apk文件里面并没有dex文件. 所需工具 smali.jar和baksmal ...
- 关于verilog实例化的介绍
概念 当我们完成一个比较完整的系统的时候,通常需要编写一个Testbench来验证自己的设计的功能能否满足设计要求.在这个系统中通常会有一个top模块来连接那些小的模块,verilog通过实例化的方式 ...
- [转帖]linux下的find文件查找命令与grep文件内容查找命令
linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...
- SecureCRT 配色方案
整体效果: 一:Options -- Global Options 1.Normal colors 2.Bold colors 二 :Options -- Session Options 1. ...
- pandas数据结构之基础运算笔记
import pandas as pd import numpy as np s = pd.Series([1,3,5,6,8],index=list('acefh')) s.index # 读取行索 ...