北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

Linux常用命令(8)--bash应用技巧

Posted on 2012-11-23 22:03  CN.programmer.Luxh  阅读(638)  评论(0编辑  收藏  举报

查看系统存在的shell

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhost ~]# 

 

  bash中常用的快捷键:

    ctrl+l 清屏、crtl+u 删除命令行光标前面的所有内容

1、命令补齐

  命令补齐允许用户输入文件起始的若干个字母后,按<Tab>键补齐文件名

  这在软件包安装的时候非常有用,因为linux中软件包的命令都很长,一个个字母敲容易出错,也很麻烦

2、命令历史

  命令历史允许用户浏览先前输入的命令并重新调用它们,用history命令可以显示使用过的命令列表,按方向键可以查找以前执行过的命令

[root@localhost abc]# history
 1005  ping -s 1024 192.168.1.1
 1006  ping -c 4 -s 1024 192.168.1.1
 1007  ping -s 60000000 192.168.1.1
 1008  clear
 1009  ifconfig
 1010  clear
 1011  history
 1012  clear
 1013  cat /etc/shells
 1014  cd bac
 1015  cd /abc
 1016  ls
 1017  history
[root@localhost abc]# 

  使用!+命令前的序号,就可以调用相应的命令

[root@localhost abc]# !1016
ls
adir      afile      afile.zip   issue.soft  test         test.zip
adir.tar  afile.bz2  issue.hard  prem        test.tar.gz
[root@localhost abc]# 

 

3、命令别名

  范例: alias copy=cp   使用的时候就可以用copy替代cp

      alias drm="rm -rf"  命令的组合,需要用双引号括起来

  查看别名信息:alias

  删除别名:unalias copy

查看系统别名

[root@localhost ~]# 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@localhost ~]# 

定义别名drm="rm -rf"
[root@localhost ~]# alias drm="rm -rf"

使用别名删除test目录
[root@localhost ~]# drm test

删除别名drm
[root@localhost ~]# unalias drm

 

4、输入/输出重定向

  Shell对于每一个进程预先定义3个文件描述字(0、1、2),分别低对应于:

    0  (STDIN)标准输入

    1  (STDOUT)标准输出

    2  (STDERR)标准错误输出

  1)> 或 >> 输出重定向

    范例:ls -l /tmp > /tmp.msg

       date >> /tmp.msg

输出重定向,ls -l /tmp命令的结果信息不显示到屏幕上,而是输出到tmp.msg文件中
[root@localhost ~]# ls -l /tmp > /tmp.msg

我们查看一下tmp.msg文件中的内容
[root@localhost ~]# cat /tmp.msg
total 100
drwx------. 2 luxh luxh  4096 Nov 14 04:42 keyring-h3yH6m
drwx------. 2 luxh luxh  4096 Nov 22 05:09 keyring-YG0Kwl
drwx------. 2 gdm  gdm   4096 Nov 22 05:08 orbit-gdm
drwx------. 2 luxh luxh  4096 Nov 22 05:09 orbit-luxh
drwx------. 2 gdm  gdm   4096 Nov 22 05:09 pulse-84tzFLbuLWkG
drwx------. 2 luxh luxh  4096 Nov 22 05:09 pulse-Ijt6UMdvv23E
drwx------. 2 root root  4096 May 16  2012 pulse-ztOQIKtvdyh9
drwx------. 2 luxh luxh  4096 Nov 22 05:09 virtual-luxh.2MU7ZX
drwx------. 2 luxh luxh  4096 Nov 13 06:16 virtual-luxh.DEg7dT
drwx------. 2 luxh luxh  4096 Nov 20 04:29 virtual-luxh.eKfxnY
drwx------. 2 luxh luxh  4096 Nov 16 18:16 virtual-luxh.q0XCV9
drwx------. 2 luxh luxh  4096 Nov 15 04:15 virtual-luxh.Uib40l
drwx------. 2 luxh luxh  4096 Nov 21 05:07 virtual-luxh.yq7GZg
drwx------. 2 luxh luxh  4096 Nov 14 04:45 virtual-luxh.zu4sqy
drwxrwxrwt. 2 root root  4096 Nov 15 04:14 VMwareDnD
drwx------. 2 luxh luxh  4096 Nov 22 05:09 vmware-luxh
drwx------. 2 root root 36864 Nov 22 05:07 vmware-root
[root@localhost ~]# 

 

