Linux的shellphp
与windows只有一种批处理脚本不一样,因为早年的Unix年代,发展者众,出现了各类不一样的distribution,所以也随着不一样的distribution出现了各自的shell版本,常听到的就有Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上经常使用的 K SHell、, 还有 TCSH 等等,每一种shell都有其各自的特色,至于Linux使用的这一种版本就称为Bourne Again SHell (简称 bash),这个shell是Bourne SHell的加强版本,也是基于GNU的架构下发展出来的。
linux
有哪些shellshell
经过查看etc/shells,能够发现至少有如下几种shell可用(笔者以centOS6.5为例)vim
[root@localhost ~]# ll *sh /bin/bash /bin/csh -> tcsh <== csh已经被 tcsh 所替代 /bin/dash /bin/sh -> bash <== sh已经被 bash 所替代 /bin/tcsh
接着咱们再看一下Linux系统默认使用哪一种shell,查看/etc/passwd 文件:windows
[root@localhost etc]# vim passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ……
咱们会发现系统默认使用使用/bin/bash 这个shell。缓存
bash shell的功能:bash
命令编修能力(history):架构
简单来讲,就是能够记忆使用过的命令,你能够简单的使用 ↑、↓ 键来查看使用过的命令,在不少distribution版本里,可记忆的命令能达到1000个!也就是说,你曾经下达过 的命令几乎全都被记录下来了。工具
这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,须要留意的是,~/.bash_history 记录的是前一次登录之前所运行过的命令, 而至于这一次登录 所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!ui
这有什么功能呢?最大的好处就是能够『查询曾经作过的举动!』 如此能够知道你的运行步骤,那么就能够追踪你曾下达过的命令,以做为除错的工具! 但如此一来也有个烦 恼,就是若是被黑客入侵了,那么他只要翻你曾经运行过的命令, 恰好你的命令又跟系统有关 (例如直接输入 MySQL 的密码在命令列上面),那你的主机可就伤脑筋了! 到底 记录命令的数目越多仍是越少越好?这部份是见仁见智啦,没有必定的答案的。
命令与文件补全(【tab】键的好处):
经常在 bash 环境中使用 [tab] 是个很棒的习惯!由于至少可让你
1)少打不少字;
2)肯定输入的数据是正确的!
使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不一样:
因此说,若是我想要知道个人环境中,全部能够运行的命令有几个? 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就可以显示全部的可运行命令了。 那若是想要知道 系统当中全部以 c 为开头的命令呢?就按下『 c[tab][tab] 』就好啦!
命令别名配置功能(alias):
假如我须要知道这个目录底下的全部文件 (包含隐藏档) 及全部的文件属性,那么我就必需要下达『 ls -al 』这样的命令串,唉!真麻烦,有没有更快的取代方式?呵呵!就使 用命令别名呀!例如鸟哥最喜欢直接以 lm 这个自定义的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何做呢?就使用 alias 便可!你 能够在命令列输入 alias 就能够知道目前的命令别名有哪些了!也能够直接下达命令来配置别名呦:
alias lm='ls -al'
工做控制、前景背景控制(job control, foreground, background):
使用前、背景的控制可让工做进行的更顺利,至于工做控制的用途则更广,可让咱们随时随地让工做在后台运行而不中断,能够在单一的环境中达到多任务的的目的。
程序化脚本(shell script):
(略)
通配符(Wildcard):
除了完整的字符串以外, bash 还支持许多的通配符来帮助用户查询与命令下达。 举例来讲,想要知道 /usr/bin 底下有多少以 X 为开头的文件吗?使用:『 ls -l
/usr/bin/X* 』就可以知道啰~此外,还有其余可供利用的通配符, 这些都可以加快使用者的操做呢!
Bash shell 的内建命令:type
bash 有没有什么说明文件啊?开玩笑~ 这么棒的东西怎么可能没有说明文件!请你在 shell 的环境下,直接输入 man bash 瞧一瞧, 嘿嘿!不是盖的吧!让你看个几天几夜也没法看完的 bash 说明文件,但是很详尽的数据啊! ^_^
不过,在这个 bash 的 man page 当中,不知道你是否有察觉到,咦! 怎么这个说明文件里面有其余的文件说明啊?举例来讲,那个 cd 命令的说明就在这个 man page 内? 而后我直接输入 man cd 时,怎么出现的画面中,最上方居然出现一堆命令的介绍?这是怎么回事? 为了方便 shell 的操做,其实 bash 已经『内建』了不少命令了,例如上面提到的 cd , 还有例如 umask 等等的命令,都是内建在 bash 当中的呢!
那我怎么知道这个命令是来自于外部命令(指的是其余非 bash 所提供的命令) 或是内建在 bash 当中的呢? 嘿嘿!利用 type 这个命令来观察便可!举例来讲:
[root@www ~]# type [-tpa] name 选项与参数: :不加任何选项与参数时,type 会显示出 name 是外部命令仍是 bash 内建命令 -t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义: file :表示为外部命令; alias :表示该命令为命令别名所配置的名称; builtin :表示该命令为 bash 内建的命令功能; -p :若是后面接的 name 为外部命令时,才会显示完整文件名; -a :会由 PATH 变量定义的路径中,将全部含 name 的命令都列出来,包含 alias 范例一:查询一下 ls 这个命令是否为 bash 内建? [root@www ~]# type ls ls is aliased to `ls --color=tty' <==未加任何参数,列出 ls 的最主要使用状况 [root@www ~]# type -t ls alias <==仅列出 ls 运行时的依据 [root@www ~]# type -a ls ls is aliased to `ls --color=tty' <==最早使用 aliase ls is /bin/ls <==还有找到外部命令在 /bin/ls 范例二:那么 cd 呢? [root@www ~]# type cd cd is a shell builtin <==看到了吗? cd 是 shell 内建命令
透过 type 这个命令咱们能够知道每一个命令是否为 bash 的内建命令。 此外,因为利用 type 搜寻后面的名称时,若是后面接的名称并不能以运行档的状态被找到, 那么该名称是不会被显示出来的。也就是说, type 主要在找出『运行档』而不是通常文件档名喔! 呵呵!因此,这个 type 也能够用来做为相似 which 命令的用途啦!找命令用的!
命令的下达
命令的下达经过回车进行就再也不赘述,这里仅就反斜杠 (\) 来讲明一下命令下达的方式!
范例:若是命令串太长的话,如何使用两行来输出? [vbird@www ~]# cp /var/spool/mail/root /etc/crontab \ > /etc/fstab /root
上面这个命令用途是将三个文件复制到 /root 这个目录下而已。不过,由于命令太长, 因而就利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,让 [Enter] 按键再也不具备『开始运行』的功能!好让命令能够继续在下一行输入。 须要特别留意, [Enter] 按键是紧接着反斜杠 (\) 的,二者中间没有其余字符。 由于 \ 仅跳脱『紧接着的下一个字符』而已!因此,万一我写成: 『 \ [Enter] 』,亦即 [Enter] 与反斜杠中间有一个空格时,则 \ 跳脱的是『空格键』而不是 [Enter] 按键!这个地方请再仔细的看一遍!很重要!
若是顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你能够继续输入命令啰!也就是说,那个 > 是系统自动出现的,你不须要输入。
总之,当咱们顺利的在终端机上面登录后, Linux 就会依据 /etc/passwd 文件的配置给咱们一个 shell (默认是 bash),而后咱们就能够依据上面的命令下达方式来操做 shell, 以后,咱们就能够透过 man 这个在线查询来查询命令的使用方式与参数说明, 很不错吧!那么咱们就赶忙更进一步来操做 bash 这个好玩的东西啰!