安装 Linux 所需要知道的基本知识

1 . 安装 Linux 所需要知道的基本知识

现在 Linux 发行版本的 CDROM 基本上都具备光盘启动的功能, 这意味这只需要购
买光盘(或者从网上下载后自己刻录), 然后把光盘插入光驱, 重新启动系统, 就可
以依照安装程序的提示一步步进行安装了. 但在安装之前, 最好还是先学习一下有
关 Linux 安装的基本知识.

在 Linux 环境下, PC 系统的 IDE 设备被标示为 
/ dev / hda,  / dev / hdb,  / dev / hdc,
/ dev / hdd 这四个设备文件;详细说,就是 IDE  0  通道上的主设备是  / dev / hda, 从
设备是 
/ dev / hdb, IDE  1  通道的主设备是  / dev / hdc, 从设备是  / dev / hdd.

以硬盘 
/ dev / hda 为例, IDE 硬盘最多可以创建  4  个物理分区, 物理分区所对应的
设备文件分别为 
/ dev / hda1,  / dev / hda2,  / dev / hda3,  / dev / hda4. IDE 硬盘还可以
把一个物理分区(且只能有一个)设置成扩展分区, 然后在扩展分区上创建逻辑分区,
逻辑分区所对应的设备文件为 
/ dev / hda5,  / dev / hda6, …

可以被操作系统使用的分区只能是非扩展分区的物理分区, 或者是逻辑分区. Linux
安装至少需要两个硬盘分区, 可以使用磁盘管理软件事先划分出来, 也可以在安装
过程中由安装程序创建新的分区.

分区必须被格式化成文件系统后才能被操作系统使用, 通常 Linux 所使用的文件系
统类型为 EXT2; 除了 Linux 所要安装的分区, Linux 还需要一个交换分区(swap)
才能更好的运行(类似于 MS 的交换文件的概念), 推荐交换分区的大小是物理内存
的1
~ 2倍, 如果系统的内存容量超大, 交换分区也可以设置得比物理内存小. Linux
在安装过程中, 会提供给用户格式化文件系统的操作界面.

不同于 MS 操作系统中的 C:, D: 盘符, UNIX 使用的是挂接点(mount point)组织
文件系统. 系统至少需要一个根文件系统(
/ ), 其他文件系统被挂接在根文件系统下
的任意一级目录节点上. 举个例子, 在系统中新添加一块硬盘 hdb, 硬盘上已经格
式化好了两个分区 hdb1 hdb2 可供 Linux 使用, 用户可以在 
/  目录下创建  / a 目
录, 把 
/ dev / hdb1 设备挂接到  / a 目录下, 然后可以在  / a 目录下创建  / a / b 目录,
再把 
/ dev / hdb2 设备挂接到  / a / b 目录下, 用户就可以在各自分区所对应的目录下
作文件操作了.

安装 Linux, 必须指定一个分区被挂接为根文件系统(
/ ).

Linux 缺省创建管理员账号 root, 使用 root 账号可以取得对操作系统的完全控制,
安装 Linux 的过程中会要求设定 root 的口令, 有的 Linux 发行版本的安装过程
中还会建议创建一个使用者账号供管理员日常使用.

显然系统管理员应该具备修改使用者口令的权限, 但是他又不应该能察看使用者口
令, 因此 Linux 系统的用户口令文件是以密文形式存储的, 密文的加密方式是一种
简单的 DES 加密, 最新的 Linux 发行版本都支持把口令文件以 MD5 方式加密, 以
获得更高强度的口令保护.

Linux 发行版本已经附带了很多软件包, 用户可以在安装过程中选择安装哪些包,
由于一般一个发行版本至少包括数百个软件包, 安装程序会把软件包分为若干个类
别以供选择, 一般来说网络开发人员需要选择和网络(Networking or Internet),
开发(Development)这两个类别, 如果希望使用图形化的操作界面, 可以选择 X
Windows(或者 GNOME, KDE)类别.

Linux 使用操作系统引导程序最终启动操作系统, 引导程序通常安装在硬盘的主引
导纪录(MBR)上, 系统启动后, BIOS 把控制权交给 MBR 上的引导程序, 引导程序可
以加载 MS 操作系统启动程序, 也可以加载 Linux 操作系统内核, 然后把控制权交
给所选择的操作系统运行. 常见的 Linux 引导程序为 LILO 和 GRUB, gnuchina
的苏哲开发的 SmartBootManager 也是一个相当不错的引导程序.

