??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成小说,91精品国产高清久久久久久91裸体 ,国产鲁鲁视频在线观看免费http://www.aygfsteel.com/sunxiaobo/category/28821.htmlEclipse-Unix http://umlfact.berlios.de/~s_xsun/zh-cnMon, 03 Aug 2009 02:39:10 GMTMon, 03 Aug 2009 02:39:10 GMT60Linux 启动http://www.aygfsteel.com/sunxiaobo/archive/2008/12/11/245593.htmlXiaobo SunXiaobo SunWed, 10 Dec 2008 17:23:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/12/11/245593.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/245593.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/12/11/245593.html#Feedback1http://www.aygfsteel.com/sunxiaobo/comments/commentRss/245593.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/245593.html前言
linux有自׃套完整的启动体系Q抓住了(jin)linux启动的脉l,linux的启动过E将不再秘?
阅读之前先看一下附图?

本文中假设inittab中设|的init tree为:(x)
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
/etc/rc.d/init.d

目录
1. 关于linux的启?
2. 关于rc.d
3. 启动脚本CZ
4. 关于rc.local
5. 关于bash启动脚本
6. 关于开机程序的自动启动




1. 关于linux的启?
init是所有进E之?
initd/etc/inittabQ执行rc.sysinit脚本
(注意文g名是不一定的,有些unix甚至?x)将语句直接写在inittab?
rc.sysinit脚本作了(jin)很多工作:

init $PATH
config network
start swap function
set hostname
check root file system, repair if needed
check root space
....

rc.sysinitҎ(gu)inittab执行rc?.d脚本
linux是多用户pȝQgetty是多用户与单用户的分水岭
在getty之前q行的是pȝ脚本

2. 关于rc.d
所有启动脚本放|在 /etc/rc.d/init.d?
rc?.d中放|的是init.d中脚本的链接Q命名格式是Q?
S{number}{name}
K{number}{name}
S开始的文g向脚本传递start参数
K开始的文g向脚本传递stop参数
number军_执行的顺?

3. 启动脚本CZ

q是一个用来启动httpd?nbsp;/etc/rc.d/init.d/apache 脚本Q?

代码:
#!/bin/bash

source /etc/sysconfig/rc
source $rc_functions

case "$1" in
        start)
                echo "Starting Apache daemon..."
                /usr/local/apache2/bin/apachectl -k start
                evaluate_retval
                ;;

        stop)
                echo "Stopping Apache daemon..."
                /usr/local/apache2/bin/apachectl -k stop
                evaluate_retval
                ;;

        restart)
                echo "Restarting Apache daemon..."
                /usr/local/apache2/bin/apachectl -k restart
                evaluate_retval
                ;;

        status)
                statusproc /usr/local/apache2/bin/httpd
                ;;
                
        *)
                echo "Usage: $0 {start|stop|restart|status}"
                exit 1
                ;;
esac
可以看出他接受start,stop,restart,status参数

然后可以q样建立rc?.d的链接:(x)

代码:
cd /etc/rc.d/init.d &&
ln -sf ../init.d/apache ../rc0.d/K28apache &&
ln -sf ../init.d/apache ../rc1.d/K28apache &&
ln -sf ../init.d/apache ../rc2.d/K28apache &&
ln -sf ../init.d/apache ../rc3.d/S32apache &&
ln -sf ../init.d/apache ../rc4.d/S32apache &&
ln -sf ../init.d/apache ../rc5.d/S32apache &&
ln -sf ../init.d/apache ../rc6.d/K28apache

4. 关于rc.local

l常使用?nbsp;rc.local 则完全是?fn)惯问题Q不是标准?
各个发行版有不同的实现方法,可以q样实现Q?

代码:
touch /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc1.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc2.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc3.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc4.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc5.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc6.d/S999rc.local

5. 关于bash启动脚本

/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
是bash的启动脚?

一般用来设|单用户的启动环境,也可以实现开机单用户的程序,但要明确他们都是属于bash范畴而不是系l范畴?

他们的具体作用介l如下:(x)

/bin/bashq个命o(h)解释E序(后面Ushell)使用?jin)一pd启动文g来徏立一个运行环境:(x)

/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
~/.bash_logout
每一个文仉有特D的功用q对登陆和交互环境有不同的媄(jing)响?
/etc/profile ?nbsp;~/.bash_profile 是在启动一个交互登陆shell的时候被调用?
/etc/bashrc ?nbsp;~/.bashrc 是在一个交互的非登陆shell启动的时候被调用?
~/.bash_logout 在用h销登陆的时候被d

