admin 管理员组

文章数量: 887032


2024年1月13日发(作者:压力容器一二三类怎么区分)

《鸟哥的linux私房菜(基础篇)》学习笔记----------李晶

第一部分:linux的规划与安装

这里个人相对来说比较熟悉,对于如何安装linux书上有详细介绍。不过我一般用的都是ubuntu,这个发行版的安装并不是很复杂。

1. linux历史与简介:

计算机是由一堆硬件所组成的,操作系统是为了更加有效地控制和使用这些硬件资源。我们最熟悉的windows就是一种操作系统。但是linux是完全不同于windows的一种操作系统。众所皀知癿,Linux癿核心是由Linus Torvalds在1991年癿时候给他开发出来的。linux沿袭了unix的许多良好的特性,最重要的也是现今非常受欢迎的原因之一就是linux是开源的,并且在其之上的软件也是免费开源的,以此为基本最后发展出来了开源社区,对整个计算机科学的发展都有很重要的作用。

linux目前有着众多的发行版,Red Hat, SuSE,Ubuntu, Fedora, Debian。我个人使用的是ubuntu-10.10。

linux的发展路径:

Unix癿前身是由贝尔实验室(Bell lab.)癿Ken Thompson利用汇编语言写成的, 后来在1971-1973年间由Dennis Ritchie以C语言重新改写,才称为Unix。

1977年由Bill Joy开发出BSD (Berkeley Software Distribution),这些称为Unix-like的操作系统。

1984年由Andrew Tannenbaum制作出Minix操作系统,该系统可以提供原始码以及软件;

1984年由Richard Stallman提倡GNU计划,倡导自由软件(Free software), 强调其软件可以自由获得,修改,再发行。

1991年由芬兰大学生Linus Torvalds开发出Linux操作系统。Linux成功主要在于:

Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。

Linux本身就是个操作系统,其开发网站在,我们亦称Linux操作系统最核心的数据为内核Kernel。

目前Linux核心的发展分为两种版本,分别是稳定版本偶数版,如2.6.X,适合商业和家用环境使用; 一种是发展中版本如2.5.X 版,适合开发特殊功能的环境。

Linux distributions的组成有:『Linux Kernel + Free Software + Documentations(Tools) + 可完全安装的程序』所制成癿一套完整的系统。

2. 分区:

目前各种机器安装linux都比较方便了,特别是像我使用ubuntu10.10,基本上全是自动安装的,不过经常困惑我们的一般都是分区。如何分区才合理呢,对于初学者,分区可以直接只分一个根分区和交换(SWAP)分区。这里值得说一下的是磁盘只能分四个主分区。不过可以通过扩展分区来扩充,这样的话就是三个主分区和多个逻辑分区。SWAP分区的大小一般建议2倍于你的物理内存。将/home等数据量会较大的目录单独分区是一个非常不错的做法,具体分配多少容量,看你最终的数据量,估算后尽量多分。

3. 多重引导:

目前我们使用学习linux的最大的苦恼就是关于如何与windows共存的问题了。书中详

细介绍了如何安装centOS,附带很多截图,并且也描述了在已经装了windows的情况下如何设置多重引导。这个我也有过很多关于引导的经历。现在绝大多数的引导程序都会选择使用GRUB,这是一个交互式的引导程序。当我们的引导程序如果出现故障,或者是重装了windows的时候,我们将无法正常进入linux,如果使用的系统是ubuntu这个时候可以使用如下方法:

用ubuntu9.10以上(9.10以下的就是修复grub1(如不会,在我博客另一章里有介绍))的系统盘,启动光盘选择“试用而不安装”,进入后打开终端(注意命令间的空格,特别是mnt前面有空格)

1. sudo -i

2. mount /dev/sda6 /mnt 3. mount /dev/sdaX /mnt/boot这一步是有给 /boot 单独分区的命令,若没单独分区跳过这步

4. grub-install --root-directory=/mnt/ /dev/sda

5. 重启grub>提示符下输入 find /boot/grub/ (若boot单独分区则:find

/grub/)此命令会得到个结果:(hdx,y)

8. root (hdx,y)

9. kernel /boot/grub/ (boot单独分区则:kernel /grub/)

10. boot执行该命令后就转入到GRUB菜单,此时选择进入Ubuntu

11. 在ubuntu下启动终端

12. sudo grub-install /dev/sda此命令用作修复grub,

如果使用的是很早前的版本很类似并且简单很多的。