Linux 安装程序一般还会要求用户创建一张引导软盘以备需要时使用, 安装 Windows
时 MS 也会提出这个要求. 这个步骤好像实在是没有什么意义.

—————————————————————————
-
2 . Linux 编辑器 vi / vim

vi 是 UNIX 环境下的通用编辑器, 习惯使用 Notepad 的 Windows 用户最初使用
vi 可能会觉得很不顺手, 或者说很难用, 但是只要稍加练习, 就会发现对于普通的
文本编辑工作, vi 的确是一个使用起来非常舒服的编辑器.

由于 vi 是设计为终端用户使用的, 不要说鼠标和图形界面, 有的终端可能连移动
光标的方向键也没有, 为了照顾终端用户, vi 可以让用户手指始终不离开控制区,
就能完成编辑工作.

可以直接运行 vi , 或者附带文件名为参数运行 vi

vi 的编辑文件一共有三种状态: 命令模式, 编辑模式, 执行模式. 命令模式是 vi
的初始模式, 在此模式下, 任何终端输入(键盘输入), vi 都把之作为 vi 命令来解
释; 命令
/ 编辑模式, 以及命令 / 执行模式之间可以切换, 但不能从编辑模式切换到
执行模式, 或者从执行模式切换到编辑模式

对于初学者来说, 最容易犯的错误就是在编辑模式下试图输入命令, 当对着 vi 不
知所措的时候, 多按几下 ESC 回到命令模式, 然后再思考下一步操作

输入”:”(冒号)进入执行模式
:e test.txt 编辑”test.txt”这个文件
:w 将当前编辑文件保存
:w test.txt 将当前编辑文件以文件名”test.txt”保存
:q 退出当前编辑文件
:q
!  不存盘强制退出
:wq 保存当前文件并退出
:
% s / string1 / string2 / g 将全篇文章的string1替换为string2
:n1,n2s
/ string1 / string2 / g 将第n1行到第n2行的string1替换为string2

在命令模式下输入i, I, a, A, o, O, r, R 进入编辑模式, 在编辑模式下, 任意文
本字符的输入都将被添加到文件中
i 在当前位置插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行后另起新行插入
O 在当前行前另起新行插入
r 修改当前字符, 修改一个后返回到命令模式
R 修改当前字符, 直到输入 ESC 后才返回命令模式
在编辑模式下
ctrl
+ h 删除(或反修改)刚刚输入的字符
ctrl
+ w 删除(或反修改)刚刚输入的单词
ctrl
+ u 删除(或反修改)当前行首到当前光标处的内容

在命令模式下所使用的一些最常用的命令如下:
(光标移动命令)
h 向左移动光标
j 向下移动光标
k 向上移动光标
l 向右移动光标
w 向右移动一个单词
b 向左移动一个单词
0  到行首
^  到行首的第一个非空白字符
$ 到行尾
%  到匹配的括号, 包括 () [] {} 
nG 到第n行
G 到最后一行
ctrl
+ f 向下翻页
ctrl
+ b 向上翻页
ctrl
+ d 向下翻半页
ctrl
+ u 向上翻半页
(删除命令, 注意删除命令都会把所删除内容存入 vi 维护的一个剪贴板里去)
x 删除当前字符
X 删除前面一字符
d 删除指令, 通过附加光标命令比如h w $ 指定删除范围
dd 删除行
(拷贝命令, 将所选择内容拷贝入 vi 维护的剪贴板)
y 拷贝命令, 类似于 d 删除命令
yy 拷贝当前行
(粘贴命令)
p 在当前光标处粘贴
P 在当前光标前粘贴
(查找命令)
/ querystring 从当前光标处向后查找 querystring
? querystring 从当前光标处向前查找 querystring
n 继续查找
N 反向继续查找
(其他命令)
J 连接两行
~  大小写替换
. 重复编辑指令
u 撤销上一次指令(标准 vi 只能撤销一步指令操作)

在命令模式下可以通过在命令前输入数字 n 表示重复执行 n 次指令, 例如:
10dd 删除 
10  行
20l  向右移动  20  个字符
d40w 删除 
40  个单词

当用户开始使用数字重复执行指令的时候, 就应该能体会到 vi 的优秀特性了. 本
文档只是为了给初次接触 vi 的用户提供一个入门的参考, 关于 vi 的更详细的使
用命令介绍, 请查阅其他资料.

在 Linux 系统上可以使用 vi 的一个增强版本 vim. vim 比起 vi 来多了诸如语法
高亮, 多窗口, 程序自动缩进等特性, 对于软件开发来说使用 vim 更为方便了

