Linux 系统应用与程序设计

3,025 views
2,909 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,025
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Linux 系统应用与程序设计

  1. 1. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  2. 2. Linux 的发音 <ul><li>A : ['linju:ks] </li></ul><ul><li>B : ['linэks] </li></ul><ul><li>C : ['linΛks] </li></ul><ul><li>D : ['liniks] </li></ul><ul><li>正确发音 GO </li></ul>“ hello,this is linus torvalds and i pronounce linux as linux”
  3. 3. <ul><li>Linux 入门 </li></ul><ul><ul><li>历史、背景、版本、安装 </li></ul></ul><ul><li>Linux 系统管理 </li></ul><ul><ul><li>基本操作、各类服务的架设 </li></ul></ul><ul><li>Linux 程序设计 </li></ul><ul><ul><li>Vi 、 SHELL 、 C 、可视化程序 </li></ul></ul>课程介绍
  4. 4. 什么是 UNIX <ul><li>UNIX 是有 OPEN GROUP 管理的一个商标,它指的是一个遵循特定规范的计算机操作系统 </li></ul><ul><li>这个规范称为单一 UNIX 规范( The Single UNIX Specification ) </li></ul><ul><li>UNIX 的源代码属于 SCO 公司 </li></ul>
  5. 5. 类 UNIX 系统 <ul><li>多数为商用,如 SCO 的 Unixware 、 IBM 的 AIX 、 HP 的 HP-UX 和 Sun 的 Soloris </li></ul><ul><li>免费的有 FreeBSD 和 Linux </li></ul>
  6. 6. 认识 Linux <ul><li>什么 是 Free Software ? </li></ul><ul><ul><li>Shareware/Freeware </li></ul></ul><ul><ul><li>不提供 Source Code </li></ul></ul><ul><ul><li>无法让 使用者自由更改或散播 </li></ul></ul>
  7. 7. 认识 Linux <ul><li>什 么 是 自由软件 Opensource? </li></ul><ul><ul><li>Freedom( 自由 )/Open( 开 放 ) </li></ul></ul><ul><ul><li>Source Code 必须公开 </li></ul></ul><ul><ul><li>任何人都可以自由 传播 、 下载 、使用或 改写 </li></ul></ul>
  8. 8. 什么是 Linux <ul><li>是一个类 UNIX 内核的可以自由发布的实现版本,是一个操作系统的底层核心 </li></ul><ul><li>可以获得内核源代码,编译并安装,然后获得并安装许多其他自由发布的软件,从而创建一个完整的 Linux ,通常称为 Linux 系统 </li></ul><ul><li>Linux 发行版 </li></ul>
  9. 9. 发行版简介 <ul><li>Linux 操作系统( kernel+ultiliteies ):专家才会用 </li></ul><ul><li>Linux 发行版( Distribution ):整合更多配套软件,普通用户也能用 </li></ul>
  10. 10. LINUX 源起 <ul><li>1991 年 8 月 </li></ul><ul><li>芬兰 的一 个学 生在 comp.os.minix 新闻组贴 上了以下 这 段 话 : </li></ul><ul><li>「 你好,所有使用 minix 的人 - 我正在 为 386 ( 486 ) AT 做一個 免费 的操作系統 ( 只是 为 了 爱 好 ) ,不 会 像 GNU 那 样 很大很 专业 。 」 </li></ul>
  11. 11. <ul><li>1990 年秋, Linus 修读 Unix 课程,基于 minix 编写仿真程序 </li></ul><ul><li>1991 年 10 月发布 linux0.02 版本 </li></ul><ul><li>1993 年发布 linux0.99 版本 </li></ul><ul><li>1994 年 3 月发布 linux1.0 版本 </li></ul><ul><li>1994 年加入 GNU 组织 </li></ul>
  12. 12. GNU 计划 <ul><li>1983 年 Richard Stallman( 自由 软件业 的精神教父 ) 创办 GNU(GNU’s not Unix) 计划 </li></ul><ul><li>开始于 1984 年,旨在 发展 一個 类 -Unix 且 为 自由 软件 的完整 操作 系統 </li></ul><ul><li>http://www.gnu.org/ </li></ul>
  13. 13. 自由 软件基金会 <ul><li>GNU 计划 的 赞助单位 </li></ul><ul><li>FSF(Free Software Fundation) 提倡 免费软件 </li></ul><ul><li>FSF 自由使用 权 的三個 意义 : </li></ul><ul><ul><li>可自由 复制 GNU 的 软件 </li></ul></ul><ul><ul><li>可自由修改 源代码 </li></ul></ul><ul><ul><li>可自由 散布 修改 过 的 源代码 ,但不得收取任何 版权费用 </li></ul></ul>
  14. 14. GNU Gen era l Public License <ul><li>大 众 公有 版权 / 通用公共 版权 </li></ul><ul><li>官方 翻译 :自由文件 许可 </li></ul><ul><li>Copy left (是 copyright 的反话,就是防止有人给自由软件的使用加上限制) </li></ul><ul><li>http://www.linux.org.tw/CLDP/GNU/licences/fdl.zh.html </li></ul><ul><li>http://www.gnu.org/copyleft/gpl.html </li></ul>
  15. 15. 在 GPL 条款下发布的主要 GNU 项目软件 <ul><li>GCC </li></ul><ul><li>G++ </li></ul><ul><li>GDB </li></ul><ul><li>GNU make </li></ul><ul><li>Bash </li></ul><ul><li>GNU Emacs </li></ul>
  16. 16. GNU 与 Linux <ul><li>GNU </li></ul><ul><ul><li>仍自行 发展 Hurd Kernel </li></ul></ul><ul><ul><li>开发许多 以 GPL 发 行的 应 用程 序与 工具程 序 </li></ul></ul><ul><li>Linux ( Linus’s Unix ) </li></ul><ul><ul><li>由 网络上热心 的朋友一起 发 展 Linux Kernel </li></ul></ul><ul><ul><li>采 用 GNU 发 展的 许多应 用程 序与 工具 </li></ul></ul><ul><ul><li>应该称作 GNU/Linux </li></ul></ul>
  17. 17. Linux 品牌 <ul><li>RedHat Linux </li></ul><ul><li>SuSE Linux </li></ul><ul><li>Mandrake Linux </li></ul><ul><li>Caldera Linux </li></ul><ul><li>Turbolinux </li></ul><ul><li>Debian GNU/Linux </li></ul><ul><li>Gentoo Linux </li></ul><ul><li>Linpus Linux </li></ul>
  18. 18. 内核版本号与发行版本号 <ul><li>内核版本号:由 Linus 等人制定和维护,全球统一 </li></ul><ul><li>发行版本号:由各个发行公司或者组织自行制定,不同公司的发行版本号之间无可比性 </li></ul><ul><li>内核版本号格式: x.y.zz-www , x 为主版本号, y 为次版本号, zz 为次次版本号, www 发行号 </li></ul>
  19. 19. Linux Kernel 现状与认证 <ul><li>Kerenl 版本 http://www.kernel.org </li></ul><ul><ul><li>主版本号、次版本号、次次版本号 </li></ul></ul><ul><ul><li>稳 定版本- 2. 6 . 1 2 </li></ul></ul><ul><li>Linux 认证 </li></ul><ul><ul><li>RedHat RHCE </li></ul></ul><ul><ul><li>http://www.redhat.com/ </li></ul></ul><ul><ul><li>LPI Level one/two/three </li></ul></ul><ul><ul><li>http://www.lpi.org </li></ul></ul>
  20. 20. Linux 产业现状 <ul><li>国内 Linux 市场普及度越来越高 </li></ul><ul><li>银行、证券、电信、邮政、税务、航空等对稳定性、安全性要求颇高的领域应用广(服务器端) </li></ul><ul><li>手机软件也用到了 Linux 嵌入式开发平台 </li></ul><ul><li>桌面市场不成熟 </li></ul>
  21. 21. Linux 人才现状 <ul><li>Linux 在中国前景光明,但缺少这方面的人才已成为其发展的瓶颈 </li></ul><ul><li>国内熟练的 Linux 开发人员只有 3000 人左右,而且有很大一部分都是自由软件的爱好者,并没有经过专业的课程培训 </li></ul><ul><li>根据 EvansData 发表的有关 Linux 开发状况的调查结果,目前 Linux 应用软件开发人员中,有 52% 是从 Windows 应用软件开发领域转行过来的,另外还有 30% 曾经从事过 UNIX 的应用开发 </li></ul>
  22. 22. 人才问题 <ul><li>其一,人才培养跟不上。企业能直接从学校或社会上招聘到的 Linux 人才少,一般只能招到公司后再慢慢培训; </li></ul><ul><li>其二,高层次的 Linux 技术人才少。很多人对 Linux 都是一知半解,只懂点皮毛,对内核级别有研究的更是凤毛麟角; </li></ul><ul><li>其三, Linux 企业以外的 Linux 人才少。 </li></ul>
  23. 23. 薪水如何? <ul><li>Linux 普通网络管理人员的月薪大约 5000 元左右 </li></ul><ul><li>负责编程的 Linux 软件工程师月薪大约在 8000 - 12000 元之间 </li></ul><ul><li>近年来特别红火的 Linux 嵌入式软件开发人员的月薪大约在 1.2 万元以上 </li></ul><ul><li>项目经理的工资可能更高 </li></ul><ul><li>在美国的一些大城市,经验丰富的 Linux 管理人员的薪金待遇普遍比 Unix 和 Windows 同行高出 20% ~ 30% </li></ul>
  24. 32. man 男人 ? <ul><li>在线 查詢 man page </li></ul><ul><ul><li># man ls </li></ul></ul><ul><ul><li># man 1 ls </li></ul></ul><ul><ul><li># info ls </li></ul></ul><ul><ul><li>info 也可以 </li></ul></ul>
  25. 33. 系統 关机 <ul><ul><li>关机 </li></ul></ul><ul><ul><ul><li>shutdown –h now </li></ul></ul></ul><ul><ul><ul><li>halt </li></ul></ul></ul><ul><ul><ul><li>poweroff </li></ul></ul></ul><ul><ul><ul><li>init 0 </li></ul></ul></ul><ul><ul><li>重新 启动 </li></ul></ul><ul><ul><ul><li>shutdown –r now </li></ul></ul></ul><ul><ul><ul><li>reboot </li></ul></ul></ul><ul><ul><ul><li>init 6 </li></ul></ul></ul>
  26. 34. Linux 与 XP 双系统 <ul><li>参考资料: </li></ul><ul><ul><li>http://soft.yesky.com/os/lin/36/2300036_1.shtml </li></ul></ul><ul><ul><li>要点: </li></ul></ul><ul><ul><li>硬盘中有独立的分区留出来 </li></ul></ul><ul><ul><li>先装 XP 后装 Linux ,否则 XP 会吃掉 linux 的引导 </li></ul></ul><ul><ul><li>双系统是由 linux 的 GRUB 来引导启动 </li></ul></ul>
  27. 35. 关于课本 <ul><li>《 linux 系统应用与开发教程》 </li></ul><ul><li>机械工业出版社 </li></ul><ul><li>刘海燕等编著 </li></ul><ul><li>ftp dns dhcp telnet </li></ul>
  28. 36. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  29. 37. Linux 终端使用基础 <ul><li>Linux 终端也称为虚拟控制台 . 一台计算机的输入输出设备就是一个物理的控制台 . </li></ul><ul><li>如果在一台计算机上用软件的方法实现了多个互不干扰独立工作的控制台界面,就是实现了多个虚拟控制台。 </li></ul><ul><li>Linux 终端的工作方式是字符命令行方式,用户通过键盘输入命令进行操作,可以通过 Linux 终端对系统进行控制。 </li></ul>
  30. 38. 什么是 shell <ul><li>Shell 是一个作为用户与 linux 系统间接口的程序,它允许用户向操作系统输入需要执行的命令 </li></ul><ul><li>在 linux 中可有多种 shell </li></ul><ul><li>Linux 是高度模块化的 </li></ul><ul><li>可用多个 shell </li></ul>内核 csh bash xwindow 其他程序
  31. 39. shell 的基本形式 <ul><li>shell 的种类 : </li></ul><ul><ul><li>ash :是贝尔实验室开发的 shell , bsh 是对 ash 的符号链接。 </li></ul></ul><ul><ul><li>bash :是 GNU 的 Bourne Again shell ,是 GNU 操作系统上默认的 shell 。 sh 以及 bash2 都是对它的符号链接。 </li></ul></ul><ul><ul><li>tcsh :是 Berkeley UNIX C shell 。 csh 是对它的符号链接 </li></ul></ul>
  32. 40. <ul><li>shell 命令的基本格式是: </li></ul><ul><ul><li>命令名 [ 选项 ] < 参数 1> < 参数 2> …… </li></ul></ul><ul><li>命令自动补齐与历史记录 </li></ul><ul><li>shell 提示符 :# $ </li></ul>
  33. 41. 我们用的 shell <ul><li>GNU 工具中的 bash </li></ul><ul><li>作为 /bin/sh 被默认安装 </li></ul><ul><li>大多数 linux 发行版中, shell 程序 /bin/sh 实际上是对程序 /bin/bash 的一个连接 </li></ul><ul><li>/bin/sh -version </li></ul>
  34. 42. Linux 文件 链接数 所属组 所属用户 文件属性 文件大小 修改时间 文件名
  35. 43. 文件与目录的基本概念 <ul><li>文件是 Linux 用来存储信息的基本结构,它是被命名的存储在某种介质上的一组信息的集合。 </li></ul><ul><li>Linux 系统中有三种基本的文件类型 . </li></ul><ul><ul><li>普通文件:又分为文本文件和二进制文件; </li></ul></ul><ul><ul><li>目录文件:目录文件存储了一组相关文件的位置、大小等与文件有关的信息; </li></ul></ul><ul><ul><li>设备文件: Linux 系统把每一个 I/O 设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一 ; </li></ul></ul>
  36. 44. 文件系统概念 <ul><li>文件系统是磁盘上有特定格式的一片区域,操作系统通过文件系统可以方便地查询和访问其中所包含的磁盘块 </li></ul><ul><li>文件:文件系统中存储数据的一个命名对象 </li></ul><ul><li>目录:文件系统中的每个文件都登记在一个或多个目录中 </li></ul>
  37. 45. 文件结构 <ul><li>文件的成分:无论文件是一个程序、一个文档、一个数据库、一个目录,都有以下同样的结构 </li></ul><ul><ul><li>索引节点,又称 I 节点,存放文件的状态信息 </li></ul></ul><ul><ul><li>数据 </li></ul></ul>
  38. 46. Linux 文件种类 <ul><li>正规文件 ( regular file ) </li></ul><ul><ul><li>第一个属性为 [ - ] </li></ul></ul><ul><ul><ul><li>纯文字文件 (ascii) </li></ul></ul></ul><ul><ul><ul><li>二进制文件 (binary)   </li></ul></ul></ul><ul><li>目录 (directory) : </li></ul><ul><ul><li>第一个属性为 [ d ] </li></ul></ul><ul><li>链接文件 (link) : </li></ul><ul><ul><li>第一个属性为 [ l ] </li></ul></ul><ul><li>设备文件 (device) : </li></ul><ul><ul><li>区块 (block) 设备文件 , 第一个属性为 [ b ] ; </li></ul></ul><ul><ul><li>字 符 (character) 设备文件 , 第一个属性为 [ c ] 。 </li></ul></ul>
  39. 47. Linux 程序 <ul><li>Linux 中的应用程序有两种类型 </li></ul><ul><ul><li>可执行文件(相当于 windows 中的 .exe 文件) </li></ul></ul><ul><ul><li>脚本文件(相当于 windows 中的 .bat .cmd 文件) </li></ul></ul><ul><li>Linux 并不要求应用程序具有特殊的文件名或扩展名 </li></ul>
  40. 48. Linux 文件属性 可读 可写 可执行 无此属性 文件类型 拥有者属性 组属性 其他人对该文件属性
  41. 49. 目录 <ul><li>Linux 系统以目录的方式来组织和管理系统中的所有文件 </li></ul><ul><li>Linux 系统通过目录将系统中所有的文件分级、分层组织在一起,形成了 Linux 文件系统的树型层次结构。以根目录“ /” 为起点,所有其他的目录都由根目录派生而来。 </li></ul><ul><li>特殊目录 :“.” 代表该目录自己, “ ..” 代表该目录的父目录,对于根目录,“ .” 和“ ..” 都代表其自己。 </li></ul>
  42. 50. 观察目录文件的信息 <ul><li>目录文件也包含数据,它与普通文件的差别是:内核对这些数据进行结构化处理,它是由成对的“ I 节点号 / 文件名”构成的列表 </li></ul><ul><li>当把文件添加到一个目录中时,该目录的尺寸会增大,以便容纳新文件名。当删除文件时,目录的尺寸并不减小,而是内核对该目录项做上特殊标记,以便下次添加一个文件时重新使用它。 </li></ul>
  43. 51. Linux 目录结构 <ul><li>/bin :常用系統 程序目录 </li></ul><ul><li>/boot : 开机设定目录 ,也是 摆放 核心 vmlinuz 的地方 </li></ul><ul><li>/dev : 摆放系统设备装置文件的目录 </li></ul><ul><li>/etc : 系统配置文件 ,尤其 passwd, shadow </li></ul><ul><li>/etc/rc.d/init.d :系統 开机 的時候 载入服务 的 scripts 的 摆放地点 </li></ul><ul><li>/home :系統使用者的目 录 </li></ul>
  44. 52. Linux 目录结构 <ul><li>/lib : Linux 执行 或 编译程序函数库目录 </li></ul><ul><li>/mnt : 软驱与光驱接入挂载 的地方 </li></ul><ul><li>/proc :系 统 核心 与执 行程序的一些 信息 </li></ul><ul><li>/root :系 统 管理 员 的目 录 </li></ul><ul><li>/usr/bin, /bin : 一般执行文件摆放 的地方 </li></ul><ul><li>/usr/sbin, /sbin : 系统管理员 常用 指令 集 </li></ul><ul><li>/var : 摆放系统日志文件 的地方 </li></ul><ul><li>/lost+fount : 摆放系统 不正常 产 生 错误时遗 失的片段 </li></ul>
  45. 54. <ul><li>工作目录:用户登录到 Linux 系统后,每时每刻都处在某个目录之中,此目录被称为“工作目录” 或“当前目录” </li></ul><ul><li>用户主目录( Home Directory ):是系统管理员在增加用户时为该用户建立起来的目录,每个用户都有自己的主目录。 使用符号 ~ 表示。 </li></ul>
  46. 55. <ul><li>路径是指从树型目录结构中的某个目录到某个文件的一条道路。此路径的主要构成是目录名称,中间用“ /” 分开。 </li></ul><ul><ul><li>绝对路径是指从“根”开始的路径,也称为完全路径; </li></ul></ul><ul><ul><li>相对路径是指从用户工作目录开始的路径。 </li></ul></ul><ul><li>通配符 </li></ul><ul><ul><li>通配符 * </li></ul></ul><ul><ul><li>通配符? </li></ul></ul><ul><ul><li>字符组模式:通配符“ [” 、“ ]” 、“ -” 用于构成字符组模式。 </li></ul></ul><ul><ul><li>转义字符 </li></ul></ul>
  47. 56. <ul><li>Linux 用正斜线( / )分隔文件名里的目录名 </li></ul><ul><li>Windows 用反斜线( )分隔 </li></ul>
  48. 57. 目录和文件的基本操作 <ul><li>文件列表 ls [-a] [-l] [-i] </li></ul><ul><li>文件查看和连接命令 cat </li></ul><ul><ul><li>cat [ 选项 ] <file1> … </li></ul></ul><ul><li>分屏显示命令 more </li></ul><ul><ul><li>more [ 选项 ] <file>… </li></ul></ul><ul><li>按页显示命令 less </li></ul><ul><ul><li>less [ 选项 ] <filename> </li></ul></ul>
  49. 58. 复制、删除和移动命令 <ul><li>复制命令 cp </li></ul><ul><ul><li>cp [ 选项 ] <source> <dest> </li></ul></ul><ul><ul><li>或者 cp [ 选项 ] <source>... <directory> </li></ul></ul><ul><li>删除命令 rm </li></ul><ul><ul><li>rm [ 选项 ] <name>... </li></ul></ul><ul><li>移动或重命名命令 mv </li></ul><ul><ul><li>mv [ 选项 ] <source> <dest> </li></ul></ul><ul><ul><li>或者 mv [ 选项 ] <source>... <directory> </li></ul></ul>
  50. 59. 创建和删除目录命令 <ul><li>创建目录命令 mkdir </li></ul><ul><ul><li>mkdir [-p] <dirName>… </li></ul></ul><ul><li>删除空目录命令 rmdir </li></ul><ul><ul><li>rmdir [-p] <dirName> </li></ul></ul>
  51. 60. 切换工作目录和显示目录命令 <ul><li>切换工作目录命令 cd </li></ul><ul><li>cd <dirName> </li></ul><ul><li>显示当前路径命令 pwd </li></ul><ul><ul><li>pwd </li></ul></ul><ul><li>查看目录命令 ls </li></ul><ul><ul><li>ls [ 选项 ] [<name>...] </li></ul></ul>
  52. 61. 查找与定位命令 <ul><li>查找文件或者目录命令 find </li></ul><ul><ul><li>find [path…] [expression] </li></ul></ul><ul><li>文件定位命令 locate/slocate </li></ul><ul><ul><li>locate [ 选项 ] <search string> </li></ul></ul>
  53. 62. <ul><li>链接 ln </li></ul><ul><ul><li>ln [ 选项 ] <source> <dest> </li></ul></ul><ul><ul><li>硬链接 hard link </li></ul></ul><ul><ul><li>软链接 symbolic link </li></ul></ul><ul><li>改变文件或目录时间的命令 touch </li></ul><ul><ul><li>touch [ 选项 ] <file1> [file2 ...] </li></ul></ul>
  54. 63. 压缩解压缩命令 <ul><li>命令格式为: </li></ul><ul><ul><li>tar < 主选项 > [ 辅选项 ] < 文件或者目录 > </li></ul></ul><ul><li>压缩和解压命令 gzip </li></ul><ul><ul><li>gzip [ 选项 ] < 文件名 > </li></ul></ul><ul><li>解压命令 unzip </li></ul><ul><ul><li>unzip [ 选项 ] < 压缩文件名 > </li></ul></ul>
  55. 64. 常用命令 <ul><li>显示文字命令 echo </li></ul><ul><ul><li>echo [ -n ] < 字符串 > </li></ul></ul><ul><li>显示日历命令 cal </li></ul><ul><ul><li>cal [ 选项 ] [[ 月 ] 年 ] </li></ul></ul><ul><li>日期时间命令 date </li></ul><ul><ul><li>显示日期和时间的命令格式为: </li></ul></ul><ul><ul><li>date [ 选项 ] [+FormatString] </li></ul></ul><ul><ul><li>设置日期和时间的命令格式为: </li></ul></ul><ul><ul><li>date <SetString> </li></ul></ul><ul><li>清除屏幕命令 clear </li></ul>
  56. 65. 软件包管理命令 rpm <ul><li>安装软件 </li></ul><ul><ul><li>rpm -i ( 或者 --install) [ 安装选项 ] <file1.rpm> ... <fileN.rpm> </li></ul></ul><ul><li>删除 </li></ul><ul><ul><li>rpm -e ( 或者 --erase) [ 删除选项 ] pkg1 ... pkgN </li></ul></ul><ul><li>升级 </li></ul><ul><ul><li>rpm -U ( 或者 --upgrade) [ 升级选项 ] file1.rpm ... fileN.rpm </li></ul></ul><ul><li>查询 </li></ul><ul><ul><li>rpm -q ( 或者 --query) [ 查询选项 ] pkg1 ... pkgN </li></ul></ul><ul><li>校验已安装的软件包 </li></ul><ul><ul><li>rpm -V ( 或者 --verify) [ 校验选项 ] pkg1 ... pkgN </li></ul></ul>
  57. 66. 公共邮箱 <ul><li>[email_address] </li></ul><ul><li>密码: 123456 </li></ul><ul><li>课件、资料 </li></ul>
  58. 67. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  59. 68. 更改 Linux 文件属性命令 <ul><li>u </li></ul><ul><li>g </li></ul><ul><li>o </li></ul><ul><li>a </li></ul>+( 加入 ) -( 除去 ) =( 设定 ) r w x 文件或目录 chmod r=4,w=2,x=1 # chmod 770 test owner  = rwx  = 4+2+1 = 7 group  = rwx  = 4+2+1 = 7 others = ---  = 0+0+0 = 0
  60. 69. 练习 <ul><li>系统中有用户 user1 和 user2 ,同属于 users 组。在 user1 用户目录下有一文件 file1 ,它拥有 644 的权限,如果 user2 用户想修改 user1 用户目录下的 file1 文件,应拥有  权限。 </li></ul><ul><li> A  744  B  664  C   646  D  746 </li></ul>
  61. 70. Linux 上的 X Window 系统 <ul><li>整个 X Window 由三个部分组成: </li></ul><ul><li>X Server :是控制输出及输入设备并维护相关资源的程序,它接收输入设备的信息,并将其传给 X Client ,而将 X Client 传来的信息输出到屏幕上( 在屏幕上构造方块(窗口),然后画出里面的元素 )。 </li></ul><ul><li>X Client :是应用程序的核心部分,它与硬件无关,每个应用程序就是一个 X Client 。 X Client 可以是终端仿真器( Xterm )或图形界面程序,它不直接对显示器绘制或者操作图形,而是与 X Server 通信,由 X Server 控制显示。 </li></ul><ul><li>X protocol : X Client 与 X Server 之间的通信协议。 </li></ul>
  62. 71. <ul><li>X 服务程序响应 X 客户程序的请求,直接与图形设备通信,负责打开和关闭窗口,控制字体和颜色等底层的具体操作。每一个显示设备只有一个惟一的 X 服务程序。 </li></ul>
  63. 72. <ul><li>X 客户程序是使用系统窗口功能的一些应用程序,无法直接影响窗口或显示,它们只能请求 X 服务程序,并通过 X 服务程序提供的服务在指定的窗口中完成特定的操作 </li></ul><ul><li>X 协议是一个抽象的应用服务协议,包括了终端的输入请求和对 X 服务程序发出的屏幕输出命令,不包括对底层硬件的访问和控制。 X 协议是 X 服务程序和 X 客户程序进行通信的途径 </li></ul>
  64. 73. X Window 的特点 <ul><li>良好的网络支持: X Window 采用了 C/S 网络结构, X Client 和 X Server 可以通过网络来通信,而且有良好的网络透明性。 </li></ul><ul><li>个性化的窗口界面: X Window 并未对窗口界面作统一的规范,程序员可以根据需求自行设计,其中最有名的就是后面将要介绍的 GNOME 与 KDE 。 </li></ul><ul><li>不内嵌于操作系统: X Window 只定义了一个标准,而不属于某个操作系统,因此可在不同的操作系统上运行相同的 X Window 软件 </li></ul>
  65. 74. <ul><li>在 Mac OS 和 Windows ,构件图形界面的功能都做在了操作系统里面,你只能使用那些。这个方法很简单,但是却不灵活。 Unix 和类 Unix 的操作系统没有内建这个功能,要使用 GUI 你就不得不使用窗口系统( X Window )。 </li></ul>
  66. 75. <ul><li>GNOME : GNOME 项目有两个目标:提供一个完整的、易学易用的桌面环境 -GNOME 桌面环境,为程序设计人员提供强大的应用程序开发环境- GNOME 开发平台,用于建立桌面上的应用。 </li></ul><ul><li>KDE :其目的是在 X Window 上建立一个与 MacOS 或者微软的 Windows 类似的完整易用的桌面环境,从而使 UNIX 更接近广大普通用户。 KDE 不仅提供了一个方便易用的超级桌面环境,而且还提供了一套免费的计算开发平台。 </li></ul>
  67. 76. 总结几个概念 <ul><li>DE ( Destop Environment ):桌面环境 </li></ul><ul><ul><li>GNOME 、 KDE (必须在 X Winodw 上运行) </li></ul></ul><ul><li>窗口管理器(必须在 X Winodw 上运行) </li></ul><ul><ul><li>GNOME 的 Enlightenment </li></ul></ul><ul><ul><li>KDE 的 KVM </li></ul></ul><ul><ul><li>TWM : Tab Window Manager for the X Window System </li></ul></ul>
  68. 77. 注意 <ul><li>X Winodw 里的 X Server 只负责显示窗口画面 </li></ul><ul><li>窗口管理器负责选择在哪里放置窗口、移动、改变大小、最大化、最小化等 </li></ul>
  69. 78. 窗口管理器 <ul><li>窗口 </li></ul><ul><li>主题 </li></ul><ul><li>工作区菜单 </li></ul><ul><li>终端窗口 </li></ul>
  70. 79. GNOME 桌面环境 <ul><li>GNOME 是 GNU 网络对象模型环境( GNU Network Object Model Environment )的缩写,它是 GNU 项目的一部分 </li></ul><ul><li>GNOME 操作界面由 GNOME 面板( Panel )和桌面组成 </li></ul>
  71. 80. GNOME 面板的组成 <ul><li>主菜单:主菜单是系统中所有应用程序的起点。 </li></ul><ul><li>程序启动器:是 Linux 应用程序的启动链接,如同 Windows 中的快捷方式。 </li></ul><ul><li>工作区切换器: 可以将 GNOME 的桌面分为相互独立的工作区,每个工作区是桌面的一部分 . </li></ul><ul><li>窗口列表:窗口列表显示了当前工作区上运行着的应用程序的名称。 </li></ul><ul><li>通知区域: Red Hat 网络更新通知工具是通知区域的一部分。它提供了一种简捷的系统更新方式,确保系统时刻使用 Red Hat 的最新勘误和错误修正来更新。 </li></ul><ul><li>插件小程序( Applets ):插件小程序是完成特定任务的小程序。 GNOME 有很多十分有用并且非常有趣的插件小程序,例如,电子邮件检查器、时钟日历、 CPU 和内存情况查看器等。 </li></ul>
  72. 81. 组合面板的内容元素 <ul><li>主菜单、程序启动器、工作区切换器、窗口列表、通知区域、插件小程序都可以看成是 GNOME 面板上的内容元素,它们可以自由组合和排列 ; </li></ul><ul><li>组合主菜单 </li></ul><ul><li>组合程序启动器 </li></ul><ul><li>使用抽屉组合 </li></ul>
  73. 82. 组合面板的属性元素 <ul><li>GNOME 有边缘面板、角落面板、浮动面板、滑动面板和菜单面板 5 种不同属性的面板 </li></ul><ul><li>设置边缘面板、角落面板、浮动面板、滑动面板和菜单面板的属性 . </li></ul>
  74. 83. GNOME 桌面 <ul><li>初始桌面 : 初始桌面包括 “ < 用户名 > 的主目录”、“从这里开始”和“回收站”。 </li></ul><ul><li>root 用户桌面上所保存的所有项目都保存在目录 /root/.gnome-desktop/ 下,其它用户的桌面上所保存的所有项目都位于该用户主目录下的 .gnome-desktop 目录中 . 该目录是个点文件,一般隐藏显示。 </li></ul>
  75. 84. GNOME 桌面 <ul><li>将程序启动器拖放到桌面上 </li></ul><ul><li>把项目从文件管理器窗口拖放到桌面上 </li></ul><ul><li>建立链接 : 两种方法 </li></ul><ul><li>桌面菜单 </li></ul><ul><li>桌面属性的设置 : 背景、屏幕保护程序 . </li></ul><ul><li>工作区切换器属性设置 </li></ul>
  76. 85. GNOME 的窗口管理器 <ul><li>调整窗口大小、移动窗口、最大化、最小化、关闭窗口等操作与 Windows 的对应操作几乎一样 </li></ul><ul><li>与 Windows 下的窗口不同的操作有: </li></ul><ul><ul><li>卷起:窗口卷起后只剩下窗口标题栏可见, GNOME 默认将鼠标在窗口标题栏上双击作为窗口的卷起操作,也可以右单击窗口标题栏,选择【卷起】命令。对于卷起以后的窗口,鼠标双击标题栏或者右单击窗口标题栏,选择【展开】命令可使窗口恢复原样。 </li></ul></ul><ul><ul><li>移动到别的工作区:右单击窗口标题栏,选择“移动到工作区 < 工作区名 >” ,可将该窗口移动到指定的工作区,同时该窗口从原来的工作区消失。 </li></ul></ul><ul><ul><li>复制到别的工作区:右单击窗口标题栏,选择“放在所有工作区上”命令,将该窗口在各个工作区生成一个备份。 </li></ul></ul>
  77. 86. GNOME 的文件管理器 <ul><li>Nautilus 文件管理器主要由菜单栏、工具栏、位置栏、状态栏、侧栏和浏览窗格等组成 。 </li></ul>
  78. 88. 文件管理器的基本操作 <ul><li>选择文件 </li></ul><ul><li>打开文件 </li></ul><ul><li>更改文件名 </li></ul><ul><li>移动和复制文件 </li></ul><ul><li>给文件建立链接 </li></ul><ul><li>删除文件 :文件被删除后都暂时存放到回收站中,回收站的内容存放在用户主目录下的 .Trash 目录下中 </li></ul><ul><li>定位 </li></ul><ul><li>改变文件查看方式 </li></ul><ul><li>排列和布局文件 </li></ul>
  79. 89. 文件管理器的个性化设置 <ul><li>改变鼠标动作的关联 </li></ul>
  80. 90. 文件管理器的个性化设置 <ul><li>改变鼠标动作的关联 </li></ul><ul><li>给文件增加徽标 </li></ul>
  81. 91. 文件管理器的个性化设置 <ul><li>改变鼠标动作的关联 </li></ul><ul><li>给文件增加徽标 </li></ul><ul><li>改变侧栏和浏览窗格的背景或者颜色 </li></ul>
  82. 92. KDE 桌面环境 <ul><li>KDE 从外表上看同 GNOME 几乎相同,也是由面板和桌面组成 </li></ul><ul><li>KDE 是遵守 GNU 的自由软件。在 LGPL 下所有 KDE 库都允许开发 KDE 桌面的程序,所 有 KDE 应用程序得到 GPL 许可, KDE 使用 Qt C++ 跨平台工具包 , 有各自的授权。 </li></ul><ul><li>Qt 的授权允许你免费使用 Qt 来开发 X Windows 下的软件,只要你的原始代码也自由地 被使用。 </li></ul>
  83. 93. KDE 桌面环境 <ul><li>如果你希望你的原始代码不允许修改,你必须获得 Qt 的商业授权 </li></ul><ul><li>Qt 是建造使用者接口的 C++ 基类库。它提供大多数 widgets 、菜单、按钮、 sliders 等 等。 Qt 是一个跨平台库,写的代码可在 Unix 编译,也可在 Windows 编译。 </li></ul>
  84. 94. KDE 面板的组成
  85. 95. KDE 面板 <ul><li>组合 KDE 面板内容元素:可以将 KDE 面板上的内容分为小程序、应用程序按钮、特殊程序按钮和扩展 4 大类。用户可以对这 4 类元素自由组合。 </li></ul><ul><li>设置 KDE 属性 : </li></ul><ul><li>KDE 面板设置控制模块 </li></ul><ul><li>改变 KDE 面板的布局和大小 </li></ul><ul><li>隐藏 KDE 面板和添加隐藏按钮 </li></ul><ul><li>淡化小程序面板把手 </li></ul>
  86. 96. KDE 主菜单 <ul><li>菜单编辑器 </li></ul><ul><li>菜单的编辑 </li></ul><ul><li>为程序定义快捷键 </li></ul><ul><li>菜单的其它属性设置 </li></ul>
  87. 97. KDE 桌面 <ul><li>初始桌面图: 包括起点目录、 floppy 、从这里开始和回收站 。 Floppy 图标用来对软驱进行操作。 </li></ul><ul><li>拖放操作 :拖放操作的来源分为菜单、面板和文件夹。 </li></ul><ul><li>桌面快捷菜单 </li></ul><ul><li>桌面属性的设置 :外观、桌面行为、背景 </li></ul>
  88. 98. KDE 的文件管理器 Konqueror
  89. 99. 文件导航系统 <ul><li>1 )目录树导航 </li></ul><ul><li>2 )多视图导航 </li></ul><ul><li>3 )标签导航 </li></ul><ul><li>4) 书签导航 </li></ul>
  90. 100. Konqueror 的其它功能 <ul><li>Konqueror 和终端的紧密结合 </li></ul><ul><li>Konqueror 的网络功能 </li></ul>
  91. 101. 桌面切换 <ul><li>在字符终端下切换桌面: </li></ul><ul><ul><ul><li>命令: switchdesk KDE|GNOME </li></ul></ul></ul><ul><li>在 X Window 下切换桌面: </li></ul><ul><ul><li>在桌面环境中完成切换选择 </li></ul></ul><ul><ul><li>“ 主菜单 / 系统工具 / 更多系统工具 /Desktop Switching tool ” </li></ul></ul><ul><ul><li>在登录界面实现选择 </li></ul></ul><ul><ul><li>Ctrl+alt+backspace ,重新进入登录界面 </li></ul></ul><ul><li>主题的切换与安装 </li></ul><ul><ul><li>http://www.gnome-look.org </li></ul></ul><ul><ul><li>http://art.gnome.org </li></ul></ul>
  92. 102. vi <ul><li>文本编辑器 vi </li></ul><ul><ul><li>管理 员 至少一定要 会 一 种编辑器 </li></ul></ul><ul><ul><li>vi 的使用: </li></ul></ul><ul><ul><ul><li>一般模式: 移动 、 复制 、 删除 、 黏贴 </li></ul></ul></ul><ul><ul><ul><li>编辑 模式:插入 与 取代文件 </li></ul></ul></ul><ul><ul><ul><li>命令 模式: 查询 、自 动 取代、 保存 等 </li></ul></ul></ul>
  93. 103. vi help <ul><li>h,j,k,l 移动 </li></ul><ul><li>yy 复制 </li></ul><ul><li>dd 刪除 </li></ul><ul><li>p 黏贴 </li></ul><ul><li>o,i,a 插入 </li></ul><ul><li>R,r 取代 </li></ul><ul><li>u 回复 </li></ul><ul><li>/ 查询 </li></ul><ul><li>:%s/x/y/g 自 动 取代 </li></ul><ul><li>:w 保存 </li></ul><ul><li>:q 退出 </li></ul><ul><li>:wq! 保存 強制 退出 </li></ul>
  94. 104. 账号 <ul><li>Linux 系统的账号分为用户账号和组账号两类: </li></ul><ul><li>用户账号:通常一个操作者拥有一个用户账号,每个用户账号有唯一的识别号 UID ( User ID )和自己所属组的识别号 GID ( Group ID )。 </li></ul><ul><li>Linux 系统中可以有两类用户账号: root 用户和普通用户。 </li></ul><ul><li>组账号:是一组用户账号的集合。通过使用组账号,可以设置使一组用户对文件具有相同的权限。 </li></ul>
  95. 105. <ul><li>用户和组的配置信息保存在以下三个文件中: </li></ul><ul><ul><li>/etc/passwd 对所有用户都可读 </li></ul></ul><ul><ul><li>/etc/shadow </li></ul></ul><ul><ul><li>/etc/group </li></ul></ul>
  96. 106. /etc/passwd 文件 <ul><li>每一行存储一个用户的账号信息,每一行可以包含如下域,各域之间以冒号分隔: </li></ul><ul><ul><li>登录名:即用户账号 </li></ul></ul><ul><ul><li>口令:通常是一个“ x” ,表示口令已被加密,加密后的口令存储在 /etc/shadow 文件中。如果是“ *” ,则表示该账号已被停用。 </li></ul></ul><ul><ul><li>UID :每个用户账号都有一个不同的 ID ,它是一个整数。 </li></ul></ul><ul><ul><li>GID :用户所属的组的 ID ,每个组也都具有不同的 ID 。 </li></ul></ul><ul><ul><li>用户信息:这是账号附加的信息,如用户名、电话、住址等,可以使用命令 finger 和 chfn 查询和修改这些信息。 </li></ul></ul><ul><ul><li>主目录:在默认状态下,每个用户都有一个主目录, root 用户的主目录是 /root ,管理员新建立的用户的主目录默认为 /home/< 用户名 > 。 </li></ul></ul><ul><ul><li>登录 shell :设置用户在登录时使用的 shell ,系统默认使用 /bin/bash 。 </li></ul></ul><ul><li>例如: root : x : 0 : 0 : root : /root : /bin/bash </li></ul>
  97. 107. <ul><li>伪 用 户 含 义 </li></ul><ul><li>bin 拥有可执行的用户命令文件 sys 拥有系统文件 </li></ul><ul><li>adm 拥有帐户文件 </li></ul><ul><li>uucp UUCP 使用 </li></ul><ul><li>lp lp 或 lpd 子系统使用 </li></ul><ul><li>nobody NFS 使用 </li></ul>
  98. 108. /etc/shadow <ul><li>etc/shadow 中的记录行与 /etc/passwd 中的一一对应,它由 pwconv 命令根据 /etc/passwd 中的数据自动产生 </li></ul><ul><li>登录名 : 加密口令 : 最后一次修改时间 : 最小时间间隔 : 最大时间间隔 : 警告时间 : 不活动时间 : </li></ul><ul><li>失效时间 : 标志 </li></ul>
  99. 109. /etc/shadow <ul><li>是根据 /etc/passwd 文件产生的,一行存储一个用户的信息,各域之间以冒号分隔: </li></ul><ul><ul><li>用户账号 </li></ul></ul><ul><ul><li>加密的口令密文 </li></ul></ul><ul><ul><li>最后一次修改时间 , 从 1970 年 1 月 1 日到上次口令修改日期的天数。 </li></ul></ul><ul><ul><li>最小间隔时间,口令上次修改后,要过多少天才能再修改。若为 0 表示没有时间限制。 </li></ul></ul><ul><ul><li>最大间隔时间 </li></ul></ul><ul><ul><li>警告时间,如果口令有期限限制,要过期前多少天向用户示警。一般系统默认为 7 天。 </li></ul></ul>
  100. 110. <ul><li>/etc/group 存储所有组账号的数据,一行表示一个组的信息,各域之间以冒号分隔,包括: </li></ul><ul><ul><li>组名 </li></ul></ul><ul><ul><li>x 表示加密的组口令,口令的相关信息存储在 /etc/gshadow 文件中,其形式与 /etc/shadow 相似。 </li></ul></ul><ul><ul><li>组 ID ( GID ),系统生成的组 ID 小于 500 ,管理员新建的第一个组 ID 为 500 ,以后依次递增。 </li></ul></ul><ul><ul><li>该组包含的用户账号列表,以逗号分隔。 </li></ul></ul><ul><ul><li>例如: bin : x : 1 : root , bin , daemon </li></ul></ul>
  101. 111. 用户管理 / 命令 <ul><li>增加用户: adduser [ 选项 ] <newusername> </li></ul><ul><ul><li>-d <dirName> :指定用户主目录,默认情况下,将会在 /home 目录下新建一个与用户名相同的用户主目录。 </li></ul></ul><ul><ul><li>-s <shellName> :指定用户登录时使用的 shell ,默认的 shell 为 /bin/bash 。 </li></ul></ul><ul><ul><li>-g <gName> :指定用户归属的组名。 默认地,每当创建一个新用户的时候,一个与用户名相同的组就会被创建,而这个用户就是该组的成员。( UPG 方案) </li></ul></ul><ul><ul><li>-G < 组列表 > :在 Linux 系统中,一个用户可以属于一个组,也可以属于多个组,其中用户在初始化时属于的组称为主组。如果要让用户属于其它的组,应该使用选项 -G< 组列表 > 。 </li></ul></ul><ul><ul><li>-u <uid> :指定新用户的 UID 。 </li></ul></ul>
  102. 112. <ul><li>设置和修改口令 : passwd [ 用户名 ] </li></ul><ul><li>只有超级用户可以使用“ passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的 passwd 命令修改自己的口令 </li></ul>
  103. 113. 演示 <ul><li>添加一用户,用户名为 user2008 </li></ul><ul><li>修改某密码 </li></ul>
  104. 114. <ul><li>删除用户的命令为 userdel ,该命令的格式为: userdel < 用户名 > </li></ul><ul><li>如果系统不要保存这些文件,可以使用带选项的命令: userdel -r < 用户名 > </li></ul>
  105. 115. <ul><li>修改用户属性 </li></ul><ul><ul><li>usermod –g< 主组名 > -G < 组名 > -d < 用户主目录 > -s < 用户 shell> </li></ul></ul><ul><li>增加用户组 </li></ul><ul><li>groupadd < 新组名 > </li></ul><ul><li>删除用户组 </li></ul><ul><ul><li>groupdel < 组名 > </li></ul></ul><ul><li>修改组成员:直接编辑 /etc/group 文件,将用户名写到对应的组名的后面。 </li></ul>
  106. 116. 图形界面的用户管理
  107. 117. 账号管理和查看命令 <ul><li>whoami 命令的功能在于显示用户自身的用户名。 </li></ul><ul><li>who [ 选项 ] :该命令主要用于查看当前在线的用户情况 </li></ul><ul><li>w 命令 :用于显示登录到系统的用户情况 </li></ul><ul><li>finger 命令可用于查找和显示用户信息,并且在查找后显示指定账号的相关信息 </li></ul><ul><li>chfn 命令能够改变系统存储的用户信息 </li></ul><ul><li>切换用户身份: su - [ 用户名 ] </li></ul>
  108. 118. 更改 Linux 文件拥有者命令 <ul><li>语 法: chown [ -R ] 帐号名称 文件或目录 chown [ -R ] 帐号名称 : 组名 文件 或 目录 示例 : </li></ul><ul><li>[root@test root]# chown games test [root@test root]# ls -l test </li></ul><ul><li>drw-r--r--    1 games     root        0 Jun 20 14:36 test </li></ul><ul><li>[root@test root]# chown –R root:root tmp </li></ul>
  109. 119. 更改 Linux 文件 所 属 群 组 <ul><li>语法 : chgrp 群 组 名 文件 或 目录 示例 : </li></ul><ul><li>[root@test root]# chgrp users test [root@test root]# ls -l </li></ul><ul><li>drw-r--r--    1 root     users        1 Jun 20 14:36 test </li></ul>
  110. 120. 系统安全设置 / 系统管理 <ul><li>BIOS 安全设置 </li></ul><ul><li>安全分区 </li></ul><ul><li>系统文件的权限 </li></ul><ul><li>限制用户资源 </li></ul><ul><li>系统升级 </li></ul>
  111. 121. 系统安全设置 / 用户安全管理 <ul><li>账号安全管理 </li></ul><ul><li>suid 程序 </li></ul><ul><li>口令安全管理 </li></ul><ul><li>自动注销账号 </li></ul>
  112. 122. <ul><li>suid 程序就是在运行的时候可以拥有比自己用户高的权限的用户的权限。 </li></ul><ul><li>假设你有一个程序是属于 nobody 这个用户的,这个程序的功能是要修改一个文件,而这个文件的属性是只有 root 才能修改。所以如果这个程序在以写方式打开该文件的时候肯定出错,提示没有权限。 </li></ul><ul><li>因此使用 chmod u+s 命令给程序授权,这样程序在运行后就会得到 root 的权限,从而就可以修改那个文件了。 最常用的就是 ping 这个命令,就是 suid 程序。 任何用户都可以使用这个命令,但是 ping 里面实际上是使用了 raw_socket ,而 raw_socket 只有 root 用户才可以创建。 所以 ping 命令大都放在 /bin 下,而不是 /usr/bin 下 而且使用 ls -l 察看 ping 的权限,是 -r-sr-xr-x </li></ul>
  113. 123. 系统安全设置 / 网络服务安全管理 <ul><li>关闭不必要的服务 </li></ul><ul><li>禁止响应 ping 命令 </li></ul><ul><li>屏蔽系统信息 </li></ul>
  114. 124. 上机实验 <ul><li>实验内容:书本 219 页实验 1 </li></ul><ul><li>上机地点:院楼 801 , 803 </li></ul><ul><li>用户名: root </li></ul><ul><li>密码: xxxyjsjx </li></ul>
  115. 125. 实验参考 <ul><li>一、修改配置文件的方法 </li></ul><ul><li>( 一 ) 、修改系统级的 PATH 环境变量 1, 编辑 /etc/profile, 文件,添加下面一行 export PATH=$PATH:/path1:/path2:/pahtN 2, 运行该文件 source /etc/profile </li></ul><ul><li>( 二 ) 、修改用户级别的 PATH 环境变量 </li></ul><ul><li>先进入用户目录: #cd /home/aaa #vi .bash_profile 添加同样一行 存盘退出 # souce .bash_profile </li></ul><ul><li>以上一个是全局的 PROFILE 一个是单独用户的 profile </li></ul><ul><li>  </li></ul><ul><li>二、命令行状态下直接修改环境变量 </li></ul><ul><li>修改环境变量,在 bash 下用 export, 在 csh 下用 setenv 。比如:      export   PATH=$PATH:/usr/local/bin  </li></ul>
  116. 126. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  117. 127. 用户管理 / 命令 <ul><li>增加用户: adduser [ 选项 ] <newusername> </li></ul><ul><ul><li>-d <dirName> :指定用户主目录,默认情况下,将会在 /home 目录下新建一个与用户名相同的用户主目录。 </li></ul></ul><ul><ul><li>-s <shellName> :指定用户登录时使用的 shell ,默认的 shell 为 /bin/bash 。 </li></ul></ul><ul><ul><li>-g <gName> :指定用户归属的组名。 默认地,每当创建一个新用户的时候,一个与用户名相同的组就会被创建,而这个用户就是该组的成员。( UPG 方案) </li></ul></ul><ul><ul><li>-G < 组列表 > :在 Linux 系统中,一个用户可以属于一个组,也可以属于多个组,其中用户在初始化时属于的组称为主组。如果要让用户属于其它的组,应该使用选项 -G< 组列表 > 。 </li></ul></ul><ul><ul><li>-u <uid> :指定新用户的 UID 。 </li></ul></ul>
  118. 128. <ul><li>设置和修改口令 : passwd [ 用户名 ] </li></ul><ul><li>只有超级用户可以使用“ passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的 passwd 命令修改自己的口令 </li></ul>
  119. 129. 演示 <ul><li>添加一用户,用户名为 user2008 </li></ul><ul><li>修改某密码 </li></ul>
  120. 130. <ul><li>删除用户的命令为 userdel ,该命令的格式为: userdel < 用户名 > </li></ul><ul><li>如果系统不要保存这些文件,可以使用带选项的命令: userdel -r < 用户名 > </li></ul>
  121. 131. <ul><li>修改用户属性 </li></ul><ul><ul><li>usermod –g< 主组名 > -G < 组名 > -d < 用户主目录 > -s < 用户 shell> </li></ul></ul><ul><li>增加用户组 </li></ul><ul><li>groupadd < 新组名 > </li></ul><ul><li>删除用户组 </li></ul><ul><ul><li>groupdel < 组名 > </li></ul></ul><ul><li>修改组成员:直接编辑 /etc/group 文件,将用户名写到对应的组名的后面。 </li></ul>
  122. 132. 图形界面的用户管理
  123. 133. 更改 Linux 文件拥有者命令 <ul><li>语 法: chown [ -R ] 帐号名称 文件或目录 chown [ -R ] 帐号名称 : 组名 文件 或 目录 示例 : </li></ul><ul><li>[root@test root]# chown games test [root@test root]# ls -l test </li></ul><ul><li>drw-r--r--    1 games     root        0 Jun 20 14:36 test </li></ul><ul><li>[root@test root]# chown –R root:root tmp </li></ul>
  124. 134. 更改 Linux 文件 所 属 群 组 <ul><li>语法 : chgrp 群 组 名 文件 或 目录 示例 : </li></ul><ul><li>[root@test root]# chgrp users test [root@test root]# ls -l </li></ul><ul><li>drw-r--r--    1 root     users        1 Jun 20 14:36 test </li></ul>
  125. 135. 账号管理和查看命令 <ul><li>whoami 命令的功能在于显示用户自身的用户名。 </li></ul><ul><li>who [ 选项 ] :该命令主要用于查看当前在线的用户情况 </li></ul><ul><li>w 命令 :用于显示登录到系统的用户情况 </li></ul><ul><li>finger 命令可用于查找和显示用户信息,并且在查找后显示指定账号的相关信息 </li></ul><ul><li>chfn 命令能够改变系统存储的用户信息 </li></ul><ul><li>切换用户身份: su [ 用户名 ] </li></ul>
  126. 136. 用户的安全管理 <ul><li>限制用户使用资源 </li></ul><ul><ul><li>编辑 /etc/security/limits.conf </li></ul></ul><ul><li>自动注销账号 </li></ul><ul><ul><li>编辑 /etc/profile ,设置 tmout 变量的数值 </li></ul></ul><ul><li>Suid 程序 </li></ul>
  127. 137. <ul><li>suid 程序就是在运行的时候可以拥有比自己用户高的权限的用户的权限。 </li></ul><ul><li>假设你有一个程序是属于 nobody 这个用户的,这个程序的功能是要修改一个文件,而这个文件的属性是只有 root 才能修改。所以如果这个程序在以写方式打开该文件的时候肯定出错,提示没有权限。 </li></ul><ul><li>因此使用 chmod u+s 命令给程序授权,这样程序在运行后就会得到 root 的权限,从而就可以修改那个文件了。 最常用的就是 ping 这个命令,就是 suid 程序。 任何用户都可以使用这个命令,但是 ping 里面实际上是使用了 raw_socket ,而 raw_socket 只有 root 用户才可以创建。 所以 ping 命令大都放在 /bin 下,而不是 /usr/bin 下 而且使用 ls -l 察看 ping 的权限,是 -r-sr-xr-x </li></ul>
  128. 138. 如何去掉程序的 suid 位 <ul><li>find / -perm -4000 查找 </li></ul><ul><li>chmod –s filename 去掉文件的 suid 位 </li></ul>
  129. 139. 存储设备 <ul><li>计算机系统中,所有的存储设备都是以目录树的形式对文件进行管理的 . </li></ul><ul><li>在 Linux 系统中,所有的文件都是在以“ /” 目录为根的一棵“大”目录树中进行管理。 </li></ul><ul><li>如果要使用 USB 存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录树像嫁接一样挂载( mount )到 Linux 系统的“大”目录树中。 </li></ul>
  130. 140. 挂载的文件系统类型 <ul><li>ext 、 FAT 、 ext2 ( extended file system )、 ext3 、 MINIX 、 MSDOS 、 SYSV </li></ul><ul><li>Linux 系统的第一个文件系统是 Minix (文件名不能超过 14 个字符,文件大小不能超过 64MB ) </li></ul><ul><li>ext : 1992 年设计,是第一个专为 linux 设计的文件系统,文件大小可到 2GB ,文件名支持 255 字符,性能不佳 </li></ul><ul><li>ext2 : 1993 年设计,提高性能 </li></ul><ul><li>ext3 :采用日志式文件系统技术( Journalling Filesystem ),目前各个 linux 发行版使用 </li></ul>
  131. 141. <ul><li>Linux 引进 ext 文件系统时有了一个重大的改进:真正的文件系统从操作系统和系统服务中分离出来,在它们之间使用了一个接口层—虚拟文件系统 VFS(Virtual File System) </li></ul>
  132. 142. VFS <ul><li>Linux 系统可以支持多种文件系统,为此,必须使用一种统一的接口,这就是虚拟文件系统 (VFS) 。通过 VFS 将不同文件系统的实现细节隐藏起来,因而从外部看上去,所有的文件系统都是一样的。 </li></ul>
  133. 143. <ul><li>VFS 并不是一个实际的文件系统 </li></ul><ul><li>只存在于内存,系统启动时建立,系统关闭时消亡 </li></ul><ul><li>VFS 功能包括: </li></ul><ul><ul><li>记录可用文件系统的类型 </li></ul></ul><ul><ul><li>将设备同对应的文件系统联系起来 </li></ul></ul><ul><ul><li>处理面向文件的通用操作 </li></ul></ul><ul><ul><li>涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统 </li></ul></ul>
  134. 144. 确定挂载信息 <ul><li>挂载对象的文件系统类型; </li></ul><ul><ul><li>vfat ext2 ext3 iso9660 </li></ul></ul><ul><li>挂载对象的设备名称; </li></ul><ul><ul><li>在 Linux 系统中,设备名称通常都在 /dev 目录下,设备名称的命名是有规则的 ; </li></ul></ul><ul><ul><li>/dev/hda1 /dev/sda2 /dev/fd0 /dev/cdrom </li></ul></ul><ul><li>设备挂载到哪一目录,即挂载点。 </li></ul><ul><ul><li>Linux 系统中有一个 /mnt 目录,专门用作挂载点( mount Point )目录 </li></ul></ul><ul><ul><li>在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则 mount 命令无法正常执行。 </li></ul></ul>
  135. 145. 挂载命令 mount <ul><li>mount [ 选项 ] < 挂载设备名称 > < 挂载点 > </li></ul><ul><li>选项: </li></ul><ul><li>-t 挂载的文件系统 </li></ul><ul><ul><ul><li>例如: </li></ul></ul></ul><ul><ul><ul><li>mount –t ext2 /dev/fd0 /mnt/floppy </li></ul></ul></ul><ul><li>-o [ 参数 = 值 ] ,对于挂载的不同类型的设备可以使用一组不同的参数。 </li></ul><ul><ul><ul><li>mount -o iocharset=cp936 /dev/sda1 /mnt/usb </li></ul></ul></ul>
  136. 146. 挂载设备的过程 <ul><li>查看设备 :使用命令“ fdisk –l” 可以查看系统的存储设备 </li></ul><ul><li>挂载设备 :首先使用 mkdir 命令建立挂载点目录,然后再使用 mount 命令挂载相关设备 </li></ul><ul><li>访问设备 </li></ul><ul><li>卸载设备 :用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。用户必须先执行卸载命令然后再该设备拔出 </li></ul><ul><ul><ul><li>umount [ 挂载点或设备名 ] </li></ul></ul></ul>
  137. 147. 自动挂载 <ul><li>使用配置文件 /etc/fstab 来自动挂载存储设备。 </li></ul><ul><li>文件 /etc/fstab 存放的是系统中的文件系统信息。每个文件系统在文件中都对应一个独立的行 。 fsck 、 mount 、 umoun t 的等命令都利用这个文件 。 </li></ul><ul><li>fstab 每一行为一个分区记录,包含六个域: </li></ul><ul><ul><li><fs_spec> <fs_file> <fs_type> <fs_options> <fs_dump> <fs_pass> </li></ul></ul><ul><ul><li>例如: </li></ul></ul><ul><ul><li>/dev/hda1 /mnt/c vfat iocharset=cp936 0 0 </li></ul></ul>
  138. 148. mount 命令 <ul><li>利用 fstab 文件, mount 还有另外两种使用格式 : </li></ul><ul><ul><li>mount –a </li></ul></ul><ul><ul><li>该命令将文件 /etc/fstab 中提到的所有文件系统,凡没使用 noauto 选项的,一律按照指定的方式自动挂载。该命令一般在系统的启动脚本中执行。 </li></ul></ul><ul><ul><li>mount < 挂载点 > 或者 mount < 挂载设备名称 > </li></ul></ul><ul><ul><li>当挂载 fstab 中提到的文件系统时,可以只指定挂载设备或者只指定挂载点即可完成挂载。 </li></ul></ul>
  139. 149. 图形化挂载工具 <ul><li>执行【主菜单 / 系统工具 / 磁盘管理】 </li></ul>
  140. 150. 磁盘格式化 <ul><li>mkfs [ 选项 ][-t < 文件系统类型 >] [ 设备名称 ] [ 区块数 ] </li></ul><ul><li>说明:把指定的设备格式为指定的文件系统。 </li></ul><ul><ul><li>例如格式化硬盘时: </li></ul></ul><ul><ul><li>mkfs –t ext3 /dev/hda4 </li></ul></ul><ul><ul><li>格式化软盘时,需要指定设备名和区块数,每个区块大约 1000 个字节,一张 1.44MB 的软盘对应 1440 个区块。格式化指令为: </li></ul></ul><ul><ul><li>mkfs –t ext3 /dev/fd0 1440 </li></ul></ul><ul><li>执行菜单【主菜单 / 系统工具 / 软盘格式化器】,打开“ floppy formatter” 窗口 。图形化的格式化界面。 </li></ul>
  141. 151. 声卡 <ul><li>用户可以从声卡的生产厂商获取相应的驱动程序,并按相应的要求进行安装。 </li></ul><ul><li>如果用户无法获取正确的驱动程序,也可以使用两种通用的驱动程序 : </li></ul><ul><ul><li>OSS (开放声音系统),它是一个商业声卡驱动程序,需要花钱购买,否则每次启动后,只可以免费使用 240 分钟; </li></ul></ul><ul><ul><li>ALSA (高级 Linux 声音架构),是自由软件,可以免费使用。 </li></ul></ul>
  142. 152. 安装 OSS 声卡驱动程序 <ul><li>可以从 http:// www.opensound.com / 下载最新的 OSS 驱动程序 ,假设下载了 ossLinux393q-2217-UP.tar.gz </li></ul><ul><li>解压缩源文件: </li></ul><ul><li>运行安装文件:以 root 用户身份运行 oss-install 文件 </li></ul><ul><li>声卡驱动命令:安装完毕后,在默认的安装目录 /usr/local/bin 里有一个 soundon 命令,它用来打开 oss 驱动,命令 soundoff 用于关闭 oss 驱动。 </li></ul>
  143. 153. 安装 ALSA 声卡驱动程序 <ul><li>ALSA 源程序文件需要如下 4 个软件包,用户可以到 http://www.heihei.com/ 下载: </li></ul><ul><li>alsa-driver-0.5.9.tar.gz :驱动程序包,包括所支持的声卡的驱动程序。 </li></ul><ul><li>alsa-conf-0.4.3b.tar.gz :配置工具包,能够自动配置软件包中的配置文件。 </li></ul><ul><li>alsa-lib-0.5.9.tar.gz :专用库函数包。 </li></ul><ul><li>alsa-utils-0.5.9.tar.gz :工具软件包,提供支持混音调制的工具软件。 </li></ul>
  144. 154. <ul><li>安装声卡驱动程序库:对文件 alsa-driver-0.5.9.tar.gz ,依次执行: </li></ul><ul><ul><li>1 )解压缩 </li></ul></ul><ul><ul><li>2 ) ./configure # 自动配置命令 </li></ul></ul><ul><ul><li>3 ) make install # 安装声卡驱动库 </li></ul></ul><ul><ul><li>4 ) ./snddevices # 这是一个脚本程序,在 /dev 目录下自动创建相关的声卡设备。 </li></ul></ul><ul><li>配置声卡驱动程序 </li></ul><ul><li>安装混音程序 </li></ul>
  145. 155. <ul><li>鼠标 :在终端输入命令 /usr/sbin/mouseconfig ,可以打开鼠标配置界面 </li></ul><ul><li>在 X Window 下,选择【主菜单 / 系统设置 / 鼠标】打开图形界面的鼠标配置窗口 </li></ul>
  146. 156. 显卡 <ul><li>首先找到显卡支持 Linux 的驱动程序,绝大多数的 3D 显卡都已有了支持 Linux 的驱动程序,用户可以从各显卡厂商的网站或 Linux 的相关站点上去寻找。 </li></ul><ul><li>如果用户能够进入 X Window ,但是无法使用显卡的特殊功能,那么可以通过图形界面的配置工具配置显卡。 </li></ul><ul><li>选择【主菜单 / 系统配置 / 显示】,弹出显示设置窗口 。 </li></ul>
  147. 157. 打印机 <ul><li>获取打印机驱动程序 </li></ul><ul><li>阅读安装文档 </li></ul><ul><li>安装驱动程序 </li></ul><ul><li>配置打印机 ,向系统添加打印机 </li></ul><ul><li>测试打印机 </li></ul>
  148. 158. 上机实验 <ul><li>开机、登录 </li></ul><ul><li>重启 </li></ul><ul><li>ls 查看目录,进入 tmp 目录,在 tmp 下创建 test 目录,进入 test 目录,用 touch 创建一个文件,以自己学号命名,用 ls 查看该文件属性 </li></ul><ul><li>压缩以上文件 </li></ul><ul><li>解压以上文件 </li></ul><ul><li>删除以上文件,删除以上目录 </li></ul>
  149. 159. 上机实验 <ul><li>创建一个用户,以自己的学号为用户名,密码自由设定。 </li></ul><ul><li>在 linux 中使用 U 盘 </li></ul><ul><li>把任意一个文件 copy 进 U 盘 </li></ul>
  150. 160. 使用 usb 参考 <ul><li>P79 </li></ul>
  151. 161. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  152. 162. 关于硬连接、软连接、复制 <ul><li>硬连接:给文件一个副本(别名),同时建立两者之间的连接关系,修改其中一个,与其连接的文件同时被修改,如果删除其中一个,其余的文件不受影响。磁盘上只有一份数据。 </li></ul><ul><li>软连接:只是一个快捷方式,删除了原文件,这个连接文件就没用了 </li></ul><ul><li>复制:磁盘上会多一份数据 </li></ul>
  153. 163. 网络接口配置 <ul><li>配置网络接口可以使用三种不同的工具来完成: </li></ul><ul><ul><li>使用网络接口配置程序 netconfig </li></ul></ul><ul><ul><li>使用图形配置工具 </li></ul></ul><ul><ul><li>使用终端命令 ifconfig </li></ul></ul>
  154. 164. 使用网络接口配置程序 netconfig <ul><li>在终端中输入命令 netconfig </li></ul>
  155. 165. 使用图形配置工具 <ul><li>【主菜单 / 系统工具 / 网络设备控制】 </li></ul>
  156. 167. 使用终端命令 ifconfig <ul><li>ifconfig < 设备名 > <IP 地址 > netmask < 掩码 > </li></ul><ul><ul><li>例如: </li></ul></ul><ul><ul><li>ifconfig eth0 192.168.15.11 netmask 255.255.255.0 </li></ul></ul><ul><ul><li>fconfig eth1 21.156.299.13 netmask 255.255.255.0 </li></ul></ul><ul><ul><li>ifconfig eth0:0 192.168.17.21 netmask 255.255.255.0 </li></ul></ul>
  157. 168. 网络接口的启动与禁用 <ul><li>在网络配置界面中,通过“激活”或者“解除”按钮可以启动或者禁用网络接口, </li></ul><ul><li>网络控制程序 network </li></ul><ul><ul><li>/etc/rc.d/init.d/network start|stop|restart </li></ul></ul><ul><li>命令 ifconfig : </li></ul><ul><ul><li>ifconfig < 设备名 > [up|down] </li></ul></ul><ul><li>命令 ifup/ifdown </li></ul><ul><ul><li>ifup eth0 </li></ul></ul><ul><ul><li>ifdown eth0 </li></ul></ul>
  158. 169. 网络接口的启动与禁用 <ul><li>执行【主菜单 / 系统工具 / 网络设备控制】,打开 “网络设备控制”窗口 </li></ul>
  159. 170. 网络接口的查看 <ul><li>使用终端命令 ifconfig 方便地查看系统目前所有活跃的网络接口的详细信息 </li></ul><ul><li>例如: </li></ul><ul><ul><li>ifconfig </li></ul></ul><ul><ul><li>ifconfig eth0 </li></ul></ul>
  160. 171. 常用网络命令 <ul><li>网络测试命令 : </li></ul><ul><li>ping [ 选项 ] < 目的主机名或 IP 地址 > </li></ul><ul><li>ping 大数据包 </li></ul><ul><ul><li>-c num 发送 num 个数据包后停止 </li></ul></ul><ul><ul><li>-s bytes 默认值是 64 字节 </li></ul></ul><ul><li>显示数据包经过路由的命令 traceroute </li></ul><ul><li>traceroute < 目的主机 IP 或域名 > </li></ul>
  161. 172. 管理路由表命令 route <ul><li>显示路由表内容 : 不加任何参数的 route 命令显示本机路由表的内容, </li></ul><ul><li>添加 / 删除路由记录 </li></ul><ul><ul><li>route add|del –net < 网络号 > netmask < 网络掩码 > dev < 设备名 > </li></ul></ul><ul><ul><li>route add –net 200.1.1.0 netmask 255.255.255.0 dev eth0 </li></ul></ul><ul><li>添加或者删除默认网关: </li></ul><ul><ul><li>route add|del default gw < 网关名或网关 IP> </li></ul></ul><ul><ul><li>例如: </li></ul></ul><ul><ul><ul><li>route add default gw 200.1.1.254 </li></ul></ul></ul><ul><ul><ul><li>route del default gw 200.1.1.254 </li></ul></ul></ul>
  162. 173. <ul><li>远程登录命令 </li></ul><ul><li>telnet < 主机名 /IP> </li></ul><ul><li>rlogin <B 主机名或 IP 地址 > </li></ul>
  163. 174. 网络相关配置文件 设定主机的不同端口的网络服务 /etc/services 定义使用的网络互联协议及协议号 /etc/protocols 域名服务器设置文件 /etc/resolv.conf 域名或主机名与 IP 地址的映射文件 /etc/hosts 域名解析的控制文件 /etc/host.conf 此目录下的文件是系统启动时用来初始化网络的一些信息,例如:第一块以太网卡对应的文件为 ifcfg-eth0 /etc/sysconfig/network-scripts/* 最基本的网络信息,系统启动时读取该文件 /etc/sysconfig/network 功能 配置文件名
  164. 175. /etc/sysconfig/network <ul><li>对本机的网络进行配置,常见的几个配置项如下: </li></ul><ul><ul><li>NETWORKING :值为 yes 或 no ,表示主机是否支持网络功能。 </li></ul></ul><ul><ul><li>HOSTNAME :主机名(即域名)。 </li></ul></ul><ul><ul><li>GATEWAY: 默认网关。 </li></ul></ul><ul><ul><li>FORWARD_IPV4: 设置本机是否允许转发 IPV4 的数据包。 </li></ul></ul><ul><ul><li>DOMAINNAME: 此台主机所属的网络域。 </li></ul></ul><ul><ul><li>GATEWAYDEV: 连接网关的设备,例如 eth0 ,如果是拨号用户则设为 ppp0 。 </li></ul></ul>
  165. 176. /etc/sysconfig/network-scripts/ <ul><li>DEVICE=eth0 // 设备名称 </li></ul><ul><li>ONBOOT=yes // 起动时是否起动该设备,省略该行表示 yes </li></ul><ul><li>BOOTPROTO=none // 启动协议 ,none 表示使用用户设置的 ip 地址 ,dhcp 表示从 dhcp 获得 ip 地址。省略该行表示使用设置的 IP 地址。 </li></ul><ul><li>IPADDR=192.168.14.11 //IP 地址 </li></ul><ul><li>NETMASK=255.255.255.0 // 子网掩码 </li></ul><ul><li>BROADCAST=192.168.14.255// 广播地址 , </li></ul><ul><li>NETWORK=192.168.14.0 // 网络地址 </li></ul>
  166. 177. 域名解析配置文件 /etc/host.conf <ul><li>order hosts,bind </li></ul><ul><li>multi on </li></ul><ul><li>nospoof on </li></ul>
  167. 178. 主机名列表文件 /etc/hosts <ul><li>IP 地址 主机名 别名 </li></ul><ul><ul><li>例如: </li></ul></ul><ul><ul><li>192.168.14.15 qq.yys.com qq </li></ul></ul>
  168. 179. 域名服务器设置文件 /etc/resolv.conf <ul><li>nameserver <DNS 服务器 IP> </li></ul><ul><li>domain < 域名 > </li></ul><ul><li>search < 域名列表 > </li></ul>
  169. 180. 协议定义文件 /etc/protocols <ul><li>协议名称 协议号 别名 </li></ul><ul><ul><li>例如: </li></ul></ul><ul><ul><li>tcp 6 TCP </li></ul></ul><ul><ul><li>udp 17 UDP </li></ul></ul>
  170. 181. 网络服务列表文件 /etc/services <ul><li>列出了系统支持的服务名称、服务使用的端口号和协议类型、服务的别名、功能注释等。 </li></ul><ul><ul><li>例如 </li></ul></ul><ul><ul><li>http 80/tcp www www-http #WorldWideWeb HTTP </li></ul></ul>
  171. 182. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  172. 183. 网络服务管理工具 <ul><li>/etc/services 文件列出了 Linux 系统支持的所有服务的名称 </li></ul><ul><li>介绍三种不同的管理工具 </li></ul><ul><li>网络进程服务程序 xinetd </li></ul>
  173. 184. 图形界面的管理工具 <ul><li>在 X Window 下执行【主菜单 / 系统配置 / 服务器设置 / 服务】 </li></ul>
  174. 185. 文本界面的管理工具 <ul><li>在终端中 </li></ul><ul><li>输入命令 </li></ul><ul><li>ntsysv </li></ul>
  175. 186. 命令行界面的管理工具 <ul><li>命令 chkconfig 用于检查和设置系统的各种服务 </li></ul><ul><ul><li>添加指定的新服务: chkconfig --add 服务名 </li></ul></ul><ul><ul><li>删除指定服务: chkconfig --del 服务名 </li></ul></ul><ul><ul><li>显示所有或指定服务,以及他们在每个运行级别是否启动等: </li></ul></ul><ul><ul><ul><li>chkconfig --list 或 chkconfig --list [ 服务名 ] </li></ul></ul></ul><ul><ul><li>检查指定服务的状态 : chkconfig 服务名 </li></ul></ul><ul><ul><li>改变服务的运行级别及启动信息: </li></ul></ul><ul><ul><ul><li>chkconfig [--level 运行级 ] 服务名 [ 状态 ] </li></ul></ul></ul>
  176. 187. <ul><li>终端命令 service 用于设置网络服务的当前状态: </li></ul><ul><ul><li>service 服务名 [start|stop|restart] </li></ul></ul><ul><li>管理员可以通过查看当前的进程树命令 pstree 来获知系统正在运行哪些服务 : </li></ul><ul><ul><li>pstree </li></ul></ul>
  177. 188. 超级服务器 xinetd <ul><li>支持对 TCP 、 UDP 、 RPC 服务的管理 </li></ul><ul><li>可以实施基于时间段的访问控制 </li></ul><ul><li>功能完备的 log 功能,可以记录连接成功、连接失败的行为 </li></ul><ul><li>能够有效地防止拒绝服务( DoS )的攻击 </li></ul><ul><li>能够限制同时运行的同一类型的服务器的数目 </li></ul><ul><li>能够限制 log 文件大小 </li></ul><ul><li>能够将某个服务绑定在特定的系统接口上,从而实现只能允许私有网络访问某项服务。 </li></ul><ul><li>能够实现作为其它系统的代理。 </li></ul>
  178. 189. 守护进程原理 <ul><li>在 Cl ie nt/Server 模式下。服务器监听( Listen )在一个特定的端口上等待客户连接。连接成功后服务器和客户端通过端口进行数据通信。守护进程的工作就是打开一个端口,并且等待( Listen )进入连接。 </li></ul><ul><li>如果客户端产生一个连接请求,守护进程就创建( Fork )一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。 </li></ul>
  179. 190. 独立的守护进程 <ul><li>独立运行的守护进程由 init 脚本负责管理,所有独立运行的守护进程的脚本在 /etc/rc.d/init.d/ 目录下。 </li></ul><ul><li>系统服务都是独立运行的守护进程包括: syslogd 和 cron 等。 </li></ul><ul><li>运行独立的守护进程工作方式称作: stand - alone 。它是 Unix 传统的 C/S 模式的访问模式。服务器监听( Listen )在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建( Fork )一个子服务器响应这个连接,而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。 </li></ul>
  180. 192. <ul><li>Web 服务器 Ap ache 和邮件服务器 Sendmail 、域名服务器 Bind 应用独立守护进程模式启动。 </li></ul><ul><li>因为这些负载很大服务器上,预先创子服务器,可以通过客户的服务速度。 </li></ul>
  181. 193. Xinetd 模式 <ul><li>从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。 </li></ul><ul><li>为了解决这个问题, Linux 引进了“网络守护进程服务程序”的概念。 Redhat Linux 9.0 使用的网络守护进程是 xinted ( eXtended InterNET daemon )。和 stand - alone 模式相比 xinted 模式也称 Internet Super - Server (超级服务器)。 </li></ul><ul><li>xinetd 能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。 </li></ul><ul><li>可以把 xinetd 看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。 </li></ul>
  182. 195. <ul><li>运行单个 xinetd 就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时, xinetd 想要频繁启动对应的网络服务进程,反而会导致系统性能下降。 </li></ul>
  183. 196. 超级服务器 xinetd <ul><li>需要配置文件: </li></ul><ul><ul><li>/etc/xinetd.conf :控制 xinetd 程序运行的配置文件。其中,提供了所有服务的缺省配置。 </li></ul></ul><ul><ul><li>/etc/xinetd.d/* :该目录包括所有由 xinetd 程序启动的服务的配置文件,每个服务都有自己单独的配置文件,配置文件名与服务名一致。 </li></ul></ul>
  184. 197. <ul><li>系统默认的 /etc/xinetd.conf 文件内容如下: </li></ul><ul><li># Simple configuration file for xinetd </li></ul><ul><li># </li></ul><ul><li># Some defaults, and include /etc/xinetd.d/ </li></ul><ul><li>defaults </li></ul><ul><li>{ </li></ul><ul><ul><li>Instances = 60 </li></ul></ul><ul><ul><li>log_type = SYSLOG authpriv </li></ul></ul><ul><ul><li>log_on_success = HOST PID </li></ul></ul><ul><ul><li>log_on_failure = HOST </li></ul></ul><ul><ul><li>cps = 25 30 </li></ul></ul><ul><li>} </li></ul>
  185. 198. /etc/xinetd.d 目录 <ul><li>service telnet </li></ul><ul><li>{ </li></ul><ul><ul><li>disable =no # 表示允许 xinetd 启动本项服务 </li></ul></ul><ul><ul><li>flags =REUSE # 表示当中断或重启 xinetd 时, TCP/IP Socket 可重用 </li></ul></ul><ul><ul><li>socket_type =stream # 表示使用 TCP 的 Socket 类型 </li></ul></ul><ul><ul><li>wait =no # 表示该服务提供多线程功能 </li></ul></ul><ul><ul><li>user =root # 设置进程的 UID ,由 root 用户操作 </li></ul></ul><ul><ul><li>server =/usr/sbin/in.telnetd # 设置服务程序文件 </li></ul></ul><ul><ul><li>log_on_failure+=USERID # 表示当连接失败时,系统除记录 /etc/xinetd.conf 文件中设置的内容外,还需记录用户 ID 。 </li></ul></ul><ul><li>} </li></ul>
  186. 199. 演示一 <ul><li>配置 telnet 服务 </li></ul><ul><li>编辑 /etc/xinetd.d/telnet </li></ul><ul><li>service telnet </li></ul><ul><li>{ </li></ul><ul><li>…… </li></ul><ul><li>disable=yes ( 这里要改为 no) </li></ul><ul><li>… .. </li></ul><ul><li>} </li></ul><ul><li>保存退出 </li></ul><ul><li>重新启动服务 service xinetd restart </li></ul>
  187. 200. vsFTPd 服务器 <ul><li>FTP 是一种文件传输协议,它实现了服务器与客户机之间的文件传输和资源的共享。 </li></ul><ul><li>vsFTPd ( very secure FTP daemon )是一个功能强大的 FTP 服务器,能运行在大部分 UNIX 类作系统上,支持很多其他的 FTP 服务器不支持的特征: </li></ul><ul><ul><li>支持虚拟 IP </li></ul></ul><ul><ul><li>支持虚拟用户 </li></ul></ul><ul><ul><li>可以独立操作或者由 xinetd 管理 </li></ul></ul><ul><ul><li>可以对每个用户进行配置 </li></ul></ul><ul><ul><li>带宽限制 </li></ul></ul><ul><ul><li>支持 IPv6 </li></ul></ul><ul><ul><li>支持通过 SSL 的加密 </li></ul></ul><ul><ul><li>高速 </li></ul></ul>
  188. 201. 安装 <ul><li>下载源代码文件,并将文件解压缩 </li></ul><ul><li>编译源代码: make </li></ul><ul><li>为 vsftpd 的运行准备条件 </li></ul><ul><ul><li>mkdir /var/ftp/ </li></ul></ul><ul><ul><li>useradd -d /var/ftp ftp </li></ul></ul><ul><ul><li>chown root.root /var/ftp </li></ul></ul><ul><ul><li>chmod og-w /var/ftp </li></ul></ul><ul><li>将可执行文件安装到 Linux 的系统目录中 </li></ul>
  189. 202. 启动 <ul><li>vsFTPd 也可以工作在两种模式:一种是自己启动运行的独立工作模式,另一种是借助 xinetd 管理的工作模式。 </li></ul><ul><li>独立工作模式 :在 vsFTPd 的配置文件 /etc/vsftpd/vsftpd.conf 中,设置选项“ listen=YES” ,使用服务管理工具操作 vsftpd 程序了。 </li></ul><ul><li>借助 xinetd 管理的工作模式:将前面的选项设置为“ listen=NO” ,并配置 /etc/xinetd.d/vsftpd 文件(以前的模式) </li></ul>
  190. 203. <ul><li>vsFTPd 的配置文件有三个: </li></ul><ul><li>/etc/vsftpd/vsftpd.conf : vsFTPd 的主配置文件 </li></ul><ul><li>/etc/vsftpd.ftpusers :vsFTPd 的访问控制 </li></ul><ul><li>/etc/vsftpd.user_list: </li></ul>
  191. 204. vsftpd.conf <ul><li>anonymous_enable=YES // 允许匿名登录 </li></ul><ul><li>local_enable=YES // 允许本地用户登录 </li></ul><ul><li>write_enable=YES // 开放本地用户的写权限 </li></ul><ul><li>dirmessage_enable=YES // 当切换目录时,显示该目录的信息。 </li></ul><ul><li>connect_from_port_20=YES // 使用 FTP 数据端口 20 的连接请求 </li></ul><ul><li>userlist_enable=YES // 与前面介绍的 vsftpd.user_list 配置文件有关,后面介绍 </li></ul><ul><li>listen=YES // 是否允许 vsFTPd 运行在独立启动模式;如果值为 NO ,则需要使用其它软件启动 vsFTPd 。 </li></ul><ul><li>tcp_wrappers=YES </li></ul>
  192. 205. <ul><li>userlist_enable 用法: YES/NO 若是启动此功能,则会读取 /etc/vsftpd.user_list 当中的使用者名称。此项功能可以在询问密码前就出现失败讯息,而不需要检验密码的程序。默认值为关闭。 userlist_deny 用法: YES/NO 这个选项只有在 userlist_enable 启动时才会被检验。如果将这个选项设为 YES ,则在 /etc/vsftpd.user_list 中的使用者将无法登入﹔ 若设为 NO , 则只有在 /etc/vsftpd.user_list 中的使用者才能登入。而且此项功能可以在询问密码前就出现错误讯息,而不需要检验密码的程序。 </li></ul>
  193. 206. 应用实例 <ul><li>匿名登录: anonymous_enable=YES </li></ul><ul><li>本地用户登录: </li></ul><ul><ul><li>1 )允许登录 </li></ul></ul><ul><ul><ul><li>为使用 FTP 的用户在本地建立账号 </li></ul></ul></ul><ul><ul><ul><li>在 vsftpd.conf 中设置配置项: local_enable=YES </li></ul></ul></ul><ul><ul><li>2) 上传文件 : 在 vsftpd.conf 中设置配置项: write_enable=YES </li></ul></ul>
  194. 207. 演示二 <ul><li>配置 vsftp ,按照独立模式配置 </li></ul>
  195. 208. 使用 xinetd 模式配置 vsftp--- 第一步 <ul><li>修改 /etc/vsftpd/vsftpd.conf 将 listen=YES 改为 listen=NO </li></ul>
  196. 209. 使用 xinetd 模式配置 vsftp--- 第二步 <ul><li>新增一个文件: /etc/xinetd.d/vsftpd 内容如下: service vsftpd { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd port = 21 log_on_success += PID HOST DURATION log_on_failure += HOST } </li></ul><ul><li>重启 xinetd </li></ul>
  197. 210. <ul><li>3 )访问控制 </li></ul><ul><li>限制指定的本地用户不能访问,而其它本地用户可以访问。 </li></ul><ul><ul><li>userlist_enable= YES </li></ul></ul><ul><ul><li>userlist_deny= YES </li></ul></ul><ul><ul><li>userlist_file= /etc/vsftpd.user_list </li></ul></ul><ul><li>限制指定的本地用户可以访问,而其它本地用户不可以访问。 </li></ul><ul><ul><li>userlist_enable= YES </li></ul></ul><ul><ul><li>userlist_deny= NO </li></ul></ul><ul><ul><li>userlist_file= /etc/vsftpd.user_list </li></ul></ul><ul><li>无论何时都禁止指定的本地用户访问服务器 </li></ul><ul><ul><li>在 /etc/vsftpd.ftpusers 配置文件中保存了一个用户列表,如果哪个用户名在这个列表中,它就不能通过网络进行 FTP 登录。 </li></ul></ul>
  198. 211. DNS <ul><li>DNS ( Domain Name System )是一个分布式数据库,本地负责控制整个分布式数据库的部分段,每一段中的数据通过客户 / 服务器模式在整个网络上均可存取,通过采用复制技术和缓存技术,在保证整个数据库可靠的同时,又拥有良好的性能。 </li></ul><ul><li>DNS 的数据库的结构是一个倒立的树状结构,根的名字用空字符串“”来表示,但在文本中用“ .” 来书写。树的每一个节点都表示整个分布式数据库中的一个分区(域),每个域可再进一步划分成子分区(域),每个域都有一个标签( LABEL ),标明了它与父域的关系。在 DNS 中,完整域名是一个从该域到根之间路径上的标签序列,以“ .” 分隔这些标签。 </li></ul>
  199. 212. 域名解析的工作原理主要由以下几步实现: <ul><li>客户机将域名查询请求发送到本地 DNS 服务器,服务器在本地数据库中查找客户机要求的映射。 </li></ul><ul><li>如果不能在本地找到客户机查询的信息,将客户机请求发送到根域名服务器。根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的服务器的地址返回给客户机的 DNS 服务器。 </li></ul><ul><li>客户机的 DNS 服务器利用根域名服务器解析的地址访问下一级 DNS 服务器,得到维护再下一级域名的 DNS 服务器的地址。 </li></ul><ul><li>按照上述方法递归地逐级接近查找目标,最后在维护目标域名的 DNS 服务器上找到相应的 IP 地址信息。 </li></ul><ul><li>客户机的本地 DNS 服务器将查询结果返回客户机。 </li></ul><ul><li>客户机利用从本地 DNS 服务器查询得到的 IP 地址访问目标主机。 </li></ul>
  200. 213. 配置实例 <ul><li>myoffice.myschool.org </li></ul>192.168.14.11 shao.myoffice.myschool.org 主机 192.168.14.15 jing.myoffice.myschool.org 主机 192.168.14.16 zhao.myoffice.myschool.org 主机 192.168.14.16 ftp.myoffice.myschool.org FTP 服务器 192.168.14.16 www.myoffice.myschool.org Web 服务器 192.168.14.16 mail.myoffice.myschool.org 邮件服务器 192.168.14.12 dns.myoffice.myschool.org 域名服务器 IP 地址 域名 功能
  201. 214. 配置 将 IP 地址映射为主机名的区文件 /var/named/14.168.192.in-addr.arpa.zone 将主机名映射为 IP 地址的区文件 /var/named/myoffice.myschool.org.zone 用户配置的区文件 用于回环 IP 地址 (127.0.0.1 ) 到本机名的映射 /var/named/0.0.127.in-addr.arpa.zone 本地主机正向解析 /var/named/localhost.zone localhost 区文件(默认) 根域名服务器的配置信息 /var/named/named.ca 根域名服务器指向文件 设置一般的 named 参数,指定该服务器使用的域数据库的信息源 /etc/named.conf 主配置文件 说明 文件名
  202. 215. 演示三 <ul><li>配置 dns 服务 </li></ul>
  203. 216. 实验内容 1 <ul><li>配置 telnet 服务 </li></ul><ul><li>1 、为 linux 配置一 ip 地址,并与隔壁的机器协商配置同一段的 ip 地址,即两台机器采用同一段 ip 地址,然后互相 ping 通; </li></ul><ul><li>2 、在本机以自己学号创建用户,并给予密码; </li></ul><ul><li>3 、编辑 /etc/xinetd.d/telnet service telnet </li></ul><ul><li>{ </li></ul><ul><li>…… </li></ul><ul><li>disable=yes ( 这里要改为 no) </li></ul><ul><li>… .. </li></ul><ul><li>} </li></ul><ul><li>保存退出 </li></ul><ul><li>4 、重新启动服务 service xinetd restart </li></ul><ul><li>5 、从另一台机器 telnet 到本机 </li></ul><ul><li>6 、把第 3 步当中的 yes 改回 no ,保存并退出,并重启服务 </li></ul>
  204. 217. 实验内容 2—— 配置 vsftp 服务 <ul><li>根据实验内容 1 的网络情况,默认已经安装了 vsftp ,使用 service vsftpd restart 启动服务 </li></ul><ul><li>使用实验内容 1 中自己创建的用户进行登录 </li></ul><ul><ul><li>如 创建的是 test 用户,本机或另外一台机器命令行输入 ftp X.X.X.X ,提示输入用户名和密码 </li></ul></ul><ul><li>尝试修改 vsftp 的三个配置文件,修改后必须重启服务 </li></ul><ul><li>使用命令行上传下载文件 </li></ul>
  205. 218. <ul><li>假设两台机器 ip 地址为 10.1.3.9 和 10.1.3.10 </li></ul><ul><li>在 10.1.3.9 有 jack 用户,启动 ftp 服务后,在 10.1.3.10 机器终端输入命令 </li></ul><ul><ul><li>ftp 10.1.3.9 </li></ul></ul><ul><ul><li>这时会提示输入用户名和密码,这里假设使用 jack 用户登录,登录 ftp 后当前目录为 /home/jack ,用 ls 看有何文件 </li></ul></ul><ul><ul><li>lcd /tmp ( 把客户机目录切换到 tmp 下 ) </li></ul></ul><ul><ul><li>bin (使用二进制模式传输文件) </li></ul></ul><ul><ul><li>get filename 或 put filename </li></ul></ul><ul><ul><li>bye </li></ul></ul>
  206. 219. Linux 系统应用与程序设计 主讲:邝颖杰 电邮: [email_address]
  207. 220. 主要内容 <ul><li>Shell 的作用 </li></ul><ul><li>Shell 程序的编辑和运行 </li></ul><ul><li>基于 Bash 的 Shell 程序设计 </li></ul><ul><ul><li>变量声明 </li></ul></ul><ul><ul><li>表达式 </li></ul></ul><ul><ul><li>条件判断 </li></ul></ul><ul><ul><li>控制结构 </li></ul></ul><ul><ul><li>参数访问 </li></ul></ul>
  208. 221. Shell 的作用 <ul><li>shell 是用户和系统内核之间的接口程序 </li></ul><ul><li>shell 是命令解释器 </li></ul><ul><li>在本章中, shell 指 linux 的终端 即解释用户命令和 shell 程序的文字终端 </li></ul>用户 硬件 shell 操作系统 图形界面 其它用户界面
  209. 222. linux 下的 shell <ul><li>用户使用 shell 的设定 </li></ul><ul><ul><li>通过查看 /etc/passwd 文件可以查看用户使用的 shell 类型 </li></ul></ul><ul><ul><li>例子: /etc/passwd 部分节选 </li></ul></ul>webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin gdm:x:42:42::/var/gdm:/sbin/nologin htt:x:100:101:IIIMF Htt:/usr/lib/im:/sbin/nologin tom:x:500:500:tom:/home/tom:/bin/bash # 可见, tom 用户使用的 shell 为 bash
  210. 223. linux 下的 shell <ul><li>linux 下的 shell </li></ul><ul><ul><li>通过 cat /ect/shells 命令查看安装的 shell </li></ul></ul>shell 及路径 查看 shell 的命令
  211. 224. shell 程序 <ul><li>Shell 程序的特点及用途: </li></ul><ul><ul><li>shell 程序可以认为是将 shell 命令按照控制结构组织到一个文本文件中,批量的交给 shell 去执行 </li></ul></ul><ul><ul><li>不同的 shell 解释器使用不同的 shell 命令语法 </li></ul></ul><ul><ul><li>shell 程序解释执行,不生成可以执行的二进制文件 </li></ul></ul><ul><ul><li>可以帮助用户完成特定的任务,提高使用、维护系统的效率 </li></ul></ul><ul><ul><li>了解 shell 程序可以更好的配置和使用 linux </li></ul></ul>
  212. 225. <ul><li>Shell 使用解释型语言,不需重新编译 </li></ul><ul><li>它适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和可移植性 </li></ul><ul><li>它不适合用来完成时间紧迫型和处理器忙碌型的任务 </li></ul>
  213. 226. 基于 bash 的 shell 程序 <ul><li>简单程序示例 </li></ul>greeting.sh echo &quot;Programme Ends.&quot; 12 say_hello 11 echo &quot;Programme Starts Here.....&quot; 10 } 9 echo &quot;Hello $name&quot; 8 read name 7 echo &quot;Enter Your Name,Please. :&quot; 6 { 5 function say_hello() 4 #a Function 3 #a Simple shell Script Example 2 #!/bin/bash 1 解释 输出提示,提示程序结束 调用函数 程序开始的第一条命令,输出提示信息 函数结束 输出 读入用户的输入到变量 name echo 命令输出字符串 函数开始 以 functin 开始,定义函数 同上 以 # 开始,其后为程序注释 以 #! 开始,其后为使用的 shell
  214. 227. 如何执行 <ul><li>可以使用 /bin/sh filename </li></ul><ul><li>或给该文件属性添加执行权限,然后直接执行 </li></ul>
  215. 228. 基于 bash 的 shell 程序 <ul><li>程序编译和运行过程 </li></ul><ul><ul><li>一般步骤: </li></ul></ul><ul><ul><ul><li>编辑文件 </li></ul></ul></ul><ul><ul><ul><li>保存文件 </li></ul></ul></ul><ul><ul><ul><li>将文件赋予可以执行的权限 </li></ul></ul></ul><ul><ul><ul><li>运行及排错 </li></ul></ul></ul><ul><ul><li>常用到的命令: </li></ul></ul><ul><ul><ul><li>vi ,编辑、保存文件 </li></ul></ul></ul><ul><ul><ul><li>ls -l 查看文件权限 </li></ul></ul></ul><ul><ul><ul><li>chmod 改变程序执行权限 </li></ul></ul></ul><ul><ul><ul><li>直接键入文件名运行文件 </li></ul></ul></ul>
  216. 229. shell 程序的编辑和执行 查看权限 查看权限,初始状态无执行( x )权限 增加可执行( x )的权限 查看权限,已经具备执行( x )权限 运行程序 程序运行过程输出
  217. 230. shell 程序设计 <ul><li>一般结构 </li></ul><ul><ul><li>shell 类型 </li></ul></ul><ul><ul><li>函数 </li></ul></ul><ul><ul><li>主过程 </li></ul></ul>#!/bin/bash function fun1(){ } ...... funciton funn(){ } ........... . . . . . . 函数定义 shell 类型 主过程
  218. 231. 变量的声明和使用 <ul><li>变量的声明和使用 </li></ul><ul><ul><li>变量是弱类型的 </li></ul></ul><ul><ul><ul><li>声明变量不用声明类型 </li></ul></ul></ul><ul><ul><ul><li>可以存储不同类型的内容 </li></ul></ul></ul><ul><ul><ul><li>使用灵活 </li></ul></ul></ul><ul><ul><ul><li>使用时要明确变量的类型 </li></ul></ul></ul><ul><ul><ul><li>大小写区分 </li></ul></ul></ul><ul><ul><li>变量声明及赋值格式 </li></ul></ul><ul><ul><ul><li>格式: 变量=值 (注意:等号两侧不能有空格) </li></ul></ul></ul><ul><ul><ul><li>例如: a=”hello ” b=9 </li></ul></ul></ul>
  219. 232. 变量的声明和使用 <ul><ul><li>变量的引用 </li></ul></ul><ul><ul><ul><li>格式 : $ 变量名,或者 ${ 变量名 } 变量名为一个字符用方式一,变量名多于一个字符建议用第 2 中方式 </li></ul></ul></ul><ul><ul><ul><li>例子: a=1 abc=&quot;hello&quot; echo $a echo ${abc} </li></ul></ul></ul>
  220. 233. <ul><li>Linux 是一个大小写敏感的系统, shell 认为变量 foo 与 Foo 是不同的,与 FOO 也不同 </li></ul><ul><li>当为变量赋值时,只需要使用变量名,该变量会被自动创建 </li></ul><ul><li>要使用变量,必须在变量前加 $ 符号 </li></ul>
  221. 234. 演示 <ul><li>salutation=hello </li></ul><ul><li>echo $salutation </li></ul><ul><li>hello </li></ul><ul><li>salutation=“yes dear” </li></ul><ul><li>echo $salutation </li></ul><ul><li>yes dear </li></ul><ul><li>salutation=7+5 </li></ul><ul><li>echo $salutation </li></ul><ul><li>7+5 </li></ul>
  222. 235. <ul><li>注意: </li></ul><ul><li>如果字符串里包含空格,就必须用引号把它们括起来 </li></ul><ul><li>还要注意在等号两边不能有空格 </li></ul>
  223. 236. 使用 read 将用户的输入赋值给变量 <ul><li>read salutation </li></ul><ul><li>I’m jack. </li></ul><ul><li>echo $salutation </li></ul><ul><li>I’m jack </li></ul>
  224. 237. 使用引号 <ul><li>如果在参数中包含一个或多个空白字符,必须给参数加双引号 </li></ul><ul><li>如果把一个带有 $ 字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值 </li></ul><ul><li>如果你把它放在单引号中,不会发生替换现象 </li></ul><ul><li>可用 字符取消 $ 的特殊含义 </li></ul><ul><li>字符串通常被放在双引号中 </li></ul>
  225. 238. 演示 <ul><li>#!/bin/sh </li></ul><ul><li>myvar=“Hi there” </li></ul><ul><li>echo $myvar </li></ul><ul><li>echo “$myvar” </li></ul><ul><li>echo ‘$myvar’ </li></ul><ul><li>echo $myvar </li></ul><ul><li>echo Enter some text </li></ul><ul><li>read myvar </li></ul><ul><li>echo ‘$myvar’ now equals $myvar </li></ul><ul><li>exit 0 </li></ul>
  226. 239. 环境变量 <ul><li>$HOME 当前用户的主目录 </li></ul><ul><li>$PATH 以冒号分隔的用来搜索命令的目录列表 </li></ul><ul><li>$PS1 命令提示符,通常是 $ 字符 </li></ul><ul><li>$PS2 二级提示符 </li></ul><ul><li>$IFS 输入域分隔符,当 shell 读取输入时,用来分隔单词的一组字符,它们通常是空格、制表符 </li></ul><ul><li>$0 shell 脚本的名字 </li></ul><ul><li>$# 传递给脚本的参数个数 </li></ul><ul><li>$$ shell 脚本的进程号 </li></ul>
  227. 240. <ul><li>提示符特殊字符代码 字符 含义 ! 显示该命令的历史记录编号。 # 显示当前命令的命令编号。 $ 显示 $ 符作为提示符,如果用户是 root 的话,则显示 # 号。 显示反斜杠。 d 显示当前日期。 h 显示主机名。 打印新行。 nn 显示 nnn 的八进制值。 s 显示当前运行的 shell 的名字。 显示当前时间。 u 显示当前用户的用户名。 W 显示当前工作目录的名字。 w 显示当前工作目录的路径。 </li></ul>
  228. 241. 参数变量 <ul><li>$1 $2 $3 ….. 脚本程序的参数 </li></ul><ul><li>$* 在一个变量中列出所有的参数,各个参数之间用环境变量 IFS 中的第一个字符分隔开 </li></ul><ul><li>$@ 它是 $* 的一种变体,它不使用 IFS 环境变量,所以当 IFS 为空时,参数的值不会结合在一起 </li></ul>
  229. 242. 演示 <ul><li>$ IFS=‘’ </li></ul><ul><li>$ set foo bar bam </li></ul><ul><li>$ echo “$@” </li></ul><ul><li>foo bar bam </li></ul><ul><li>$ echo “$*” </li></ul><ul><li>foobarbam </li></ul><ul><li>$ unset IFS </li></ul><ul><li>$ echo “$*” </li></ul><ul><li>foo bar bam </li></ul>
  230. 243. 演示 <ul><li>#!bin/sh </li></ul><ul><li>sa=&quot;Hello&quot; </li></ul><ul><li>echo $sa </li></ul><ul><li>echo &quot;the program $0 is now running&quot; </li></ul><ul><li>echo &quot;the second parameter was $2&quot; </li></ul><ul><li>echo &quot;the first parameter was $1&quot; </li></ul><ul><li>echo &quot;the parameter list was $*&quot; </li></ul><ul><li>echo &quot;the user's home directory is $HOME&quot; </li></ul><ul><li>echo &quot;please enter a new word&quot; </li></ul><ul><li>reas sa </li></ul><ul><li>echo $sa </li></ul><ul><li>echo &quot;the script is now complete&quot; </li></ul><ul><li>exit 0 </li></ul>
  231. 244. 常用的运算符 <ul><li>整数的算术运算符 </li></ul><ul><ul><li>+ 、-、 * 、 / 、 % ; </li></ul></ul><ul><li>赋值运算符 </li></ul><ul><ul><li>+=、-=、 * =、 / =、%= </li></ul></ul><ul><li>位运算符 </li></ul><ul><ul><li><< 、 >> 、 & 、 | 、 ~ 、 ^ ; </li></ul></ul><ul><li>位运算赋值运算符 </li></ul><ul><ul><li><< =、 >> =、 & =、 | =、 ~ =、 ^ =; </li></ul></ul><ul><li>逻辑运算符: </li></ul><ul><ul><li>&& , || , ! , > , > =, < , < =,!=,== </li></ul></ul>
  232. 245. 简单数学表达式 <ul><li>expr 命令计算一个表达式的值 </li></ul><ul><ul><li>格式 :expr arg </li></ul></ul><ul><ul><li>例子:计算( 2 + 3 ) ×4 的值 1 、分步计算,即先计算 2 + 3 ,再对其和乘 4 s=`expr 2 + 3` expr $s * 4 2 、一步完成计算: expr `expr 2 + 3 ` * 4 </li></ul></ul><ul><ul><li>说明: </li></ul></ul><ul><ul><ul><li>运算符号和参数之间要有空格分开; </li></ul></ul></ul><ul><ul><ul><li>通配符号( * ) , 在作为乘法运算符时要用 、“”、‘’符号修饰 </li></ul></ul></ul>
  233. 246. 简单数学表达式 <ul><li>let 命令 </li></ul><ul><ul><li>格式: let arg1 [arg2 ......] </li></ul></ul><ul><ul><li>例子:计算( 2 + 3 ) ×4 的值 let s=(2+3)*4 </li></ul></ul><ul><ul><li>说明: </li></ul></ul><ul><ul><ul><li>与 expr 命令相比, let 命令更简洁直观 </li></ul></ul></ul><ul><ul><ul><li>当运算符中有 < 、 > 、 & 、 | 等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符 </li></ul></ul></ul>
  234. 247. 条件判断 <ul><li>常见的条件: </li></ul><ul><ul><li>变量属性; </li></ul></ul><ul><ul><li>文件属性; </li></ul></ul><ul><ul><li>命令执行结果; </li></ul></ul><ul><ul><li>多种条件的逻辑组合; </li></ul></ul><ul><li>判断结果的一般定义: </li></ul><ul><ul><li>真: 0 </li></ul></ul><ul><ul><li>假: 1 </li></ul></ul><ul><li>格式: </li></ul><ul><ul><li>test condition </li></ul></ul><ul><ul><li>[ condition ] </li></ul></ul>
  235. 248. 条件判断 <ul><li>测试文件属性 </li></ul>如果 fn 存在且 fn 为符号链接则返回真,否则返回假。 -L fn 如果 fn 存在且被当前用户拥有则返回真,否则返回假。 -O fn 如果 fn 存在且 fn 可执行则返回真,否则返回假。 -x fn 如果 fn 存在且 fn 可写则返回真,否则返回假。 -w fn 如果 fn 存在且 fn 可读则返回真,否则返回假。 -r fn 如果 fn 存在且 fn 为目录则返回真,否则返回假。 -d fn 如果 fn 存在则返回真,否则返回假。 -e fn 如果 fn 存在且 fn 为块设备则返回真,否则返回假。 -b fn 如果 fn 存在且 fn 为普通文件则返回真,否则返回假。 -f fn 常用的文件属性条件判断
  236. 249. 条件判断 <ul><li>字符串属性 </li></ul>同 -n string ,如果字符串 string 长度不为 0 返回真,否则返回假。 string 如果字符串 string 长度不为 0 则返回真,否则返回假; -n string 如果字符串 string 的长度为 0 则返回真,否则返回假; -z string 如果 string_1 和 string_2 两个字符串不相等则返回真,否则返回假; string_1 != string_2 如果 string_1 和 string_2 两个字符串相等则返回真,否则返回假; string_1 = string_2 常用字符串属性条件判断
  237. 250. 整数关系 <ul><li>整数间关系判断 </li></ul>如果 num_1 大于等于 num_2 则返回真,否则返回假; mum_1 –ge num_2 如果 num_1 小于等于 num_2 则返回真,否则返回假; mum_1 –le num_2 如果 num_1 小于 num_2 则返回真,否则返回假; mum_1 –lt num_2 如果 num_1 大于 num_2 则返回真,否则返回假; mum_1 –gt num_2 如果 num_1 不等于 num_2 则返回真,否则返回假; mum_1 –ne num_2 如果 num_1 和 num_2 相等则返回真,否则返回假; mum_1 –eq num_2 常用的整数关系条件判断
  238. 251. 管道和重定向 <ul><li>ls –l > lsoutput.txt </li></ul><ul><li>该命令把 ls –l 的结果输出到 lsoutput.txt 文件中 </li></ul><ul><li>通过 > 把标准输出重定向到一个文件,如果该文件已经存在,会覆盖文件的内容 </li></ul><ul><li>可以用 >> 追加文件内容,而不是覆盖 </li></ul>
  239. 252. 重定向 <ul><li>文件描述符 0 代表一个程序的标准输入 </li></ul><ul><li>文件描述符 1 代表一个程序的标准输出 </li></ul><ul><li>文件描述符 2 代表一个程序的标准错误输出 </li></ul>
  240. 253. 重定向 <ul><li>如果想对标准错误进行重定向,需要把准备重定向的文件描述符编号加在 > 操作符的前面,即 2> ,当需要丢弃错误信息并阻止它显示在屏幕,这个方法很有用 </li></ul><ul><li>kill –HUP 1234 >killout.txt 2>killerr.txt </li></ul><ul><li>kill –l 1234 >killouterr.txt 2>&1 (2>&1 意思是把标准输出重定向到文件 killouterr.txt ,然后将标准错误输出重定向到与标准输出相同的地方,顺序不可有误 ) </li></ul><ul><li>Kill –l 1234 >/dev/null 2>&1 (可以用“回收站” /dev/null 来有效丢弃所有输出信息) </li></ul>
  241. 254. 管道 <ul><li>管道符 | 用于连接进程 </li></ul><ul><li>通过管道连接的进程可以同时运行 , 并且随着数据流在它们之间的传递可以自动地进行协调 </li></ul><ul><li>ls –l | grep hello </li></ul><ul><li>ls –l | more </li></ul><ul><li>ls –l | grep hello > lsoutput.txt </li></ul>
  242. 255. 控制结构 <ul><li>控制结构: 根据某个条件的判断结果,改变程序执行的路径。可以简单的将控制结构分为分支和循环两种 。 </li></ul><ul><li>常见分支结构: </li></ul><ul><ul><li>if </li></ul></ul><ul><ul><li>case </li></ul></ul><ul><li>常见循环结构: </li></ul><ul><ul><li>for </li></ul></ul><ul><ul><li>while </li></ul></ul><ul><ul><li>until </li></ul></ul>
  243. 256. if 分支 <ul><li>格式: </li></ul><ul><li>说明: </li></ul><ul><ul><li>中括号中的部分可省略; </li></ul></ul><ul><ul><li>当条件为真( 0 )时执行 then 后面的语句,否则执行 else 后面的语句; </li></ul></ul><ul><ul><li>以 fi 作为 if 结构的结束。 </li></ul></ul><ul><li>if 条件 1 </li></ul><ul><li>then </li></ul><ul><li>命令 </li></ul><ul><li>[elif 条件 2 </li></ul><ul><ul><li>then </li></ul></ul><ul><li>命令 ] </li></ul><ul><li>[else </li></ul><ul><li>命令 ] </li></ul><ul><li>fi </li></ul>
  244. 257. <ul><li>#!/bin/sh </li></ul><ul><li>echo –n “Is it morning? Please answer yes or no? </li></ul><ul><li>read timeofday </li></ul><ul><li>If [ $timeofday = “yes” ] </li></ul><ul><li>then </li></ul><ul><li>echo “Good morning” </li></ul><ul><li>elif [ $timeofday = “no” ]; then </li></ul><ul><li>echo “Good afternoon” </li></ul><ul><li>else </li></ul><ul><li>echo “sorry,$timeofday not recognized. Enter yes or no” </li></ul><ul><li>exit 1 </li></ul><ul><li>fi </li></ul><ul><li>exit 0 </li></ul>
  245. 258. echo 语法 <ul><li>echo –n 命令去除换行符 </li></ul>
  246. 259. case 分支 <ul><li>格式: </li></ul><ul><li>说明: </li></ul><ul><ul><li>“ 条件”可以是变量、表达式、 shell 命令等; </li></ul></ul><ul><ul><li>“ 模式”为条件的值,并且一个“模式”可以匹配多种值,不同值之间用竖线( | )联结 ; </li></ul></ul><ul><ul><li>一个模式要用双分号(;;)作为结束 ; </li></ul></ul><ul><ul><li>以逆序的 case 命令( esac )表示 case 分支语句的结束 </li></ul></ul>case 条件 in 模式 1) 命令 1 ;; [ 模式 2 ) 命令 2 ;; ............... 模式 n ) 命令 n ;; ] esac
  247. 260. <ul><li>? :仅与一个任意字符匹配 </li></ul><ul><li>* :匹配任意字符 </li></ul><ul><li>[...] :同方括号中的任意一个字符相匹配。这些字符可以用字符范围 ( 比如 1-9) 或者 离散值 或同时使用两者表示。例如: [a-zBE5-7] 同所有 a 到 z 之间的字符和 B 、 E 、 5 、 6 、 7 相匹配。 </li></ul><ul><li>[!...] :与所有 不在 方括号中的某个字符匹配。例如 [!a-z] 同某个非小写字母相匹配 [ 5 ] ; </li></ul><ul><li>{c1,c2} :同 c1 或者 c2 相匹配。其中 c1 和 c2 也是通配符。因此,您可以使用 {[0-9]*,[acr]} 。 </li></ul>
  248. 261. <ul><li>以下是一些通配符模式及其说明: </li></ul><ul><li>/etc/*conf : /etc 目录中所有以 conf 结尾的文件。它将同 /etc/inetd.conf 、 /etc/conf.linuxconf , 并且也会同 /etc/conf 相匹配。请注意, * 也匹配空字符串。 </li></ul><ul><li>image/{cars,space[0-9]}/*.jpg : image/cars 、 image/space0 、 (...) 、 image/space9 目录中以 .jpg 结尾的文件。 </li></ul><ul><li>/usr/share/doc/*/README :所有 /usr/share/doc 的直接子目录中的全部 README 文件。比如 /usr/share/doc/mandrake/README 。但是不包括 /usr/share/doc/myprog/doc/README 。 </li></ul><ul><li>*[!a-z] :当前目录中 不以 小写字符结尾的全部文件。 </li></ul>
  249. 262. <ul><li>#!/bin/sh </li></ul><ul><li>echo &quot;Is it morning? Please answer yes or no?&quot; </li></ul><ul><li>read timeofday </li></ul><ul><li>case &quot;$timeofday&quot; in </li></ul><ul><li>yes | y | Yes | YES ) </li></ul><ul><li>echo &quot;good morning&quot; </li></ul><ul><li>;; </li></ul><ul><li>[nN]* ) </li></ul><ul><li>echo &quot;good afternoon&quot; </li></ul><ul><li>;; </li></ul><ul><li>* ) </li></ul><ul><li>echo &quot;error&quot; </li></ul><ul><li>exit 1 </li></ul><ul><li>;; </li></ul><ul><li>esac </li></ul><ul><li>exit 0 </li></ul>
  250. 263. for 循环 <ul><li>格式 </li></ul><ul><li>说明: </li></ul><ul><ul><li>“ 列表”为存储了一系列值的列表,随着循环的进行,变量从列表中的第一个值依次取到最后一个值; </li></ul></ul><ul><ul><li>do 和 done 之间的命令通常为根据变量进行处理的一系列命令,这些命令每次循环都执行一次; </li></ul></ul><ul><ul><li>如果中括号中的部分省略掉, Bash 则认为是“ in $@” ,即执行该程序时通过命令行传给程序的所有参数的列表。 </li></ul></ul>for 变量 [in 列表 ] do 命令(通常用到循环变量) done
  251. 264. <ul><li>#!/bin/sh </li></ul><ul><li>for var in v1 v2 v3 </li></ul><ul><li>do </li></ul><ul><li>echo $var </li></ul><ul><li>done </li></ul><ul><li>exit 0 </li></ul>
  252. 265. <ul><li>#!/bin/sh </li></ul><ul><li>for file in $(ls f*.sh); do </li></ul><ul><li>lpr $file </li></ul><ul><li>done </li></ul><ul><li>exit 0 </li></ul>
  253. 266. while 循环与 until 循环 <ul><li>格式: </li></ul><ul><li>说明: </li></ul><ul><ul><li>while 循环中,只要条件为真,就执行 do 和 done 之间的循环命令; </li></ul></ul><ul><ul><li>until 循环中,只要条件不为真,就执行 do 和 done 之间的循环命令,或者说,在 until 循环中,一直执行 do 和 done 之间的循环命令,直到条件为真; </li></ul></ul><ul><ul><li>避免生成死循环。 </li></ul></ul>while/until 条件 do 命令 done
  254. 267. <ul><li>#!/bin/sh </li></ul><ul><li>fo

×