第二部分:linux文件,目录与文件系统格式

1. 管理文件权限:

Linux文件以及目录都会有所有者,而所有者又会处于某个用户组,这样导致了文件的权限有了对象。也就是三种对象,对于文件所有者,以及对于所有者所在的组,然后就是其他的人。权限分为三种,读,写,执行。使用ls –al命令可以查看当前目录下的文件的各种属性,如下所示。其中drwxr-xr-x中的rwx代表的就是权限。

$ ls -al

total 2593852

drwxr-xr-x 153 rd work 8192 Jan 6 11:59 .

drwxr-xr-x 26 root root 4096 Nov 26 2009 ..

-rw-r--r-- 1 rd work 59311 Nov 13 2008 0

-rw-r--r-- 1 rd work 595 Nov 13 2008

这里有10位,第一位代表文件类型,比如d代表目录,l代表链接,-代表普通文件。后面是连续的rwx,每三位分别对应于文件所有者,所有者组,其他人,其中rwx代表拥有读写执行权限,若相应的位上是’-‘代表不拥有相应权限。

如何改变权限,使用chgrp,chown,chmod分别可以改变文件的所有者,文件所有者组,文件的权限。

使用chmod有两种重要的方式。一是使用8进制数字模式rwxrwxrwx对应于777,rw-r—r—对应于644,例如chmod 777 file,另外一种是使用字符模式:

Chmod u+x 就是为文件增加执行权限。

特别值得说一下的是目录的权限,由于目录与普通文件有区别,因此这个权限的含义也是有很大的不同的。R 代表拥有对目录结构列表的读取权限,这样也就是说用vim可以直接打开目录,看到其中的一些文件名称,所以使用ls是可以列出其中的文件或目录。W 代表你可以改变目录的结构列表,这样一位这你拥有很多权利,比如建立新的文件或目录,删除文件或目录(忽略其本身的权限),重命名以及移动文件或目录。X 意味着你是否可以进入此目录将其作为当前的工作目录。

2. 管理文件以及目录:

“.”代表当前目录,“..”代表父目录,“~”代表家目录。

pwd 显示当前的工作目录。

cd 进入目录将该目录作为工作目录。

mkdir创建目录。

rmdir删除空目录。

ls 最常见的一个命令,列出目录下的文件的信息。

cp 复制一个文件或者目录。

rm 删除一个文件或目录。

mv 移动一个目录或文件,可以实现重命名。

cat 由第一行开始显示文件内容。

tac 从最后一行开始显示,可以看出tac是cat的倒写。

nl 显示的时候,输出行号。

more 分页的显示档案内容。

less 与more 类似,但是比 more 更好的是,他可以往前翻页。

head 查看头几行

tail 查看尾几行

od 以二进制的方式读取文件内容!

touch更改文件的相关属性,文件不存在时会创建文件。

环境变量$PATH保存着这些命令的目录,使得键入命令式不用输入目录,系统会自动去搜索。另外文件还有很多属性,比如suid等。

3. 管理磁盘与文件系统:

Linux下的标准文件系统为ext2,现在已经有ext3,ext4等,不过它所支持的文件系统就很多了。windows下的FAT16,FAT32,NTFS等等几乎所有的文件系统,linux都是可以很好的支持的。对于ext2,其中包含有超级块,block,还有inode等数据结构来保证文件系统的正常使用,个人觉得这个地方比较难理解,这些数据结构的结构和每个项的意义都是需要我们对操作系统有一定了理解能力的。

每个 filesystem 都有独立的 inode / block / superblock 等信息,这些文件系统都是鼓励的,必须要与目录树连接上,才能够被我们正常使用。这个链接就是mount(挂载)。Linux是通过VFS(Virtual Filesystem Switch)来统一管理系统所支持的各种文件系统的。

下面说一下基本的文件系统的操作:

df:列出文件系统的整体磁盘使用量。

du:计算文件系统的磁盘使用量(常用在计算目录所占容量)。

ln: 创建链接。有两种情况,1.软连接,就是常说的快捷方式,此种链接被删除或者操作是不会影响源文件的。2.硬链接,这种方式不能跨文件系统。由于是直接引用相同的inode信息,所以对其修改就会修改原文件,因为这个链接与原文件的地位相当。

fdisk:对磁盘进行分区

mkfs:对磁盘进行格式化处理

mount:挂载文件系统

fsck: 用来检查文件系统是否出错