vim 执行模式
:syntax on 使用语法高亮
:
set  smartindent 程序自动缩进

vim 的多窗口特性通过输入ctrl
+ w后, 再输入一个窗口操作指令完成
ctrl
+ w s 水平分隔窗口
ctrl
+ w v 垂直分隔窗口(vim版本6以后才支持此特性)
ctrl
+ w 附加光标命令 在多个窗口之间切换光标
ctrl
+ +  扩大当前水平窗口
ctrl
+ -  缩小当前水平窗口
ctrl
+ >  扩大当前垂直窗口
ctrl
+ w
以上4条命令也可以通过增加数字重复指令, 比如 ctrl
+ 20   +
ctrl
+ =  平分窗口
ctrl
+ w _ 最大化当前水平窗口
ctrl
+ |  最大化当前垂直窗口
执行 :q 或其他退出命令关闭当前窗口

—————————————————————————
-
3 . Linux 基本命令

UNIX 系统所使用的目录分隔符为”
/ ”, 和 MS 所使用的”\”不同, 比如系统的用户口
令文件的绝对路径是 
/ etc / passwd; . 和 .. 如同 MS 环境一样, 表示当前目录和
上级目录(准确的说, 这个特性是 MS 从 UNIX 这样的早期操作系统继承下来的)

Linux 提供了各种命令详细的手册(manual), 通过 man 命令来察看. man 手册分为
9  章, 每章提供了一类帮助:
第 
1  章: 可执行程序和 SHELL 命令
第 
2  章: 系统调用
第 
3  章: 库函数
第 
4  章: 特殊的文件(比如  / dev 目录下文件的说明)
第 
5  章: 文件的格式(比如  / etc / passwd)
第 
6  章: 游戏
第 
7  章: 宏
第 
8  章: 系统管理命令
第 
9  章: 内核相关
通常来说查阅手册不必关心所查内容属于多少章, 比如查阅 rm 命令的用法, 直接
运行
man rm
但是有的时候各章的索引有重复的, 比如 open 就分别在第 
1  章, 第  2  章出现,
printf 在第 
1  章, 第  3  章出现, 如果只用 man open 命令, 那么只能得到第  1
章关于 open 的说明, 要想查第 
2  章的内容, 必须指定章
man 
2  open
也可以查看所有关于 open 的内容:
man 
- a open

对于命令的帮助和函数使用, 不可能有比 manual 更好的资料了, 一定要会利用 man,
同时也确认系统上已经安装了 manpage 软件包.

本文档所提到的所有命令都只是一个简单的介绍, 可以查找 manual 了解各命令更
多的用法. 除了 man, 有的程序还带有一些简单的命令格式说明, 通常使用 –help
或者 
- h 参数就可以看到说明, 比如
ls –help

UNIX 下的文件操作基本命令如下:
mkdir (创建目录)
rmdir (删除一个空目录, 相当于 rm 
- r)
cp (文件拷贝)
rm (删除文件)
mv (文件移动
/ 改名)

UNIX 是一个多用户操作系统, 每个文件都有拥有者, 组(user, group)两个权限设
置; 针对拥有者, 组, 其他用户, 又分别有对应的读, 写, 可执行(r, w, x)三个属
性设置; 文件又分为常规文件, 链接文件, 字符设备文件等多种类型.

UNIX 系统执行程序, 并不需要程序文件有 .exe, .com 这样的扩展名, 只需要操作
用户拥有该文件可执行权限即可. 

使用 ls 命令浏览目录下文件. 可以输入
ls 
- l
来察看文件的类型, 权限各位, 所属用户, 属组, 最后一次被修改时间. 比如
drwxr
- xr - 2  nobody root  0  Oct  15   20 : 31  bin

表示 bin 所属用户为 nobody, 所属组为 root; 前面的 
10  个字符表示文件的类型
和权限属性, 第 
1  个字符说明它是一个目录文件, 后  9  个字符说明它可被所属用
户可读
/ / 执行, 可被所属组可读 / 执行, 可被其它用户可读 / 可执行.

使用 chown, chgrp 修改文件的所属用户和属组, 格式为
chown 用户名 文件名
chgrp 组名 文件名
也可以使用 chown 程序同时修改所属用户和属组
用户名.组名 文件名

使用 chmod 修改文件的权限位, 格式为
chmod u
+ x 文件名 (u + x 表示增加所属用户的可执行程序)
第一个参数的第一个字符修改所属用户, 属组, 还是其他用户对应的权限(u, g, o)
第二个参数使用 
+ -  表示增加或减少相应权限
第三个参数表示权限(r, w, x)

