首页  ·  知识 ·  基础设施
安装Linux所需要知道的基本知识
寒冬星空  http://www.cnblogs.com/wenanry/  数据中心  编辑:dezai  图片来源:网络
. 安装 Linux 所需要知道的基本知识 现在 Linux 发行版本的 CDROM 基本上都具备光盘启动的功能, 这意味这只需要购买光盘(或者从网上下载后自己

. 安装 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+w + 扩大当前水平窗口
ctrl+w - 缩小当前水平窗口
ctrl+w > 扩大当前垂直窗口
ctrl+w
以上4条命令也可以通过增加数字重复指令, 比如 ctrl+w 20 +
ctrl+w = 平分窗口
ctrl+w _ 最大化当前水平窗口
ctrl+w | 最大化当前垂直窗口
执行 :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-x 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 -v > /tmp/gcc.version
可以看到 gcc -v 的输出信息依旧出现在屏幕上, 而 /tmp/gcc.version 内容为空,
使用 2>&1 可以把标准错误重定向到标准输出中, 例如
gcc -v > /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 -b > 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.

 

本文作者:寒冬星空 来源:http://www.cnblogs.com/wenanry/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的