开机自动挂载可以在/etc/fstab文件中设置,设置完成以后,一定记得使用mount –a选项来验证语法是否正确。

4. 文件的打包压缩:

Linux下的压缩指令实在是很多,因此产生了众多的压缩文件的后缀名:

gzip,bzip2目前是最流行的压缩程序。但是这些程序只能针对单个文件进行压缩,因此需要进行打包,由此tar完成了这个任务。

tar的基本用法如下:

其中下划线的字母代表了它的动作。

备份与还原:dump 和 restore

第三部分:shell

1. vim:

vim是一个强大的编辑器。与emacs是linux世界的两个使用人数最多的编辑器。由于这两个编辑器在绝大多数linux发行版中都会自己包含,linux0.11内核中就已经集成了简单的vi工具,因此我们必须至少掌握其中的一个。书中介绍的是VIM,我个人使用的也是VIM,不过还有很大一部分人使用得是Emacs。

VIM的使用与我们在windows下图形编辑器有很大的差别。它有三种模式,插入(编辑)模式,编辑模式,命令模式。下面是书中关于这三个模式的一个转换图。

在一般模式中hjkl这四个键控制光标移动。还有很多其他的控制键。

在命令模式中w是写入,q是退出,!是执行SHELL命令,/是搜索字符串

在编辑模式中就是可以直接编辑文本内容。ESC可以返回一般模式。

Vim拥有许多插件,支持各种语言的语法高亮,可以自动补全,还拥有多窗口,多标签等功能,总之使用好了vim对平常的管理,还有编写程序会有很大的帮助。

2. shell:

操作系统为用户解决了大多数的苦难,使得我们不用再和系统底层打交道,但是我们最终还必须和计算机有交流啊,因此操作系统提供了shell来处理我们与系统的交互。书上说的是操作系统将所有重要的资源以及函数等都封装在内核中,而我们能够通过shell输入指令来与其更好的沟通,是内核能够更加正确的操作硬件。

Shell有很多种类,例如bsh,csh,ksh。。。,我们经常使用是BASH,shell有以下的几种功能:命令编程;命令与文件名补全功能;命令别名设置功能;作业控刢、前景背景控刢;程序化脚本;通配符。

Shell变量:就是使用标识符来代替一些数据或者程序。Shell变量主要分为环境变量和自定义变量。env可以查看所有的环境变量。export可以将自定义变量转化为环境变量。set可以查看当前bash下的所有变量。特殊变量:

bash 癿配置文件主要分为 login shell 与 non-login shell。login shell 主要读取

/etc/profile 与 ~/.bash_profile, non-login shell 则仅读取 ~/.bashrc。

shell支持文件通配符:*代表0-无穷多个字符,?代表至少一个字符,[]代表[]中的字符一定有一个。

shell还有一个特征就是支持数据重定向。当我们从键盘输入从屏幕上显示的时候,输入设备的文件描述符是STDIN,输出的是STDOUT,错误输出是STDERR,假如我们想从文件in从读取数据,输出到out文件,将错误输出至err文件,那么我们可以使用如下方法:

$命令 out 2>err

>是覆盖方式输出,>>是追加方式输出。/dev/null这个文件是一个黑洞,写进去的东西就再也读不出来了。

shell命令有时候需要一行执行多个,可以直接用’;’隔开,就会执行完一条命令后继续执行下一条。还有两个分隔&& 与||,cmd1 && cmd2表示只有cmd1正确执行了cmd2才会执行。cmd1 || cmd2表示cmd1执行完成后返回值$?!=0,即是cmd1执行出错了,cmd2才会执行。

shell另外的一个强大之处在于shell管道 “|” 。cmd1 | cmd2 会将cmd1的标准输出当做cmd2的标准输入而传给cmd2,这样使得cmd2可以直接使用cmd1的执行结果。这样程序间的协作将会使的功能变得异常强大。常用管道命令:

cut:将一段信息的某一段给窃取出来。

grep:这个是很强大的一个行提取工具,使用正则表达式进行匹配,提取出那些与我们定的规则相匹配的行。

sort:对输出的结果进行排序。

wc:统计输出的结果有多少行。

uniq:去除重复行。

tee:将输出拷贝一份到文件中。

tr:替换删除字符。

3. 正则表达式:

书中主要是结合了几种工具对正则表达式的理解。先看一下正则表达式的基本元字符:

grep:

