Linux开发工具

目录

一、yum工具

 1.yum 背景知识

(1)商业生态

(2)开源生态

(3)软件生态本土化

2.yum 的基本使用

(1)查看软件包

(2)软件包名称构成

(3)安装软件

(4)卸载软件

二、vim编辑器

1.认识vim

2.模式及其切换

2.插入模式

3.命令模式

(1)光标定位操作

(2)文本复制、粘贴、剪切、撤销

(3)文本操作

4.底行模式

(1)基本操作

(2)分屏编辑

 (3)不退出vim,执行Linux指令

(4)全局替换与查找

5.vim配置

(1)vim配置的原理

(2)vim一键配置

6.将普通用户添加至信任列表

三、gcc/g++编译器

1.程序的编译和运行

2.使用gcc工具完成操作

(1)预处理

(2)编译(生成汇编)

(3)汇编(生成机器码)

(4)连接(生成可执行文件或库文件)

3.函数库

(1)对链接的新认识

(2)动态链接和静态链接

(3)静态库和动态库

(4)静态链接形成可执行程序

四、项目自动化构建工具Make/Makefile

1.Make/Makefile的介绍

3.Make/Makefile的简单使用

(1)Makefile文件的编写

(2)Makefile的使用

4.make智能识别的原理

5.Make/Makefile实例的执行过程

五、gdb调试工具

1.什么是gdb

2.debug和release

3.gdb调试代码

(1)进入调试

(2)显示源代码

(3)断点的添加、删除和信息显示

(4)run运行调试程序与continue继续运行

(5)逐语句和逐过程调试

(6)查看某个变量的值

(7)退出gdb

4.其他命令

六、进度条程序

1.前置知识

(1)\r&&\n

(2)行缓冲区

(3)各文件内容

 七、git上传代码

1.git的介绍

2.git的历史

3.git的使用

(1)安装

(2)gitee上传代码的准备工作

(3)下载项目到本地

(3)gitee三板斧——add、push和commit


一、yum工具

 1.yum 背景知识

(1)商业生态

在安装软件之前,需要先下载对应的软件的安装包,但是这个安装包并不存在于本地的计算机磁盘,而是存在于远端服务器上。世界上的服务器多了,那么计算机是如何知道该软件存在于哪个具体的服务器上呢?

对于电脑来说,我们一般通过官网下载相应软件包;而对于手机来说,我们更多通过手机自带的应用商店来下载软件包。

但实际上应用商店这个软件就那么大,里面也不存在所有的软件包。所以应用商店只是储存着对应软件下载网站的链接,最后我们的软件包还是从对应的网站上下载的。

这些我们下载下来的软件包是由一些企业、组织或个人提供的。这些企业、组织以及个人为了某种利益编写出了软件包,然后将其放在了对应的服务器上,供用户下载使用。

自此,一条简单的商业生态链就出来了:

一部分人编写出了软件包供其他人使用,并通过收费或者内置广告等方式从中获取利益;同时,它们也向手机厂商或者第三方下载软件的公司支付费用,使得自己的软件能够出现在对应品牌手机的应用商店(比如:苹果AppStore)或者第三方的下载工具 (比如迅雷等) 中被下载使用。

(2)开源生态

有人编写软件是为了赚钱,自然也有的人不为赚钱。有的人会将自己编写出的软件包的源代码公开,让别人能够免费使用,这种就叫开源。

yum是Linux下常用的一种包管理器;主要应用在 Fedora, RedHat,Centos 等Linux发行版本上,软件包和yum, 就相当于手机中的 “App的安装包” 和 “应用商店软件” 这样的关系。

在Linux之父托瓦兹编写出了Linux操作系统并将其开源之后,越来越多的人参与到了Linux的完善与扩展中来,其中也不乏为Linux免费编写软件的人;这些人会加入相应的Linux社区,然后将自己编写的软件放在社区对应的服务器上;而不同的社区会在自己的Linux版本中内置服务器和软件对应的下载链接,而这个用于存放下载链接的软件就是yum。

上面的过程也是开源生态的形成过程 – 不同的Linux发行版创建对应的Linux社区,社区拥有一个公共账户,用于接受来自世界各地的捐款,然后用账户里面的资金购买服务器、举行各种活动等等;来自世界各地的具有开源精神的人将自己编写的开源软件部署在社区的服务器上;社区再将这些软件的下载链接拷贝到对于Linux发行版的软件包管理器 (比如yum) 中,使得我们能够在Linux中通过软件包管理器安装使用各种软件。

(3)软件生态本土化

由于西方国家在计算机方面起步与发展比我国要早很多,所以我们上面所说的开源生态最先在西方形成,即大多数Linux社区,包括社区对应的服务器都是部署在国外的;所以在国内通过链接下载软件时访问会比较慢,再加上我国自有国情在,毕竟梯子这种东西是违法的,有时候想下载外网的软件还会访问失败。

针对上面这种情况,我国的一些高校以及公司就镜像(复制粘贴再加部分修改)了国外的软件服务,即把国外服务器上的软件拷贝到了国内的服务器上,使得我们可以直接访问国内的服务器就可以下载对应的软件。但是只拷贝软件也还不行,因为 yum 中下载软件时默认访问的链接还是国外的,所以这些高校/公司还提供了一套国内的下载链接配置文件 – yum 源配置文件。

在Linux中,yum 源配置文件是存在于 /etc/yum.repos.d/ 目录下的 CentOS-Base.repo 文件

如果你使用的是云服务器,那么 yum 源一般都是配置好的,如果你使用的是虚拟机,你需要打开 CentOS-Base.repo 查看里面的链接是否是国内的链接,如果不是,就需要自己手动配置,配置的方法网上很多,直接搜索对应的Linux发行版即可。

这里的镜像就都是腾讯网站下的安装包(tencentyum)

2.yum 的基本使用

(1)查看软件包

我们可以通过 yum list 命令列举出当前一共有哪些软件包可供安装(那个显示可安装程序的动图太大了传不上来……)

但软件包的数目太多, 所以我们一般使用 grep 命令来筛选出我们需要的包,比如找到rzsz

(2)软件包名称构成

主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构

  • “.x86_64” 后缀表示64位系统的安装包,“.i686” 后缀表示32位系统安装包,安装包要和系统匹
  • “el7” 表示主机平台,也就是操作系统发行版的版本,其中 “el7” 表示的是 centos7/redhat7,“el6” 表示centos6或者redhat6
  • 最后一列中@OS表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店”

(3)安装软件

我们可以通过如下命令来安装软件包 (其中 -y 代表不询问直接安装)

格式:yum install -y 软件名

rzsz 工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件,安装完毕之后我们可以通过拖拽或者命令的方式将文件上传过去。

输入yum install -y rzrs,开始安装这个软件。不过这里告诉我们这个软件已经被安装好了,不需要再次安装。

rzrs在我们官方软件的列表中,但是官方软件的列表只包含了一部分经过测试的运行稳定可靠的软件。有一些软件并没有被纳入 Centos、Ubuntu、Kail等相关生态平台的官方软件集合中,如果我们想使用这些软件,需要安装 非官方软件集合列表:epel-realse

yum install -y epel-realse进行安装。不过这里告诉我们已经安装了最新版本,不需要再次安装。

我们再次安装一个不在官方软件列表中的sl软件程序,它可以在屏幕上打印一列小火车。

yum install -y sl

 注意事项

  • 安装软件时由于需要向系统目录中写入内容,一般需要 sudo 或者切到 root 账户下才能完成
  • yum安装软件只能一个装完了再装另一个;正在yum安装一个软件的过程中,如果再尝试用yum安装另外一个软件,yum会报错
  • 软件和软件之间是有关联的,即具有一定的耦合度; yum 为了解决软件之间相互依赖的问题,有时候在安装一个软件会连带安装其他一些软件

(4)卸载软件

卸载软件的指令如下 (其中 -y 代表不询问直接卸载):

yum remove -y 软件名

我们卸载掉之前安装的sl小火车

 注意:关于 yum 的所有操作必须保证主机 (虚拟机) 网络畅通;可以通过 ping 指令验证网络:

二、vim编辑器

1.认识vim

vim是Linux 系统上一款强大的文本编辑器,类似于我们windows里的记事本。由于使用它便捷,高效的特点使它成为了目前最强大的编辑器,但是它最大的缺点之一就是使用门槛较高。

2.模式及其切换

通过vim 文件名的指令(例如:vim test.c)可以用vim编辑这个文件。

vim有很多的模式,不同的模式适配于不同的操作,vim有很多很多的模式,我们主要涉及到五六个,我们优先讲解命令模式、插入模式和底行模式三个。

当打开vim时,默认是命令模式,此时即使我们敲击键盘,也并没有输入内容。

如果想要输入内容,我们需要在键盘上敲 Shift+i 切换到插入模式。(左下角的INSERT表示插入模式)在这个模式下,我们就可以像记事本一样输入字符了。

此时,我们在插入模式下编写好了一个程序,我们想要保存并退出需要先按左上角esc退回到命令模式,然后按 Shift+:进入底行模式。

底行模式下输入wq就可以保存并退出了。

vim模式的切换一定是在命令模式下切换到其他模式,如果我们想从一个非命令模式切换到另一个非命令模式,我们需要按esc退回到命令模式再进入其他模式,不同的非命令模式不能直接切换。

详情见下图:

2.插入模式

插入模式允许我们像记事本一样输入内容,调节光标位置使用上下左右键。

Shift+i:从命令模式进入插入模式

Shift+a:从命令模式进入插入模式并将光标移动到最后一个字符后

Shift+o:从命令模式进入插入模式并换行

3.命令模式

(1)光标定位操作

  • Shift+4($)让光标快速移动到这一行的结尾。(一行的最右侧)
  • Shift+6(^)让光标快速移动到这一行的开头。(一行的最左侧)
  • Shift+g(G)让光标快速移动到文件的最后一行开头。(底部开头)
  • g+g让光标快速回到文件第一行开头。(顶部开头)
  • 行数+Shift+g跳转到任意行的开头。
  • h左、j下、k上、l右(逐字符,支持n操作,比如说输入5+l就是跳转到本行的第五个字符前)
  • w向后、b向前按单词移动(逐单词,也支持n操作,比如说输入5+w就是跳过五个单词)(但这个单词不一定是英语的单词,比如说符号“}”也被视作一个单词,大概了解一下就好)
  • cw删除当前单词,并切换为插入模式,cnw删除n个单词,并切换为插入模式

(2)文本复制、粘贴、剪切、撤销

  • yy复制光标所在行,nyy复制多行
  • p粘贴,np粘贴多次
  • u撤销,ctrl+r取消撤销
  • dd剪切光标所在行,ndd剪切多行,ndd+p剪切粘贴,如果我们不粘贴这里的dd就相当于删除
  • x向后剪切,nx向后剪切n个;X向前剪切,nX向前剪切n个字符

(3)文本操作

  • ~将光标当前位置逐字进行大小写转换(从光标所在位开始,按一次~转换一个字符到行末)
  • R转换为替换模式进行批量化替换
  • r单个字符替换,nr对n个字符进行相同的替换

4.底行模式

(1)基本操作

  • set no 显示行号
  • set nonu 隐藏行号;
  • wq! 强制保存并退出,w表示保存,q表示退出,!表示强制且写在字母后面,三个可以自由组合但是单独的!没有意义
  • :help vim-modes 查看vim的模式

(2)分屏编辑

  • vs copy.c 分屏编辑另一个文件
  • ctrl ww 光标在分屏间切换

 (3)不退出vim,执行Linux指令

  • !ls 在vim中使用ls指令
  • !gcc text.c 使用gcc编译text.c生成a.out文件
  • !./a.out 运行s.out文件

(4)全局替换与查找

  • %s/字符串1/字符串2/g(例如:%s/printf/cout/g)

s代表替换,g代表全局。例子中表示将所有printf替换为cout。

  • /查找的内容(例如:/printf)

使用/加查找内容即可进行内容的全局查找,例子中表示查找全局范围内所有的printf

5.vim配置

(1)vim配置的原理

我们之前看到有一个指令叫做:set no用于显示行号。如果我们想让vim默认就打开行号就需要对vim进行配置。

每一个用户在自己的家目录下,有一个属于自己的配置文件,所有的配置都写在这个文件内,叫做.vimrc(隐藏文件,需要自己创建)。所以,虽然每一个用户都使用同一个vim软件,但是不同用户使用自己的vim配置,互不影响。

例如在.vimrc中新增行号功能,可以在.vimrc中写入set nu,保存退出。再次打开vim就加入行号了

(2)vim一键配置

可以在gitee中搜索VimForCpp后,将该链接直接复制粘贴在shell中执行,即可完成配置。

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

配置前的vim十分难用,配置后的vim就方便很多了。

不过这个vim配置中换行默认缩进两个空格,如果想改变为4个空格的话可以把这三行的数字的2改为4(我的已经改过了)

6.将普通用户添加至信任列表

(1)使用root用户登录

(2)使用vim打开/etc/sudoers

(3)找到大约100行

(4)复制上面的内容到下一行然后修改头部的用户

(5)底行模式输入w!强制保存,然后输入q!强制退出

这样我们的example用户就被添加到信任账户后,普通用户也可使用sudo提权。

三、gcc/g++编译器

1.程序的编译和运行

一个C程序的编译和运行要经过下列步骤:

预处理(每个C语言源程序进行头文件的包含、注释的删除与宏的替换)→ 编译(每一个文件生成汇编代码)→ 汇编(生成机器可识别代码)→ 连接(生成可执行文件或库文件)

详情请见博客:(1条消息) 程序的编译和运行_聪明的骑士的博客-CSDN博客_编译运行

2.使用gcc工具完成操作

格式:gcc+[选项]+要编译的文件+[选项]+[目标文件]

(1)预处理

预处理功能主要包括宏定义、文件包含、条件编译和删除注释等。

格式:gcc+-E+文件+-o+[目标文件]

实例: gcc –E test.c –o test.i

  • “-E”是让 gcc 在预处理结束后就停止,注意必须是大写。
  • “-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

输入指令后ll可以看到新出现了一个test.i的文件,这就是test.c经过预处理后的文件

我们用vim打开test.i和test.c,发现stdio.h的内容已经被拷贝到文件中了,注释条件编译等也不在了

(2)编译(生成汇编)

在编译阶段,gcc 首先要检查代码的规范性、语法的正确性等,以确定代码的实际要做的工作,在检查无误后,gcc 会把代码翻译成汇编语言。

格式:gcc+-S+文件+-o+[目标文件]

实例: gcc –S test.i –o test.s

  • “-S”表示整个过程截止到编译结束,注意必须是大写

输入指令后ll可以看到新出现了一个test.s的文件,这就是test.c经过预处理后再编译后的文件

用vim打开形成的test.s和test.c,我们不需要看懂汇编代码,大概其知道其中的一些指令比如说:call是函数调用,push是压栈等就足够了。

(3)汇编(生成机器码)

在汇编阶段,gcc把编译阶段生成的“.s”文件转成目标文件,此时的文件都由01组成,是计算机可以看懂的二进制文件。

格式:gcc+-c+文件+-o+[目标文件]

实例: gcc –c test.s –o test.o

  • “-c”表示整个过程截止到编译结束

同样用vim打开test.o文件,内部全是乱码,这是因为在形成二进制机器码的阶段会有加密

(4)连接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段,连接起不同的.o文件最终形成可执行程序。

格式:gcc+文件+-o+[目标文件]

实例: gcc test.o –o test

链接后,运行生成的test可执行程序

3.函数库

(1)对链接的新认识

在我们的C程序中,并没有定义 printf 的函数实现,那我们是怎样使用 printf 函数的呢?

你可能会说,是因为在预处理中 stdio.h 的内容被复制到文件中,头文件中包含了这个函数的定义。

但是,其实 stdio.h 头文件中也是只有 printf 函数的声明,没有定义函数的定义,那到底是在哪里定义的“printf”函数的呢?

其实,系统把这些函数的定义都放到了 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是相当于链接到 libc.so.6 库函数中去,这样就能找到函数 printf 的定义了。

之前,我们在一个C语言程序的编译和运行中,我们曾经讲过链接是把经过编译后的各个文件的内容关联起来,在这里我们要认识到链接不只是.c文件,还有库文件的参与,而这也就是链接的作用——将自定义函数对不同的.c文件进行连接,对库函数与库进行链接。

(2)动态链接和静态链接

就像我们去图书馆,图书馆里有各种各样的书可以供你阅读。比如说,你在图书馆里发现了一本好书,但是没有经过图书馆管理员的借阅允许,你就只能在图书馆里去看这本书。

如果你不想每次都跑到图书馆去看书,那么你就可以自己买一本同样的书,就可以带着这本书到任何地方去看。

同样对于动态链接,我们需要某一个函数的定义就可以直接到相应的库里去找,就不需要把库中的函数实现拷贝一份到程序文件中,减少了程序占据的存储空间大小。但是每次遇到某个函数的定义都要再去对应位置寻找,降低了程序的运行效率。

而对于静态链接,我们就需要把库中的函数实现拷贝一份到程序文件中,我们也不需要去对应的库中寻找函数定义,增加了程序的运行效率,但是又大大增加了程序占据的存储空间大小。

