Linux常用命令(8)--bash应用技巧
查看系统存在的shell
www.zhishiwu.com
[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中软件包的命令都很长,一个个字母敲容易出错,也很麻烦 www.zhishiwu.com
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 ~]#