相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。grep常用的选项:

-c 只输出匹配行的计数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

sed:

sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。

调用sed有三种方式:在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行。

使用sed命令行格式为:

sed [选项] sed命令输入文件。

记住在命令行使用sed命令时,实际命令要加单引号。sed也允许加双引号。

使用sed脚本文件,格式为:

sed [选项] -f sed脚本文件

输入文件要使用第一行具有sed命令解释器的sed脚本文件,其格式为:

sed脚本文件[选项] 输入文件

sed定位文本的方式如下:

awk:

awk用来格式化报文或从一个大的文本文件中抽取数据包。

【备注】关于sed与awk的一些知识后续还会在《sed and awk》这本书的读书笔记中详细阐述。

4. shell编程:

shell scripts就是shell脚本程序。就是利用shell编写的脚本程序,该程序将shell命令利用一些控制结构组合在一起完成一些复杂的功能。关于这些命令,已经接触了很多了。shell使得linux的管理更加自动化,并且能够更好的追踪与管理系统的重要任务。

条件测试:对文件、字符串和数字使用test命令。对数字和字符串使用expr命令。字符串测试格式[ expr1 OP expr2 ]格外注意[]中前后会空格,OP是操作符例如=相等,!=不等,-n非空,-z空串。数值测试格式[ num1 OP num2 ],这里的OP和我们平常使用的符号有些不一样,导师和汇编语言中的很类似,大致有以下几类:-eq 数值相等;-ne 数值不相等;-gt 第一个数大于第二个数;-lt 第一个数小于第二个数;-le 第一个数小于等于第二个数;-ge 第一个数大于等于第二个数。

控制流结构:任何命令在退出的时候都会返回一个状态这个状态在shell里使用$?,它代表着命令是否执行成功,一般规定0是成功返回。使用这个变量就可以有效的进行条件判断。这里要写的控制流结构分为流控制与循环控制。分别包括if then else, case, while, for,until等语句结构。

if then else:If 条件1 如果条件1为真

Then 那么

命令1 执行命令1

elif 条件2 如果条件1不成立

then 那么

命令2 执行命令2

else 如果条件1,2均不成立

命令3 那么执行命令3

fi 完成

case:case 值i n

模式1 }

命令1

. . .

; ;

模式2)

命令2

. . .

;;

esac

while:while 命令

do

命令1

命令2

. . .

done

for:for 变量名in列表

do

命令1

命令2⋯

done

until:until 条件

命令1

. . .

done

其中until的条件测试是放在语句块尾,也就是说,循环至少会执行一次,这是与while的区别之处。

第四部分:用户管理

1. 用户账号及权限:

每个登入系统的用户,都会被分配两个ID,一个是用户ID(UID),另一个是组ID(GID),用来标识用户,在后续的权限管理中使用。用户的登入信息都会存放在/etc/passwd和/etc/group中。

增加和删除用户账号:useradd用来增加新用户;用户修改密码使用passwd命令,用户只能修改自己的密码,另外有chage与密码修改有关。当我们使用useradd添加用户的时候不小心输入错的数据或者是用户本身的数据有了变动,那么我们可以使用usermod命令来修改。最后可以使用userdel来删除与用户相关的数据,与用户相关的数据有:用户账号/密码相关参数:/etc/passwd, /etc/shadow使用者群组相关参数:/etc/group, /etc/gshadow用户个人数据: /home/username, /var/spool/mail/username等等。相应的groupadd,groupmod,groupdel也是完成相对应的与群组有关的功能。

ACL(ACCESS CONTROL LIST)权限控制:主要目的是提供传统的权限之外的较详细的权限的设定。ACL针对单一使用者,单一文件或目录来进行rwx的权限规范,对于需要特殊权限的使用情况非常有用。一旦确定系统的文件系统支持了ACL后,就可以使用getfacl,setfacl来进行ACL的一些设置了。

用户切换:一般情况下处于对安全的考虑我们应该尽量使用普通用户账号来操作使用系统,但是特殊其况下我们又需要root的权限去执行一些服务。因此我们会经常用到用户身份的切换。以su直接将身份变成 root 即可,但是这个指令即需要 root 的密码,也就是说,如果你要以 su 变成 root 的话,一般使用者就必须要有 root 的密码才行;以sudo 指令执行 root 的指令串,由亍 sudo 需要事先设定妥当,因此 sudo 需要输入用户自己的密码,

