命令行编辑:

  Ctrl + a : 跳转到当前编辑行首

  Ctrl + e:跳转到当前编辑行尾

  1. # 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变量

  1. # echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

typepwd查看pwd是内部命令还是外部命令

  1. # type pwd
  2. pwd is a shell builtin

which命令查看命令所在的目录

  1. # which ping
  2. /bin/ping
  3. # which ifconfig
  4. /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表缓存命令所在位置

  1. # hash
  2. hits command
  3. /bin/rm
  4. /usr/bin/yum
  5. /bin/cp
  6. /usr/bin/man
  7. /bin/ls

hash –d ls 删除ls命令的缓存

hash –r 清空缓存表

  1. # hash
  2. hits command
  3. /bin/rm
  4. /usr/bin/yum
  5. /bin/cp
  6. /usr/bin/man
  7. /bin/ls
  8. # hash -d ls
  9. # hash
  10. hits command
  11. /bin/rm
  12. /usr/bin/yum
  13. /bin/cp
  14. /usr/bin/man
  15. # 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的时候才保存到命令历史文件。同一用户不同终端登陆时,对命令历史文件的操作是追加写的。

缓存多少条命令

  1. # echo $HISTSIZE

命令历史文件能够保存多少条命令

  1. # echo $HISTFILESIZE

查看命令历史文件

  1. # echo $HISTFILE
  2. /root/.bash_history

查看保存命令历史

  1. # cat /root/.bash_history
  2. ip addr show
  3. ping www.baidu.com
  4. ping 192.168.80.2
  5. shutdown -h now

将缓存的新命令(连接Linux以后,相较命令历史文件新增加的命令) 追加到历史文件 history -a  如果是-w就是覆盖写。

  1. # history -a
  2. # cat /root/.bash_history
  3. ip addr show
  4. ping www.baidu.com
  5. ping 192.168.80.2
  6. shutdown -h now
  7. hash
  8. history
  9. man history
  10. help history
  11. history
  12. cd /
  13. history
  14. echo $HISTSIZE
  15. echo $HISTFILESIZE
  16. echo $HISTFILE
  17. cat /root/.bash_history
  18. history a
  19. history
  20. history a
  21. help history
  22. history -a

查看$HISTCONTROL变量的值

  1. # echo $HISTCONTROL
  2. 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]’

查看当前用户可用的别名

  1. [root@51cto ~]# alias
  2. alias cp='cp -i'
  3. alias l.='ls -d .* --color=auto'
  4. alias ll='ls -l --color=auto'
  5. alias ls='ls --color=auto'
  6. alias mv='mv -i'
  7. alias rm='rm -i'

查看alias是内部命令还是外部命令

  1. [root@51cto ~]# type alias
  2. alias is a shell builtin

试着定义以一个别名alias if1='ifconfig eth0'

  1. [root@51cto ~]# alias if1='ifconfig eth0'
  2. [root@51cto ~]# alias
  3. alias cp='cp -i'
  4. alias if1='ifconfig eth0'
  5. alias l.='ls -d .* --color=auto'
  6. alias ll='ls -l --color=auto'
  7. alias ls='ls --color=auto'
  8. alias mv='mv -i'
  9. alias rm='rm -i'
  10. alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
  11. [root@51cto ~]# if1
  12. eth0 Link encap:Ethernet HWaddr :0C:::AA:8B
  13. inet addr:192.168.80.222 Bcast:192.168.80.255 Mask:255.255.255.0
  14. inet6 addr: fe80::20c:29ff:fe82:aa8b/ Scope:Link
  15. UP BROADCAST RUNNING MULTICAST MTU: Metric:
  16. RX packets: errors: dropped: overruns: frame:
  17. TX packets: errors: dropped: overruns: carrier:
  18. collisions: txqueuelen:
  19. RX bytes: (33.4 KiB) TX bytes: (37.2 KiB)

可否定义的别名与原来命令一样呢??  可以,但是若想使用定期前的命令就要再命令前加 \

切换目录也可以定义成别名,Redhat网卡配置文件路径在/etc/sysconfig/network-scripts/,可以定义成别名cdnet

  1. [root@51cto /]# alias cdnet='cd /etc/sysconfig/network-scripts/'
  2. [root@51cto /]# cdnet
  3. [root@51cto network-scripts]# ls
  4. ifcfg-eth0 ifdown-ippp ifdown-routes ifup-bnep ifup-plip ifup-sit network-functions
  5. ifcfg-lo ifdown-ipv6 ifdown-sit ifup-eth ifup-plusb ifup-tunnel network-functions-ipv6
  6. ifdown ifdown-isdn ifdown-tunnel ifup-ippp ifup-post ifup-wireless
  7. ifdown-bnep ifdown-post ifup ifup-ipv6 ifup-ppp init.ipv6-global
  8. ifdown-eth ifdown-ppp ifup-aliases ifup-isdn ifup-routes net.hotplug

像这种修改别名的方式,别名只在一个shell周期内有效,关闭shell在登陆就没了。

要想永久生效可以更改当前用户家目录下面的.bashrc文件

  1. [root@51cto network-scripts]# cd /
  2. [root@51cto /]# cd ~
  3. [root@51cto ~]# l.
  4. . .. .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
  5. [root@51cto ~]# pwd
  6. /root

增加一条cdnet

  1. [root@51cto ~]# cat .bashrc
  2. # .bashrc
  3.  
  4. # User specific aliases and functions
  5.  
  6. alias rm='rm -i'
  7. alias cp='cp -i'
  8. alias mv='mv -i'
  9. alias cdnet='cd /etc/sysconfig/network-scripts/'
  10. # Source global definitions
  11. if [ -f /etc/bashrc ]; then
  12. . /etc/bashrc
  13. fi

