Loading... # 第1章 Linux操作系统概述 ## 课程介绍 ### 课程考核方式及成绩评定 * 考核方式:考试与平时成绩结合,总分100分。 * 成绩评定:期末考试成绩占60%,平时成绩占40%(课外成绩5分、作业20分、实验10分、课堂表现5分)。 ### 本章学习目标 1. 了解什么是自由软件及相关词语 2. 掌握Linux操作系统的组成及特点 3. 了解Linux操作系统的内核特点 4. 了解Linux的常用发行版本 ## 1.1 自由软件简介 ### 软件类别 按其提供的方式和是否可以赢利,可将软件分为四类: 1. 商业软件(commercial software):由商业公司开发,通过收取使用费盈利。 2. 共享软件(shareware):只能试用一段时间或某些功能受限,需注册付费才能完全使用。 3. 自由软件(free software):自由使用、复制,公开源代码供研究、修改和分发。 4. 免费软件(freeware):无需付费、无限制使用,但不能擅自修改,通常嵌入广告盈利。 ### 自由软件的含义 自由软件指用户拥有以下三种自由: 1. 研究程序运行机制,源代码公开并根据需要修改的自由。 2. 重新分发拷贝,以使他人能够共享软件的自由。 3. 改进程序并分发改进版的自由。即用户拥有运行、拷贝、研究和改进软件的自由。 ### 自由软件相关词语 * **FSF(Free Software Foundation)** :自由软件基金会,致力于发展和革新自由软件,提供源代码并支持技术和法律。 * **GPL(General Public License)** :通用公共许可协议,与传统商业软件许可协议CopyRight对立,被戏称为CopyLeft。GPL保证任何人都有共享和修改自由软件的自由。 * **GNU工程** :一个为创建完全自由的操作系统而定义的工程,目标是开发对Unix向上兼容的自由软件系统。 * **POSIX标准(Portable Operating System Interface)** :推动Linux操作系统正规化发展的重要标准。 ## 1.2 Linux操作系统概述 ### 1.2.1 Linux的发展历史 Linux是一种自由和开放源码的类Unix操作系统。其核心由Linus Torvalds开发,并逐步成为广泛使用的操作系统,应用于各种计算设备中。 #### Linux操作系统的发展领域 1. **服务器领域** :广泛应用于各种服务器。 2. **桌面领域** :逐步扩展至个人计算机用户。 3. **移动嵌入式领域** :在手机、平板电脑等移动设备中得到应用。 4. **云计算/大数据领域** :成为云服务器和大数据处理的主要操作系统。 ### 1.2.2 Linux的内核版本与发行版本 #### 内核版本 Linux内核版本由三个数字组成: * r.x.y,其中r是主版本号,x是次版本号,y是修订版本号。2.6之前偶数版本为稳定版,奇数版本为开发版;3.0之后x为新版本发布时增加,y为错误修补次数。 #### 发行版本 不同厂商将内核、源代码及应用程序组织成完整的操作系统,称为发行版本。常见发行版本有Red Hat Linux、CentOS、Mandrake Linux、Ubuntu Linux等。 ### 1.2.3 Linux软件体系结构 1. **设备驱动程序层** 2. **Linux内核** 3. **系统调用接口** 4. **语言函数库** 5. **Linux Shell** 6. **Linux应用程序** ### 1.2.4 Linux的版本 #### 常见发行版本 * 红旗Linux * SUSE Linux * Ubuntu Linux * Red Hat Linux * Debian Linux * Gentoo Linux * CentOS * Linux Mint * Mandrake Linux * Turbo Linux * 中标普华Linux * 蓝点Linux * Xteam Linux #### Android及其衍生系统 * **Android** :基于Linux平台的开源手机操作系统,由Google发布。最新版本为Android 7,广泛应用于三星、LG、华为、小米等品牌的手机和平板电脑。 * **衍生系统** :包括小米的MIUI、华为的Emotion UI、魅族的Flyme OS等。 ### 1.2.5 Linux的特点 1. **开放性** :源代码公开。 2. **多用户** :支持多用户操作。 3. **多任务** :支持多任务处理。 4. **良好的用户界面** 。 5. **设备独立性** :所有外部设备都当作文件对待。 6. **丰富的网络功能** 。 7. **可靠的系统安全性** 。 8. **良好的可移植性** :兼容其他Unix系统,支持多种文件系统。 9. **高效的内核** :内核小、效率高,更新速度快。 ### 1.2.6 关于CentOS CentOS是社区企业操作系统,是由Red Hat Enterprise Linux的源代码编译而成。Red Hat公司将Red Hat Linux开发计划与Fedora计划整合成Fedora Project,由社区参与开发。 ## 思考与实践 1. 什么是自由软件,什么是GPL、GNU? 2. Linux操作系统的内核版本有什么特点? 3. 简述Linux操作系统的组成及特点。 4. 常用的Linux操作系统有哪些版本?掌握在Internet上获取某一版本的Linux系统的途径及方法。 # 第2章 Linux系统的环境搭建 ## 本章学习目标 1. 掌握Linux操作系统的安装方式及安装步骤 2. 了解Linux操作系统的分区方法 3. 掌握VMWare平台下的Linux虚拟机与主机的网络构建 4. 了解Linux系统的启动过程 5. 掌握Linux操作系统的注销、关闭方式 ## 2.1 Linux系统的安装准备 ### 2.1.1 CentOS 7安装程序的获取 1. **免费从网上下载** :可以从官方开源镜像网站下载[http://mirror.centos.org](http://mirror.centos.org) 2. **ISO镜像版本** :例如,CentOS-7-x86_64-DVD-1804.iso,其中x86_64表示64位系统兼容32位,1804是版本号,DVD是镜像版本。 ### 2.1.2 硬件需求 1. **硬件的兼容性** :CentOS 7应与最近两年的多数硬件兼容,具体可在官方网站查询。 2. **最低配置要求** : * CPU: * 硬盘空间: * 内存: ### 2.1.3 镜像文件的安装方式 1. **虚拟系统安装** :在Windows系统下,使用虚拟系统平台软件安装并启动Linux系统。 2. **光盘引导安装** :将ISO镜像文件刻录成CD/DVD,由CD/DVD盘启动引导安装。 3. **USB disk引导安装** :用USBWriter等软件将ISO镜像文件制作成启动优盘。 4. **网络安装** :使用NetInstall网络安装版的ISO镜像文件,需要计算机具备上网条件。 ## 2.2 Linux操作系统的安装 ### 2.2.1 Linux的安装步骤 1. **选择界面安装** 2. **语言选择** 3. **选择安装信息** 4. **选择安装软件** 5. **设置磁盘分区方案** :默认分区为自动分区。自动分区将破坏原有分区信息,需手动分区时选择手动分区方式。 6. **手动分区** :必须建立的分区包括: * /:根目录分区 * /boot:引导分区 * SWAP:交换分区 * 其他分区如/home(用户目录分区)、/var(易变文件系统分区) 1. **设置根口令及验证** ### 2.2.2 Linux系统的升级 1. **系统升级** :升级前备份重要数据,以降低风险。 2. **内核升级** :需谨慎操作,版本跨度大或汉化内核等操作不同,升级失败可能导致系统不稳定或崩溃。 ### 2.2.3 Linux系统的删除 1. 使用Linux安装光盘删除操作:适用于同时安装Linux和Windows系统时。 2. 使用类似Disk Genius分区工具软件或GHOST镜像方法进行删除。 ## 2.3 Linux系统的多重引导安装 ### 2.3.1 磁盘分区基础 1. 硬盘分区可分为主分区、扩展分区、逻辑分区。主分区1-3个,扩展分区0-1个,逻辑分区无限制。 2. 磁盘设备名: * IDE接口第一块硬盘为/dev/hda,第一分区为/dev/hda1 * SCSI接口第一块硬盘为/dev/sda,第一分区为/dev/sda1 ### 2.3.2 Linux和Windows操作系统多重引导安装 1. 在同一台计算机上安装多种操作系统,建议先安装Windows,然后进行Linux分区。 ## 2.4 VMware虚拟机下安装Linux系统 ### 2.4.1 VMware简介 VMware workstation可以在现有操作系统上虚拟另一个操作系统,构建多个虚拟计算机系统。主操作系统为真实计算机上的操作系统,客户操作系统为虚拟计算机上的操作系统。 ### 2.4.2 VMware虚拟机下创建Linux操作系统 1. **VMware的安装** :安装虚拟网络适配器。 2. **创建新的Linux虚拟机** :设定虚拟系统所占用主机文件系统的最大磁盘空间。 ### 2.4.3 移植已安装的Linux虚拟系统 虚拟系统的主要硬件是虚拟的,有良好的移植性,可在另一台计算机上运行。 ### 2.4.4 Linux虚拟系统与主机之间的网络构建 1. **网络模式** :桥接模式、NAT模式、仅主机模式。 2. **网络配置** :设置虚拟机的网络配置和虚拟网卡的网络配置。 3. **模式更改** 4. **访问测试** :通过ping命令和SSH终端进行测试。 ### 2.4.5 Linux虚拟系统与主机之间的文件传输 1. **本地共享** :通过优盘挂载或本地磁盘挂载。 2. **远程传输** :通过SSH进行文件传输。 ## 2.5 Linux系统的启动与关闭 ### 2.5.1 Linux系统的启动引导步骤 1. 加载BIOS 2. 进入GRUB 3. 加载Linux Kernel 4. 执行init 5. 运行/etc/rc.d/rc.sysinit 6. 执行/etc/inittab 7. 执行默认级别中的所有Script 8. 执行/bin/login程序 ### 2.5.2 Linux系统的引导 GRUB是用于加载和管理系统启动的程序。系统启动菜单包括普通模式和救援模式。 ### 2.5.3 Linux系统的登录 1. **登录模式** :图形界面模式和字符命令模式。 2. **模式切换** :通过命令切换启动模式。 ### 2.5.4 系统的注销与关闭 1. **注销** :字符界面下输入logout或exit命令。 2. **关闭系统** :通过halt、reboot、poweroff命令关闭系统。 3. **多用户状态下的shutdown命令** :提供单用户维护模式、定时关机、发送警告信息等功能。 ## 2.7 思考与实践 1. Linux系统的自定义分区要求有哪些? 2. 简述Linux系统的启动过程。 3. 举例说明Windows和Linux系统共存的磁盘分区命名要求。 4. 多用户情况下,如何保证其他在线用户的作业,而系统还能正常安全关机。 5. 练习系统的开机、登录、注销及关机的方法,并对该过程进行观察和记录。 6. 练习在Windows下利用VMware进行建立并安装Linux虚拟机系统。 7. 练习安装后的虚拟系统的移植。 8. 练习在Windows下的SSH终端软件登录虚拟的CentOS 7系统,并进行Windows系统与Linux系统间的文件上传及下载操作。 9. 练习在Windows下,利用SSH终端软件以不同的用户身份同时登录虚拟的CentOS 7系统,再用shutdown命令,体会多用户状态下,不同终端窗口系统关机的提示及状态变化情况。 END OF CHAPTER 2 # 第3章 Linux操作基础 ## 本章的学习目标 1. 了解Linux操作系统与shell的关系 2. 掌握简单命令、一般命令格式和一些常用命令 3. 掌握shell高级操作、环境变量及系统配置 4. 了解Linux下的X Window ## 3.1 Linux系统与Shell关系 ### Linux操作系统结构 1. **内核** :常驻内存,负责系统的核心功能。 2. **系统工具** :需要时调入内存,提供系统的各种工具和功能。 ## 3.2 Shell简介 ### Shell简介 * **Shell** :外壳,是操作系统的外部架构,为用户提供操作系统的接口。 * **功能** :命令语言、命令解释程序及程序设计语言。 * **版本查看** :使用命令`bash –version`查看Bash版本。 * **常用Shell** :[DOS的标准shell是command.com](http://xn--DOSshellcommand-o05y915wt6gpp8e.com),Windows XP的是explorer.exe,Linux的缺省shell是Bash(Bourne Again shell)。 ## 3.3 简单shell命令 * `pwd`:当前路径命令 * `date`:日期命令 * `who`:在线用户命令 * `cal`:日历命令 * `uname`:系统信息命令 * `wc`:统计命令 * `su`:用户切换命令 * `clear`:清屏命令 ## 3.4 Shell命令的操作基础 ### 3.4.1 shell命令的一般格式 * 一般格式:`命令名称 [选项] [参数]` * **选项** :扩展命令特性或功能,用一个或多个英文字母表示,前有减号。 * **参数** :大多数命令可接纳参数,参数在选项之后输入。 ### 3.4.2 在线帮助命令 * `man 命令名`:显示命令帮助信息,包含命令名称、语法、描述、选项及示例。 * 功能键:“空格键”显示下一屏;“回车键”滚动一行;“q键”退出。 * 其他帮助命令:`命令名 --help`或`info 命令名` ### 3.4.3 与shell有关的配置文件 1. `/etc/profile`:系统最重要的shell配置文件,定义系统环境变量。 2. `~/.bash_profile`:每个用户的BASH环境配置文件,位于用户主目录,系统运行/etc/profile后读取。 3. `~/.bashrc`:每次运行bash时读取,定义终端设置和shell提示符。 4. `~/.bash_history`:记录用户使用的历史命令。 ## 3.5 Shell命令的高级操作 ### 3.5.1 shell的命令补全 * **含义** :用户在输入命令或文件名时可使用TAB键补全,如果有多个匹配项,系统会显示所有匹配的命令或文件名。 * **操作** :输入命令前几个字母,按TAB键。 ### 3.5.2 shell的历史命令 * **含义** :系统自动记录用户输入的所有命令,保存在~/.bash_history文件中。 * **操作** :`history`命令查看历史命令;使用`!n`执行历史命令,其中n为命令编号;向上方向键查看最近使用的命令。 ### 3.5.3 shell的重定向 * **含义** :输入输出重定向允许从文件输入命令或将输出结果存储在文件中。 * **输出重定向** :`>`和`>>`(重定向附加) * **输入重定向** :`<` * **错误重定向输出** :`2>`将错误信息保存到文件中。 ### 3.5.4 shell的管道操作 * **含义** :使用管道线`|`将多个简单命令集合在一起,完成复杂功能。 * **格式** :`命令1 | 命令2 [| … 命令n]` ## 3.6 Linux的桌面系统 ### 3.6.1 X Window系统简介 * **X Window系统** :一种以位图方式显示的软件窗口系统,提供操作系统图形用户界面的工具和协议。 ### 3.6.2 Linux的桌面环境 * **GNOME** * **KDE** * **切换桌面环境** :使用命令`switchdesk GNOME`或`switchdesk KDE` ### 3.6.3 GNOME桌面环境简介 * **组件** :面板、桌面图标、任务条、工作区切换器。 * **菜单系统** :应用程序、位置、系统快捷控制器菜单。 ### 3.6.4 GNOME桌面的中英文版切换 * **语言选择** :安装时选择语言类型,安装后可重新设置语言。 * **注意事项** :需选择相关语言字库包。 ### 3.6.5 GNOME桌面下的软件安装 * **方式一** :通过“应用程序”菜单下的“系统工具”选择“软件”安装。 * **方式二** :通过系统安装光盘选择安装程序软件。 ## 3.8 思考与实践 1. 怎样查询文本文件内的特定文字?又怎样查询系统内特定文件? 2. shell有哪些高级操作? 3. 对一个命令不熟悉,有哪些方法可以获得辅助? 4. 练习定制环境变量。 5. 在CentOS 7系统桌面环境下进行如下操作:设置系统时间、更换桌面背景、工作区切换、目录的切换、文件的查看等操作,比较该系统和Windows系统的基本操作区别。 6. 在CentOS 7系统下,分别在远程SSH终端、以及本地桌面环境下多用户方式登录(登录的用户分为普通用户及root用户),再在不同终端关闭系统进行观察,此时多用户在线状态下普通用户及root用户系统关机的提示及状态变化情况。 7. 在CentOS 7系统的桌面环境下,进行系统的语言格式由中文版转换成英文版的重新设置操作。设置成功后观察设置前后的远程终端的输出变化,即把原来终端的中文输出转换成英文输出的格式。 8. 在CentOS 7系统的桌面环境下,安装MySQL软件包。 END OF CHAPTER 3 # 第4章 Linux文件系统 ## 本章的学习目标 1. 了解基本术语的含义 2. 掌握目录和文件的操作 3. 掌握文件权限的设置 ## 4.1 Linux系统文件及其类型 ### 4.1.1 文件的含义 “文件系统”有以下几种含义: 1. 指一种特定的文件格式,例如Linux的文件系统是ext3,Windows XP的文件系统是NTFS。 2. 指按特定格式进行“格式化”的一块存储介质。 3. 指操作系统中用来管理文件系统及对文件进行操作的机制及其实现。 ### 4.1.2 文件的成分 * **索引节点(inode)** :每个Linux分区中对文件使用的标识符,每个文件有一个inode。 * **数据** ### 4.1.3 文件命名规则 * 同类文件应使用同样的后缀或扩展名。 * 区分文件名的大小写。 * 以圆点“.”开头的文件名是隐含文件。 ### 4.1.4 Linux系统的目录结构 Linux文件系统使用单一的根目录结构,所有分区都挂载到单一的“/”目录上。常用目录包括: * `/bin` * `/dev` * `/home` * `/lib` * `/mnt` * `/proc` * `/usr` * `/var` ### 4.1.5 文件类型 * **普通文件** (-):文本文件、数据文件、可执行的二进制程序 * **目录文件** (d):目录下都有“.”(本身)和“..”(父目录) * **设备文件** :字符设备(c)、块设备(b) * **链接文件** (l):多个名字指向同一个文件 ## 4.2 文件操作命令 ### 4.2.1 文件导航命令 * `ls`:列清单 * `ls -a`:显示所有文件,包含隐藏文件 * `ls -l`:长格式显示文件详细信息 * `ls -m`:逗号分隔紧凑显示 * `ls -R`:递归显示 * `ls -i`:显示索引节点号 * `cd`:改变当前工作目录 * `cd`:进入用户主目录 * `cd ..`:进入上级目录 * `cd /`:进入根目录 * `cd ../..`:进入上上级目录 * `cd .`:留在当前目录 ### 4.2.2 文件信息显示命令 * `cat`:查看文件信息 * `cat [选项] 文件名`:显示文件信息 * `cat > 新文件名`:建立小型文件 * `cat 文件1 文件2 > 新文件名`:合并文件 * `more`:逐屏显示文件内容 ### 4.2.3 文件复制、删除及移动命令 * `cp`:复制文件 * `cp [选项] 源文件或目录 目标文件或目录` * 示例:`cp -rf Dir1 Dir2`,`cp -f file1 file2` * `mv`:移动及改名文件 * `mv [选项] 源文件或目录 目标文件或目录` * `rm`:删除文件 * `rm [选项] 文件名` * 示例:`rm file1`,`rm -r Dir1`,`rm -f file2` ### 4.2.4 文件检索、排序、查找命令 * `grep`:文件信息检索命令 * `grep [选项] 字符串 [文件...]` * 示例:`grep -n wdg /etc/passwd` * `sort`:排序命令 * `sort [选项] [文件列表]` * 示例:`sort -r file1`,`sort -k 3 file1` ### 4.2.5 目录操作命令 * `mkdir`:创建目录 * `mkdir [选项] [目录名]` * 示例:`mkdir Dir1 Dir2`,`mkdir -p Dir1/Dir2` * `rmdir`:删除目录 * `rmdir [选项] [目录名]` * 建议用:`rm -rf 目录名` ## 4.3 文件的权限 ### 4.3.1 文件的属主与属组 * **属主** :文件的所有者 * **属组** :文件所属的组 * **更改属主与属组** :`chown [选项] [所有者][:组] 文件列表` * 示例:`chown wdg f1`,`chown :wdg f1`,`chown wdg:wdg f2` ### 4.3.2 文件的访问权限 * **三种用户类型** : * **文件属主(owner)** * **同组用户(group)** * **其他用户(others)** * **权限表示方法** : * 三组九位字母表示法 * 三组九位二进制表示法 * 三位八进制表示法 * **修改权限** : * **字母形式** :`chmod [选项] 模式[模式] 文件名` * 示例:`chmod u+x g+wo-r f1`,`chmod a=rw f2` * **数字形式** :`chmod 八进制模式 文件名` * 示例:`chmod 644 f1`,`chmod 700 f2` ### 4.3.3 文件的特殊权限 * **SUID、SGID和Sticky位** : * SUID:用户置位 * SGID:组置位 * Sticky:粘着置位 * **设置方法** : * 数字形式:`4000`(SUID),`2000`(SGID),`1000`(Sticky) * 字母形式:`u+s`,`g+s`,`o+t` * 示例:`chmod u+s m1`,`chmod u+xs m2`,`chmod 1755 m3` ### 4.3.4 文件默认权限 * **umask掩码** :指定新创建文件的默认权限 * 文件默认权限=0666-umask * 目录默认权限=0777-umask * 查看和设置umask:`umask`,`umask 0000` ## 4.4 文件的链接 ### 4.4.1 硬链接 * **含义** :文件的一个或多个文件名,链接到同一节点号 * **格式** :`ln 源文件 创建的目标链接文件` * **限制** :不能对目录文件做硬链接,不能跨文件系统 * **特点** :链接文件和源文件节点号相同,删除源文件不影响硬链接文件 ### 4.4.2 软链接(符号链接) * **含义** :链接到一个文件的路径名,类似于Windows的快捷方式 * **格式** :`ln -s 源文件 创建的目标链接文件` * **特点** :软链接是一个新文件,节点号不同,可以对目录文件和跨文件系统做链接,删除源文件会导致链接失效 ## 思考与实践 1. 在你所使用的Linux系统的根目录上有哪些目录,它们的作用是什么? 2. 如何递归式地显示指定目录的各个子目录中的文件? 3. 如何把两个文件的内容合并成一个文件? 4. 文件的权限管理的意义? 5. 如何统计当前系统中的在线人数? 6. 把root目录下的所有文件(包含隐藏文件)按文件的大小进行排序。 7. 请给出下列命令的执行结果:`cd /`,`cd ..`,`cd ../..`,`cd` 8. 建立符号链接文件后,如果删除原文件会有什么样的结果? 9. 在一个Linux系统中的多个用户间,实现文件共享的方法有哪些?试讨论它们的优缺点。 10. 对某个文件在同一目录中分别建立硬链接和符号链接文件,然后运行`ls -l`命令。观察输出信息的第二列(链接数)以及第五列(文件尺寸),比较两种链接有什么不同。 11. 已知文件f1,创建f1文件的硬链接f2,再创建f1的软链接f3,再删除源文件f1,问共享文件f2和f3是否失效?共享文件f2和f3的链接数是多少? END OF CHAPTER 4 # 第5章 Linux系统管理 ## 本章的学习目标 1. 掌握用户和组的概念、配置文件和常用命令 2. 掌握常用软件包的管理方法 3. 掌握基本的网络概念和配置,学会进行网络通信的基本方法 4. 掌握进程控制的相关概念和进程管理命令 5. 掌握系统的常用服务启动管理 ## 5.1 用户和组管理 ### 5.1.1 用户和组概述 * **账户** :使每个用户的工作独立、不受干扰。系统依据账户区分用户的文件、进程、任务,提供特定工作环境。 * **用户和组** :Linux账户包括用户账户和组账户。组是用户的集合,分为私有组和标准组。用户登录后的所属组称为主组,其他组称为附加组。 ### 5.1.2 用户和组的配置文件 * **passwd文件** :位置:`/etc/passwd`,对任何用户均可读。用于保存各用户的账户信息。 * **shadow文件** :位置:`/etc/shadow`,只对root用户可读。用于保存各用户账户的密码信息。 * **group文件** :位置:`/etc/group`,用于保存各用户账户的分组信息。 * **gshadow文件** :位置:`/etc/gshadow`,用于定义用户组口令、组管理员等信息。 ### 5.1.3 用户及组的管理命令 * **useradd** :添加新用户 * 格式:`useradd [参数] 用户名` * 示例:`useradd zhang`,`useradd -u 510 -g li -d /home/li -s /bin/bash -e 2014/12/31 zhang` * **usermod** :修改已有用户账户的属性 * 格式:`usermod [参数] 用户名` * 示例:`usermod -l newname oldname`,`usermod -L zhang`,`usermod -U zhang` * **passwd** :设置用户账户的口令 * 格式:`passwd [参数] 用户名` * 示例:`passwd`,`passwd zhang`,`passwd -l zhang`,`passwd -u zhang`,`passwd -d zhang` * **userdel** :删除指定的用户账户 * 格式:`userdel [-r] username` * 示例:`userdel -r zhang` * **groupadd** :添加新组 * **groupdel** :删除组 * **gpasswd** :管理组口令 * 格式:`gpasswd [参数] 用户名 组名` * 示例:`gpasswd -a username groupname`,`gpasswd -d username groupname`,`gpasswd -A username groupname` ## 5.2 软件包管理 ### 5.2.1 Linux下软件包简介 * **软件包类型** :rpm包、tar包、bz2包、gz包、deb包、sh文件、src源码文件、bin文件 ### 5.2.2 RPM软件包的管理 * **RPM概述** :RPM(RedHat Package Manager)是一种软件包管理标准,适用于各种Linux系统。 * **功能** :安装、卸载、升级、查询、验证 * **RPM包的名称格式** :name-version.type.rpm * 示例:`httpd-2.0.40-21.i386.rpm`,`httpd-2.0.40-21.src.rpm` * **命令** : * **安装** :`rpm -ivh <RPM包名>` * **删除** :`rpm -e <RPM包名>` * **查询** :`rpm -qa`,`rpm -q <RPM包名>`,`rpm -qp <RPM包文件名>`,`rpm -qi <RPM包名>`,`rpm -ql <RPM包名>`,`rpm -qf <文件名>` * **升级** :`rpm -Uvh <RPM包名>` * **验证** :`rpm -V [参数]`,示例:`rpm -V httpd` ### 5.2.3 YUM软件包的管理 * **YUM概述** :YUM(Yellow dog Updater Modified)是一个基于RPM的包管理工具,能够从服务器自动下载RPM包并安装,处理依赖关系。 * **配置文件** : * 基本配置文件:`/etc/yum.conf` * 软件仓库配置文件:`/etc/yum.repos.d/*.repo` * 日志文件:`/var/log/yum.log` * **常用命令** : * 查询:`yum repolist all`,`yum repolist enabled`,`yum list <软件包名>`,`yum info <软件包名>` * 安装:`yum install <软件包名或程序组名>` * 更新:`yum update <软件包名>` * 删除:`yum remove <软件包名>`,`yum clean <软件包名>` ### 5.2.4 TAR软件包的管理 * **TAR包概述** :TAR是“tape archive”的简称,tar命令用于将多个文件进行打包,格式包括普通的`*.tar`和压缩的`*.tar.gz`。 * **命令** : * 建立TAR包:`tar cvf <TAR包名> <文件或目录名>`,压缩:`tar zcvf <TAR包名> <文件或目录名>` * 查询TAR包:`tar ztf <TAR包名>` * 释放TAR包:`tar zxvf <TAR包名>`,释放到指定路径:`tar zxvf 包名 -C 目录名` ### 5.2.5 src源代码包的编译及安装 * **安装步骤** : 1. 释放TAR包 2. 查看并阅读包内附带的软件安装说明 3. 编译准备:`./configure` 4. 编译:`make` 5. 安装:`make install` 6. 清除临时文件 ## 5.3 网络通信管理 ### 5.3.1 网络的基本配置 * **相关概念** :IP地址、主机名、网关地址、DNS服务器地址 * **配置文件** :`/etc/sysconfig/network-scripts/ifcfg-ens33` * **配置IP地址** :字符终端下配置方法,重新启动网络服务 ### 5.3.2 常用网络管理命令 * **hostname** :显示和设置主机名 * **ifconfig** :显示和设置网卡配置 * 格式:`ifconfig [网卡设备名]` * 重新设置IP地址:`ifconfig 网卡设备名 IP地址` * 设置虚拟IP地址:`ifconfig 网卡设备名:n IP` * 启动和停止网卡:`ifconfig 网卡设备名 up|down` * **ping** :测试网络连接状态 * 格式:`ping [-c 报文数] 目的主机地址` ### 5.3.3 常用的网络通信命令 * **write** :实时给某用户发送消息 * 格式:`write username [tty] Message` * **wall** :以广播形式向所有用户发送消息 * 格式:`wall message` * **mesg** :设置消息的禁止和允许 * 格式:`mesg [y|n]` * **talk** :实时和某用户交流 * 格式:`talk username [tty]` * **mail** :撰写和发送邮件、接收和阅读邮件 * 撰写:`mail username`,`mail -s topic username < filename` * 阅读:`mail`,`& n` ## 5.4 进程管理 ### 5.4.1 进程概述 * **进程的概念** :进程是进程实体的运行过程,是系统进行资源分配和调度的独立单位。 * **进程属性** :第一个运行的进程是systemd,进程号为1。 * **进程类型** :系统进程、用户进程、守护进程 ### 5.4.2 守护进程的管理 * **作用** :守护进程在后台执行,提高工作效率,也可能成为黑客攻击对象。 * **at作业** :指定系统在将来的某个时间执行作业 * 格式:`at sometime command list` * 例子:`at now +1 day`,`at 1:00am May 1` * 显示:`at -l` * 删除:`at -d ID` * **cron作业** :以固定间隔时间执行作业 * 配置文件:` /etc/crontab` * 创建:使用`crontab`命令 * 修改:`crontab -e` ### 5.4.3 进程的控制命令 * **ps** :查看进程 * 格式:`ps -ef`,`ps -axu` * **free** :显示系统内存使用情况 * **top** :实时监控系统进程 * 功能:排序、监视指定用户、指定刷新时间、删除进程、查阅帮助、退出 * **sleep** :延迟执行 * 格式:`sleep time; command` * **kill** :结束进程 * 格式:`kill PID`,`kill -9 PID` ### 5.4.4 前台与后台控制 * **前台与后台运行** : * 前台:命令控制键盘和显示器 * 后台:命令执行后返回shell提示符 * 命令:`command`(前台),`command &`(后台) * 查看后台进程:`jobs` * 恢复前台:`fg 后台进程编号` * 恢复后台:`bg 后台进程编号` * 快捷键:`Ctrl+z`(挂起到后台) ## 5.5 系统的服务管理 ### 5.5.1 INIT进程 * **作用** :由Linux内核引导运行的第一个进程,新版本CentOS 7中由systemd取代 * **配置文件** :`/etc/inittab` ### 5.5.2 系统服务管理的常用命令 * **init命令** :转换服务的运行级别 * 格式:`init [n]` * **chkconfig** :服务启动状态 * 查看:`chkconfig --list [服务名]` * 设置:`chkconfig [--level <levels>] [服务名] <on|off>` * 示例:`chkconfig --level 2345 httpd on` * **service** :服务状态控制 * 格式:`service 服务名 {status|start|stop|restart}` * 例子:`service httpd status`,`service httpd start`,`service httpd restart` * **systemctl** (CentOS 7): * 查看服务启动状态:`systemctl list-unit-files --type service` * 列出所有激活状态的服务:`systemctl list-units --type service --all` * 服务状态控制:`systemctl [status/start/stop/restart/reload] name.service` * 服务开机自启控制:`systemctl [enable/disable] name.service` * **setup** :系统自启动服务控制 ## 5.6 磁盘操作管理 ### 5.6.1 Linux文件系统类型简介 * 常用类型:ext3/ext4、xfs、swap、vfat、NFS ### 5.6.2 Linux的虚拟文件系统 * 虚拟文件系统(VFS)是物理文件系统与服务之间的接口层,使不同的文件系统在Linux核心和系统中运行的其他进程看来都是相同的。 ### 5.6.3 存储设备的名称 * 存储设备命名规范,挂载点在`/mnt`下。 * 光盘设备:`/dev/cdrom` * IDE硬盘:`/dev/hda` * USB移动存储设备:`/dev/sda` * 查看系统磁盘分区情况:`fdisk -l` ### 5.6.4 磁盘文件系统的挂载与卸载 * **挂载** : * 格式:`mount [-t fs-type] [-o option] device mountpoint` * 示例:`mount -t vfat /dev/sda1 /mnt/disk1` * **卸载** :`umount [device] [dir]` ### 5.6.5 常用的磁盘操作命令 * **fdisk** :磁盘分区 * 格式:`fdisk [-l] [device]` * **du** :磁盘统计 * 格式:`du [-a] directoryname` ## 5.8 思考与实践 1. 简述Linux的四个账户系统文件及其各个字段的含义。 2. 举例说明使用RPM命令安装、升级、删除、查询、校验软件包的方法。 3. 查看“/bin/at”文件隶属于哪个软件包,并查看该软件包的描述信息及包含的文件。 4. 网络通信有几种方式,各在什么情况下适用? 5. 前台和后台的含义及切换方法。 6. 启动和停止各种网络服务的方法。 7. 启动多个用户进程的方法。 8. 利用vi及top命令分别创建两个后台进程后,利用ps -au命令显示这两个后台进程的运行状态,并用进程运行状态转换图解释说明。 9. 对于root用户,如何指定并强制某个a用户离线,并禁止其重新登录? 10. 发送文件信息消息的方法。 11. 查看系统中安装的http相关软件及信息说明,并设置该服务在多用户模式和X窗口模式下自动加载。 12. 将2019年的日历信息以邮件形式发送给指定用户的方法。 13. 快速查找系统自动识别并加载的设备(如光盘)的设备名称及本地挂接点路径的方法。 14. 在VMware虚拟系统中添加并加载新的物理硬盘NTFS分区,并在CentOS 7中识别NTFS分区及挂载访问的方法。 END OF CHAPTER 5 # 第6章 vi编辑器的使用 ## 本章的学习目标 1. 掌握vi编辑器的启动、保存和退出。 2. 了解文本插入、移动光标、文本修改、屏幕命令和选项设置。 3. 掌握字符串检索、替换命令。 4. 掌握文本块的移动和编辑多个文件的操作方法。 ## 6.1 认识Linux的文本编辑器 ### vi编辑器简介 * **vi** :在Unix世界中极为普遍的全屏幕文本编辑器。它的原意是“Visual”,可以立刻看到操作结果。 * **vim** :类似于vi的文本编辑器,是vi Improved的简称,增加了许多新特性。Vim支持180多种语言的语法高亮、C语言的自动缩进、功能强大的内置脚本语言。Vim最常用的命令是简单字符,比复杂的控制组合键快且方便。 ## 6.2 vi编辑器的启动、保存和退出 ### 6.2.1 vi编辑器的启动 * 格式:`vi [选项] [filename]` * 示例: * `vi +n filename`:打开文件并将光标停在第n行行首 * `vi + filename`:打开文件并将光标停在最末行行首 * `vi -r filename`:系统瘫痪后恢复文件 * `vi +/词 filename`:光标停在“词”第一次出现的位置 ### 6.2.2 存盘及退出 * `:w <回车>`:保存文件 * `:w filename <回车>`:另存为新文件 * `:q <回车>`:退出vi * `:wq <回车>`:保存并退出vi * `:q! <回车>`:强制退出不保存 ## 6.3 vi编辑器的三种工作模式 ### 6.3.1 命令模式 键入vi命令进入编辑器时处于命令模式。此时键入的字符被当作编辑命令解释。命令模式可以完成光标定位、字符串检索、文本恢复、修改、替换、标记、行结合及文本位移等功能。 ### 6.3.2 插入模式 插入模式也叫输入模式,此时键入的字符被插入到编辑的缓冲区中,显示为文件的正文。插入模式下可完成文本的输入、修改和光标的移动。 ### 6.3.3 底行命令模式 在命令模式下键入“:”进入底行命令模式,在底行输入命令并回车执行。底行命令模式用于文本的全局替换、插入shell命令、vi设置、存盘退出、文本块复制、多个文本转换及缓冲区操作。 ## 6.4 命令模式下的操作 ### 6.4.1 命令模式到输入模式的转换命令 * 插入命令:按`i`键,在光标之前插入 * 附加命令:按`a`键,在光标之后插入 * 打开新行命令:按小写`o`键,在光标所在行的下面插入一行 ### 6.4.2 命令模式下的光标移动 * 基本光标移动:用方向键移动光标 * 快速光标定位命令: * 移至行首:`^`或`0` * 移至行尾:`$` * 移至指定行:`[行号]G` * 移至指定列:`[列号]|` ### 6.4.3 文本删除命令 * 删除字符:`x`(类似Del键),`X`(类似退格键) * 删除文本对象(d与光标移动命令组合): * `dd`:删除整行 * `d0`:从光标位置删至行首 * `d5l`:从光标位置向右删5个字符 * `d$`:从光标位置删至行尾 * `d3G`:删除当前行至第3行 ### 6.4.4 复原命令 * `u`:取消最近一次编辑,多次按u取消前几次操作 * `U`:恢复当前行到编辑前状态 ### 6.4.5 行结合命令 * `J`:把光标所在行与下面一行结合成一行 * `3J`:把当前行及其后面的2行结合成一行 ### 6.4.6 文本位移命令 * `>`命令:将正文行向右移动 * `>4G`:右移4行 * `<`命令:将正文行向左移动 * `<1G`:左移1行 * `>>`命令:将光标所在行右移8个空格 * `<<`命令:将光标所在行左移8个空格 ### 6.4.7 字符串检索命令 * `/字符串 <回车>`:向前检索 * `?字符串 <回车>`:向后检索 * 检索下一个字符串:`n`重复上一个检索命令,`N`反向重复 * 检索特殊字符:`* ^ $ [ / \ |`需要使用转义形式,即在这些字符前面加反斜线`\` ## 6.5 底行命令模式下的操作 ### 6.5.1 定位操作 * `:20 <回车>`:光标移到第20行行首 * `:mnp<回车>`:显示m至n行 * `:mnd<回车>`:删除m至n行 * `:/this/<回车>`:从光标所在行向前查找字符串this * `:?this?<回车>`:从光标所在行向后查找字符串this ### 6.5.2 全局替换命令 * `:g/字符串1/p`:屏幕输出包含字符串1的所有行 * `:g/字符串1/s//字符串2/`:用字符串2替换字符串1的首次出现 * `:g/字符串1/s//字符串2/g`:用字符串2替换字符串1的所有出现 * `:g/字符串1/s//字符串2/gp`:用字符串2替换字符串1的所有出现,并将所有修改过的行显示 * `:g/字符串1/s//字符串2/gc`:字符串1每出现一次,询问是否替换 ### 6.5.3 插入shell命令 * 执行shell命令:`:!command` * 读取命令输入并插入:`:r !command` * 例如:`:r !ls`会在当前文件光标位置插入ls的输出内容 ### 6.5.4 恢复文件 * 在编辑文件时生成`.swp`临时文件,正常退出时被删除,意外退出时可以用`:recover`恢复,也可以用`vi -r filename`恢复。 ### 6.5.5 vi的选项设置 * 控制不同编辑功能,使用`:set`命令 * `:set all`:显示所有设置 * `:set lines=24`:设置行数 * `:set number`:显示行号 * `:set nonumber`:不显示行号 * `:set autoindent`:自动缩进 ## 6.6 文本移动和编辑多个文件 ### 6.6.1 缓冲区方式下的文本移动 * **编辑缓冲区** :用户在编辑缓冲区工作,存盘前内容临时存在编辑缓冲区中。 * **命名缓冲区** :由字母a~z命名,有26个不同缓冲区 * 从编辑缓冲区到命名缓冲区(拷贝或剪切)命令格式:`“字母名+行号+操作命令(Ydd)` * 从命名缓冲区到编辑缓冲区(粘贴)命令格式:`"字母名+操作命令(Pp)` * **删除缓冲区** :由数字1~9指定 * 删除并放入删除缓冲区:`"25dd` * 粘贴:`"2p` ### 6.6.2 按行操作的文本移动 * 按行拷贝(co命令):`:1 3 co .` * 文本块移动(m命令):`:1 3 m 7` * 文件间的文本移动: * `:2 5 w filename` * `:2 5 w >> filename` ### 6.6.3 编辑多个文件 * 格式: `vi 文件1 文件2 …` * 切换文件:`:n` * 打开新文件:`:e filename` * 强制打开新文件:`:e! filename` * 例如:编辑文件ex1.c,将文件max.c的6行文本移动插入到ex1.c的指定位置。 ## 课后习题 1. 进入和退出vi编辑器的方法有哪些? 2. vi编辑器的工作方式有哪些?相互间如何转换? 3. 打开vi编辑器,进行如下操作: 1. 插入2019年日历,并将文件命名为2019.txt。 2. 将4、5、6月的日历整体向右移动一个制表位。 3. 将日历标题“2019”改为“2019年全年日历”。 4. 删除1、2、3月的日历,然后恢复。 5. 将7、8、9月的日历整体移到最后。 6. 检索字符串“30”,若为每月最后一天则删除。 7. 显示行号。 8. 在vi编辑器中统计文件大小。 4. 已知两个文本文件f1和f2,将f1的第5~9行剪切并插入到f2的第3行后,再将f2的所有read字符串改为reading,最后在f1文件后附加当前时间。写出操作步骤及相关命令。 END OF CHAPTER 6 # 第7章 Shell程序设计 ## 本章的学习目标 1. 了解Shell的地位和作用、Shell各主要版本 2. 熟练掌握shell脚本的建立与执行方法 3. 掌握shell的变量及特殊字符 4. 掌握shell的输入输出命令 5. 掌握常用shell程序逻辑结构语句 ## 7.1 Shell概述 ### 7.1.1 Shell简介 #### Shell的功能 1. 接收用户键入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,子进程终止后,发出提示符。 2. 作为命令解释程序,是高级程序设计语言。 #### Shell程序简介 * **Shell程序** :需要进行编写内容,存放到文件中,由系统解释执行此文件来得到需要的结果。此文件通常也称为shell脚本(script)。 * Shell程序类似于DOS/Windows下的批处理,具有许多C语言和其他编程语言的特性。 #### Shell的主要版本 * **Bourne Shell** :由AT&T Bell实验室的Stephen Bourne为AT&T的UNIX开发,是其他Shell的开发基础,也是各种UNIX系统上最常用、最基本的shell。 * **C-shell** :由加州伯克利大学的Bill Joy为BSD UNIX开发,主要模拟C语言。 * **Korn shell** :由AT&T实验室的David Korn开发,与sh兼容,但功能更强大。 * **Bash** :Linux系统中使用的主流Shell,是Bourne Again Shell的缩写,由Bourne shell发展而来。 #### 创建一个Shell程序 * **示例7.1** :由三条简单命令组成的shell程序,文件名为test7-1。 ```Bash ls -l cal who ``` ``` 执行:`sh test7-1` ``` ### 7.1.2 Shell脚本的建立与执行 #### Shell脚本的建立 * 同建立普通文本文件的方式相同,可利用编辑器vi或cat命令,进行程序录入和编辑加工。 #### Shell脚本的执行 1. 使用`sh 脚本名` 2. 使用输入重定向:`sh < 脚本名` 3. 改执行权限后直接执行方式: ```Bash # chmod a+x test # ./test ``` 4. 将脚本复制到/bin目录,作为Shell命令直接执行: ```Bash # cp test /bin # test ``` ## 7.2 Shell的变量 ### 7.2.1 Shell环境变量 #### 可写的Shell环境变量 * 用于定制shell的运行环境,并保证shell命令的正确执行。 * 可对它们进行赋值,大部分可写的shell环境变量在登录过程中执行“/etc/profile”文件时进行初始化。 * 示例环境变量:`HOME`、`MAIL`、`PATH`、`PS1`、`PWD`、`TERM` #### 只读的环境变量 * 预先定义好的特殊环境变量,用户不能重新设置。 * 常见的只读环境变量: * `$*`:所有命令行参数的值 * `$#`:命令行参数的总数 * `$$`:当前进程的进程ID(PID) * `$?`:最后执行的一条命令的退出状态,返回值为0则成功,非0则失败 * `$!`:在后台运行的最后一个进程的进程ID #### 位置参数 * 在命令行传递给shell脚本的参数。共有十个位置参数,依次是`$0`,`$1`,`$2`,…,`$9`。 * `$0`始终表示命令名或shell脚本名。 * 示例: ```Bash echo "第一个参数是 $1" ``` #### 移动位置参数 * 使用`shift`命令移动位置参数。 * 示例:`shift 3`,每次把位置参数左移3位。如果未带参数,则默认值为1。 ### 7.2.2 Shell的用户自定义变量 * 用户自定义变量在shell脚本中使用,拥有临时的存储空间,无需声明和初始化。 * 命名规则:字母或下划线开头,由字母、数字和下划线组成,大小写敏感。 * 赋值格式:`变量名=值` * 使用变量:在变量名前面加上`$`符号。 #### 变量赋值和使用示例 * 赋值: ```Bash mydir=/home/a myname="Zhang san" A=$B B=$C C=hello ``` * 使用: ```Bash echo "目录是 $mydir" ``` ### 7.3 Shell中的特殊字符 #### 通配符 * 星号(*):匹配任意一个字符串(文件名前面的圆点和路径名中的斜线不能匹配)。 * 问号(?):匹配任意一个字符。 * 方括号([ ]):匹配括号内的任意一个字符。 * 感叹号(!):表示不在方括号中所列出的字符。 #### 引号 * **双引号(“”)** :保留特殊字符$、倒引号和反斜线的功能,其余字符作为普通字符处理。 * **单引号(‘’)** :所有字符作为普通字符处理。 * **倒引号(``)** :将括起来的字符串解释为命令行,并执行。 #### 顺序操作符 * 顺序分隔符(;):将多条命令在一行中输入,用分号隔开。 * 管道线(|):顺序执行,将前一个命令的输出作为下一个命令的输入。 #### 逻辑操作符 * **逻辑与(&&)** :command1 && command2,当command1成功时执行command2。 * **逻辑或(||)** :command1 || command2,当command1失败时执行command2。 #### 注释符和反斜线 * **注释符(#)** :用于添加注释。 * **反斜线(\)** :转义符,将特殊字符变为普通字符。 ### 7.4 Shell编程中的输入输出命令 * **标准文件** :stdin(标准输入)、stdout(标准输出)、stderr(标准错误输出)。 * **输入重定向** :command < input-file * **输出重定向** :command > output-file * **输出附加定向** :command >> output-file * **标准错误重定向** :command 2> error-file #### read命令 * 用于从标准输入读取数据并赋给指定变量。 * 格式:`read 变量1 [变量2] ...` #### echo命令 * 将参数输出,通常用双引号括起来以便于shell正确解释。 * 示例: ```Bash echo "当前目录是 `pwd`" ``` ### 7.5 Shell程序控制结构语句 #### if语句 * **格式** : ```Bash if 判断条件 then 命令1 else 命令2 fi ``` * **示例7.7** :查找给定用户是否在线,并发送问候。 ```Bash echo "输入用户名:" read user if who | grep $user then echo "hello! $user!" | write $user else echo "$user 未登录" fi ``` #### 多路条件判断分支的if语句 * **格式** : ```Bash if 判断条件1 then 命令1 elif 判断条件2 then 命令2 else 命令n fi ``` * **示例7.9** :判断输入的数字是否小于5。 ```Bash echo '输入一个1到10之间的数:' read a if [ "$a" -lt 1 -o "$a" -gt 10 ] then echo "错误的数字" exit elif [ ! "$a" -lt 5 ] then echo "数字不小于5" else echo "数字小于5" fi ``` #### 测试语句 * **文件测试** : ```Bash -r file # 文件可读 -w file # 文件可写 -x file # 文件可执行 -f file # 普通文件 -d file # 目录文件 -s file # 非空文件 ``` * **字符串测试** : ```Bash [ -n str ] # 字符串非空 [ -z str ] # 字符串为空 [ str ``` 1 = str2 ] # 字符串相等 [ str1 != str2 ] # 字符串不等 ```SQL - **数值测试**: ```sh [ n1 -eq n2 ] # 等于 [ n1 -ne n2 ] # 不等于 [ n1 -lt n2 ] # 小于 [ n1 -le n2 ] # 小于等于 [ n1 -gt n2 ] # 大于 [ n1 -ge n2 ] # 大于等于 ``` * **逻辑操作符** : ```Bash [ ! expression ] # 逻辑非 [ expression1 -a expression2 ] # 逻辑与 [ expression1 -o expression2 ] # 逻辑或 ``` #### case语句 * **格式** : ```Bash case string in pattern1) commands1 ;; pattern2) commands2 ;; ... patternn) commandsn ;; esac ``` * **示例7.10** :判断输入字符串是否匹配文件名。 ```Bash case $1 in [dD]ate) echo "日期是 `date`" ;; dir|path) echo "当前目录是 `pwd`" ;; *) echo "无效参数" ;; esac ``` #### for语句 * **格式** : ```Bash for variable [in argument-list] do command-list done ``` * **示例7.12** :将指定值用for循环依次输出。 ```Bash for a in 1 2 3 4 5 do echo "$a" done ``` * **示例7.14** :将当前目录下的所有*.c文件复制到指定目录中,并显示复制后目录文件清单。 ```Bash dir=$1 shift if [ -d $dir ] then cd $dir for name do if [ -f $name ] then cat $name echo "End of ${dir}/$name" else echo "无效文件名:${dir}/$name" fi done else echo "无效目录名:$dir" fi ``` #### while语句 * **格式** : ```Bash while expression do command-list done ``` * **示例7.16** :输出0到10之间的整数。 ```Bash x=1 while [ $x -le 10 ] do echo $x x=`expr $x + 1` done ``` #### break和continue语句 * **break** :从循环体中退出。 ```Bash break [n] ``` * **continue** :跳过循环体中剩余语句,回到循环开头。 ```Bash continue [n] ``` * **示例7.18** :用while和break输出1-10之间的整数。 ```Bash x=1 while true do echo $x x=`expr $x + 1` if [ "$x" -gt 10 ] then break fi done ``` #### 算术表达式和退出脚本程序命令 * **算术运算** :expr n1 运算符 n2 ```Bash expr 15 \* 15 ``` * **退出脚本程序** :exit [n] ```Bash exit 0 ``` #### 自定义函数 * **定义格式** : ```Bash function_name() { command-list } ``` ## 7.7 思考与实践 1. Shell脚本的执行有哪些方法?有何不同? 2. 环境变量与用户自定义变量有何区别? 3. 什么是管道?如何在命令行下使用管道? 4. 什么叫重定向?有哪几种重定向方式? 5. 编写一个只供a用户使用的新命令hello,功能描述如下:查找给定用户是否在线。如果在线就发问候给他。 6. 编写一个Shell脚本,利用for循环将当前目录下的所有*.c文件复制到指定目录中,并显示复制后目录内按文件大小排序的文件清单。 7. 编写一个Shell脚本,将第二个位置参数及其以后的各位置参数指定的文件复制到第一个位置参数指定的目录中。 8. 编写一个Shell脚本,根据键盘输入循环输入学生成绩(百分制),显示对应的成绩标准(及格和不及格),按“q”键退出,按其他键提示重新输入。 9. 编写一个Shell脚本,完成如下字符图形的输出。 10. [编写一个Shell脚本的安装文件Setup.sh](http://xn--ShellSetup-pf2pypw9f19nr02bno7ap3fes1f097adpi535b.sh),功能描述如下:显示当前目录内文件,如果有phpMyAdmin.tar.gz文件,则接受键盘提示输入y/n,输入y则把文件拷贝到默认站点主目录下解压缩并改名为admin,并提示用户进行http://localhost/admin方式访问。 END OF CHAPTER 7 # 第8章 Linux的网络服务 ## 本章的学习目标 1. 了解NFS网络文件系统,掌握NFS网络文件系统架设及挂接方法 2. 掌握Web服务器的架设方法 3. 掌握FTP服务器的架设方法及访问方法 4. 掌握Samba服务器的架设方法 ## 8.1 NFS网络文件系统 ### 8.1.1 NFS的概述 NFS(Network File System)网络文件系统,多用于Unix操作系统中。它是连接在网络上的计算机之间共享文件的一种方法,类似于Windows系统上的“网上邻居”,更适合于字符命令方式完成网络之间的文件共享。NFS通常在局域网中使用,当主机系统把所共享文件进行权限指定后,远程的客户机可以利用mount命令把remote所共享的文件系统挂接在自己的文件系统之下,使远程的文件使用如同本地文件一样。 #### NFS的特点 1. 不占本地工作站的磁盘空间。 2. 通过同步写磁盘可以实现分布式处理功能。 3. 利用字符命令方式,高性能,可灵活配置。 4. 扩充新的资源或环境时不需要改变现有的工作环境。 5. CDROM和USB等存储设备可以在网络上被其他计算机使用。 6. home目录可以放在NFS服务器上。 #### NFS建立的工作步骤 1. 实现NFS服务功能的系统必须安装`portmap`、`nfs-utils`两个软件包,并启动服务。 2. 主机对所提供的共享文件下放权限。 3. 客户机针对主机下放的权限把远程文件挂接到本地目录上。 ### 8.1.2 NFS的主机服务器配置及启动 #### 配置NFS服务器 * **配置文件** :`/etc/exports`,默认为空。 * **设置实例** : ```text /shared_directory client_address(options) ``` ``` - 指定客户机的地址: - 指定IP地址:`192.168.1.10` - 指定网段:`192.168.1.10/20` - 指定域名:`nfs.wdg.com` - 所有客户机:`*` - 设置选项: - `sync`:用户间同步写磁盘,建议使用 - `ro`:只读 - `rw`:可读写 ``` #### 启动NFS服务 必须先启动portmap服务,再启动nfs服务: ```Bash service portmap start service nfs start ``` #### 显示共享目录状态 ```Bash showmount [-ae] hostname ``` * `-a`:显示当前主机与Client所连接的使用目录状态 * `-e`:显示主机的共享目录 ### 8.1.3 客户端挂载NFS文件系统 #### 查看NFS服务输出的共享目录状态 ```Bash showmount -e IP(或主机名称hostname) ``` #### 挂载NFS服务器中的共享目录 ```Bash mount NFS服务器地址:共享目录 本地挂载点目录 ``` * 示例: ```Bash mount 192.168.1.1:/home/public /mnt/share ``` #### 查看及卸载已挂载的目录 * 查看挂载情况: ```Bash mount | grep nfs ``` * 卸载目录: ```Bash umount /mnt/share ``` ## 8.2 Web服务 ### 8.2.1 Apache服务器简介 * **Apache** :Internet上最热门的WWW(World Wide Web)服务。Web系统是客户/服务器模式的,需要服务器程序和客户端程序。 * **Apache服务器** :全球最流行的Web服务器,市场占有率超过60%。 ### 8.2.2 Apache服务器的安装及启动 #### 检测与安装Apache * 检测是否安装Apache: ```Bash rpm -qa | grep httpd ``` * 安装Apache: ```Bash rpm -ivh httpd-2.2.3-6.i386.rpm rpm -ivh httpd-manual-2.2.3-6.i386.rpm ``` #### Apache服务的启动、测试运行状态 * 查看运行状态: ```Bash systemctl status httpd ``` * 重新启动Apache服务: ```Bash systemctl restart httpd.service ``` ### 8.2.3 Apache服务器的配置 #### Apache主要配置文件 * 配置文件路径:`/etc/httpd/conf/httpd.conf` * 基本配置: * Web站点主目录 * Web站点主页检索列表设置 * 更改配置文件后,需要重新启动httpd服务以使更改生效。 ### 8.2.4 搭建虚拟主机 #### 虚拟主机的含义 * 虚拟主机(网站空间):将一台运行的Web服务器划分成多个“虚拟”服务器,用户感觉有多个对外的Web服务器。 * 分类: * 基于IP的虚拟主机 * 基于端口号的虚拟主机 * 基于主机名的虚拟主机 #### 基于IP的虚拟主机 1. 设置多个IP地址 2. 建立虚拟主机根目录,创建首页`index.html` 3. 编辑每个IP的不同配置文件 4. 测试虚拟主机主页 #### 基于端口号的虚拟主机 1. 在主配置文件中加入不同监听端口号 2. 建立虚拟主机根目录,创建首页`index.html` 3. 编辑每个端口号的不同配置文件 4. 测试虚拟主机主页 #### 基于域名的虚拟主机 1. 设置新的虚拟网卡地址 2. 将同一个IP映射成多个不同的主机名 3. 建立虚拟主机根目录,创建首页`index.html` 4. 编辑每个域名的不同配置文件 5. 测试虚拟主机主页 ### 8.2.5 个人Web站点的发布 1. 配置文件 2. 用户创建个人Web站点 3. 创建个人站点目录`public_html` 4. 修改用户目录权限(711) 5. 创建站点主页内容 6. 使用客户端浏览器访问自己的主页 ## 8.3 FTP服务 ### 8.3.1 FTP简介 * **FTP(File Transfer Protocol)** :用于传送文件的协议,是TCP/IP协议组的一部分。 * **下载(download)** :从远程计算机拷贝文件至本地计算机。 * **上传(upload)** :从本地计算机拷贝文件至远程计算机。 #### FTP用户授权 * **本地用户** :通过账号和密码登录,访问自己的根目录(如/home/user1)。 * **Guest用户** :特定用户提供公共账号和密码,仅用于文件传输服务,登录目录为指定目录。 * **匿名用户(anonymous)** :使用anonymous用户名和空口令登录。 #### FTP的传输模式 * **ASCII传输方式** :拷贝简单ASCII码文本文件,自动调整文件内容以适应不同计算机的文本文件格式。 * **二进制传输模式** :逐位保存文件位序,确保原文件和拷贝文件逐位一一对应。 ### 8.3.2 Linux下的FTP服务器 * **常用FTP服务器** : * Wu-ftpd * Proftpd * vsftpd ### 8.3.3 FTP服务器的配置 #### vsftpd服务的安装与启动 * **安装vsftpd** : ```Bash rpm -ivh vsftpd-*.rpm ``` * **启动、停止、重启vsftpd服务** : ```Bash service vsftpd start service vsftpd stop service vsftpd restart ``` #### vsftpd服务的默认配置信息 * **配置文件** :`/etc/vsftpd/vsftpd.conf` * **默认设置的主要配置参数及含义** #### 测试vsftpd服务默认配置 * **匿名用户访问** : * 匿名户名:anonymous * 默认路径:/var/ftp/pub * **本地用户访问** : * 默认路径:用户宿主目录 #### 修改默认配置 * **允许匿名用户上传文件** : ```Bash anon_upload_enable=YES anon_mkdir_write_enable=YES anon_world_readable_only=NO write_enable=YES ``` ``` 修改配置文件并重启vsftpd服务: ``` ```Bash chmod 777 /var/ftp/pub ``` * **限制本地用户访问** : ```Bash userlist_enable=YES userlist_deny=YES userlist_file=/ ``` etc/vsftpd/user_list ```SQL - **修改端口号**: ```sh listen_port=61121 ``` * **设置欢迎语** : 在各自宿主目录内,新建`.message`文件,内容为用户登录后的欢迎语。 #### FTP服务的客户端访问 * **命令方式** : ```Bash ftp 主机名或主机IP 端口号 ``` * **浏览器访问** : ```Bash ftp://用户名:密码@FTP服务器域名或IP:端口号 ``` * **专用软件方式** :如CuteFTP ## 8.4 Samba服务 ### 8.4.1 Samba简介 * **SMB协议** :Server Message Block协议,用于共享文件、打印机、串口等,遵循客户机/服务器模式。 * **Samba的主要功能** :实现Linux和Windows操作系统间的文件共享。 ### 8.4.2 安装与启动Smb服务 * **安装Samba服务器** : ```Bash yum install samba ``` * **启动Samba服务** : ```Bash service smb start service smb stop service smb restart ``` ### 8.4.3 Smb服务的配置 * **配置文件** :`/etc/samba/smb.conf` * **默认配置信息** : ```Bash grep -v "#" /etc/samba/smb.conf | grep -v ";" ``` #### 设置Samba访问密码 * **命令** : ```Bash smbpasswd -a 用户名 ``` ``` 示例: ``` ```Bash smbpasswd -a wdg ``` ### 8.4.4 在Windows系统中访问Linux系统的Samba共享 * 打开“网上邻居”→“整个网络”→“Microsoft Windows Network”,找到Linux中samba服务默认配置的工作组名称。 * 打开“Mygroup”组,找到samba服务的Linux系统,输入用户名和密码,即可访问Samba服务器提供的资源。 ### 8.4.5 Samba服务的客户端访问Windows的共享信息 * **查看共享资源** : ```Bash smbclient -L //hostname或IP地址 -U username ``` * **访问指定主机的共享信息** : ```Bash smbclient //hostname或IP地址/sharename -U username ``` ## 8.6 思考与实践 1. 什么是NFS、SMB?它们之间的区别是什么? 2. 说出建立NFS的工作步骤及相关命令。 3. 如何建立个人Web站点? 4. FTP服务器的远程访问有哪几种方式?它们各自的特点是什么? 5. Smb和Samba有什么区别?简述在Windows中访问Linux中共享信息的实现方式及操作步骤。 6. 已知同一台计算机中安装了Linux和Windows两个操作系统,它们资源共享的方法有几种?举例说明并写出相关的命令操作。 7. 在Windows下分别利用远程终端的SSH方式建立基于IP、端口号和域名的三种方式的虚拟主机,对外发布站点,站点文件在Windows系统下制作完成,然后使用FTP客户端软件上传到Linux系统虚拟主机本地路径的站点目录中,并在Windows下的浏览器访问虚拟主机进行测试。 END OF CHAPTER 8 # 第9章 Linux系统下的数据库应用 ## 本章的学习目标 1. 了解Linux下的常用数据库的种类及其特点。 2. 掌握MySQL数据库的基本操作方法。 3. 掌握MySQL数据库的远程管理方法。 4. 掌握基于Web方式下的PHP访问MySQL数据库的环境构建方法。 5. 了解PHP访问MySQL数据库的基本编程方法。 ## 9.1 Linux系统下的数据库种类及特点 ### 9.1.1 数据库简介 #### 数据库相关概念 * **数据库(Database)** :有组织的数据集合。 * **数据库管理系统(DBMS)** :用于管理数据库的软件。 #### 数据库类型 1. **纯文本数据库** :简单、结构化文本文件。 2. **关系型数据库** :数据存储在表中,表之间通过关系连接。 #### 数据库管理员的职责 * 维护数据库的安全性和完整性。 * 进行数据库的备份和恢复。 * 优化数据库的性能。 ### 9.1.2 Linux下的主要自由软件数据库 #### PostgreSQL数据库 * 高性能、支持ACID事务、支持多种数据类型和扩展。 #### MySQL数据库 * 高性能、易用、广泛应用于Web开发。 ## 9.2 MySQL数据库管理 ### 9.2.1 MySQL数据库的安装 #### MySQL数据库的安装方式 * 使用YUM或APT包管理器安装。 * 从官方网站下载源码编译安装。 #### MySQL数据库安装源的获得 * 官方网站:`https://dev.mysql.com/downloads/` ### 9.2.2 MySQL数据库的初始化操作 #### 初次登录MySQL * 使用`mysql`命令行工具: ```Bash # mysql ``` * 使用指定账户登录: ```Bash # mysql –h hostname –u username –p Enter password: ****** ``` #### 连接与断开MySQL服务器 * 连接: ```Bash # mysql ``` * 断开: ```Bash mysql> quit ``` ### 9.2.3 MySQL数据库的维护 #### 用户创建及其授权 * 创建一个新用户并授全部权限: ```Bash CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION; ``` * 创建一个普通用户并授部分权限: ```Bash CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, UPDATE ON database_name.* TO 'newuser'@'localhost'; ``` * 删除用户: ```Bash DROP USER 'username'@'localhost'; ``` * 修改root用户的远程访问权限: ```Bash UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES; ``` #### MySQL数据库的备份与恢复 1. 使用mysqldump命令备份数据库: ```Bash mysqldump -h 192.168.1.200 -u root –p123456 wdg > /home/wdg/wdg.sql ``` 2. 恢复数据库: ```Bash mysql -u root –p123456 wdg < /home/wdg/wdg.sql ``` 3. 使用直接拷贝数据库文件的方法备份数据库: ```Bash cp –r /var/lib/mysql/wdg /home/wdg ``` 4. 恢复数据库: ```Bash cp –r /home/wdg/wdg /var/lib/mysql/ ``` ### 9.2.4 MySQL数据库的客户端命令操作 * **查看数据库数据** : ```Bash show databases; use database_name; show tables; select field1, field2 from table_name; ``` * **创建与删除数据库** : ```Bash create database database_name; drop database database_name; ``` * **创建、查看表结构及删除表** : ```Bash create table table_name (field1 type, field2 type); describe table_name; drop table table_name; ``` * **增加、修改和删除记录** : ```Bash insert into table_name (field1, field2) values (value1, value2); update table_name set field1 = value1 where condition; delete from table_name where condition; ``` ### 9.2.5 MySQL数据库基于GUI方式的远程管理 #### Navicat for MySQL简介 Navicat for MySQL是一款强大的MySQL数据库管理和开发工具,为专业开发者提供强大的工具,同时易于学习。 #### Navicat for MySQL的安装与连接 * **安装** : 从官方网站下载并安装。 * **连接MySQL数据库** : 在Navicat中输入MySQL服务器的连接信息,进行连接。 ## 9.3 PHP访问数据库 ### 9.3.1 PHP简介及运行环境 #### PHP简介 PHP(PHP: Hypertext Preprocessor)是一种嵌入在HTML中的脚本语言,由服务器解释执行。PHP是免费的、跨平台的。 #### PHP的安装及配置 * 安装PHP: ```Bash rpm -qa | grep php ``` * 配置文件:`/etc/httpd/conf.d/php.conf` #### 测试Apache的PHP支持 * 创建测试文件: ```Bash echo "<?php phpinfo(); ?>" > phpinfo.php ``` ### 9.3.2 PHP网络编程 #### PHP语法简介 PHP是一种嵌入在HTML标识内的脚本语言,在服务器端由PHP解释器解释执行,生成HTML并传送到客户端,再由浏览器解释成网页供用户浏览。PHP的语法混合了C、Java、Perl以及PHP式的新语法,可以比C或Perl更快地执行动态网页。 #### 一个PHP的流程控制程序示例 ```PHP <?php for($i=1;$i<=10;$i++) { echo "$i 黑龙江科技大学!<br>"; } ?> ``` #### PHP连接MySQL数据库 * 示例代码: ```PHP <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database_name"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 结果"; } $conn->close(); ?> ``` ## 9.5 思考与实践 1. 如何实现MySQL数据库的异地访问?写出实现的办法、操作步骤及相关的MySQL客户端程序命令。 2. 如何实现MySQL数据库的定期备份? 3. 如何实现Windows下的MySQL数据库移植到Linux下MySQL数据库中? 4. MySQL数据库的客户端管理的模式方法主要有哪些?比较它们的性能,应用的客户端软件有哪些? 5. 利用MySQL数据库的客户端管理软件,建立一个数据库、表、字段及插入记录信息,再利用PHP脚本语言把自己建立的数据库记录信息在浏览器中读出来。 END OF CHAPTER 9 # 第10章 Linux系统的远程管理 ## 本章的学习目标 1. 掌握远程管理的含义及方式 2. 掌握终端方式的字符界面远程管理方法 3. 了解B/S方式的远程管理方法 4. 了解C/S方式的远程桌面管理方法 5. 了解远程管理各种方式方法的性能特点 ## 10.1 远程管理简介 * **远程管理的含义** :远程管理是指通过网络对计算机进行管理和操作,不需要物理接触被管理的计算机。 * **远程管理方式** :包括字符界面远程管理、B/S(浏览器/服务器)方式远程管理、C/S(客户机/服务器)方式远程桌面管理等。 ## 10.2 终端方式的字符界面远程管理 ### 10.2.1 Telnet方式 * **安装Telnet程序** : ```Bash yum install telnet-server ``` * **启动Telnet服务** (基于xinetd): ```Bash systemctl start telnet.socket systemctl start xinetd ``` * **服务开机自启动** : ```Bash systemctl enable xinetd.service systemctl enable telnet.socket ``` * **远程Telnet客户端登录** (不允许root登录): ```Bash telnet IP 端口号 ``` ### 10.2.2 SSH方式 * **SSH简介** :SSH(Secure SHell)是安全的shell字符命令操作,实现与Telnet服务类似的功能,但采用了密文的形式在网络中传输数据,更安全、更稳定。 * **启动sshd服务** : ```Bash service sshd start ``` * **OpenSSH客户端安装和使用** : ```Bash yum install openssh-clients ssh username@hostname ``` ## 10.3 B/S方式的远程管理 ### 10.3.1 Webmin简介 * **Webmin** :Webmin是基于B/S模式的远程管理工具,使用Perl语言编写的CGI程序,运行于受管理的Linux/Unix主机,客户端使用Web浏览器登录到Webmin服务器。 * **优点** : * 基于B/S模式,客户端不需要额外配置,访问方便 * 易于导航操作、管理维护方便 * 插件式结构,扩展性和伸缩性强 * 支持SSL、访问控制,安全性高 * 支持多国语言版本 ### 10.3.2 Webmin的安装与设置 * **安装** : * 下载tar.gz文件,解压缩后执行setup.sh安装向导 ```Bash tar -zxvf webmin-1.970.tar.gz cd webmin-1.970 ./setup.sh ``` ### 10.3.3 Webmin的自身配置与组成 * **登录** :通过Web浏览器输入服务器地址和端口号登录 * **语言及主题样式设置** * **用户管理** * **系统组成** ### 10.3.4 Webmin的标准管理模块 * **系统(System)** * **服务器(Servers)** * **网络(Networking)** * **硬件(Hardware)** * **集群(Cluster)** * **其他(Others)** ### 10.3.5 Webmin的安全性 * **SSL支持** * **用户访问控制** * **IP访问控制** ## 10.4 C/S方式的远程桌面管理 ### 10.4.1 启动及关闭Linux系统下的VNC服务 * **检查安装的VNC软件包** : ```Bash rpm –qa | grep vnc ``` * **启动VNC服务** : ```Bash vncserver ``` * **关闭VNC服务** : ```Bash vncserver -kill :1 ``` ### 10.4.2 配置VNC服务 * **启动用户个人的VNC服务** :VNC服务器可以由超级用户root或普通用户启动,不同用户可以分别启动自己的VNC服务器。 * **修改用户个人的VNC服务的配置** :在CentOS 7系统中,修改`~/.vnc/xstartup`文件以提供不同的图形界面。 ### 10.4.3 VNC客户机连接到Linux下的VNC服务器 * **Linux下的VNC客户机** : ```Bash vncviewer 服务器IP:1 ``` * **Windows下的VNC客户机** :使用VNC Viewer软件输入服务器IP和显示编号进行连接。 * **使用浏览器VNC客户机** : ```Bash http://服务器IP:5801 ``` ### 10.4.4 Linux下访问Windows系统的远程桌面 * **安装rdesktop** : ```Bash rpm -qa | grep rdesktop ``` * **设置Windows系统的远程桌面访问支持** * **连接Windows的远程桌面** : ```Bash rdesktop -u 用户名 192.168.1.1 ``` ## 10.5 远程管理方式的性能比较 * **C/S方式的远程管理性能** * **B/S方式的远程管理性能** * **终端的字符方式性能** ## 思考与实践 1. 什么是远程管理,远程管理的方式有哪几种,各自的特点是什么? 2. 对于专业的网络管理员来说,使用哪一种远程管理方式比较适合? 3. 远程桌面的管理方式,服务器端和客户端需要什么条件? 4. 比较Telnet、SSH、Webmin、VNC四种远程管理方式的性能,包括用户使用的方便性、多用户性、并发性、稳定性、系统响应速度、耗用服务器的资源、安全性等方面,说明哪一种远程管理方式更卓越。 5. 已知字符终端登录的root用户,如何建立一个以普通用户a用户身份来实现远程桌面方式登录Linux主机。 END OF CHAPTER 10 # 第11章 Linux系统的安全管理 ## 本章的学习目标 1. 了解计算机网络安全基础知识 2. 掌握Linux系统的日志管理 3. 掌握Linux下防火墙管理 ## 11.1 计算机网络安全的基础知识 ### 11.1.1 计算机网络安全的概念及其特征 计算机网络安全是利用网络管理控制技术,确保网络上的硬件资源、软件资源和信息资源不被非法用户破坏和使用的一门综合性学科。 ### 11.1.2 计算机操作系统中的不安全因素 1. 人为因素 2. 病毒感染 3. 特洛伊木马 4. 系统漏洞 ### 11.1.3 计算机网络安全中的关键技术 1. 防火墙技术 2. 数据加密技术 3. 入侵检测技术 4. 防病毒技术 5. 访问与控制技术 6. 鉴别和认证技术 7. 虚拟专用网技术 ## 11.2 Linux系统中的日志安全管理 ### 11.2.1 日志文件的类型 1. 连接时间日志 2. 进程统计日志 3. 错误日志 ### 11.2.2 Linux系统常用的日志管理命令 * **列出所有用户最近登录的信息** :`lastlog` * **列出当前和曾经登入系统的用户信息** :`last` * **列出失败尝试的登录信息** :`lastb` ### 11.2.2 查看所有日志 * **查看内核日志** :`journalctl -k` * **查看最后10条日志** :`journalctl -n 10` * **查找指定时间的日志** : ```Bash journalctl --since "20 min ago" journalctl --since today journalctl --until 2018-12-12 journalctl _UID=33 --since today journalctl --vacuum-time=1years ``` ### 11.2.3 常用的日志文件 日志文件是一个经常变化存储空间大小的文件,常用的系统日志文件包括: * 系统日志文件 * 纯文本文件类型的日志浏览 * 使用日志命令浏览 ### 11.2.4 常用的日志配置文件 * **日志的主配置文件** :`/etc/rsyslog.conf` * **轮转式日志的配置文件** :`logrotate`是一个日志管理程序,通过计划任务`crond`服务定期执行,负责把旧日志文件删除或备份,并创建新日志文件。 ## 11.3 Linux系统的防火墙管理 ### 11.3.1 防火墙简介 防火墙是一种将内部网和外部网分开的方法,是在一个可信的网络和不可信的网络之间建立安全屏障的软件或硬件产品,最大限度地阻止网络中的黑客来访。 #### 防火墙功能 1. 网络安全的屏障 2. 强化安全策略 3. 监控和审计网络存储和访问 4. 防止内部信息的外泄 ### 11.3.2 防火墙的类型和设计策略 #### 防火墙的类型 1. **包过滤** :根据包过滤规则及IP包头的信息,在网络层判定允许或拒绝包的通过。 2. **应用代理服务** :由位于内部网和外部网之间的代理服务器完成,工作在应用层,代理用户进、出网的各种服务请求,如FTP和Telnet等。 #### 防火墙的设计策略 1. 默认允许一切,在接受所有数据包的基础上禁止特殊的、不希望收到的数据包。 2. 默认禁止一切,然后根据所希望提供的服务逐项允许需要的数据包通过。 ### 11.3.3 Linux的防火墙管理 #### Firewalld简介 `firewalld`守护进程是动态管理防火墙的,支持允许服务或应用程序直接添加防火墙规则的接口,不需要重启整个防火墙即可应用更改。CentOS 7默认使用`firewalld`作为防火墙。 #### 常用的firewall-cmd命令 1. **基本操作** 2. **区域管理** 3. **服务管理** 4. **端口管理** 5. **时效管理** 6. **IP地址管理** ## 11.5 思考与实践 1. 举例说明你使用的Linux操作系统网络安全管理中使用了哪些关键技术。 2. 如何清除系统中不用的默认账户? 3. 如何查看Linux系统上一周pts/0端口中有哪些用户来访? 4. 如何查看指定IP地址来访的登录用户信息? 5. 日志变化写入动态检测实践:同时开两个字符命令终端窗口,分别执行不同的命令,看A窗口中的日志信息变化情况。 * A窗口执行命令: ```Bash tail -f /var/log/messages ``` ``` - B窗口执行命令: ``` ```Bash systemctl restart firewalld su – wdg init 5 ``` 6. 防火墙的功能有哪些? 7. 举例说明在你使用的Linux操作系统中的防火墙所使用的设计策略。 8. 如何将某个服务添加到Linux防火墙中,作为信任的服务? END OF CHAPTER 11 # 第12章 Linux系统下的编程 ## 本章的学习目标 1. 熟悉Linux编程环境和常用开发工具 2. 熟练掌握Linux下的C/C++语言编程方法 3. 学会在Linux下进行Java语言编程 4. 了解Linux下的编程工具GNU make和程序调试工具GDB 5. 了解Linux网络编程中网络概念和Socket编程函数 6. 了解嵌入式开发平台和开发过程 7. 了解Linux内核及内核的体系结构 ## 12.1 Linux编程环境及工具 ### 12.1.1 程序开发过程 1. **编译过程** :将源代码编译成可执行文件。 2. **解释过程** :将源代码逐行解释执行。 ### 12.1.2 Linux编程环境和开发工具 #### 基于文本模式的开发平台 1. **编辑工具** :如vi、vim、nano。 2. **编译工具** :如gcc、g++。 3. **调试工具** :如gdb。 #### 集成开发平台 * **常见的集成开发环境(IDE)** :如Eclipse、NetBeans、Code::Blocks等。 ## 12.2 Linux高级语言编程开发 ### 12.2.1 Linux下C语言编程 * **gcc** :Linux下最常用的C语言编译器,与最新的C语言标准ANSI兼容。 * **编译格式** :`gcc [options] file-list` * **示例** : ```Bash gcc -o myprogram myprogram.c ``` ### 12.2.2 Linux下C++语言编程 * **g++** :C++的编译器,它实际上调用gcc,使其能识别C++源代码。 * **示例** : ```Bash g++ -o myprogram myprogram.cpp ``` ### 12.2.3 Linux下Java语言编程 * **Java编译器** :`javac` * **Java虚拟机** :`java` * **编译和执行示例** : ```Bash javac MyProgram.java java MyProgram ``` ### 12.2.4 Linux下编程工具GNU make #### GNU make概述 * **make工具** :在Linux环境下使用GNU的make工具能构建工程,整个工程的编译只需一个命令。 * **Makefile文件结构** : * 目标文件: 依赖文件 ```Bash [TAB]命令 ``` #### Makefile文件示例 ```Makefile all: myprogram myprogram: myprogram.o gcc -o myprogram myprogram.o myprogram.o: myprogram.c gcc -c myprogram.c clean: rm -f myprogram.o myprogram ``` ### 12.2.5 Linux下程序调试工具GDB #### GDB概述 GDB是一种高效的调试工具,可以帮助软件工程师提高工作效率。 #### GDB操作基础 * **命令格式** :`gdb programname` * `programname`是要调试的编译后的程序文件。 * **GDB调试实例** : ```Bash gdb myprogram ``` ## 12.3 Linux网络编程 ### 12.3.1 网络协议 * **网络协议** :TCP/IP协议、UDP协议等。 ### 12.3.2 端口和地址 * **端口** :通信端点,用于区分网络上的不同服务。 * **地址** :IP地址,用于唯一标识网络上的主机。 ### 12.3.3 SOCKET网络编程 * **Socket编程** :使用Socket接口进行网络编程,创建客户端和服务器端程序。 ## 12.4 Linux嵌入式程序开发 ### 12.4.1 嵌入式开发概述 * **嵌入式系统** :专门为特定应用设计的计算机系统。 * **Linux嵌入式的优势** :开源、稳定、可裁剪、广泛支持硬件。 ### 12.4.2 嵌入式开发设计过程 * **开发过程** : 1. 硬件平台选择 2. 操作系统移植 3. 应用程序开发 4. 系统测试和调试 ## 12.5 内核基础 ### 12.5.1 内核概述 * **内核** :操作系统的核心,负责管理系统资源和提供底层服务。 ### 12.5.2 Linux内核体系结构 * **内核子系统** : * 进程管理 * 内存管理 * 文件系统 * 设备驱动 * 网络子系统 ### 12.5.3 第一个内核模块程序 * **编写内核模块** : ```C #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk(KERN_INFO "Hello, world - this is the kernel speaking!\n"); return 0; } void cleanup_module(void) { printk(KERN_INFO "Goodbye, world - leaving the kernel.\n"); } ``` ## 12.7 思考与实践 1. Linux下的开发工具有哪些,集成开发平台都有哪些? 2. 在Linux下如何开发、调试C、C++、Java程序? 3. 编写一个C语言程序,出现错误时利用GDB进行调试,说出程序调试工具GDB的一般使用步骤及方法。 4. Linux下编程都用到哪些协议?Socket原始套接字有哪些操作函数,有哪些作用? 5. 嵌入式系统有哪些应用领域?嵌入式软件开发主要分几个步骤? 6. Linux内核都有哪些结构,作用各是什么? END OF CHAPTER 12 最后修改:2024 年 06 月 24 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