因此多人共同管理主机时, sudo 要比 su 好!至少 root 密码不会泄露!

查询用户的信息:w, who, last, lastlog,id finger等相关指令可以查询。write, mesg, wall等指令可以进行用户之间的信息传递。

2. 磁盘管理:

这一块后续会有更加详细的笔记。

3. crontab:

对作业的控制一般有两种at与cron,at一般使用在那些只需要执行一次的任务中,而cron就是用于那些循环的作业。每一个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过和这两个文件来禁止或允许用户拥有自己的crontab文件。crontab文件中每一个条目对应一个任务,每个条目有六个域分别是:分钟1-59,小时0-23,日1-31,月1-12,星期0-6,要运行的命令。条目格式为:

分< >时< >日< >月< >星期< >要运行的命令

其中<>表示的是空格。

crontab条目举例

这里有crontab文件条目的一些例子:

30 21* * * /apps/bin/

上面的例子表示每晚的21:30运行/apps/bin目录下的。

45 4 1,10,22 * * /apps/bin/

上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的。

10 1 * * 6,0 /bin/find -name "core" -exec rm {} ;

上面的例子表示每周六、周日的1:10运行一个find命令。

0,30 18-23 * * * /apps/bin/

上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的。

0 23 * * 6 /apps/bin/

上面的例子表示每星期六的11:00pm运行/apps/bin目录下的。

crontab命令的一般形式为:

Crontab [-u user] -e -l -r

其中:

-u 用户名。

-e 编辑crontab文件。

-l 列出crontab文件中的内容。

-r 删除crontab文件。

4. 作业管理以:

进程与程序:程序是静态的二进制文件。当程序被系统调入内存并分配执行空间开始运行后就生成了一个进程,一个程序可以有多个进程与之对应。说起进程就会涉及到进程的许多概念。由于进程中可以再产生进程,因此有了父进程,与子进程的概念。linux中所有的进程都是由init这个进程直接或者间接产生的,使用fork与exec系统调用产生一个进程。可以使用pstree看出系统中整个进程关系的结构图。

进程管理:ps静态查看进程的状态,top动态查看进程的状态,pstree使用图形查看进程的基本结构。

系统资源:free查看内存的使用情况,uname查看系统与内核相关的信息,uptime查看系统启动时间已经系统的工作负载,netstat查看当前网络的连接状态,dmesg分析内核产生的信息,vmstat检测系统资源的变化,

Linux是一个多任务的操作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。

作业的启动:

手工启动

由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样,下面分别介绍。

1. 前台启动

这或许是手工启动一个进程的最常用的方式。一般地,用户键入一个命令“ls –l”,这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑:我只启动了一个进程而已。但实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户在键入“ls –l”命令以后赶紧使用“ps –x”查看,却没有看到ls进程,也觉得很奇怪。其实这是因为ls这个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程:

find / -name *.jpg

然后再把该进程挂起,使用ps查看,就会看到一个find进程在里面。

2. 后台启动

直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

$ troff –me notes > note_form &

[1] 4513

jobs可以查看系统中的作业,fg,bg可以对作业进行前后台的切换,kill可以删除作业。

第五部分:系统管理员

1. 系统服务:

daemon进程是后台运行并且不依赖前端终端的进程。一般都是从开机开始就启动了,为系统提供关键的服务。一般分为两类,一类是独立启动的,另外一类是超级daemon,就是通过超级服务管理来统一的管理的。

常用的系统服务:

atd: 配置文件:/etc/,/etc/

预设端口:无

说明:一个自动化运行任务。

是否需要启动:通常需要启动。不过如果你一直使用cron,那么也可以不启动。

crond: 配置文件:/etc/crontab

预设端口:无

说明:用来执行例行性命令的守护程序。

是否需要启动:必须启动。

httpd: 配置文件:/etc/httpd/,/etc/sysconfig/httpd

预设端口:80,443

说明:提供www服务。

是否需要启动:安装www服务就启动它。

iptables: 配置文件:/etc/sysconfig/iptables

预设端口:无

说明:是Linux上有名的防火墙,如果连上Internet,一定要开启这个。

是否需要启动:连上Internet的主机务必启动。

network: 配置文件:

/etc/sysconfig/network

