mysql innodb plugin 安装

InnoDB Plugin较之Built-in版本新增了很多特性:包括快速DDL、压缩存储等,而且引入了全新的文件格式Barracuda。众多测试也表明,Plugin在很多方面优于Built-in版本。当前Plugin版本是1.0.6,一个RC版本。MySQL的官方版本中从5.1.42开始也内置了InnoDB Plugin1.0.6。

innodb 不断更新的版本带来了一些有用的特性, 我们可以通过innodb plugin来在现有mysql版本(5.1.x)中更新innodb的版本, 从而可以在避免进行mysql整体升级的前提下使用上需要的功能。

下面以二进制分发版本(5.1.41)为例,说明下升级步骤(适用于5.1.38以上版本,以下版本需要下载innodb版本并替换目录):

1.  修改my.cnf 配置文件,临时注销所有innodb选项。
添加选项
ignore_builtin_innodb    #忽略InnoDB built-in

2. 重启mysql 使ignore_builtin_innodb选项生效

3. 使用mysql管理帐号登录进行插件安装
INSTALL PLUGIN INNODB SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_LOCK_WAITS SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_CMP SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_CMP_RESET SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_CMPMEM SONAME 'ha_innodb_plugin.so';
INSTALL PLUGIN INNODB_CMPMEM_RESET SONAME 'ha_innodb_plugin.so'


4.查看版本select @@innodb_version;
+------------------+
| @@innodb_version |
+------------------+
| 1.0.5            |
+------------------+

5.  修改my.cnf配置文件,打开先前注释的innodb选项
如果需要使用barracuda可使用以下选项
innodb_file_format=barracuda  使用barracuda文件格式
innodb_file_per_table=1        使用barracuda文件格式需要采用单独表空间分配模式

6. 重启mysql

7. 检查日志确认确认是否存在异常
可能会发现如下新增信息
InnoDB: The InnoDB memory heap is disabled             [如果采用系统内存分配默认会出现此信息,如果采用其他内存分配可以设置innodb_use_sys_malloc=0来使用指定内存,比如tcmalloc];
InnoDB: Mutexes and rw_locks use GCC atomic builtins  [如果你使用的GCC版本高于4.12,那么互斥量(mutex)和读写锁(read/write lock)可以通过GCC内置的atomic_memory_access功能来实现,并打印这些信息]
110114 17:37:26  InnoDB: highest supported file format is Barracuda. [支持了Barracuda文件格式]

至此innodb plugin 升级完成。

这里列出一些有吸引力的特性   
1. Barracuda 的compressed表自动对长的数据格式进行压缩 (比如blob,text,vachar等) 还可以指定压缩比
语句如下
alter table roberttest ROW_FORMAT=Compressed KEY_BLOCK_SIZE=8;   

2. 添加辅助索引,不需要再通过建立临时表来进行过渡,提升了效率。
具体步骤为
(摘自mysql手册:InnoDB Pluing在删除一个secondary indexes时,先更改一下InnoDB内部数据字典和MySQL的数据字典,然后把释放的空间归还给InnoDB以供重复使用。如果是增加一个secondary indexes,还是有点复杂的,Plugin先将数据表中的数据取出到memory buffers或者临时表中,并按照新建索引列排好序,然后建立索引的B-Tree。 )

3. 对多核CPU和大内存提供更好的支持


另外 一篇 MySQL 5.1.24rc + innodb plugin尝鲜

mysql 5.0版本修改普通用户的密码

1. mysql -uroot -ppassword  

2. mysql> UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ; FLUSH PRIVILEGES;

mysql 单表备份脚本

#/bin/bash
DATE=`date +%Y-%m-%d`
MYSQL="mysql -uroot -h xxx "
for db in `$MYSQL -e "show databases"|sed '1d'`; do
    mkdir -p $db_$DATE
    cd $db_$DATE
    for table in `$MYSQL $db -e "show tables"|sed '1d'`;do
        mysqldump --opt $db $table |gzip >$db_$table.sql.gz
    done
done

MySQL Proxy安装和配置指南

本帖最后由 lqph3387 于 2010-12-9 09:12 编辑

一,环境如下:
  1、MySQL Proxy 安装地址:192.168.1.210 (简称A)
   2、MySQL 主服务器地址:192.168.1.212(简称B)
   3、MySQL 从服务器地址192.168.1.216(简称C)