把date命令的结果信息追加到tmp.msg
[root@localhost ~]# date >> /tmp.msg
[root@localhost ~]# cat /tmp.msg
total 100
drwx------. 2 luxh luxh  4096 Nov 14 04:42 keyring-h3yH6m
drwx------. 2 luxh luxh  4096 Nov 22 05:09 keyring-YG0Kwl
drwx------. 2 gdm  gdm   4096 Nov 22 05:08 orbit-gdm
drwx------. 2 luxh luxh  4096 Nov 22 05:09 orbit-luxh
drwx------. 2 gdm  gdm   4096 Nov 22 05:09 pulse-84tzFLbuLWkG
drwx------. 2 luxh luxh  4096 Nov 22 05:09 pulse-Ijt6UMdvv23E
drwx------. 2 root root  4096 May 16  2012 pulse-ztOQIKtvdyh9
drwx------. 2 luxh luxh  4096 Nov 22 05:09 virtual-luxh.2MU7ZX
drwx------. 2 luxh luxh  4096 Nov 13 06:16 virtual-luxh.DEg7dT
drwx------. 2 luxh luxh  4096 Nov 20 04:29 virtual-luxh.eKfxnY
drwx------. 2 luxh luxh  4096 Nov 16 18:16 virtual-luxh.q0XCV9
drwx------. 2 luxh luxh  4096 Nov 15 04:15 virtual-luxh.Uib40l
drwx------. 2 luxh luxh  4096 Nov 21 05:07 virtual-luxh.yq7GZg
drwx------. 2 luxh luxh  4096 Nov 14 04:45 virtual-luxh.zu4sqy
drwxrwxrwt. 2 root root  4096 Nov 15 04:14 VMwareDnD
drwx------. 2 luxh luxh  4096 Nov 22 05:09 vmware-luxh
drwx------. 2 root root 36864 Nov 22 05:07 vmware-root
Thu Nov 22 06:59:05 PST 2012
[root@localhost ~]#

  2)< 输入重定向

    范例:wall < user.info

[root@localhost ~]# cat user.info
amani1::1001:503::/home/amani1:/bin/bash 
amani2::1002:503::/home/amani2:/bin/bash

把user.info文件中的内容作为输入进行广播
[root@localhost ~]# wall < user.info
[root@localhost ~]# 
Broadcast message from root@localhost.localdomain (Thu Nov 22 07:07:56 2012):

amani1::1001:503::/home/amani1:/bin/bash 
amani2::1002:503::/home/amani2:/bin/bash

  3)2> 错误输出重定向

    范例:cp -R /usr /backup/usr.bak 2> /bak.error  备份/usr目录,如果出错,将错误信息输出到bak.error

查看一个不存在的目录,会在屏幕上提示错误信息
[root@localhost ~]# ls /aaaa
ls: cannot access /aaaa: No such file or directory

将错误信息重定向到ls.err文件
[root@localhost ~]# ls /aaaa 2> ls.err
[root@localhost ~]# cat ls.err
ls: cannot access /aaaa: No such file or directory
[root@localhost ~]#

 

5、管道

  将一个命令的输出传送给另一个命令,作为另一个命令的输入。

  使用方法:

    命令1|命令2|命令3|......|命令n

  如:

    ls -l /etc | more

    ls -l /etc | grep init

    ls -l /etc | grep init | wc -l

将ls -l /etc 命令输出的内容传给more命令分页浏览