一个交互的登陆shell?x)?nbsp;/bin/login 成功登陆之后q行。一个交互的非登陆shell是通过命o(h)行来q行的,? [prompt]$/bin/bash。一般一个非交互的shell出现在运行shell脚本的时候。之所以叫非交互的shellQ是因ؓ(f)它不在命令行? {待输入而只是执行脚本程序?br /> =====================================================================================================
本文以RedHat9.0和i386q_ZQ剖析了(jin)从用h开甉|直到屏幕出现命o(h)行提C符的整个Linux启动q程。ƈ且介l了(jin)启动中涉?qing)到的各U文件?

  阅读Linux源代码,无疑是深入学?fn)Linux的最好方法。在本文对Linux启动q程的介l中Q我们也试从源代码的视角来更深入的剖析Linux的启动过E,所以其中也单涉?qing)到部分相关的Linux?iframe marginwidth="0" marginheight="0" src="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html" align="right" scrolling="no" width="360" frameborder="0" height="300">代码QLinux启动q部分的源码主要使用的是C语言Q也涉及(qing)C(jin)量的汇~。而启动过E中也执行了(jin)大量的shell(主要是bash shell)所写脚本。ؓ(f)?jin)方便读者阅读,W者将整个Linux启动q程分成以下几个部分逐一介绍Q大家可以参考下图:(x)

  当用h开PC的电(sh)源,BIOS开(g)Q按BIOS中设|的启动讑֤(通常是硬?启动Q接着启动讑֤上安装的引导E序lilo 或grub开始引导LinuxQLinux首先q行内核的引|接下来执行initE序QinitE序调用?jin)rc.sysinit和rc{程 序,rc.sysinit和rc当完成系l初始化和运行服务的d后,q回initQinit启动?jin)mingetty后,打开?jin)终端供用户dpȝQ用? d成功后进入了(jin)ShellQ这样就完成?jin)从开机到d的整个启动过E?/p>

下面将逐一介绍其中几个关键的部分:(x)

  W一部分Q内核的引导(核内引导)

  Red Hat9.0可以使用lilo或grub{引?a class="bluekey" target="_blank">E序开 始引导LinuxpȝQ当引导E序成功完成引导d后,Linux从它们手中接了(jin)CPU的控制权Q然后CPU开始执行Linux的核?j)映象代码,开? ?jin)Linux启动q程。这里用了(jin)几个汇编E序来引导LinuxQ这一步泛?qing)到Linux源代码树(wi)中的“arch/i386/boot”下的q几个文 Ӟ(x)bootsect.S、setup.S、video.S{?/p>

  其中bootsect.S是生成引导扇区的汇编源码Q它完成加蝲动作后直接蟩转到setup.S的程序入口。setup.S的主要功能就是将p? l参敎ͼ包括内存、磁盘等Q由BIOSq回Q拷贝到特别内存?sh),以便以后q些参数被保护模式下的代码来d。此外,setup.Sq将video.S中的 代码包含q来Q检和讄昄器和昄模式。最后,setup.S系l{换到保护模式Qƈ跌{?0x100000?/p>

  那么0x100000q个内存地址中存攄是什么代码?而这些代码又是从何而来的呢Q?/p>

  0x100000q个内存地址存放的是解压后的内核Q因为Red Hat提供的内核包含了(jin)众多驱动? 功能而显得比较大Q所以在内核~译中用了(jin)“makebzImage”方式Q从而生成压~过的内核,在RedHat中内核常常被命名为vmlinuzQ在 Linux的最初引DE中Q是通过"arch/i386/boot/compressed/"中的head.S利用misc.c中定义的 decompress_kernel()函数Q将内核vmlinuz解压?x100000的?/p>

  当CPU跛_0x100000Ӟ执?arch/i386/kernel/head.S"中的startup_32Q它也是vmlinux 的入口,然后p转到start_kernel()中去?jin)。start_kernel()?init/main.c"中的定义的函 敎ͼstart_kernel()中调用了(jin)一pd初始化函敎ͼ以完成kernel本n的设|。start_kernel()函数中,做了(jin)大量的工作来建立 基本的Linux核心(j)环境。如果顺利执行完start_kernel()Q则基本的Linux核心(j)环境已经建立h?jin)?/p>

  在start_kernel()的最后,通过调用init()函数Q系l创建第一个核?j)线E,启动?jin)initq程。而核?j)线Einit()主要 是来q行一些外讑ֈ始化的工作的Q包括调用do_basic_setup()完成外设?qing)其驱动E序的加载和初始化。ƈ完成文gpȝ初始化和root文gp? l的安装?/p>

  当do_basic_setup()函数q回init()Qinit()又打开?dev/console讑֤Q重定向三个标准的输入输出文? stdin、stdout和stderr到控制台Q最后,搜烦(ch)文gpȝ中的initE序Q或者由init=命o(h)行参数指定的E序Q,q? execve()pȝ调用加蝲执行initE序。到此init()函数l束Q内核的引导部分也到此结束了(jin)Q?/p>

W二部分Q运行init

  init的进E号?Q从q一点就能看出,initq程是系l所有进E的L(fng)QLinux在完成核内引g后,开始运行initE序Q。initE序需要读取配|文?etc/inittab。inittab是一个不可执行的文本文gQ它有若q行指o(h)所l成。在Redhatpȝ中,inittab的内容如下所C??#8220;###"开始的中注释ؓ(f)W者增加的)Q?/p>

  #
