Ubuntu 9.10下加入自启动程序
>>
Shell中exec、source和shell script的区别
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。
bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。
在说明exe和source的区别之前,先说明一下fork的概念。
fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。
环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。
shell script:
有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。
新产生一个shell然后再执行scripts的方法是在scripts文件开头加入以下语句
#!/bin/sh
一般的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。
另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前shell下执行一切命令。
source:
source命令即点(.)命令。
在bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from filename in the current shell environment and ..."。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。
exec:
在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is created."这样的解释,这就是说exec命令不产生新的子进程。那么exec与source的区别是什么呢?
exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。
用shc 加密shell
Shell 在Linux 系统中的强大有目共睹,每个管理员都是自己写的一组shell 来简化自己的工作,有时我们会把自己写的shell 让别人用,但这时有一个麻烦的地方,就是shell 里包含一些敏感信息如帐号密码等,这时我们需要一个工具–shc 把我们的shell 加密。
shc是一个脚本编译工具, 使用RC4加密算法, 它能够把shell程序转换成二进制可执行文件(支持静态链接和动态链接)。
shc主页:
http://www.datsi.fi.upm.es/%7Efrosal/
安装shc
大部分的系统都在自己的源中提供shc 的二进制安装包,如果不幸你的系统中没有则可以去软件主页下载源码包自己安装。
源码安装:
wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz
tar vxf shc-3.8.6.tgz
cd shc-3.8.6
make test
make strings
make install
shc的使用方法:
shc -v -f myshell.sh #-f 为要加密的shell
运行后会生成两个文件: myshell.sh.x 和 myshell.sh.x.c
shc -r -f.x 为可执行的二进制文件,myshell.sh.x.c为该文件的C原文件。
GRUB 2 中文指南
在这份指南中,GRUB 2 版本为 1.96 或更新版本。传统 GRUB (0.97 版) 将以 GRUB 称之。
GRUB 2 与原本的 GRUB 相比之下主要增加的功能包含:
l 支持脚本(Scripting),包括条件语法和函数
l 动态加载模块
l 救援模式
l 可定制菜单
l 主题
l 支持图形化启动菜单以及增强的引导画面功能
l 可直接由硬盘中的启动光盘映像文件来启动
l 新的配置文件结构
l 支持非 x86 平台(例如 PowerPC)
l 全面支持 UUID(不只在 Ubuntu)
l openSUSE 和 Fedora 尚未采用 GRUB 2
PDF全文下载:
[file]attachment/200911/grub2.rar[/file]
Ubuntu 9.04 Beta安装Adobe Reader 9.1
2、执行后会安装至/opt/Adobe/Reader9目录
3、下载中文简体字型:FontPack910_chs_i486-linux.tar.bz2
4、下载中文繁体字型:FontPack910_cht_i486-linux.tar.bz2
5、分别解开字型压缩档至CHSKIT及CHTKIT目录: tar jxvf压缩档
6、执行CHSKIT及CHTKIT目录中的INSTALL: sudo CHTKIT/INSTALL>>>>>>>>>>>>>>>>
Ubuntu9.10下安装Thinkpad T400 R29无线网卡
默认ubuntu 9.10没有此无线网卡的驱动,需要自己下载编译安装,各位可从本站下载:
[file]attachment/200911/rtl8192se_linux_2.6.0010.1012.2009.tar.gz[/file]
下载后,解压编译安装,重启即可:
#tar zxvf rtlxxxxxxxxx.tar.gz
#cd rtl*
#make
#make install
鱼漂提醒你,需要进入到解压的路径当中后再make & make install。
>>>>>>>>>>>>>
[转]手工释放linux内存——/proc/sys/vm/drop_caches
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题。
一、通常情况
先来说说free命令:
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511
其中:
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached。
有了这个基础后,可以得知,我现在used为163MB,free为86MB,buffer和cached分别为10MB,94MB。
那么我们来看看,如果我执行复制文件,内存会发生什么变化.
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511
在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐,都被cached吃掉了。别紧张,这是为了提高文件读取效率的做法。
为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
那么有人说过段时间,linux会自动释放掉所用的内存。等待一段时间后,我们使用free再来试试,看看是否有释放?
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511
似乎没有任何变化。(实际情况下,内存的管理还与Swap有关)
那么我能否手动释放掉这些内存呢?回答是可以的!
二、手动释放缓存
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:
0
首先,/proc/sys/vm/drop_caches的值,默认为0。
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,会发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB。那么有效的释放了buffer和cache。
◎ 有关/proc/sys/vm/drop_caches的用法在下面进行了说明
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync first.
三、我的意见
上述文章就长期以来很多用户对Linux内存管理方面的疑问,给出了一个比较“直观”的回复,我更觉得有点像是核心开发小组的妥协。
对于是否需要使用这个值,或向用户提及这个值,我是有保留意见的:
2、若对于系统内存是否够用的观察,我还是原意去看swap的使用率和si/so两个值的大小;
用户常见的疑问是,为什么free这么小,是否关闭应用后内存没有释放?
但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:
这才是系统可用的内存大小。
实际项目中告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。
相反,如果在这个时候,我们告诉用户,修改系统的一个值,“可以”释放内存,free就大了。用户会怎么想?不会觉得操作系统“有问题”吗?
所以说,我觉得既然核心是可以快速清空buffer或cache,也不难做到(这从上面的操作中可以明显看到),但核心并没有这样做(默认值是0),我们就不应该随便去改变它。
一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。
当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。
我觉得,排除内存不足的情况外,除非是在软件开发阶段,需要临时清掉buffer,以判断应用的内存使用情况;或应用已经不再提供支持,即使应用对内存的时候确实有问题,而且无法避免的情况下,才考虑定时清空buffer。(可惜,这样的应用通常都是运行在老的操作系统版本上,上面的操作也解决不了)。O(∩_∩)O哈哈~ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Vim的编码及字体问题详解
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
* encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会 自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).
* fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
* fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
* termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term 的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。
1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。
3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。
以下是我的 .vimrc(见附件) 中关于字符编码方式设置的内容,这个设置比较有弹性,可以根据系统中的环境变量 $LANG (当然,Windows 中的写法是 %LANG%) 的值来自动设置合适的字符编码方式。此时,推荐设置 %LANG% = zh_CN.UTF-8,可以通过后面的 Windows 注册表脚本文件来方便的做到。
注1: 事实上,Vim 的探测准确度并不高,尤其是在 encoding 没有设置为 utf-8 时。因此强烈建议将 encoding 设置为 utf-8,虽然如果你想 Vim 显示中文菜单和提示消息的话这样会带来另一个小问题。
注2: 在 GNU 的 FTP 上可以下载到 iconv 的 Win32 版(http://mirrors.kernel.org/gnu/libiconv/libiconv-1.9.1.bin.woe32.zip),不推荐去GnuWin32(http://gnuwin32.sourceforge.net/) 下载 libiconv,因为那个版本旧一些,并且需要自己改名 dll 文件。
注3: 查看帮助 :h iconv-dynamic
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ulimit值(Linux文件句柄数量)在Centos5(RHEL5)中的调整
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量.
查看方法
我们可以用ulimit -a来查看所有限制值
[root@centos5 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<
其中 "open files (-n) 1024 "是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目).这个值可用ulimit命令来修改,但ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效.
系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.
修改方法
若要令修改ulimits的数值永久生效,则必须修改配置文档,可以给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还有一个方法是修改/etc/sysctl.conf .我修改了,测试过,但对用户的ulimits -a 是不会改变的。只是/proc/sys/fs/file-max的值变了.(我给命令放到rc.local中失败)
我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如:
* soft nofile 32768
* hard nofile 65536
也可以直接运行下面这个shell。直接copy到你的终端中运行就好了.
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
就可以将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.
生效
修改完重新登录就可以见到.(我的系统是Centos5.1.修改了,重新登录后就立刻生效.可以用ulimit -a 查看确认.)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Slackware Linux启动过程详解
Joe Brockmeier 研究了 Slackware Linux init 进程。他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。
Linux 用户正日益成熟,这意味着他们想要将系统配置成执行他们希望完成的任务。但目前 Linux 发行版通常都附带了自动配置的设备和启动服务,如 Sendmail 或 Apache。这些发行版没有考虑到的是毫不更改其缺省设置来运行服务,如 Apache -- 用户毫不知情 -- 会让黑客和利用脚本捣乱的人趁虚而入。而且这会用完本可以更好利用的系统资源 -- 比如可以用于 Quake 或您喜欢的编译器的更多处理器时间。由于缺少控制是件“糟糕的事”,因此让我们看一下 Linux 系统引导时在 init 进程期间,在所涉及的各个运行级别上都发生了什么,以及如何在系统运行时定制系统或在运行级别之间切换。
我们的示例使用 x86 平台上的 Slackware Linux 发行版(请参阅本文后面的 参考资料 )。大多数信息可用于其它 Linux 发行版,但在细节处会略有不同。尤其是,与其说 Slackware 的 init 结构类似于 System V 结构,还不如说它更类似于 BSD UNIX 结构,尽管 Slackware 的最新发行版中的程序做了一些让步,它们要将服务添加到启动,但期望这些服务是 System V 目录结构。(请参阅侧栏, “BSD 和系统 V init 脚本之间的差异”。)
所有进程的父代
当 Linux 机器引导时,究竟会发生什么?在计算机的 BIOS 完成其任务后,系统会读取硬盘(或软盘,或 CD-ROM,或 Zip 驱动器……Linux 是非常灵活的)的第一位,并会遇到引导装入程序。虽然 GRUB 和其它装入程序也逐渐变得流行,但通常这就是 Linux 装入程序 (LInux LOader),一般称作 LILO。
然后 LILO 将 Linux 内核装入内存,并开始展示它的魔力。Linux 内核初始化了诸如 SCSI 卡之类的设备,以及其它内核中内置的硬件设备。然后内核运行 init,它是除内核之外在系统运行的第一个进程。如果执行 ps ax | grep 1 ,就会看到 init 的进程 ID (PID) 是 1。
装入 init 之后,它会读取 inittab 以查看下一步做什么。 inittab 告诉 init 要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件。
运行级别
运行级别是由系统上的所有服务在某个给定时间定义的(基本上是操作方式)。Linux 可以有几种操作方式:单用户方式、单用户联网方式、多用户方式、始于 X 窗口的多用户方式,等等。这部分将要说明运行级别的概念、Slackware 上有哪些运行级别,已经它们被叫作什么。
运行级别由数字或字母标明。可惜,不是所有的 Linux 发行版在各个运行级别的称呼问题上都能达成共识。在某些发行版中,运行级别 3 是使用 X 窗口登录的多用户方式。而其它的,如 Slackware,将运行级别 3 指定成使用控制台登录的多用户方式。
据我所知,所有 Linux 发行版都认同运行级别 0 是“停机”、运行级别 1 或 "S" 是单用户方式(稍后将详细说明),运行级别 6 是重新引导系统。Slackware 的运行级别如下:
- 运行级别 0 = 系统停机
- 运行级别 1 = 单用户方式,主要用于维护
- 运行级别 2 = 从不使用
- 运行级别 3 = 使用控制台登录的多用户方式
- 运行级别 4 = 使用 X11 会话管理器的多用户方式 (XDM, GDM, KDM)
- 运行级别 5 = 从不使用
- 运行级别 6 = 重新引导
- 运行级别 S 或 s = 单用户方式
这里没有记录运行级别 7 到 9,在理论上,它们适用于在需要时定制运行级别。但我还没有亲自尝试过创建一个。
运行级别配置
如果您使用的不是 Slackware Linux,那么配置文件的结构与我谈到的结构会大不相同。除了 inittab 文件,所有 Slackware 的启动配置文件都在 /etc/rc.d/ 目录中。
缺省情况下,目录中有 5 个运行级别 rc.* 脚本,如果将 symlink 从 rc.0 加到 rc.6 ,那么可有 6 个。
运行级别 init 脚本是:
- rc.0 = rc.0 文件是到 rc.6 的 symlink
- rc.M = 多用户运行级别 2、3 和 5 的 init 脚本
- rc.K = “管理”运行级别,单用户方式
- rc.S = 系统初始化脚本
- rc.4 = 运行级别 4(自动引导入所选择的 X 会话管理器)的 init 脚本
- rc.6 = 重新引导或停止系统时由 init 执行的脚本
目录中的其余 rc.* 文件用于启动诸如联网、内核模块、PCMCIA、Samba、Apache、Netatalk 和 GPM 的系统服务。如果想要使某个服务(如 Apache)完全不能在任何运行级别上使用,请使用 chmod 将文件的许可权从可执行更改成不可执行。除去该文件也可以到达相同效果,但我不推荐这种做法。也许在以后某个日子您会发现要重新启用服务,但却不知道怎样做。
rc.inet1 脚本负责启动基本联网服务,如设置主机名(IP 和 DHCP)。 rc.inet2 脚本负责启动所有其它 INET 服务,如 NFS、包转发、ssh 服务器和其它联网守护程序。
所有 Slackware /etc/rc.d/rc.* 文件都是 Bash shell 脚本,都可以进行手工编辑。可是对于联网,您可能应该先尝试 netconfig 实用程序。虽然需要手工编辑 /etc/resolv.conf 来添加多个名称服务器,但是它也许能处理您想要执行的所有操作,而且它非常易于使用。
如果您是 Linux 初学者并且要修改系统,那么也许应该确保您有引导软盘,并且应该复制您所有想要编辑的 rc.* 文件。如果拿不定主意,我通常会将文件保存为 rc.*.old ,使它们变成不可执行文件。,使它们变成不可执行文件。
使用运行的系统
好,现在系统已经运行,然而您需要在单用户方式中执行一些操作 -- 该怎么做呢?本文的下一部分将说明如何在系统运行时更改运行级别,而不是通过重新引导来更改运行级别,而且还说明了为什么执行此操作以及何时执行。
telinit 命令
在运行的系统上更改运行级别
telinit 命令可以用于更改运行级别。当以 root 身份执行 telinit S (或者想要更改的任意运行级别)时,它会更改运行级别,关闭前一个运行级别,然后启动下一个。
某种程度上您正在重新引导系统的一部分。然而,关闭与重新启动服务的能力正是 Linux 最可爱的品质之一。想要更改机器的 IP 地址吗?没问题,只要进行一些更改,然后重新启动联网服务就行了。只要一切配置正确,备份和运行是如此迅速,很难分辩是否做过更改。在其它即使更改了桌面上的墙纸都必须重新引导的操作系统上,尝试一下执行此操作 :)
确实需要重新引导或彻底关闭 Linux 机器的唯一情况是如果正在添加或更改硬件,假设您正在使用不能热插拔的设备,或者已经中断且需要使机器脱机以修复损坏。与其它操作系统不同,对于那些不经过重新引导就无法解决问题的产品系统,我从来没有看到过重新引导解决了这些系统上的问题。我曾设法利用诸如 hdparm 的命令来挂起非生产性机器,我希望这种情况发生。
假设您想要执行一些系统维护,而这些系统维护要求系统处于单用户方式。例如,使用 hdparm 调整硬盘。第一步是 su (切换)到 root 用户。
然后执行 telinit 命令使系统进入单用户方式:
telinit S -t 60 |
自变量 "-t" 是可选的;它告诉 telinit 在真正切换到单用户方式之前等待 60 秒。然而,只要执行了该命令,登录到机器的任何人都会看到在控制台上出现一个警告,指出系统将切换运行级别或将在 60 秒内停机。
到了 60 秒时,init 会关闭单用户方式中不使用的进程,并使系统进入单用户方式。然后,将提示您输入 root 用户密码以执行系统维护。
系统进入单用户方式所使用的进程略有不同。缺省情况下,单用户方式要求 init 在控制台上调用 sulogin 命令,并要求在单用户方式中使用 root 登录。
系统进入单用户方式后,应该会看到如下的消息:
Give root password for system maintenance (or type Control-D for normal startup): |
执行了维护之后,可以执行以下命令来使系统回到以前的运行级别:
telinit 3 |
此命令告诉系统重新进入多用户运行级别。在此命令中可以用 "2" 或 "4" 来代替 "3"。在 Slackware 系统上,运行级别 4 将使您进入使用 X 窗口显示管理器之一的多用户方式,因此您将直接登录到 X 窗口。
如果在拥有串行电缆的串行上挂了 UPS,那么就可以让 UPS 在断电的情况下向系统发送一个信号。如果您的产品级系统有一个很大的文件系统,那么这是非常有用的。我曾看到过当没有彻底卸载 100GB RAID ext2 文件系统时(完成 fsck 需要大约 4 小时)发生了什么情况。另一方面,正确配置的 UPS 可以提醒系统断电情况,并向 telinit/init 发送 SIGPWR 信号,这会使 init 根据其配置情况将系统切换到单用户方式或者完全关闭系统。
关机
好,由于一直使用计算机,您已经觉得疲倦了,并打算到 Big Blue Room 去放松一下。幸好,您已经知道了在结束时直接按电源开关是一大禁忌,但也许还不知道关闭系统的所有方法。
在 Linux 中,可以使用“三指礼”重新引导系统:Ctrl+Alt+Del 键控顺序会向系统发送消息,通知它执行关机进程并重新启动。换句话说,除非告诉它不要那样做。
如果要禁用该键控顺序,需要注释掉 inittab 中的一行代码
关机时会发生什么情况?调用 shutdown 命令可以逐步关闭系统。然而,shutdown 自身并不完成所有工作,它通知 init:应该进入运行级别 0、1 或 6。
shutdown 命令还通知所有已登录到机器上的用户:机器将关闭。在此之后将锁住 login 命令,因此没有别的人可以再启动会话。
要使用 shutdown 命令来关闭 Linux 系统,使用以下命令:
shutdown -h now |
如果要给用户注销和保存文件的时间,请使用以下命令:
shutdown -h -t 60 |
shutdown 命令的 "-h" 开关告诉系统在停机后彻底关机。如果在内核中启用了 APM,那么它会替您关闭电源,否则此时可以放心地按下开关。
"-t" 开关是到系统开始关机之前所需要的时间,以秒为单位。如果要放弃关机,那么使用此开关可以实现。要停止暂挂关机,输入:
shutdown -c |
此命令将取消以前的所有 shutdown 命令。如果出于某些原因,您不想关闭系统,但却要向用户发送“系统即将关闭”的警告,那么应在 shutdown 中使用 "-k" 自变量。
知道如何使用 telinit 和 init 可以在修改 Linux 系统派上用处。本文中,我们讨论了更改运行级别和有关 Slackware Linux 发行版的 init 脚本的基础知识。在各个发行版之间,目录结构和文件位置都各不相同,但在阅读了本文之后,您应该能够掌握系统的 init 脚本,即使您使用的不是 Slackware Linux。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>