[root@localhost ~]# ls -l /etc | more
total 1720
drwxr-xr-x.   3 root root   4096 May  6  2012 abrt
drwxr-xr-x.   4 root root   4096 May  6  2012 acpi
-rw-r--r--.   1 root root     45 Nov 22 08:19 adjtime
-rw-r--r--.   1 root root   1512 Jan 12  2010 aliases
-rw-r--r--.   1 root root  12288 May  6  2012 aliases.db
drwxr-xr-x.   2 root root   4096 May  6  2012 alsa
drwxr-xr-x.   2 root root   4096 May  6  2012 alternatives
-rw-r--r--.   1 root root    541 Jul 18  2011 anacrontab
-rw-r--r--.   1 root root    148 May 14  2009 asound.conf
-rw-r--r--.   1 root root      1 Jun 24  2011 at.deny
drwxr-x---.   3 root root   4096 May  6  2012 audisp
drwxr-x---.   2 root root   4096 May  6  2012 audit
drwxr-xr-x.   4 root root   4096 May  6  2012 avahi
drwxr-xr-x.   2 root root   4096 May  6  2012 bash_completion.d
-rw-r--r--.   1 root root   2681 Sep 23  2011 bashrc
drwxr-xr-x.   2 root root   4096 Dec  7  2011 blkid
drwxr-xr-x.   2 root root   4096 May  6  2012 bluetooth
drwxr-xr-x.   2 root root   4096 May  6  2012 bonobo-activation
-rw-r--r--.   1 root root     27 Dec  8  2011 centos-release
drwxr-xr-x.   2 root root   4096 Nov 10  2010 chkconfig.d
drwxr-xr-x.   5 root root   4096 May  6  2012 ConsoleKit
drwxr-xr-x.   2 root root   4096 May  6  2012 cron.d
--More--


将ls -l /etc 命令输出的内容传给grep命令查找出含有init的行
[root@localhost ~]#  ls -l /etc | grep init
drwxr-xr-x.   2 root root   4096 May  6  2012 init
lrwxrwxrwx.   1 root root     11 May  6  2012 init.d -> rc.d/init.d
-rw-r--r--.   1 root root    884 May  5  2012 inittab
lrwxrwxrwx.   1 root root     15 May  6  2012 rc.sysinit -> rc.d/rc.sysinit
[root@localhost ~]# 


将ls -l /etc 命令输出的内容传给grep命令查找出含有init的行,
再把grep命令输出的内容传送给wc -l命令进行统计有多少行

[root@localhost ~]# ls -l /etc | grep init | wc -l
4
[root@localhost ~]# 

 

6、命令连接符

  1);  用;间隔的各命令按顺序依次执行

例如,显示当前所在目录,然后显示当前目录有什么文件,最后显示系统时间
[root@localhost ~]# pwd;ls;date
/root
2012             Documents           Music                Templates
a b              Downloads           Pictures             test
abc              install.log         Public               user.info
anaconda-ks.cfg  install.log.syslog  sudo-1.8.4p4         Videos
Desktop          ls.err              sudo-1.8.4p4.tar.gz
Fri Nov 23 05:34:04 PST 2012
[root@localhost ~]#

 

  2)&&  前后命令的执行存在逻辑与关系,只有&&前面的命令执行成功后,它后面的命令才被执行

例如,给Lily发送一封情书,情书发送成功就删掉
[root@localhost ~]# write Lily < /root/love.txt && rm /root/love.txt

先执行ls命令,执行成功后再执行pwd
[root@localhost ~]# ls && pwd
2012             Documents           Music                Templates
a b              Downloads           Pictures             test
abc              install.log         Public               user.info
anaconda-ks.cfg  install.log.syslog  sudo-1.8.4p4         Videos
Desktop          ls.err              sudo-1.8.4p4.tar.gz
/root
[root@localhost ~]# 


先执行la命令,由于没有la命令,就会执行出错,后面的pwd命令就不会执行
[root@localhost ~]# la && pwd
bash: la: command not found
[root@localhost ~]# 

 

  3)||  前后命令的执行存在逻辑或关系,只有||前面的命令执行失败后,它后面的命令才被执行

先执行ls命令,执行成功,后面的pwd命令就不会执行了
[root@localhost ~]# ls || pwd
2012             Documents           Music                Templates
a b              Downloads           Pictures             test
abc              install.log         Public               user.info
anaconda-ks.cfg  install.log.syslog  sudo-1.8.4p4         Videos
Desktop          ls.err              sudo-1.8.4p4.tar.gz

先执行la命令,由于没有la命令,就会执行出错,后面的pwd命令就会执行
[root@localhost ~]# la || pwd
bash: la: command not found
/root
[root@localhost ~]#

 

7、命令替换符

  将一个命令的输出作为另一个命令的参数

  格式:命令1 `命令2`   `是键盘上数字1左边的那个撇号

  如:ls -l `which touch`

which touch命令的输出就作为 ls -l 的参数
[root@localhost ~]# ls -l `which touch` -rwxr-xr-x. 1 root root 50644 Dec 7 2011 /bin/touch [root@localhost ~]#