# 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 havenetworking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
###表示当前~省q行U别?(initdefault)Q?br /> 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
###当运行别ؓ(f)5Ӟ?为参数运?etc/rc.d/rc脚本Qinit等待其q回(wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

  ###在启动过E中允许按CTRL-ALT-DELETE重启pȝ
# 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"

  ###????U别上以ttyX为参数执?sbin/mingettyE序Q打开ttyXl端用于用户dQ?br /> ###如果q程退出则再次q行mingettyE序(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

  ###?U别上运行xdmE序Q提供xdm囑Ş方式d界面Qƈ在退出时重新执行(respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

以上面的inittab文gZQ来说明一下inittab的格式。其中以#开始的行是注释行,除了(jin)注释行之外,每一行都有以下格式:(x)

  id:runlevel:action:process

  对上面各的详细解释如下Q?/p>

  1. id

  id是指入口标识W,它是一个字W串Q对于getty或mingetty{其他loginE序,要求id与tty的编L(fng)同,否则gettyE序不能正常工作?/p>

  2. runlevel

  runlevel是init所处于的运行别的标识Q一般?Q?以及(qing)S或s???q行U别被系l保留:(x)其中0作ؓ(f)shutdown? 作,1作ؓ(f)重启臛_用户模式Q?为重启;S和s意义相同Q表C单用户模式Q且无需inittab文gQ因此也不在inittab中出玎ͼ实际上,q入单用 h式时Qinit直接在控制台Q?dev/consoleQ上q行/sbin/sulogin。在一般的pȝ实现中,都用了(jin)2???几个U别Q? 在Redhatpȝ中,2表示无NFS支持的多用户模式Q?表示完全多用h式(也是最常用的别)(j)Q?保留l用戯定义Q?表示XDM囑Şd方式? 7Q?U别也是可以使用的,传统的Unixpȝ没有定义q几个别。runlevel可以是ƈ列的多个|以匹配多个运行别,对大多数action? _(d)仅当runlevel与当前运行别匹配成功才?x)执行?/p>

  3. action

  action是描q其后的process的运行方式的。action可取的值包括:(x)initdefault、sysinit、boot、bootwait{:(x)

  initdefault是一个特D的action|用于标识~省的启动别;当init由核?j)激zM后,它将dinittab中的 initdefault,取得其中的runlevelQƈ作ؓ(f)当前的运行别。如果没有inittab文gQ或者其中没有initdefault ,init在控制Ch输入runlevel?/p>

  sysinit、boot、bootwait{action在pȝ启动时无条gq行Q而忽略其中的runlevel?/p>

  其余的actionQ不含initdefaultQ都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描q?/p>

  4. process

  process为具体的执行E序。程序后面可以带参数?/p>

  W三部分Q系l初始化

  在init的配|文件中有这么一行:(x)

  si::sysinit:/etc/rc.d/rc.sysinit

  它调用执行了(jin)/etc/rc.d/rc.sysinitQ而rc.sysinit是一个bash shell的脚本,它主要是完成一些系l初始化的工作,rc.sysinit是每一个运行别都要首先运行的重要脚本。它主要完成的工作有Q激zM换分区,(g)查磁盘,加蝲g模块以及(qing)其它一些需要优先执行Q务?/p>

  rc.sysinitU有850多行Q但是每个单一的功能还是比较简单,而且带有注释Q徏议有兴趣的用户可以自行阅读自己机器上的该文gQ以?jin)解pȝ初始化所详细情况。由于此文g较长Q所以不在本文中列出来,也不做具体的介绍?/p>

  当rc.sysinitE序执行完毕后,返回initl箋(hu)下一步?/p>