.bashrc只对当前用户生效,若要对所有用户生效,可以修改/etc/bashrc,在这里面添加别名对所有用户都生效。

删除别名unalias

  1. [root@51cto network-scripts]# alias
  2. alias cdnet='cd /etc/sysconfig/network-scripts/'
  3. alias cp='cp -i'
  4. alias l.='ls -d .* --color=auto'
  5. alias ll='ls -l --color=auto'
  6. alias ls='ls --color=auto'
  7. alias mv='mv -i'
  8. alias rm='rm -i'
  9. alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
  10. [root@51cto network-scripts]# unalias cdnet
  11. [root@51cto network-scripts]# alias
  12. alias cp='cp -i'
  13. alias l.='ls -d .* --color=auto'
  14. alias ll='ls -l --color=auto'
  15. alias ls='ls --color=auto'
  16. alias mv='mv -i'
  17. alias rm='rm -i'
  18. alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
  19. [root@51cto network-scripts]# cd /
  20. [root@51cto /]# cdnet
  21. -bash: cdnet: command not found

由于我这个别名cdnet是写道配置文件.bashrc的,现在删除别名只是暂时删除,断开shell在登陆cdnet还可以使用。

bash功能——命令行编辑、内部命令 外部命令、命令补全 、命令历史、文件名通配符、命令别名的更多相关文章

  1. bash特性-命令历史命令行编辑

    bash: GUI:Gnome,KDE,XFCE CLI:sh,csh,bash,ksh,tcsh,zsh shell,子shell tree:查看目录树 pstree:查看进程目录树 bash: 1 ...

  2. Linux命令行编辑常见的快捷键(有用, 通用)

    本文讲述了Linux命令行编辑常见的快捷键,希望对您有所帮助. Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 ...

  3. Bash命令行编辑

    1.Readline库和命令行编辑 bash shell提供了两个内置编辑器:emacs和vi,利用它们可以以交互模式对命令行列表进行编辑,这项特性是通过Readline库的软件包实现的.当使用命令行 ...

  4. Linux命令行编辑快捷键

    Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 ...

  5. LINUX 命令行编辑快捷键

    转自:http://www.cnblogs.com/edwardlost/archive/2012/07/27/2611536.html 删除 ctrl + d 删除光标所在位置上的字符相当于VIM里 ...

  6. LINUX 命令行编辑

    向          <-前               后 -> 删除 ctrl + d      删除光标所在位置上的字符相当于VIM里x或者dl ctrl + h      删除光标 ...

  7. mysql 无法退出sql命令行编辑

    mysql 无法退出sql命令行编辑 | ANBOBhttp://www.anbob.com/archives/579.html mysql 无法退出sql命令行编辑 - 码农甲乙丙 - CSDN博客 ...

  8. [转] Linux命令行编辑常用键

    ctrl + a 将光标移动到命令行开头相当于VIM里shift+^ ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$ ctrl + 方向键左键 光标移动到前一个单词开头 ctr ...

  9. Node.js在任意目录下使用express命令‘不是内部或外部命令’解决方法

    1.一开始我只能在nodejs全局目录下使用express命令建一个新的项目,建在其他任意一个目录命令行都会提示"不是内部或外部命令",导致目录会乱,目录如下. 2.尝试了一会,发 ...

随机推荐

  1. Windows server 2008 R2 桌面服务器管理器打开提示:试图引用不存在的令牌

    来源:https://social.technet.microsoft.com/Forums/zh-CN/90f376a3-2b52-46c1-be34-4a2dbf4fdea2/winserver2 ...

  2. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  3. Ubuntu LVS DR模式生产环境部署

    1.环境说明 系统版本:ubuntu14.04 LVS服务器:14.17.64.3 真实服务器:14.17.64.4-12 VIP:14.17.64.13 部署目的:用户请求14.17.64.13的报 ...

  4. Qt598x64vs2017.Kit(构建套件)(安装Qt598x86vs2015)

    1.Qt598-->工具-->选项 1.1. 1.2. 2.20191120 想起 上面第一张图的配置编译器的地方,就想着 Qt598x64vs2017 配置成编译x86,于是将 上面图中 ...

  5. 高级UI-RecyclerView间隔线添加

    上文讲到了RecyclerView的简单使用,知道RecycleView是怎么使用的了,那么这一节将基于上一届的内容继续改进,在ListView中很轻松就能实现的间隔线,在RecycleView中也需 ...

  6. Spring 控制器层如何启用验证?

    1.示例代码 @PostMapping("/adduser") public String addUser(@Valid User user,BindingResult bindi ...

  7. python 计算文件夹里所有内容的大小总和

    计算文件夹里所有内容的大小总和 递归方法 '''计算文件夹的大小''' import os def dir_file_size(path): if os.path.isdir(path): file_ ...

  8. springboot集成webSocket能启动,但是打包不了war

    1.pom.xml少packing元素 https://www.cnblogs.com/zeussbook/p/10790339.html 2.SpringBoot项目中增加了WebSocket功能无 ...

  9. 计算属性和mathod的对比

    methods:定义函数      调用的是  函数名()      用一次则需要调用一次,效率低 computed:定义函数   调用的是   函数名      只调用一次,因此效率高

  10. Win7 JavaEE 安装

    新建四个目录 D:\ApacheServer\eclipse 存放eclipse D:\ApacheServer\jdk jdk安装目录 D:\ApacheServer\apache-tomcat 存 ...