标签:计算机硬件 windows 操作系统 linux 朋友
shell为何物?
相信只要摸过计算机,对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词,因为只要有操作系统,那么就离不开 Shell 这个东西。Linux 的管理常常需要透过远程联机,而联机时文字接口的传输速度一定比较快, 而且,较不容易出现断线或者是信息外流的问题。管理整个计算机硬件的其实是操作系统的核心 (kernel),这个核心是需要被保护的。 所以我们一般使用者就只能透过 shell 来跟核心沟通,以让核心达到我们所想要达到的工作。
说通俗些:shell就是负责与系统核心kernel进行通信的一个接口工具,通过与核心通信达到用户所想要达到的结果。
Linux下的shell
在早年的 Unix 年代,发展者众多,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的。
cat /etc/shells --查看系统中存在的shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/zsh
/bin/bash 是 Linux 默认的 shell ,那为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件呢? 这是因为系统某些服务在运行过程中,去检查使用者能够会使用的 shells ,而这些 shell 的查询就是基于 /etc/shells 这个文件。bash 是 GNU 计划中重要的工具软件之一,目前也是 Linux 发行版的标准 shell 。 bash 主要兼容于 sh ,并且依据一些使用者需求,而加强的 shell 版本。bash 主要的优点有如下几个方面:
命令历史记录history
我们可以通过在命令列按『上下键』来找到前或后一个输入的命令,默认的命令记忆功能可以到达 1000 个。也就是说, 你曾经输入过的命令几乎都被记录下来了。这么多的命令记录均保存在你的家目录内的 .bash_history文件里。 需要留意的是 ~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中。
Tab键命令补全
如果我想要知道我的环境中可以运行的命令有几个,可直接在 bash 的提示字符后面连续按两次 [Tab] 按键就能够显示所有的可运行命令了。那如果想要知道系统当中所有以 c 为开头的命令咋弄呢?就按下『 c[Tab][Tab] 』就好。
给命令起别名
假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性,那么我就必须要下达『 ls -al 』这样的命令,是否觉得麻烦,有没有更快的取代方式?这时就需要使用命令别名了。如alias la=‘ls –al’,则运行la相当于执行了ls –al这个命令。
工作管理job control,fg,bg
使用前后、后台的控制可以让工作进行的更为顺利。至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中运行,而不用担心用了 [Ctrl] + c 来停掉该程序。此外,也可以在单一登录的环境中,达到多任务的目的。
程序化脚本shell scripts
在 Linux 底下的 shell scripts 可以将你平时管理系统常需要下达的连续命令写成一个文件, 该文件并且可以透过对谈交互式的方式来进行主机的侦测工作,也可以基于shell 提供的环境变量及相关命令来进行设计。以前在 DOS 底下需要程序语言才能写的东西,在 Linux 底下使用简单的 shell scripts 就可以帮你达成。
通配符
除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与执行命令。 举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件使用『 ls -l /usr/bin/X* 』就知道了。
shell 变量功能
变量是 bash 环境中非常重要的一个功能,我们知道 Linux 是多用户多任务的环境,每个用户登陆系统都能取得一个 bash , 每个人都能够使用 bash 下达某个命令来达到既定的目的,可问题是, bash 是如何得知同一个命令执行的不同结果呢?这就需要『变量』了。
你可以利用 echo 这个命令来取用变量, 但是,变量在被取用时,前面必须要加上『 $ 』才行,举例来说,要知道 PATH 的内容,需 echo $PATH 或 echo ${PATH}。
创建一个自定义的变量 echo $mypath,此时如果执行,结果是空的,执行 mypath=/usr/bin/mypath,再 echo $mypath,会出现 =/usr/bin/mypath。通过等号=对变量进行了赋值。下面就来列举下常用的配置的规则:
使用 env 查看系统的环境变量及其说明:env 是 environment (环境) 的简写,可以列出系统中存在的所有环境变量,export 也可以实现这个功能。如下就介绍下几个常用的环境变量:
使用 set 查看所有变量 (含环境变量与自定义变量)
bash 可不只有环境变量喔,还有一些与 bash 操作接口有关的变量,以及用户自己定义的变量存在的。set命令除了可现实环境变量外,还会将其他在 bash 内的变量全部显示出来。如下就介绍下几个:
[root@dyqd2011 ~]# set
BASH=/bin/bash <== bash 的主程序放置路径
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat- linux-gnu") <== bash 的版本
BASH_VERSION=‘4.1.2(1)-release‘ <== 也是 bash 的版本
COLORS=/etc/DIR_COLORS <== 使用的颜色记录文件
COLUMNS=80 <== 在目前的终端机环境下,使用的字段有几个字符长度
HISTFILE=/root/.bash_history <== 历史命令记录的放置文件
HISTFILESIZE=1000 <== 历史命令记录的最大数
HISTSIZE=1000 <== 目前环境下,可记录的历史命令最大笔数
HOME=/root <== 家目录
HOSTNAME=dyqd2011 <== 主机名
HOSTTYPE=x86_64 <== 主机安装的软件主要类型
IFS=$‘ \t\n‘ <== 默认的分隔符
LINES=24 <== 目前的终端机下的最大行数
MACHTYPE=x86_64-redhat-linux-gnu <== 安装的机器类型
MAILCHECK=60 <== 与邮件有关。每 60 秒去检索一次信箱有无新信息
OLDPWD=/home <== 上个工作目录。我们可以用 cd - 来取用这个变量
OSTYPE=linux-gnu <== 操作系统的类型
PPID=1981 <== 父程序的 PID
PS1=‘[\u@\h \W]\$ ‘ <== 命令提示字符,也就是我们常见的 [root@www ~]# 或 [dmtsai ~]$ 的配置值
$ <== 目前这个 shell 所使用的 PID
? <== 刚刚运行完命令的回传值
注:在 Linux 默认的情况中,使用{大写的字母}来配置的变量一般为系统内定需要的变量。
与PS1提示字符有关的符号含义:
\d :可显示出『星期 月 日』的日期格式,如:"Mon Feb 2" ;
\H :完整的主机名;
\h :仅取主机名在第一个小数点之前的名字;
\t :显示时间,为 24 小时格式的『HH:MM:SS』;
\T :显示时间,为 12 小时格式的『HH:MM:SS』;
\A :显示时间,为 24 小时格式的『HH:MM』;
\@ :显示时间,为 12 小时格式的『am/pm』样式;
\u :目前使用者的账号名称,如『root』;
\v :BASH 的版本信息,如鸟哥的测试主板本为 3.2.25(1),仅取『3.2』显示;
\w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~ 取代;
\W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名;
\# :下达的第几个命令;
\$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 。
注:在 bash 里面?这个变量表示『上一个运行的命令所回传的值』,当我们运行某些命令时,这些命令都会回传一个运行后的代码。一般来说,如果成功的运行该命令, 则会回传一个 0 值,如果运行过程发生错误,就会回传『错误代码』。 如 echo $?
标签:计算机硬件 windows 操作系统 linux 朋友
原文地址:http://dyqd2011.blog.51cto.com/3201444/1736583