W四部分Q启动对应运行别的守护q程

  在rc.sysinit执行后,返回initl箋(hu)其它的动作,通常接下来会(x)执行?etc/rc.d/rcE序。以q行U别3ZQinit执行配|文件inittab中的以下q行Q?/p>

  l5:5:wait:/etc/rc.d/rc 5

  q一行表CZ5为参数运?etc/rc.d/rcQ?etc/rc.d/rc是一个Shell脚本Q它接受5作ؓ(f)参数Q去执行/etc /rc.d/rc5.d/目录下的所有的rc启动脚本Q?etc/rc.d/rc5.d/目录中的q些启动脚本实际上都是一些链接文Ӟ而不是真正的rc 启动脚本Q真正的rc启动脚本实际上都是放?etc/rc.d/init.d/目录下。而这些rc启动脚本有着cM的用法,它们一般能接受start? stop、restart、status{参数?/p>

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

  至于在每个运行中将q行哪些守护q程Q用户可以通过chkconfig或setup中的"System Services"来自行设定。常见的守护q程有:(x)

  amdQ自动安装NFS守护q程
apmd:高甉|理守护q程
arpwatchQ记录日志ƈ构徏一个在LAN接口上看到的以太|地址和IP地址Ҏ(gu)据库
autofsQ自动安装管理进EautomountQ与NFS相关Q依赖于NIS
crondQLinux下的计划d的守护进E?br /> namedQDNS服务?br /> netfsQ安装NFS、Samba和NetWare|络文gpȝ
networkQ激zd配置|络接口的脚本程?br /> nfsQ打开NFS服务
portmapQRPC portmap理器,它管理基于RPC服务的连?br /> sendmailQ邮件服务器sendmail
smbQSamba文g׃n/打印服务
syslogQ一个让pȝ引导时v动syslog和klogdpȝ日志守候进E的脚本
xfsQX Window字型服务器,为本地和q程X服务器提供字型集
XinetdQ支持多U网l服务的核心(j)守护q程Q可以管理wuftp、sshd、telnet{服?/p>

  q些守护q程也启动完成了(jin)QrcE序也就执行完了(jin)Q然后又返回initl箋(hu)下一步?/p>

W五部分Q徏立终?

  rc执行完毕后,q回init。这时基本系l环境已l设|好?jin),各种守护q程也已l启动了(jin)。init接下来会(x)打开6个终端,以便用户dpȝ。通过按Alt+Fn(n对应1-6)可以在这6个终端中切换。在inittab中的以下6行就是定义了(jin)6个终端:(x)

  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???的运行别中都将以respawn方式q行mingettyE序QmingettyE序能打开l端、设|模式。同时它?x)显CZ个文本登录界面,q个界面是我们l常看到的登录界面,在这个登录界面中?x)提C用戯入用户名Q而用戯入的用户作为参ClloginE序来验证用L(fng)w䆾?/p>

  W六部分Q登录系l,启动完成

  对于q行U别?的图形方式用h_(d)他们的登录是通过一个图形化的登录界面。登录成功后可以直接q入KDE、Gnome{窗口管理器。而本文主要讲的还是文本方式登录的情况Q?/p>

  当我们看到mingetty的登录界面时Q我们就可以输入用户名和密码来登录系l了(jin)?br />
Linux的̎号验证程序是 loginQlogin?x)接收mingetty传来的用户名作ؓ(f)用户名参数。然后login?x)对用户名进行分析?x)如果用户名不是rootQ且存在/etc /nologin文gQlogin输出nologin文g的内容,然后退出。这通常用来pȝl护旉止非root用户d。只?etc /securetty中登C(jin)的终端才允许root用户dQ如果不存在q个文gQ则root可以在Q何终端上d?etc/usertty文g用于? 用户作出附加讉K限制Q如果不存在q个文gQ则没有其他限制?/p>

  在分析完用户名后Qlogin搜?etc/passwd以及(qing)/etc/shadow来验证密码以?qing)设|̎L(fng)其它信息Q比如:(x)ȝ录是什么、用何Ushell。如果没有指定主目录Q将默认为根目录Q如果没有指定shellQ将默认?bin/bash?/p>

  loginE序成功后,?x)向对应的终端在输出最q一ơ登录的信息(?var/log/lastlog中有记录)Qƈ(g)查用h否有新邮?? /usr/spool/mail/的对应用户名目录?。然后开始设|各U环境变量:(x)对于bash来说Q系l首先寻?etc/profile脚本文gQ? q执行它Q然后如果用L(fng)ȝ录中存在.bash_profile文gQ就执行它,在这些文件中又可能调用了(jin)其它配置文gQ所有的配置文g执行后后Q各U? 环境变量也设好了(jin)Q这时会(x)出现大家熟?zhn)的命令行提示W,到此整个启动q程q束了(jin)?/p>

  希望通过上面对Linux启动q程的剖析能帮助那些x(chng)入学?fn)Linux用户建立一个相关Linux启动q程的清晰概念,q而可以进一步研ILinux接下来是如何工作的?/p>



Xiaobo Sun 2008-12-11 01:23 发表评论
]]>
Windows&Linux copy&pastehttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/30/237671.htmlXiaobo SunXiaobo SunThu, 30 Oct 2008 11:07:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/30/237671.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/237671.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/30/237671.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/237671.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/237671.html
To make Xming's clipboard work
change /etc/init.d/custom.conf

    in [daemon]
        KillInitClients=false