如果目前B和C是Master-Slave模式(可以先在C上停止STOP SLAVE,不然等会在过程中我们往主库写数据的时候无法区分究竟是写到B还是C了,因为即使写到B机器上,我们在C机器上也能看到,因为通过replaction已经同步到C了,停掉slave的话,这样SQL语句一下子就看出来从哪里来的,让看众觉得有点啰嗦了

二,安装
下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本
[root@ns ~]#  tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz

[root@ns ~]#  cd mysql-proxy-0.6.0-linux-rhas4-x86

#可以看到有2个目录
[root@ns mysql-proxy-0.6.0-linux-rhas4-x86]# ls
sbin  share

[root@ns mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/

[root@ns mysql-proxy-0.6.0-linux-rhas4-x86]# ls share
mysql-proxy         tutorial-constants.lua  tutorial-packets.lua     tutorial-rewrite.lua  tutorial-warnings.lua
tutorial-basic.lua  tutorial-inject.lua     tutorial-query-time.lua  tutorial-states.lua

#将lua脚本放到/usr/local/share下,以供启动脚本使用
[root@ns mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/

[root@ns mysql-proxy-0.6.0-linux-rhas4-x86]# strip /usr/local/sbin/mysql-proxy


三. 启动
编辑一下启动管理脚本:
[root@ns ~]# vim /etc/init.d/mysql-proxy

#!/bin/sh
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua

mode=$1
if [ -z "$mode" ] ; then
  mode="start"
fi

case $mode in
  'start')
    mysql-proxy --daemon \
--admin-address=192.168.1.210:4401 \
--proxy-address=192.168.1.210:3307 \
--proxy-backend-addresses=192.168.1.212:3306 \   主库
--proxy-read-only-backend-addresses=192.168.1.216:3306 \   从库
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
#限制192.168.1.212为可写,192.168.1.216为只读
    ;;

  'stop')
    killall mysql-proxy
    ;;

  'restart')
    if $0 stop ; then
      $0 start
    else
      echo  "retart failed!!!"
      exit 1
    fi
    ;;
esac
exit 0

解释一下启动脚本:
--daemon 采用daemon方式启动
--admin-address=192.168.1.210:4401 指定mysql proxy的管理端口,在这里,表示本机的4401端口
--proxy-address=192.168.1.210:3307 指定mysql proxy的监听端口,也可以用 127.0.0.1:3307 表示
--proxy-backend-addresses=192.168.1.212:3306 指定写库mysql主机的端口
--proxy-read-only-backend-addresses=192.168.1.216:3306 指定只读的mysql主机端口
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离

想查看完整的mysql-proxy 参数可以运行以下命令查看:mysql-proxy  --help-all
运行以下命令启动/停止/重启mysql proxy:

[root@ns ~]# /etc/init.d/mysql-proxy start

[root@ns ~]# /etc/init.d/mysql-proxy stop

[root@ns ~]# /etc/init.d/mysql-proxy restart

四,使用MySQL Proxy
分别在192.168.1.212和192.168.1.216上安装mysql数据库,启动并添加一个用户
mysql>grant all privileges on test.* to abc@'%' identified by '123456';

在192.168.1.212的test数据库建立一个表hr
create table hr(id int(5),address char(255));

在192.168.1.216的test数据库建立一个表hr
create table hr(id int(5),name char(255));

两个表名字一样却有不同的字段。
在192.168.1.210上启动mysql-proxy
/etc/init.d/mysql-proxy start
[root@ns ~]# mysql -uabc -p123456 -h192.168.1.210 -P3307 test
对表进行查询
mysql> desc hr;
出现的表描述是C上的结构就对了。
对数据进行写操作
mysql> create table hr_boy(id int(5),name char(255));
然后去B上看看,如果B上多了一张表就对了

五,其他
mysql proxy还可以实现连接池的功能,因此,有了mysql proxy,就可以不用再担心连接数超限的问题了。
如果使用rw-splitting.lua脚本的话,最好修改以下2个参数的默认值:

min_idle_connections = 1
max_idle_connections = 3

Error: is marked as crashed and last (automatic?) repair

修复数据表操作:
1、service mysqld stop;
2、cd /var/lib/mysql/db_name/
3、myisamchk -r tablename.MYI (修复单张数据表)
myisamchk -r *.MYI (修复所有数据表)

如何正确关机

其实,在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