所以我们很多时候会发现我们下载安装的应用程序会越来越大,除了我们自己使用留下的数据,还有一部分就是软件在你不知情的情况下将一些通过动态连接的代码下载到了本地,导致应用程序占用的存储空间越来越大。

(3)静态库和动态库

静态库是指使用静态链接时,库中文件的代码全部加入到可执行文件中,这个被加载的库就是静态库。静态编译的程序在运行时不再需要库文件的查找。在Linux下静态库的后缀名一般为.a,Windows下为.lib

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这个需要被查找的库就是动态库。在Linux下动态库一般后缀名为“.so”,Windows下为.dll。

前面的 libc.so.6 就是个动态库。而且 gcc 在编译时默认使用动态链接生成可执行文件

输入gcc test.o –o test,然后输入file test查看程序的连接属性

Linux上(Windows上也如此)gcc默认生成的可执行程序,是动态链接的(dynamically Linked)。

(4)静态链接形成可执行程序

如果我们就想让test.c静态链接形成可执行程序可通过下面的语句实现:

格式:gcc 源文件 -o 可执行程序名 -static

  • 一般系统会自动携带C语言动态库,C语言静态库可能没有安装,如果没有的话就需要自己安装,安装输入sudo yum install glibc-static即可
  • 编写一个test.c程序输入gcc test.c -o test_s -static
  • 用file指令发现test_s是静态链接的(statically linked)

四、项目自动化构建工具Make/Makefile

这一部分理解起来不太轻松,需要细细琢磨

1.Make/Makefile的介绍

make是一条命令,makefile是一个文件,两个搭配使用就可以完成项目的自动化构建。

make/makefile主要用于管理大型项目的各种文件,我们现在写的程序最多也就五六个文件,但是一个大型工程中的源文件多达上千个。

其中makefile是用于保存协调项目内文件运行的规则的文件,make指令是用于解释makefile中指令的命令。一般来说,大多数的代码集成开发环境都有像make这样的命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

3.Make/Makefile的简单使用

(1)Makefile文件的编写

我们写一个加法表,用main.c ,add.h, add.c三个文件实现。

//add.h
#include<stdio.h>
int Add(int x, int y);

//add.c
#include"add.h"
int Add(int x,int y)
{
    return x+y;    
}

//main.c
#include"add.h"
int main()
{
    int i = 1;
    for (i=1; i<9; i++)
    {
        int j = 1;
        for (j=1; j<=i; j++)
        {
            printf("%d+%d=%d",i,j,Add(i,j));        
        }    
    }
    return 0;
}

编写 makefile,最重要的是理解依赖关系和依赖方法。

依赖关系是指一个文件依赖另外一个文件,即想要得到一个文件,目录下必须先有另外一个文件

依赖方法则是指如何根据依赖文件来得到目标文件。

建立一个Makefile文件,注意文件名必须是makefile或Makefile,不能是其他名称,否则make不能识别。

这是加法表的Makefile编写:

依赖关系—— 目标文件:依赖文件

目标文件 add_map.out 依赖对应的依赖文件(也可以叫源文件) add.c和main.c,由于预处理已经完成了头文件的包含,所以不需要写上头文件。

这只是个例子,依赖文件可以有多个,也可以没有。

例:add_map.out:tadd.c main.c

依赖方法—— 源文件形成目标文件需要执行的指令(gcc test.c -o test.out)

依赖方法是 gcc 编译,依赖方法的执行指令必须以 [Tab] 键开头,特别注意不能是四个空格。

例:[TAB]+gcc test.c -o add_map.out

伪目标—— .PHONY

例:

.PHONY:clean(clean可替换)

clean:(clean替换,这里也要替换)

rm -f add_map.out

clean 不依赖任何文件,依赖方法是 rm -f 指令;其中 .PHONY 修饰 clean 表示其是一个伪目标,伪目标总是被执行。

(2)Makefile的使用

依旧以上一个Makefile运行

输入指令:make

make代表执行第一个依赖关系下的所有方法。

输入指令:make clean

可以发现前面生成的test.out可执行文件已经被清理

伪目标有总是被执行的特点,非伪目标指令表现为执行这个指令在结果上并没有改变那就不再执行这个指令,而伪目标的指令一定会被执行。

大概举个例子:

我们可以在命令上多次输入make,可以发现它并没有帮我们执行,因为add_map.out已经存在了,而且源文件也没有被修改,即使你再次生成可执行程序它最后结果上也是生成一模一样的可执行程序,所以系统觉得没必要编译多次,对应的依赖方法也就不会被加载到系统中。

但是伪目标就不行了,输入make clean,clean对应的指令只要你输入就一定会执行。清理项目的指令执行多次也没事儿,如果没有对应的文件,系统直接忽略就好了。

再次解答一下为什么clean需要写成make clean,而编译直接写make就可以了。

如果我们把Makefile中的clean移动到第一行,再去make,这次make执行的是rm -rf add_map.out这条命令。这就说明了在Makefile中,执行make命令的时候,不指定具体目标,它就会默认执行第一个目标。

4.make智能识别的原理

make是怎么知道我的源文件没有被修改从而不让我多次make,那它靠什么识别呢?

理解这个的原理,我们需要一个查看文件的属性信息的命令

格式:stat+文件名

比如我们查看main.c文件的属性

可以看到Access\Modify\Change三个时间(以时间戳储存),它们的初始时间记录都是文件被创建的时间。

  • Access 指最后一次读取的时间(访问)(比如在终端上用cat、more 、less、grep、 cp 、file 一个文件时都应该更新这个时间,不过它不会每次都更新,因为访问是个非常频繁的操作,每一次我们有意无意的操作,系统都更新它的时间是没必要的)
  • Modify 指最后一次修改数据的时间(修改)(意思为更改,更改的是内容,“或者“写入)
  • Change 指最后一次修改元数据的时间(改变)(意思为改变,改变的是状态或属性,比如对一个文件或者目录作mv、chown、chgrp操作)

change时间会受到modify行为的影响,因为如果向文件写入内容,表示着它的大小会变化,顺带改变了它的属性。

根据了解上面的知识,其实make指令就是根据生成的可执行程序的修改时间,然后再根据源文件修改时间进行判断的。

如果可执行程序的时间比源文件的时间要更新或者说更晚,就不会进行重新生成可执行程序,从而减少不必要编译过程。

这里我们就可以理解所谓的“伪目标”,其实就是被.PHONY修饰的目标不遵循上面的时间判断规则,只要你输入了,它就一定会执行。

5.Make/Makefile实例的执行过程

在默认的方式下(只输入 make 命令),make就会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到对应文件,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“main.c 和 add.c”作为依赖文件。

如果add_map.out的可执行程序文件不存在,或是add_map.out的可执行程序所依赖的依赖文件(本例子中是两个.c 文件)的修改时间要比目前存在的可执行程序新,这样,他才会执行后面所定义的命令来生成 add_map.out的可执行程序的目标文件,依赖文件不会被清除。

如果add_map.out的可执行程序文件所依赖的 .c 文件也不存在,那么make会在当前文件中找目标为 .o 文件的依赖性,如果找到则再根据那一个规则生成 .o 文件。(这有点像一个堆栈的过程)

我把其中一个依赖文件经过编译形成.o文件,这个.o文件也可以被识别并形成可执行程序,只要你的文件是可以和原来的依赖文件形成指令的关联的,那就make可以运行。

整个make是有依赖性的,从可执行程序开始,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。(比如说:test.c

make只会检查文件的依赖性,如果在我找了文件的依赖关系之后,冒号后面的依赖文件怎么也找不到,那就甭提别的,我不干了。

像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行(make clean),清除所有的目标文件,以便重编译。

于是在我们编程中,如果这个工程已被编译过了,当我们修改了其中一个源文件,甚至是头文件,只要文件修改时间要比已经生成的可执行程序要新,这个可执行文件就会被重新生成。

五、gdb调试工具

1.什么是gdb

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具。

2.debug和release

(1)Debug称为调试版本,它在源代码的基础上不作任何优化,便于程序员调试程序。

(2)Release称为发布版本,它往往是对程序进行了各种优化,例如减小程序大小和加快运行速度等,以便用户很好地使用。

(3)这两种状态下的代码运行结果可能会不同。

只有debug版本的程序才能调试,gcc默认生成的程序是release版本的,如果想生成debug版本的可执行程序可以在编译语句后面加上-g

输入:gcc test.c -o test -g

test就是生成的debug文件

3.gdb调试代码

以调试test为例,简单说明最基本的几个命令,上面是VS上的调试方法,下面是gdb的操作方法。源码如下:

#include<stdio.h>
int main()
{
    int i = 1;
    for (i=1; i<10; i++)
    {
        int j = 1;
        for (j=1; j<10; j++)
        {
            printf("%d×%d=%d",i,j,i*j);        
        }
        printf("\n");
    }
    return 0;
}

(1)进入调试

在VS中进入调试可以按F5、F10、F11都可以进入调试

格式:gdb+可执行程序文件

输入:gdb test 进入调试,进入gdb就可以输入指令了

(2)显示源代码

格式:list/l

list 展开源代码的前十行,如果还想看到后面的内容可以点击Enter十行十行展开

(3)断点的添加、删除和信息显示

在visual studio中我们用F9添加断点,设置断点的行前面会有一个红色圆圈

格式:break+代码行数/b+代码行数

输入:b 7 相当于在第四行添加断点

在visual studio添加断点后可以右键点击红点设置条件,在符合该条件的情况下才停止运行

格式:break+代码行数+if+条件/b+代码行数+if+条件

输入:b 6 if i==5 就在第六行加入了一个条件为i==5的断点,运行后刚好停在相应位置。

在visual studio中我们用设置断点的行前面的红色圆圈指示断点的位置,右击查看条件信息

格式:info break/info b

输入:info b 查看断点

在visual studio中删除断点在相应行按F9即可

格式:delete+断点编号/del+断点编号

输入:del 1 就删除了一号断点

(4)run运行调试程序与continue继续运行

在visual studio中我们用F5运行到断点处,而ctrl+F5是开始执行不调试,相当于不打开gdb直接运行debug程序。

格式:run/r

输入:r 开始运行到第七行 int j = 1;

但是run是指运行一个程序,如果到达了断点还想要继续向下运行就需要continue语句。

格式:continue/c

输入:c 继续运行至断点或者程序结束

(5)逐语句和逐过程调试

next为gdb的单步调试,当遇到函数调用时,不进入函数体,相当于VS的F10

格式:next/n

next为gdb的逐语句调试,当遇到函数调用时,不进入函数体,相当于VS的F10

格式:step/s

step为gdb的逐过程调试,当遇到函数调用时,进入函数体,相当于VS的F11

不管是逐过程还是逐语句,它们都需要在输入run指令让程序运行起来后才可以使用。

(6)查看某个变量的值

在调试过程中,我们需要查看当前某个变量值的时候,可使用print 命令显示该值,但是只能显示一次下次不会再显示。

格式:print var(var表示任何一个变量或表达式)

在调试过程中,我们需要查看当前某个变量值的时候,可使用 print 命令显示该值,但是只能显示一次下次不会再显示。

格式:display var(var表示任何一个变量或表达式)

使用 display 命令就可以一直显示该值。

(7)退出gdb

VS中退出调试可以输入Shift+F5

格式:quit/q

4.其他命令

  • until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
  • until+行号: 运行至某行,不仅仅用来跳出循环
  • finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息
  • call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)
  • disable 断点号n:暂停第n个断点
  • enable 断点号n:开启第n个断点
  • clear 行号n:清除第n行的断点

还有很多其他的命令,可以自己去试一试。

六、进度条程序

1.前置知识

(1)\r&&\n

回车概念(\r)——回车是把光标移到一行的开始

换行概念(\n)——换行是跳到下一行的开始

(2)行缓冲区

我们定义一个test.c文件,代码如下:

#include<stdio.h>
#include<unistd.h>
int main()
{
    printf("%hello world\n");
    sleep(3);
    return 0;
}

结果打印了hello world也换行了,然后才睡眠三秒

我们稍加改变

#include<stdio.h>
#include<unistd.h>
int main()
{
    printf("%hello world\r");
    sleep(3);
    return 0;
}

我们发现程序等待了一会儿,什么也没打印出来,那么hello world的内容去哪里了呢?

这里就出现了缓冲区的概念,其实在之前的C程序中也说过缓冲区,只是没有利用过计算机的这个特点。这个hello world被放在了缓冲区中没有被拿出来放到屏幕上,我们也就什么都看不到。

再添加一个刷新缓冲区的函数

#include<stdio.h>
#include<unistd.h>
int main()
{
    printf("%hello world\r");
    fflush();
    sleep(3);
    return 0;
}

 程序就直接把数据打印出来再睡眠了。

控制台是一个输出设备,我们可以看到有一个光标随着输出去动下。数据先输出到缓冲区内,然后通过fflush清空缓冲区,输出最后带上一个\r让光标回到开头,同时由于缓冲区被清空,新的数据又被加载进缓冲区。然后再次清空缓冲区输出到屏幕,这时的输出相当于还在本行开头输出,将原来的内容再次输出到屏幕就相当于覆盖掉原来输出的部分内容。就这样不断地输出覆盖,形成一个动态的进度条。

(3)各文件内容

Makefile

progress_bar:progress_bar.c
    gcc progress_bar.c main.c -o progress_bar                                                                                                                                    
.PHONY:clean
clean:
    rm -f progress_bar

main.c

#include"progress_bar.h"
int main()
{
    proc();
    return 0;
}

progress_bar.c

#include"progress_bar.h"
  
void proc()
{
    int i = 0;
    char arr[101];
    const char* p = "|/-\\";//定义一个数组,让它每次从头到尾打印数组的元素就可以做到旋转的效果
    memset(arr,'\0',sizeof(arr));//把所有内容都设置为\0
    while(i<=100)
    {
        printf("[%-100s][%d%%][%c]\r",arr,i,p[i%4]);//注意控制格式
        fflush(stdout);//刷新缓冲区
        arr[i++] = STYLE;//每次把一个\0替换为STYLE对应的符号
        usleep(20000);//睡眠一段时间,usleep的睡眠时间以毫秒为单位
    }                                                                                                                                                                                
    printf("\n");
}

progress_bar.h

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define STYLE '#'                                                                                                                                                                    
extern void proc();

成果如下:

 七、git上传代码

1.git的介绍

git是一个版本控制器,当我们开发一个项目时,需要写很多很多的文件。这些文件管理起来很麻烦,所以我们可以上传到某一个网站上他来帮我们管理,我们可以上传也可以取。同时,如果我们更新了一个或者几个文件,这个网站会帮我们比对上一个版本和这个新版本的区别并更新到这个版本,原先的版本也是可以看到和取到的。这样的版本管理网站就是版本控制器,git就是其中之一。

2.git的历史

直到 2005 年 4 月,我们的Linux之父雷纳兹·托瓦兹在开发完Linux后,世界各地的志愿者开发团队都在为Linux更新代码以提高其运行效率和稳定性,托瓦兹自己管理着庞大的 Linux 内核源码,这是一个相当复杂的工作。

于是托瓦兹就与当时的付费的版本控制器BitKeeper(BK)协商,对方也同意了Linux的代码管理可以免费使用他们公司的版本控制器。但是,有一些Linux社区的开发人员试图去破解BitKeeper,这引发了BK 的创始人Larry McVoy的不满,取消了免费使用的授权。

此时托瓦兹又需要自己去管理源码了。最后托瓦兹和Linux社区内的大佬们模仿BitKeeper自己开发了一个免费的版本管理器并公诸于世,这个写成的版本管理器就是Git。而Git经过商业化改造就形成了现在国外的Github和国内的Gitee

3.git的使用

(1)安装

我们的Linux系统中可能没有预装git,需要安装,我的已经安好了。

yum install -y git

(2)gitee上传代码的准备工作

由于在国内访问Github链接十分不稳定,我们更多使用的还是Gitee

在注册登陆后界面是这样的(图片是在网上找的):

点击右上角的加号,然后点击新建仓库,按照下面的操作执行就好

初始化仓库等按照下面的按就可以了

这样我们就创建好了一个仓库,我给它取名叫Linux

点击右上角的管理,到最下面设置仓库为公开并选择对应的许可证就可以了

(3)下载项目到本地

将云端的数据拷贝到当前机器上

格式:git clone+仓库的https链接

这个https链接在这里:

输入指令后,先输入用户名,必须是英文的,再输入密码就完成拷贝了。

这个Linux文件夹就是我们和gitee仓库的连接中介,我们将文件放到文件夹里,再通过git三板斧传到gitee网站的仓库里,此时代码的上传就完成了。

(3)gitee三板斧——add、push和commit

先把代码放到仓库对应的的目录下

三板斧之一:add

格式:git add+文件

三板斧之二:commit

格式:git commit -m "内容"(这个内容相当于你对本次提交的描述,虽然写什么都行,但对我们而言不能乱写)

三板斧之三:push

格式:git push

通过三板斧,我们就把文件传输到gitee上了,在仓库中可以看到。

其实git的操作不止这三板斧,还有很多有趣的东西值得学习。