Xiaobo Sun 2008-10-30 19:07 发表评论
]]>
shell技?/title><link>http://www.aygfsteel.com/sunxiaobo/archive/2008/10/15/234513.html</link><dc:creator>Xiaobo Sun</dc:creator><author>Xiaobo Sun</author><pubDate>Wed, 15 Oct 2008 12:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/sunxiaobo/archive/2008/10/15/234513.html</guid><wfw:comment>http://www.aygfsteel.com/sunxiaobo/comments/234513.html</wfw:comment><comments>http://www.aygfsteel.com/sunxiaobo/archive/2008/10/15/234513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/sunxiaobo/comments/commentRss/234513.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/sunxiaobo/services/trackbacks/234513.html</trackback:ping><description><![CDATA[<span style="color: rgb(4, 0, 0);"><span style="color: rgb(6, 0, 0);"><font id="zoom" class="f14"><font color="#cccccc"><span style="color: rgb(60, 255, 32);"><br /> <font size="1"><br /> </font><font class="normalfont"><br /> 1.test试命o(h)<br /> test命o(h)用于(g)查某个条件是否成立,它可以进行数倹{字W和文g三个斚w的测试,<br /> 其测试符和相应的功能分别如下Q?br /> (1)数值测试:(x)<br /> -eqQ等于则为真<br /> -neQ不{于则ؓ(f)?br /> -gtQ大于则为真<br /> -geQ大于等于则为真<br /> -ltQ小于则为真<br /> -leQ小于等于则为真<br /> (2)字符串测试:(x)<br /> =Q等于则为真<br /> !=Q不相等则ؓ(f)?br /> -z 字符Ԍ(x)字符串长度伪则ؓ(f)?br /> -n 字符Ԍ(x)字符串长度不伪则为真<br /> (3)文g试Q?br /> -e 文g名:(x)如果文g存在则ؓ(f)?br /> -r 文g名:(x)如果文g存在且可d为真<br /> -w 文g名:(x)如果文g存在且可写则为真<br /> -x 文g名:(x)如果文g存在且可执行则ؓ(f)?br /> -s 文g名:(x)如果文g存在且至有一个字W则为真<br /> -d 文g名:(x)如果文g存在且ؓ(f)目录则ؓ(f)?br /> -f 文g名:(x)如果文g存在且ؓ(f)普通文件则为真<br /> -c 文g名:(x)如果文g存在且ؓ(f)字符型特D文件则为真<br /> -b 文g名:(x)如果文g存在且ؓ(f)块特D文件则为真<br /> 另外QLinuxq提供了(jin)?“Q?#8221;)、或(“-o)、非(“-a”)三个逻辑操作W用于将试条gq接hQ?br /> 其优先为:(x)“Q?#8221;最高,“-a”ơ之Q?#8220;-o”最低?br /> 同时Qbash也能完成单的术q算Q格式如下:(x)<br /> $[expression]<br /> 例如Qvar1=2<br /> var2=$[var1*10+1]<br /> 则:(x)var2的gؓ(f)21?br /> <br /> 2.if条g语句<br /> if [ -x /sbin/quotaon ]; then <br /> echo "Turning on Quota for root filesystem" <br /> /sbin/quotaon / <br /> elif [ -x /sbin/quotaon ]; then<br /> /usr/bin/bash<br /> else<br /> echo "ok"<br /> fi <br /> <br /> 3.for 循环<br /> #!/bin/sh<br /> WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"<br /> for i in $WORD ; do <br /> echo $i <br /> done <br /> <br /> #!/bin/sh <br /> FILES=`ls /txt/*.txt`<br /> for txt in $FILES ; do <br /> doc=`echo $txt | sed "s/.txt/.doc/"` <br /> mv $txt $doc <br /> done <br /> <br /> 4.while和until 循环<br /> #!/bin/sh <br /> while [ -f /var/run/ppp0.pid ] ; do <br /> killall pppd<br /> done<br /> <br /> #!/bin/sh <br /> until [ -f /var/run/ppp0.pid ] ; do <br /> sleep 1 <br /> done<br /> <br /> Shellq提供了(jin)true和false两条命o(h)用于建立无限循环l构的需要,<br /> 它们的返回状态分别是Mؓ(f)0或Mؓ(f)?<br /> <br /> 5.case 条g选择<br /> #!/bin/sh <br /> case $1 in <br /> start | begin) <br /> echo "start something" <br /> ;; <br /> stop | end) <br /> echo "stop something" <br /> ;; <br /> *) <br /> echo "Ignorant" <br /> ;; <br /> esac<br /> case表达式中也可以用shell的通配W?“*”?#8220;Q?#8221;?#8220;[ ]”)?br /> <br /> 6.无条件控制语句break和continue<br /> break 用于立即l止当前循环的执行,而contiune用于不执行@环中后面的语?br /> 而立卛_始下一个@环的执行。这两个语句只有攑֜do和done之间才有效?br /> <br /> 7.函数定义<br /> 在shell中还可以定义函数。函数实际上也是pq条shell命o(h)l成的,<br /> 因此它与shellE序形式上是怼的,不同的是它不是一个单独的q程Q?br /> 而是shellE序的一部分。函数定义的基本格式为:(x)<br /> functionname<br /> {<br /> 若干命o(h)?br /> }<br /> 调用函数的格式ؓ(f)Q?br /> functionname param1 param2 ……<br /> shell函数可以完成某些例行的工作,而且q可以有自己的退出状态,<br /> 因此函数也可以作为if、while{控制结构的条g?br /> 在函数定义时不用带参数说明,但在调用函数时可以带有参敎ͼ此时<br /> shell把q些参数分别赋予相应的位|参?1?2?..?*?br /> <br /> 8.命o(h)分组<br /> 在shell中有两种命o(h)分组的方法:(x)“()”?#8220;{}”Q前者当shell执行()<br /> 中的命o(h)时将再创Z个新的子q程Q然后这个子q程L行圆括弧中的命o(h)?br /> 当用户在执行某个命o(h)时不惌命o(h)q行时对状态集?如位|参数、环境变量?br /> 当前工作目录{?的改变媄(jing)响到下面语句的执行时Q就应该把这些命令放在圆?br /> 弧中Q这样就能保证所有的改变只对子进E生媄(jing)响,而父q程不受Mq扰Q?br /> {}用于顺序执行的命o(h)的输出结果用于另一个命令的输入(道方式)。当我们<br /> 要真正用圆括弧和花括弧?如计表辑ּ的优先)Q则需要在其前面加上{<br /> 义符(\)以便让shell知道它们不是用于命o(h)执行的控制所用?br /> <br /> 9.信号<br /> trap命o(h)用于在shellE序中捕捉到信号Q之后可以有三种反应方式Q?br /> (1)执行一D늨序来处理q一信号<br /> (2)接受信号的默认操?br /> (3)忽视q一信号<br /> trap对上面三U方式提供了(jin)三种基本形式Q?br /> W一UŞ式的trap命o(h)在shell接收到signal list清单中数值相同的信号Ӟ<br /> 执行双引号中的命o(h)丌Ӏ?br /> trap 'commands' signal-list<br /> trap "commands" signal-list<br /> Z(jin)恢复信号的默认操作,使用W二UŞ式的trap命o(h)Q?br /> trap signal-list<br /> W三UŞ式的trap命o(h)允许忽视信号Q?br /> trap " " signal-list<br /> 注意Q?br /> (1)对信?1(D违?不能捕捉Q因为shell本n需要捕捉该信号去进行内存的转储?br /> (2)在trap中可以定义对信号0的处?实际上没有这个信?QshellE序在其l止<br /> (如执行exit语句)时发?gu)信号?br /> (3)在捕捉到signal-list中指定的信号q执行完相应的命令之后,如果q些命o(h)没有?br /> shellE序l止的话QshellE序l执行收Ch所执行的命令后面的命o(h)Q这?br /> 很Ҏ(gu)DshellE序无法l止?br /> 另外Q在trap语句中,单引号和双引h不同的,当shellE序W一ơ碰到trap语句Ӟ<br /> 把commands中的命o(h)扫描一遍。此时若commands是用单引hh的话Q那么shell<br /> 不会(x)对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具?br /> 的值来替换?br /> <br /> 10. q行shellE序的方?br /> 执行shellE序的方法有三种Q?br /> (1)sh shellE序文g?br /> 格式为:(x)<br /> bash shell E序文g?br /> q实际上是调用一个新的bash命o(h)解释E序Q而把shellE序文g名作为参C递给它?br /> 新启动的shell去L定的文gQ执行文件中列出的命令,当所有的命o(h)都执行完l束?br /> 该方法的优点是可以利用shell调试功能?br /> (2)sh<shellE序文g?br /> 格式为:(x)<br /> bash<shell E序文g?br /> q种方式是利用输入重定向,使shell命o(h)解释E序的输入取自指定的E序文g?br /> (3)用chmod命o(h)使shellE序成ؓ(f)可执行的<br /> <br /> 11. bashE序的调?br /> bash -选择?shellE序文g?br /> 几个常用的选择Ҏ(gu)Q?br /> -eQ如果一个命令失败就立即退?br /> -nQ读入命令但是不执行它们<br /> -uQ置换时把未讄的变量看作出?br /> -vQ当dshell输入行时把它们显C出?br /> -xQ执行命令时把命令和它们的参数显C出?br /> 上面的所有选项也可以在shellE序内部?#8220;set -选择?#8221;的Ş式引用,?#8220;set +选择?#8221;?br /> 禁止该选择v作用。如果只惛_E序的某一部分使用某些选择Ҏ(gu)Q则可以该部分?br /> 上面两个语句包围h?br /> 1.未置变量退出和立即退?br /> 未置变量退出特性允许用户对所有变量进行检查,如果引用?jin)一个未赋值的变量q止shell<br /> E序的执行。shell通常允许未置变量的用,在这U情况下Q变量的gؓ(f)I。如果设|了(jin)?br /> |变量退出选择,则一旦用了(jin)未置变量显C错误信息,q终止程序的q行。未|变量退<br /> 出选择ؓ(f)“-u”?br /> 当shellq行Ӟ若遇C存在或不可执行的命o(h)、重定向p|或命令非正常l束{情冉|Q如<br /> 果未l重新定向,该出错信息会(x)打印在终端屏q上Q而shellE序仍将l箋(hu)执行。要惛_错误?br /> 生时qshellE序立即l束Q可以?#8220;-e”选项shellE序的执行立即终止?br /> 2.shellE序的跟t?br /> 调试shellE序的主要方法是利用shell命o(h)解释E序?#8220;-v”?#8220;-x”选项来跟t程序的执行?#8220;-v”<br /> 选择shell在执行程序的q程中,把它d的每一个命令行都显C出来,?#8220;-x”选择shell<br /> 在执行程序的q程中把它执行的每一个命令在行首用一?#8220;+”加上命o(h)名显C出来。ƈ把每一个变?br /> 和该变量所取的g昄出来Q因此,它们的主要区别在于:(x)在执行命令行之前?#8220;-v”则打印出?br /> 令行的原始内容,而有“-v”则打印出l过替换后的命o(h)行的内容?br /> 除了(jin)使用shell?#8220;-v”?#8220;-x”选择以外,q可以在shellE序内部采取一些辅助调试的措施?br /> 例如Q可以在shellE序的一些关键地方用echo命o(h)把必要的信息昄出来Q它的作用相当于C?br /> a中的printf语句Q这样就可以知道E序q行C么地方及(qing)E序目前的状态?br /> <br /> 12. bash的内部命?br /> bash命o(h)解释E序包含?jin)一些内部命令。内部命令在目录列表时是看不见的Q它们由shell本n提供?br /> 常用的内部命令有Qecho、eval、exec、export、readonly、read、shift、wait和点(.)?br /> 下面单介l其命o(h)格式和功能?br /> 1.echo<br /> 命o(h)格式Qecho arg<br /> 功能Q在屏幕上打印出由arg指定的字W串?br /> 2.eval<br /> 命o(h)格式Qeval args<br /> 功能Q当shellE序执行到eval语句Ӟshelld参数argsQƈ它们组合成一个新的命令,然后<br /> 执行?br /> 3.exec<br /> 命o(h)格式Qexec 命o(h) 命o(h)参数<br /> 功能Q当shell执行到exec语句Ӟ不会(x)d建新的子q程Q而是转去执行指定的命令,<br /> 当指定的命o(h)执行完时Q该q程Q也是最初的shellq止了(jin)Q所以shellE序中exec<br /> 后面的语句将不再被执行?br /> 4.export<br /> 命o(h)格式Qexport 变量?或:(x)export 变量?变量?br /> 功能Qshell可以用export把它的变量向下带入子shell从而让子进E承父q程中的环境变量?br /> 但子shell不能用export把它的变量向上带入父shell?br /> 注意Q不带Q何变量名的export语句显C出当前所有的export变量?br /> 5.readonly<br /> 命o(h)格式Qreadonly 变量?br /> 功能Q将一个用户定义的shell变量标识Z可变的。不带Q何参数的readonly命o(h)显C出<br /> 所有只ȝshell变量?br /> 6.read<br /> 命o(h)格式Q?br /> read变量名表<br /> 功能Q从标准输入讑֤d一行,分解成若q字Q赋值给shellE序内部定义的变量?br /> 7.shift语句<br /> 功能Qshift语句按如下方式重新命名所有的位置参数变量Q?2成ؓ(f)$1Q?3成ؓ(f)$2……在程序中<br /> 每用一ơshift语句Q都使所有的位置参数依次向左Ud一个位|,q位置参数“$#”减一Q?br /> 直到减到0?br /> 8.wait<br /> 功能Q是shell{待在后台启动的所有子q程l束。Wait的返回值L真?br /> 9.exit<br /> 功能Q退出shellE序。在exit之后可有选择地指定一个数字作回状态?br /> 10.“.”(?<br /> 命o(h)格式Q? ShellE序文g?br /> 功能Qshelld指定的shellE序文gq依ơ执行文件中的所有语句?br /> <br /> 13. Ҏ(gu)参数Q?br /> 1. $*: 代表所有参敎ͼ光隔ؓ(f)IFS内定参数的第一个字?<br /> 2. $@: ?星号cd。不同之处在g参照IFS<br /> 3. $#: 代表参数数量<br /> 4. $?: 执行上一个指令的q回?br /> 5. $-: 最q执行的foreground pipeline的选项参数<br /> 6. $$: 本n的Process ID<br /> 7. $!: 执行上一个背景指令的PID<br /> 8. $_: 昄出最後一个执行的命o(h)</font></span><font class="normalfont"></font></font></font> </span></span> <img src ="http://www.aygfsteel.com/sunxiaobo/aggbug/234513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/sunxiaobo/" target="_blank">Xiaobo Sun</a> 2008-10-15 20:13 <a href="http://www.aygfsteel.com/sunxiaobo/archive/2008/10/15/234513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>umlenkung >> , 2>http://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233461.htmlXiaobo SunXiaobo SunThu, 09 Oct 2008 15:06:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233461.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/233461.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233461.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/233461.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/233461.html umlenkung >> , 2>

Xiaobo Sun 2008-10-09 23:06 发表评论
]]>
linux kernel version >uname -rhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233460.htmlXiaobo SunXiaobo SunThu, 09 Oct 2008 15:04:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233460.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/233460.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233460.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/233460.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/233460.html  uname -r

Xiaobo Sun 2008-10-09 23:04 发表评论
]]>
cdhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233458.htmlXiaobo SunXiaobo SunThu, 09 Oct 2008 14:28:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233458.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/233458.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/10/09/233458.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/233458.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/233458.htmlcd ~ : go to your home directory
cd
- : go to the last directory you were in
cd
.. : go up a directory

Xiaobo Sun 2008-10-09 22:28 发表评论
]]>
umaskhttp://www.aygfsteel.com/sunxiaobo/archive/2008/08/08/220961.htmlXiaobo SunXiaobo SunFri, 08 Aug 2008 10:41:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/08/08/220961.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/220961.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/08/08/220961.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/220961.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/220961.html 2 ) u m a s kgؓ(f)0 2 2 - - - -w- -w-
3) 目录权限rwx r-x r-x (755) q就是目录创建缺省权?br /> 4) 文g权限rw- r-- r-- (644) q就是文件创建缺省权?

Xiaobo Sun 2008-08-08 18:41 发表评论
]]>
Vim cut, copy and pastehttp://www.aygfsteel.com/sunxiaobo/archive/2008/07/11/214284.htmlXiaobo SunXiaobo SunFri, 11 Jul 2008 07:53:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/07/11/214284.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/214284.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/07/11/214284.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/214284.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/214284.html

