Shell及各文件夹作用整理.docx
- 文档编号:6284749
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:18
- 大小:29.15KB
Shell及各文件夹作用整理.docx
《Shell及各文件夹作用整理.docx》由会员分享,可在线阅读,更多相关《Shell及各文件夹作用整理.docx(18页珍藏版)》请在冰豆网上搜索。
Shell及各文件夹作用整理
Shell简介
Shell环境(命令行)可以大大降低Linux的系统性能,耗费的系统资源更少。
用户在该环境下工作时,不是直接同操作系统系统内核交互信息的,而是由命令解释器接受命令,分析后再传给相关的程序。
Shell是Linux中的命令解释程序,用户在提示符下输入的命令都是由shell先解释然后传给linux内核。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
Linux提供了像MicrosoftWindows那样的可视的命令输入界面--XWindow的图形用户界面(GUI)。
它提供了很多窗口管理器,其操作就象Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。
现在比较流行的窗口管理器是KDE和GNOME。
每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。
同Linux本身一样,Shell也有多种不同的版本。
目前主要有下列版本的Shell:
BourneShell:
是贝尔实验室开发的。
BASH:
是GNU的BourneAgainShell,是GNU操作系统上默认的shell。
KornShell:
是对BourneShell的发展,在大部分内容上与BourneShell兼容。
CShell:
是SUN公司Shell的BSD版本。
其实作为命令语言互动式地解释和执行用户输入的命令只是Shell功能的一个方面,Shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。
使用Shell编程类似于DOS中的批处理文件,称为Shellscript,又叫Shell程序或Shell命令文件。
Shell基本语法
像高级程序设计语言一样,Shell也提供说明和使用变量的功能。
对Shell来讲,所有变量的取值都是一个字串,Shell程序采用$var的形式来引用名为var的变量的值。
Shell有以下几种基本类型的变量。
(1)Shell定义的环境变量:
Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这些变量,常用的Shell环境变量有:
HOME用于保存注册目录的完全路径名。
PATH用于保存用冒号分隔的目录路径名,Shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
TERM终端的类型。
UID当前用户的识别字,取值是由数位构成的字串。
PWD当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
(2)用户定义的变量:
用户可以按照下面的语法规则定义自己的变量:
变量名=变量值
要注意的一点是,在定义变量时,变量名前不应加符号$,在引用变量的内容时则应在变量名前加$;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字串都要用双引号括起来。
在编写Shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。
有时我们想要在说明一个变量并对它设置为一个特定值后就不在改变它的值时,可以用下面的命令来保证一个变量的只读性:
readonly变量名
export,输出当前各环境变量的值。
在任何时候,创建的变量都只是当前Shell的局部变量,所以不能被Shell运行的其他命令或Shell程序所利用,而export命令可以将一个局部变量提供给Shell执行的其他命令使用,其格式为:
export变量名
也可以在给变量赋值的同时使用export命令:
export变量名=变量值
使用export说明的变量,在Shell以后运行的所有命令或程序中都可以访问到。
(3)位置参数:
位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。
位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。
$0是一个特殊的变量,它的内容是当前这个Shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。
(4)预定义变量:
预定义变量和环境变量相类似,也是在Shell一开始时就定义了的变量。
所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。
所有预定义变量都是由$符和另一个符号组成的,常用的Shell预定义变量有:
$#位置参数的数量。
$*所有位置参数的内容。
$?
命令执行后返回的状态。
$$当前进程的进程号。
$!
后台运行的最后一个进程号。
$0当前执行的进程名。
其中,$?
用于检查上一个命令执行是否正确。
(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。
)
$$变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。
(5)参数置换的变量:
Shell提供了参数置换功能以便用户可以根据不同的条件来给变量赋不同的值。
参数置换的变量有4种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。
a.变量=${参数-word}:
如果设置了参数,则用参数的值置换变量的值,否则用word置换。
即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。
b.变量=${参数=word}:
如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后再用word替换参数的值。
注意,位置参数不能用于这种方式,因为在Shell程序中不能为位置参数赋值。
c.变量=${参数?
word}:
如果设置了参数,则用参数的值置换变量的值,否则就显示word并从Shell中退出,如果省略了word,则显示标准信息。
这种变量要求一定等于某一个参数的值。
如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。
d.变量=${参数+word}:
如果设置了参数,则用word置换变量,否则不进行置换。
所有这4种形式中的“参数”既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多。
Shell程序设计的流程控制
和其他高级程序设计语言一样,Shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令创建非常复杂的程序。
与传统语言不同的是,Shell用于指定条件值的不是布尔运算式,而是命令和字串。
1.测试命令
test命令用于检查某个条件是否成立,它可以进行数值、字符和文件3个方面的测试,其测试符和相应的功能分别如下。
(1)数值测试:
-eq等于则为真。
-ne不等于则为真。
-gt大于则为真。
-ge大于等于则为真。
-lt小于则为真。
-le小于等于则为真。
(2)字串测试:
=等于则为真。
!
=不相等则为真。
-z字串字串长度伪则为真。
-n字串字串长度不伪则为真。
(3)文件测试:
-e文件名如果文件存在则为真。
-r文件名如果文件存在且可读则为真。
-w文件名如果文件存在且可写则为真。
-x文件名如果文件存在且可执行则为真。
-s文件名如果文件存在且至少有一个字符则为真。
-d文件名如果文件存在且为目录则为真。
-f文件名如果文件存在且为普通文件则为真。
-c文件名如果文件存在且为字符型特殊文件则为真。
-b文件名如果文件存在且为块特殊文件则为真。
另外,Linux还提供了与(!
)、或(-o)、非(-a)三个逻辑操作符,用于将测试条件连接起来,其优先顺序为:
!
最高,-a次之,-o最低。
同时,bash也能完成简单的算术运算,格式如下:
$[expression]
例如:
var1=2
var2=$[var1*10+1]
则var2的值为21。
2.if条件语句
Shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:
if条件命令串
then
条件为真时的命令串
else
条件为假时的命令串
fi
3.for循环
for循环对一个变量的可能的值都执行一个命令序列。
赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。
for循环的一般格式为:
for变量名 [in数值列表]
do
若干个命令行
done
变量名可以是用户选择的任何字串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。
如果省略了in,则变量var的取值将是位置参数。
对变量的每一个可能的赋值都将执行do和done之间的命令列表。
4.while和until循环
while和until命令都是用命令的返回状态值来控制循环的。
While循环的一般格式为:
while
若干个命令行1
do
若干个命令行2
done
只要while的“若干个命令行1”中最后一个命令的返回状态为真,while循环就继续执行do...done之间的“若干个命令行2”。
until命令是另一种循环结构,它和while命令相似,其格式如下:
until
若干个命令行1
do
若干个命令行2
done
until循环和while循环的区别在于:
while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。
Shell还提供了true和false两条命令用于创建无限循环结构,它们的返回状态分别是总为0或总为非0。
5.case条件选择
if条件语句用于在两个选项中选定一项,而case条件选择为用户提供了根据字串或变量的值从多个选项中选择一项的方法,其格式如下:
casestringin
exp-1)
若干个命令行1
;;
exp-2)
若干个命令行2
;;
……
*)
其他命令行
esac
Shell通过计算字串string的值,将其结果依次和运算式exp-1,exp-2等进行比较,直到找到一个匹配的运算式为止。
如果找到了匹配项,则执行它下面的命令直到遇到一对分号(;;)为止。
在case运算式中也可以使用Shell的通配符(“*”、“?
”、“[]”)。
通常用*作为case命令的最后运算式以便在前面找不到任何相应的匹配项时执行“其他命令行”的命令。
6.无条件控制语句break和continue
break用于立即终止当前循环的执行,而contiune用于不执行循环中后面的语句而立即开始下一个循环的执行。
这两个语句只有放在do和done之间才有效。
7.函数定义
在Shell中还可以定义函数。
函数实际上也是由若干条Shell命令组成的,因此它与Shell程序形式上是相似的,不同的是它不是一个单独的进程,而是Shell程序的一部分。
函数定义的基本格式为:
functionname
{
若干命令行
}
调用函数的格式为:
functionnameparam1param2…
Shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,因此函数也可以作为if,while等控制结构的条件。
在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时Shell将把这些参数分别赋予相应的位置参数$1,$2,...及$*。
8.命令分组
在Shell中有两种命令分组的方法:
()和{}。
前者当Shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。
当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰。
{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。
当我们要真正使用圆括弧和花括弧时(如计算运算式的优先顺序),则需要在其前面加上转义符(\)以便让Shell知道它们不是用于命令执行的控制所用。
运行Shell程序的方法
用户可以用任何编辑程序来编写Shell程序。
因为Shell程序是解释执行的,所以不需要编译成目的程序。
按照Shell编程的惯例,以bash为例,程序的第一行一般为“#!
/bin/bash”,其中#表示该行是注释,叹号!
告诉Shell运行叹号之后的命令并用文档的其余部分作为输入,也就是运行/bin/bash并让/bin/bash去执行Shell程序的内容。
执行Shell程序的方法有3种。
1.shShell程序文件名
这种方法的命令格式为:
bashShell程序文件名
这实际上是调用一个新的bash命令解释程序,而把Shell程序文件名作为参数传递给它。
新启动的Shell将去读指定的文件,可执行文件中列出的命令,当所有的命令都执行完后结束。
该方法的优点是可以利用Shell调试功能。
2.sh
格式为:
bash 这种方式就是利用输入重定向,使Shell命令解释程序的输入取自指定的程序文件。 3.用chmod命令使Shell程序成为可执行的 一个文件能否运行取决于该文档的内容本身可执行且该文件具有执行权。 对于Shell程序,当用编辑器生成一个文件时,系统赋予的许可权都是644(rw-r-r--),因此,当用户需要运行这个文件时,只需要直接键入文件名即可。 在这3种运行Shell程序的方法中,最好按下面的方式选择: 当刚创建一个Shell程序,对它的正确性还没有把握时,应当使用第一种方式进行调试。 当一个Shell程序已经调试好时,应使用第三种方式把它固定下来,以后只要键入相应的文件名即可,并可被另一个程序所调用。 4.bash程序的调试 在编程过程中难免会出错,有的时候,调试程序比编写程序花费的时间还要多,Shell程序同样如此。 Shell程序的调试主要是利用bash命令解释程序的选择项。 调用bash的形式是: bash-选择项Shell程序文件名 几个常用的选择项是: -e如果一个命令失败就立即退出。 -n读入命令但是不执行它们。 -u置换时把未设置的变量看做出错。 -v当读入Shell输入行时把它们显示出来。 -x执行命令时把命令和它们的参数显示出来。 上面的所有选项也可以在Shell程序内部用“set-选择项”的形式引用,而“set+选择项”则将禁止该选择项起作用。 如果只想对程序的某一部分使用某些选择项时,则可以将该部分用上面两个语句包围起来。 (1)未置变量退出和立即退出 未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止Shell程序的执行。 Shell通常允许未置变量的使用,在这种情况下,变量的值为空。 如果设置了未置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。 未置变量退出选择项为-u。 当Shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如果未经重新定向,该出错信息会显示在终端屏幕上,而Shell程序仍将继续执行。 要想在错误发生时迫使Shell程序立即结束,可以使用-e选项将Shell程序的执行立即终止。 (2)Shell程序的跟踪 调试Shell程序的主要方法是利用Shell命令解释程序的-v或-x选项来跟踪程序的执行。 -v选择项使Shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而-x选择项使Shell在执行程序的过程中把它执行的每一个命令在行首用一个+加上命令名显示出来。 并把每一个变量和该变量所取的值也显示出来。 因此,它们的主要区别在于: 在执行命令行之前无-v,则显示出命令行的原始内容,而有-v时则显示出经过替换后的命令行的内容。 除了使用Shell的-v和-x选择项以外,还可以在Shell程序内部采取一些辅助调试的措施。 例如,可以在Shell程序的一些关键地方使用echo命令把必要的信息显示出来,它的作用相当于C语言中的printf语句,这样就可以知道程序运行到什么地方及程序目前的状态。 Linux下的文件: linux各文件夹的作用 /bin二进制可执行命令 /dev设备特殊文件 /etc系统管理和配置文件 /etc/rc.d启动的配置文件和脚本 /home用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp公用的临时文件存储点 /root系统管理员的主目录(呵呵,特权阶级) /mnt系统提供这个目录是让用户临时挂载其他的文件系统。 /lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 /proc虚拟的目录,是系统内存的映射。 可直接访问这个目录来获取系统信息。 /var某些大文件的溢出区,比方说各种服务的日志文件 /usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录。 其中包含: /usr/x11r6存放xwindow的目录 /usr/bin众多的应用程序 /usr/sbin超级用户的一些管理程序 /usr/doclinux文档 /usr/includelinux下开发和编译应用程序所需要的头文件 /usr/lib常用的动态链接库和软件包的配置文件 /usr/man帮助文档 /usr/src源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin本地增加的命令 /usr/local/lib本地增加的库 通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要 经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。 除了可能的一个叫/vmlinuz标准的系统引导映像之外,根目录一般不含任何文件。 所有 其他文件在根文件系统的子目录中。 1./bin目录 /bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。 这些 命令都是二进制文件的可执行程序(bin是binary--二进制的简称),多是系统中重要的系统文件。 2./sbin目录 /sbin目录类似/bin,也用于存储二进制文件。 因为其中的大部分文件多是系统管理员使 用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。 3./etc目录 /etc目录存放着各种系统配置文件,其中包括了用户信息文件/etc/passwd,系统初始化文 件/etc/rc等。 linux正是*这些文件才得以正常地运行。 4./root目录 /root目录是超级用户的目录。 5./lib目录 /lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文 件。 这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副 本,故可以使得可执行文件变得更小,节省空间。 6./lib/modules目录 /lib/modules目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引 7./dev目录 /dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。 比如,用 户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。 8./tmp目录 /tmp目录存放程序在运行时产生的信息和数据。 但在引导启动后,运行的程序最好使用 /var/tmp来代替/tmp,因为前者可能拥有一个更大的磁盘空间。 9./boot目录 /boot目录存放引导加载器(bootstraploader)使用的文件,如lilo,核心映像也经常放在这里, 而不是放在根目录中。 但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的 文件系统会更好一些。 还有一点要注意的是,要确保核心映像必须在ide硬盘的前1024柱面内。 10./mnt目录 /mnt目录是系统管理员临时安装(mount)文件系统的安装点。 程序并不自动支持安装到 /mnt。 /mnt下面可以分为许多子目录,例如/mnt/dosa可能是使用msdos文件系统的软驱, 而/mnt/exta可能是使用ext2文件系统的软驱,/mnt/cdrom光驱等等。 11./proc,/usr,/var,/home目录 其他文件系统的安装点。 下面详细介绍; /etc文件系统 /etc目录包含各种系统配置文件,下面说明其中的一些。 其他的你应该知道它们属于哪个 程序,并阅读该程序的man页。 许多网络配置文件也在/etc中。 1./etc/rc或/etc/rc.d或/etc/rc? .d 启动、或改变运行级时运行的脚本或脚本的目录。 2./etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其 他信息。 3./etc/fdprm 软盘参数表,用以说明不同的软盘格式。 可用setfdprm进行设置。 更多的信息见setfdprm 的帮助页。 4./etc/fstab 指定启动时需要自动安装的文件系统列表。 也包括用swapon-a启用的swap区的信息。 5./etc/group 类似/etc/passwd,但说明的不是用户信息而是组的信息。 包括组的各种数据。 6./etc/inittab init的配置文件。 7./etc/issue 包括用户在登录提示符前的输出信息。 通常包括系统的一段短说明或欢迎信息。 具体内 容由系统管理员确定。 8./etc/magic “file”的配置文件。 包含不同文件格式的说明,“file”基于它猜测文件类型。 9./etc/motd motd是messageoftheday的缩写,用户成功登录后自动输出。 内容由系统管理员确定。 常用于通告信息,如计划关机时间的警告等。 10./etc/mtab 当前安装的文件系统列表。 由脚本(scritp)初始化,并由mount命令自动更新。 当需要一 3linux各文件夹的作用 个当前安装的文件系统的列表时使用(例如df命令)。 11./etc/shadow 在安装了影子(shadow)口令软件的系统上的影子口令文件。 影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户(roo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Shell 文件夹 作用 整理