linux和windows不同,在 Linux 底下,由于每个程序(或者说是服务)都是在在背景下执行的,因此,在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作,例如浏览网页啦、传送信件啦以 FTP 传送档案啦等等的,如果你直接按下电源开关来关机时,则其它人的数据可能就此中断!那可就伤脑筋了!此外,最大的问题是,若不正常关机,则可能造成文件系统的毁损(因为来不及将数据回写到档案中,所以有些服务的档案会有问题!)。

如果你要关机,必须要保证当前系统中没有其他用户在线。可以下达 who 这个指令,而如果要看网络的联机状态,可以下达 netstat -a 这个指令,而要看背景执行的程序可以执行 ps -aux 这个指令。使用这些指令可以让你稍微了解主机目前的使用状态!(这些命令在以后的章节中会提及,现在只要了解即可!)

正确的关机流程为:sysnc --> shutdown --> reboot --> halt

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

最后总结一下,不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6.

下一章  忘记root密码如何做

忘记root密码如何做

以前笔者忘记windows的管理员密码,由于不会用光盘清除密码最后只能重新安装系统现在想想那是多么愚笨的一件事情同样linux系统你也会遇到忘记root密码的情况,如果遇到这样的情况怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可如何进入呢
1 重启linux系统

3 秒之内要按一下回车,出现如下界面

然后输入e

第二行最后边输入 single,有一个空格具体方法为按向下尖头移动到第二行,按“e”进入编辑模式

在后边加上single 回车

最后按“b”启动,启动后就进入了单用户模式了

此时已经进入到单用户模式了,你可以更改root密码了更密码的命令为 passwd



下一章  使用系统安装光盘的救援模式

使用系统安装光盘的救援模式

救援模式即rescue ,这个模式主要是应用于,系统无法进入的情况如,grub损坏或者某一个配置文件修改出错如何使用rescue模式呢?
光盘启动,按F5 进入rescue模式

输入linux rescue 回车

选择语言,笔者建议你选择英语

选择us 键盘




这里问你是否启动网络,有时候可能会联网调试我们选no

这里告诉我们,接下来会把系统挂载在/mnt/sysimage 其中有三个选项,Continue 就是挂载后继续下一步; Read-Only 挂载成只读,这样更安全,有时文件系统损坏时,只读模式会防止文件系统近一步损坏;Skip就是不挂载,进入一个命令窗口模式这里我们选择Continue。

至此,系统已经挂载到了/mnt/sysimage接下来回车,输入chroot /mnt/sysimage 进入管理员环境

Tips
其实也可以到rescue模式下更改root的密码的这个rescue模式和windows PE系统很相近当运行了chroot /mnt/sysimage/ 后,再ls 看到目录结构和原来系统中的目录结构是一样的没错!现在的环境和原来系统的环境是一模一样的你可以输入exit 或者按Ctrl + D退出这个环境然后你再ls 看一下

这个目录其实就是rescue模式下的目录结构,而我们的系统文件全部在 /mnt/sysimage目录下


下一章  Linux系统的远程登录

Linux系统的远程登录

首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章
Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在IDC机房的,所以我平时登录linux系统都是通过远程登录的。Linux系统中是通过ssh服务实现的远程登录功能默认ssh服务开启了22端口,而且当我们安装完系统时,这个服务已经安装,并且是开机启动的所以不需要我们额外配置什么就能直接远程登录linux系统。ssh服务的配置文件为 /etc/ssh/sshd_config,你可以修改这个配置文件来实现你想要的ssh服务比如你可以更改启动端口为36000.
如果你是windows的操作系统,则Linux远程登录需要在我们的机器上额外安装一个终端软件目前比较常见的终端登录软件有SecureCRT, Putty, SSH Secure Shell等,很多朋友喜欢用SecureCRT因为它的功能是很强大的,而笔者喜欢用Putty,只是因为它的小巧以及非常漂亮的颜色显示不管你使用哪一个客户端软件,最终的目的只有一个,就是远程登录到linux服务器上这些软件网上有很多免费版的,你可以下载一个试着玩玩下面笔者介绍如何使用Putty登录远程linux服务器
如果你下载了putty,请双击putty.exe 然后弹出如下的窗口笔者所用putty为英文版的,如果你觉得英文的用着别扭,可以下载一个中文版的

因为是远程登录,所以你要登录的服务器一定会有一个IP或者主机名请在Host Name( or IP address) 下面的框中输入你要登录的远程服务器IP(如果你的linux还没有IP,那么请自行设置一个IP,如何设置请到后续章节查找),然后回车