Xiaobo Sun 2008-07-11 15:53 发表评论
]]>
VM shared folderhttp://www.aygfsteel.com/sunxiaobo/archive/2008/05/18/201268.htmlXiaobo SunXiaobo SunSun, 18 May 2008 09:10:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/05/18/201268.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/201268.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/05/18/201268.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/201268.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/201268.html 定以后Qvmware?x)把q个文g夹自动mount?mnt/hgfs目录?

Xiaobo Sun 2008-05-18 17:10 发表评论
]]>
fstabhttp://www.aygfsteel.com/sunxiaobo/archive/2008/01/09/174045.htmlXiaobo SunXiaobo SunWed, 09 Jan 2008 08:16:00 GMThttp://www.aygfsteel.com/sunxiaobo/archive/2008/01/09/174045.htmlhttp://www.aygfsteel.com/sunxiaobo/comments/174045.htmlhttp://www.aygfsteel.com/sunxiaobo/archive/2008/01/09/174045.html#Feedback0http://www.aygfsteel.com/sunxiaobo/comments/commentRss/174045.htmlhttp://www.aygfsteel.com/sunxiaobo/services/trackbacks/174045.htmlboot process, file systems listed in /etc/fstab are automatically mounted (unless they are listed with the noauto option).
device       /mount-point fstype     options      dumpfreq     passno
device

