重要基本概念:
管理整个硬件是核心(kernel),一般使用者(user)则是以shell来跟核心沟通。
替我们工作的是『硬件』,而控制硬件的是『核心』,我们使用者乃是利用『Shell』控制一些kernel提供的『工具 (Utility)』来操控硬件替我们正确的工作。
kernel是『核心』的意思,而 Shell 是『壳』的意思。
shell 有很多版本,例如:常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于GNU 的架构下发展出来。
BASH shell是GNU计划中重要的工具软件,目前也是GUN操作系统中标准的shell,它主要兼容于sh,并且依据一些使用者需求,而加强的shell版本,可以说目前几乎所有的Linux distribution 都使用bash作为管理核心的主要shell。
BASH优点:
① 命令编修能力(类似DOS的doskey功能):『他能记忆使用过的指令』 曾经下达过的指令都被记录下来了,记录的档案在你的家目录内的 .bash_history 。~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在暂内存中,当你成功的注销系统后,该指令记忆才会记录到 .bash_history 当中。『查询曾经做过的举动』如此可以知道你的执行步骤,那么就可以追踪您曾下达的指令,以作为除错的工具。
② 命令与档案补全功能: [tab] 如果想要知道系统当中所有以 c 为开头的指令呢?就按下 c[tab] [tab] 。
③ 命令别名(alias)设定功能:alias 就可以知道目前的命令别名有哪些了。也可以直接下达命令来设定别名:alias lm=’ls -al’。
④ 工作控制(jobs)、前景背景控制:使用前、背景的控制可以让工作进行的更为顺利。工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中执行,而不怕不小心使用了 [Ctrl] + c 来停掉该程序。此外,也可以在单一登入的环境中,达到多任务的目的。
⑤ Shell scripts 的强大功能:将日常生活当中常需要下达的连续指令写成一个档案, 该档案并且可以透过对谈交互式的方式来进行主机的侦测工作。也可以藉由 shell 提供的环境变量及相关指令来进行设计,整个设计下来几乎就是一个小型的程序语言。
⑥ 万用字符:除了完整的字符串之外, bash 还支持许多的万用字符来帮助使用者查询与指令下达。例如想要知道 /usr/X11R6/bin 底下有多少以 xt 为开头的档案,使用: ls -l /usr/X11R6/bin/xt*
type : ① 查看指令是否为bash的内建指令;② 找指令。
bash 的说明文档:man bash
查看指令是否为『内建』指令:type [-tpa] name 例如:type cd
[root@linux ~]# type [-tpa] name
参数:
:不加任何参数时,则 type 会显示出那个 name 是外部指令还是 bash 内建的指令!
-t:当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义。
file:表示为外部指令;
alias:表示该指令为命令别名所设定的名称;
builtin:表示该指令为 bash 内建的指令功能;
-p:如果后面接的 name 为指令时,会显示完整文件名(外部指令)或显示为内建指令;
-a:会将由 PATH 变量定义的路径中,将所有含有 name 的指令都列出来,包含 alias
指令下达方法:
[root@linux ~]# command [-options] parameter1 parameter2 ...
指令 选项 参数(1) 参数(2)
说明:
- 一行指令中第一个输入的绝对是『指令(command)』或『可执行档案』
- command 为指令的名称,例如变换路径的指令为 cd 等等;
- 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为 - 号,例如 -h;有时候完整参数名称会输入 – 符号,例如 –help;
- parameter1 parameter2.. 为依附在 option 后面的参数,
或者是 command 的参数;- command, -options, parameter1.. 中间以空格来区分,不论空几格 shell 都视为一格;
- 按下 [Enter] 按键后,该指令就立即执行。[Enter] 按键为 字符,他代表着一行指令的开始启动。
- 指令太长的时候,可以使用 \ 符号来跳脱 [Enter] 符号,使指令连续到下一行。*注意! \ 后就立刻接特殊字符。
- 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
变量:是以一组文字或符号等,来取代一些设定或者是一串保留的数据。
在下达正确的指令,应该需要指定路径与文件名。但是为何我们在任意路径下都可以执行ls呢?而不需要指定路径呢?这是因为系统已经预设了一些『搜寻路径(PATH)』了,所以当我们执行一些指令时,系统就会按照该PATH的设定来进行指令的搜索。而这个PATH就是所谓的变量。
如何『显示变量』呢?使用echo这个指令。
变量的取用与设定:echo;变量设定规则:unset;
[root@linux ~]# echo $variable
[root@linux ~]# echo $PATH
/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
[root@linux ~]# echo ${PATH}
如何『设定』或者是『修改』 某个变量的内容?
用『等号(=)』连接变量与他的内容。
例如:
[root@localhost Jianan]# echo $myname
[root@localhost Jianan]# myname=VBird
[root@localhost Jianan]# echo $myname
VBird
这样变量名称myname的内容就带有VBird这个数据了。当一个变量名称尚未被设定时,预设的内容是『空』的。并且,变量在设定时,还是需要符合某些规定的,否则会设定失败。
规则如下:
- 变量与变量内容用等号连接;
- 等号两边不能直接接空格符;
- 变量名称只能是英文字母与数字,但是数字不能是开头字符;
- 若有空格符可以使用双引号『 ” 』或单引号『 ’ 』来将变量内容结合起来,但须要特别留意, 双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;
- 必要时需要以跳脱字符『 \ 』来将特殊符号 ( 如 Enter, $, , 空格符, ’ 等 ) 变成一般符号
- 在一串指令中,还需要藉由其它的指令提供的信息,可以使用 quote 『` command 』;(特别特别注意,那个`是键盘上方的数字键 1 左边那个按键,而不是单引号!)
- 若该变量为扩增变量内容时,则需以双引号及$量名称 如:『”$PATH”:/home』继续累加内容;
- 若该变量需要在其它子程序执行,则需要以 export 来使变量变成环境变量, 如『 export PATH』;
- 通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断 ( 纯粹依照使用者兴趣与嗜好 ) ;
- 取消变量的方法为:『 unset 变量名称』。
规则比较复杂,可以直接看例子:
例一:设定一变量 name ,且内容为 VBird 。
[root@localhost Jianan]# 12name=VBird
bash: 12name=VBird: 未找到命令...
[root@localhost Jianan]# name = VBird
bash: name: 未找到命令...
[root@localhost Jianan]# name=VBird
[root@localhost Jianan]# echo $name
VBird
例二:范例二:承上题,若变量内容为 VBird’s name 呢?
[root@localhost Jianan]# name=VBird's name
>
> \
> /
> ;
> '
[root@localhost Jianan]# echo $name
VBirds name \ / ;
[root@localhost Jianan]# name="VBird's name"
[root@localhost Jianan]# echo $name
VBird's name
[root@localhost Jianan]# name=VBird\'s\ name
[root@localhost Jianan]# echo $name
VBird's name
例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
[root@localhost Jianan]# PATH=$PATH:/home/dmtsai/bin
[root@localhost Jianan]# PATH="$PATH":/home/dmtsai/bin
例四:呈范例三,我要将 name 的内容多出 “yes” 呢?
[root@localhost Jianan]# name=VBird
[root@localhost Jianan]# echo $name
VBird
[root@localhost Jianan]# name="$name"yes
[root@localhost Jianan]# echo $name
VBirdyes
[root@localhost Jianan]# name=${name}acb
[root@localhost Jianan]# echo $name
VBirdyesacb
例五:如何让我刚刚设定的 name=VBird 可以用在下个 shell 的程序?
[root@localhost Jianan]# name=VBird
[root@localhost Jianan]# bash
[root@localhost Jianan]# echo $name
[root@localhost Jianan]# exit
exit
[root@localhost Jianan]# export name
[root@localhost Jianan]# bash
[root@localhost Jianan]# echo $name
VBird
[root@localhost Jianan]# exit
exit
说明:什么是子程序?就是在我目前这个shell的情况下,去启动一个新的shell,新的那个shell就是子程序了。在一般的状态下,父程序的自定变量是无法在子程序内使用的。但是透过export将变量变成环境变量后,就能够在子程序下应用了。
例六:如何进入到您目前核心的模块目录?
[root@localhost Jianan]# cd /lib/modules
[root@localhost modules]# ls
4.0.4-301.fc22.x86_64
[root@localhost modules]# cd 4.0.4-301.fc22.x86_64/
[root@localhost 4.0.4-301.fc22.x86_64]# ls
build modules.dep modules.softdep
kernel modules.dep.bin modules.symbols
modules.alias modules.devname modules.symbols.bin
modules.alias.bin modules.drm source
modules.block modules.modesetting updates
modules.builtin modules.networking vdso
modules.builtin.bin modules.order
[root@localhost 4.0.4-301.fc22.x86_64]# cd kernel/
[root@localhost kernel]# ls
arch crypto drivers fs kernel lib mm net security sound
例七:取消刚刚设定的 name 这个变量内容
[root@localhost kernel]# unset name
例八:在变量的设定中,单引号与双引号的用途有何不同?
单引号与双引号的最大不同在于上引号仍然可以保有变量的内容,但
这里写代码片
变量的用途
① 简化路径名;
② 常常需要定义变量在script里面。
如果能够借由shell提供的命令重导向(或称数据流重导向),以及管线命令。
命令总结:
1. cat etc/shells
2. ls -al —查看目录底下的所有档案(包含隐藏档)及所有的档案属性
3. alias –查看目前的命令有哪些别名
4. alias lm = ‘ls -al’ –设定别名
5. ls -l /usr/X11R6/bin/xt* –使用万用字符查看/usr/X11R6/bin 底下有多少以 xt 为开头的档案
6. su root –获取管理员身份
Linux 各个盘分别是什么?