查看系统存在的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 ~]#