命令行编辑:

光标跳转:
 Ctrl+a:跳到命令行首
 Ctrl+e:跳到命令行尾
 Ctrl+u: 删除光标至命令行首的内容
 Ctrl+k: 删除光标至命令行尾的内容
 Ctrl+l: 清屏
 Ctrl+d: 删除光标后面内容

命令历史:

查看命令历史:history
 -c:清空命令历史
 -d OFFSET [n]: 删除指定位置的命令
 -w:保存命令历史至历史文件中
 
环境变量
PATH:命令搜索路径
HISTSIZE: 命令历史缓冲区大小

命令历史的使用技巧:

!n:执行命令历史中的第n条命令;

[rhel@localhost ~]$ !1

whatis man
man                  (1)  - format and display the on-line manual pages
man                  (1p)  - display system documentation
man                  (7)  - macros to format man pages
man.config [man]     (5)  - configuration data for man
man [manpath]        (1)  - format and display the on-line manual pages
man-pages            (7)  - conventions for writing Linux man pages
[rhel@localhost ~]$ history
    1  whatis man

!-n:执行命令历史中的倒数第n条命令;

   85  whatis man

   86  history
[rhel@localhost ~]$ !-2
whatis man
man                  (1)  - format and display the on-line manual pages
man                  (1p)  - display system documentation
man                  (7)  - macros to format man pages
man.config [man]     (5)  - configuration data for man
man [manpath]        (1)  - format and display the on-line manual pages
man-pages            (7)  - conventions for writing Linux man pages

!!: 执行上一条命令;

[rhel@localhost ~]$ !!

whatis man
man                  (1)  - format and display the on-line manual pages
man                  (1p)  - display system documentation
man                  (7)  - macros to format man pages
man.config [man]     (5)  - configuration data for man
man [manpath]        (1)  - format and display the on-line manual pages
man-pages            (7)  - conventions for writing Linux man pages

!string:执行命令历史中最近一个以指定字符串开头的命令

[rhel@localhost ~]$ !man

man history
[rhel@localhost ~]$
[rhel@localhost ~]$

!$:引用前一个命令的最后一个参数;

[rhel@localhost ~]$ ls /tmp/

abc        inittabl.2      keyring-C6bpQR  orbit-gdm           pulse-Y030iPht7UnR  test
hi         keyring-11UHBi  keyring-HXk4gf  orbit-rhel          rc                  virtual-rhel.T2NxT0
inittab    keyring-4aFGvD  keyring-tTiDCT  passwd              rc.2
inittab.1  keyring-6hak4Z  keyring-V1nCMd  pulse-kYyFfO5RNhPL  rc.3
[rhel@localhost ~]$ ll !$
ll /tmp/
total 84
drwxr-xr-x. 2 root root 4096 Nov 19 20:26 abc
drwxr-xr-x. 2 root root 4096 Nov 19 20:28 hi
-rw-r--r--. 1 root root  884 Nov 20 02:59 inittab
drwxr-xr-x. 2 root root 4096 Nov 19 21:01 inittab.1
drwxr-xr-x. 2 root root 4096 Nov 19 21:01 inittabl.2
drwx------. 2 rhel rhel 4096 Nov 19 17:54 keyring-11UHBi
drwx------. 2 rhel rhel 4096 Jun 23  2015 keyring-4aFGvD

Esc, .  与 !$相同

Alt+. (远程终端不支持)

命令补全:

 PATH:
路径补全:


pstree:显示进程树

NAME

       pstree - display a tree of processes

[rhel@localhost ~]$ pstree

init─┬─NetworkManager─┬─dhclient
     │                └─{NetworkManager}
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─bonobo-activati───{bonobo-activat}
     ├─clock-applet
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─2*[dbus-daemon───{dbus-daemon}]
     ├─2*[dbus-launch]
     ├─devkit-power-da
     ├─gconfd-2
 


history:命令历史使用

[rhel@localhost ~]$ history

    1  whatis man
    2  whatis /etc/passwd
    3  man whatis
    4  whatis cd
    5  whatis ls
    6  whatis type
    7  whatis du
    8  whatis echo
    9  whatis mv
   10  whatis man
   11  man cut
   12  cut -d : /etc/passwd
   13  cut -d : -f1 /etc/passwd

-c:清空历史

-n:删除指定位置命令

-w:保存命令至历史文件


命令别名

alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;

[rhel@localhost ~]$ alias

alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[rhel@localhost ~]$

[rhel@localhost ~]$ type alias

alias is a shell builtin
[rhel@localhost ~]$ help alias
alias: alias [-p] [name[=value] ... ]
    Define or display aliases.
   
    Without arguments, `alias' prints the list of aliases in the reusable
    form `alias NAME=VALUE' on standard output.
   
    Otherwise, an alias is defined for each NAME whose VALUE is given.
    A trailing space in VALUE causes the next word to be checked for
    alias substitution when the alias is expanded.
   
    Options:
      -p Print all defined aliases in a reusable format
   
    Exit Status:
    alias returns true unless a NAME is supplied for which no alias has been
    defined.
[rhel@localhost ~]$

取消命令别名

ualias CMDALIAS

使用原有命令

\CMD

[rhel@localhost ~]$ \ls /tmp/

abc    inittabl.2    keyring-C6bpQR  orbit-gdm        pulse-Y030iPht7UnR  test
hi    keyring-11UHBi  keyring-HXk4gf  orbit-rhel        rc     virtual-rhel.T2NxT0
inittab    keyring-4aFGvD  keyring-tTiDCT  passwd        rc.2
inittab.1  keyring-6hak4Z  keyring-V1nCMd  pulse-kYyFfO5RNhPL  rc.3
[rhel@localhost ~]$


命令替换: $(COMMAND), 反引号:`COMMAND`

把命令中某个子命令替换为其执行结果的过程
file-2013-02-28-14-53-31.txt

bash支持的引号:
``: 命令替换

[rhel@localhost ~]$ echo "dir is `pwd`"

dir is /home/rhel
[rhel@localhost ~]$ cd /tmp/
[rhel@localhost tmp]$ echo "dir is `pwd`"
dir is /tmp
[rhel@localhost tmp]$

"": 弱引用,可以实现变量替换

[rhel@localhost tmp]$ echo "the path is $PATH"

the path is /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/rhel/bin
[rhel@localhost tmp]$

'': 强引用,不完成变量替换

[rhel@localhost tmp]$ echo 'the path is $PATH'

the path is $PATH
[rhel@localhost tmp]$

文件名通配, globbing
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
 [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
 [:space:]:空白字符
 [:punct:]:标点符号
 [:lower:]:小写字母
 [:upper:]: 大写字母
 [:alpha:]: 大小写字母
 [:digit:]: 数字
 [:alnum:]: 数字和大小写字母
 
# man 7 glob
[^]: 匹配指定范围之外的任意单个字符

[[:alpha:]]*[[:space:]]*[^[:alpha:]]

练习:

1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;
2、显示所有以a或m开头的文件;
ls [am]*
3、显示所有文件名中包含了数字的文件;
ls *[0-9]*
ls *[[:digit:]]*
4、显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9]   ?????????
5、显示文件名中包含了非字母或数字的特殊符号的文件;
ls *[^[:alnum:]]*