免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sam's
打印 上一主题 下一主题

开始学Linux了,我的学习笔记 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-11-08 13:56 |只看该作者
建议建立一个维基。你这样简单的写下来,以后发现前面的内容有错误怎么办?别人看了,想帮你充实内容呢?

论坛徽章:
0
22 [报告]
发表于 2005-11-08 19:48 |只看该作者
没有建过,请指点

论坛徽章:
0
23 [报告]
发表于 2005-11-08 20:36 |只看该作者
呵呵,好贴,关键是有自己的思路,比较清晰,建议加精华,呵呵

论坛徽章:
0
24 [报告]
发表于 2005-11-09 09:36 |只看该作者
下周打算学学基本的系统管理和用户管理,以下是我的大纲,

系统管理篇:
一、        再谈Boot Process
二、        再谈Filesystem
三、        Raid和LVM
四、        基本的网络配置
五、        虚拟控制台tty
六、        其他基本配置
七、        什么是shell
八、        常用的命令

用户管理篇:
一、        如何增加新用户
二、        用户管理基本知识
三、        用户环境的设置
四、        文件的权限与用户
五、        其他安全篇

论坛徽章:
0
25 [报告]
发表于 2005-11-10 13:15 |只看该作者
第三章:基本的系统管理和用户管理

学习Linux并不是只为了能够使用Linux,而是要能够管理它,甚至控制它,前面的两章基本都是些Linux的周边知识,这一章我们进入了怎么使用和管理Linux的篇章。

系统管理篇:
一、        再谈Boot Process
从第一章可以知道大致的启动过程,这里只提及的Linux部分,而不管bootloader部分。

1、bootloader加载内核
内核是个压缩文件,程序包含一个解压程序,内核取得控制后会自行解压。

2、建立initrd虚拟磁盘并加载各种驱动程序
如果支持虚拟磁盘的内核,会根据所传递的initrd的参数建立虚拟磁盘,initrd之中包括很多可以动态加载的驱动。我们前面说过,内核会执行/initrd/linuxrc程序来进行驱动加载。

3、内核加载完毕后,执行init程序
内核加载完毕之后,/也已经被mount了。接下来init是系统第一个被执行的程序,所以它的进程号pid始终会是1,所有的其他程序进程都是由init负责产生的,所以我们说init是所有进程的“鼻祖”了。init执行后会读取/etc/inittab文件,一般这时候都只有/被挂接了,如果/etc有自己的独立的文件系统或者是分区,我想大家都知道会发生什么事了。

Linux的run-level:
0:halt                                        关机
1:single user mode                        单用户模式
2:multi-user without Network        不支持网络的多用户模式
3:full multi-user mode                完整的多用户模式
4:unused                                保留
5:X                                        x window模式
6:reboot                                重新启动

/etc/inittab之中定义了开机之后的run-level以及其他有关启动的设定,在inittab之中有一个基本的语法:
[id]:[run-levels]:[action]:[process]

[id]是一个代号,最好不要超过4个字符,超过了大部分版本的解释器不支持。
[run-levles]是运行的级别,可以指定多个级别,比如2345表示在2,3,4,5级别都执行。
[action]init的行动,有以下几种:
respawn:
表示process如果terminate结束后会被重新启动,好比mingetty,用户logout之后会重新启动一个mingetty等待用户login。
wait:
这种process只会启动一次,并且init会等待process结束。
once:
这种process只会启动一次,init不会等待process结束。
boot:
启动时运行,run-levels会被忽略
bootwait:
同boot,而且init会等待process的结束,好像/etc/rc
off:
什么也不做
ondemand:
特定的run-level执行,可能是a,b,c之类。(没有试过,不知道怎么用。)
initdefault:
启动后要进入的run-level
sysinit:
启动时运行,会在boot和bootwait的process之前运行,忽略run-levels
powerwait
电源错误时候,init会等待这个process结束
powerfail
电源错误时候运行
powerokwait
电源恢复时候运行,init会等待这个process结束
powerfailnow
电源(UPS)即将没电时执行
ctrlaltdel:
顾名思义,CTRL+ALT+DEL的处理
kbrequest:
指定的键盘热键的处理,可以在自己的keymaps之中指定热键,指定后要loadkeys一下。

[process]
要执行的程序包括脚本,如果以+开始,表示init不会为process做utmp和wtmp的工作。