最后,感谢你能看到这里,这些工具的使用虽然不难,但是知识很细,光靠别人讲是会不了的,需要自己去练习体会。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
Coreutils 软件包包括一整套基本的 shell 工具。 basename 去掉文件名中的目录和后缀 cat 把文本文件的内容发送到标准输出 chgrp 改变文件和目录属组,属组可以使用组名或者组识别号表示 chmod 改变文件和目录的权限,权限可以使用符号或者八进制两种表达方式 chown 改变文件和目录的所有权(包括用户和/或组) chroot 使用特定的目录作为执行某个命令或者交互 shell 的根目录(/)。在多数系统中,只有 root 用户能运行这个命令 cksum 输出指定的每个文件的CRC(循环冗余校验)校验和与字节数 comm 一行一行对两个已经排序的文件进行比较,在第三列中显示同一行是否相同 cp 复制文件 csplit 把一个文件按照给定的模式或者行号分成几块 cut 从指定的文件中提取特定的列送到标准输出 date 以特定的格式显示当前时间,或者设置系统日期 dd 以可选块长度复制文件,默认情况下从标准输入设备输出到标准输出设备。复制过程中,还可以对文件进行一些转换。 df 显示参数中的文件所在分区磁盘空间的使用情况,如果没有给出文件参数就显示所有已经安装的文件系统的可用空间数量。 dir 同 ls dircolors 设置 LS_COLOR 环境变量(用来改变 ls 及相关工具默认颜色组合)。 dirname 显示从文件名去掉非目录后缀之后的内容 du 显示参数使用的磁盘空间的数量,对于参数为目录还会列出每个子目录磁盘空间占用情况。 echo 显示给定字符串或变量值 env 在一个被修改的环境中运行一个程序 expand 把 tab 转换为空格符 expr 执行表达式计算 factor 输出所有指定整数的质因数 false 返回一个不成功或者逻辑假的结果 fmt 重新格式化指定文件的段落 fold 断开指定文件(默认是标准输入)较长的行,在屏幕上显示。 groups 显示一个用户所在的组 head 显示每个指定文件的前几行(默认是10)。 hostid 以16进制方式,显示当前主机的数字标志符。 hostname 显示或设置主机名 id 显示某个用户或者当前用户的真实和有效的 UID、GID 。 install 复制文件,设置它们的权限,如果可能还设置拥有它们的用户和组 join 合并两个文件的行 link 创建从指定文件到指定名称的硬链接 ln 创建文件之间的硬/软(符号)连接 logname 显示当前用户的登录名 ls 列出指定目录的所有内容。缺省是将文件和子目录按字母顺序排列。 md5sum 显示或者校验 MD5 校验码。 mkdir 建立目录,使用给定的参数作为目录名。 mkfifo 以给定的参数作为名字建立FIFO(又叫"命名管道")文件。 mknod 使用给出的文件名,建立一个设备节点,也就是:FIFO、字符特殊文件(special file)或者块特殊文件(special file)。 mv 根据所给参数的不同,把文件或者目录移动到另外的目录或者将其改名 nice 修改某个进程的调度优先级 nl 把每个指定文件的内容写到标准输出,在每行加上行号 nohup 使某个命令不被挂起,并将输出重定向到一个日志文件。 od 以数字方式显示指定文件的内容,默认为八进制。 paste 将字段连接在一起,在字段之间自动插入分割符,默认的分割符是 Tab 。 pathchk 检查文件名是否是有效的或者是可移植的 pinky 一个轻量级的 finger 客户端,用来得到某个用户的信息。 pr 将文件分成适当大小的页送到打印机 printenv 显示环境变量 printf 根据给定的参数格式化输出数据,与 C 语言中的该函数相似。 ptx 为指定的文件提供一个排序索引 pwd 显示当前工作目录 readlink 显示指定符号链接的值 rm 删除文件或者目录 rmdir 删除目录(目录必需为空) seq 以指定的步长输出一个数列 sha1sum 显示或校验 160 位的 SHA1 校验码 shred 安全删除一个文件,重写其占用的磁盘空间,使其无法恢复。 sleep 延迟一段时间 sort 对文件进行排序 split 把文件分成固定大小(字节或行数)的片断 stat 显示文件或者文件系统的状态 stty 改变和显示终端行的设置 sum 显示指定文件的校验和及块数 sync 刷新文件系统缓冲区,使磁盘和内存的数据同步。 tac 逆向显示指定的文
Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..................................................................................................................................................2 第一讲 Linux基础...........................................................................................................................2 一.什么是Linux?.................................................................................................................2 二.安装Linux的好处?.........................................................................................................3 三.如何得到Linux?.............................................................................................................3 四.如何得到Linux的最新消息?.........................................................................................3 五.Linux操作系统上有什么应用?.....................................................................................4 六.在那里可以找到讨论区?..............................................................................................5 七.安装过程..........................................................................................................................5 第二讲 Linux基础进阶...................................................................................................................5 一.Linux的文件系统结构.....................................................................................................6 二. 文件类型...........................................................................................................................7 三.Linux基本操作命令............................................................................................................8 四.基本的系统管理命令.......................................................................................................14 五.关於 Process 处理的指令...............................................................................................16 六. 关於字串处理的指令.....................................................................................................17 七. 网路上查询状况的指令.................................................................................................17 八. 网路指令.........................................................................................................................18 九. 关於通讯用的指令.........................................................................................................21 十. 编译器( Compiler )..........................................................................................................22 十一. 有关列印的指令.........................................................................................................22 第三讲 Linux下的网络服务,配置问题和常用工具.................................................................24 一.Linux下的网络服务.......................................................................................................24 二.几种重要的配置文件.......................................................................................................26 三.Linux下常用的工具软件..................................................................................................28 尾语................................................................................................................................................31 前言 Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学们通过这次系列讲座成为一个 UNIX 类操作系统的高手,这次系列 讲座的目的就是在同学们中间普及 Linux 基础知识,为今后我们更加接近的了解 Linux 做一 个好的开端。 第一讲 Linux基础 在这一讲中,我们主要是了解一下 Linux 的概况,以及对 Linux 有一个初步的感性认识。 一.什么是LinuxLinux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全适用于个人的 PC。它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作系统(MS Windows, OS2, MINIX..)就可以进 行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds ([email protected])写了 Linux核心程序的 0.02 版开始的,但其后的发展却几乎都 是由互联网上的 Linux社团(Linux Community)互通交流而完成的。Linux 不属于任何一 家公司或个人,任何人都可以免费取得甚至修改它的源代码(source code)。Linux 上的大部 分软件都是由 GNU倡导发展起来的,所以软件通常都会在附着 GNU Public License(GPL) 的情况下被自由传播。GPL 是一种可以使你免费获得自由软件的许可证,因此 Linux 使用 者的使用活动基本不受限制(只要你不将它用于商业目的),而不必像使用微软产品是那样, 2需要为购满许可证付出高价还要受到系统安装数量的限制。我在讲义的最后面附有 GPL 的 非官方中文译稿。目前 Linux 中国的发行版本(Linux Distribution)主要有 Red Hat (红帽子) , Slackware, Caldera, Debian, Red Flag (红旗) , Blue Point (蓝点) , Xteam Linux (冲浪) , Happy Linux(幸福Linux), Xlinux 等若干种,我推荐同学们使用的发行版本是 Red Hat(事实标 准)和 Xlinux(安装最容易)。 二.安装Linux的好处? Linux的核心具有 Windows 无法比拟的稳定性和高效率,在不使用 X Windows 的情况 下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX的用户来说,使他们熟悉 UNIX 操作环境,通往"骨灰级"高手境界的一大捷径。最重 要的是,Linux 上有公认的 C 语言世界最好的编译器 gcc,如果你想得到一个效率更高的开 发环境(并不一定是最友好的,但一定是最强大的),我建议你一定要好好的熟悉一下 Linux。 三.如何得到Linux? 据我所知,大多数的 Linux 发行版本(Linux distribution)和核心(Kernel)都是可以 从网上下载的,但是我不推荐易用这种方法得到 Linux,因为仅仅核心就有几十个 Mbit 的 数据量,而一个完整的发行版本大概都是 1Gbit 左右的数据量,你自己可以估计一下得用多 少时间来下载它们?我建议你最好去软件商店买光盘来,因为 Linux 的产品光盘是非常便宜 的,连带许可证 GPL 在内你大概支付 50 元人民币就可以,而具有同样功能的 Windows NT 4.0 你至少得付出 17000元人民币(有一点需要声明:在你购买光盘时 GPL 许可证你是不会 肉眼看到的)。直接到商店去买,可以省去你很多麻烦,因为从网上下载的 Linux有很多它 还是要求你有光盘刻录工具将安装文件刻到光盘上。 四.如何得到Linux的最新消息? 关于 Linux 的站点现在到处都是,我这里向大家推荐的是一个关于 Linux 核心最新消息 的一个网站,你可以得到核心(Kernel)发展情况的最新信息。网址如下: http://www.kernel.org 另外还有一个非常著名的讨论组,你也可以去看看:http://www.linuxforum.net 另外还有一 个我常去的讨论组,这个讨论组是有高手专门维护的,而且回应贴子的速度很快: http://www.coventive.com.cn/club/default.htm在我这份讲义快写完的时候,又有一个非常好的 自由软件团体出现了,那就是 AKA,大家可以到他们的网页上去看看,里面有许多很实用的 3信息:http://www.aka.org.cn 五.Linux操作系统上有什么应用? Linux 上有丰富的的应用软件,在这里我给大家做一个简单的介绍,具体它们是什么样 子我会在讲座上为大家一一演示。 文本处理方面(控制台界面,X Window界面在后面介绍) vi 最令 UNIX类操作系统初学者裹足不前的 editor,然而只要你习惯于操作,你会觉得 它比任何的 editor都好用,且功能强大。 pico 一种风格很像 Microsoft DOS的 EDIT 的一种文本编辑器。 中文化方面 XCIN+Crxvt 缺省的 Linux 系统是不支持显示中文的,虽然现在国内涌现出许多著名的 Linux 汉化厂商,但是一些著名的 Linux distribution 如 Red Hat、Debian、Caldera 仍然不支 持中文的输入和输出。这套汉化工具组合在控制台(console)方式和 X Window方式下都可 以显示和输入汉字信息。 Cxterm 可以很容易的自行设置输入法,或者修改现有的输入法表格。 视窗界面(window manager)方面 KDE 这是 X Window System使用率最高的 Window Manager。 lFvwm 公认的最为好用的 Window Manager之一。 Fvwm95 拥有和 Microsoft Win95 同样界面的 Window Manager。 Afterstep 公认的最好看的 Window Manager,但号内存也很大。 Enlightenment 界面最华丽的 Window Manager, Win95 和它相比简直就是 nothing,但是 号内存太大,有点华而不实。 lIcewin 又一个极富个性的 Window Manager。 视窗应用软件方面 WWW Browser Netscape公司的 navigator3.x 和communicator4.x 版可用,使用方法和 MS Windows上一样。 图像处理 GIMP是类似于 Photoshop的绘图软件,号称是 Linux 上最强的绘图软件。 看图工具 MTV 这是一个可以播放 VCD的软件,但是它是共享软件(Shareware),不是免费软件, 我们也得不到它的源代码。 Star Office 这是一套著名的办公软件,我个人认为它无论在界面上还是在功能上都强于 Microsoft Office 产品。唯一的缺憾是他不支持汉字,无论 GB 还是 BIG5。 Word Perfect 这是一个非常精彩的字处理软件,功能类似于 Microsoft Word。 4文杰字处理系统 这是一套由韩国人开发的字处理系统,功能强大,有专门的中文版推出, 类似于 Microsoft Word。 编译环境 gcc 公认的C 语言世界中功能最为强大的编译器,但是界面不是很友好。 除此之外还有 FORTRAN、 Pascal、 GNU make、 GNU debugger、 GNU LISP、 GNU PERL、 TCL。 这里因为本人对这些编译工具都不熟悉,因此不多介绍。 MS Windows的模拟环境 WINE 可以使绝大多数的 16 位 MS Window程序运行在这个模拟环境中。但是不支持 32 位的程序。 六.在那里可以找到讨论区? 大家最熟悉的是北邮的 BBS: 202.204.7.235 port:23 七.安装过程 这是非常重要的一部分,希望大家仔细了解本部分内容。 就我个人认为,对于初学者来说,Linux 的安装过程是相当难的,新手往往会遇到系统 屡装不成的情况。遇到这种事情,是非常痛苦的,但是几乎每个新手又都会遇到,因此我 觉得安装过程应当仔细的说明一下。但是由于篇幅有限,我不见这个这个问题在讲义的正 文中陈述,而是把它放在附文 2 中仔细说明。希望没有安装过 Linux 的同学们将这篇文章看 一看。我想在上课的时候我会给大家演示一遍安装的过程。 第二讲 Linux基础进阶 经过上一节课的探讨,我想同学们应该对 Linux 有了一个初步的感性认识,但我们的 认识还只是处在一个尚需进步的表层上。通过这一节的学习,同学们会对 Linux 的体系结构, 它的基本操作,基本功能有一个更进一步的认识。 5 一.Linux的文件系统结构 Linux的文件系统和MS-Windows的文件系统有很大的不同,对于微软视窗系统的文件 结构我在这里不再多说,我们主要了结一下 linux的文件系统结构. linux 只有一个文件树,整 个文件系统是以一个树根"/"为起点的,所有的文件和外部设备都以文件的形式挂结在这个文 件树上,包括硬盘,软盘,光驱,调制解调器等,这和以"驱动器盘符为基础的 MS-Windows 系统 是大不相同的.Linux 的文件结构体现了这个操作系统简洁清析的设,常我们能够接触到的 linux 发行版本的根目录大都是以下结构: /bin /etc /lost+found /sbin /var /boot /root /home /mnt /tmp /dev /lib /proc /usr 现在我将这些目录给大家做一个简要的介绍: 1. /bin和/sbin 使用和维护UNIX和Linux系统的大部分基本程序都包含在/bin和/sbin里,这两个目录 的名气之所以包含 bin,是因为可执行的程序都是二进制文件(binary files). /bin 目录通常用来存放用户最常用的基本程序,如: login Shells 文件操作实用程序 系统实用程序 压缩工具 /sbin 目录通常存放基本的系统和系统维护程序,如: fsck fdisk mkfs shutdown lilo init 存放在这两个目录中的程序的主要区别是:/sbin 中的程序只能由 root(管理员)来执行. 2. /etc 这个目录一般用来存放程序所需的整个文件系统的配置文件,其中的一些重要文件如 下: passwd shadow fstab hosts motd profile shells services lilo.conf 3. /lost+found 这个目录专门是用来放那些在系统非正常菪机后重新启动系统时,不知道改网哪里恢复 的"流浪"文件的。 4. /boot 这个目录下面存放着和系统启动有关系的各种文件,包括系统的引导程序和系统核心 部分。 65. /root 这是系统管理员(root)的主目录。 6. /home 系统中所有用户的主目录都存放在/home 中,它包含实际用户(人)的主目录和其他用户 的主目录.Linux同 UNIX 的不同之处是,Linux的 root 用户的主目录通常是在/root或 /home/root,而 UNIX 通常是在/。 7. /mnt 按照约定,像 CD-ROM,软盘,Zip盘,或者 Jaz这样的可以动介质都应该安装在/mnt 目录下,/mnt 目录通常包含一些子目录,每个子目录是某种特定设备类型的一个安装点。 例如: /cdrom /floppy /zip /win .... 如果我们要使用这些特定设备,我们需要用 mount 命令从/dev 目录中将外部设备挂接 过来。在这里大家可能看到了有一个 win 的目录,这是我的机子上面做的一个通向 windows 文件系统的挂接点,这样我通过访问这个目录就可以访问到我在 windows 下面的文件了。 但如果你的 windows 文件系统是 NTFS 格式,那么这个办法就不行了。 8. /tmp和/var 这两个目录用来存放临时文件和经常变动的文件。 9. /dev 这是一个非常重要的目录,它存放着各种外部设备的镜像文件,其中有一些内容我们 是要牢牢记住的。例如第一个软盘驱动器的名字是 fd0;第一个硬盘的名字是 hda,硬盘中的 第一个分区是 hda1,第二个分区是 hda2;第一个光盘驱动器的名字是 hdc;此外,还用 modem 和其他外设的名字,在这么多的名字中,我们只需要记住最最常用的那几个外设就可以了。 10. /usr 按照约定,这个目录用来存放与系统的用户直接相关的程序或文件,这里面有每一个 系统用户的主目录,就是相对于他们的小型"/"。 11. /proc 这个目录下面的内容是当前在系统中运行的进程的虚拟镜像,我们在这里可以看到由 当前运行的进程号组成的一些目录,还有一个记录当前内存内容的 kernel 文件。 就个人经验,我认为这些目录以及在它们下面应该存储什么内容,我们都应当很熟练的 记下来,这对于我们进一步的使用系统是很有帮助的。 二. 文件类型 本来我是想把基本操作命令放在这里介绍一下,但是这些命令中又不少是涉及到文件类 7型的,所以我就只好先介绍一下文件类型了。 Linux 的文件类型大致可分为五类,而且它支持长文件名,不论是文件还是目录名,最 长可以达到 256 个字节。如果你能够用 128 个汉字写一片小作文,那你也可以用它来做某 个文件的文件名(当然这里面不能有不合规定的命名字符存在)。 1. 一般性文件 一般性文件,例如纯文本文件 mtv-0.0b4.README,设置文件 lilo.conf,记录文件 ftp.log 等等都是。一般类型的文件在控制台的显示下都没有颜色,系统默认的是白色。 2. 目录 至于目录是什么意思我就不解释了,我的任务是要告诉大家,你可以用 cd+目录名进 入到这个目录中去,而这个目录在控制台下显示的颜色是蓝色的,非常容易辨认。如果你 用 ls -l 来观看它们,会发现它们的文件属性(共 10 个字符)的一个字符是 d,这表明它是一 个目录,而不是其它的东西。 三.Linux基本操作命令 首先介绍一个名词"控制台(console)",它就是我们通常见到的使用字符操作界面的 人机接口,例如 dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令, 例如dos命令就是控制台命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。 有一点一定要注意,和 dos 命令不同的是,Linux 的命令(也包括文件名等等)对大小 写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响 应的。 1. ls 这个命令就相当于 dos 下的 dir命令一样,肯定是我第一个就要介绍的,这也是 Linux 控制台命令中最为重要几个命令之一。ls 最常用的参数有三个: -a -l -F。 ls -a Linux 上的文件以.开头的文件被系统视为隐藏文件,仅用 ls 命令是看不到他们的,而用 ls -a 除了显示 一般文件名外,连隐藏文件也会显示出来。 ls -l(这个参数是字母 L 的小写,不是数字 1) 这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到 ls -l 这个指令。例如我在某个目录下键入 ls -l 可能会显示如下信息(最上面两行是我自己加 的): 位置 1 2 3 4 5 6 7 文件属性 文件数 拥有者 所属的group 文件大小 建档日期 文件名 drwx------ 2 Guest users 1024 Nov 21 21:05 Mail 8 -rwx--x--x 1 root root 89080 Nov 7 22:41 tar* -rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname* lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip -rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh* -rwsr-x--- 1 root bin 9853 Aug 15 5:46 su* 下面,我为大家解释一下这些显示内容的意义。 第一个栏位,表示文件的属性。 Linux 的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。但是这里有 十个格子可以添(具体程序实现时,实际上是十个 bit 位)。第一个小格是特殊表示格,表 示目录或连结文件等等,d 表示目录,例如 drwx------;l 表示连结文件,如 lrwxrwxrwx;如果 是以一横"-"表示,则表示这是文件。其余剩下的格子就以每 3 格为一个单位。因为 Linux 是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文 件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x 为例): rwx(Owner)r-x(Group)r-x(Other) 这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可 写,可执行;其它用户可读,不可写,可执行。另外,有一些程序属性的执行部分不是 X, 而是 S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。 一般出现在系统管理之类的指令或程序,让使用者执行时,拥有 root身份。 第二个栏位,表示文件个数。 如果是文件的话,那这个数目自然是 1 了,如果是目录的话,那它的数目就是该目录 中的文件个数了。 第三个栏位,表示该文件或目录的拥有者。 若使用者目前处于自己的 Home,那这一栏大概都是它的账号名称。 第四个栏位,表示所属的组(group)。 每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只 有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。 第五栏位,表示文件大小。 文件大小用 byte 来表示,而空目录一般都是 1024byte,你当然可以用其它参数使文件 显示的单位不同,如使用 ls -k 就是用 kb 莱显示一个文件的大小单位,不过一般我们还是以 byte 为主。 第六个栏位,表示创建日期。 以"月,日,时间"的格式表示,如 Aug 15 5:46表示 8 月15日早上 5:46分。 第七个栏位,表示文件名。 我们可以用 ls -a 显示隐藏的文件名。 Ls -F(注意,是大写的 F) 9 使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示 目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的 Linux 发 行版本的 ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨 符号。 2. cd命令 这个命令是用来进出目录的,它的使用方法和在 dos 下没什么两样,所以我觉得没什么 可说的,但有两点我补充一下。 首先,和dos 不同的是Linux 的目录对大小写是敏感的,如果大小写没拼对,你的 cd 操作是成功不了的。 其次,cd如果直接输入,cd 后面不加任何东西,会回到使用者自己的 Home Directory。 假设如果是 root,那就是回到/root.这个功能同 cd ~是一样的。 3. mkdir,rmdir 命令 mkdir 命令用来建立新的目录,rmdir用来删除以建立的目录,这两个指令的功能不再 多加介绍,他们同 dos下的 md,rd 功能和用法都是基本一样的。 4. cp命令 这个命令相当于 dos下面的 copy命令,具体用法是: cp -r 源文件(source) 目的文件(target) 参数 r是指连同元文件中的子目录一同拷贝。熟悉 dos 的读者用起这个命令来会觉得更 方便,毕竟比在 dos 下面要少敲两下键盘。 5. rm 命令 这个命令是用来删除文件的,和 dos 下面的 rm(删除一个空目录)是有区别的,大家 千万要注意。Rm命令常用的参数有三个: -i,-r,-f。 比如我现在要删除一个名字为 text 的一个文件: rm -i test 系统会询问我们:"rm:remove 'test'?y",敲了回车以后,这个文件才会真的被删除。之 所以要这样做,是因为 linux 不象dos那样有 undelete 的命令,或者是可以用 pctool 等工具 将删除过的文件救回来,linux 中删除过的文件是救不回来的,所以使用这个参数在删除前 让你再确定一遍,是很有必要的。 rm -r 目录名 这个操作可以连同这个目录下面的子目录都删除,功能上和 rmdir相似。 rm -f 文件名(目录名) 这个操作可以进行强制删除。 6. mv 命令 这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名。它的用法同 10dos 下面的 move 基本相同,这里不再多讲。当使用该命令来移动目录时,他会连同该目录 下面的子目录也一同移走。另外因为 linux 下面没有 rename 的命令,所以如果你想给一个 文件或目录重命名时可以用以下方法: mv 原文件(目录)名 新的文件(目录)名 7. du,df 命令 du 命令可以显示目前的目录所占的磁盘空间,df 命令可以显示目前磁盘剩余的磁盘空 间。 如果 du 命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的 话,就是这个目录在磁盘上的使用情况(这个功能可是 dos 没有的呦)。不过我一般不喜欢 用 du,因为它给出的信息是在是太多了,我看不过来,而 df这个命令我是最常用的,因为 磁盘上还剩多少空间对我来说是很重要的。 8. cat 命令 这个命令是 linux 中非常重要的一个命令,它的功能是显示或连结一般的 ascii 文本文 件。cat是 concatenate 的简写,类似于 dos 下面的 type 命令。它的用法如下: cat text 显示 text 这个文件 cat file1 file2 依顺序显示 file1,file2的内容 cat file1 file2>file3 把 file1,file2 的内容结合起来,再"重定向(>)"到 file3文件中。 "〉"是一个非常有趣的符号,是往右重定向的意思,就是把左边的结果当成是输入,然 后输入到 file3 这个文件中。这里要注意一点是 file3 是在重定向以前还未存在的文件,如果 file3 是已经存在的文件,那么它本身的内容被覆盖,而变成 file1+file2的内容。 如果〉左边没有文件的名称,而右边有文件名,例如: cat >file1 结果是会"空出一行空白行",等待你输入文字,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d], 就会结束编辑,并产生 file1 这个文件,而 file1 的内容就是你刚刚输入的内容。这个过程和 dos 里面的copy con file1的结果是一样的。 另外,如果你使用如下的指令: cat file1>>file2 这将变成将 file1 的文件内容"附加"到 file2 的文件后面,而 file2 的内容依然存在,这种 重定向符〉〉比〉常用,可以多多利用。 9. more,less命令 这是两个显示一般文本文件的指令。 如果一个文本文件太长了超过一个屏幕的画面,用 cat 来看实在是不理想,就可以试试 more 和 less两个指令。More 指令可以使超过一页的文件临时停留在屏幕,等你按任何的一 个键以后,才继续显示。而 less 除了有 more 的功能以外,还可以用方向键往上或网下的滚 11动文件,所以你随意浏览,阅读文章时,less 是个非常好的选择。 10. clear 命令 这个命令是用来清除屏幕的,它不需要任何参数,和 dos 下面的 clr具有相同的功能, 如果你觉得屏幕太紊乱,就可以使用它清除屏幕上的信息。 11. pwd命令 这个命令的作用是显示用户当前的工作路径,这个命令不用多说,大家一试即知。 12. ln命令 这是 linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另 外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是: ln -s 源文件 目标文件 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都 放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下 用 ln 命令链接(link)它就可以,不必重复的占用磁盘空间。例如: ln -s /bin/less /usr/local/bin/less -s 是代号(symbolic)的意思。 这里有两点要注意:第一,ln 命令会保持每一处链接文件的同步性,也就是说,不论 你改动了哪一处,其它的文件都会发生相同的变化;第二,ln 的链接又软链接和硬链接两 种,软链接就是 ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空 间,硬链接 ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件, 无论是软链接还是硬链接,文件都保持同步变化。 如果你用ls 察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用 ln 命 令生成的文件,用 ls -l命令去察看,就可以看到显示的 link 的路径了。 13. man命令 如果你的英文足够好,那完全可以不靠任何人就精通 linux,只要你会用 man。Man 实 际上就是察看指令用法的 help,学习任何一种 UNIX类的操作系统最重要的就是学会使用 man 这个辅助命令。man 是 manual(手册)的缩写字,它的说明非常的详细,但是因为它都是 英文,看起来非常的头痛。建议大家需要的时候再去看 man,平常吗,记得一些基本用法 就可以了。 14. logout 命令 一看就知道了,这是退出系统的命令,我就不多说了。要强调的一点是,linux是多用 户多进程的操作系统,因此如果你不用了,退出系统就可以了,关闭系统你就不用操心了, 那是系统管理员的事情。但有一点切记,即便你是单机使用 linux,logout 以后也不能直接 关机,因为这不是关机的命令。 15. Mount 命令 12这是 Linux 初学者问得最多的问题。由于大家已习惯了微软的访问方法,总想用类似 的思路来找到软盘和光盘。但在 Linux 下,却沿袭了 UNIX 将设备当作文件来处理的方法。 所以要访问软盘和光盘,就必须先将它们装载到 Linux 系统的/mnt 目录中来。 装载的命令是 mount,格式如下:mount -t 文件系统类型 设备名 装载目录 文件 系统类型就是分区格式,Linux 支持的文件系统类型有许多: msdos DOS 分区文件系统类型 vfat 支持长文件名的 DOS 分区文件(可以理解为 Windows 文件)系统类型 iso9660 光盘的文件系统类型 ext2 Linux 的文件系统类型 ...... 设备名,指的是你要装载的设备的名称。软盘一般为/dev/fd0 fd1;光盘则根据你的 光驱的位置来决定,通常光驱装在第二硬盘的主盘位置就是/dev/hdc;如果访问的是 DOS 的 分区,则列出其设备名,如/dev/hda1 是指第一硬盘的第一个分区。 装载目录,就是你指 定设备的载入点。 z 装载软盘 首先用 mkdir /mnt/floppy 在/mnt 目录下建立一个空的 floppy目录,然后输入 mount -t msdos /dev/fd0 /mnt/floppy 将 DOS 文件格式的一张软盘装载进来,以后就可以在 /mnt/floppy目录下找到这张软盘的所有内容。 z 装载 Windows 所在的C 盘 mkdir /mnt/c 在/mnt 目录下建立一个空的 c 目录; mount -t vfat /dev/hda1 /mnt/c 将Windows 的C盘按长文件名格式装载到/mnt/c 目 录下,以后在该目录下就能读写 C盘根目录中的内容 z 装载光盘 mkdir /mnt/cdrom 在/mnt 目录下建立一个空的 cdrom 目录; mount -t iso9660 /dev/hdc /mnt/cdrom 将光盘载入到文件系统中来, 将在/mnt/cdrom 目录下找到光盘内容。有的 Linux 版本允许用 mount /dev/cdrom 或 mount /mnt/cdrom 命 令装载光盘。 要注意的是,用 mount命令装入的是软盘、光盘,而不是软驱、光驱。有些初学者容易 犯一个毛病,以为用上面命令后,软驱就成了/mnt/floppy,光驱就成了/mnt/cdrom,其实 不然,当你要换一张光盘或软盘时,一定要先卸载,再对新盘重新装载。 z 卸载 卸载的命令格式是:umonut 目录名,例如要卸载软盘,可输入命令 umonut /mnt/floppy。 要注意的是,在卸载光盘之前,直接按光驱面板上的弹出键是不会起作用的。 13 四.基本的系统管理命令 系统管理基本上可以分为两种,一种是 root(系统管理员)对 linux的系统管理部分, root 本身的职责就是负责整个 linux系统的运行稳定,增加系统安全性,校验使用者的身份, 新增使用者或删除恶意的使用者,并明确每一个在机器上的使用者权限等等。另一种就是 每一个使用者(包括 root)对自己文件的权限管理。因为 linux 是多用户多任务系统,每一 个使用者都有可能将其工作的内容或是一些机密性的文件放在 Linux工作站上,所以对每个 文件或是目录的归属和使用权,都要有非常明确的规定。下面我就按管理员和一般用户分 类来介绍基本的系统管理命令。 z 管理员使用的系统管理指令 1. adduser 命令 新增使用者账号的命令,如果你想新增一个叫做 jack 的用户,那么需在控制台下输入: adduser jack 这样就增加了一个名字为 jazk 的用户,要注意这里对大小写是敏感的。另外,新增的 用户是没有口令的,你还应当为用户设置口令或者是吩咐用户在第一次登录系统的时候为 自己设置口令。 2. passwd命令 这个命令可以修改特定用户的口令,使用格式是: passwd 用户名 这是,系统会提示你输入新密码,你输入第一遍后,还要输入第二遍进行确认。输入 两遍相同的密码之后,系统就接受了新的密码。如果这个命令是一般用户来使用的话,那 就只能改变它自己的密码。 3. find,whereis,locate命令 这三个命令都是用来查找文件的,使用格式是: find 路径名称 -name 文件名 参数(我们这里就不讨论参数了) whereis 文件名 locate 文件名 一般来说,find 命令功能最为强大,但是对硬件的损耗也是最大的,当你使用 find 去 查找你个文件时,你会发现硬盘等在不停的闪动,这就意味着你的硬盘可能会比别人的少 用个三四年。当你使用whereis 或locate 去查找文件时,你会发现硬盘却是安安静静的,这 是因为这两个命令是从系统的数据库中查找文件,而不是去拼命的读硬盘。所以,如果平 常你只是想找一些笑文件的话,使用 whereis或 locate 就可以了,如果你是要进行系统管理 的工作,那么使用 find再加上一些参数就可以满足你的要求了。 144. su命令 这个命令可以让普通用户变成具有管理员权限的超级用户(superuser),只要它知道知 道管理员的密码就可以。多用户多任务系统的强调的重点之一就是系统的安全性,所以应 避免直接使用 root 身份登录系统去做一些日常性的操作,因为时间一久 root 密码就有可能 被知道而危害到系统安全。所以平常应避免用 root 身份登录,即使要管理系统,也请尽量 使用 su 指令来临时管理系统,然后记住定期的更换 root 密码。 加入你现在是以一个普通用户的身份登录系统,现在你输入: su 系统会要求你输入管理员的口令,当你输入正确的密码后,就可以获得全部的管理员 权限,这是你就是超级用户(superuser)。但你执行完各种管理操作以后,只要输入 logout 就 可以退回到原先的那个普通用户的状态。 5. shutdown,halt 命令 这两个命令是用来关闭 linux 操作系统的。 在前面我说过,作为一个普通用户是不能够随便关闭系统的,因为虽然你用完了机器, 可是这时候可能还有其它的用户正在使用系统。因此,关闭系统或者是重新启动系统的操 作只有管理员才有权执行。另外 linux 系统在执行的时候会用部分的内存作缓存区,如果内 存上的数据还没有写入硬盘,就把电源拔掉,内存就会丢失数据,如果这些数据是和系统 本身有关的,那么会对系统造成极大的伤害。一般,我们建议在关机之前执行三次同步指 令 sync,可以用分号";"来把指令合并在一起执行,如: # sync;sync;sync 使用 shutdown 关闭系统的时候有以下几种格式: shutdown (系统内置 2分钟关机,并传送一些消息给正在使用的 user) shutdown -h now (下完这个指令,系统立刻关机) shutdown -r now (下完这个指令,系统立刻重新启动,相当于 reboot) shutdown -h 20:25 (系统会在今天的 20:25 关机) shutdown -h +10 (系统会在十分钟后关机) 如果在关机之前,要传送信息给正在机器上的使用者,可以加"-q"的参数,则会输出系 统内置的 shutdown 信息给使用者,通知他们离线。 halt 命令就不用多说了,只要你输入 halt,系统就会开始进入关闭过程,其效果和 shutdown -h now是完全一样的,我每次关机的时候都是用 halt。 6. reboot 命令 一看这个词,就知道这个命令是用来重新启动系统的。 当你输入 reboot 后,你就会看到系统正在将一个一个的服务都关闭掉,然后再关闭文 件系统和硬件,接着机器开始重新自检,重新引导,再次进入 linux 系统。 15z 普通用户使用的系统管理指令 1. chown命令 这个命令的作用是改变文件的所有者。 如果你有一个文件名为 classment.list 的文件,所有权要给于另一个账号为 golden的同 学,则可用 chown 来实现这个操作,但是当你改变了文件的所有者以后,该文件虽然在你 的 Home 目录下,可是你已经无任何修改或删除该文件的权限了,这一点同学们千万要注 意。通常会用到这个指令的时机,应该是你想让 linux 机器上的某位使用者到你的 Home 下 去用谋个文件是会用到。不过,泼出去的水就收不回来了,你用这个命令的时候可一定要 想清楚呦。 2. chmod命令 这个命令用来改变目录或文件的属性,是 linux 中一个应当熟悉的命令。 对这个命令,使用的方法很多,鉴于篇幅的原因,我只例出其中我最常用的一种。前 面讲过,一个文件用 10个小格来记录文件的权限。前三个小格是拥有者(user)本身的权 限,中间三个小格是和使用者同一组的成员(group)的权限,最后三个小格是表示其它使 用者(other)的权限。现在我们用三位的 2 进制数来表示相应的三小格的权限,例如: 111 rwx 101 r-x 011 -wx 001 -x 100 r- 这样一来,我们就可以用三个十进制的数来表示一个文件属性位上的十个格,其中每 一个十进制数大小等于代表每三格的那个三位的二进制数。例如,如果一个文件的属性是: rwxr-r--,那么我们就可以用 744 来代表它的权限属性;如果一个文件的属性是:rwxrwxr--, 那它对应的三个十进制数就是 774。这样一来我们就可以用这种简便的方法指定文件的属性 了。例如,我想把一个文件 test.list的属性设置为 rwxr-x---,那么我只要执行: chmod 750 test.list 就可以了,对于改变后的权限,你用 ls -l 就可以看到。 五.关於 Process 处理的指令 1. ps ps 是用来显示目前你的 process 或系统 processes 的状况。 以下列出比较常用的参数: 其选项说明如下: -a 列出包括其他 users 的 process 状况。 -u 显示 user - oriented 的 process 状况 。 -x 显示包括没有 terminal 控制的 process 状况 。 -w 使用较宽的显示模式来显示 process 状况 。 16我们可以经由 ps 取得目前 processes 的状况,如 pid , running state 等。 2. kill kill 指令的用途是送一个 signal 给某一个 process 。因为大部份送的都是用来杀掉 process 的 SIGKILL 或 SIGHUP ,因此称为 kill 。kill 的用法 为: kill [ -SIGNAL ] pid ... kill –l SIGNAL 为一个 singal 的数字,从 0 到 31 ,其中 9 是 SIGKILL ,也就是一般用来 杀掉一些无法正常 terminate 的讯号。其馀讯号的用途可参考 sigvec(2)中对 signal 的 说明。你也可以用 kill -l 来察看可代替 signal 号码的数目字。kill 的详细情形请参 阅 man kill。 六. 关於字串处理的指令 1. echo echo 是用来显示一字串在终端机上。□ echo -n 则是当显示完之後不会有跳行的动 作。 2. grep/fgrep grep 为一过滤器,它可自一个或多个档案中过滤出具有某个字串的行,或是自标准 输入过滤出具有某个字串的行。 fgrep 可将欲过滤的一群字串放在某一个档案中,然後使用 fgrep 将包含有属於这 一群字串的行过滤出来。 grep 与 fgrep 的用法如下: grep [-nv] match_pattern file1 file2 .... fgrep [-nv] -f pattern_file file1 file2 ... -n 把所找到的行在行前加上行号列出 -v 把不包含 match_pattern 的行列出 match_pattern 所要搜寻的字串 -f 以 pattern_file 存放所要搜寻的字串 七. 网路上查询状况的指令 1. man 17man 是手册 ( manual ) 的意思。 UNIX 提供线上辅助( on-line help )的功能, man 就 是用来让使用者在使用时查询指令、系统呼叫、标准程式库函式、各种表格等的使用所用 的。man 的用法如下: man [-M path] [[section] title ] ..... man [-M path] -k keyword ... -M path man 所需要的 manual database 的路径。 我们也可以用设定环境变数 MANPATH 的方式来取代 -M 选项。 title 这是所要查询的目的物。 section 为一个数字表示 manual 的分类,通常 1 代表可执行指令,2 代表系统呼叫 ( system call ) ,3 代表标准函数,等等。 我们如要参考 eqnchar(7) 的资料,则我们就输入 man 7 eqnchar ,便能取得我们所要 的辅助讯息。 -k keyword 用来将含有这项 keyword 的 title 列出来。 man 在 UNIX 上是一项非常重要的指令,我们在本讲义中所述之用法均仅只是一个大家 比较常用的用法以及简单的说明,真正详细的用法与说明还是要请你使用 man 来得到。 2. who who 指令是用来查询目前有那些人在线上。 3. w w 指令是用来查询目前有那些人在线上,同时显示出那些人目前的工作。 4. ku ku 可以用来搜寻整个网路上的 user , 不像 w 跟 who 只是针对 local host 的查询. 而且 ku 提供让使用者建立搜寻特定使用者名单的功能。你可以建立一个档案 information-file 以条列的方式存放你的朋友的资料,再建立一个档案 hosts-file 来指 定搜寻的机器名称。 ku 的指令格式可由 ku -h 得到。 八. 网路指令 UNIX 提供网路的连接,使得你可以在各个不同的机器上做一些特殊的事情,如你可以 在系上的 iris 图形工作站上做图形的处理,在系上的 Sun 上读 News ,甚至到学校的计 中去找别系的同学 talk 。这些工作可以利用 UNIX 的网路指令,在你的位子上连到各个 不同的机器上工作。如此一来,即使你在寝室,也能轻易的连至系上或计中来工作,不用 像以前的人必须泡在冷冰冰的机房面。 这些网路的指令如下所述: 181. rlogin 与 rsh rlogin 的意义是 remote login , 也就是经由网路到另外一部机器 login 。 rlogin 的格式是: rlogin host [ -l username ] 选项 -l username 是当你在远方的机器上的 username 和 local host 不同的时後, 必须输入的选项,否则 rlogin 将会假设你在那边的 username 与 localhost 相同,然後 在第一次 login 时必然会发生错误。 rsh 是在远方的机器上执行某些指令,而把结果传回 local host 。rsh 的格式如下: rsh host [ -l username ] [ command ] 如同 rlogin 的参数 -l username , rsh 的 -l username 也是指定 remote host 的 username 。而 command 则是要在 remote host 上执行的指令。如果没有 指定 command , 则 rsh 会去执行 rlogin ,如同直接执行 rlogin 。 不过 rsh 在执行的时候并不会像一般的 login 程序一样还会问你 password , 而是 如果你没有设定 trust table , 则 remote host 将不会接受你的 request 。 rsh 须要在每个可能会做为 remote host 的机器上设定一个档案,称为 .rhosts。这 个档案每一行分为两个部份,第一个是允许 login 的 hostname , 第二个部份则是允许 login 的username 。 例如, 在 ccsun7.csie.nctu.edu.tw 上头你的 username 为 QiangGe , 而你的 home 下面的 .rhost 有以下的一行: ccsun6.cc.nctu.edu.tw u8217529 则在 ccsun6.cc.nctu.edu.tw 机器上的 user u8217529 就可以用以下的方法来执行 rsh 程式: % rsh ccsun7.csie.nctu.edu.tw -l ysjuang cat mbox 将 ysjuang 在 ccsun7.csie.nctu.edu.tw 上的 mbox 档案内容显示在 local host ccsun6.cc.nctu.edu.tw 上。 而如果 .rhost 有这样的一行,则 ccsun6.cc.nctu.edu.tw 上的 user u8217529 将可以不用输入 password 而直接经由 rsh 或 rlogin login 到 ccsun7.csie.nctu.edu.tw 来。 注意: .rhost 是一个设定可以信任的人 login 的表格,因此如果设定不当将会让不法之徒 有可以乘机侵入系统的机会。 如果你阅读 man 5 rhosts ,将会发现你可以在第一栏用 + 来取代任何 hostname ,第二栏用 + 来取代任何 username 。 如一般 user 喜欢偷懒利用 " + username " 来代替列一长串 hostname ,但是这样 将会使得即使有一台 PC 上跑 UNIX 的 user 有与你相同的 username , 也可以得到你的 trust 而侵入你的系统。这样容易造成系统安全上的危险。因此本系禁止使用这样子的方 19式写你的 .rhost 档,如果发现将予以停机直到你找中心的工作人员将其改正为止。 同理, 如果你的第二个栏位为 + , 如"hostname + " ,则你是允许在某一部机器上的"所有"user 可 以不用经由输入 password 来进入你的帐号,是壹种更危险的行为。所以请自行小心。 2. telnet telnet 是一个提供 user 经由网路连到 remote host。 telnet 的格式如下: telnet [ hostname | ip-address ] [ port ] hostname 为一个像 ccsun1 或是 ccsun1.cc.nctu.edu.tw 的 nameaddress, ip-address 则为一个由四个小於 255 的数字组成的 ip address ,如 ccsun1 的 ip-address 为 140.113.17.173 ccsun1.cc.nctu.edu.tw 的 ip-address 为 140.113.4.11 。你可以利用 telnet ccsun1 或telnet 140.113.17.173 来连到 ccsun1。 port 为一些特殊的程式所提供给外界的沟通点, 如资工系的 MUD 其 server 便提 供一些 port 让 user 由这些 port 进入 MUD 程式。详情请参阅 telnet(1)的说明。 3. ftp ftp 的意义是 File Transfer Program ,是一个很常应用在网路档案传输的程式。ftp 的格式如下: ftp [ hostname | ip-address ] 其中 hostname | ip-address 的意义跟 telnet 中的相同。 在进入 ftp 之後,如果与 remote host 连接上了,它将会询问你 username 与密码, 如果输入对了就可以开始进行档案传输。 在 ftp 中有许多的命令,详细的使用方式请参考 ftp(1) ,这里仅列出较常用的 cd , lcd , mkdir , put , mput , get , mget , binary , ascii , prompt , help 与 quit 的 使用方式。 ascii 将传输模式设为 ascii 模式。通常用於传送文字档。 binary 将传输模式设为 binary 模式,通常用於传送执行档,压缩档与影像档等。 cd remote-directory 将 remote host 上的工作目录改变。 lcd [ directory ] 更改 local host 的工作目录。 ls [ remote-directory ] [ local-file ] 列出 remote host 上的档案。 get remote-file [ local-file ] 取得远方的档案。 mget remote-files 可使用通用字元一次取得多个档案。 put local-file [ remote-file] 将 local host 的档案送到 remote host。 mput local-files 可使用通用字元一次将多个档案放到 remote host 上。 help [ command ] 线上辅助指令。 20mkdir directory-name 在 remote host 造一个目录。 prompt 更改交谈模式,若为 on 则在 mput 与 mget 时每作一个档案之传输时均会询 问。 quit/bye 离开ftp . 利用 ftp ,我们便可以在不同的机器上将所需要的资料做转移,某些特别的机器更存 放大量的资料以供各地的使用者抓取,本校较著名的 ftp server 有 NCTUCCCA 与系上的 ftp.csie.nctu.edu.tw 。这些 ftp server 均有提供一个 user 称为 anonymous ,一般 的"外来客"可以利用这个 username取得该 server 的公共资料。不过 anonymous 在询问 password 时是要求使用 anonymous 的使用者输入其 email address,以往有许多台湾的使 用者在使用国外的 ftp server 时并没有按照人家的要求输入其 email address,而仅是随 便打一些字串,引起许多 internet user 和管理者的不满,对台湾的使用者的风评变得很 差,因此遵循各 ftp server 的使用规则也是一件相当重要的事。 九. 关於通讯用的指令 1. write 这个指令是提供使用者传送讯息给另一个使用者,使用方式: write username [tty] 2. talk/ytalk/cytalk/ctalk UNIX 专用的交谈程式。会将萤幕分隔开为你的区域和交谈对象的区域,同时也可和不 同机器的使用者交谈。使用方式: talk username[@host] [tty] 3. mesg 选择是否接受他人的 messege , 若为 messege no 则他人的 messege 将无法传送给 你,同时他也无法干扰你的工作。使用方法: mesg [-n|-y] 4. mail/elm 在网路上的 email 程式,可经由此程式将信件 mail 给他人。 使用方式: mail [username] mail -f mailboxfile 如有信件,则直接键入 mail 可以读取你的 mail . elm 提供较 mail 更为方便的介面,而且可做线上的 alias . 你可以进入 elm 使用上下 左右键来选读取的信件,并可按 h 取得线上的 help 文件。 21使用方式: elm [usernmae] elm -f mailboxfile 十. 编译器( Compiler ) Compiler 的用处在於将你所撰写的程式翻译成一个可执行档案。在资工系常用的程式语 言是 C , pascal , FORTRAN 等。你可以先写好一个 C 或 Pascal 或 FORTRAN 的原始程 式档,再用这些 compiler 将其翻成可执行档。你可以用这个方法来制造你自己的特殊指 令。 1. cc/gcc (C Compiler) /usr/bin/cc /usr/local/bin/gcc 语法: cc [ -o execfile ] source gcc [ -o execfile ] source execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可执行档会以 a.out 做为档名。 source 为一个以 .c 做为结尾的 C 程式档。请参阅 cc(1) 的说明。 2. pc (Pascal Compiler) /usr/local/bin/pc 语法: pc [ -o execfile ] source execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可执行档会 以 a.out 做为档名。 source 为一个以 .p 做为结尾的 Pascal 程式档。 请参阅 /net/home5/lang/man 中 pc(1) 的说明。 3. f77 (Fortran Compiler) /net/home5/lang/f77 语法: f77 [ -o execfile ] source execfile 是你所希望的执行档的名称,如果没有加上 -o 选项编译出来的可执行档会以 a.out 做为档名。 source 为一个以 .p 做为结尾的 FORTRAN 程式档。 十一. 有关列印的指令 以下为印表所会用到的指令,在本系的印表机有 lp1 , lp2 ( 点矩阵印表机 ), lw , sp , ps , compaq ( 雷射印表机 ),供使用者使用。 221. lpr lpr 为用来将一个档案印至列表机的指令。用法: lpr -P[ printer ] file1 file2 file3 ... 或 lpr -P[ printer ] < file1 例子: lpr -Plp1 hello.c hello.lst hello.map lpr -Plp1 < hello.c 前者以参数输入所要印出的档案内容,後者列印标准输入档案(standard input)的内 容,因已将 hello.c 转向到标准输入,故会印出 hello.c 的档案内容。 2. lpq lpq 是用来观察 printer queue 上的 Jobs 。用法: lpq -P[ printer ] 3. lprm lprm 是用来取消列印要求的指令。 通常我们有时会印错,或是误送非文字档资料至 printer , 此时就必须利用 lprm 取消列印 request ,以免造成资源的浪费。 用法: lprm -P[ printer ] [ Jobs id | username ] lprm 用来清除 printer queue 中的 Jobs , 如果你使用 Job Id 作为参数,则它将此 Job 自 printer queue 清除,如果你用 username 作为参数,则它将此 queue 中所有 Owner 为此 username 的 Jobs 清除。 到这里,我们第二讲的内容就基本结束了,可以说,这一讲是比较无聊的,但它又是 必不可少的。这里列出的仅仅是最最常用的控制台命令,要进一步的熟悉 Linux操作系统, 了解类 UNIX 操作系统的管理思想,我们还有很多要学习,有兴趣的同学可以参看其它的 相关参考书籍。 23 第三讲 Linux下的网络服务,配置问题和 常用工具 这一讲我们会接触到 Linux 下能够提供的一些典型的网络服务,大家会对这些服务有 一个感性的认识,除此之外我们还会看到 Linux下面一些非常重要的配置文件以及他们的用 法。最后我们会看到 Linux 下面最常用的几个工具软件。 一.Linux下的网络服务 一般来说,各种操作系统在网络方面的性能比较是这样的顺序 BSD>Linux>Win NT>Win 9X, 由此说来,Linux 的网络功能仅次于 UNIX,而强于 Win NT 和其它的视窗系 列产品,对于 Win2000我还不能评价太多,因为不是很熟。 Linux 的网络功能除了基本的连线功能如 telnet, ftp, rsh, login, finger等等以外,架设各 种服务器的功能更把 Linux 网络功能发挥的淋漓尽致,下面我大概的为大家介绍一下 Linux 下的各种网络服务。 1. Mail Server Email 现在是网络上最重要的服务了,你可能没有用过 FTP, BBS, INN,但是如果你连电 子邮件都没有用过,那作为 BUPT 的一员,你得自己好好反省一下了。 现在又很多功能强大的 mailserver供你选择,例如 freemail.263.net, hotmail.com, freemail.sohu.com,等等,这些都是免费的。但这是从使用者角度来看,如果你是想为一个局 域网内部提供一个交换电子邮件的服务,那它们对你来说可就是一笔巨款了,再说人家卖 不卖给你还不好说呢。Linux 下面最著名的 mail server是 Sendmail,它是一个负责监控和传 送电子邮件的邮件代理程序,你使用它就可以在在一个小的局域网(例如宿舍网)里提供 一个电子邮件服务,这是多么神奇的事情啊!使用 Linux 下面的 MailServer最大的好处是性 价比高,这些软件的功能强大,却又是完全免费的,我们完全不用去花几万元买一个功能 有限还要按照人头收费的 Exchange Server,或者是使用 D版软件被别人扎脊梁骨。 2. Router 和 Gateway 如果你的计算机可以连接到外面的 Internet 上去, 然而一些可以连接到你这台机器上的 24计算机却只能访问里面的局域网,那么你可以安装 Router或 Gateway的服务,这样别人就 可以通过你的机器和外面的世界联系了。当然了,这么做的前提是你有一颗大公无私的信, 要我就不行,我可舍不得把我的 PIII 的机器贡献给宿舍的网虫们。 3. Samba 在 Windows 横行的今天,Samba 的出现对于 Linux 的茁壮成长是非常重要的,它大大 拓宽了 Linux 的应用领域。Samba 可以提供一种转换 SMB(windows 使用的一种信息格式) 和 NFS(Linux 使用的一种信息格式)的服务,通过 Samba, 运行 Windows的工作站就可以 同运行 Linux服务器之间进行通信,还可以 让网络上的使用者(包括 Windows 用户)共 享一台打印机,这样 Linux服务器就可以运行在 Windows的环境中了。 4. NFS Server Linux 还可以作为文件服务器,为网络上具有存取权限的 Windows/Linux机器分享相同 的文件系统,这样一来,不论是在 Windows 还是在 Linux 的网络中,Linux 的文件服务器都 能够发挥作用了。 5. Terminal Server 这种服务能够提供 PPP/SLIP Dialup(包括 multi-port,就是一台计算机连多个调制解调器 上网),让一般的民用网络 Moden 使用者可通过 Terminal Server与 Internet连接起来。 6. BBS 在北邮如果你没有上过 BBS(Bulletin Board System电子布告版)我会很吃惊的, 202.112.101.44 或者是202.204.7.235 你至少应该去过一个吧?如果没有去过,那么赶快把这 一课补上。关于 BBS到底能做什么我就不多说了,我假定你已经知道了,现在网络上流行 的免费 BBS版本很多,著名的有 Phoenix,Maple,Firebird,Pivot等等,这些都可以在 Linux 上 使用。另外还有许多基于 WWW 的 BBS,例如著名的跨平台的 Motiff Community,可以非 常稳定的在 Linux 下运行,这是"瘟都死"所不能比拟的。 7. WWW 在 Linux下面也有功能强大的 WWW服务器,你完全可以不必去使用又贵又不稳定的 IIS。但是不可否认 IIS 的操作非常的简单,如果你觉得自己有钱,可以买得起 Win2000 Advanced Server,又出得起"人头税",那你就用"瘟都死"吧。在 Linux 上的 WWW服务程序 很多,现在最著名最流行的是 Apache,在北邮,有许多的服务器就是跑 Apache 的。现在在 Linux 上使用 Apache+PHP+MySQL 是实现动态页面的最佳搭配,立志于搞网站建设的朋友 可一定要留心这一块,因为它可以为你的网站建设节省大笔的成本(现在可是操作系统比 机器贵)。我知道一个讨论组:www.coventive.com.cn/club/default.htm,它就是用 Apache+PHP+MySQL 这种组合建立起来的,有兴趣的朋友可以去看看。 25 二.几种重要的配置文件 Linux 下面的配置文件非常的多,对于初学者来说,我们只需要知道最最常用的几个配 置文件就可以了。由于片符合时间的原因,在这里我只介绍四个非常经典的配置文件 (lilo.conf, passwd,inittab,fasttab),这四个文件中我重点介绍 lilo.conf,其余三个文件会简单的 在课堂上演示。至于 Linux 其它众多的配置文件必须各位同学自己下去查找相关资料自己学 习了。 1. lilo.conf 这是 Linuxloader(lilo)的配置文件。对于初学者来说,这个配置文件是非常重要的,因 为它直接关系到你的系统是否能够正确的引导到 Linux 上来。 我在这里主要将一下如何使用 lilo 实现多个在一台机器上安装多个操作系统。 一般来说,第一次安装 Linux 后,缺省引导的系统是 Linux,但是对大多数 Linux 用户 来说,他们使用 windows 的时间会多于 Linux,所以我们最好能够将缺省引导的系统改为 windows,这样的话,就省去了每次启动时敲一串字符的麻烦。要修改引导顺序,就要修改 Linux 系统中的一个配置文件,这个文件就是/etc/lilo.conf。我使用的是 Xlinux OS 1.5,用 vi 打开这个文件后,会出现下面的文字: boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=100 linear default=xlinux image=/boot/vmlinuz-2.2.14-5.0 read-only root=/dev/hda4 other=/dev/hda1 label=win 这就是刚刚安装完毕后的 LILO配制文件.这个文件是按照由前到后顺序引用的,通过修 改这个文件就可以改变 lilo 执行时的一些特性.首先我将这个文件中比较重要的几个地方给 大家介绍一下: 首先请看第 5 行:timeout=100,这是一个设置在 lilo 引导缺省的系统之前等候用户输入系 统别名的等候时间长度.它的时长好象不是按秒一级的数量级进行计算的,总之用户可以按 照自己的实际需要设置相应的时长.我一般是设置成 timeout=500. 然后我们看第 7 行:default=xlinux,这里是关键之一!这一行指明缺省引导的系统的别名 26是 xlinux,要想改变系统的缺省引导顺序,这里是需要修改的,稍后就会说到是怎么修改的. 再看第8行到第 11 行,这四行指明了引导 Linux 系统的一些细节. image=/boot/vmlinuz-2.2.14-5.0指明了操作系统核心是放在哪里的,以便于引导程序装载操作 系统核心;label=xlinux指明了引导这个操作系统时用的别名,这里是xlinux; root=/dev/hda4指 明了引导程序需要到哪一个硬盘的第几个分区去寻找 init 过程,在这里是要到第一个硬盘的 第四个分区中去将引导系统的控制权交给这个分区里的 init过程. 最后我们看看文件中的最后两行.other=/dev/hda1说明除了linux操作系统以外,机器中还 安装了别的操作系统(当然我知道这个另外的操作系统是我的 win2000了),它位于第一块硬 盘中的第一个分区,一般来说,这个路径是在安装的时候就设置好的,不需要我们手工修改,但 是我认为知道这些信息还是很有必要的;label=win指明了这个系统引导时使用的别名为win. 因为 lilo 是顺序引用的,所以如果我们想要让缺省引导的系统变成 windows,就需要将这两行 移动到 image=.....那一行之前的位置,我建议的位置是放在 image=...之前和default=.....之后. 这是关键之二! 当你将前面的两个关键步骤完成之后,还需要将default=....那一行改成 default=win,这是 比较重要的一步,虽然即使你不改动这里,系统也可以按照你的想法去引导,但是我可不敢保 证你这样做不会出一点问题.再说,如果你不改动这里那多别扭啊! 做到这里,我们对lilo.conf这个文件的改动就结束了,然后只要退出vi,然后键入 lilo -v -v -v这个命令来更新一下LILO,我们就大功告成了.当你reboot以后,就会发现在"lilo:"那里敲入 回车键后,系统就会缺省的引导到 windows 系统去了. 2. Passwd 这个配置文件是关于用户口令的。如果你是一名系统管理员,有可能会一次新增很多 的用户,这时用 adduser就相当麻烦了。一般有功力的管理员会直接去修改/etc/passwd 文件。 利用 passwd文件,可以控制用户的口令状态及一些个人配置。 对于这个文件,普通单机用户使用的并不是很多,主要是多用户的管理员使用,对于 它的一些基本配置方法,我会在课堂上为同学们演示,这里不再赘述。 3. Inittab和 fasttab 这两个文件都是存放在/etc 这个目录下面的,Inittab 文件用来配置 Linux 初始化的一些 动作,我们最常用的是设定 Linux 的启动方式。Fasttab 文件用来设定一些在 Linux 启动时的 动作,主要是文件系统或者是外设的挂接动作,如果你想让你的 Linux 一开始就能够使用光 盘驱动器,就可以把 mount 指令加到这个文件中去。 因为这两个文件对我们初学者来说,可以利用的地方不是很多,所以我不用过多的文 字来描述它们的功能,具体的操作我会在课堂上为同学们演示,这里不再赘述。 27 三.Linux下常用的工具软件 这里我会为大家介绍 Linux 世界里最常用的几种工具软件,包括:vi, tar, gzip, rpm。 1. 文字编辑 vi 是Linux(UNIX)世界最强大的文本编辑工具,我在第一讲中提到过它,现在我把它的 一些基本使用方法介绍给大家。 Vi 的三种状态 „ Command mode : 控制萤幕游标之移动,字元或游标之删除,搬移复制某 区段及进入 Insert mode 下,或者到 Last line mode 。 „ Insert mode : 唯有在 Insert mode 下, 才可做文字资料输入,按 Esc 键可到 Command mode 。 „ Last line mode : 将档案写入或离开编辑器,亦可设定编辑环境, 如寻找字 串、列出行号..等。 vi 的基本操作 ‹ 进入 vi 1. 在系统提示符号下输入 vi 及档案名称後即进入 vi 全萤幕编辑画面,且在 Command mode 下。 ‹ 切换至 Insert mode 编辑文件: 在 Command mode 下可按 'i' 或 'a' 或 'o' 三键进入 Insert mode。 ‹ 离开 vi 及存档: 在 Command mode 下可按 ':' 键进入 Last line mode, :w filename (存入指定档案) :wq (写入并离开 vi) :q! (离开并放弃编辑的档案) Command mode 下功能键简介 1. 进入 Insert mode i : 插入, 从目前游标所在之处插入所输入之文字。 a : 增加, 目前游标所在之下一个字开始输入文字。 o : 从新的一行行首开始输入文字。 2. 移动游标
燕山大学 Linux技术上机实验指导 实验一 Linux系统安装与简单配置 一、实验目的 1.掌握Linux系统安装的分区准备。 2.掌握Linux系统的安装步骤。 3.掌握Linux系统分区的挂载和卸载。 4.掌握Linux系统的启动和关闭操作。 二、实验内容 1.安装VMware虚拟机,设置光盘驱动器,为Linux系统安装做准备。 2.在虚拟机下安装Linux操作系统(如Ubuntu桌面版本)。 3.配置Linux系统运行环境。 4.利用空闲分区创建新的Linux系统分区。 5.将新的Linux系统分区挂载到系统中;卸载新挂载的分区,重新挂载到目录树中的其 他位置。 三、主要的实验步骤 1.制定安装系统的分区计划。 2.配置光驱引导镜像文件iso,启动系统,开始安装过程。 3.根据安装计划,对磁盘空间进行分区设置。 4.根据系统安装指导,完成Linux系统的安装过程。 5.安装成功后,退出系统,重新启动虚拟机,登陆Linux操作系统。 6.对Linux系统进行配置,如网络设备等。 7.利用磁盘使用工具和mount,将新创建的Linux系统分区挂载到系统中。将新挂载的分 区卸载,并重新挂载到目录树的其他位置。 实验二 Linux常用命令使用 一、实验目的 1.掌握Linux一般命令格式。 2.掌握有关文件和目录操作的常用命令。 3.熟练使用man命令。 二、实验内容 1.熟悉cd、date、pwd、cal、who、echo、clear、passwd等常用命令。 2.在用户主目录下对文件进行操作:复制一个文件、显示文件内容、查找指定内容、排 序、文件比较、文件删除等。 3.对目录进行管理:创建和删除子目录、改变和显示工作目录、列出和更改文件权限、 链接文件等。 4.利用man命令显示date、echo等命令的手册页。 5.显示系统中的进程信息。 三、主要实验步骤 1.登陆进入系统,修改个人密码。 使用简单命令:date、cal、who、echo、clear等,了解Linux命令格式。 Date: Cal: Who、who am i: Echo: Clear: 3.浏览文件系统; 1) 运行pwd命令,确定当前工作目录。 2) 运行ls –l命令,理解各字段含义。 3) 运行ls –ai命令,理解各字段含义。 4) 使用cd命令,将工作目录改到根(/)上。运行ls –l命令,结合教材中图2.2,了解各个目录的作用。 5) 直接使用cd,通过pwd指令验证目录位置。 6) 用mkdir建立一个子目录subdir。 7) 将工作目录更改到subdir。 4.文件操作: 1) 验证当前工作目录在subdir。 2) 运行date>file1,然后运行cat file1,看到什么信息? 3) 运行cat subdir,会出现什么结果?为什么? 4) 利用man命令显示date命令的使用说明。 5) 运行man date>>file1,看到什么信息?运行cat file1,看到什么信息? 6) 利用ls –l file1,了解链接计数是多少?运行ln file1 ../fa,再看看链接计数有什么变化?用cat命令显示fa文件内容。 7) 显示file1的当前10行,后19行。 8) 运行cp file1 file2,然后ls –l,看到什么信息?运行mv file2 file3,然后ls –l,看到什么信息?运行cat f*,结果如何? 9) 运行rm file3,然后ls –l,结果如何? 10) 在/etc/passwd文件中查找合适你的注册名的行。 11) 运行ls –l,理解各文件的权限是什么? 12) 用两种方式改变file1的权限。 13) 统计file1文件的行数、字数。 14) 运行 man ls"more,显示结果是什么?运行cat file1"head -20"teefile5,结果如何?运行cat file5"wc,结果如何? 实验三 vi编辑器的使用 一、实验目的 1.学习使用vi编辑器建立、编辑、显示及加工处理文本文件。 二、实验内容 1.进入和推出vi编辑器。 2.利用文本插入方式建立一个文件。 3.在新建的文本文件上移动光标位置。 4.对该文件执行删除、复原、修改、替换等操作。 三、主要实验步骤 1.进入vi编辑器。 建立一个文件,如file.c。进入插入方式,输入一个C语言程序的各行内容,故意制造几 处错误。最后,将该文件存盘。回到shell状态下。 运行gcc file.c –o myfile,编译该文件,会发现错误提示。理解其含义。 重新进入vi编辑器,对该文件进行修改。然后存盘,退出vi编辑器。重新编译该文件, 如果编译通过了,可以利用./myfile运行该程序。 运行man date > file1
本书详细讲解了用Linux的图形配置工具配置Caldera OpenLinux,通过一个ppp与网络连接、使用K桌面环境、用StarOffice提高在家办公的效率、网络浏览、发传真、接收email及使用GIMP等图形工具。 24学时每次1小时的课程能使你迅速掌握Linux各方面的内容,简单易懂,通俗实用。本书在美国十分畅销,其作者是美国资深计算机书作家。本书适合初、中级读者阅读。 目 录 前言 第一部分 安装和配置 第1学时 准备安装Linux操作系统 2 1.1 什么是Linux操作系统 2 1.2 什么是OpenLinux操作系统 3 1.3 需要什么设备 4 1.4 支持什么设备 4 1.5 什么设备不能工作 5 1.5.1 Win打印机 5 1.5.2 Win调制解调器 5 1.5.3 红外端口 6 1.6 有什么设备 6 1.7 怎样计划安装过程 7 1.7.1 从CD - ROM光盘启动安装 8 1.7.2 从软盘启动安装 8 1.7.3 其他方法 9 1.8 计划开机启动过程 9 1.9 准备硬盘驱动器 10 1.10 课时小结 13 1.11 专家答疑 13 1.12 练习题 13 第2学时 安装Linux操作系统 14 2.1 开始安装 14 2.2 完成Linux操作系统安装过程 20 2.2.1 登录到Linux操作系统 22 2.2.2 重新启动和关机 24 2.3 课时小结 25 2.4 专家答疑 25 2.5 练习题 25 第3学时 安装后的系统配置工作 26 3.1 X Window System 26 3.1.1 X窗口系统是如何配置的 26 3.1.2 XF86Config文件 28 3.1.3 绕过或者禁止kdm登录引导画面 31 3.1.4 开始一个X11任务 31 3.2 为OpenLinux操作系统配置声卡 32 3.2.1 加载声卡驱动模块 32 3.2.2 测试声卡配置值 34 3.2.3 使用COAS配置声卡 34 3.2.4 一个快速录音命令脚本程序 36 3.2.5 配置声卡的简单方法 37 3.3 激活PCMCIA卡的服务程序 37 3.4 使用COAS配置网络信息 40 3.5 在OpenLinux操作系统中使用艾美加 (Iomega)公司的Zip驱动器 42 3.6 课时小结 43 3.7 专家答疑 43 3.8 练习题 43 第二部分 学习Linux操作系统的基本命令 第4学时 阅读与浏览命令 46 4.1 使用man命令获取帮助 46 4.2 浏览及搜索文件系统 48 4.2.1 使用cd命令进入不同的目录 48 4.2.2 使用pwd命令查看自己所在的位置 48 4.2.3 使用find命令在子目录中搜索 匹配的文件 49 4.2.4 使用whereis命令查找文件 50 4.2.5 使用locate命令定位文件 50 4.2.6 使用whatis和apropos命令获取命令 简介 51 4.3 阅读子目录和文件 52 4.3.1 使用ls命令列出子目录的内容清单 52 4.3.2 使用dir和vdir命令列出子目录的 内容清单 55 4.3.3 使用cat命令列出及合并文件 56 4.3.4 使用more命令阅读文件 58 4.3.5 使用less命令浏览文件 59 4.4 使用head或tail命令阅读文件的 开头和结尾 60 4.5 课时小结 61 4.6 专家答疑 61 4.7 练习题 62 第5学时 操作与搜索命令 63 5.1 操作文件和子目录 63 5.1.1 使用touch命令建立文件 63 5.1.2 使用rm命令删除文件 64 5.1.3 使用mkdir命令建立子目录 65 5.1.4 使用rmdir命令删除子目录 66 5.1.5 使用mv命令给文件改名 67 5.1.6 使用cp命令进行拷贝操作 68 5.1.7 使用ln命令建立硬链接和符号链接 70 5.1.8 使用Midnight Commander程序处 理文件 71 5.2 搜索文件 72 5.2.1 什么是规则表达式 72 5.2.2 使用grep命令在文件内进行搜索 74 5.3 压缩和解压缩文件 76 5.3.1 使用磁带文件归档命令建立 档案文件 76 5.3.2 建立cpio档案文件 78 5.3.3 使用gzip命令压缩文件 78 5.3.4 使用compress命令压缩文件 79 5.4 课时小结 79 5.5 专家答疑 80 5.6 练习题 80 第6学时 使用shell 81 6.1 什么是shell 81 6.2 系统中都有哪几种shell 81 6.2.1 ash的特色 82 6.2.2 Linux操作系统缺省的shell—bash 的特色 83 6.2.3 公共域Korn Shell—pdksh 84 6.2.4 与csh兼容的shell—tcsh的特色 84 6.2.5 zsh 85 6.3 了解shell的命令行 85 6.3.1 对shell进行定制设置 88 6.3.2 在后台运行程序 91 6.3.3 怎样使用管道 93 6.4 建立shell的命令脚本程序 95 6.5 课时小结 98 6.6 专家答疑 98 6.7 练习题 98 第7学时 使用X窗口系统 99 7.1 启动X 99 7.1.1 使用不同的颜色深度启动X11 100 7.1.2 在X11环境中使用虚拟控制台 102 7.1.3 启动多个X11任务操作 102 7.1.4 使用xdm程序登录进入OpenLinux操作 系统和X11环境 103 7.2 X11窗口管理器程序 104 7.2.1 配置fvwm窗口管理器程序 105 7.2.2 启动AfterStep窗口管理器程序 108 7.2.3 启动twm窗口管理器程序 109 7.3 X11终端程序 110 7.3.1 改变xterm终端程序的设置 110 7.3.2 使用高内存效率的rxvt终端程序 111 7.4 学习X11基本操作 112 7.4.1 使用X11客户程序的窗口尺寸 设置参数 112 7.4.2 为X11客户程序设置背景和 前景颜色 113 7.4.3 设置X11客户程序的资源 113 7.4.4 改变X11中鼠标和光标的状态 115 7.4.5 如何在X11中进行复制和粘贴 116 7.4.6 捕捉和转储X11窗口 117 7.4.7 定制X11根窗口并使用屏幕保护器 118 7.5 深入探索X11程序 121 7.5.1 使用xlsfonts列出X11的字体清单 121 7.5.2 使用xwininfo客户程序获得 窗口信息 121 7.5.3 使用xmessage客户程序生成日程提 示便条 122 7.5.4 使用X11时钟程序管理时间 123 7.6 课时小结 123 7.7 专家答疑 123 7.8 练习题 124 第8学时 探索K Desktop Environment 桌面环境 125 8.1 启动运行KDE桌面环境 126 8.2 KDE桌面的特点 127 8.2.1 执行基本的桌面操作 127 8.2.2 使用桌面控制条 127 8.2.3 编辑修改KDE桌面上的控制条菜单 128 8.2.4 使用kfm文件管理器程序 129 8.3 使用KDE控制中心配置KDE桌面环境 130 8.3.1 使用显示管理器程序选项 130 8.3.2 更换桌面的墙纸 132 8.3.3 改变屏幕保护器程序 133 8.3.4 改变缺省显示字体 134 8.3.5 设置系统操作声音效果 134 8.3.6 改变鼠标和键盘的设置 135 8.3.7 改变窗口按钮、属性和标题栏 136 8.3.8 控制光标在桌面之间的移动 138 8.4 课时小结 139 8.5 专家答疑 139 8.6 练习题 140 第三部分 与外部世界连接 第9学时 使用通讯程序 142 9.1 设置和测试调制解调器 142 9.2 使用通讯程序向外拨号 145 9.2.1 初始化并使用minicom 程序向外拨号 145 9.2.2 初始化并使用X11客户程序seyon 向外拨号 147 9.2.3 为Linux系统设置拨入连接 149 9.3 发送和接收传真 150 9.3.1 使用efax系列软件进行传真 151 9.3.2 使用ksendfax客户程序发送传真 155 9.3.3 使用mgetty+sendfax发送传真 156 9.4 课时小结 158 9.5 专家答疑 158 9.6 练习题 159 第10学时 与因特网连接 160 10.1 所需要的硬件 160 10.2 所需要的Linux操作系统软件 162 10.3 需要从ISP商处了解的信息 163 10.4 手动设置PPP连接 164 10.4.1 编辑resolv.conf文件 164 10.4.2 编辑PPP连接命令脚本程序 165 10.5 手动启动和中断PPP连接 166 10.5.1 使用minicom程序连接 167 10.5.2 使用ppp-on命令脚本程序连接 167 10.5.3 结束PPP连接 168 10.6 使用kppp客户程序配置一个PPP连接 168 10.6.1 配置kppp连接 168 10.6.2 使用kppp客户程序开始和结束PPP 连接 172 10.7 使用xisp程序配置一个PPP连接 172 10.7.1 配置一个新的xisp帐户 173 10.7.2 使用xisp客户程序开始和结束PPP 连接 174 10.8 检查连接 175 10.8.1 使用ifconfig命令 175 10.8.2 使用netstat命令 176 10.8.3 使用ping命令 176 10.8.4 使用route命令 177 10.8.5 查看系统登录记录 177 10.9 课时小结 178 10.10 专家答疑 178 10.11 练习题 179 第11学时 配置因特网电子邮件 180 11.1 初始化设置和获取电子邮件 180 11.2 使用Mail程序集发送邮件 183 11.2.1 使用mail程序 183 11.2.2 配置并使用elm邮件程序 184 11.2.3 配置并使用pine邮件程序 185 11.2.4 配置和使用网景公司的Messenger 软件收发电子邮件 188 11.2.5 订阅邮件表 191 11.3 配置procmail程序与写作模板对付 垃圾邮件 191 11.4 课时小结 193 11.5 专家答疑 193 11.6 练习题 194 第12学时 配置因特网新闻 195 12.1 使用tin新闻阅读器程序阅读 Usenet新闻 196 12.2 使用slrn新闻阅读器程序阅读 Usenet新闻 199 12.3 使用krn客户程序阅读Usenet新闻 201 12.4 使用网景公司的Discussions软件阅读 Usenet新闻 204 12.5 在Usenet新闻组上发布消息之前 207 12.6 课时小结 207 12.7 专家答疑 207 12.8 练习题 208 第13学时 因特网上的下载与浏览 209 13.1 使用文件传输协议程序来获取文件 209 13.1.1 使用ftp命令检索文件 209 13.1.2 使用ncftp命令进行下载 215 13.2 使用Linux浏览器程序浏览 World Wide Web网 216 13.2.1 使用lynx命令快速浏览 216 13.2.2 探索网景公司的Communicator 浏览器软件 217 13.3 使用因特网Relay Chat聊天 220 13.4 安装和配置AOL(美国在线)的Instant Messenger软件 221 13.5 使用telnet命令连接到其他的计算机 222 13.6 课时小结 224 13.7 专家答疑 224 13.8 练习题 225 第四部分 有效率地使用Linux操作系统 第14学时 文字处理程序 228 14.1 Linux操作系统环境中的字处理器 程序 228 14.1.1 XEmacs环境的特点 229 14.1.2 VIsual iMproved编辑器 程序—vim 232 14.1.3 pine软件的pico编辑器 程序的特点 233 14.1.4 合五为一的编辑器程序—joe 234 14.1.5 配置jed编辑器程序 235 14.1.6 使用kedit编辑器客户程序 235 14.1.7 使用CRiSPlite编辑器程序 236 14.1.8 StarOffice办公室套装软件中的StarWriter组件 237 14.1.9 Corel公司的WordPerfect for Linux 软件 238 14.1.10 Applix Words软件 239 14.1.11 使用sed和其他过滤器改变文本 240 14.2 对文档进行拼写检查 242 14.2.1 使用ispell命令改正文档 242 14.2.2 查找单个单词和其他技巧 243 14.3 课时小结 244 14.4 专家答疑 244 14.5 练习题 245 第15学时 排版打印文档 246 15.1 对文本进行排版 246 15.1.1 使用文本过滤器对文本进行排版 246 15.1.2 使用groff排版程序对文本进行 格式化处理 250 15.1.3 使用TeX排版软件对文本进行格式 化处理 252 15.2 打印文本文档 253 15.2.1 使用LPRng打印系统打印文档 254 15.2.2 使用lisa命令配置打印机 256 15.2.3 配置WordPerfect软件的打印功能 258 15.3 课时小结 260 15.4 专家答疑 260 15.5 练习题 261 第16学时 图形工具 262 16.1 了解Linux操作系统的图形文件格式 262 16.2 转换及观察图形 267 16.2.1 使用GIMP软件编辑图形 268 16.2.2 使用Image Magick软件进行 图像编辑 271 16.2.3 使用xv命令观看图形 272 16.2.4 使用gv命令查看PostScript 格式的文件 273 16.3 关于数字照相机和扫描仪 274 16.4 课时小结 275 16.5 专家答疑 275 16.6 练习题 276 第17学时 学习数学与财务工具 277 17.1 计算器 277 17.1.1 使用dc命令进行桌面计算 277 17.1.2 使用X11的xcalc客户程序 进行计算 278 17.1.3 使用kcalc客户程序进行计算 278 17.1.4 使用units命令进行计量单位转换 279 17.1.5 使用bc语言解释器编程计算器 280 17.2 电子表 281 17.2.1 使用公共域中的sc电子表 281 17.2.2 使用slsc电子表 282 17.2.3 使用免费的Wingz电子表 283 17.2.4 StarCalc电子表程序的特点 284 17.2.5 Applixware电子表程序的 商业化特点 285 17.3 使用gnuplot程序建立数学公式 的图形 286 17.4 课时小结 288 17.5 专家答疑 288 17.6 练习题 289 第18学时 个人事务工具程序 290 18.1 使用at命令安排个人日程备 忘录和任务 290 18.2 使用crontab命令安排周期性的 备忘录提示 292 18.3 使用X11的ical客户程序建立约会 备忘录提示 294 18.4 使用emacs查看日历和管理约会 297 18.5 使用knote客户程序设置报时钟 299 18.6 课时小结 299 18.7 专家答疑 299 18.8 练习题 300 第19学时 使用StarOffice软件实现 家庭办公室管理 301 19.1 安装和配置StarOffice软件 301 19.1.1 启动StarOffice软件运行 303 19.1.2 对StarOffice软件进行定制设置 304 19.1.3 为StarOffice软件安装一台打印机 305 19.2 使用StarOffice软件 305 19.2.1 使用StarWriter建立文档 307 19.2.2 对StarWriter文档进行拼写 检查和保存 309 19.2.3 使用StarCalc进行计算 310 19.2.4 使用StarCalc制作数据表图 313 19.3 课时小结 314 19.4 专家答疑 314 19.5 练习题 315 第20学时 休闲与玩Linux操作系统中的 游戏 316 20.1 使用kscd和xplaycd客户程序播放 音乐CD光盘 316 20.2 适合控制台的游戏 319 20.3 X窗口系统下的游戏 320 20.3.1 使用xboard客户程序玩国际象棋 320 20.3.2 玩X11版的solitaire扑克翻牌游戏 321 20.3.3 玩X11版的backgammon游戏 322 20.3.4 玩X11版的galaga游戏 322 20.3.5 玩X11版的击球游戏xboing 323 20.3.6 玩X窗口版Quake游戏 323 20.4 课时小结 324 20.5 专家答疑 324 20.6 练习题 325 第五部分 监管你的系统 第21学时 系统监管基础 328 21.1 使用su命令以根操作员的身份 执行操作 328 21.2 获取磁盘空间信息 329 21.2.1 使用df命令获取文件系统的 统计数据 330 21.2.2 使用du命令掌握文件系统的 磁盘使用情况 331 21.2.3 使用symlinks命令检查符号链接 332 21.2.4 节省磁盘空间 333 21.3 获取内存信息 335 21.3.1 使用free命令生成内存使用 情况的报告 335 21.3.2 使用vmstat命令生成虚拟内存使用 情况的报告 335 21.3.3 查看shell的“ulimit”设置 336 21.3.4 使用kill命令收回内存 337 21.4 使用top和xload命令获取系统 负载信息 338 21.4.1 使用uptime和w命令确定Linux操作 系统已经运转的时间 339 21.4.2 使用pppstats和mailstats命令获取网 络和邮件信息 340 21.4.3 使用statserial命令监控串行口 340 21.5 管理用户的存取权限 341 21.5.1 使用adduser命令建立用户 341 21.5.2 使用lisa命令管理用户 342 21.5.3 使用passwd命令改变口令字 342 21.5.4 限制登录 344 21.5.5 设置硬盘配额 345 21.6 课时小结 347 21.7 专家答疑 347 21.8 练习题 348 第22学时 管理文件和文件系统 349 22.1 OpenLinux操作系统是如何组织的 349 22.2 使用mount命令存取其他的 文件系统 351 22.3 了解文件系统表/etc/fstab文件 351 22.4 格式化一张软盘 353 22.5 使用KFloppy客户程序格式化软盘 355 22.6 mtools程序包 357 22.7 管理文件的所有权限和存取权限 358 22.7.1 掌握Linux操作系统中的 文件类型 358 22.7.2 解读文件的权限标志 359 22.8 使用chmod命令改变文件的权限 360 22.9 使用chown命令改变文件的所有权 362 22.10 使用chgrp和newgrp命令改变 用户组和所有权 362 22.11 使用rpm、lisa和kpackage程序管理 Linux软件 363 22.11.1 使用rpm命令 364 22.11.2 使用kpackage客户程序 366 22.11.3 使用lisa命令 368 22.12 课时小结 370 22.13 专家答疑 370 22.14 练习题 371 第23学时 备份和恢复系统 372 23.1 备份或者恢复操作之前需要考虑的 几个因素 372 23.1.1 配置BRU备份系统进行 备份和恢复 373 23.1.2 使用tar命令备份系统 376 23.1.3 使用cpio命令进行备份和恢复 377 23.1.4 使用taper命令脚本程序进行磁带机 备份和恢复 378 23.2 课时小结 380 23.3 专家答疑 380 23.4 练习题 380 第24学时 使用任务计划实现系统管理 自动化 381 24.1 使用cron程序包 381 24.1.1 管理用户的cron任务计划 382 24.1.2 使用crontab命令设置任务计划 382 24.2 使用atrun命令管理用户的任务计划 384 24.3 课时小结 386 24.4 专家答疑 386 24.5 练习题 386
由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等多个方面深入讲解了如何构建高性能的Linux服务器。其中蕴含了丰富的运维经验。更为重要的是,本书的内容不受硬件环境的限制,而且包含大量实用性极强的案例。对于广大Linux运维人员和系统管理人员来说,具有非常实用的指导意义。 全书共分五个篇幅,由14个章节组成,内容涉及Web应用、数据备份恢复、网络存储应用、性能优化与运维监控、集群高级应用方面,每个篇幅占用比例分别为:20%、20%、14%、14%,32%。 前言 第1篇 Web应用篇 第1章 轻量级HTTP服务器Nginx 1.1 什么是Nginx 1.2 为什么要选择Nginx 1.2.1 Nginx与Apache的异同 1.2.2 选择Nginx的优势所在 1.3 Nginx的模块与工作原理 1.4 Nginx的安装与配置 1.4.1 下载与安装Nginx 1.4.2 Nginx配置文件的结构 1.4.3 配置与调试Nginx 1.4.4 Nginx的启动、关闭和平滑重启 1.5 Nginx常用配置实例 1.5.1 虚拟主机配置实例 1.5.2 负载均衡配置实例 1.5.3 防盗链配置实例 1.5.4 日志分割配置实例 1.6 Nginx性能优化技巧 1.6.1 编译安装过程优化 1.6.2 利用TCMalloc优化Nginx的性能 1.6.3 Nginx内核参数优化 1.7 实战Nginx与PHP(FastCGI)的安装、配置与优化 1.7.1 什么是 FastCGI 1.7.2 Nginx+FastCGI运行原理 1.7.3 spawn-fcgi与PHP-FPM 1.7.4 PHP与PHP-FPM的安装及优化 1.7.5 配置Nginx来支持PHP 1.7.6 测试Nginx对PHP的解析功能 1.7.7 优化Nginx中FastCGI参数的实例 1.8 实战Nginx与Perl、Java的安装与配置 1.8.1 Perl(FastCGI)的安装 1.8.2 为Nginx添加FCGI支持 1.8.3 测试Nginx +Perl(FastCGI) 1.8.4 搭建Nginx+Java环境 1.9 本章小结 第2章 高性能HTTP加速器Varnish 2.1 初识Varnish 2.1.1 Varnish概述 2.1.2 Varnish的结构与特点 2.1.3 Varnish与Squid的对比 2.2 开始安装Varnish 2.2.1 安装前的准备 2.2.2 获取Varnish软件 2.2.3 安装pcre 2.2.4 安装Varnish 2.3 配置Varnish 2.3.1 VCL使用说明 2.3.2 配置一个简单的Varnish实例 2.3.3 Varnish对应多台Web服务器的配置实例 2.4 运行Varnish 2.4.1 varnishd指令 2.4.2 配置Varnish运行脚本 2.4.3 管理Varnish运行日志 2.5 管理Varnish 2.5.1 查看Varnish进程 2.5.2 查看Varnish缓存效果与状态 2.5.3 通过端口管理Varnish 2.5.4 管理Varnish缓存内容 2.6 Varnish优化 2.6.1 优化Linux内核参数 2.6.2 优化系统资源 2.6.3 优化Varnish参数 2.7 Varnish的常见应用实例 2.7.1 利用Varnish实现图片防盗链 2.7.2 利用Varnish实现静态文件压缩处理 2.8 本章小结 第3章 Memcached应用实战 3.1 Memcached基础 3.1.1 什么是Memcached 3.1.2 Memcached的特征 3.1.3 Memcached的安装 3.1.4 Memcached的简单使用过程 3.2 剖析Memcached的工作原理 3.2.1 Memcached的工作过程 3.2.2 Slab Allocation的工作机制 3.2.3 Memcached的删除机制 3.2.4 Memcached的分布式算法 3.3 Memcached的管理与性能监控 3.3.1 如何管理Memcached 3.3.2 Memcached的监控 3.3.3 Memcached变种产品介绍 3.4 通过UDFs实现Memcached与MySQL的自动更新 3.4.1 UDFs使用简介 3.4.2 memcached_functions_mysql应用实例 3.4.3 对memcached_functions_mysql的简单功能进行测试 3.4.4 使用memcached_functions_mysql的经验与技巧 3.5 本章小结 第2篇 数据备份恢复篇 第4章 开源网络备份软件bacula 4.1 bacula总体概述 4.1.1 bacula是什么 4.1.2 bacula适合哪些用户 4.1.3 bacula的功能特点 4.1.4 bacula的工作原理 4.2 安装bacula 4.2.1 bacula的几种网络备份拓扑 4.2.2 编译与安装bacula 4.2.3 初始化MySQL数据库 4.3 配置一个bacula备份系统 4.3.1 配置bacula的Console端 4.3.2 配置bacula的Director端 4.3.3 配置bacula的SD 4.3.4 配置bacula的FD端 4.4 启动与关闭bacula 4.4.1 启动bacula的Director daemon与Storage daemon 4.4.2 在客户端FD启动File daemon 4.5 实战bacula备份恢复过程 4.5.1 实例演示bacula的完全备份功能 4.5.2 实例演示bacula的增量备份功能 4.5.3 实例演示bacula的差异备份功能 4.5.4 实例演示bacula的完全恢复功能 4.5.5 实例演示bacula的不完全恢复功能 4.6 本章小结 第5章 数据镜像备份工具rsync与unison 5.1 rsync简介 5.1.1 什么是rsync 5.1.2 rsync的功能特性 5.1.3 下载与安装rsync软件 5.2 利用rsync搭建数据镜像备份系统 5.2.1 rsync的应用模式 5.2.2 企业案例:搭建远程容灾备份系统 5.3 通过rsync+inotify实现数据的实时备份 5.3.1 rsync的优点与不足 5.3.2 初识inotify 5.3.3 安装inotify工具inotify-tools 5.3.4 inotify相关参数 5.3.5 inotifywait相关参数 5.3.6 企业应用案例:利用rsync+inotify搭建实时同步系统 5.4 unison简介 5.5 安装unison 5.6 配置双机ssh信任 5.6.1 在两台机器上创建 RSA密钥 5.6.2 添加密钥到授权密钥文件中 5.7 unison的使用 5.7.1 本地使用unison 5.7.2 远程使用unison 5.7.3 unison参数说明 5.7.4 通过配置文件来使用unison 5.8 本章小结 第6章 ext3文件系统反删除利器ext3grep 6.1 “rm–rf”带来的困惑 6.2 ext3grep的安装与使用 6.2.1 ext3grep的恢复原理 6.2.2 ext3grep的安装过程 6.3 通过ext3grep恢复误删除的文件与目录 6.3.1 数据恢复准则 6.3.2 实战ext3grep恢复文件 6.4 通过ext3grep恢复误删除的MySQL表 6.4.1 MySQL存储引擎介绍 6.4.2 模拟MySQL表被误删除的环境 6.4.3 通过ext3grep分析数据、恢复数据 6.5 本章小结 第3篇 网络存储应用篇 第7章 IP网络存储iSCSI 7.1 存储的概念与术语 7.1.1 SCSI介绍 7.1.2 FC介绍 7.1.3 DAS介绍 7.1.4 NAS介绍 7.1.5 SAN介绍 7.2 iSCSI的概念 7.3 FC SAN与IP SAN 7.4 iSCSI的组成 7.4.1 iSCSI Initiator 7.4.2 iSCSI Target 7.5 iSCSI的工作原理 7.6 搭建基于IP SAN的iSCSI存储系统 7.6.1 安装iSCSI Target软件 7.6.2 配置一个简单的iSCSI Target 7.6.3 在Windows上配置iSCSI Initiator 7.6.4 在Linux上配置iSCSI Initiator 7.7 iSCSI 在安全方面的相关设定 7.7.1 Initiator主机以IP认证方式获取iSCSI Target资源 7.7.2 Initiator主机以密码认证方式获取iSCSI Target资源 7.8 iSCSI性能优化方案 7.8.1 iSCSI性能瓶颈 7.8.2 iSCSI性能优化 7.9 本章小结 第8章 分布式存储系统MFS 8.1 MFS概论 8.2 MFS 文件系统 8.2.1 MFS文件系统结构 8.2.2 MFS的编译与安装实例 8.3 编译与使用MFS的经验总结 8.3.1 安装选项说明 8.3.2 管理服务器 8.3.3 元数据日志服务器 8.3.4 数据存储服务器 8.3.5 客户端挂载 8.4 管理与使用MFS 8.4.1 在客户端挂载文件系统 8.4.2 MFS常用操作 8.4.3 为垃圾箱设定隔离时间 8.4.4 快照 8.4.5 MFS的其他命令 8.5 维护MFS 8.5.1 启动MFS集群 8.5.2 停止MFS集群 8.5.3 MFS 数据存储服务器的维护 8.5.4 MFS元数据的备份 8.5.5 MFS 管理服务器的恢复 8.5.6 从备份恢复MFS 管理服务器 8.6 通过冗余实现失败防护的解决方案 8.7 本章小结 第4篇 运维监控与性能优化篇 第9章 运维监控利器Nagios 9.1 Nagios综述 9.1.1 什么是Nagios 9.1.2 Nagios的结构与特点 9.2 Nagios的安装与配置 9.2.1 安装Nagios 9.2.2 配置Nagios 9.3 Nagios的运行和维护 9.3.1 验证Nagios配置文件的正确性 9.3.2 启动与停止Nagios 9.3.3 Nagios故障报警 9.4 Nagios性能分析图表的实现 9.4.1 Nagios性能分析图表的作用 9.4.2 PNP的概念与安装环境 9.4.3 安装PNP 9.4.4 配置PNP 9.4.5 修改Nagios配置文件 9.4.6 测试PNP功能 9.5 利用插件扩展Nagios的监控功能 9.5.1 利用NRPE外部构件监控远程主机 9.5.2 利用飞信实现Nagios短信报警功能 9.6 本章小结 第10章 基于Linux服务器的性能分析与优化 10.1 系统性能分析的目的 10.1.1 找到系统性能的瓶颈 10.1.2 提供性能优化方案 10.1.3 使系统硬件和软件资源的使用达到平衡 10.2 分析系统性能涉及的人员 10.2.1 Linux系统管理人员 10.2.2 系统架构设计人员 10.2.3 软件开发人员 10.3 影响Linux性能的各种因素 10.3.1 系统硬件资源 10.3.2 操作系统相关资源 10.3.3 应用程序软件资源 10.4 系统性能分析标准和优化原则 10.5 几种典型应用对系统资源使用的特点 10.5.1 以静态内容为主的Web应用 10.5.2 以动态内容为主的Web应用 10.5.3 数据库应用 10.5.4 软件下载应用 10.5.5 流媒体服务应用 10.6 Linux下常见的性能分析工具 10.6.1 vmstat命令 10.6.2 sar命令 10.6.3 iostat命令 10.6.4 free命令 10.6.5 uptime命令 10.6.6 netstat命令 10.6.7 top命令 10.7 基于Web应用的性能分析及优化案例 10.7.1 基于动态内容为主的网站优化案例 10.7.2 基于动态、静态内容结合的网站优化案例 10.8 本章小结 第5篇 集群高级应用篇 第11章 构建高可用的LVS负载均衡集群 11.1 LVS集群的组成与特点 11.1.1 LVS集群的组成 11.1.2 LVS集群的特点 11.1.3 LVS集群系统的优缺点 11.2 高可用 LVS负载均衡集群体系结构 11.3 高可用性软件Heartbeat与Keepalived 11.3.1 开源HA软件Heartbeat的介绍 11.3.2 安装heartbeat 11.3.3 开源HA软件Keepalived的介绍 11.3.4 安装Keepalived 11.4 安装LVS软件 11.4.1 配置与检查安装环境 11.4.2 在Director Server上安装IPVS管理软件 11.5 搭建高可用 LVS集群 11.5.1 通过heartbeat搭建LVS高可用性集群 11.5.2 通过Keepalived搭建LVS高可用性集群系统 11.5.3 通过piranha搭建LVS高可用性集群 11.6 测试高可用LVS负载均衡集群系统 11.6.1 高可用性功能测试 11.6.2 负载均衡测试 11.6.3 故障切换测试 11.7 本章小结 第12章 RHCS集群 12.1 RHCS集群概述 12.2 RHCS集群的组成与结构 12.2.1 RHCS集群的组成 12.2.2 RHCS集群结构 12.3 RHCS集群的运行原理及功能 12.3.1 分布式集群管理器(CMAN) 12.3.2 锁管理(DLM) 12.3.3 配置文件管理(CCS) 12.3.4 栅设备(Fence) 12.3.5 高可用性服务管理器 12.3.6 集群配置和管理工具 12.3.7 Redhat GFS 12.4 安装RHCS 12.4.1 安装前准备工作 12.4.2 配置共享存储和RHCS管理端Luci 12.4.3 在集群节点上安装RHCS软件包 12.4.4 在集群节点上安装和配置iSCSI客户端 12.5 配置RHCS高可用集群 12.5.1 创建一个cluster 12.5.2 创建Failover Domain 12.5.3 创建Resources 12.5.4 创建Service 12.5.5 配置存储集群GFS 12.5.6 配置表决磁盘 12.5.7 配置Fence设备 12.6 管理和维护RHCS集群 12.6.1 启动RHCS集群 12.6.2 关闭RHCS集群 12.6.3 管理应用服务 12.6.4 监控RHCS集群状态 12.6.5 管理和维护GFS2文件系统 12.7 RHCS集群功能测试 12.7.1 高可用集群测试 12.7.2 存储集群测试 12.8 本章小结 第13章 Oracle RAC集群 13.1 Oracle集群体系结构 13.2 Oracle ClusterWare体系结构与进程介绍 13.2.1 Oracle ClusterWare 简介 13.2.2 Oracle ClusterWare 进程介绍 13.3 RAC数据库体系结构与进程 13.3.1 RAC 简介 13.3.2 Oracle RAC的特点 13.3.3 RAC进程管理 13.3.4 RAC数据库存储规划 13.4 安装Oracle RAC数据库 13.4.1 安装前的系统配置需求 13.4.2 设置数据库安装资源 13.4.3 配置主机解析文件 13.4.4 检查所需软件包 13.4.5 配置系统内核参数 13.4.6 设置 Shell对Oracle用户的限制 13.4.7 配置hangcheck-timer内核模块 13.4.8 配置系统安全设置 13.4.9 创建Oracle用户和组 13.4.10 设置Oracle用户环境变量 13.4.11 配置节点间SSH信任 13.4.12 配置共享存储系统 13.4.13 安装Oracle Clusterware 13.4.14 安装Oracle数据库 13.4.15 配置Oracle Net 13.4.16 创建RAC数据库 13.5 Oracle CRS的管理与维护 13.5.1 查看集群状态 13.5.2 启动与关闭集群服务资源 13.5.3 启动与关闭CRS 13.5.4 管理voting disk 13.5.5 管理OCR 13.5.6 快速卸载CRS 13.6 ASM基本操作维护 13.6.1 ASM的特点 13.6.2 ASM的体系结构与后台进程 13.6.3 管理ASM实例 13.7 利用srvctl管理RAC数据库 13.7.1 查看实例状态(srvctl status) 13.7.2 查看RAC数据库配置信息(srvctl config) 13.7.3 启动 13.7.4 增加 13.8 测试RAC数据库集群的功能 13.8.1 负载均衡测试 13.8.2 透明应用失败切换测试 13.9 本章小结 第14章 构建MySQL+heartbeat+DRBD+LVS集群应用系统 14.1 MySQL高可用集群概述 14.2 heartbeat + DRBD高可用性方案的实现原理 14.3 部署MySQL高可用高扩展集群 14.3.1 配置之前的准备 14.3.2 DRBD的部署 14.3.3 DRBD的配置 14.3.4 DRBD的维护和管理 14.3.5 DRBD的性能优化 14.3.6 MySQL的部署 14.3.7 heartbeat的部署 14.4 搭建Slave集群 14.4.1 为什么要搭建Slave集群 14.4.2 利用LVS+Keepalived搭建高可用MySQL Slave集群 14.4.3 高可用Slave集群的一些注意点 14.5 部署MySQL集群要考虑的问题 14.6 本章小结
### 回答1: Linux开发工具是用于在Linux操作系统上进行软件开发的工具集合。其中包括编译器、调试器、集成开发环境(IDE)、版本控制工具等。常见的Linux开发工具有GCC、GDB、Eclipse、Git等。使用这些工具可以方便地进行代码编写、调试、测试和版本控制等工作,提高开发效率和代码质量。同时,Linux开发工具也支持多种编程语言,如C、C++、Java、Python等,满足不同开发需求。 ### 回答2: Linux开发工具是指针对Linux操作系统开发的一系列软件工具和环境,包括编程语言、集成开发环境、调试工具等,旨在帮助开发者更高效地进行软件开发。 首先,Linux开发工具提供了丰富的编程语言选择,如C、C++、Python等。这些语言具有良好的跨平台性能,可在Linux系统上进行开发,并且有着强大的功能和灵活性,能够满足不同开发需求。 其次,Linux开发工具提供了各种集成开发环境(IDE),如Eclipse、NetBeans等。这些IDE提供了代码编辑、编译、调试等功能,并且支持版本管理系统,如Git,可以方便地进行团队协作开发。此外,IDE还提供了丰富的插件和扩展,以及智能代码补全、语法高亮等功能,提升了开发效率和舒适度。 此外,Linux开发工具还包括了一些非常强大的调试工具,如GDB、Valgrind等。这些工具能够帮助开发者快速定位和解决程序中的错误和问题,并且提供了详细的运行时信息和内存调试功能,对于大型项目的开发和调试非常有帮助。 除此之外,Linux开发工具还包括了一些性能分析工具,如perf、gprof等。这些工具能够帮助开发者评估程序的性能,并提供详细的性能数据和分析报告,帮助优化程序的运行效率。 总而言之,Linux开发工具通过提供丰富的编程语言支持、集成开发环境、调试工具和性能分析工具等,可以帮助开发者更加高效地进行软件开发,提高开发效率和质量。对于Linux系统开发者来说,掌握这些工具的使用,对于提升自己的技术水平和开发能力非常重要。 ### 回答3: Linux开发工具是指在Linux操作系统上用于开发和调试软件的工具集合。这些工具可帮助开发者编写、编辑、构建、调试和测试软件,提高开发效率和软件质量。 首先,Linux开发工具包含了丰富的文本编辑器,如Vim和Emacs。这些编辑器具有强大的功能和高度可定制性,能够满足不同开发者的需求,如代码高亮、语法检查、自动完成等,有助于编写高质量的代码。 其次,Linux开发工具还包括编译器和调试器。常用的编译器有GCC和Clang,它们支持多种编程语言,如C、C++、Java等,能够将源代码转换为机器代码。调试器如GDB和LLDB能够帮助开发者在代码执行过程中进行调试,定位和修复bug。 另外,Linux开发工具还提供了版本控制系统,如Git和Subversion,可以帮助开发者管理代码版本,协作开发,追踪代码变更历史,并提供分支管理和合并功能,方便团队合作和代码维护。 此外,Linux开发工具还包括构建工具,如Make和CMake,能够自动化构建和编译过程,简化开发流程,提高开发效率。还有性能分析工具,如Valgrind和Gprof,可以帮助开发者分析代码性能瓶颈,优化程序性能。 总之,Linux开发工具提供了一套完整的开发环境,可以满足开发者在Linux平台上开发软件的各种需求。通过这些工具的使用,开发者可以更高效地编写、调试和测试代码,提高软件质量和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值