此时,提示我们输入要登录的用户名

输入root 然后回车,再输入密码,就能登录到远程的linux系统了


下一章  使用密钥认证机制远程登录linux

使用密钥认证机制远程登录linux

SSH服务支持一种安全认证机制,即密钥认证所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(public key)
任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。 ssh 的密钥认证就是使用了这一特性服务器和客户端都各自拥有自己的公钥和密钥如何使用密钥认证登录linux服务器呢?
首先使用工具 PUTTYGEN.EXE 生成密钥对打开工具PUTTYGEN.EXE后如下图所示:





该工具可以生成三种格式的key SSH-1(RSA) SSH-2(RSA) SSH-2(DSA) ,我们采用默认的格式即SSH-2(RSA)。Number of bits in a generated key 这个是指生成的key的大小,这个数值越大,生成的key就越复杂,安全性就越高这里我们写2048.





然后单击Generate 开始生成密钥对:





注意的是,在这个过程中鼠标要来回的动,否则这个进度条是不会动的





到这里,密钥对已经生成了你可以给你的密钥输入一个密码,(在Key Passphrase那里)也可以留空然后点 Save public key 保存公钥,点 Save private Key 保存私钥笔者建议你放到一个比较安全的地方,一来防止别人偷窥,二来防止误删除接下来就该到远程linux主机上设置了


1)创建目录 /root/.ssh 并设置权限


[root@localhost ~]# mkdir /root/.ssh mkdir 命令用来创建目录,以后会详细介绍,暂时只了解即可
[root@localhost ~]# chmod 700 /root/.ssh chmod 命令是用来修改文件属性权限的,以后会详细介绍


2)创建文件 / root/.ssh/authorized_keys
[root@localhost ~]# vim /root/.ssh/authorized_keys vim 命令是编辑一个文本文件的命令,同样在后续章节详细介绍


3)打开刚才生成的public key 文件,建议使用写字板打开,这样看着舒服一些,复制从AAAA开头至---- END SSH2 PUBLIC KEY ---- 该行上的所有内容,粘贴到/root/.ssh/authorized_keys 文件中,要保证所有字符在一行(可以先把复制的内容拷贝至记事本,然后编辑成一行载粘贴到该文件中)在这里要简单介绍一下,如何粘贴,用vim打开那个文件后,该文件不存在,所以vim会自动创建按一下字母”i”然后同时按shift + Insert 进行粘贴(或者单击鼠标邮件即可),前提是已经复制到剪切板中了粘贴好后,然后把光标移动到该行最前面输入ssh-ras ,然后按空格再按ESC,然后输入冒号wq :wq 就保存了格式如下图:





4)再设置putty选项,点窗口左侧的SSh –> Auth ,单击窗口右侧的Browse… 选择刚刚生成的私钥,
再点Open ,此时输入root,就不用输入密码就能登录了





如果在前面你设置了Key Passphrase ,那么此时就会提示你输入密码的为了更加安全建议大家要设置一个Key Passphrase。

下一章  Linux文件与目录管理

Linux文件与目录管理

linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在

Linux 系统启动过程

Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动。

Linux系统的启动过程大体上可分为五部分:内核的引导;运行init;系统初始化;建立终端 ;用户登录系统。

A 内核引导

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是linux内核做了一些列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init。

B 运行init

init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件 /etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。具体内容如下:(你可以在你的linux上执行命令 cat /etc/inittab 这样获得)

  # inittab       This file describes how the INIT process should set up
  #               the system in a certain run-level.
  #
  # Author:       Miquel van Smoorenburg,
  #               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 havenetworking)
  #   3 - Full multiuser mode
  #   4 - unused
  #   5 - X11
  #   6 - reboot (Do NOT set initdefault to this)
  #
  ###表示当前缺省运行级别为5(initdefault);
  id:5:initdefault:
  ###启动时自动执行/etc/rc.d/rc.sysinit脚本(sysinit)
  # System initialization.
  si::sysinit:/etc/rc.d/rc.sysinit
  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
  ###当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回(wait)
  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
  # 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"
  # If power was restored before the shutdown kicked in, cancel it.
  pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
  ###在2、3、4、5级别上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,
  ###如果进程退出则再次运行mingetty程序(respawn)
  # 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
  ###在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行(respawn)
  # Run xdm in runlevel 5
  x:5:respawn:/etc/X11/prefdm -nodaemon

以上面的inittab文件为例,来说明一下inittab的格式。其中以#开始的行是注释行,除了注释行之外,每一行都有以下格式:
  id:runlevel:action:process

  对上面各项的详细解释如下:

1. id

  id是指入口标识符,它是一个字符串,对于getty或mingetty等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
2. Runlevel

runlevel是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留:其中0作为shutdown动作,1作为重启至单用户模式,6为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使用了2、3、4、5几个级别,在CentOS系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。
3. action
  action是描述其后的process的运行方式的。action可取的值包括:initdefault、sysinit、boot、bootwait等: initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入runlevel。  sysinit、boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel。其余的action(不含initdefault)都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描述。
4. process
  process为具体的执行程序。程序后面可以带参数。

Tips: 如果你看不懂这个文件,没有关系,随着你对linux的深入了解,你再回过头看这个文件你就会豁然开朗的。但是你现在必须要明白runlevel的各个级别的含义。

C 系统初始化

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

rc.sysinit约有850多行,但是每个单一的功能还是比较简单,而且带有注释,建议有兴趣的用户可以自行阅读自己机器上的该文件,以了解系统初始化所详细情况。由于此文件较长,所以不在本文中列出来,也不做具体的介绍。当rc.sysinit程序执行完毕后,将返回init继续下一步。通常接下来会执行到/etc/rc.d/rc程序。以运行级别3为例,init将执行配置文件inittab中的以下这行:
  l5:5:wait:/etc/rc.d/rc 5
 这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以以S开头的启动脚本,将以start参数来运行。而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。

D 建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
  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
 
 从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验
证用户的身份。

E 用户登录系统

对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入KDE、Gnome等窗口管理器。而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。

Linux的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。然后login会对用户名进行分析:如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

在分析完用户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置账户的其它信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为/bin/bash。

login程序成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog中有记录),并检查用户是否有新邮件(在/usr/spool/mail/的对应用户名目录下)。然后开始设置各种环境变量:对于bash来说,系统首先寻找/etc/profile脚本文件,并执行它;然后如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了其它配置文件,所有的配置文件执行后后,各种环境变量也设好了,这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了。

下一章  图形模式与文字模式的切换方式

环境变量PATH

上边提到了alias,也提到了绝对路径的/bin/rm ,然后你意识到没有,为什么我们输入很多命令时是直接打出了命令,而没有去使用这些命令的绝对路径?这是因为环境变量PATH在起作用了请输入 echo $PATH,这里的echo其实就是打印的意思,而PATH前面的$表示后面接的是变量

因为/bin PATH的设定中,所以自然就可以找到ls如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你, command not found !那么该怎么克服这种问题呢?
有两个方法,一种方法是直接将 /root 的路径加入 PATH 当中!如何增加?可以使用:  
PATH=”$PATH”:/root
另一种方式则是使用完整档名,亦即直接使用相对或绝对路径来执行,例如:

/root/ls
./ls

关于rm,笔者使用最多便是-rf两个选项合用了不管删除文件还是目录都可以但是方便的同时也要多注意,万一你的手太快后边跟了/那样就会把你的系统文件全部删除的,切记切记

ls 在前面的命令中多次用到它现在你已经明白它的含义了吧没有错,就是查看某个目录或者某个文件,是list的简写。ls 后可以跟一个目录,也可以跟一个文件以下是ls的选项,在这里笔者并没有完全列出,只是列出了平时使用最多的选项其他选项,你可以自行通过man ls 查询
-a 全部的档案都列出,包括隐藏的。linux文件系统中同样也有隐藏文件这些隐藏文件的文件名是以.开头的例如.test, /root/.123, /root/.ssh 等等,隐藏文件可以是目录也可以是普通文件
-l 详细列出文件的属性信息,包括大小创建日期所属主所属组等等。ll 这个命令等同于ls –l 。

--color=never/always/auto never即不要显示颜色,always 即总显示颜色,auto 是由系统自行判断Redhat/CentOS 系统中,默认是带颜色的,因为我们平时用的ls已经alias成了ls –color=tty 所以目录的颜色是蓝色的,而可执行文件的颜色是绿色这样有助于帮我们区分文件的格式

-d 后边跟目录,如果不加这个选项则列出目录下的文件,加上后只列车目录本身

cp copy的简写,即拷贝格式为 cp [选项] [ 来源文件 ] [目的文件] ,例如我想把test1 拷贝成test2 ,这样即可 cp test1 test2,以下介绍几个常用的选项
-d 这里涉及到一个连接的概念连接分为软连接和硬连接在以后的章节中会详细解释,现在你只要明白这里的软连接跟windows中的快捷方式类似即可如果不加这个-d 则拷贝软连接时会把软连接的目标文件拷贝过去,而加上后,其实只是拷贝了一个连接文件(即快捷方式)

上例中的ln 命令即为建立连接的,以后再做详细解释
-r 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的

-i 如果遇到一个存在的文件,会问是否覆盖Redhat/CentOS系统中,我们使用的cp其实是cp –i

下面简单做一个小试验,很快你就会明白-i 选项的作用了

上例中,touch 命令,看字面意思就是摸一下,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件前面说过echo,其实就是打印,在这里所echo的内容”abc” “def”并没有显示在屏幕上,而是分别写进了文件 111222, 其写入作用的就是这个大于号”>” linux中这叫做重定向,即把前面产生的输出写入到后面的文件中在以后的章节中会做详细介绍,这里你要明白它的含义即可cat 命令则是读一个文件,并把读出的内容打印到当前屏幕上该命令也会在后续章节中详细介绍
-u 该选项仅当目标文件存在时才会生效,如果源文件比目标文件新才会拷贝,否则不做任何动作
mv
移动的意思,是move的简写格式为 mv [ 选项 ] [源文件] [目标文件],下面介绍几个常用的选项
-i cp-i 一样,当目标文件存在时会问用户是否要覆盖Redhat/CentOS系统中,我们使用的mv其实是mv –i
-u 和上边cp 命令的-u选项一个作用,当目标文件存在时才会生效,如果源文件比目标文件新才会移动,否则不做任何动作
该命令有集中情况,你注意到了吗?

1
目标文件是目录,而且目标文件不存在;
2
目标文件是目录,而且目标文件存在;
3
目标文件不是目录不存在;
4
目标文件不是目录存在;

目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中不存在的话移动完后,目标文件是一个文件这样说也许你会觉得有点不好理解,看例子吧

windows下的重命名,在linux下用mv就可以搞定
cat
比较常用的一个命令,即查看一个文件的内容并显示在屏幕上
-n 查看文件时,把行号也显示到屏幕上


上例中出现了一个”>>”,这个符号跟前面介绍的”>”的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有内容则会删除文件中内容,而”>>”则不会
-A 显示所有东西出来,包括特殊字符

tac
其实是cat的反写,同样的功能也是反向打印文件的内容到屏幕上

more
也是用来查看一个文件的内容当文件内容太多,一屏幕不能占下,而你用cat肯定是看不前面的内容的,那么使用more就可以解决这个问题了当看完一屏后按空格键继续看下一屏但看完所有内容后就会退出如果你想提前退出,只需按q键即可
less
作用跟more一样,但比more好在可以上翻,下翻空格键同样可以翻页,而按”j”键可以向下移动(按一下就向下移动一行),按”k”键向上移动在使用moreless查看某个文件时,你可以按一下”/” 键,然后输入一个word回车,这样就可以查找这个word如果是多个该word可以按”n”键显示下一个另外你也可以不按”/”而是按”?”后边同样跟word来搜索这个word,唯一不同的是,”/”是在当前行向下搜索,而”?”是在当前行向上搜索
head head后直接跟文件名,则显示文件的前十行如果加 –n 选项则显示文件前n

tail
head一样,后面直接跟文件名,则显示文件最后十行如果加-n 选项则显示文件最后n

-f 动态显示文件的最后十行,如果文件是不断增加的,则用-f 选项如:tail -f /var/log/messages

图形模式与文字模式的切换方式

Linux预设提供了六个命令窗口终端机让我们来登录。默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。

下一章  学会使用快捷键

文件的所属主以及所属组

一个linux目录或者文件,都会有一个所属主和所属组所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全例如,test文件的所属主是user0 test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件然后有这样一个应用,我想创建一个文件同时让user0user1来查看怎么办呢?

这时所属组就派上用场了即,创建一个群组users,让user0user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0user1都可以访问test2文件
Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user所属组(group)以及其他用户(others)对该文件的权限你可以通过ls -l 来查看这些属性