以下是我电脑之中的/etc/inittab:
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#

# 这里使用initdefault指定系统启动后进入的run-level

id:5:initdefault:


# 这里使用sysinit来指定系统初始化的脚本,可以指定为其他脚本

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit


# 每个run-level自己的初始化脚本

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# 处理 CTRL-ALT-DELETE

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now


# 处理powerfail事件

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.  
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# 处理powerokwait事件

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# 定义虚拟控制台tty,2-5都有6个text的控制台,用的是respawn,每次logout后init又会
# 产生一个新的mingetty进程

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# 如果run-level = 5,定义x window控制器

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

论坛徽章:
0
26 [报告]
发表于 2005-11-11 09:40 |只看该作者
4、init执行/etc/rc.d/rc.sysinit
在/etc/inittab之中sysinit定义的初始化脚本,可以使用不同的名称,主要做系统的初始化,大家可以打开看看自己的/etc/rc.d/rc.sysinit都作了些什么。主要有:
1〉        设置网络配置参数
读取/etc/sysconfig/network,并据此设置环境变量
在我的/etc/ sysconfig/network很简单,就是下面两个:
$cat /etc/sysconfig/network
   NETWORKING=yes
   HOSTNAME=test
2〉        接挂/proc
Init接着会接挂/proc,我们前面说过/proc是虚拟的文件系统,是我们访问内核
的一种途径。接着还会检查usb硬件,动态配置usb,挂接在/proc/usb/bus关于
usb,其实我们可以通过访问/dev下的设备文件直接访问,在/proc之中挂接的
最大好处是可以支持usb的动态配置,好像热插拔之类。
3〉        检查SELinux状态
设置SELinux,安全加强型的Linux。
4〉        提示输入I可以进入交互启动状态
这时候,会在控制台打印一句话,提示输入I可以进入交互模式启动。不过,好像选择了I,也不是马上反应的,屏幕上刷刷的还是一串串字符。
5〉        设定控制台
根据控制台的参数设置来设定控制台,好像字体之类。
6〉        初始化硬件,加载驱动

7〉        内核配置
会根据sysctl调整内核参数。
8〉        设定clock
设置clock
9〉        fsck和remount /
这时候会fsck检查/目录,如果没有错误的话,init会把readonly的/重新moount成为read
write模式。
10〉        umount虚拟内存磁盘/initrd
11〉        Quota
需要内核的支持,如果内核支持的话,这时候根据配置会设定quota
12〉        设定RAID和LVM
如果有raid和lvm这时候会设定这两样
13〉        清除/tmp
init会每次启动都将/tmp内的文件清空,所以不要把重要文件放在这个目录。
14〉        启动swap分区或者文件
15〉        将信息写入/vat/log/dmesg
最后会把屏幕上的信息写入dmesg,可以使用dmesg命令访问或者直接打开文件看。

6、init然后根据run-level执行/etc/rc.d的脚本
这是些wait的process,init会等待进程结束后才会继续其他。大部分的服务会在这个时候启动。系统支持的服务的脚本会在/etc/rc.d/init.d,这种脚本一般都支持三种参数,start,stop和restart。其他的在/etc/rc.d/rcX.d内的脚本基本都是会调用/etc/rc.d/init.d内的脚本来启动或者停止服务。另外使用chkconfig也可以配置服务。chkconfig –list可以列出这些服务和预设的启动状态。

7、init执行/etc/rc.d/rc.local脚本
init还会执行/etc/rc.d/rc.local脚本,好像dos的autoexec.bat文件。可以自己加入些命令,不过这是系统级的动作,对于整个Linux系统起作用,记住我们的Linux可是真正的多用户操作系统。如果想要用户级的初始化,请参照用户设定篇。

8、init初始化控制台,等待用户登陆
Init最后会启动mingetty的虚拟控制台,当然也可以配置其他的控制台。如果用户输入了用户名之后,mingetty就会把用户名传递给login程序,当然login会提示用户输入密码之类了,密码正确了,就会进入shell。

论坛徽章:
0
27 [报告]
发表于 2005-11-11 10:03 |只看该作者
支持,看来我也应该写一个学习笔记才行。