chmod 还支持数字格式的参数, 比如
chmod 
644  文件名 ( 644  表示设置成 rw - r–r–,  6 = 110 , 4 = 100 , 4 = 100 )

查看一个文件的信息(也就是把文件内容打印到标准输出来)有如下命令
cat (打印文件到标准输出)
more
/ less (根据终端能力分页显示文件)
head (显示文件的头部)
tail (显示文件的尾部)

wc 可以用来对文本文件计数, 返回文件的行数, 单词数, 字符数

find 命令用于查找文件, 比如列出所有文件
find .
find 的功能十分强大, 这里给出一些常见的用法, 其他还需要实际使用中体会
find . 
- name abc (查找所有文件名为 abc 的文件)
find . 
- size  + 10000k (查找所有大于  10  MB 的文件)
find . 
- name  * .sh  - exec chown root {} \;
(把后缀为 .sh 的文件设为 root 所有)

—————————————————————————
-
4 . SHELL

用户并不能直接和操作系统交互, 都是通过一个程序完成使用操作系统的, 这种程
序称之为 SHELL; UNIX 系统中的 SHELL 都是指一种特定的命令行界面, 用户通过
字符终端登录后进入这种界面, 而且 SHELL 都提供了诸如管道操作, 任务调度, 以
及一些简单的脚本编程能力. Linux 提供给用户缺省使用的 SHELL 为 bash, 它支
持命令补齐等更多的特性.

在 bash 中输入 export 或者 env 可以查看 SHELL 的环境变量, 比较重要的环境
变量有: PATH, PWD 等.

查看单独的环境变量可以运行
echo $变量名
比如运行
echo $PATH

可以通过运行
export 变量名
= 变量值
来修改或者新增环境变量. 比如运行
export PATH
=/ usr / local / bin: / bin: / usr / bin
或者运行
export PATH
=/ usr / local / bin:$PATH

$PWD 表示当前工作目录, 可以使用 cd 来改变当前工作目录. 用 pwd 查看当前工
作目录.

$PATH 表示程序执行的搜索路径. 注意 UNIX 只在 PATH 环境变量中搜索程序, 而
不搜索当前工作目录; 如果要运行当前目录下的程序 program, 如果当前工作目录
不在 PATH 环境变量中, 那么在 SHELL 中直接输入 program 是无效的, 必须使用
路径名, 比如 .
/ program 这样的相对路径.

SHELL 也都提供管道符 ‘
| ’ 和重定向符 ‘ > ‘, ‘ >> ’, ‘

管道的作用是把前一个程序的标准输出作为后一个程序的标准输入, 比如
find . 
|  more

重定向可以把标准文件输出重定向到另外一个文件中, 比如
find . 
>   / tmp / find.list
使用重定向后原来程序的标准输出就无法再在屏幕上显示了.

使用 ‘
> ’ 将会覆盖目标文件(如果它已经存在), 使用 ‘ >> ’ 可以追加
cat 
/ etc / passwd  >   / tmp / file.content
cat 
/ etc / group  >>   / tmp / file.content

有的程序输出的信息写到了标准错误(文件描述符是 
2 ), 比如执行
gcc 
- >   / tmp / gcc.version
可以看到 gcc 
- v 的输出信息依旧出现在屏幕上, 而  / tmp / gcc.version 内容为空,
使用 
2 >& 1  可以把标准错误重定向到标准输出中, 例如
gcc 
- >   / tmp / gcc.version  2 >& 1
注意 
2 >& 1  一定要放在  >   / tmp / gcc.version 之后

SHELL 支持在一行命令中执行多个程序, 比如
cat 
/ etc / passwd; cat  / etc / group
这相当于执行完 cat 
/ etc / passwd 后再跟着执行 cat  / etc / group

如果一个命令跨多行, 使用 \ 表示有续行信息, 比如
cat 
/ etc\
/ passwd

SHELL 提供了任务管理的功能, 比如一个 rm 命令可能要很长时间才能执行完, 这
样当前终端 SHELL 就一直被这个命令占用, 可以使用 
^ c 将这个进程终止; 或者使
用 
^ z 将进程挂起, 然后用 bg 命令把进程放到后台执行, 这个步骤也相当于直接
执行
rm 参数 … 
&
使用 
&  表示把执行进程放到后台. 使用 jobs 可以查看当前后台进程情况, 使用
fg 可以把后台任务放到前台终端执行

SHELL 提供了一定的编程能力, 通过编写 SHELL 脚本, 用户不用使用高级编程语言
就可以完成很多复杂的工作,以 bash 为例:

expr 可以完成普通的计算工作
expr 
12   -   13
expr 
12  \ *   13
这里使用 \ 转义, 否则 SHELL 把 
*  作为通配符解释

如果把程序的标准输出给变量赋值, 使用 “ 对(注意`是1左边键盘的字符). 比如:
abc
= `expr  12   +   13 `; echo $abc

SHELL 支持分支判断,
if  表达式
then

else

fi
表达式可以做字符串的比较,
[ string1 比较符 string2 ]
这里比较符是 
== != >

表达式也能做数字的比较,
test arg1 OP arg2
OP 是 
- eq,  - ne,  - lt,  - le,  - gt,  - ge 之一, (equal to, no equal to, less than,
less than or equal to, greater than, greater than or equal to)

SHELL 也支持循环, 比如使用 
for  循环把  / tmp 目录下所有文件制作备份:
for  i  in  `ls  / tmp`
do
echo “Copy backup file 
for  $i”
cp 
/ tmp / $i  / tmp / $i.bak
done

for  循环也可以是类 C 语法的循环, 或者类 C 的  while  循环, 比如循环  100  次:
i
= 0
while  test $i  - lt  100
do
echo $i
i
= `expr $i  +   1 `
done

推荐查看 bash 的 manual 以得到最完善的帮助, bash 的 manual 很长, 可以用
man bash 
|  col  - >  bash.man
把 manual 重定向到文本文件中仔细阅读

在 bash 中, 类似 vi 中编辑状态, 可以用 ctrl
- h, ctrl - w, ctrl - u 来编辑命令
行; bash 还支持 emacs 风格的 ctrl
- a, ctrl - e 跳到行头和行尾.

SHELL 脚本可以在 bash 中直接敲入运行, 也可以编辑成一个文件, 然后由 bash
解释执行, 通常脚本文件的后缀名为 .sh, 执行脚本文件通过运行:
bash 脚本文件名

也可以直接把脚本象一个程序那样运行. 首先把脚本设置成可执行属性, 然后在脚
本文件的开头加入新行:
#
!/ bin / bash
这一行指示 SHELL 使用 
/ bin / bash 来解释此脚本文件.

除了第一行外, SHELL 把脚本文件中以 ‘#’ 字符开头的行忽略, 因此一般用 ‘#’
作为脚本注释

—————————————————————————
-
5 . Linux 系统使用 / 管理

UNIX 系统的配置文件通常都位于 
/ etc 目录下

系统启动的时候读取 
/ etc / fstab 文件,以此配置文件调用 mount 安装存储设备。
mount 运行的主要参数如下
mount 设备名 挂接点 
- t 类型  - o 选项
比如希望使用 Windows 9x 的 C 盘(
/ dev / hda1),首先创建一个挂接点目录,比如
mkdir 
/ diskc
然后执行 mount 命令
mount 
/ dev / hda1  / diskc  - t vfat  - o codepage = 936 ,iocharset = cp936

注意后面的选项是为了可以在 Linux 下识别 VFAT 文件系统上的中文文件名,也可
以直接修改 
/ etc / fstab,让机器启动后直接挂接这个分区
/ dev / hda1  / diskc vfat codepage = 936 ,iocharset = cp936  0   0

使用 umount 命令卸载分区,比如:
umount 
/ dev / hda1

如果在 
/ etc / fstab 文件中已经存在配置,也可以简化 mount 的参数
mount 
/ dev / hda1

如果是安装 NTFS 格式的分区,使用如下命令
mount 
/ dev / hda1  / diskc  - t ntfs  - o iocharset = cp936

如果要在 ls 命令中显示中文文件名,还需要使用特殊的参数
ls –show
- control - char

安装光驱的制定 type 为 iso9660 即可,比如光驱的设备为 
/ dev / hdc
mount 
/ dev / hdc  / mnt / cdrom  - t iso9660

Linux 甚至也可以把光盘的 ISO 格式文件直接作为一个光盘虚拟的安装:
mount 
/ diskc / redhat.iso  / mnt / cdrom  - t iso9660  - o loop
这条命令就可以把在 C 盘上的 redhat.iso 安装到 
/ mnt / cdrom 文件,同样 Linux
下也可以这样安装软驱或者软盘的镜像文件,注意软驱的设备通常是 
/ dev / fd0,软
盘的文件系统类型通常是 msdos

查看分区空间占用情况使用 df 命令,也可以加上 
- k 参数以 KBytes 参数返回信息
df 
- k
查看目录空间占用情况使用 du 命令,比如
du 
- k

UNIX 有创建文件的多个实例的功能(链接),分为硬链接和软链接(符号链接). 硬链
接的实质就是创建一个新的文件,但新文件在文件系统上的指针指向到源文件的存
储区域
ln 源文件名 新文件名
硬链接是不能跨分区创建的;跨分区创建链接的方法是符号链接
ln 
- s 源文件名 新文件名
如果希望保持两个文件的内容总是一致的,就应该使用链接而不是用 cp 拷贝文件

Linux 系统的网络配置可能会由于不同的发布版本导致配置文件不一致,但是 DNS
配置文件一定 
/ etc / resolv.conf,格式通常是
domain 域名
nameserver DNS服务器名

Linux 下可以使用 netstat 命令查看网络连接情况, 比如运行
netstat 
- a
可以看到所有的网络连接,”State” 栏表示网络连接状态。比如 “LISTEN” 代表本
地正有服务器监听此端口,”ESTABLISHED” 代表已经有创建好的 TCP 连接。运行
netstat 
- nr
可以看到当前网络路由表

注意在 Windows 下也提供 netstat.exe 程序

UNIX 下进程操作基本命令是 ps 和 kill
查看所有进程信息
ps ax
这个命令返回所有进程的 PID, 终端号, 状态, 命令全称
使用 kill 向进程发送信号, 格式为
kill [
- signal] PID…
signal 这里取值为 
1  到  15 , 也可以是 HUP, STOP 这样标准的 POSIX 信号名称,
如果没有给定 
- signal 参数, 缺省向进程发送信号  15  (SIGTERM). 信号  9  (SIGKILL)
强制杀死进程

—————————————————————————
-
6 . grep / sed / awk,正则表达式

grep 程序用于在文本中搜索, 比如要在 Linux 启动日志 
/ var / log / dmesg 中搜索
所有包含 CPU 的行, 使用命令
grep CPU 
/ var / log / dmesg

grep 的用法大致上是
grep [options]… PATTEN [FILE]…

options 不是必须的, PATTEN 是一个正则表达式, FILE 是要搜索的文件名, 如果
FILE 参数没有给出, grep 从标准输入中搜索, 比如
grep CPU 
/ var / log / dmesg  |  grep cache

在 UNIX 文本处理中, 正则表达式(regular expressions)是一个很重要的概念, 这
里只介绍两个最常见的用法:

^ string ” 和 “ string $” 表示一行的开头和结尾, 试比较
grep “CPU” 
/ var / log / dmesg 和 grep “ ^ CPU”  / var / log / dmesg
grep “drive” 
/ var / log / dmesg 和 grep “drive$”  / var / log / dmesg

使用 [] 括起来的内容表示括入的字符任选其一, 试比较
grep “memory” 
/ var / log / dmesg
grep “Memory” 
/ var / log / dmesg
grep “[Mm]emory” 
/ var / log / dmesg

为了能够搜索到向 ‘
^ ’, ‘$’, ‘[’, ‘]’, ‘ ‘ 这样的特殊字符使用转义符 ‘\’
grep “\[” 
/ var / log / dmesg

sed 用于文本的查找和替换, sed, awk 等程序同 grep 一样, 或者从文件参数中读
入, 否则从标准输入中读入.

sed 的替换很类似与 vi 中查找替换的命令, 比如把 
/ var / log / dmesg 中所有 Intel
单词全部替换成 AMD 然后输出到屏幕上, 使用:
sed 
- e “s / Intel / AMD / g”  / var / log / dmesg
因为输出信息很多, 可以把输出定向到一个文件里面看得到的结果, 或者用:
grep “Intel” 
/ var / log / dmesg  |  sed  - e “s / Intel / AMD / g”

sed 替换的格式大致是:
sed 
- e “s / PATTEN / replacement / g” [FILE]…
如果使用
sed 
- e “s / PATTEN / replacement / ” [FILE]…
那么如果一行内有多个 PATTEN, 仅有第一个 PATTEN 被替换成 replacement

awk 提供了比 SHELL 更强的编程能力, 这里只介绍 awk 对行的处理, 例如
awk ‘{print $
1 ,$ 3 }’  / etc / fstab
可以看到 awk 按照空格(’ ‘)或者制表符(’\t’)把文本分成多个变量, 表示为 $
1
awk 这种特性经常用在日志文件的分析上, 由于日志文件的格式多是固定的, 使用
awk 可以方便的找出所需要的信息并再次加以分析.

下面的取得系统内存容量的脚本程序是本节内容的一个综合:
memory
= `grep “ ^ Memory”  / var / log / dmesg | sed  - e “s / [\ / k] /   / g” | awk ‘{print $ 3 }’`
memory
= `expr $memory  /   1024 `
echo “SYSTEM MEMORY: $memory MB”

—————————————————————————
-
7 . gcc / make

gcc 编译器 编译 C 程序分为这么几个步骤:
1 . 预处理(根据C源程序中的#预处理标志生成准备编译的C文件)
2 . 编译(产生汇编文件)
3 . 汇编(产生目标文件)
4 . 链接(生成可执行文件)

以下是 gcc 最基本的使用方法
1 . gcc  - c test.c
这个命令将把 test.c 编译成目标文件 test.o
2 . gcc  - o test test.c
- o 参数的意思是 output, 这条命令编译 test.c, 并产生可执行文件 test
3 . gcc  - o test test1.c test2.o
这条命令编译源程序 test1.c 后, 将所得到的目标代码和 test2.o 一起链接产
生可执行文件 test

当一个项目含有多个源程序时, 可以使用 make 管理编译项目. make 程序在当前路
径下寻找文件名为”Makefile”的文件作为项目配置文件进行编译管理. Makefile 的
编写必须严格遵照格式. 基本格式如下:
AAAA: BBBB CCCC DDDD …
COMMAND LINE 
1
COMMAND LINE 
2

意思是如果 AAAA 文件不存在, 或者 AAAA 的最后修改时间比 BBBB CCCC DDDD …
等其中文件之一旧的话, 则执行 COMMAND LINEs; 注意 COMMAND LINEs 行首必须是
一个制表符(Tab), 否则 make 无法正确解释. 以下是一个可能的例子

test: test1.o test2.o
gcc 
- o test test1.o test2.o
test1.o: test1.c test1.h test.h
gcc 
- c test1.c
test2.o: test2.c test2.h test.h
gcc 
- c test2.c

make 只执行 Makefile 文件中第一条依赖关系, 但是这种依赖关系可以嵌套. 比如
上面的例子中, 执行 make 将产生 test, test1.o, test2.o 三个文件; 如果用户
修改了 test1.c, 重新执行 make, 那么将只重新编译出 test1.o, 然后链接成新的
test 程序; 如果用户修改了 test.h, 那么将重新编译 test1.o, test2.o, 然后链
接出新的 test.

以下是 gcc 的一些常见参数说明
gcc 
- Iheaderdir ……
- Iheaderdir 参数指定了除了缺省值外, gcc 还将在 headerdir 目录下搜索头文件
头文件缺省搜索路径一般是 
/ usr / include 目录

gcc 
- Llibdir
- Llibdir 参数指定除了缺省值外, gcc 还将在 libdir 目录下搜索库文件
库文件缺省搜索路明一般是 
/ usr / lib 目录

gcc 
- lname
- lname 参数指定除了标准 C 库, 还需要 libname.so 或 libname.a 库文件链接.
一般来说, .so 后缀名是动态链接库, .a 后缀名是静态链接库; linux 缺省使用动
态链接.
—————————————————————————
-
8 . OpenSource Software

Linux 上的软件多是开源软件(OpenSource), 它们的源代码都可以从网上下载并自
由的使用(只需要遵守很少的许可条款就不必担心版权纠纷). 虽然 Linux 发行版都
已经附带编译好的大量软件, 但是了解开源软件是如何编译
/ 安装 / 运行也是很有必
要, 原因有二: 现在发行版所附带的软件可能不是最新的版本, 缺乏必要的特性或
安全保障, 因此必须升级到最新版本; 或者发行版附带的软件的编译配置并不令人
满意, 比如软件会被安装到多个不同的目录下, 造成管理上的困难. 对于开发人员
来说, 类似 apache, mysql, php 这样的软件最好自己手工编译安装

OpenSource 源代码的发布一般是以压缩包(.tar.gz)的方式供使用者下载的. 这里
澄清一个概念, 因为 UNIX 环境下文件有权限, 用户, 属组, 类型的差别, 所以压
缩目录必须把这些属性信息保留起来, 在 UNIX 环境下压缩目录首先把目录打包成
一个 tar 格式的文件, 然后使用压缩程序对 .tar 文件压缩.

下载的源代码文件名中通常还包括软件的版本号, 比如 mysql
- 3.23 . 42 .tar.gz 说
明它是 mysql 
3.23 . 42  版的源代码. 源代码的目录下通常会有 README, INSTALL
这两个文件, 在编译软件之前, 应该仔细阅读这两个文件, 以取得关于编译
/ 使用的
详细信息; 有的源代码还会包含 Doc, 或 Document 这样专门存放文档的目录. 下
面以 apache, mysql 为例子说明开源软件一般的安装方法.

****************************************************************************
*  关于软件源代码的压缩包
****************************************************************************
POSIX 标准的 UNIX 压缩
/ 解压缩程序是 compress / uncompress, 它们得到压缩文件
的后缀是 .Z, Linux 环境下通用的压缩
/ 解压缩程序是 gzip / gunzip, 它们得到压
缩文件的后缀是 .gz, 还有些文件是用 bzip2 来压缩的, 压缩文件后缀是 .bz2.

对于下载的源代码, 首先选择正确的解压缩程序解成 .tar 文件, 然后再用 tar 解
开为目录. 以下载的 PHP 源码 php
- 4.2 . 3 .tar.bz2 为例:
bzip2 
- d php - 4.2 . 3 .tar.bz2 (执行完后得到 php - 4.2 . 3 .tar)
tar xf php
- 4.2 . 3 .tar (执行完后得到目录 php - 4.2 . 3 )
如果使用 linux 系统, 也可以用一个命令执行全部过程
tar jxf php
- 4.2 . 3 .tar.bz2 (j 参数指示调用 bzip2 解压缩)

同样, 解压缩 mysql
- 3.23 . 53 .tar.gz 可以使用:
gunzip mysql
- 3.23 . 53 .tar.gz
tar xf mysql
- 3.23 . 53 .tar
或者使用
tar zxf mysql
- 3.23 . 53 .tar.gz (z 参数指示调用 gzip 解压缩)

使用 tar 打包目录的命令为
tar cf 目标文件名 目录名

关于 tar, gzip 等程序更详细的信息请参考 man 手册页

****************************************************************************
*  Apache 的编译(从 httpd.apache.org 下载)
****************************************************************************
OpenSource 软件一般都提供 configure 脚本供编译前的配置使用.
.
/ configure –help 这个命令可以得到 configure 脚本参数的详细列表. 最常用
的 configure 参数就是 –prefix
= DIR 了, 这个参数指示了将把软件安装在什么地
方, 比如我们希望把 apache 安装在 
/ root / apache 目录下, 执行
tar zxf apache_1.
3.27 .tar.gz
cd apache_1.
3.27
.
/ configure –prefix =/ root / apache
make (这一步是编译)
make install (这一步是安装)

假设 apache 安装在 
/ root / apache 目录下, apache 的配置文件是
/ root / apache / conf / httpd.conf, 如果需要对 apache 作一些设定, 修改这个文件
即可, 比如 apache 缺省安装完后使用的服务端口可能是 
8080 , 那么修改这个文件,
把 Port 对应的 
8080  改成  80  后启动 apache 就可以正常提供 WEB 服务了.

启动 apache 的命令是: 
/ root / apache / bin / apachectl start
终止 apache 的命令是: 
/ root / apache / bin / apachectl stop

cgi 程序放在 
/ root / apache / cgi - bin 目录下

****************************************************************************
*  Mysql 的编译(从 www.mysql.com 下载)
****************************************************************************
tar zxf mysql
- 3.23 . 53 .tar.gz
cd mysql
- 3.23 . 53
.
/ configure –prefix =/ root / mysql
make
make install
/ root / mysql / bin / mysql_install_db

启动 mysql 的命令是: 
/ root / mysql / bin / safe_mysqld –user = root  &
终止 mysql 的命令是: 
/ root / mysql / bin / mysqladmin shutdown

如果要开发连接 mysql 的 C 程序, 所需要的头文件在 
/ root / mysql / include / mysql
目录下, 所需要的库在 
/ root / mysql / lib / mysql 目录下, 编译的时候必须在 gcc
参数里面指定
gcc 
- I / root / mysql / include / mysql  - L / root / mysql / lib / mysql  - lmysqlclient ……

用户可以把 mysql 库所在的目录加入 
/ etc / ld.so.conf 文件, 运行  / sbin / ldconfig,
这样软件才能正确找到并加载 libmysqlclient.so 动态链接库

—————————————————————————
-
9 . Linux 包管理
没有 setup.exe, Linux 是使用包管理的方式处理软件的安装,配置,卸载以及软件
之间的依赖关系的. 软件被包装为一个文件, 由包管理程序分析此文件, 把软件安
装到正确的目录下. 最常用的包格式为 RPM, DEB 两种. 国内用的最多的还是 RPM.


你可能感兴趣的:(linux)