/etc/sysconfig/network-scripts/*

预设端口:无

说明:是用来管理网络的,所以当然要启动,不论你有没有网卡,这个服务也要启动,因为至少network会驱动lo这个网络介面。

是否需要启动:必须启动。

sshd: 配置文件:

OpenSSH服务器配置文件:/etc/ssh/sshd_config

OpenSSH客户端配置文件:/etc/ssh/ssh_config

预设端口:22

说明:Secure Shell Protocol,实现安全地远程登录管理主机。

是否需要启动:如果想实现远程管理,就需要启动。

syslog: 配置文件:/etc/

预设端口:无

说明:记录所有的系统行为。

是否需要启动:必须启动。

vsftpd: 配置文件:/etc/vsftpd/

预设端口:21,20

说明:FTP服务器软件。

是否需要启动:如果要提供FTP服务就启动。

xinetd 配置文件:/etc/

预设端口:不一定,要看设定值。

说明:xinetd作为inetd的后续版本,负责管理系统中不频繁使用的服务,这些服务程序在有请求时才由xinetd服务负责启动运行,一旦完成服务请求服务程序结束运行,这样可以有效地减少对系统资源的占用率。通常,xinetd管理的程序有telnet、ftp、rsh和rlogin。关闭 inetd也就关闭了这些由它管理的服务。

是否需要启动:必须启动。

另外还有很多服务。

2. 软件安装:

linux下的软件绝大多数属于开源软件,都是提供原代码的,因此各个不同的发行版都可以使用直接从源码安装软件。使用源码安装软件的时候由于系统的配置有很多差异,因此必须使用configure来检查配置,然后根据此生成makefile,这样的话用户就可以直接使用make程序来编译源代码生成可执行程序,这样软件就安装成功了。

由于各发行版还会自己附带一些简化安装过程的工具,因此安装软件也可以使用。一般情况下rpm,srpm,yum,apt这四套工具总会有一套是存在于你的系统中的,当然也有例外(要是这样就只能通过源码来安装了)。

3. x-window:

linux早期是没有图形界面的,由于在图形接口方面也有需要,因此开发了一套图形管理程序。这套程序就是X-Window-System,这个系统采用的CS模式,一般服务器成为X服务端,而我们所使用的界面都是一个客户端。因此这也注定linux的图形界面与windows NT是有本质区别的。这个系统分为X Server/X Client/Window Manager/Display Manager几个部分。在普通模式下我们可以利用startx来启动图形模式。

常用的桌面有GNOME和KDE。

4. 内核编译:

首先获得内核源代码,然后解压缩,下面是解压后的各目录的相关信息:

arch :与硬件平台有关的项目,大部分指的是 CPU 的类别例如 x86, x86_64, Xen 虚拟支持等;

block :区块数据通常指的是大量储存设备!还包括类似 ext3 等文件系统的支持。

crypto :核心所支持的加密技术,例如 md5 或者是 des 等等;

Documentation :与内核有关的一堆说明文件,若对内核有极大的兴趣,要瞧瞧这里!

drivers :一些硬件的驱动程序,例如显示适配器、网络卡、PCI 相关硬件等等;

firmware :一些旧硬件的微脚本 数据;

fs :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;

Include :一些可被调用的标头文件;

init :一些核心初始化的定义功能,包括挂载和 init 程序的调用等;

ipc :定义Linux 操作系统内各程序的进程间通信;

kernel :定义内核程序、内核状态、线程、程序的调度(schedule)、程序的信号 (signle)

lib :一些函数库;

mm :与内存单元有关的各项数据,包括 swap 与虚拟内存等;

net :与网络有关的各项协议数据,还有防火墙模块 (net/ipv4/netfilter/*) 等等;

security :包括 selinux 等在内的安全设置;

sound :与音效有关的各项模块;

virt :与虚拟化机器有关的信息,目前内核支持的是 KVM (Kernel base Virtual Machine)

新的内核修订 了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。

通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更

稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是

linux使用者的必要操作内容。

为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般

主要有下面考虑:

自己定制编译的内核运行更快(具有更少的代码)

系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)

不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞

开始内核编译:生成标准干净的内核树:

make mrproper

zcat /proc/ > .config

(这个.config 是内核配置文件,ls -la才能看到)

make oldconfig 把当前内核配置导入

make menuconfig 开始进入详细配置

接下来就茫茫多的内核选项,这个可以仔细的去参考一些相关的文档然后结合自己本身的意图后进行选择。

最后的参考原书,这里有些难理解的。

【注】:有些章节还未完全理解,后面将会更加深入的学习。


本文标签: 使用 文件 命令 进程 启动