A device name (which should exist), as explained in Section 18.2.

mount-point

A directory (which should exist), on which to mount the file system.

fstype

The file system type to pass to mount(8). The default FreeBSD file system is ufs.

options

Either rw for read-write file systems, or ro for read-only file systems, followed by any other options that may be needed. A common option is noauto for file systems not normally mounted during the boot sequence. Other options are listed in the mount(8) manual page.

dumpfreq

This is used by dump(8) to determine which file systems require dumping. If the field is missing, a value of zero is assumed.

passno

This determines the order in which file systems should be checked. File systems that should be skipped should have their passno set to zero. The root file system (which needs to be checked before everything else) should have its passno set to one, and other file systems' passno should be set to values greater than one. If more than one file systems have the same passno then fsck(8) will attempt to check file systems in parallel if possible.

Consult the fstab(5) manual page for more information on the format of the /etc/fstab file and the options it contains.

3.6.2 The mount Command

The mount(8) command is what is ultimately used to mount file systems.

In its most basic form, you use:

# mount device mountpoint

There are plenty of options, as mentioned in the mount(8) manual page, but the most common are:

Mount Options

-a

Mount all the file systems listed in /etc/fstab. Except those marked as “noauto”, excluded by the -t flag, or those that are already mounted.

-d

Do everything except for the actual mount system call. This option is useful in conjunction with the -v flag to determine what mount(8) is actually trying to do.

-f

Force the mount of an unclean file system (dangerous), or forces the revocation of write access when downgrading a file system's mount status from read-write to read-only.

-r

Mount the file system read-only. This is identical to using the ro (rdonly for FreeBSD versions older than 5.2) argument to the -o option.

-t fstype

Mount the given file system as the given file system type, or mount only file systems of the given type, if given the -a option.

“ufs” is the default file system type.

-u

Update mount options on the file system.

-v

Be verbose.

-w

Mount the file system read-write.

The -o option takes a comma-separated list of the options, including the following:

noexec

Do not allow execution of binaries on this file system. This is also a useful security option.

nosuid

Do not interpret setuid or setgid flags on the file system. This is also a useful security option.




Xiaobo Sun 2008-01-09 16:16 发表评论
]]>
վ֩ģ壺 | | ¡| | | | | | | ɽ| ػ| Ҵ| | ؿ˹| Դ| | | ɳƺ| | | | | | | ľ| Т| Ī| | Ǩ| | | ɽ| | | з| | | | | | |