论坛徽章:
0
28 [报告]
发表于 2005-11-11 14:20 |只看该作者
二.        单用户模式
run-level如果等于1的话,就会进入单用户模式了。一般进入单用户模式不用输入密码,所以,如果忘记root密码的话,我们可以进入单用户模式,然后用passwd来更改。
单用户模式没有网络,那些在chkconfig之中看到的服务也没有启动,进入/etc/rc.d/rc1.d,用ls命令看看里面有些什么文件:
[attach]a01[/attach]
我们会发现里面只有两个S开头的文件,其他全部是K开头的文件。S是代表start,而K代表kill。

在Bootloader之中我们有讲到传递给内核的参数有single,会进入单用户模式,那么那种单用户模式与run-level=1的单用户模式有没有什么不同么?
另外我们好可以在bootloader传递init=/bin/bash给内核,与单用户模式又有什么不同呢。

第二个问题,还好理解,就是让内核把bash当成init来启动所以init所作的事情是一件也不会做的,内核加载完毕后就会将控制交给shell了。启动信息简短了很多:
[attach]a02[/attach]
这时候所加载的/应该还只是内核所加载的/,一般我们是以readonly加载的(还记得第一章的那些参数吧),所以在这种环境下的所有文件也是readonly的。当然如果我们想更改文件内容的话,是可以remount根目录/。
先看看这时候系统都mount了些什么:
$mount
/dev/mapper/VolGroup00 on / type ext3 (rw)
None on /proc type proc (rw)
我不太明白结果第一行的(rw)是不是read write的含义,不过这时候的/的确是readonly的。
重新mount根目录/成read write:
$mount –o remount rw /
一切OK,这时候我们可以编辑我们所需要的文件了。不过记住init和shell的功能是大不相同的,这只是一个很不完整的Linux环境,很多东西都不能玩。

那么bootloader的参数single与run-level=1呢,我们假设/etc/inittab因为种种原因,就丢失了,重新启动后,init得到控制后找不到/etc/inittab,于是要求输入runlevel,可以无论你输入什么1-5,都会死机的,因为init根本不知道要做什么。
[attach]a03[/attach]
怎么办呢?
试试传递参数single给内核的方法(不会忘了吧),我们会发现虽然init找不到/etc/inittab,但是却把控制交到了shell的手上。
[attach]a04[/attach]
真的是很有趣。

[ 本帖最后由 sam's 于 2005-11-11 14:27 编辑 ]

01.GIF (30.74 KB, 下载次数: 397)

01.GIF

02.GIF (22.38 KB, 下载次数: 207)

02.GIF

03.GIF (23.09 KB, 下载次数: 202)

03.GIF

04.GIF (22.79 KB, 下载次数: 205)

04.GIF

论坛徽章:
0
29 [报告]
发表于 2005-11-11 20:44 |只看该作者
三、        run-level的切换
我们知道了Linux下的各个run-level,我们也知道可以通过设定/etc/inittab的initdefault来设置机器每次启动进入的run-level。其实Linux可以直接从一个run-level到另外一个run-level而不用重新启动。这就是命令telinit了:
$telinit run-level

我们前面提到了/etc/rc.d/init.d,我们知道所有的启动初始化脚本其实都放在这个位置,而其他的每个run-level目录底下/etc/rc.d/rcX.d的S和K文件都是/etc/rc.d/init.d的链接,下面这张图是我的电脑上的/etc/rc.d/rc3.d的ls –l 的结果:

机器启动的时候,init运行run-lelve=0的S教本,再运行initdefault设置的run-level的S开头相关脚本,同样相反,系统关机的时候,会执行相关K开头的脚本。

init处理从低到高run-level时,比较两个run-level的S和K文件不同之处,按照数字递增的运行在低run-level不存在的以S开头的脚本,按照数字递减的运行在高run-level不存在的以K开头的脚本。
而处理从高到低的时候,比较两个run-level的S和K文件不同之处,按照数字递减的运行在低run-level不存在的以K开头的脚本,按照数字递增的运行在高run-level不存在的以S开头的脚本。
不会关闭两个run-level都存在的服务。

使用runlevel命令可以知道现在的run-level。

[ 本帖最后由 sam's 于 2005-11-11 21:24 编辑 ]

01.GIF (38.97 KB, 下载次数: 186)

01.GIF
unregister 该用户已被删除
30 [报告]
发表于 2005-11-12 04:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP