首页 > 代码库 > (转载)linux那点事儿(中)

(转载)linux那点事儿(中)

本文只是转载供自己学习之用

 

2012-03-22 13:31 by 虫师, 2343 阅读, 5 评论, 收藏, 编辑

       今天是辞职后的第一天,本来想写写工作总结,还有许多东西需要整理和学习。这是我继毕业之后的第二次焦虑和迷茫。希望我能早点找到工作吧!

       步入正题,其实,linux要学的东西非常多。不是我分个上、中、下三篇博文就能写完的。不过,既然弄了个“上”出来,题目我就不改了。这篇就定为“中”吧!如果写了“下”,还没写完,也许会弄个“下续” ,“下续二”出来。^_^ :) ,也许,写了这个就没下了,哈哈!毕竟只是博客,又没人约稿,所以,比较随意。评论帮顶应该算我最大的动力吧!

 

别名的使用                                                                                            

     在上一节中,在查看当前目录下的文件时,我说到了一个 ll  命令,看一楼回复中说,他是 ls -l 命令的别名,不是所有的linux都有。
     别名嘛,顾名思义,不同的两个名字指的是一个人,不同的两个命令具有相同的作用。
现在,你一定很想知道自己的系统中都有哪些别名。
[root@localhost ~]# alias             查询系统中的别名
alias cp=‘cp -i‘
alias l.=‘ls -d .* --color=tty‘
alias ll=‘ls -l --color=tty‘
alias ls=‘ls --color=tty‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias vi=‘vim‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
 
如何定义别名,假如我在dos下用习惯了copy 而不想用cp ,那么就可以为cp 定义一个copy的别名。
[root@localhost ~]# alias copy=cp              将cp命令功能赋于给copy
[root@localhost ~]# alias drm="rm -rf"       将“ rm -rf ” 命令定义一个drm的别名。
 
[root@localhost ~]# unalias  copy       取消别名
 
 
vim/vi编辑器                                                                                     
 
  这一部分应该属于重点了,关于vi 的东西很多,貌似出过几本专门讲vi的书。有牛人用这个编程序超快。对于我们大多人来说会使用就OK了
     vim/vi是一个功能强大的屏幕文本编辑器,是linux、UNIX 上最常用的文本编辑器,他的作用是建立、编辑、显示文本文件。
     vim/vi 没有菜单,只有命令。
  
  为了便于操作,我们在copy一个有内容的文件拿来操作。
[root@localhost test]# cp /etc/services   services.test   拷贝/etc/services文件到当前目录下。
  vim是vi 的加强版,当好多用户还是习惯用vi 来编辑文件
[root@localhost test]# vim  services.test   进入文件
 
vi 的三种模式:

三种模式的转换:
  命令模式 下输入 a、i、o进入 插入模式
  插入模式 下按ESC进入  命令模式
  命令模式 下输入 : (冒号)进入 编辑模式
  编辑模式 下指令错误则返回 命令模式
 
是不是觉得有点儿绕,其实,我们只要记着,vi 进入文件后,按 i 键可以对文件时行编辑了。
编辑完成后,按Esc 键退出编辑模式。退出有三中必须要记。
:q     是退出(文件没发生更改时)
:q!    不保存退出(文件发生改变时)
:wq    保存并退出 vim/vi的具体操作    
 
了解下面的一些命令,有助于我们快速的编辑和使用vi 
 
命令模式:
 命令模式主要使用方向键移动光标位置进行文字的编辑,下面列出了常用的操作命令及含义
 上、下、左、右键盘和 h、j、k、l键分别都是移动光标方面的。
$ ------------移至行尾
0(零)  -----移至行首
H   ----------移至屏幕上端
M   ----------移至屏幕中央
L   ----------移至屏幕下端
gg   ---------到文件第一行
G   ----------到文件末尾
PageDn   ----- 向下移动一页
PageUp  ----- 向上移动一页
d+方向键 -----删除文字
dd  -----删除整行
pp -----整行复制
r  -----修改光标所在的字符
S  -----删除光标所在的列,并进入输入模式
 
插入模式:
 
可以通过以下命令由“命令模式”进入“插入模式”
a------------在当标后附加文本
A------------在本行行末附加文本
i-------------在光标前插入文本
I-------------在本行开始插入文本
o------------在光标下插入新行
O-----------在光标上插入新行
ESC--------退出“插入模式”
 
编辑模式:
编辑模式主要进行一些文字编辑辅助功能,比如字串搜索、替代、保存文件等操作。
:q -----结束Vi程序,如果文件有过修改,先保存文件
q! -----强制退出Vi程序
:wq -----保存修改并退出程序
:set nu -----使文本每一行前出现行号
:set nonu ------取消每一行前的行号
:n ------------到第n行
 
 
linux引导流程解析                                                                             
 
    这一部分属于理论知识,感兴趣的和我一起了解一下。
   linux的引导流程,也就是linux的启动过程,启动顺序是是怎样的,linux为我们启动了哪些服务。
 
系统引导流程:  

  1. BIOS自检
  2. 启动GRUB/LILO
  3. 加载内核
  4. 执行init进程
  5. 通过/etc/inittab文件进行初始化
 BIOS自检 
     计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On SelfTest),然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。 在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,它被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务。
 
     要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。
 
    提取 MBR 的信息
 
    要查看 MBR 的内容,请使用下面的命令:
 
    # dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin 
 
    这个 dd 命令需要以 root 用户的身份运行,它从 /dev/hda(第一个 IDE 盘) 上读取前 512 个字节的内容,并将其写入 mbr.bin 文件中。od 命令会以十六进制和 ASCII 码格式打印这个二进制文件的内容。
 
启动GRUB/LILO
 
    GRUB和LILO都是引导加载程序。最简单地讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(master boot record,MBR))。在单一的 MBR 中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。
 
    GRUB 与 LILO 的比较
 
    如本文开始处所述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:
 * LILO 没有交互式命令界面,而 GRUB 拥有。 
 * LILO 不支持网络引导,而 GRUB 支持。 
 * LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载程序重写到 MBR。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置错误,则只是默认转到 GRUB 命令行界面。
   
   安全提示:
     关于安全性,任何可以接触到引导磁盘/CD 的人,只需要使用没有设置安全性的 grub.conf 或 lilo.conf,就可以绕过本文中提及的所有安全措施。特别是使用 GRUB 时,因为能够引导到单用户模式,所以是一个严重的安全漏洞。解决此问题的一个简单方法是在机器的 BIOS 中禁止通过 CD 和软盘进行引导,并确保为 BIOS 设置了一个口令,使得其他人不能修改这些设置。
 
加载内核
 
    当内核映像被加载到内存之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。
 
    GRUB 中的手工引导
 
    在 GRUB 命令行中,我们可以使用 initrd 映像引导一个特定的内核,方法如下:
   [root@localhost hzh]# vi /etc/grub.conf    查看grub.conf的配置文件
   
   grub> kernel /bzImage-2.6.14.2
   [Linux-bzImage, setup=0x1400, size=0x29672e]
 
    grub> initrd /initrd-2.6.14.2.img
   [Linux-initrd @ 0x5f13000, 0xcc199 bytes]
 
    grub> boot
 
    Uncompressing Linux... Ok, booting the kernel.
如果您不知道要引导的内核的名称,只需使用斜线(/)然后按下 Tab 键即可。GRUB 会显示内核和 initrd 映像列表。
 
执行init进程
 
    init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于Unix的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。
 
    init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。快速执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。
 
    init的第二个角色是在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。
 
通过/etc/inittab文件进行初始化
 
    init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体, 装载模块,设置网络,等等。
 
    对于RedhatLinux来说,执行的顺序为: 
/etc/rc.d/rc.sysinit            # 由init执行的第一个脚本 
/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:
设置初始的$PATH变量。
配置网络。
为虚拟内存启动交换。
设置系统的主机名。
检查root文件系统,以进行必要的修复。
检查root文件系统的配额。
为root文件系统打开用户和组的配额。
以读/写的方式重新装载root文件系统。
清除被装载的文件系统表/etc/mtab。
把root文件系统输入到mtab。
使系统为装入模块做准备。
查找模块的相关文件。
检查文件系统,以进行必要的修复。
加载所有其他文件系统。
清除几个/etc文件:/etc/mtab、/etc/fastboot和/etc/nologin。
删除UUCP的lock文件。
删除过时的子系统文件。
删除过时的pid文件。
设置系统时钟。
打开交换。
初始化串行端口。
装入模块。
/etc/rc.d/rcX.d/[KS]
 
    首先终止“K”开头的服务,然后启动“S”开头的服务。
 
    对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S或者 K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行。存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。
    执行/etc/ec.d/rc.local
Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。
    执行 /bin/login 程式    
            
login 程序会提示使用者需输入账号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell,即等待用户登录。多次为止Linux启动过程全部结束。
 
 
修改本机的软硬件时间                                                                        
 
       关于,修改系统的软硬件时间,对新手来说不是特别重要,软件(指的系统时间)时间很好修改,硬件(指CMOS时间)时间就不知道怎么修改了。不感兴趣的可以无视。
   
[root@localhost hzh]# date           查看本机的软件时钟
[root@localhost hzh]# hwclock       查看本机的硬件时钟
[root@localhost hzh]# hwclock   --help
--set         set the rtc to the time given with --date
--hctosys     set the system time from the hardware clock       
--systohc     set the hardware clock to the current system time
 
  假如有一个时间是错的,我们可以通过上面的命令进行修改。
[root@localhost hzh]# hwclock  --hctosys 设置系统时间与硬件时间对应。
[root@localhost hzh]# hwclock  --systohc  设置硬件时间与系统时间对应。
 
  假如两个时间都是错误的,我们可以自己设置时间
[root@localhost hzh]# hwclock  --set --data="http://www.mamicode.com/月/日/年 时:分:秒"