欢迎光临、这里是ZT测试空间,希望大家互相共享资源,给我建议和留言!MSN:zhangtieing@hotmail.com

发布新日志

  • Vmware5.0 下安装NetWare6.5全攻略(转)

    2008-01-04 18:11:52

    该系统应用较少,没有系统,出于系统爱好,收藏备查,转自:http://bbdd.bokee.com/


    1、  至于为什么要在vmware里面安装netware,偶也不知道,这个完全是个人自由,希望想钻牛角尖的人马上离开这个帖子。在虚拟机里装服务器都是为了测试和学习,要是想真正应用的话,还是掏荷包买个服务器吧……

    2、  至于vmwarenetware如何获得,呵呵,秘密~~~

    3、  开始安装

    4、  首先,在vmware新建一个虚拟机,注意,要选择netware那个大类,当然,您要是喜欢用DOS的也成,反正底层应该差不多撒(不懂瞎掰的,因为简单看了一下netwaredrdos,感觉结构和文件功能都和ibmdos很像,况且以前的netware也是靠dos起来的……),然后选择小类,就netware6吧!

    5、  接下来都挺简单的,就不细讲了,主要是硬盘就默认用scsi的吧(已经是3.X的年代了,不用担心要先装dos,而dos不认识scsi设备??)内存512M(不要小气~小了待会它不干的!偶的机子1G内存,吼吼~)

    6、  OK,把光盘扔进去,引导……然后偶看着你做,你肯定出错,无暇米捏?vmware报警啦!说该guest系统访问了XXX的内存(典型的多管闲事,虽然是为了我们的安全考虑^_^),我们先看看vmware公司自己怎么说的:

    7、 

    PAE-Enabled Guest Operating Systems  

    Depending upon the version of the VMware product you are running, PAE-enabled guest operating systems may not be supported.

    If you are running VMware ESX Server, VMware GSX Server 2.0.1 or earlier or VMware Workstation 3.x or earlier, PAE-enabled guest operating systems are not supported, with one exception: NetWare 6 will work as a guest operating system when created with VMware GSX Server 2.0.1.

    If you are running GSX Server 2.5 and are trying to start a Linux or NetWare 6 guest operating system, check the virtual machine's configuration file (.vmx on Windows hosts, .cfg on Linux hosts) and look for the following line:

    paevm=false

    If the line appears, change it to

    paevm=true

    If you are running GSX Server 2.5 and are trying to start any other PAE-enabled guest operating system, open the virtual machine's configuration file and add the following line anywhere within the file:

    paevm=true

    Save the configuration file and try starting the virtual machine again.

    If your problem persists, file a support request.

    看明白了吧?就是要在相应文件(.vmx on Windows hosts, .cfg on Linux hosts)里面加一句:paevm=true

    8、  再次启动安装,就8会报错了

    9、  I,装个新的^_^

    10、              一路auto进去,知道看到熟悉的画面,是不是和以前的netware安装很像?

    11、              继续配置,其实都是虚拟机,默认的就OK

    12、              接下来它就开始装基本系统部分了(不知道这样定义准确不,好像苹果机安装的时候也是这样叫的^_^

    13、              复制完成后选网卡,要选PCnet-FX那个哦?因为其他的偶没试过!哈哈~

    14、              继续复制,完成sys卷的部分(好像没有网卡就不能装这个部分?那用来干什么?)

    15、              复制完自动进入……图形界面(解放了~)

    16、              选择要安装的服务,这次all算了,反正测试,不装白不装~!

    17、              放入第二张盘,等待……(什么时候光纤硬盘也几百块就好了,sigh

    18、              敲一些配置信息,这个不用多说了……配置中,感觉虚拟机跑什么都慢。好多的口令要设置啊……罗嗦。

    19、              配置完了就copy files……郁闷捏,那么慢吞吞。

    20、              这次比前面时间都长,完成后会有提示框,要求弹出移动媒体,然后重启。

    21、              现在已经装完了,等着重启完就可以进入X了(不懂netware,应该称呼那个桌面环境可以为X吧)

    22、              别急,进入之后要装vmwaretools哦,不然切换鼠标不累啊?

    23、              点击vm-安装tools

    24、              然后用您所掌握的任何方法运行光驱里面的相应文件,最快的就是在文件浏览器里面找到vmwtools进去,找到setup.ncf,右键,执行,over。看看你的鼠标移动出来?

    25、              接下来……还能干吗?做试验呗,自己接进ipx协议的tree(其实早就支持ip了),尽情感受netware的魅力吧(感觉象在做广告)。

  • Linux内核编译过程 (转载)

    2007-12-26 15:07:51

    转载:http://linux.chinaunix.net/bbs/thread-208791-1-1.html
    菜鸟编译Linux内核               
         双眼皮的猪         
      菜鸟俺,最近研究了一下Linux内核的编译,有些许心得,望同大家分享一下,故有此文…我们这里要谈的不涉及到源码,只是一些内核编译的步骤及相关知识…因为本人是菜鸟。所以,也就希望和菜鸟们分享一下…
    首先,您要确定您有一台装有Linux的系统,编译内核可以在本机上直接对本机内核进行编译,也可以从网上下载内核在其基础上进行编译.我们这里详细讲一下升级内核的方法,
    您可以从www.kernel.org下载到最新的Kernel版本,我们这里以RedHat9为例(其他版本其实也都一样,只是在make menuconfig中有点不同),详细讲一下内核编译的步骤 :
    首先,确认您是以root 用户登陆.把内核源码cp到/usr/src目录底下(请确认您是以root的身份在进行操作,否则会返回Permission Denied的提示):
    mkdir /usr/src/linux-2.4.22
    cp 2.4.22.tar.bz2 /usr/src/linux-2.4.22 (我用的是2.4.22的kernel)
    解压缩之,熟悉linux系统的朋友应该会知道:
    bunzip2 ***.tar.bz2 | tar xvf
    进入到/usr/src/linux-2.4.22目录,,请确定您是在此目录下操作,而且保证您所敲入的命令是正确的,不然会返回No rule to make target ***,stop类似的错误提示,这可是菜鸟们所要注意的哦。不然开头搞不好。后面就不用谈了哦…
    1#cd /usr/src/linux-2.4.22
    2#make mrproper

    其实这个步骤是可以不用要的,这个目的是清除原先此目录下残留的.config和.o(object文件),如果我们是刚下载的源码,那么这一步您就可以 省了:),但是如果您已经编译过多次内核的话,这一步可是一定要的哦,不然以后出现很多小问题,可别怨我没告诉你….config文件我们会在后面提到…
    3#make menuconfig或make config或make xconfig
    这就开始编译内核了,打起十二分精神,编译不好,系统是无法启动的啦.小心应付,其实这个步骤还有其他两种方式,make config以及make xconfig,make config是一个一个的回答问题,命令行方式,您如果回答错了一个,您就不能改正了哦(所以不推荐这种编译方式),make menuconfig和make xconfig提供了更友好的操作方式,不过make menuconfig需要ncurse包,而make xconfig也需要某个东东,好象是tk,忘记了,一般都安装了,俺就不提了,如果没有您可没法运行的哦.什么你不知道什么是ncurse和tk是什 么?那我就不说了,去www.google.com去搜索一下吧...
    这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…
    这个不是这个帖子的主题(其实我很想写的,但是没人合作,一个人写又太累,再加上我最近也忙考试,所以…)所以我们就略过哦…
    在make menuconfig中,有的让您选择
  • , 有的让您选择[M],有的让你选择[],*表示选中直接加载进kernel,而M则表示会在后面的make modules中编译成modules,让您随时可以通过insmod和modprobe调入内核…个人认为Linux的这个功能确实非常非常的棒…而这 可是其他操作系统所没有的哦. ..而make *config的目的就是生成.config文件.至于想知道.config文件是干啥子的,看一下就知道了…J
    这个步骤完成之后,系统会提醒您,next step you should run “make dep”
    4#make dep  (一到两分钟)
    在确定要编译哪些东东之后(make *config),这个要确定依赖性,这个东东,手工也可以完成的,只是….怕您要把什么东东都放下,然后花上十天半个月的来搞,还把您忙的焦头烂额,还 会出错,不过我们用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了…
    5#make clean  (少于一分钟)
    清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…
    6#make bzImage(15分钟左右)-
    哦,这个可是最最最重要的啦.这个就是生成您的新核心了,不要告诉我您不知道核心是什么啊,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..

    其实可以是make zImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用make zImage,如果比640K大,那就要用make bzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左右. …我是菜鸟,本帖子也是为我一样的菜鸟所写,所以. ..咱们就默认make bzImage…
    还要注意哦,这段时间你是没法做事的,你会看见屏幕上一行一行的字往下跑,不用担心哦,你可以选择把这些标准输出上的东东都重定向到/dev/null去 哦,这样您就看不到这些东东了,当然,你也可以把它放在背景执行啊,在运行要开始的时候在后面加上一个&符号,这个表示是后台运行…如果您怕这些 会对您编译内核有什么影响(其实没什么影响哦),那您干脆就这样,按Alt+F2,直接打开另一个虚拟终端,在那里边做事,等到编译完的时候。机器会咚的 一声通知您的哦,您要真不想等的话,就去玩会吧,听听歌什么的,过会再回来,这里可是考验您耐心的时候哦,如果这您都没耐心,那后面还有个耗时的步骤哦, 还是忍忍吧,为了不让系统浪费资源,你还是忍忍哦,成功后您一定会很高兴的…
    假如您的内核现在已经编译好了,当然越小越好哦J,这时候系统会有个提示编译后的bzImage放到哪里去了,提示最后几行,已经告诉了您的新编译出的核 心位置啊,一般都在这里哦(我这里是RedHat9),/usr/src/linux-2.4.22/arch/i386/boot/,这时候您要做的就 是把它放到/boot目录底下去哦,不然系统可没法启动的 …
    #cp /usr/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22
    (这里其实已经把bzImage更名为vmlinuz-2.4.22,呆会在/boot/grub/grub.conf里就指定这个新内核)

    7#make modules(耗费时间取决于您所选择编译为modules的数量)
    哇哇,又一个耗费时间的步骤来了,您还是找点什么做做吧,估计也要好久哦,大概20分钟吧,这个步骤就是把您在make menuconfig里边所选择为M的东东,全部编译成模块并放在/usr/src/linux-2.4.22/下…如果你选择的M比较多的话,还是…去 玩会吧,家务没做啊?功课没做啊什么的?不过如果您比较喜欢把所有东东都编进内核的话,那就不需要多长时间,少选一些为M,这样很快就可以完成,我的只用 了一分钟就完成了,不过如果您有很多不知道而选择默认的话,那恐怕就要好花时间了. ..
    8#make modules_install
    hoho,这里可是安装module的步骤了,您所选择的模块编译完成后都放在/usr/src/linux-2.4.22某子目录下,哪个子目录您看一 下就知道了,make modules之后会有提示的..我也忘记了,呵呵:),这多不好,而insmod以及相关指令都是从/lib/modules/linux- 2.4.22下取module的啊,这个指令就是把编译好的mod放到/lib/modules下去的哦,如果开始没有Linux-2.4.22目录, (也就是说您是第一次编译2.4.22的内核),那么这条指令就会自动创建该目录,如果已经有了。那就会把编译后的内核放进该目录 …您以后要把mod调进kernel的时候(insmod,modprobe)都从这里寻找.o的哦…
    注意哦,如果你用的是SCSI硬盘并且采用的是ext3分区格式的话,请注意,您一定要制作initrd.img(因为SCSI卡的驱动包括在这个里边),如果你使用的是IDE硬盘,您可以跳过这一步,当然,您要是有耐心的话,这里学习一下也没什么坏处哦
    mkinitrd可以制作initrd.img,一般是这么使用的,如果想具体了解的话,可以man mkinitrd,如果只想搞个initrd.img出来的话,那就mkinitrd /boot/initrd-custom.img 2.4.22就在/boot目录下创建了一个initrd-custom.img文件,也就是初始化镜像…(initialed ramdisk)…里边主要有一些驱动,因为放在内核中就显得过大,所以编译进initrd.img,在启动中释放…而这个2.4.22就表示/lib /modules下面的2.4.22目录了…
    到这里,以下就有两种做法哦…
    一  手动更新System.map文件
    它是当前正在运行的kernel的fuctions的说明,如果您编译内核后不更新System.map,如果碰到问题.,Trouble shooting就很困难了哦,您可有可能遇见很多烦人的信息哦,所以我们还是手动更新一次哦,也蛮简单的…
    #cp /usr/src/linux-2.4.22/System.map /boot/System.map
    系统会提示您:
    Overwrite the ‘boot/System.map’
    敲入Y,回车
    二 make install(该动作自动完成initrd vmlinuz system 三文件的创建,复制到/boot下,并再grub中自动添加一条新的内核的引导记录,偷懒可以用一下)
    说到make install我们这里又有点话要说哦,make install就相当于一个自动化的过程啦,因为其他东东它都会帮您做好的,如果您确实比较懒,或者已经对前边的步骤已经很没耐心了,您就直接执行此步骤 吧…当然您可以很快做好新系统了,而且可以重新从新内核启动哦,但是您可能对这中间发生的事情就不明白了哦,小时侯上课的时候老师谈什么要授之以渔,而不 要授之以鱼,没办法。您要是觉得麻烦,俺就省了,俺手还觉得累,呵呵:)
    还是谈谈这个过程吧,这期间,系统会把您的当前release版本号后面加上一个custom然后写到grub.conf里边去,重新启动后您就可以看到2.4.22custom的选单了 …
    至于这个文件名是怎么决定出来的呢?您可以看一看/usr/src/linux-2.4.22哦,里边有个Makefile,您试一下
    #head –n 5 Makefile
    相信你已经看出来了吧…这也就是命名的原因啦,于是您也可以自己修改您的Linux哦…自己custom一下release名称岂不爽哉…
    从以上步骤来看,基本上已经没有什么问题了,当然,请确认您在make menuconfig里边没有做过任何错误的事情哦,不然重新启动后,依然引导不了的,譬如fs里边一定要选中VFS,EXT3编译为M,因为现在系统一 般都采用了ext3格式,您要是漏掉这个东东,加载不了分区,可别怨我没告诉你哦,当然second extended fs更是一定要选啦:)
    我在编译的历史中曾经有VFS:Unable to mount root fs on 00:00的经历,一直卡在那里,好久都没解决啊,不过后来终于发现应该是fs的问题,或者是您的root分区没指定好啊..
    看了这么多。相信您也很累了,帖子也快到头了,因为马上就要完了…(如果上边您选择了make install,这里您就不用看了哦)最最最最后一点,我们要修改Grub.conf(如果您采用的是grub来引导的话,抱歉我不懂lilo,因为我也 是菜鸟…),使系统在重新启动后可以从新的内核启动…
    #vi /boot/menu.lst
    menu.lst跟grub.conf内容是一样的哦,是个link,不过这里边可是彩色的文字,我很喜欢,就编辑它了..
    在原来的基础上添加一行:
    title  new Linux(2.4.22)    //这里您可以自己命名,也就是出现在grub启动菜单里的东东哦
    kernel /vmlinuz-2.4.22 ro root=LABEL=/
    上边这行是指定kernel 的路径,记得我们前边生成一个vmlinuz-2.4.22的新内核吗?对了哦,就是它了…这里指定为它后,在您选择以这个选项启动后,就会起用这里的新内核了.
    后面跟着的ro 表示是readonly,就是只读的意思咯,root=LABEL=/是指定路径
    initrd /initrd.img
    这里要指定为您所制作的initrd.img哦,如果这个制作错误的话,可启动不了的哦…当然,这说的是您使用的是SCSI硬盘,如果是IDE硬盘的话。 您可以在这里写上no initrd取代,这样系统就不会使用intird啦,当然这个最好还是带着吧,前边我们也讲了它的作用了,主要还是一些驱动….以及系统初始化的程序…
    三内核文件介绍参考:http://hi.baidu.com/shenlang277/blog/item/fb948202fafd760c4bfb51de.html
  • 初尝 linux内核编译 (成功)

    2007-12-20 21:56:10

       a、为了好玩,赶潮流或做实验,那就可以大胆的进行下面的操作!
      b、为了支持新硬件,为了得到更好的性能,那么请问:有没有已经对系统进行了备份!
    内核参数请参考:http://lamp.linux.gov.cn/Linux/kernel_options.html  
    http://blog.csdn.net/lengxingfei/archive/2007/10/02/1809585.aspx
    http://linux.chinaunix.net/bbs/viewthread.php?tid=632835&extra=page%3D1%26amp%3Bfilter%3Ddigest
      1、选择下载内核版本
      http://www.kernel.org/pub/linux/kernel/ 这里有最新的内核版本
      因为红旗3.0内核版本为V2.4.17-1 我们就选择一个V2.4.20的最新稳定内核来进行升级
      下载一个完整内核文件名为linux-2.4.20.tar.bz2
      a) 在任何一个子目录下(但通常是在/usr/src/下,我们先在/root下解开)解开新的内核源程序:
      # bzip2 -d linux-2.4.20.tar.bz2 ;解压将会在当前目录下生成linux-2.4.20.tar
      # tar xvf linux-2.4.20.tar ;解包
      # mv linux-2.4.20 /usr/src ;把解开的数据移动到/usr/src目录下
      b) 建立一个符号连接到你的新内核目录,这一步可以不做,只是为了操作方便
      # ln -s /usr/src/linux-2.4.20 /usr/src/linux ;以后对新内核的访问就通过linux 这个连接进行
      c)配置内核前的准备工作
     配置内核前的准备工作
      # cd /usr/include
      
       # rm -rf asm linux scsi  asm-generic(或改名保存)
      
      # ln -s /usr/src/linux/include/asm-i386 asm
      
         # ln -s /usr/src/linux/include/linux linux
        # ln -s /usr/src/linux/include/scsi scsi
          # ln -s /usr/src/linux/include/asm-generic asm-generic
      d)配置内核
      我是在不删除原有内核的情况下进行编译,如果你不想保留原有内核,建议先做好启动盘
      启动盘制作:#mkbootdisk --device /dev/fd0 `uname -r` ;`uname -r` 是取得当前内核版本号
      对于我们红旗3.0来说可以使用 #mkbootdisk --device /dev/fd0 2.4.17-1
      重新启动机子﹐确定启动盘能正确引导。
      转到目录/usr/src/linux下 进行编译配置
      1)#make mrproper ;清除任何将引起问题的附加额外源代码 (建议执行)
      2)#make xconfig ;这是在X window下的图形界面,很方便
      或 make menuconfig ;如果是在字符下建议使用
      或 make config ;这个方法不建议使用很麻烦, 很古老!
       或 make  oldconfig ;如果有很小的改动,可以使用,使用得不多
      选择好新内核中要开启的选项,;除了【】【*】外,【M]表示模块被动态编译,需要时可以载入
         这一步将/usr/src/linux目录下生成一个配置文件.config文件
      3)#make dep ;确定那些文件已经改动,那些需要重新编译;确保关键文件在正确的位置.
      4)#make clean ;删除那些不需要的旧文件(例如:内核原有的拷贝);确保所有东西均保持最新状态.
      5)#make zImage ;将一个新内核建立在一个压缩文件中(会生成/usr/src/linux/arch/i386/boot/zImage文件)
      ;注意有大小写区分
      如果提示System is too big.出错进用make bzImage进行压缩建立(会生成/usr/src/linux/arch/i386/boot/bzImage文件)
      e)如果你用了模块,你还需要建造和安装模块
      make modules  ;编译选择的模块
      make modules_install  ;将编译后的模块转移到系统的标准位置
      depmod -a  ;分析可载入模块的相依性
      f)安装新内核
      复制内核文件到/boot目录
      # cp /usr/src/linux/System.map /boot/System.map-2.4.20  ;特定内核的内核符号表
        # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.20
      编辑/etc/lilo.conf文件添加
      image=/boot/vmlinuz-2.4.20
      label=linux-2.4.20
      root=/dev/hda1 ;这一项可以参考原来的root项
      #lilo ;只有执行了lilo命令之后﹐ LILO 才会真正装到系统之上
       grub只需改相应的内核名为新的即可

      g)重启
      #shutdown -r now
      提示:开机启动LILO、出现系统选择时选择“linux-2.4.20”用新内核来启动我们的Linux
      进入后可以用#uname -r 来查看当前的内核版本
      h)问题
      有可能如果系统不能正常启动或有些设备不认时,可能是我们在make menuconfig时有些选择不正确,只有在来从这一步来一次!
      内核升级不可能一次成功,除非您对内核中的每个选项非常了解
      
      而且升级后是否稳定,这也是个问题因为有些问题不可能一下子就会发生,可能要过很长时间才会暴露出来!
      但从内核升级的过程中您将会更加了解Linux的工作流程,希望以上的内容对大家在学习中有所帮助!

    附录:vmware下面编译内核必选的选项
    如果你在vmware下重新编译内核,硬盘用的是scsi的,以下选项必选:
    Device Drivers  --->SCSI device support  ---><*>   SCSI disk support
    Device Drivers  --->SCSI device support  --->SCSI low-level drivers  ---> <*> BusLogic SCSI support

    Device Drivers  ---> Fusion MPT device support  ---><M> Fusion MPT (base + ScsiHost) drivers和<M>   Fusion MPT misc device (ioctl) driver(这个要不要,不确定)
    注意:只能选模块方式,直接编译进内核,就出错,不知道为什么,这个浪费了我好多时间才找到,编译了几十次的成果。
        出错信息如下:No module mptbase found for kernel vmware。。。。。。。

    Device Drivers  ---> USB support  ---><*>   USB Mass Storage support

    Device Drivers  ---> Networking support  --->Ethernet (10 or 100Mbit)  ---> <*>   AMD PCnet32 PCI support(看到文章说这个必选,应该是网卡吧)
  • Linux 下mysql的安装及配置

    2007-11-15 13:55:44

    一,前言

    二、安装Mysql

    1、下载MySQL的安装文件
    安装MySQL需要下面两个文件:
    MySQL-server-5.0.9-0.i386.rpm
    MySQL-client-5.0.9-0.i386.rpm
    下载地址为:http://dev.mysql.com/downloads/mysql/5.0.html,打开此网页,下拉网页找到“Linux x86 RPM downloads”项,找到“Server”和“Client programs”项,下载需要的上述两个rpm文件。
    2、安装MySQL
    rpm文件是Red Hat公司开发的软件安装包,rpm可让Linux在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是 –ivh ,其中i表示将安装指定的rmp软件包,V表示安装时的详细信息,h表示在安装期间出现“#”符号来显示目前的安装过程。这个符号将持续到安装完成后才停止。
    1)安装服务器端
    在有两个rmp文件的目录下运行如下命令:
    [root@test1 local]# rpm -ivh MySQL-server-5.0.9-0.i386.rpm
    显示如下信息。
    warning: MySQL-server-5.0.9-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
    Preparing... ########################################### [100%]
    1:MySQL-server ########################################### [100%]
    。。。。。。(省略显示)
    /usr/bin/mysqladmin -u root password 'new-password'
    /usr/bin/mysqladmin -u root -h test1 password 'new-password'
    。。。。。。(省略显示)
    Starting mysqld daemon with databases from /var/lib/mysql
    如出现如上信息,服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开,如打开表示服务已经启动,安装成功。Mysql默认的端口是3306。
    [root@test1 local]# netstat -nat
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
    上面显示可以看出MySQL服务已经启动。
    2)安装客户端
    运行如下命令:
    [root@test1 local]# rpm -ivh MySQL-client-5.0.9-0.i386.rpm
    warning: MySQL-client-5.0.9-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
    Preparing... ########################################### [100%]
    1:MySQL-client ########################################### [100%]
    显示安装完毕。
    用下面的命令连接mysql,测试是否成功。
    三、登录MySQL

    登录MySQL的命令是mysql, mysql 的使用语法如下:
    mysql [-u username] [-h host] [-p[password]] [dbname]
    username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。
    [root@test1 local]# mysql
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 1 to server version: 4.0.16-standard
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    出现了“mysql>”提示符,恭喜你,安装成功!
    增加了密码后的登录格式如下:
    mysql -u root -p
    Enter password: (输入密码)
    其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。

    注意:这个mysql文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql不是一个文件。

    四、MySQL的几个重要目录

    MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。

    下面就介绍一下这几个目录。

    1、数据库目录
    /var/lib/mysql/

    2、配置文件
    /usr/share/mysql(mysql.server命令及配置文件)

    3、相关命令
    /usr/bin(mysqladmin mysqldump等命令)

    4、启动脚本
    /etc/rc.d/init.d/(启动脚本文件mysql的目录)
    五、修改登录密码

    MySQL默认没有密码,安装完毕增加密码的重要性是不言而喻的。

    1、命令
    usr/bin/mysqladmin -u root password 'new-password'
    格式:mysqladmin -u用户名 -p旧密码 password 新密码

    2、例子
    例1:给root加个密码123456。
    键入以下命令 :
    [root@test1 local]# /usr/bin/mysqladmin -u root password 123456
    注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

    3、测试是否修改成功
    1)不用密码登录
    [root@test1 local]# mysql
    ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
    显示错误,说明密码已经修改。
    2)用修改后的密码登录
    [root@test1 local]# mysql -u root -p
    Enter password: (输入修改后的密码123456)
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 4 to server version: 4.0.16-standard
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    成功!
    这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。

    六、启动与停止

    1、启动
    MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可。
    [root@test1 init.d]# /etc/init.d/mysql start

    2、停止
    /usr/bin/mysqladmin -u root -p shutdown

    3、自动启动
    1)察看mysql是否在自动启动列表中
    [root@test1 local]# /sbin/chkconfig –list
    2)把MySQL添加到你系统的启动服务组里面去
    [root@test1 local]# /sbin/chkconfig – add mysql
    3)把MySQL从启动服务组里面删除。
    [root@test1 local]# /sbin/chkconfig – del mysql
    七、更改MySQL目录

    MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:

    1、home目录下建立data目录
    cd /home
    mkdir data

    2、把MySQL服务进程停掉:
    mysqladmin -u root -p shutdown

    3、把/var/lib/mysql整个目录移到/home/data
    mv /var/lib/mysql /home/data/
    这样就把MySQL的数据文件移动到了/home/data/mysql下

    4、找到my.cnf配置文件
    如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
    [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

    5、编辑MySQL的配置文件/etc/my.cnf
    为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。 修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
    vi my.cnf (用vi工具编辑my.cnf文件,找到下列数据修改之)
    # The MySQL server
    [mysqld]
    port = 3306
    #socket = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
    socket = /home/data/mysql/mysql.sock (加上此行)

    6、修改MySQL启动脚本/etc/rc.d/init.d/mysql
    最后,需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
    [root@test1 etc]# vi /etc/rc.d/init.d/mysql
    #datadir=/var/lib/mysql (注释此行)
    datadir=/home/data/mysql (加上此行)

    7、重新启动MySQL服务
    /etc/rc.d/init.d/mysql start
    或用reboot命令重启Linux
    如果工作正常移动就成功了,否则对照前面的7步再检查一下。

    八、MySQL的常用操作

    注意:MySQL中每个命令后都要以分号;结尾。

    1、显示数据库
    mysql> show databases;
    +----------+
    | Database |
    +----------+
    | mysql |
    | test |
    +----------+
    2 rows in set (0.04 sec)
    Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。

    2、显示数据库中的表
    mysql> use mysql; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
    Database changed

    mysql> show tables;
    +-----------------+
    | Tables_in_mysql |
    +-----------------+
    | columns_priv |
    | db |
    | func |
    | host |
    | tables_priv |
    | user |
    +-----------------+
    6 rows in set (0.01 sec)

    3、显示数据表的结构:
    describe 表名;

    4、显示表中的记录:
    select * from 表名;
    例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。
    Select * from user;

    5、建库:
    create database 库名;
    例如:创建一个名字位aaa的库
    mysql> create databases aaa;
    6、建表:
    use 库名;
    create table 表名 (字段设定列表);
    例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
    use aaa;
    mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
    可以用describe命令察看刚建立的表结构。
    mysql> describe name;

    +-------+---------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+----------------+
    | id | int(3) | | PRI | NULL | auto_increment |
    | xm | char(8) | YES | | NULL | |
    | xb | char(2) | YES | | NULL | |
    | csny | date | YES | | NULL | |
    +-------+---------+------+-----+---------+----------------+

    7、增加记录
    例如:增加几条相关纪录。
    mysql> insert into name values('','张三','男','1971-10-01');
    mysql> insert into name values('','白云','女','1972-05-20');
    可用select命令来验证结果。
    mysql> select * from name;
    +----+------+------+------------+
    | id | xm | xb | csny |
    +----+------+------+------------+
    | 1 | 张三 | 男 | 1971-10-01 |
    | 2 | 白云 | 女 | 1972-05-20 |
    +----+------+------+------------+

    8、修改纪录
    例如:将张三的出生年月改为1971-01-10
    mysql> update name set csny='1971-01-10' where xm='张三';

    9、删除纪录
    例如:删除张三的纪录。
    mysql> delete from name where xm='张三';

    10、删库和删表
    drop database 库名;
    drop table 表名;

    九、增加MySQL用户

    格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
    例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:

    mysql> grant select,insert,update,delete on *.* to user_1@"%" Identified by "123";
    例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例2。

    例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过 MYSQL主机来操作aaa库。

    mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";

    用新增的用户如果登录不了MySQL,在登录时用如下命令:

    mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)

    十、备份与恢复

    1、备份

    例如:将上例创建的aaa库备份到文件back_aaa中

    [root@test1 root]# cd /home/data/mysql (进入到库目录,本例库已由val/lib/mysql转到/home/data/mysql,见上述第七部分内容)
    [root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa

    2、恢复

    [root@test mysql]# mysql -u root -p ccc < back_aaa

    另外操作:修改mysql字符编码成为UTF8

    启动mysql后,以root登录mysql
    isher@isher-ubuntu:~$ mysql -u root
    >show variables like 'character%'; #执行编码显示
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | latin1 |
    | character_set_connection | latin1 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | latin1 |
    | character_set_server | latin1 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    在某些时候,我们续要修改mysql默认数据库的编码,以保证某些迁移的程序可以正常显示,编辑my.cnf文件进行编码修改,windows可以直接用Mysql Server Instance Config Wizard 进行设置

    在linux下修改3个my.cnf的1个/etc/mysql/my.cnf文件

    找到客户端配置[client] 在下面添加
    default-character-set=utf8 默认字符集为utf8
    在找到[mysqld] 添加
    default-character-set=utf8 默认字符集为utf8
    init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

    修改好后,重新启动mysql 即可,查询一下show variables like 'character%';
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    此方法用于标准mysql版本同样有效,对于/etc/my.cnf文件,需要从mysql/support-files的文件夹cp my-large.cnf一份到/etc/my.cnf。

    转自:http://www.linuxdiyf.com/viewarticle.php?id=66623,试验成功,详细全面,推荐!

  • LINUX 下Apache 2.2+ MySQL 5.0+PHP 5.0的安装与配置

    2007-11-15 13:51:32

    1.安装环境
    操作系统:Red Hat Linux Enterprise AS 4.0
    数据库:MySQL 5.0.24
    Web服务器:Apache 2.2.3
    脚本语言:PHP 5.1.6

    2.安装MySQL 5.0.24
    -------------下载软件包mysql-5.0.24.tar.gz,地址http://www.mysql.com-------------
    # tar zvxf mysql-5.0.24.tar.gz //

    解压缩
    # cd mysql-5.0.24 //进入解压缩后的文件目录
    # ./configure --prefix=/usr/local/mysql \ //设定安装目录
    --enable-thread-safe-client \ //编译线程安全版的客户端库
    --without-debug \ //关闭debug功能
    --localstatedir=/data/mysqldata \ //设定数据库文件目录
    # make //编译
    # make install //安装
    # /usr/local/mysql/bin/mysql_install_db //初始化授权
    # chown –R root:root /usr/local/mysql //文件属性改为root用户
    # cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf //复制配置文件
    ----------------------------------启动MySQL服务----------------------------------
    # /usr/local/mysql/bin/mysqld_safe --user=root & //启动MySQL
    ----------------------------------修改MySQL密码----------------------------------
    # /usr/local/mysql/bin/mysqladmin -uroot password mysqlsecret //修改密码
    ----------------------------------关闭MySQL服务----------------------------------
    # /usr/local/mysql/bin/mysqladmin -uroot -pmysqlsecret shutdown //关闭MySQL

    3.安装Apache 2.2.3
    -------------下载软件包httpd-2.2.3.tar.gz,地址http://www.apache.org-------------
    # tar zvxf httpd-2.2.3.tar.gz
    # cd httpd-2.2.3
    # ./configure --prefix=/usr/local/apache \
    --enable-module=most \
    --enable-shared=max
    # make
    # make install
    ----------------------------------启动Apache服务----------------------------------
    # /usr/local/apache/bin/apachectl start
    ----------------------------------关闭Apache服务----------------------------------
    # /usr/local/apache/bin/apachectl stop
    ----------------------------------重启Apache服务----------------------------------
    # /usr/local/apache/bin/apachectl restart

    4.安装PHP 5.1.6
    -------------------下载软件包php-5.1.6.tar.gz,地址www.php.net--------------------
    # tar zvxf php-5.1.6.tar.gz
    # cd php-5.1.6
    # ./configure --prefix=/usr/local/php \
    --with-mysqld=/usr/local/mysql \
    --with-apxs2=/usr/local/apache/bin/apxs
    # make
    # make install
    # cp php.ini-dist /usr/local/php/lib/php.ini

    5.配置Apache服务的httpd.conf文件
    *在LoadModule处添加 LoadModule php5_module module/libphp5.so
    *在DirectoryIndex处添加 index.php
    *在AddType application处添加
    AddType application/x-httpd-php .php .phtml
    AddType applicatoin/x-httpd-php-source .phps

    转自:http://www.linuxdiyf.com/viewarticle.php?id=65597,经试验成功,精简推荐!

  • Linux进行磁盘配额quota的设置

    2007-11-14 18:32:26

    先看内核是否支持

      [root@panda redhat]# grep CONFIG_QUOTA /boot/config-2.6.9-5.EL

      CONFIG_QUOTA=y
      CONFIG_QUOTACTL=y

      就代表是支持的

    通过quota进行磁盘配额,可以控制使用者对磁盘空间和文件的控制,我们以一个实例作为说明,对2个使用者user01、user02分别进行磁盘使用空间和创建文件的限制。
    首先,创建一个新的分区,将/tmp挂载在新的分区。
    #fdisk /dev/hda

    创建后执行:

    #partprobe
    重新写分区表

    #mkfs –t ext3 /dev/hda7 格式化分区
    #mount /dev/hda7 /tmp 将/tmp挂载到hda7分区

    修改分区表

    #vi /etc/fstab增加usrquota,grpquota
    /dev/hda7 /tmp ext3 defaults, usrquota,grpquota 0 0

    创建使用者

    #useradd user01
    #useradd user02
    #cd /tmp
    #mount –o remount /tmp
    #quotacheck –cvug /tmp
    #quotaon –vug /tmp 开启quota
    Quota会在/tmp目录下自动创建quota.user quota.group

    对使用者user01进行磁盘空间使用限制

    #edquota –u user01 修改quota配置文件
    Block limits File limits
    User used soft hard timeleft used soft hard timeleft
    userq -- 0 5000 8000 0 0 0

    Block limits是对磁盘空间使用的限制,以字节为单位,soft是指软限制,hard是指硬限制,如例,soft限制为5MB,hard限制为8MB,当使用者user01使用空间超过5MB时,系统会进行提示,但可以继续使用空间,而当使用者user01使用空间达到8MB时,就会限制使用者user01继续使用/tmp空间
    我们可以进行一下测试,手动创建相对大的文件:

    #dd if/dev/zero ōf=user01file bs=1M count=4 将创建成功
    #dd if/dev/zero ōf=user01file bs=1M count=6 将创建成功,但会有提示
    #dd if/dev/zero ōf=user01file bs=1M count=9 将创建失败,超出hard限制

    对使用者user02进行创建文件使用限制

    #edquota –u user02 修改quota配置文件
    Block limits File limits
    User used soft hard timeleft used soft hard timeleft
    userq -- 0 0 0 0 50 80

    File limits是对使用者创建文件的限制,soft和hard同上是软限制和硬限制,分别是50、80,当使用者user02创建文件超过50个时,系统会进行提示,但仍可以继续创建文件,而当使用者user02创建文件超过80个文件时,就会限制使用者user02继续创建文件,但要注意,因为使用者user02是在/tmp目录下进行了磁盘配额限制,所以/tmp目录会算做一个文件,所以user02最多只能创建79个文件。

    我们可以进行一下测试,手动创建文件:
    #for i in $(seq 1 60);do echo 「user02file$i」;touch user02file$i;done

    创建60个文件,此时quota会进行提示,而当超过80个文件的时候,quota就会限制使用者user02继续创建文件

    #edquota –t

    可以设置timeleft的值,在这里我们都设定为2分钟,重复上面的例子,使用者user02创建60个文件,此时会出现quota的提示,但仍可以创建文件,但当我们等待2分钟后,你会发现,user02已经不能再进行创建文件了,这里就是timeleft的作用,就是当你超过soft限制时,设定有效的时间。
    其它相关命令

    #repquota 重载quota设置
    #quota –v 察看quota设置
    #quota on/off quota开启/关闭

    这样我们就可以对使用者进行相应的限制了。

    转载:http://www.linuxdiyf.com/viewarticle.php?id=40512,经试验成功

  • LINUX下NFS简单搭建过程

    2007-11-14 14:07:27

    一、概念

    NFS(Network File System/网络文件系统):

    1、设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务);

    2、NFS只是一种文件系统,本身没有传输功能,是基于RPC协议实现的,才能达到两个Linux系统之间的文件目录共享;
    3、NFS为C/S架构;

    二、服务器配置

    1、配置文件

    主要配置文件为:/etc/exports

    格式为: 共享目录 可mount主机IP(参数1,参数2,……)

    如:/var/nfs 172.20.*.*(rw,sync,all_squash,anonuid=65534,anongid=65534)

    说明:必须注意nfs/目录的访问权限,必须设置成777权限;父目录/var权限无要求,普通的755即可;

    2、启动相关服务

    然后依次启动相关服务:portmap,nfslock,nfs

    3、检查共享目录

    随后可以采用showmount –e查看一下,看看共享的目录情况:

    [root@ns var]# showmount -e

    Export list for ns.osserver:

    /var/nfs 172.20.*.*

    OK,到此为止,NFS服务器搭建完毕;

    三、客户端配置

    1、确保portmap运行

    客户端必须确保RPC协议相应的portmap正常运行,否则mount将失败;

    2、挂载/var/nfs目录(本地挂载点为/mnt/nfs)

    mount -t nfs 172.20.65.16:/var/nfs /mnt/nfs

    成功mount以后,即可同本地目录一样随意操作;

    四、其它相关命令

    1、当修改了/etc/exports文件后,可以不用重新启动nfs服务,直接采用exports –rv 即可重新导出共享目录;

    该命令格式如下:

    exportfs [-aruv]

    -a :全部mount或者unmount /etc/exports中的内容

    -r :重新mount /etc/exports中分享出来的目录

    -u :umount 目录

    -v :在 export 的时候,将详细的信息输出到屏幕上。

    具体例子:

    [root@ns var]# showmount -e

    Export list for ns.osserver:

    /var/nfs 172.20.*.*

    [root@ns var]# exportfs –au #全部卸载

    [root@ns var]# showmount -e

    Export list for ns.osserver:

    [root@ns var]# exportfs –rv #全部重新 export 一次

    exporting 172.20.*.*:/var/nfs

    [root@ns var]#

    2、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法

    showmout

    -a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。

    -e :显示指定的NFS SERVER上export出来的目录。

    例如:

    [root@localhost ~]# showmount -e 172.20.65.16

    Export list for 172.20.65.16:

    /var/nfs 172.20.*.*

    [root@ns var]# showmount -a

    All mount points on ns.osserver:

    172.20.*.*:/var/nfs

    五、常见问题解答

    1、提示:mount to NFS server '172.20.67.203' failed: server is down.

    解决方案:可能是NFS服务器的防火墙有问题;

    2、提示:mount: RPC: Timed out

    解决方案:由于RPC协议没运行;启动portmap服务;

    也有可能是防火墙问题;Server/Client均有可能。

    说明,注意

    1、exports参数说明
    rw: 读写模式;
    async: 异步磁盘读写;
    anonu(g)id: 指定NFS在进行操作时所使用的匿名用户uid/gid

    2、NFS 管理命令
    showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷;
    showmount -e 10.0.0.1 在NFS Client上执行此命令显示NFS Server上所有共享卷;
    export -av 根据/etc/exports导出所有卷;
    export -rv 重新导出所有卷,增加/etc/exports中的新项目、删除不存在的项目、更新改变的项目;

    3、NFS 相关文件
    /etc/exports
    是NFS Server最基本的配置文件之一,文件中列出了共享的文件系统和允许访问这些文件系统的主机。
    /proc/fs/nfs/exports
    导出文件列表的内核视图,包括导出的参数。
    /var/lib/nfs/etab
    状态文件,其中列出了当前的高级列表。此文件包含了/etc/exports中相同格式的所有项目,同时包含了由exportfs -i手工导入的项目。
    /var/lib/nfs/rmtab
    状态文件,列出了挂接导出文件的远程客户机清单。
    /var/lib/nfs/xtab
    状态文件,当前底层导出清单。

    4、/etc/exports 中client的书写规则
    (1) 单个主机
    可以用短名及完全限定名,或者用IP地址,例如student01、student01.flying.com.cn或者192.168.10.1都是合法的主机名。

    (2) Net-Group
    可以列出/etc/netgroup文件中或NFS网组映射中定义的整组主机。网组名以@开头。

    (3) 通配符主机
    *.discuz.net *.*.comsenz.com

    (4) 掩码
    192.168.1.0/255.255.255.0

    5、起停顺序
    启动:
    portmap
    nfslock
    nfs
    停止:
    nfslock
    nfs
    portmap

    6、安全性
    portmap: 111
    NFS: 2049

    防止使用IP欺骗和RPC重定向技术通过lo回环进行攻击以及限定授权主机:
    iptables -A INPUT -p udp -d 127.0.0.1 --dport 111 -j DROP
    iptables -A INPUT -p udp -d 127.0.0.1 --dport 2049 -j DROP
    iptables -A INPUT -p udp -s 10.0.0.2 --dport 111 -j ACCEPT
    iptables -A INPUT -p udp -s 10.0.0.2 --dport 2049 -j ACCEPT

    转自:http://www.linuxdiyf.com/viewarticle.php?id=63303,经试验成功!

  • Linux操作系统下简单的远程桌面实现方法(vnc)

    2007-10-15 17:09:27

    简单的介绍一个远程桌面———vnc方式的实现方法

    前提是server端要有一个vnc-server的和cnv的client端(其实就是生成vncviewer命令的包,但是一般的linux是包含此命令的)

    安装相关包之后配置即可使用

    Server端的设置

    1) 修改 /etc/sysconfig/vncserver,加入以下这一行

    VNCSERVERS="1:root"

    这里添加的用户要存在。

    2) 运行 vncpasswd,设置vnc登录密码

    3) 启动 vncserver服务

    # /etc/init.d/vncserver start

    Client端

    在另一台系统上运行VNC客户端,使用2)步中设置的密码进行连接。有以下三种客户端可供选择:

    a) 如果在Linux下,运行命令 vncviewer serveripaddress:1 (serveripaddress为服务器的IP地址)。

    b) 如果是Windows,需要去这里下载一个Windows客户端:http://www.realvnc.com/download.html。

    c) 也可以从浏览器访问VNC服务器: http://serveripaddress:5801/,浏览器要打开java选项。

    注:

    缺省vnc启动的是twm窗口管理器,如果想启动KDE,可以修改 /root/.vnc/xstartup

    注释掉最后一行twm &,改为:

    # twm &

    startkde &

    vnc-server

    文件: vnc-server-4.0-8.1.i386.rpm

    大小: 1199KB

    下载: http://blog.chinaunix.net/upfile/070911153821.rpm

    vnc

    文件: vnc-4.0-8.1.i386.rpm

    大小: 155KB

    下载: http://blog.chinaunix.net/upfile/070911153834.rpm

  • 在一台机器上打造四个操作系统(原创+痛苦)

    2007-09-30 15:31:21

     前不久,刚进一公司,作为新人,部门负责人突然要求我搭建测试环境,linux和windows,由于机器有限,要求在一台机器上安装四个系统2个windows(2k/xp),2个linux(red hat/red flag),虽说我这些系统都安装过,但也没有这样的安法(特别是解决他们的启动问题),知道这绝对不会是件很容易的事,以下证明了,确实是这样。。
     leader把话一说,搬来一台机器,丢了一碟光盘,走人了,要是一切正常还好,其实还有潜在问题,如:(光驱,硬盘,网卡,光盘),搞死我了。
     好了,闲话不多说,已经过去了,具体的操作如下。
    1.    80G(实际74.4G)的硬盘,首先要计划一下分区,安装顺序
                      1.windows 2000       20G
                      2.windows xp         20G
                      3.red hat server 4   15G
                      4.red flag server 5  15G
    了解一下linux系统中的磁盘结构
                       IDE设备: /dev/hdx
                       SCSI设备: /dev/sdx
                       最多4个主分区 hda1,2,3,4 或 sda1,2,3,4
                       逻辑分区从hda5开始计算(对应windows系统中的逻辑分区)
    我先安装Windows 2000,划硬盘为 C+D+空闲,C盘用来安装2000,D盘XP,空闲也就是逻辑分区要划三个分区,2个linux和一个交换分区(swap),swap给2个linux共用,一般为物理内存的2倍,依据上面的磁盘结构,
    linux系统的安装是从hda6开始的,还应该有hda7(swap用),hda8(另一linux系统用),hda5包括他们三个分区,为逻辑分区,那么他们对应上面的结构应为
                          OS               大小   windows表示  linux表示
                主分区
                      1.windows 2000       20G      C盘       hda1
                      2.windows xp         20G      D盘       hda2
               逻辑分区                                        hda5
                      3.red hat server 4   15G                hda6
                         swap(交换分区)                        hda7
                      4.red flag server 5  15G                hda8

    2.我是先安装2000在C盘,D盘安装XP,安好以后再安装red flag ,选用手动分区,在未划分的空闲分区上建  一个hda6(系统自动指派),指定15G,格式ext3,挂载点为 “/”,hda7(swap分区),无挂载点,大小为1024M(我机器内存为512M),选文件格式为swap即可;hda8(安装red hat),指定15G(或选全部未使用空间),格式ext3,挂载点为 “/”.

    3.依次安装好以后,启动,你会发现启动时,最后安装的一个linux系统会把前一个linux系统的启动引导覆盖了,不能进上一个linux系统,这样就要你进入系统编辑一下linux中的grub(系统引导工具)的配置文件grub.conf,进入最后安装的一个linux系统(对应red hat),用命令挂载hda6分区;如:mount /dev/hda6 /mnt/cd,成功后进入/mnt/cd目录,打开/etc/grub.conf文件,大致内容如下:
    *************************************************
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You do not have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /, eg.
    #          root (hd0,5)
    #          kernel /boot/vmlinuz-version ro root=/dev/sda6
    #          initrd /boot/initrd-version.img
    #boot=/dev/sda
    default=0    *默认启动项,从0开始,如想启动hda8,就改为7
    timeout=5    *系统选择等待时间,可设置长一些
    gfxmenu (hd0,5)/boot/message
    title RedFlag (2.6.22.6-1)
        root (hd0,5)
        kernel /boot/vmlinuz-2.6.22.6-1 ro root=LABEL=/123 vga=788 splash=silent resume=/dev/sda2
        initrd /boot/initrd-2.6.22.6-1.img
    *************************************************
    将其中title 。。开头到末尾的字段复制一下
    如上面的:
    title RedFlag (2.6.22.6-1)
        root (hd0,5)
        kernel /boot/vmlinuz-2.6.22.6-1 ro root=LABEL=/123 vga=788 splash=silent resume=/dev/sda2
        initrd /boot/initrd-2.6.22.6-1.img
    退出,同样打开当前系统根目录下的/etc/grub.conf,粘贴内容以后到文件的末尾,紧跟上一个title..段落。
    保存,重启系统(*为我加的注释)
    4。基本就是这些,注意我上面提到的硬件问题(不出现更好,出现了看看下面)如:安装时光驱读不了linux系统盘,看一下光驱的接口,SATA或IDE接口
    有的linux不支持SATA 光驱,要换一个IDE光驱来安装,要是硬盘也是这种情况,将硬盘的bois里面的接口改为IED,再启动即可。。。
    5。后来,在我安装好以后居然连网卡都出现问题了,在windoes里面是好的,linux下不识别,现在的网卡大部分又是集成的,要么换用一个网卡,要么到网上下载一个驱动(费时间且有的还要编译),最终我就跟头反应换了一台机器,从新走前面所有的操作,网卡能被识别,我想终于一切OK了,后来发现连光盘-安装盘经过折腾也坏了,公司没有多的,建议我去刻录一个,连源文件都没有,要疯了,去要了一张光盘到网上down一个,刻录后安好了,再也不能这样对我了,最后才真正大功告成了,把东西收拾一下,拿到头那小声说了一声,“安好了,可以用了”,他头都没地“恩”了一声就完了。。我就回到座位上,work ,work,good work!。。。
  • Samba使用大全(绝对经典)

    2007-05-01 01:11:19

    Samba使用大全(绝对经典)

    (一)samba服务器
    Samba协议基础
    在NetBIOS 出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议, Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
    随着 Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Inter net上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。
    因此,为了让Windows和Unix计算机相集成,最好的办法即是在Unix计算机中安装支持SMB/CIFS协议的软件,这样 Windows客户就不需要更改设置,就能如同使用Windows NT服务器一样,使用Unix计算机上的资源了。Samba是用来实现SMB的一种软件,它的工作原理是,让NETBIOS(Windows95网络邻居的通讯协议)和SMB(Server Message Block)这两个协议运行于TCP/IP通信协议之上,并且使用Windows的NETBEUI协议让Unix计算机可以在网络邻居上被Windows 计算机看到。它的功能有:
    1.共享Linux磁盘给Win95/NT
    2.共享Win95/NT磁盘给Linux机器
    3.共享Linux打印机给win95/NT
    4.共享win95/NT打印机给Linux机器。
    同时它的文件服务功能比NT系统还高,而且在Windows2000之前就提供了用户磁盘空间限制的功能。
    Samba的配置
    在我写这篇文章的时候,Samba的版本已经到了2.2.2了,需要的可以通过ftp: //samba.org/pub/samba/Binary_Pa...011013.i386.rpm得到最新的rpm安装包。然后执行rpm -Uvh samba-2.2.2-20011013.i386.rpm来安装或者升级它。安装完后,可以看见/etc/samba这么一个目录,里面存放和 Samba相关的一些文件,最主要的是smb.conf,现在根据配置文件讲讲它的配置选项:
    全局设置:
    workgroup = MYGROUP
    定义该Samba服务器所在的工作组或者域(如果下面的security=domain的话)。
    server string = MY Samba Server
    设定机器的描述,当我们通过网络邻居访问的时候可以在备注里面看见这个内容,而且还可以使用samba设定的变量。这里说一下samba定义的变量:
    %S = 当前服务名(如果有的话)
    %P = 当前服务的根目录(如果有的话)
    %u = 当前服务的用户名(如果有的话)
    %g = 当前用户说在的主工作组
    %U = 当前对话的用户名
    %G = 当前对话的用户的主工作组
    %H = 当前服务的用户的Home目录
    %v = Samba服务的版本号。
    %h = 运行Samba服务机器的主机名
    %m = 客户机的NETBIOS名称
    %L = 服务器的NETBIOS名称
    %M = 客户机的主机名
    %N = NIS服务器名
    %p = NIS服务的Home目录
    %R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)
    %d = 当前服务进程的ID
    %a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95)
    %I = 客户机的IP
    %T = 当前日期和时间
    hosts allow = 网络或者主机
    这里可以设置允许访问的网络和主机IP,比如允许192.168.1.0/24和192.168.2.1/32访问,就用host allow = 192.168.1. 192.168.2.1 127.0.0.1(网络注意后面加”.”号,各个项目间用空格隔开,记得把本机也加进去)
    printcap name = printcapFile
    到printcapFile(一般是/etc/printcap)这个文件中取得打印机的描述信息
    load printers = yes|no
    设定是否自动共享打印机而不用设置下面的[printer]一节的相关东西
    printing = PrintSystemType
    定义打印系统的类型,缺省是lprng,可选项有:bsd, sysv, plp, lprng, aix, hpux, qnx。
    guest account = pcguest
    定义游客帐号,而且需要把这个帐号加入/etc/passwd,不然它就用缺省的nobody
    log file = LogFileName
    定义记录文件的位置LogFileName(一般是用/var/log/samba/%m.log)
    max log size = size
    定义记录文件的大小size(单位是KB,如果是0的话就不限大小)
    security = security_level
    定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
    share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
    user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
    server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
    domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
    后面三种安全级都要求用户在本Linux机器上也要系统帐户。否则是不能访问的。
    password server = <NT-Server-Name>
    当前面的security设定为server或者domain的时候才有必要设定它。
    password level = n
    这是设定针对一些SMB客户像OS/2之类而设的,这样的系统在发送用户密码的时候,会把密码转换成大写再发送,这样就和samba的密码不一致,这个参数可以设定密码里允许的大写字母个数,这样samba就根据这个数目对接收到的密码进行大小写重组,以重组过的密码尝试验证密码的正确性。n越大,组合的次数就越多,验证时间就越长,安全性也会因此变得越低。例如n=2,用户的密码是abcd,但发送出去其实是ABCD,samba就会把这个 ABCD进行大小写重组,组合后的结果可以是: Abcd, aBcd, abCd, abcD, abcd, ABcd, AbCd, AbcD,aBCd,aBcD,abCD。
    所以如果没有必要,就把n定为是零。这样的话samba只尝试两次,一个是接收到的密码,另一个尝试的是这个密码都是小写的情况。
    username level = n
    这个是对于用户名的情况,说明和上面一项类似。
    encrypt passwords = yes|no
    设置是否对密码进行加密,samba本身有一个密码文件/etc/samba/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,samba直接把这个密码和Linux里的/etc/samba/smbpasswd密码文件进行验证。但是在 Windows 95 OS/R2以后的版本和Windows NT SP3以后的版本缺省都不传送明文密码,要让这些系统能传送明文密码必须在其注册表里更改,比较麻烦,好的方法就是把这里的这个开关设置为yes。
    smb passwd file = smbPasswordFile
    设置存放samba用户密码的文件smbPasswordFile(一般是/etc/samba/smbpasswd)。
    ssl CA certFile = sslFile
    当samba编译的时候支持SSL的时候,需要指定SSL的证书的位置(一般在/usr/share/ssl/certs/ca-bundle.crt)。
    unix password sync = yes|no
    passwd program = /usr/bin/passwd %u
    passwd chat = *New*UNIX*password* %n
    *ReType*new*UNIX*password* %n
    *passwd:*all*authentication*tokens*updated*successfully*
    这三项设置能否从windows的应用程序修改unix系统的用户密码
    username map = UsermapFile
    指定用户映射文件(一般是/etc/samba/smbusers),当我们在这个文件里面指定一行root = administrator admin的时候,客户机的用户是admin或者administrator连接时会被当作用户root看待。
    include = MachineConfFile
    指定对不同机器的连接采用不同的配置文件MachineConfFile(一般为了灵活管理使用/etc/samba/smb.conf.%m,由于采用了samba的变量,把配置文件和客户机的NETBIOS名称关联起来,能很容易地控制这些客户机的权限和设置)。
    socket ōptions = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    这个是网络socket方面的一些参数,能实现最好的文件传输性能。相关的选项还有SO_KEEPALIVE、 SO_REUSEADDR、SO_BROADCAST、IPTOS_LOWDELAY、IPTOS_THROUGHPUT、SO_SNDLOWAT (*)、SO_RCVLOWAT(*),带*号的要指定数值。一般如果在本地网络,就只用IPTOS_LOWDELAY,如果是有一个本地网络的,就用 IPTOS_LOWDELAY TCP_NODELAY,如果是广域网络,就试试IPTOS_THROUGHPUT。
    interfaces = interface1 interface2
    如果有多个网络接口,就必须在这里指定。如interface = 192.168.12.2/24 192.168.13.2/24
    remote browse sync = host(subnet)
    这里指定浏览列表同步信息从哪里取得, 如果用host(比如192.168.3.25)或者整个子网(192.168.5.255)。

    ★这里说明一下什么是浏览(Browse):
    在SMB 协议中,计算机为了访问网络资源,就需要了解网络上存在的资源列表(例如在Windows下使用网络邻居查看可以访问的计算机),这个机制就被称为浏览(Browse)。虽然SMB协议中经常使用广播的方式,但如果每次都使用广播的方式了解当前的网络资源(包括提供服务的计算机和各个计算机上的服务资源),就需要消耗大量的网络资源和浪费较长的查找时间,因此最好在网络中维护一个网络资源的列表,以方便查找网络资源。只有必要的时候,才重新查找资源,例如使用Windows下的查找计算机功能。
    但没有必要每个计算机都维护整个资源列表,维护网络中当前资源列表的任务由网络上的几个特殊计算机完成的,这些计算机被称为Browser,这些Browser通过记录广播数据或查询名字服务器来记录网络上的各种资源。
    Browser 并不是事先指定的计算机,而是在普通计算机之间通过自动进行的推举产生的。不同的计算机可以按照其提供服务的能力,设置在推举时具备的不同权重。为了保证一个Browser停机时网络浏览仍然正常,网络中常常存在多个Browser,一个为主Browser(Master Browser),其他的为备份Browser。★

    remote announce = host(subnet)
    指定这些机器向网络宣告自己,而不是有Browser得到。
    local master = yes|no
    这个参数指定nmbd是否试图成为本地主浏览器,默认值是yes,如果设为no则samba服务器就永远都不会成为本地主浏览器。但即使设置了yes,也不等于samba服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
    os level = n
    n的值是个整数,决定了nmbd是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着nmbd失去浏览选择。如果要nmbd更有机会成为本地主浏览器的话,可以设为65。
    domain master = yes|no
    这个参数让nmbd成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
    preferred master = yes|no
    这个参数指定nmbd是否是工作组里的首要的主浏览器,如果指定为yes,nmbd在启动的时候就强制一个浏览选择。

    ★Domain master和local master
    工作组和域这两个概念在进行浏览时具备同样的用处,都是用于区分并维护同一组浏览数据的多个计算机。事实上他们的不同在于认证方式上,工作组中每台计算机都基本上是独立的,独立对客户访问进行认证,而域中将存在一个(或几个)域控制器,保存对整个域中都有效的认证信息,包括用户的认证信息以及域内成员计算机的认证信息。浏览数据的时候,并不需要认证信息,Microsoft将工作组扩展为域,只是为了形成一种分级的目录结构,将原有的浏览和目录服务相结合,以扩大Mircrosoft网络服务范围的一种策略。
    工作组和域都可以跨越多个子网,因此网络中就存在两种Browser,一种为 Domain Master Browser ,用于维护整个工作组或域内的浏览数据,另一种为Local Master Browser,用于维护本子网内的浏览数据,它和Domain Master Browser通信以获得所有的可浏览数据。划分这两种Browser 主要是由于浏览数据依赖于本地网广播来获得资源列表,不同子网之间只能通过浏览器之间的交流能力,才能互相交换资源列表。
    但是,为了浏览多个子网的资源,必须使用NBNS名字服务器的解析方式,没有NBNS的帮助,计算机将不能获得子网外计算机的NetBIOS名字。Local Master Browser也需要查询NetBIOS名字服务器以获得Domain Master Browser的名字,以相互交换网络资源信息。
    由于域控制器在域内的特殊性,因此域控制器倾向于被用做Browser,主域控制器应该被用作Domain Master Browser,他们在推举时设置的权重较大。★

    preserve case = yes|no
    short preserve case = yes|no
    指定拷贝DOS文件的时候保持大小写,缺省是no
    default case = lower|upper
    所有的DOS文件的缺省是大写还是小写
    case sensitive = yes|no
    大小写敏感,一般是no,不然会出现一些问题。
    共享设置:

    ★共享资源:
    每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。如果一个资源的名字的最后一个字母为$,则这个共享名就为隐藏共享,不能直接表现在浏览列表中,而只能通过直接访问这个名字来进行访问。在SMB协议中,为了获得服务器提供的资源列表,必须使用一个隐藏的资源名字IPC$来访问服务器,否则客户无法获得系统资源的列表。★

    共享设置中有个比较奇怪的段:
    [homes],在smb.conf文件中一般没有对这个目录的设定特定内容比如路径等。当客户机发出服务请求时,就在smb.conf文件的其它部分查找友特定内容的服务。如果没有发现这些服务,并且提供了homes段时,那么就搜索密码文件得到用户的Home目录。通过Homes段, Samba可以得到用户的Home 目录并使之共享。下面是这个段的最基本的几个设置。
    [homes]
    comment=Home Directory
    browseable=no
    writable=yes
    比较正常的共享的配置如下例:
    [MyShare]
    comment = grind’s file
    path = /home/grind
    allow hosts = host(subnet)
    deny hosts = host(subnet)
    writable = yes|no
    user = user(@group)
    valid users = user(@group)
    invalid users = user(@group)
    read list = user(@group)
    write list = user(@group)
    admin list = user(@group)
    public = yes|no
    hide dot files = yes|no
    create mode = 0755
    directory mode = 0755
    sync always = yes|no
    short preserve case = yes|no
    preserve case = yes|no
    case sensitive = yes|no
    mangle case = yes|no
    default case = upper|lower
    force user = grind
    wide links = yes|no
    max connections = 100
    delete readonly = yes|no
    其中[]里面的MyShare指定共享名,一般就是网络邻居里面可以看见的文件夹的名字。
    comment指的是对改共享的备注。
    path 指定共享的路径,其中可以配合samba变量使用。比如你可以指定path=/data/%m,这样如果一台机器的NETBIOS名字是grind,它访问MyShare这个共享的时候就是进入/data/grind目录,而对于NETBIOS名是glass的机器,则进入/data/glass目录。
    allow hosts和deny hosts和前面的全局设置的方法一样这里不再提及。
    writeable指定了这个目录缺省是否可写,也可以用readonly = no来设置可写。
    user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开。
    valid users指定能够使用该共享资源的用户和组。
    invalid users指定不能够使用该共享资源的用户和组。
    read list 指定只能读取该共享资源的用户和组。
    write list指定能读取和写该共享资源的用户和组。
    admin list指定能管理该共享资源(包括读写和权限赋予等)的用户和组。
    public指明该共享资源是否能给游客帐号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ōk = yes其实和public = yes是一样的。
    hide dot files指明是不是像unix那样隐藏以“.”号开头的文件。
    create mode指明新建立的文件的属性,一般是0755。
    directory mode指明新建立的目录的属性,一般是0755。
    sync always指明对该共享资源进行写操作后是否进行同步操作。
    short preserve case指明不管文件名大小写。
    preserve case指明保持大小写。
    case sensitive指明是否对大小写敏感,一般选no,不然可能引起错误。
    mangle case指明混合大小写。
    default case指明缺省的文件名是全部大写还是小写。
    force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。
    wide links指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
    max connections = n设定同时连接数是n。
    delete readonly指明能否删除共享资源里面已经被定义为只读的文件。
    有两类特殊的共享,分别是光驱和打印机
    光驱的共享设置:
    [cdrom]
    comment = grind’s cdrom
    path = /mnt/cdrom
    public = yes
    browseable = yes
    root preexec = /bin/mount -t iso9660 /dev/cd0 /mnt/cdrom
    root postexec = /bin/umount /mnt/cdrom
    这里root preexec指明了连接时用root的身份运行mount命令,而root postexec则指明了断开时用root身份运行umount,有效实现了对光驱的共享。
    打印机共享的设置:
    [printers]
    path = /var/spool/samba
    writeable = no
    guest ōk = yes
    printable = yes
    printer driver = HP LaserJet 5L

    这里printable指明该打印机可以打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。printer driver的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。
    添加用户:
    samba 添加用户比较方便,一般是用smbadduser,用法是smbadduser unixid:netid,举个例子:如果你的本机有个叫grind的用户,你用smbadduser grind:grind,这样从网上邻居访问的时候用户名就用grind,而如果你用了smbadduser grind:glass的话,网上邻居访问的时候提供的用户名就是glass而不是grind了。
    关于samba服务端的设置基本就是这些,我想一般应用中所要使用的上面几乎都覆盖到了,所以有些不重要的就省略了,如果要更加详细的信息可以用man smb.conf参考。<
    Samba使用大全(二)-Samba客户端
    使用Samba网络打印:
    使用unix网络打印以前的文章比较少涉及,最近试验了一下,效果还是不错的,现在讲讲基本的实现方法:
    比如你要建立一台网络打印机grind,而打印机对应网络上面的//glass/HPLaserj,所有需要配置的文件有下面几个:
    1./etc/printcap,内容一般为:
    grind:
    :sh: #禁止提示的header
    :ml=0: #打印的文件的长度下限,
    :mx=0: #最大的打印文件大小,0为不限制
    :sd=/var/spool/lpd/grind: #打印机的spool目录
    :lp=|/usr/bin/smbprint: #打印输出需要的设备名或者管道名
    :lpd_bounce=true: #强制lpd守护进程过滤打印文件
    :if=/usr/share/printconf/mf_wrapper: #过滤命令文件
    2.smbprint这个一般在安装完smb相关的rpm包以后就有了,主要内容是:
    eval acct_file=$$#
    spool_dir=`dirname $acct_file`
    config_file=$spool_dir/.config
    eval `cat $config_file`
    share=`echo $share | sed "s/[]///g"`
    if [ "$user" != "" ]; then
    usercmd="-U"
    else
    usercmd=""
    fi
    if [ "$workgroup" != "" ]; then
    workgroupcmd="-W"
    else
    workgroupcmd=""
    fi
    if [ "$translate" = "yes" ]; then
    command="translate ; print -"
    else
    command="print -"
    fi
    cat | /usr/bin/smbclient "$share" "$password" -E ${hostip:+-I}
    $hostip -N -P $usercmd "$user" $workgroupcmd "$workgroup"
    -c "$command" 2>/dev/null
    3.mf_wrapper是一个magic filter文件,是相关的一些过滤规则。内容是:
    MF_RULE_DIR='/usr/share/printconf/mf_rules'
    MF_RULES=$MF_RULE_DIR/mf[[:digit:]][[:digit:]]-*
    TMP_FILE=`mktemp /tmp/printconf.XXXXXX`' 'exit 1
    cat ./mf.cfg $MF_RULES | m4 > $TMP_FILE
    if [ -n "$DEBUG" ]; then
    case "$DEBUG" in
    2)
    DEBUGSTRING="--debug --debug"
    ;;
    3)
    DEBUGSTRING="--debug --debug --debug"
    ;; 4)
    DEBUGSTRING="--debug --debug --debug --debug"
    ;;
    5)
    DEBUGSTRING="--debug --debug --debug --debug --debug"
    ;;
    *)
    DEBUGSTRING="--debug"
    ;;
    esac
    else
    DEBUGSTRING=""
    fi
    # Run magic filter
    /usr/bin/magicfilter-t $TMP_FILE $DEBUGSTRING $* < /dev/stdin
    RETVAL=$?
    if [ -f $TMP_FILE ]; then
    rm -f $TMP_FILE;
    fi
    ;;
    esac
    else
    DEBUGSTRING=""
    fi
    # Run magic filter
    /usr/bin/magicfilter-t $TMP_FILE $DEBUGSTRING $* < /dev/stdin
    RETVAL=$?
    if [ -f $TMP_FILE ]; then
    rm -f $TMP_FILE;
    fi
    if [[ $RETVAL -eq 0 ]]; then
    TERMINATION=`grep '^[[:space:]]*#[[:space:]]*TERMINATION=' ./mf.cfg | se
    d 's/^[[:space:]]*#[[:space:]]*TERMINATION=//;'`
    if [ -n $TERMINATION ]; then
    echo -n -e $TERMINATION;
    fi
    fi
    同时需要在/var/spool/lpd/grind下面有这么两个文件:mf.cfg和scrīpt.cfg。
    mf.cfg的内容是:
    define(TEXTfilter, text ""
    14 )dnl
    define(PSfilter, `filter /usr/share/printconf/util/mf_postscrīpt_wrapper --mfomatic -d lj5gray-75168.foo')dnl
    scrīpt.cfg的内容是:
    share="//glass/HPLaserj" #glass机器上面共享的打印机
    hostip="192.168.1.123" #glass这台机器的IP
    user=""
    password=""
    workgroup=""
    translate="no"
    完成这个工作后,启动lpd进程,然后就能用lpr等命令使用网络打印机打印了。
    使用网络共享文件资源:
    列出网络资源:
    一般可以用smbclient来列出某台机器相关的资源,smbclient的用法参考http://www.linuxaid.com.cn/training...owtod.jsp?i=241
    。这里讲比较有用的使用方法:
    smbclient -L IP或者NETBIOS名称,作用是显示某台提供samba服务的服务器上的共享资源。命令执行效果如下:
    smbclient -L glass
    Sharename Type Comment
    --------- ---- -------
    IPC$ IPC 远程 IPC
    HPLaserJ Printer HP LaserJet 6P
    ADMIN$ Disk 远程管理
    littlep Disk
    C$ Disk 默认共享
    Server Comment
    --------- -------
    GLASS
    GRIND
    Workgroup Master
    --------- -------
    BLUESUN GLASS
    WORKGROUP HEIHEI
    第一段列举了该机器(glass)上面的共享资源,第二段列举了glass所在的工作组里面所有提供samba服务的机器,第三列举了其他工作组提供 browse服务的Master机器(关于Master和Browse服务可以参考我的前面一篇samba使用大全-samba服务器)。
    使用网络资源:
    smbclient //IP或者NETBIOS名称/共享资源名 [-U 用户名]
    命令执行效果如下:
    smbclient //glass/littlep
    added interface ip=192.168.1.123 bcast=192.168.1.255 nmask=255.255.255.0
    Got a positive name query response from 192.168.1.123 (192.168.1.123)
    Password:
    Domain=[BLUESUN] ōS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
    smb: >
    接下来的操作和ftp的时候命令一样,用get下载文件而用put上传文件,命令可以用help查看。
    还有一种方法是用文件系统的方式(这种方式要确定你的内核支持smbfs,如果没有支持的话,编译内核的时候必须选中File systems--->Network File Systems---> SMB file system support (to mount Windows shares etc.) ):
    smbmount //IP或者NETBIOS名称/共享资源名 /本地挂接点 [-o option]
    常用的的option有username=<用户名>,password=<密码>,guest(指定为用guest访问,不用提供密码,前面的即使用username=guest参数的话也会要求输入密码),ro(有时候为了系统安全要指定为只读模式),rw,同时多个 option的话用逗号隔开。
    或者可以用mount -t smbfs [-o option] //IP或者NETBIOS名称/共享资源名 /本地挂接点来实现同样的功能。
    例子如下:
    smbmount //glass/littlep /test -o guest或者mount -t smbfs -o guest //glass/littlep /test,然后就能通过访问/test来使用网络上的资源了。
    如果不需要使用的时候,可以简单地使用smbumount /test或者umount /test来解除这个挂接。
    关于samba的功能(共享Linux磁盘给Win95/NT、共享Linux打印机给win95/NT、共享win95/NT打印机给 Linux机器。、共享Win95/NT磁盘给Linux机器),前面两个属于samba服务器的内容而后两个属于samba客户段的内容,在我的两篇文章中都有介绍了他们的实现方法,但是samba实在是一个强大的工具,无法十分详细地介绍它地全部功能,而且限于笔者的知识有限,有不到之处请各位指出,还望各位多多交流。


    Samba使用大全中有这样一段:

    force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。

    如上面所述,我建立一个共享文件夹(smb.conf片断)
    ...........
    [MyShare]
    comment = share directory
    path = /home/myshare
    writable = yes
    public = yes
    create mode = 0755
    directory mode = 0755
    force user = root

    按照资料的意思,不论我以任何用户登陆到这个共享文件夹,在这个文件夹里建立的文件都是属于root用户的,当前用户建立文件之后应该就是没有删除的权限了。
    我试验,在win2000登陆到samba服务器,进入myshare目录,在里面建立好一个文本文件test.txt之后,我在samba服务器上用 root登陆,进入myshare目录,用ls -l查看,test.txt的属主是root,属性是 -rwxr--r--,这样应该说我在win2000上就应该不能删除这个test.txt文件了,但是,在win2000里,却可以删除这个文件,不知道兄弟们有没有注意这个问题?到底怎样解释?

    还有一个问题,/home/myshare目录是root用户建立的,用命令chmod 777 /home/myshare 更改过权限,上面的权限问题是不是和这个文件夹的权限有关?

    meteorsky

    有分号的是注释

    meteorsky

    我发现force user = ...这一行的作用不是“force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了”这个意思,而是任何登陆的用户进入这个目录时就被当作root,作为root当然可以进行任何操作,登陆身份的改变是在刚登陆之后。
    我在linux系统中察看当前连接到samba的用户id时发现:不管我用那一个用户登陆samba服务器,只要我进入MyShare目录,当前的用户id就变为root,

    可是,这样的话,我就无法实现限制用户在指定目录里只能写,不能删除的权限了,这样的权限限制在windows的ntfs文件系统中是很容易实现的,

    不知道在samba中如何才能实现这样的限制,抑或根本就实现不了?
    还请大家帮忙!!

    Samba服务器的使用

    一、Samba基础

    1、 简介
    1).SMB协议
    SMB(Server Message
    Block,服务信息块)协议可以看作是局域网上的共享文件/打印机的一种协议,它可以为网络内部的其它Windows和Linux机器提供文件系统、打印服务或是其他一些信息。
    SMB的工作原理是让NetBIOS(Win95网络邻居通信协议)与SMB这两种协议运行在TCP/IP的通信协议上,且使用NetBIOS
    nameserver让用户的Linux机器可以在Windows的网络邻居里被看到,所以就可以和Win95/NT主机在网络上相互沟通,共享文件与服务了。
    目前Microsoft正在开发一种新的文件和打印共享协议--CIFS(Common Internet Files
    System,通用网络文件协议),该协议支持TCP/IP和DNS等协议,能在www上支持文件和打印共享。在CIFS下服务器实际上是DNS 名,由主机名和域名组成。这种变化是从NetBIOS命令结构中分离出来的。目前CIFS还没有得到广泛的应用。现在在Linux和Win95/NT之间的文件共享注意还是 SMB和NFS。

    2).什么是Samba
    Samba是用来实现SMB的一种软件,由澳大利亚的Andew Tridgell开发,是一种在Linux(Unix)环境下运行的免费软件。
    通过使用Samba,Linux系统可以实现如下功能:
    文件服务和打印服务(在Linux和Win95/NT之间系统之间提供打印机和磁盘的共享)
    登陆服务器,使用Windows客户能注册到网络上
    作为主要域控制器和域中成员的功能
    WINS服务器以及浏览功能
    支持SSL(Secure Socket Layer)
    支持SWAT (Samba Web Administration Tool )
    Samba除了支持Linux(Unix)和Win95/NT之外,还支持DOS、IBM OS/2、Macintosh 等操作系统。

    在Samba的软件包中所包括的组件参看表1-1:

    表1-1 Samba软件包的组成列表

    2、Samba的记录文件
    Samba为smbd、nmbd和访问Samba的客户提供了下列记录文件,分别记录有关smbd、nmbd运行信息和每个客户的访问信息:
    记录smbd 信息
    /var/log/samba/log.smb
    记录nmbd信息
    /var/log/samba/log.nmb
    记录客户访问信息
    /var/log/samba/log.%m

    3、启用Samba服务器
    Samba的运行包含两个后台守护进程:smbd和nmbd,它们是Samba的核心,在全部时间内运行。nmbd
    程序使得通过企图计算机可以浏览Linux服务器。Smbd守护进程在SMB软件包到达网上时对它们进行处理,并且为使用或共享它的资源与 Linux进行协调。如果指定的是一个文件,该资源就是一个文件;而一个打印机请求就要求访问一台打印机。实际上,在请求访问打印机时,Smbd把要打印的信息存储到打印机队列中;在请求访问一个文件时,Smbd把数据发到内核,最后将它存到磁盘上。
    你可以从inetd选择启动它们,但这种方法会使Samba变慢。建议使用下面命令可以启动这两个进程:
    /etc/rc.d/init.d/smb start
    /usr/sbin/samba start
    如果想要在系统启动时自动启动samba,可以使用/usr/sbin/turboservice命令,选中其中的"SMB (Windows)File
    Services"。

    二、Samba配置及使用
    1、定制文件/etc/smb.conf
    在安装完Samba后,还需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由于SMB是一个非常复杂的协议,所以配置Samba的工作也是比较繁琐的,大约有超过170条配置项出现在smb.conf文件中。

    1).smb.conf的语法
    smb.conf文件有一个清晰的语法结构,与Windows的*.ini文件十分类似。如下所示:
    该文件被分成几部分,每一部分都包括几个参数,用来定义Samba输出的共享及其详细操作。

    文件被分隔成若干节,每一节都由一个被方括号括起来的标识开始(例如,[global]、[home]、[printers]),每一个配置参数或是一个全局参数(影响或控制整个服务器),或是一个服务参数(影响或控制服务器提供的某项服务 )。
    global部分定义的参数用来控制Samba的总特性。除global部分外,每一部分都定义了一个专门的服务。
    你可以使用下面的语句来指定一个参数:
    name=VALUE
    name可以是一个单词或者用空格隔开的多个单词。VALUE可以是布尔值(ture或false;yes或no;1或0)、数字或字符串。
    注释以分号开头,可以单独一行,也可以跟在一条语句之后。
    通过在一行的最后一个字符后加反斜杠"\\"可以将一行分成多行。
    每一部分的名字和参数都不区分大小写,例如,参数browseable=yes与browseable=YES是完全等价的

    2).smb.conf文件的功能
    smbd和nmbd这两个守护进程启动时(通常为系统引导时)读配置文件smb.conf,这一配置文件向这两个守护进程说明输出
    什么共享、共享输出给谁以及如何进行输出等等。
    因为安全问题是最重要的,所以你必须指定哪些计算机可以访问这一共享,smb.conf文件可以很灵活的明确指定每一服务有哪些用户可以访问。随着Linux网络的增大,这一控制越来越重要。

    3).smb.conf文件结构
    smb.conf文件主要包括三部分:
    global(全局)参数
    directory shares (目录共享)部分--包括标准的[home]部分
    printer shares(打印共享)部分
    其中,global参数用来设置整个系统的规则;[home]部分和[printer]部分是服务的特定例程,services(服务)这一术语是网络客户机共享或输出的目录和打印机的Samba术语。这些服务定义了哪些用户可以访问这些目录和打印机以及如何访问这些目录和打印机。

    清单1-1给出了smb.conf文件的一个简单的例子。
    清单1-1 smb.conf文件的一个简单示例
    [global]
    netbios name = FRODO
    workgroup = UAB-TUCC
    server string = John Blair\'s Linux Box
    security = user
    printing = lprng
    log file = /var/log/samba
    lock directory = /var/lock/samba
    [homes]
    comment = Home Directory
    browseable = no
    read ōnly = no
    [printers]
    browseable = no
    guest ōk = yes
    printable = yes
    在 [global] 段中设置了主机名称, 主机所在的工作组名称和浏览时可看到的对本机的描述。安全参数告诉 Samba
    使用"用户级别"的安全保护方式。 SMB 有两种安全模式: 共享级别, 将资源加密码控制;用户级别, 可以使用某一用户的所有资源。
    这里不能详细解释两种方式的微妙差别, 但大部分情况下, 你会想用用户级别安全控制。
    [global] 段中还定义了日志文件目录和锁定文件的位置。日志文件在解决故障和完善系统时是很有用的,锁定文件可以阻止多个用户同时修改相同的文件。
    [homes] 段中的设置控制了每一个用主目录的共享权限。comment 参数指定的字符串在你浏览本机资源时出现在指定资源的旁边。
    browseable 参数控制一项服务是否能够出现在网络资源浏览表中。这里是一些非直觉的东西, browseable = no
    意味着这个目录将在浏览时显示为要验证的用户名称。 举例来说, 指定 browseable = no, 当我浏览这个 Samba 服务器时,
    我将看到一个名称为 cuckoo 的共享目录。当指定 browseable = yes 时, 我将看到一个名为 homes 和 cuckoo
    的共享目录。设置 read ōnly = no 将允许通过验证的用户对主目录有写入的权限。 但是, 如果他们的主目录的 UNIX 权限 不允许写入,
    那么他们就没有写的权限。 无论 UNIX 的权限怎样, 设置 read ōnly = yes 后, 他们的主目录是只读的。
    printing 命令描述了本地打印系统类型, 这可以让 Samba 知道怎样提交打印任务, 显示打印队列, 删除打印任务和其它操作。
    如果打印系统是 Samba 所不知道的, 你必须在每次执行打印操作时指明命令。
    清单中[printing]一段配置允许任何能够登录到 Samba 服务器的用户使用 printcap 中出现的 每一台打印机。 正常情况下,
    如果使用用户级别安全控制, guest ōk = yes 并不能授权每一个用户(使用系统)。 每一个打印服务必须定义为 printable =
    yes。
    下面的一段配置片断增加了一个命名为 public 的共享目录, 直接对匿名FTP目录有只读的 权限。 你必须在客户机上建立打印机驱动程序。 对于
    Windows 95 和 Windows NT 客户机, 你可以使用printer name 和 printer driver命令自动建立打印驱动。

    [public]
    comment = Public FTP Directory
    path = /home/ftp/pub
    browseable = yes
    read ōnly = yes
    这段描述并不是解释一些微妙的主题,
    例如用户级和共享级安全性的区别或者其它的授权认证主题。它仅仅让我们看到了Samba这座冰山的一角。另一方面,这是一个良好的例子,从中我们可以了解产生一个简单但可工作的smb.conf文件是多么容易。
    下面,我们举另一个例子说明如何通过Samba把Linux的打印机共享给Windows机器。
    为了共享Linux的打印机给Windows机器,必须确定Linux机器上的打印机已经设置好。如果能从Linux上打印,那么设定Samba 的打印机共享是很简便的。只要根据自己的情况,对smb.conf文件有关打印的部分进行修改就可以了。在修改中唯一需要注意的是确保打印机的路径要与 /etc/printcap中的spool目录相符合,然后就可以在Win95/NT上配置网络打印机了(关于如何在Win95/NT上配置网络打印机,本文不做介绍)。

    4).标准smb.conf文件清单
    在Samba的软件包里的example目录中有一个缺省的配置文件 smb.conf.defaults。我们可以对它做适当修改后拷贝到你的安装目录下的lib目录里,并改名为smb.conf。清单1-2是Samba 系统提供的标准的配置文件。为方便读者阅读,本文翻译了文件中的注释并适当的添加了解释。

    清单1-2 标准smb.conf 文件
    # 这是服务器的主要配置文件。您应该阅读smb.conf(5)的用户手册以了解下面
    # 列出的每一个选项。Samba有很多的选项,它们之中的大多数并没有出现在这
    # 个例子中。
    #
    # 以分号";"或井号"#"开始的每一行都是注释,在执行时被忽略。在本例中
    # 我们使用"#"作为注释而使用";"作为可选配置的注释。
    #
    # 注意:无论何时修改了这个配置文件,您都要运行"testparm"命令来检查您所
    # 做的修改有没有基本的语法错误。
    #
    #=================== 全局变量设置Global Settings ====================
    [global]
    # workgroup用来指定您的机器在网络上所属的NT域名或组名。格式是
    # workgroup = NT-Domain-Name or Workgroup-Name。缺省的组名是 MYGROUP。
    workgroup = MYGROUP
    # server string 用来设置NT描述域。缺省值是Samba Server 。
    server string = Samba Server
    # 下面的选项对于安全很重要。它允许您设置哪些领域的机器可以访问您的Samba
    # 服务器。下面的这个例子允许两个C类子网和"lookup"的连接请求而禁止来
    # 自其他网段机器的连接请求。有关的例子请参看smb.conf的用户手册。
    ; hosts allow = 192.168.1. 192.168.2. 127.
    # 允许自动加载打印机列表,而不需要您单独设置每一台打印机。
    load printers = yes
    # 您也许希望覆盖原有的printcap 文件。
    ; printcap name = /etc/printcap
    # 对于SystemV系统,如果将printcap名设置为lpstat 将允许您从SystemV 的
    # spool中自动获得打印列表。
    ; printcap name = lpstat
    # 除非您的打印机不是标准型号,否则您没有必要在下面指定打印机系统的类型。
    # 目前支持的打印机系统包括:bsd, sysv, plp, lprng, aix, hpux, qnx
    ; printing = bsd
    # 如果希望建立一个客户帐号,去掉下面语句前面的分号";"。同时,您必须在
    # /etc/passwd中加入这个帐号的定义,否则将使用用户"nobody"作为客户帐户。
    ; guest account = pcguest
    # 此选项将为每一个与服务器连接的机器定义一个单独的日志文件。
    log file = /usr/local/samba/var/log.%m
    # 此选项设置最大的日志文件的大小(以KB为单位)
    max log size = 50
    # 定义安全模式。大多数人都喜欢用户级安全模式,详细内容参看security_level.txt
    security = user
    # 只有当安全模式设置为服务器级(security = server)时,才定义下面选项。
    ; password server = <NT-Server-Name>
    # 如果用户想使用加密口令的话,请参阅ENCRYPTION.txt、Win95.txt和 WinNT.txt
    # 文件,请在阅读以上文件后使用下面选项。
    ; encrypt passwords = yes
    # 使用此选项允许您对每一个机器使用不同的配置。%m将被替换成与服务器
    # 请求连接机器的NetBIOS名。
    ; include = /usr/local/samba/lib/smb.conf.%m
    # 大多数人会发现此选项将显著提高服务器的执行效率,请参读speed.txt和用户
    # 手册以了解更多细节。
    socket ōptions = TCP_NODELAY
    # 配置Samba来使用多个网络界面,如果您有多个网络界面,那么必须按照下面
    # 格式在这里列出。请参阅用户手册以获得更多的细节。
    ; interfaces = 192.168.12.2/24 192.168.13.2/24
    # 浏览控制选项
    #如果不想使您的Samba服务器成为局域网内部的主浏览服务器,将此选项设为no
    ; local master = no
    # OS Level决定了该服务器在局域网内的访问优先权。
    ; os level = 33
    # Domain Master将Samba服务器定义为主域浏览器。此选项将允许Samba在子
    #网列表中比较浏览。如您已经有一台Windows NT域控制器,不要使用此选项
    ; domain master = yes
    # Preferred Master使Samba在启动时选择一个本地浏览器并给它获得选择的较高
    # 的机会
    ; preferred master = yes
    #仅当您的网络中有一台在安装时设置为主域控制器的NT服务器时使用此选项。
    ; domain controller = <NT-Domain-Controller-SMBName>
    # 如果想使Samba成为Windows95工作站的登录服务器,则使用此选项。
    ; domain logons = yes
    # 如果允许域登录服务,那么您也许希望每台机器或每个用户的登录脚本运行一
    # 个特定的每工作站的登录批处理文件。,
    ; logon scrīpt = %m.bat
    # 运行一个特定的每用户名登录批处理文件。
    ; logon scrīpt = %U.bat
    # 放置roving profiles 文件的位置(仅用于 Win95 和WinNT) ,%L代表该服务器
    # NetBIOS名,%U是用户名,您必须取消后面定义的[Profiles]前面的注释号。
    ; logon path = \\\\%L\\Profiles\\%U
    # Windows的Internet名服务支持记录部分
    # WINS Support告诉NMBD守护进程支持WINS服务器。
    ; wins support = yes
    # WINS Serve选项告诉NMBD守护进程作为WINS的客户机。
    # 注意:Samba既可以作为WINS服务器也可以作为 WINS客户机,但不能兼
    # 而有之。
    ; wins server = w.x.y.z
    # WINS Prox代表一个非WINS客户通知Samba响应名字解析请求。要使此选项
    # 正常工作必须保证网络中至少有一台WINS服务器。缺省值是NO。
    ; wins proxy = yes
    # DNS Proxy选项决定Samba是否通过DNS 的nslookups 去解析主机的NetBIOS
    # 名。对于1.9.17 以前的版本内置值是yes ,对于1.9.18之后的版本内置值是no 。
    dns proxy = no
    #================== 定义共享服务Share Definitions ===================
    # 所有使用者的home目录
    [homes]
    comment = Home Directories
    # 当一个客户程序以客人用户类出本服务器的共享服务时,不列出homes服务。
    # 但是本机用户创建的主目录服务仍使用[global]节设定的browseable。
    browseable = no
    writable = yes
    # 如果要创建一个netlogon目录则取消下面的注释。
    ; [netlogon]
    ; comment = Network Logon Service
    ; path = /usr/local/samba/lib/netlogon
    ; guest ōk = yes
    ; writable = no
    ; share modes = no
    # 如果要提供一个特定的共享roving profile则取消下面的注释。
    # 缺省值是使用用户的home目录。
    ;[Profiles]
    ; path = /usr/local/samba/profiles
    ; browseable = no
    ; guest ōk = yes
    # 注意:如果您有一个BSD 风格的打印系统,您不需要单独定义每台打印机。
    [printers]
    comment = All Printers
    path = /usr/spool/samba
    browseable = no
    # 设置public = yes 将允许以guest 帐号登录的用户使用打印机。
    guest ōk = no
    writable = no
    printable = yes
    # 此选项定义网络用户共享文件的临时目录。
    ;[tmp]
    ; comment = Temporary file space
    ; path = /tmp
    ; read ōnly = no
    ; public = yes
    # 一个用户共享目录,除了在"staff "组里的用户有些写的权限之外之外,对
    # 其它用户是只读的。
    ;[public]
    ; comment = Public Stuff
    ; path = /home/samba
    ; public = yes
    ; writable = yes
    ; printable = no
    ; write list = @staff
    # 其他例子:
    #
    # 下面定义了一台只有fred可以使用的私人打印机。Spool数据放在fred的home
    # 目录里。注意:fred必须对Spool目录有写的权限,不管这个目录在什么位置。
    ;[fredsprn]
    ; comment = Fred\'s Printer
    ; valid users = fred
    ; path = /homes/fred
    ; printer = freds_printer
    ; public = no
    ; writable = no
    ; printable = yes
    # 下面定义一个只有用户fred才能使用的私人目录。fred 必须对这个目录拥有
    # 写的权限。
    ;[fredsdir]
    ; comment = Fred\'s Service
    ; path = /usr/somewhere/private
    ; valid users = fred
    ; public = no
    ; writable = yes
    ; printable = no
    # 下面定义的是对每个域服务器连接的机器有不同的目录的服务。这将允许您
    # 对于不同的机器使用不同的配置,同样也可以使用%U选项为每个用户使用不
    # 同的配置。%m在连接时将被替换为客户机的主机名。
    ;[pchome]
    ; comment = PC Directories
    ; path = /usr/pc/%m
    ; public = no
    ; writable = yes
    # 下面定义一个所有用户都可以读写的共享目录。注意用户在这个目录中创建的
    # 文件都将归默认用户所有。所以任何可以访问这个目录的用户都可以删除别的
    # 用户在这个目录里放置的文件。显然,这个目录对于默认用户必须是可写的。
    # 当然,也可以指定某个用户,这时,该目录的所有文件将为此用户所有。
    ;[public]
    ; path = /usr/somewhere/else/public
    ; public = yes
    ; only guest = yes
    ; writable = yes
    ; printable = no
    # 下例说明了如何定义让两个用户共享一个目录,他们在这个目录里放置的文件
    # 归他们各自所有。在此例中,这两个用户对该目录都有写的权限。当然文件的
    # 保护应该设置恰当。很显然,这个例子可以扩展到适合于多个用户的情况。
    ;[myshare]
    ; comment = Mary\'s and Fred\'s stuff
    ; path = /usr/somewhere/shared
    ; valid users = mary fred
    ; public = no
    ; writable = yes
    ; printable = no
    ; create mask = 0765

     

    2 共享访问限制
    1).通过主机地址
    使用以下参数来限制通过主机地址访问:
    allow hosts
    hosts allow
    deny hosts
    hosts deny
    "allow hosts"、" hosts
    allow"这两个功能相同的参数指定允许访问一个服务的主机列表,主机列表用","号、空格或制表符隔开。如用于[global]段,则应用于所有服务,而忽略在每个服务中的各自的设置。
    主机列表的组成可以是主机名、IP地址、子网地址或网络号码/掩码。也可以使?quot;EXCEPT"关键字来限制子网中的个别主机的访问。例如:
    hosts allow = 202.204. 3 EXCEPT 202.204.3.30
    允许在202.204.3子网上的主机访问,但禁止其中的202.204.3.30访问。
    "deny hosts"、" hosts deny"这两个功能相同的参数指定禁止访问某个服务的主机列表,与"allow
    hosts"相反。当与"allow hosts"列表冲突时,"allow hosts"列表优先。


    2).通过用户口令
    使用以下参数来限制通过用户口令访问:
    security
    参数security可以确定对客户用户名/口令的验证方式。缺省为"user",即对Samba服务器的任何访问都要通过用户名/口令的验证。如果客户登录客户机,如Windows
    所用的用户名与Samba服务器上的UNIX用户名一致,则通过口令验证后就可以访问;如Windows
    所用的口令也与UNIX一样,那么不经任何提示就可以访问。
    但如果客户机上登录的用户名与Samba服务器上的UNIX用户名不一致,则需要在一个映射文件中(如/etc/smbusers)写入客户机用户名到UNIX用户名的映射,同时使用"username
    map"参数指定映射文件,例如:
    username map = /ect/smbusers
    在/etc/smbusers文件中的内容如下:
    cuckoo = "cuckoo doo"
    这样,在客户机上以"cuckoo
    doo"注册后,再与Samba服务器连接时,输入UNIX客户cuckoo的口令就可以进入,因为Samba已经把"cuckoo
    doo"映射为cuckoo。
    security 参数的另一个值是"share",表示Samba服务器不需要客户机使用用户名/口令来登录,而是根据每个共享的设置来决定是否需要用户名/口令验证。设置security为share一般用于客户机上大多数用户名与Samba服务器上UNIX用户名不相同的情况,以及Samba服务器主要提供guest 访问。
    在smb.conf文件中,如果没有设置"encrypt
    passwords",Samba将使用UNIX的password数据库来验证用户口令。这需要客户机将口令以"普通文件"的方式传递过来。如果设置了"encrypt
    passwords",Samba则使用另一个加密口令文件,通过"smb passwd file"来设置,例如:
    encrypt passwords = yes
    smb passwd file = /etc/smbpasswd

    3).通过用户名
    public
    guest ok
    上面的两个参数的功能相同,都可以使用相应的服务允许guest用户,即不需要用户名/口令验证。如果还指定了"guest
    only",那么相应的服务器只允许由guest用户来访问。
    invalid users
    valid users
    这两个参数分别设置不允许注册某个服务和允许注册某个服务的用户列表。一个用户同时出现在两个列表中的时候,不允许注册优先。列表中的用户名可以用空格隔开,以"@"开头的名字被认为是NIS
    组名或UNIX组名;以"+"开头的名字被认为是UNIX组名;以"&"开头的名字只被认为是NIS组名。
    only user
    此参数控制是否只允许在"user ="列表中指定的用户访问某个服务。如果设置为true,则只有在"user ="列表中的用户才能访问。

    4).通过是否可以读写来控制
    read only
    此参数设置为"yes",则使用服务的用户不能在该服务的目录中创建或修改文件。
    writable
    writeable
    write ok
    这三个参数功能相同。如果它们被设置为"no",则使用服务的用户不能在该服务的目录中创建或修改文件。
    read list
    write list
    这两个参数分别指定只允许对一个服务进行只读访问或同时有"写"权限的主机列表,这里,如果一个主机同时在两个列表里,则"写"优先。

    5).通过是否在浏览器列表中显示来控制
    browsable
    browseable
    这两个功能相同的参数控制该段是否在浏览列表中列出。浏览列表列出的是可获得的共享列表。一般[home]段禁止浏览,以提高安全性。

    3、Windows 9x做为SMB客户的设置
    1).配置microsoft网络客户
    在客户机(WIN9X)上,在控制面板里添加microsoft网络客户。选中microsoft网络客户--标识--计算机名--my_computer_name--my_group,其中,my_computer_name将作为表示客户机的NetBIOS名,
    my_group为组名

    2).编辑注册表记录
    如果在SMB服务器上的smb.conf 文件中没有用到"encrypt
    passwords",即使用"普通文本"格式的口令,则必须要编辑注册表,来允许使用"普通文本"格式的口令。
    在Windows的注册表的以下条目中:
    /HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP
    新建DWORD值,将新建的值命名为EnablePlainTextPassword;双击EnablePlainTextPassword,将键值设为1。

    3).重新启动
    重新启动计算机,以用户名/口令登陆。该用户名/口令将用于与SMB服务器连接时进行用户身份认证,所以如果要访问SMB服务器上用户自己的home目录,建议使用与SMB服务器上相同的用户名/口令。

    4).访问Samba服务器
    通过网络邻居浏览访问Samba服务器,可以在列表里选择,也可以在命令窗口里使用命令:
    \\\\sambaserver

    4 、Samba服务器提供的其他命令
    smbstatus
    smbstatus指令用于显示当前的SMB服务器的连接状态。例如,在IP地址为202.204.3.16的"cuckoo"客户机上,用户john访问SMB服务器的"public"服务时,命令输出如下:
    /usr/bin/smbstatus
    Samba version 2.0.3
    Service uid gid pid machine
    ----------------------------------------------
    public john john 10009 cuckoo (202.204.3.16) Fri Jul 21 20:3
    No locked files
    Share mode memory usage (bytes):
    1048464(99%) free + 56(0%) used + 56(0%) ōverhead = 1048576(100%) total
    此命令可以附加一些开关来显示不同的内容,下表列出了主要的开关及其含义:
    表1-2 smbstatus命令主要选项表

    nmblookup
    nmblookup命令用于把一个NetBIOS名字映射到IP地址。对于上面的例子,可以使用下面的命令查找主机cuckoo:
    /usr/bin/nmblookup sale
    可以使用合适的选项来允许nmblookup查询一个IP广播域或是一个单独的机器,该命令常用的选项参看表1-3。
    表1-3 nmblookup 命令主要选项列表

    smbclient
    smbclient是访问SMB服务器资源的客户程序。该程序提供的接口与ftp程序类似,访问操作包括从SMB服务器下载文件到本地,或从本地上载文件到SMB服务器,还可以在SMB服务器上检索目录信息等。
    命令语法如下:
    /usr/bin/smbclient //smbserver/service [passwd][-U username]
    其中,smbserver是SMB服务器的NetBIOS名,一般与服务器的主机名一样,但不是必须的。"service"为服务器提供的服务,如文件服务public或打印服务printer。
    passwd是访问某些服务时需要的口令。如果在命令行输入,后面则不会再提示输入口令。否则,将在后面提示输入口令。虽然有些要访问的服务器不需要口令,但仍然会有输入口令的提示。如果不希望有口令提示,则可以在命令行使用"-N"选项。
    如果要使用其他的端口与SMB服务器进行TCP连接,可以使用"-p"选项来指定,缺省值为139。
    "-U"可以指定与SMB服务器连接时使用的用户名。如果没有指定,smbclient使用环境变量USER指定的值作用户名。如果没有USER环境变量,则用"guest"。
    在环境变量USER中,可以设置"USER=username%password",这样就不用在命令行上输入口令。同时,使用ps命令看不到命令行参数,具有一定的安全性。同样,也可以使用"-U
    username%password"的形式指定用户名和口令。?quot;-U"指定的口令"%password"要优先于在命令行[password]中指定的口令。

    "-L"选项可以列出在一个服务器上提供的服务,例如:
    /usr/bin/smbclient -L smbserver
    使用下面的命令可以进入与ftp类似的提示状态:
    /usr/bin/smbclient //smbserver/service
    执行结果:
    smb:\\>
    其中"\\"表示服务器当前的工作目录。在该提示符下可以使用的命令可以通过"?"、"help"命令列出。命令不分大小写。
    在该提示符下除了可以使用很多与ftp类似的命令外,还有命令recurse,它可以被设置为on,以便在使用mget或mput命令时能够get或put匹配的子目录。recurse缺省为off,即只get或put当前目录中的文件。

    在该提示符下还可以使用下面的命令:
    smb:\\>tar c localfile filename
    将服务器上文件名为"filename"的文件和目录(可以使用通配符)经过tar 拷贝到本地的"localfile "文件中。或者:
    smb:\\>tar x localfile filename
    可以把本地tar 文件localfile 中的文件filename拷贝到服务器上;如果filename省略,则拷贝所有的文件。
    上面的命令也可以在smbclient命令行上来执行,如:
    /usr/bin/smbclient //smbserver/service [passwd] -T c local file filename
    /usr/bin/smbclient //smbserver/service [passwd] -T x local file filename
    smbprint
    smbprint是在Linux系统下将打印文件提交给远地SMB服务器打印的脚本程序。程序中调用的命令就是smbclient。下面举例说明此命令的使用方法。
    例如,远端SMB服务器NetBios名为prtserver(Windows
    9X),提供打印服务。服务名为netpcl(NEC激光打印机),不需要口令。
    在Linux系统中配置如下:
    1. 编辑/etc/printcap文件,加入下面一行
    smb:lo=/dev/null:sd=/usr/spool/smb:sh:if=/usr/bin/smbprint:af=/var/spool/lpd/smb/acct
    2.建立目录/usr/spool/smb、/var/spool/lpd/smb
    3.用下面命令建立记帐文件
    touch /var/spool/lpd/smb/acct
    4.建立/var/spool/lpd/smb/.config文件,包含下面内容:
    server = prtserver
    service = necpcl
    password = ""
    5.编辑/usr/bin/smbprint文件,在smbclient命令参数中使"echo
    translate"有效,这样可以使UNIX文件到Windows 9x系统打印时,进行<LF>与<CR/LF>的转换。
    6.启动lpd:
    /etc/rc.d/init.d/lpd start
    7.使用lpr命令打印/etc/hosts文件
    /lpr -P smb/etc/hosts
    lpr缺省使用的打印机名为lp,这里使用的是smb。

    5、使用Samba加密口令
    客户机访问Samba服务器时进行的用户身份认证包括使用"普通文本"格式的口令,通过网络传送给SMB服务器,与UNIX的帐户数据库(如/etc/passwd)进行核查;或者使用加密口令,通过"SMB
    challenge/response"验证进行核查。本文着重介绍加密口令的用法。
    在Samba服务器中使用了与Windows NT兼容的口令加密算法,因此可以像Windows NT一样对Samba的客户进行用户口令核实。
    Windows
    NT 使用一个包含用户口令hashed值的文件,是通过对用户的"普通文本"的口令经过加密算法得到的,称为"hashed口令"。不能从该hashed值返回得到原始的"普通文本"的口令。在Samba服务器上可以形成同样的hashed口令,保存在smbpasswd文件中。
    当一个Samba客户(如Windows 9x
    或NT)使用Samba资源时,它先请求一个连接,并商讨连接使用的协议。Samba回答客户请求时产生一个随机值,发送给客户,并且还储存在Samba服务器上,称为"challenge"。"challenge"对于每一个客户连接是不一样的。
    客户然后使用hashed口令与"challenge"进行加密运算,产生24个字节的"response",发送给Samba服务器。
    Samba服务器使用自己保存的hashed值的用户口令(保存在smbpasswd文件中)与先前产生的"challenge"进行同样的加密运算,将产生的结果与客户发送过来的结果进行比较,如果结果相同,则客户被允许访问;否则,禁止用户访问。

    对于Samba服务器来说,它不存储"普通文本"格式的口令,储存的是从"普通文本"口令转换的hashed口令。并且在网络连接时,"普通文本 "和 "hashed口令"都不被传送,所以比UNIX安全。因为当客户程序与UNIX服务器连接时(如telnet),口令往往是以"普通文本"在网络上传送的,可以被网络窃听软件(如tcpdump)截获。Samba加密口令文件smbpasswd会被利用成为潜在的漏洞。所以该文件是要由root所有,读写权限应该为600。
    Windows 9x
    或NT缺省的用户认证方式是使用加密的口令,这?quot;普通文本"不在网络上传送。相应的,Samba也要使用加密口令的认证方式。但如果想使用"普通文本"格式的口令,可以编辑Windows
    NT的注册表来允许。这样,Samba服务器就可以使用/etc/psswd文件来验证用户口令,而不需要smbpasswd文件。
    要想让Samba使用与Windows
    NT兼容的口令加密算法,则必须在Samba服务器上保存包含与用户名对应的hashed值的口令文件。可以使用/usr/bin/mksmbpasswd.sh程序产生加密口令文件的框架,文件名由"smb
    passwd file"参数设置,这里是/etc/smbpasswd,命令行格式为:

    cat /etc/passwd |mksmbpasswd.sh >/etc/smbpasswd

    然后root可以使用smbpasswd命令可以设置用户口令,例如设置客户cuckoo的smb口令为smbpassword:
    /usr/bin/smbpsswd cuckoo smbpassword
    root还可以使用smbpsswd 进行添加用户、取消口令等操作。但添加的用户必须在/etc/psswd文件中存在。普通用户使用smbpsswd
    命令只能像使用passwd程序一样更改自己的smb口令。


    三、Samba常见故障排除

    Samba的故障排除可以在SMB服务器和SMB客户机上通过各自的命令来完成。
    1 SMB服务器上的操作
    1).使用下面的命令来查看是否有错误的配置。
    /usr/bin/testparm /etc/smb.conf
    2). 在服务器上以及客户机上用ping命令检查tcp/ip是否正常工作。
    3). 在SMB服务器上用
    /usr/bin/smbclient -L SMBserver
    命令将得到一个共享的列表。
    如果出现失败信息,则要检查与服务器相关的"hosts allow"、"hosts deny"、"valid users"、"invlid
    users"等参数的设置。如果出现"connection
    refused",则检查Samba服务器进程是否启动;若Samba以守护进程形式运行的话用"netstat -a"命令检查端口是否处于监听状态。
    4). 运行了命令"/usr/bin/nmblookup SMBserver",将返回SMB服务器的IP地址。否则nmbd没有正确的运行。
    5). 运行"/usr/bin/nmblookup -d 2 \'*\'
    "命令,在子网中运行NetBIOS/TCPIP的主机将会响应。否则说明nmblookup
    不能正确的得到广播地址,可以尝试在smb.conf文件中用interfaces参数人工设置IP地址、广播地址和子网掩码。
    6). 运行"/usr/bin/smbclient
    \' \\\\SMBserver\\homes"命令,需要输入客户在SMB服务器上的用户口令,然后会出现类似"smb>"的提示符。这时可以使用 dir命令浏览客户在SMB服务器帐户目录下的文件,用help命令可以得到其他命令的帮助。如果不能出现类似"smb>"的提示符,并且有 "invalid
    network name"的错误信息,则有可能homes共享没有正确的设置;或者有"Bad password",则要检查"shadow
    password"、"password encryption"以及参数"valid users"和"path"的设置。

    2、SMB客户机上的操作
    1). 运行"net view \\\\SMBserver"命令,应该能够列出SMB服务器上的共享。
    如果出现类似"network name not found"的错误,则要检查客户机上DNS或WINS的设置。如果出现"Invalid network
    name"或"bad password error"的错误,则参照与上面"smbclient
    -L"命令中同样的错误结果的解决方法。要注意客户机将要用客户注册客户机时所用的用户名/口令去与SMB服务器连接,所以在SMB服务器上,用户最好有同样的用户名/口令。
    2). 使用"net use
    x;\\\\SMBserver\\homes"命令,可以把SMB服务器上客户home目录映射到客户机"x:"盘,"x:"应该是一个客户机上未用的盘号。这样,共享的目录可以在客户机上以"x:"盘来看待。正常的信息为"command
    complete successfully"。
    如果要停止使用"x:"盘,可以使用"net use
    x:/delete"命令。如果不能正常的把客户的home目录映射到"x:"盘,则要检查SMB服务器上"hosts
    allow"等参数的配置。如果客户机上的用户名不能与服务器上的用户名匹配,尝试使用"username map"选项。
    3). 如果在SMB服务器上没有使用"encrypted passwords",则在客户机上要在注册表中允许使?quot;普通文本"格式的口令。

    小结

    Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务。Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。
    守护进程smbd和nmbd是Samba的核心,在全部时间内运行。nmbd
    程序使得通过企图计算机可以浏览Linux服务器。Smbd守护进程在SMB软件包到达网上时对它们进行处理,并且为使用或共享它的资源与Linux进行协调。
    在安装完Samba后,还需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。smb.conf文件的的语法结构与 Windows 的*.ini文件十分类似;文件结构主要包括三部分:全局参数部分、目录共享部分、打印共享部分;本文着重介绍了如何配置各选项以完成特定的功能。
    通过使用不同的参数,可以实现对Samba的不同访问控制:通过主机地址限制访问、通过用户口令限制访问、通过用户名限制访问、通过验证读写权限限制访问、通过是否在浏览器列表里显示来控制等。所有这些方法,大大的增强了Samba服务器的安全性。

  • Linux中JDK的安装和配置方法

    2007-04-29 19:07:05

    安装JDK

    从sun网站上直接下载JDK:http://java.sun.com/j2se/1.4.2/download.html 提供了两个下载:

    1、RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586.bin, 32.77 MB) 这个是自解压的文件,在linux上安装如下:

    # chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin

    # ./j2sdk-1_4_2_04-linux-i586.bin

    在按提示输入yes后,jdk被解压到./j2sdk1.4.2_04目录下。为与下面2中JDK安装路径一致,我们进行下列操作,在/usr/java下建立安装路径,并将文件考到该路径下:

    # mkdir /usr/java

    # cp -fr ./j2sdk1.4.2_04 /usr/java



    2、RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586-rpm.bin, 32.77 MB)这个也是一个自解压文件,不过解压后的文件是j2sdk-1_4_2_04-linux-i586-rpm包,执行rpm命令装到linux上就可以了。安装如下:

    #chmod u+x ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # rpm -ivh j2sdk-1_4_2_04-linux-i586-rpm

    安装软件会将JDK自动安装到 /usr/java/j2sdk1.4.2_04目录下。

    二、配置环境变量

    1.修改用户环境变量

    假设使用java的用户为 kunp,编辑该用户的.bashrc文件进行环境变量设置。

    # vi /home/kunp/.bashrc

    在 .bashrc文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    2.修改所有用户的环境变量

    # vi /etc/profile

    在该文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    一定要在CLASSPATH路径中加入$CLASSPATH:



    java1.6的安装稍有不同,下载成功后上传至服务器任意目录!

            2. 在当前目录输入

            sh jdk-6u2-linux-i586-rpm.bin

            3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议.

            出现一行字:Do you aggree to the above license terms? [yes or no]

            安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。

            4.在命令行输入:

            vi /etc/profile

            在里面添加如下内容

            export JAVA_HOME=/usr/java/jdk1.6.0_02
            export JAVA_BIN=/usr/java/jdk1.6.0_02/bin
            export PATH=$PATH:$JAVA_HOME/bin
            export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
            export JAVA_HOME JAVA_BIN PATH CLASSPATH

            5.进入 /usr/bin/目录

            cd /usr/bin

            ln -s -f /usr/java/jdk1.6.0_02/jre/bin/java

            ln -s -f /usr/java/jdk1.6.0_02/bin/javac

            6. 在命令行输入

            java -version

            屏幕输出:

            java version "jdk1.6.0_02"
            Java(TM) 2 Runtime Environment, Standard Edition (build jdk1.6.0_02)
            Java HotSpot(TM) Client VM (build jdk1.6.0_02, mixed mode)

            7. 安装JDK1.6完毕.

            另:

            查看linux版本信息的方法:
            1)uname -a
            2)cat /proc/version
            3)cat /etc/issue


  • linux系统服务

    2007-04-27 20:35:12

    linux系统服务

    init服务

        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文件定义的。

    1. /etc/inittab文件

        /etc/inittab文件中包括了所有init启动运行级别所必须的信息。这个文件中的每一行语句的格式如下所示:      
    id : runlevels: action : process
       
    注意:以#开始的语句是注释语句。看看你自己的/etc/inittab文件就可以发现其中充斥了大量的注释语句。如果确实需要对/etc/inittab文件进行什么改动(一般不会出现这种情况的),记住加上一些注释语句,解释为什么要做那些修改。

    2. Telinit命令

        通知init在什么时候切换系统运行级别的神秘力量实际上就是Telinit命令。这个命令有两个命令行参数:一个参数用来通知init准备切换过去的运行级别;另外一个是-tsec,其中的sec是在通知init之前需要等待的、以秒计算的时间。
        注意:init是否真的切换运行级别是由它自己决定的。很明显,它经常切换,否则这个命令就不会那么有用了。在大多数Unix操作系统的具体实现(包括linux)中,Telinit命令实际上只是一个对init程序的符号链接。基于此,许多人更喜欢使用init直接切换到他们想去的运行级别而不是使用Telinit。就个人而言,我发现使用Telinit切换运行级别更便于理解和记忆。


    inetd进程

        inetd程序是一个守护进程。您可能已经知道守护进程是一些特殊的程序:它们在被启动之后,自愿放弃对调用自己终端的控制权。守护进程与系统其余部分的接口只有依靠进程间通信(Interprocess Communication,IPC)通道、或者依靠向系统全局性日志文件(Log File)才能发送数据项。
        inetd的角色是作为Telnet和FTP等与网络服务器相关的进程的“超级服务器”。这是一个简单的道理:并不是全部的服务器进程(包括那些接受新的Telnet和FTP连接的进程)都会如此频繁地被调用,以至于必须要有一个程序随时运行在内存中。因此为了避免出现可能有几十种服务都运行在内存中准备被使用的情况,它们都列在inetd的配置文件/etc/inetd.conf中。而代替它们的是inetd监听着进入的连接。这样只需要有一个进程在内存中就可以了。
        inetd的另外一个优点是程序员并不想把需要网络连接的进程都编写到系统中去。inetd程序将处理网络代码,并把进入的网络数据流作为各个进程的标准输入(Standard-In,即Stdin)传递到其中。这些进程的输出(Stdout)将会被送回连接到该进程的主机去。
        注意:除非你正在进行编程,否则是不需要连接到inetd的Stdin/Stdout功能上。从另一方面来说,如果有人打算编写一个简单的命令脚本程序并让它出现在网络中,就值得深入研究这个极为强大的功能。

    1.etc/inetd.conf文件

        etc/inetd.conf文件是inetd的配置文件。它的结构很简单:每一行语句代表一种服务。服务定义语句的格式如下所示:

    srvce_name sock_type protocol [no]wait user srvr_prog srvr_prog_args

    2.安全性与inetd.conf文件

        你将会发现在大多数的linux安装中,许多服务在缺省的情况下是打开的。如果你的系统将向因特网开放(包括通过拨号点对点协议被连通),你想做的第一件事就会是把一切都关闭!决不要假设因为你的系统没有对公众进行宣传,别人就不会找到它。从相反的方向看,寻找存在安全性攻击隐患系统的工具软件是既容易找到又容易使用的。
        关闭服务的第一个步骤是把etc/inetd.conf文件里所有用不着的服务性说明语句都改为注释语句。一般来说,你会发现下面的方法更容易使用:先把全部东西都改为注释语句(彻底关闭网络服务),再有选择地打开需要的服务。在完成对etc/inetd.conf文件的修改之后,需要向守护进程报告其配置文件已经被修改了。这是通过向该守护进程发送HUP信号来实现的。先使用下面的命令找出inetd.conf对应的进程ID:

    [ root@ford /root ] # ps auxw | grep inetd | grep -v grep

    这个命令的输出类似于下面的内容:

    root 359 0.0 0.1 1232 168 ? S Jun21 0 : 00 inetd
        root 359 0.0 0.1 1232 168 ? S Jun21 0 : 00 inetd

        输出中的第二列告诉我们进程ID号(这里就是359)。为了发送HUP信号,我们需要使用Kill命令(把这个程序叫做Kill多少有些误导。实际上,它只是向进程发送信号而已。缺省的情况下,它会发出请求某个程序终止运行的信号)。
        下面是使用Kill命令发送HUP信号的方法:       $ kil -1 359
    应该把上面命令中的359换成从你的系统上得到的进程编号。

    syslogd守护进程

        在同一时间会发生许许多多的事情,而在终端窗口中断开连接的网络服务就更是如此了。因此,提供一个记录特殊事件和消息的标准机制就非常有必要了。linux使用syslogd守护进程来提供这个服务。
        syslogd守护进程提供了一个对系统活动和消息进行记录的标准方法。许多其他种类的Unix操作系统也使用了兼容的守护进程。这就提供了一个在网络中跨平台记录的方法。在大型的网络环境里,这更具有价值。因为在那样的环境里,集中收集各种记录数据以获得系统运转的准确情况是很有必要的。你可以把这种记录功能子系统比作Windows NT的SystemLogger。
        syslogd保存数据用的记录文件都是简明的文本文件,一般都存放在/var/log子目录中。每个数据项构成一行,包括日期、时间、主机名、进程名、进程的PID,以及来自该进程的消息。标准C函数库中的一个全局性的函数提供了生成记录消息的简单机制。如果不喜欢编写程序代码,但是又想在记录文件中生成数据项,可以选择使用Logger命令。可以想象,像syslogd这样重要的工具应该是作为开机引导命令脚本程序的一部分来启动的。你准备在服务器环境中使用的任何一个linux发行版本都已经为你设置好了。

    1.调用syslogd

        如果需要手动启动syslogd,或者需要修改开机引导时启动它的命令脚本程序,你就必须注意syslogd的命令行参数,请大家参看有关书籍,这里不做详细介绍。

    2./etc/syslog.conf文件

        /etc/syslog.conf文件包含了syslogd需要运行的配置信息。这个文件的格式有些不寻常,但是现有的缺省配置文件将足以满足使用需要了,除非你需要在特定的文件中查找特定的信息,或者需要把这些信息发送到远程记录计算机去。

    ● 记录信息分类

        在我们掌握/etc/syslog.conf文件格式本身之前,需要先了解记录消息是如何分类的。每个消息都有一个功能值(Facility)和一个优先权值(Priority)。功能值告诉我们这条消息是由哪个子系统产生的,而优先权值则告诉我们这个消息有多重要。这两个值由句号分隔而且都有等价的字符串,从而容易记忆。


    ● /etc/syslog.conf文件的格式

    下面是配置文件里各语句的格式:

    facility/priority combinations separated by commas file
    /process/host to log to

    举例如下:

    kern.info /ver/log/kerned

        syslogd还可以灵活地把记录消息发送到多种不同的保存目的地去。它可以把消息保存为文件、把消息发送到FIFO队列、发送到一组用户、或者(在大型站点集中记录消息的情况下)发送到一个中心记录主机中。为了区分这些目的地,在目的地入口使用了下面的规则:

    ◆ 如果保存目的地的开始字符是斜杠字符(/),消息将发送到某个文件。

    ◆ 如果保存目的地的开始字符是垂直字符(|),消息将发送到某个FIFO队列。

    ◆ 如果保存目的地的开始字符是“@”字符,消息将发送到某个主机。

    cron进程
        cron进程为用户提供一种可以计划在一定时间间隔后自动执行任务的功能。cron通常还会负责at队列中作业的启动。该进程从crontab文件中得到信息,对于每个用户都会有一个独立的crontab文件。运行crontab -l命令,就可以查看已排列的命令列表。
    如果要更改cron信息,必须创建一个crontab文件。crontab有固定的格式,有效行包括六个区域,即:
    分钟(0-59),小时(0-23),日(1-31),月(1-12),星期(0-7,0和7都代表周日),命令(要运行的任务)
    每个区域都可能带一个星号,表示整个区间,每个区域也可以使用x-y的形式包含一个范围,也可能包含一个用逗号隔开的列表。
  • linux心得(转)

    2007-04-27 20:24:26


    一、shell命令
    1.$ date        显示时间
    2.$ who         查看登陆系统的用户
      $ who am i    查看自己的信息
    3.$ echo        在终端机上显示键入在命令行的任何信息,会去掉单词中的空格
      例如:$echo this is test
      显示  this is test
    4.$ ls 列出文件清单
    5.$ cat (查看的文件名称)   显示文件内容
    6.$ wc  (参数 -l 行数 -c 字符数 -w 单词数) (统计的文件名称)    统计文件中的行数,字符数,单词数
    7.$ cp (源文件)  (目标文件)  复制命令
    8.$ mv (源文件) (目标文件) 文件重命名命令,也可以移动文件的位置
    9.$ rm 删除命令
    10.$ pwd 显示当前工作目录
    11.$ cd 改变当前工作目录
    12.$ mkdir 创建目录
    13.$ rmdir 删除目录(目录为空)
    14.$ rm 删除文件 加参数 -r 删除目录和目录中的文件
    15.替换符合:* 替换为目录中的所以文件的文件名。单字替换符合:? 替换单字。[abc]替换 a 或 b 或 c 。[0-9] 匹配0-9的任意字符。如果 [ 后的字符是 !,表示反过来匹配,即可以匹配除方括号中所列字符以外的任何字符。
    16.ln:链接命令。(优点,减小系统占有,使文件同步)
    一般格式:ln from to 把文件from 和文件to 链接起来。
    连接的限制是必须位于同一个文件系统,连接后对于任何一个文件的改变都会影响的另一个文件,但是删除任何一个文件,另一个文件依然存在,不受删除的影响。(判断系统中有那些文件系统用 df 命令)
    不同的系统进行连接加参数 -s ,建立一个符合化连接。此连接与普通连接很相似,不同的是,删除源文件后,该符合连接就不起作用了。
    17.输出的重新定向:命令德输出通常提交到标准输出设备,也可以很方便德转向一个文件来代替,这叫输出重新定向。
    命令:在把输出写入到标准输出德命令后加 > filename
    例如:$ who >filename
    >> 符号为不覆盖原来的文件内容
    $ > filename ,前面没有命令时,shell会创建一个空的文件(长度为0个字符),如果文件已经存在,其内容会消失。
    18.输入重定向:对应于输出的重新定向的就是输入重定向,命令符合是 <
    例如:$ wc -l < filename
    19管道:unix系统可以把两条命令的的效果连接起来,这种连接称作管道。
    例如:$ who | wc -l
          $ ls | wc -l
    20.过滤器:指能够从标准输入接受输入,对输入进行处理后,把结果写入标准输出的任何程序。wc , cat ,sort 是过滤器,ls,who,date,cd,pwd,echo,rm,mv,cp都不是。
    21.标准错误:unix把大部分错误信息都写的这里,标准错误默认也是终端。
    把错误输入到文件试用命令格式:命令 2> 文件
    例如:$ls n* 2> filename
    22.一行键入多个命令,用;号分割
    例如:$ date ;pwd
    23.命令发送到后台:在命令后加一个 & 号,该命令就发送到后台了。
    例如:$ date >> filename &
    24:ps命令:查看进程的命令,参数 -f 查看父进程的命令
    例如:$ ps -f
    25.正规表达式
    :%s/old/new/g  注:g是全部替换  或 :%s/old/new   全部替换:看vi说明
    ifconfig用root用户登陆查看本机的ip地址



    26.cut:从文件中剪出各种各样的数据 【cut -cdhars file】
    cut -c5- data  把data文件中的每一行的第五个到行尾的字符剪出来,并把结果写入标准输出
    who | cut -c1-8 剪出who的输出的每一行的第一个到第八个字符
    who | cut -c1-8 | sort 剪出who的输出的每一行的第一个到第八个字符,并进行排序
    cut -d: -f1 /etc/passwd 剪出/etc/passwd 中的以:开头的第一个字段
    cut -d: -f1,6 /etc/passwd 剪出/etc/passwd 中的以:开头的第一个字段和第六个字段
    27.paste 把多个行合并起来,然后输出   【paste files】
    paste names numbers 将两个文件合并,然后输出
    paste -d'+' names numbers 将两个文件合并中间用+号连接,然后输出
    paste -s names 将一个文件所有行合并,然后输出
    ls | paste -d' ' -s - 把ls的输出用合并一行并用空格分开。
    28.sed 是用来编辑数据的程序,意思是流编辑器。sed不能用于交互。【sed command file】。
    sed 's/unix/UNIX/' intro 将unix改为UNIX
    sed不对原始文件进行更改,要保存更改,必须把sed的输出重定向到一个临时文件,然后把临时文件移回原来的文件。
    sed 's/unix/UNIX/' intro > temp
    mv temp intro
    sed -n '1,2p' intro 显示前两行
    sed -n '/unix/p' intro p命令前用斜扛括住字符串,sed只从标准输入中显示包含这些字符的行。
    sed '1,2d' intro 要删除正行,用d命令。删除1,2行
    29.grep:从一个或多个文件中搜索特定的字符串。【grep pattern files】
    grep shell ed.cmd 从ed.cmd中找出shell所在行
    grep '[A-Z]' list list中包含一个大写字母的行
    grep '[0-9]' list list中包含一个数字的行
    grep '[A-Z]...[0-9]' list list中包含以大写字母开头,数字结尾的5个字符组合的行
    grep '\.pic$' filelist filelist中以.pic结尾的行
    grep -v 'unix' intro 显示不含unix的行
    grep -l 'move_history' *.c 列出包含'move_history' 变量的行
    grep -n 'move_history' *.c 列出包含'move_history' 变量的行,前面加行号。
    30.sort 输出进行排序
    sort -u names 输出中去掉重复的行
    sort -r names 反序排序
    sort names -o new_names 将结果输出到new_names中
    sort -n data 安算术方法排序
    sort +1n data 跳过第一个字段排序
    31.uniq查找连续的重复行。【uniq in_file out_file】
    sort names|uniq -d  显示重复的行
    二、shell编程起步
    1.要让文件可以执行,要改变文件的许可
    chmod +x nu 改变文件nu的许可,然后在当前目录下键入【./nu】即可执行
    2.注释符合为#号
    3.变量:以字母或下划线开头,后跟0个或若干个字母、数字、下划线字符。【variable=value】
    count=1 注意=号两边不能有空格,linux中没有数据类型的概念。
    4.显示变量的值【echo $vairable】$符合不能掉了
    echo $count
    5.空值:如果一个变量没有值,我们就说它含有空值,这是变量没有赋值时的默认值。
    6.文件名替换和变量:shell先做变量替换,后做文件名替换。
    7.$(variable)结构
    假定把一个文件名存于变量filename中,要在文件名后加X
    mv $filename ${filename}X   给文件名后加X
    8.内部的整数算术运算【$((espression))】
    例如:echo $((a=a+1))  应为a没有赋值,所以结果是1,等价于a=0+1
    表达式中可以随意使用括号来强制分组,例如:echo $((i=(i+10)*j))
    如果不想用echo或其他的什么命令而想直接给变量赋值,可以把赋值移到算术扩展前面
    例如:i=$((i*5))
    判断表达式:result=$((i >= 0 && i<= 100)),为真是result=1,为假result=0。
    三、引用
    1.单引号:
    作用(1、)让本来需要用空格分割的字符合在一起
    例如:grep 'susan goldberg' filename 从filename中找出叫susan住址是goldberg的人(filename中有两个susan的人),如果使用(grep susan goldberg filename),将报错(grep:can't open goldberg)。当shell看到第一个单引号时,忽略掉其后直到右引号的所有本来有特殊作用的字符。
    echo '*' 输出 *
    echo '$file' 输出 $file
    2.双引号:双引号不忽略一下三种符合(美圆符合、反引号、反斜扛)
    例如:x=*
    echo $x  输出 当前的文件名
    echo '$x' 输出 $x
    echo "$x" 输出 * (双引号告诉shell在引号内照样进行变量的替换,所以shell把$x替换为*,因为引号中的不做文件名的替换,所以就把*号做为要显示的值传递给echo)
    如果想替换变量的值,又不想shell把替换的内容做特殊字符对待,就应该把变量名括在双引号中。
    可以用双引号来对shell隐藏单引号,反之亦然。
    例如:x="'hello,'said"
    echo $x 输出 'hello,'said
    x='"hello,"saidfff'
    echo $x 输出 "hello," saidfff
    3.反斜扛:反斜扛等价于在一个字符前后加上一个单引号,也有一些例外。
    例如:echo > 报错
    echo \> 输出为 >
    x=*
    echo \$x 输出 $x
    特殊:shell把行尾的反斜扛作为续行,它去掉根在后面的换行字符,也不把换行字符当作参数分隔符。这种结构在分行键入长命令时经常使用。
    双引号中的反斜扛:作用去掉字符的特殊意义。
    例如:x=5
    echo "the value of x is \"$x\""    \"$x\"等价于$x
    输出 the value of x is "5"
    4.命令替换:命令替换是指shell能够将一个命令的标准输出插入在一个命令行的任何位置的功能。shell有两种方法作命令的替换:把shell命令用反引号或者$(...)结构括起来。
    反引号是告诉shell执行括起来的命令,并将括起来的命令的标准输入插入到这个位置。【`command`】
    例如:$echo the data is:`date`
    $(...)结构:例如(echo the is:$(date))
    $(...)结构可以嵌套:echo the are $(who | wc -l) user logged in
    处理echo 命令行的过程中,shell在进行替换时将换行字符去掉了,在变量外括上双引号可以保留换行字符。
    例如:namelist=$(cat names)
    echo "$namelist"   输出的结果有换行字符的
    5、expr 用来进行算术的运算的
    例如:expr 1+2 结果是3
    expr "17*5" 输出是17*5
    expr 17\*6  结果是102
    例如:i=1
    i=$(expr $i + 1)
    echo $i     结果是2
    以大Z结尾的压缩文件的说明:压缩命令compress 文件名,解压uncompress 文件名
    adduser是增加使用者.
    touch filename 作用是重新读取文件
                            第七章  参数传递
    1、$#变量里存储的是命令行中所键入的参数的个数
    2、$*变量里存储的是命令行中所键入的所有的参数
    3、echo "$1        $2" >> filename 【将$1和$2的变量添加到filename文件的后面】
       sort -o filename filename 【增加新项后的新文件保持有序】
    4、删除文件中的数据
    grep -v "$1" phonebook > /temp/phonebook
    mv /temp/phonebook phonebook
    【删除文件中指定名字的行,然后将文件重新定向,再次覆盖源文件。grep -v "$1" phonebook,输出phonebook中不含"$1"的数据行,> /temp/phonebook,将输出写入到根目录下的temp文件夹下的phonebook文件里,然后将当前目录下的phonebook文件用/temp/phonebook文件覆盖掉】
    5、如果要给一个程序传递9个以上的参数,不能用$10,$11,要用${n},例如:${10},shell将$10替换成$1的值后面跟一个0。
    6、shift命令的作用是把位置参数左移。
    当执行shift时,$2的值的将赋给$1,$3的内容将赋给$2,$1的值将丢失。
    通过shift后跟一个数字,可以一次移动几个位置,shift 3,相当与shift shift shift
                            第八章  判断
    1、if命令
    【if command(0表示成功,非0表示失败)
      then
            command
            command
      fi

    2、$?变量
    shell自动将最后执行的命令的退出状态设置到shell变量$?中,可以用echo命令在终端上显示出来。
    3、test命令:【test expression】,其中expression表示要测试的条件。test计算expression,如果结果是真,其返回值是0;如果为假,返回值是非0。
    注意:test把所有操作数和操作符作为单独的参数分别对待,也就是说他们之间至少要有一个空白字符分隔。
    例如:test "$name" = rose 。把给test的参数中的shell变量用引号括起来,可以保证在参数为空时,仍然知道有这个参数。
    4、检测字符串的操作符

    5、test的另一个格式
    test expression 等于 [ expression ]
    例如:if [ "$name" = rose ]
            then
                    echo "name is rose"
          fi
    6、test 整数操作符

    7、test的常用文件操作符

    8、逻辑非操作符!
    可以把一元的逻辑求非操作符放在其他任何test表达式之前,对这个表达式的结果求非。
    例如:/home/phonebook不可读的话,[ ! -r /home/phonebook ] 返回的退出状态为0(真)
    9、逻辑与操作符 -a
    操作符 -a对两个表达式做逻辑与操作,如果两个表达式都为真,则返回真。
    例如:$file 代表的文件是普通并可以读取的文件, [ -f "$file" -a -r "$file" ] 返回真。
    10、小括号
    test命令中可以用小括号改变求值的顺序,只是要保证把小括号用引号括起来。
    例如: [ \( "$number" -ge 0 \) -a \( "$number" -lt 10 \) ]就是 0 =< number < 10。
    11、逻辑或操作符 -o
    和-a类似,两个表达式中一个为真,他求的结果就是真。 -o的优先级小于-a 。
    12、else结构
    【if command1
      then
            command
            command
      else
            command
            command
      fi】
    13、exit命令
    【 exit n 】
    exit命令可以立即终止shell程序的执行,n为希望返回的退出状态。如果不指定,就采用exit之前最后所执行命令的退出状态。
    14、elif结构
    【if command1
      then
            command
      elif command2
      then
            command
      else
            command
      fi】
    15、case命令
    【case value in
            pat1) command
                  command;;
            pat2) command
                  command;;
            *) command;;【没有匹配项时,执行这个命令】
    esac】
    把value依次和pat相比较,直到发现一项匹配,就执行该匹配项后直到双分号之间的所有命令,执行到双分号后,该case语句就结束;如果没有发现匹配的,则case语句的命令一条也不执行。
    16、sh -x 后面跟程序名及其参数,可以对程序进行调试。
    17、|符号,当把|用于两个模式之间时,其作用是逻辑或,即模式pat1 | pat2,表示要匹配pat1 或 pat2
    例如:hour=$(date +%H)
          case "hour" in
            0? | 1[01] ) echo "good morning";;
            1[27]      ) echo "good afternoon";;
            *          ) echo "good evening";;
          esac
    根据时间给出问候。
    18、空命令
    【:】就是单冒号。
    shell 要求then后必须有一条命令,这就是空语句的用武之地。
    例如:if grep "'^system" /user/systems #希望验证文件/user/systems中是否包含变量system,如果不包含,发出错误信息。
          then
            :
          else
            echo "$system is not a valid systems"
            exit 1
          fi
    19、&&和||结构
    【command1 && command2】如果command1返回的是0,就执行command2。如果command1返回的不是0,就跳过command2。
    【command1 || command2】如果command1返回的非0,就执行command2。如果command1返回的是0,就跳过command2。
    当在if中用||时,她的作用相等于,逻辑或。
    20、让程序在后台运行,使用命令:【filename &】就行了。
                                        第九章 循环
  • 系统学习Linux的十一点建议 zt(转自wawa4046 )

    2007-04-27 20:07:33



    一、从基础开始

      常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。
      
      二、Linux命令是必须学习

      虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。举一个例子:Linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手.它的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。

      不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解Linux系统:

      安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh

      文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln

      系统管理相关命令:df、top、free、quota、at、lp、adduser、groupaddkill、crontab、tar、unzip、gunzip、last

      网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup

      系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho
      

      三、选择一本好的工具书

      工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多,笔者强烈建议阅读影印本的“O'Reilly原版Linux图书http://www.oreilly.com.cn/”,而且出版社还提供了一个非常好的路线图:http://www.oreilly.com.cn/guide/guide_linux.php

      
      四、选择一个适合你的Linux发行版本

      目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。对于英语不是很好的读者红旗 Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。

      五、养成在命令行下工作

      一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
      
      六、选择一个适合你的Linux社区

      随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。建议选择一些适于初学者的Linux社区。
      
      七、勤于实践

      要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。
      
      八、如何得到联机帮助

      和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。

      1.主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。

      2.查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。

      九、在Linux论坛获取帮助

      如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。 Linux的使用者一般都是专业人士,他们有着很好的电脑背景且愿意协助他人,Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问,否则只会得到到草率的回答或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。

      下面笔者在论坛看到的一个好问题: “安装红旗4.0后,系统紫光输入法自带的双拼方案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练,笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机,生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的,这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。

      下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题我想即使Linux高手也很难快速准确精练的回答你。

      你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。另外把这个问题放在其他Linux社区请求帮助也是一种选择。如果得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。

      另外发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。

      十、用Unix思维学习Linux

      Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
      
      十一、学习专业英文

      如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
      
      附:  
      1.掌握至少50个以上的常用命令。
      2.熟悉Gnome/KDE等X-windows桌面环境操作。
      3.掌握.tgz、.rpm等软件包的常用安装方法。
      4.学习添加外设,安装设备驱动程序(比如网卡)。
      5.熟悉Grub/Lilo引导器及简单的修复操作。
      6.熟悉Linux文件系统?和目录结构。
      7.掌握vi,gcc,gdb等常用编辑器,编译器,调试器。
      8.理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。
      9.学习Linux环境下的组网。
  • LINUX学习笔记

    2007-04-27 19:55:03


    1、在linux下查看windows fat32 分区的内容:

       首先建立目录即挂载点/mnt/wine;
       若要在启动时自动加载,则在/etc/fstab中加入:
       /dev/hda6  /mnt/wine  codepage=936,iocharset=cp936  1  1
       
       也可启动后手动加载:
       mount -t vfat -o iocharset=cp936 /dev/hda6  /mnt/wine

       卸除分区:  umount  /mnt/wine


    2、 mount的用法:
        fat32: mount -t vfat -o iocharset=cp936  /dev/hda6  /mnt/wine
        ntfs:  mount -t mtfs -o iocharset=cp936  /dev/hda6  /mnt/wine
        iso:   mount -t iso  -o loop  /abc.iso   /mnt/wine
        软盘:  mount  /dev/fd0  /mnt/floppy
        usb:   mount  /dev/sda1   /mnt/wine


    3、 解压小全:
        tar  xvfj  example.tar.bz2
        tar  xvfz  example.tar.gz
        tar  xvfz  example.tgz
        tar  xvf   example.tar
        unzip   example.zip



    4、redhar linux 启动到文字界面(不启动到x-windows)
       将 /etc/inittab  中id:5:initdefault 行中的 5  改为  3

       在文字界面,在shell提示: startx  (启动图形界面)


    5、 环境变量:
        在shell提示符后输入:
        env  查看所有的环境变量;
        echo $变量名    查看单个变量的值;
        export 变量名="变量值"   设置变量;
        set     使用set命令显示所有本地定义的shell变量
        unset    清除环境变量


    6、用C程序来访问和设置环境变量

    对于C程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。

    ◆ getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的

    环境变量不存在,则会返回NULL。

    ◆ setenv()在程序里面设置某个环境变量的函数。

    ◆ unsetenv()清除某个特定的环境变量的函数。

    另外,还有一个指针变量environ,它指向的是包含所有的环境变量的一个列表。下面的程序可以打印出

    当前运行环境里面的所有环境变量:
    #include <stdio.h>
    extern char**environ;
    int main ()
    {
    char**var;
    for (var =environ;*var !=NULL;++var)
    printf ("%s \n ",*var);
    return 0;
    }
  • unix命令集

    2007-04-23 13:14:27

    第一章 目录及文件操作命令

    1.1 ls

    [语法]: ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......]
    [说明]: ls 命令列出指定目录下的文件,缺省目录为当前目录 ./,缺省输出顺序为纵向按字符顺序排列。
    -R 递归地列出每个子目录的内容
    -a 列出所有文件,包括第一个字符为"."的隐藏文件
    -d 若后面参数是目录,则只列出目录名而不列出目录内容,常与-l选项连
    用以显示目录状态。
    -C 输出时多列显示
    -x 横向按字符顺序排列
    -m 输出按流式格式横向排列,文件名之间用逗号(,)分隔
    -l 长列表输出,显示文件详细信息,每行一个文件,从左至右依次是:
    文件存取模式 链接数 文件主 文件组 文件字节数 上次修改时间
    其中文件存取模式用10个字母表示,从左至右的意义如下:
    第一个字母表示文件种类,可以是以下几种情况:
    d 为目录文件
    l 为链接
    b 为块文件
    c 为字符型文件
    p 为命名管道(FIFO)
    - 为普通文件
    后面9个字母分别表示文件主、同组用户、其他用户对文件的权力,用r表示可读,w 表示可写,x 表示可执行。如果是设备文件,则在文件字节数处显示:主设备 从设备。
    -n 与-l选项相同,只是文件主用数字(即UID)显示,文件组用数字
    (即GID)表示
    -o 与-l选项相同,只是不显示文件组
    -g 与-l选项相同,只是不显示文件主
    -r 逆序排列
    -t 按时间顺序排列而非按名字
    -u 显示时间时使用上次访问时间而非上次修改时间
    -c 显示时间时使用上次修改i节点时间而非上次修改时间
    -p 若所列文件是目录文件,则在其后显示斜杠(/)
    -F 在目录文件后加’/’,在可执行文件后加’*’
    -b 文件名中若有非打印字符,则用八进制显示该字符
    -q 文件名中的打印字符用’?’表示
    -i 显示节点号
    -s 显示文件长度时使用块长度而非字节长度
    -f 将后面的参数解释为目录并列出其中的每一项
    -1 每行仅列一项
    [例子]:
    ls 列出当前目录下的文件
    ls -al /bin 以长列表的形式列出目录 /bin 下的所有文件,包括隐藏文件

    1.2 pwd

    [语法]: pwd
    [说明]: 本命令用于显示当前的工作目录
    [例子]:
    pwd 显示出当前的工作目录

    1.3 cd

    [语法]: cd [目录]
    [说明]:本命令用于改变当前的工作目录,无参数时使用环境变量$HOME 作为其参数,$HOME 一般为注册时进入的路径。
    [例子]:
    cd 回到注册进入时的目录
    cd /tmp 进入 /tmp 目录
    cd ../ 进入上级目录

    1.4 mkdir

    [语法]: mkdir [-m 模式] [-p] 目录名
    [说明]: 本命令用于建立目录,目录的存取模式由掩码(umask)决定,要求对其父目录具有写权限,目录的UID和GID为实际UID和GID
    -m 按指定存取模式建立目录
    -p 建立目录时建立其所有不存在的父目录
    [例子]:
    mkdir tmp 在当前目录下建立子目录 tmp
    mkdir -m 777 /tmp/abc 用所有用户可读可写可执行的存取模式
    建立目录 /tmp/aaa ,存取模式参看命令 chmod
    mkdir -p /tmp/a/b/c 建立目录 /tmp/a/b/c ,若不存在目录 /tmp/a
    及/tmp/a/b 则建立之

    1.5 rmdir

    [语法]: rmdir [-p] [-s] 目录名
    [说明]: 本命令用于删除目录
    -p 删除所有已经为空的父目录
    -s 当使用-p 选项时,出现错误不提示
    [例子]:
    rmdir /tmp/abc 删除目录 /tmp/abc
    rmdir -p /tmp/a/b/c 删除目录 /tmp/a/b/c ,若目录 /tmp/a /b
    及/tmp/a 空,则删除

    1.6 cat

    [语法]: cat [-u] [-s] [-v[-t] [-e]] 文件...
    [说明]: 显示和连接一个或多个文件至标准输出
    -u 无缓冲的输出(缺省为有缓冲输出)
    -s 对不存在的文件不作提示
    -v 显示出文件中的非打印字符,控制字符显示成^n ,n为八进制数字,
    其他非打印字符显示成M-x , x 为该字符低7位的8进制数值
    -t 在使用-v 选项时,将制表符(tab) 显示成 ^I,将换页符
    (formfeed)显示成 ^ L
    -e 在使用-v 选项时,在每一行的行尾显示 $
    [例子]:
    cat file 显示文件
    cat -s -v -e file1 file2 file3 逐个显示文件 file1 file2 file3

    1.7 head

    [语法]: head [-n] [文件 ...]
    [说明]: 将文件的头n 行显示输出,缺省值为 10 行,显示多个文件时,在每个文件的前面加上 ==> 文件名 <==
    [例子]:
    head -9999 file1 file2 显示文件 file1 和 file2 的头 9999 行

    1.8 more

    [语法]: more [-cdflrsuw] [- 行数] [+ 行数] [+ / 模式 ] [ 文件 ... ]
    [说明]: 将文件显示在终端上,每次一屏,在左下部显示 --more--,若是从文件读出而非从管道,则在后面显示百分比,表示已显示的部分,按回车键则上滚一行,按空格键则上滚一屏,未显示完时可以使用more 命令中的子命令。
    -c 显示文件之前先清屏
    -d 当输错命令时显示错误信息而不是响铃(bell)
    -f 不折叠显示长的行
    -l 不将分页控制符(CTRL D)当作页结束
    -r 一般情况下,more 不显示控制符,本选项使more 显示控制符,
    例如,将 (CTRL C) 显示成 ^ C
    -s 将多个空行转换成一个空行显示
    -u 禁止产生下划线序列
    -w 一般情况下 more 显示完后立即退出,本选项在显示完后作提
    示,敲任意键后退出
    -n 行数 指定每屏显示的行数
    + 行号 从指定行号开始显示
    +/模式 在文件中搜索指定模式,从模式出现行的上两行开始显示 文件未显示完时,可以使用more 命令中的子命令,命令中除了! 和 / 以外均不回显,也不用敲回车,当命令破坏 more 提示行时,可用退格键恢复提示行。在以下子命令操作中,i 表示数字,缺省值为 1。
    i 空格 上滚一屏多 i 行
    i 回车 上滚 i 行
    i CTRL+D i 缺省时上滚 11 行,否则上滚 i 行
    id i 缺省时上滚 11 行,否则上滚 i 行
    iz i 缺省时上滚一屏,否则定义每屏为 i 行
    is 跳过 i 行后显示一屏
    if 跳过 i 屏后显示一屏
    i CTRL+B 跳回 i 屏后显示一屏
    b 跳回 一屏后显示一屏
    q 或 Q 退出 more
    = 显示当前行号
    v 从当前行开始编辑当前文件编辑器由环境变量
    $EDITOR定义
    h 显示帮助信息
    i / 模式 向前搜索,直至模式的第 i 次出现 , 从该行的上 两行开始显示一屏
    in 向前搜索,直至上一模式的第 i 次出现 , 从该行 的上两行开始显示一屏
    单引号 回到上次搜索的出发点,若无搜索则回到开始位置
    ! 命令 激活一个sh 去执行指定的命令
    i : n 跳到后面第 i 个文件,若不存在则跳到最后一个文件
    :f 显示当前文件名和行号
    :q 或 :Q 退出 more
    . (点) 重复上次命令
    [ 例子]:
    more -c +50 file 清屏后,从第50行开始显示文件 file
    more -s -w file1 file2 file3 显示文件 file1 file2 file3

    1.9 cp

    [语法]: cp [ -p ] [ -r ] 文件 1 [ 文件 2 ...] 目标
    [说明]: 将文件1(文件2 ...)拷贝到目标上,目标不能与文件同名, 若目标是文件名,则拷贝的文件只能有一个,若目标是目录, 则拷贝的文件可以有多个,若目标文件不存在,则建立这个文件,若存在,则覆盖其以前的内容,若目标是目录,则将文件拷贝到这个目录下。
    - i 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止
    - p 不仅拷贝文件内容,还有修改时间,存取模式,存取控制表, 但不拷贝
    UID 及 GID
    - r 若文件名为目录,则拷贝目录下所有文件及子目录和它们的文件,此时
    目标必须为目录
    [例子]:
    cp file1 file2 将文件 file1 拷贝到文件 file2
    cp file1 file2 /tmp 将文件 file1 和文件 file2 拷贝到目录 /tmp 下
    cp -r /tmp /mytmp 将目录 /tmp 下所有文件及其子目录拷贝至目录/mytmp

    1.10 mv

    [语法]: mv [-f] [-i] 文件1 [文件2...] 目标
    [说明]: 将文件移动至目标,若目标是文件名,则相当于文件改名
    - i 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止
    - f 覆盖前不作任何提示
    [例子]:
    mv file1 file2 将文件 file1 改名为 file2
    mv file1 file2 /tmp 将文件 file1 和文件 file2 移动到目录 /tmp 下

    1.11 rm

    [语法]: rm [-f] [-i] 文件...
    或 rm -r [-f] [-i] 目录名... [文件]
    [说明]: 用来删除文件或目录
    - f 删除文件时不作提示
    - r 递归地删除目录及其所有子目录
    - i 删除文件之前先作提示
    [例子]:
    rm file1 删除文件 file1
    rm -i /tmp/* 删除目录 /tmp 下的所有文件
    rm -r /mytmp 递归地删除目录 /mytmp

    1.12 chmod

    [语法]: chmod [-R] 模式 文件...
    或 chmod [ugoa] {+|-|=} [rwxst] 文件...
    [说明]: 改变文件的存取模式,存取模式可表示为数字或符号串,例如:
    chmod nnnn file , n为0-7的数字,意义如下:
    4000 运行时可改变UID
    2000 运行时可改变GID
    1000 置粘着位
    0400 文件主可读
    0200 文件主可写
    0100 文件主可执行
    0040 同组用户可读
    0020 同组用户可写
    0010 同组用户可执行
    0004 其他用户可读
    0002 其他用户可写
    0001 其他用户可执行
    nnnn 就是上列数字相加得到的,例如 chmod 0777 file 是指将文件 file 存取权限置为所有用户可读可写可执行。
    -R 递归地改变所有子目录下所有文件的存取模式
    u 文件主
    g 同组用户
    o 其他用户
    a 所有用户
    + 增加后列权限
    - 取消后列权限
    = 置成后列权限
    r 可读
    w 可写
    x 可执行
    s 运行时可置UID
    t 运行时可置GID
    [例子]:
    chmod 0666 file1 file2 将文件 file1 及 file2 置为所有用户可读可写
    chmod u+x file 对文件 file 增加文件主可执行权限
    chmod o-rwx 对文件file 取消其他用户的所有权限

    1.13 chown

    [语法]: chown [-R] 文件主 文件...
    [说明]: 文件的UID表示文件的文件主,文件主可用数字表示, 也可用一个有效的用户名表示,此命令改变一个文件的UID,仅当此文件的文件主或超级用户可使用。
    -R 递归地改变所有子目录下所有文件的存取模式
    [例子]:
    chown mary file 将文件 file 的文件主改为 mary
    chown 150 file 将文件 file 的UID改为150

    1.14 chgrp

    [语法]: chgrp [-R] 文件组 文件...
    [说明]: 文件的GID表示文件的文件组,文件组可用数字表示, 也可用一个有效的组名表示,此命令改变一个文件的GID,可参看chown。
    -R 递归地改变所有子目录下所有文件的存取模式
    [例子]:
    chgrp group file 将文件 file 的文件组改为 group

    1.15 cmp

    [语法]: cmp [-l] [-s] 文件1 文件2
    [说明]: 比较两个文件,若文件1 为 "-" ,则使用标准输入, 两个文件相同则无提示,不同则显示出现第一个不同时的字符数和行号。
    -l 显示每个不同处的字节数(10进制)和不同的字节(8进制)
    -s 不作任何提示,只返回码
    [例子]:
    cmp file1 file2 比较文件 file1 和 file2
    cmp -l file1 file2 比较文件file1 和 file2 的每处不同

    1.16 diff

    [语法]: diff [-be] 文件1 文件2
    [说明]: 本命令比较两个文本文件,将不同的行列出来
    -b 将一串空格或TAB转换成一个空格或TAB
    -e 生成一个编辑角本,作为ex或ed的输入可将文件1转换成文件2
    [例子]:
    diff file1 file2
    diff -b file1 file2
    diff -e file1 file2 >edscrīpt

    1.17 wc

    [语法]: wc [-lwc] 文件...
    [说明]: 统计文件的行、字、字符数,若无指定文件,则统计标准输入
    -l 只统计行数
    -w 只统计字数
    -c 只统计字符数
    [例子]:
    wc -l file1 file2 统计文件file1和file2 的行数

    1.18 split

    [语法]: split [-n] [ 文件 [名字]]
    [说明]: split 将指定大文件分解为若干个小文件,每个文件长度为n行(n 缺省时为1000),第一个小文件名为指定的名字后跟aa,直至zz,名字缺省值为x,若未指定大文件名,则使用标准输入
    [例子]:
    split -500 largefile little
    将文件largefile 每500行写入一个文件,第一个文件名为littleaa

    1.19 touch

    [语法]: touch [-amc] [mmddhhmm[yy]] 文件...
    [说明]: 将指定文件的访问时间和修改时间改变,若指定文件不存在则创建之,若无指定时间,则使用当前时间,返回值是未成功改变时间的文件个数,包括不存在而又未能创建的文件。
    -a 只改变访问时间
    -m 只改变修改时间
    -c 若文件不存在,不创建它且不作提示
    mmddhhmm[yy] 两位表示 月日时分[年]
    [例子]:
    touch file
    更新文件file的时间
    touch 0701000097 HongKong
    将文件HongKong的时间改为97年7月1日0时0分

    1.20 file

    [语法]: file [-f 文件名文件] 文件...
    [说明]: file 对指定文件进行测试,尽量猜测出文件类型并显示出来
    -f 文件名文件 文件名文件是一个包含了文件名的文本文件, -f 选项测试
    文件名文件中所列出的文件
    [例子]:
    file * 显示当前目录下所有文件的类型

    1.21 pack

    [语法]: pack 文件...
    [说明]: pack 将指定文件转储为压缩格式,文件名后加 ".z ", 文件存取模式,访问时间,修改时间等均不变
    [例子]:
    pack largefile 将largefile 压缩后转储为largefile.z

    1.22 pcat 显示压缩文件

    [语法]: pcat 文件...
    [说明]: pcat 显示输出压缩文件
    [例子]:
    pcat largefile.z 显示压缩前的largefile
    pcat largefile.z > oldfile 显示压缩前的laregfile,并将其重定向到
    文件oldfile中

    1.23 unpack

    [语法]: unpack 文件...
    [说明]: 将压缩后的文件解压后转储为压缩前的格式
    [例子]:
    unpack largefile.z 将压缩文件largefile.z解压后转储为largefile

    1.24 find

    [语法]: find 路径名... 表达式
    [说明]: find 命令递归地遍历指定路径下的每个文件和子目录,看该文件是否能使表达式值为真,以下 n 代表一个十进制整数,+n 代表打印 n , -n 代表小于 n ,下面是合法表达式说明:
    -name 模式 文件名与模式匹配则为真,(\ 为转意符)
    -perm [-]八进制数 文件存取模式与八进制数相同则为真若有- 选项,则文件存
    取模式含有八进制数规定模式即为真
    -size n[c] 文件块长度为 n 则真(一块为512字节),若
    有c 选项,则文件字节长度为 n 则真
    -atime n 若文件的最近访问时间为 n 天前则为真,
    find 命令将改变其访问的目录的访问时间
    -mtime n 若文件的最近修改时间为 n 天前则为真
    -ctime n 若文件状态为 n 天前改变则为真
    -exec 命令 { }\; 若命令返回值为0则真,{ }内为命令参数,
    此命令必须以 \; 为结束
    -ok 命令 { }\; 与 exec 相同,只是在命令执行前先提示,若
    回答 y 则执行命令
    -print 显示输出使表达式为真的文件名
    -newer 文件 若文件的访问时间比newer 指定的文件新则真
    -depth 先下降到搜索目录的子目录,然后才至其自身
    -mount 仅查找包含指定目录的文件系统
    -local 文件在当前文件系统时为真
    -type c 文件类型为 c 则真,c 取值可为 b(块文件) c (字符文件)
    d(目录) l (符号链接) p (命名管道) f (普通文件)
    \( 表达式 \) 表达式为真则真
    -links n 文件链接数为 n 时为真
    -user 用户 当文件属于用户时为真,用户可用数字表示UID
    -nouser 当文件不属于 /etc/passwd 中的一个用户时为真
    -group 文件组 当文件属于文件组时为真,文件组可用数字表示GID
    -nogroup 当文件不属于 /etc/group 中的一个组时为真
    -fstype 类型 当文件所属文件系统类型为指定类型时真
    -inum n 当文件 i 节点号为 n 时为真
    -prune 当目录名与模式匹配时,不再搜索其子目录
    可以用逻辑操作符将简单表达式连接成复杂表达式
    逻辑操作符有 ! 表示非操作, -o 表示或操作,两个表达式并列则表示
    与操作
    [例子]:
    find / -name find* -print
    从根目录开始搜索文件名如 find* 的文件并显示之
    find ./ -exec sleep{1}\; -print
    每秒显示一个当前目录下的文件
    find $HOME \(-name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
    从$HOME目录开始搜索,删除所有文件名为a.out 或 *.o 且访问时间在7天前的文件

    1.25 grep

    [语法]: grep [选项] 模式 [文件...]
    [说明]: 在指定的文件中搜索模式,并显示所有包含模式的行,模式是一个正规表达式,在使用正规表达式时,最好将其引在单引号(') 中,若指定文件为缺省,则使用标准输入,正规表达式可以是:
    . 匹配任意一个字符
    * 匹配0个或多个*前的字符
    ^ 匹配行开头
    $ 匹配行结尾
    [] 匹配[ ]中的任意一个字符,[]中可用 - 表示范围,
    例如[a-z]表示字母a 至z 中的任意一个
    \ 转意字符
    命令中的选项为:
    -b 显示块号
    -c 仅显示各指定文件中包含模式的总行数
    -i 模式中字母不区分大小写
    -h 不将包含模式的文件名显示在该行上
    -l 仅显示包含模式的文件名
    -n 显示模式所在行的行号
    -s 指定文件若不存在或不可读,不提示错误信息
    -v 显示所有不包含模式的行
    [例子]:
    grep 'good' * 在所有文件中搜索含有字符串 good 的行
    grep '^myline' mytext 在文件mytext中搜索行首出现myline字符串的行

    1.26 vi

    [语法]:vi [-wn] [-R] 文件...
    [说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器,可以在vi 中使用 ex,ed的全部命令,vi选项中 -wn 指将编辑窗口大小置为n行,-R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令 a A i I o O c C s S R 可进入输入模式,在输入模式下按 ESC 键可退出输入模式,回到命令模式,在命令模式中敲入: 命令,则可进入ex方式,在屏幕底部出现提示符 : ,此时可使用任意ex命令,屏幕底行也用来作/ ? ! 命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi 的命令集,^ 表示(CTRL)键
    ^B 退回前一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至左边的自动缩进处
    ^E 显示屏幕底线之下的一行
    ^F 前进一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在整个文件中的位置
    ^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符
    ^I(TAB) 在输入模式下,产生一串空格
    ^J(LF) 光标下移一行
    ^L 刷新屏幕,即将屏幕重新显示
    ^M(回车) 在命令模式下,光标移动至下行开头在输入模式下,开辟一新行
    ^N 光标下移一行
    ^P 光标上移一行
    ^Q 在输入模式下,将其后的非打印字符作为正文插入
    ^R 刷新屏幕
    ^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对以后的^D ^U 命令有效
    ^V 在输入模式下,将其后的非打印字符作为正文插入
    ^W 在输入模式下,使光标回退一个字
    ^Y 显示屏幕底线之上的一行
    ^Z 暂停编辑,退回上层Shell
    ^[(ESC) 退出输入模式,回到命令模式
    ! 暂时退出编辑,执行Shell命令
    "(双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    $ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动到下一行行尾
    % 将光标移动到配对的小括号()或大括号{}上去
    ( 退回句子开头
    ) 前移到句子开头
    - 退到上一行第一个非空格字符
    . 重复上一次改变缓冲区内容的命令
    / 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规表达式,(参看 grep)
    : 在屏幕底部提示:,其后可使用ex命令
    ? 功能同 / ,但方向是向前查找
    [[ 光标回退至前一节分界处
    \ 转意符
    ]] 光标前移至节分界处
    ^(不是CTRL) 光标移至当前行第一个非空字符上
    ' 连续两个''表示将光标移至其移动前的位置,'后跟字母表示光标字母标记的行首(参看 m 命令)
    A 在行尾插入正文,进入输入模式
    B 光标回退一个字
    C 替换光标后的内容
    D 删除光标后的内容
    E 光标前移到字尾
    F 字符 在当前行向左查找指定字符
    G 光标移动到其前面数字指定的行,若未指定则移动到最后一行
    H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字 指定的行
    I 在行开头插入正文
    J 连接两行,若前面有数字则连接数字指定的行
    L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该数字指定的行
    M 光标移动到屏幕中线
    N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相反,其功能同 n ,但方向相反
    O 在当前行上开辟一新行
    P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    Q 从vi 退出进入ex命令状态
    R 替换字符串
    S 替换整行
    T 字符 向左查找字符
    U 将当前行恢复至第一次修改前的状态
    W 光标移至下一个字首
    X 删除光标前的字符
    Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有名缓冲区来保存,以后可用命令p或P将其取出
    ZZ 存盘退出vi
    a 光标后插入正文
    b 光标回退至上一个字首
    cw 替换当前字
    c) 替换当前句子
    dw 删除一个字
    dd 删除一行
    e 光标移到下一个字末
    f 字符 在当前行向前查找字符
    h 光标左移一格
    i 在光标前插入正文
    j 光标下移一行
    k 光标上移一行
    l 光标右移一格
    m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,(参看'命令)
    n 重复上次 / 或 ? 命令
    o 在当前行下开辟一新行
    p 将用户缓冲区内容放到光标位置(参看P命令)
    r 替换当前字符
    s 用一串字符替换当前字符
    t 字符 光标移动至字符前
    u 取消上次操作
    w 光标移至下一字首
    x 删除当前字符
    yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命令取出
    yy 将当前行存入无名缓冲区,用法参看yw
    { 光标移动至前一段开头
    | 光标移至行首,若前面加数字,则移到数字指定行的行首
    } 光标移至下一段开头
    在:提示符下,常用命令如下:
    :w 当前文件存盘
    :w! 强制存盘
    :w 文件 将内容写入指定文件
    :w! 文件 强制写入指定文件
    :x,y w 文件 将 x至 y 行写入指定文件中
    :r 文件 将文件读到光标位置
    :r ! 命令 将系统命令的输出读到光标位置
    :q 退出编辑
    :q! 强制退出
    :x 与命令ZZ相同
    :e 文件名 编辑另一文件
    :e ! 重新编辑文件,放弃任何改变
    :sh 执行sh,结束后回到编辑
    :! 命令 执行命令后回到编辑
    :n 编辑下一文件
    :n 文件表 重新定义待编辑文件表
    :set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前加no则表示清除该选项,例如 set nonu 表示每行前不显示行号,下面是一些常用的选项:
    ai 自动缩进
    aw 编辑下一文件前自动存盘
    ic 查找字符串时不区分大小写
    nu 每行前显示行号
    sm 输入)及}时显示与之配对的( 或 {
    slow 插入时延迟屏幕刷新
    ws 使查找能绕过文件尾从头进行
    wa 写文件之前不作对文件的检查

    第二章 设备管理

    2.1 stty
    [语法]: stty [-a] [-g] [选项]
    [说明]: 本命令设置终端,无参数时报告终端设置,本命令功能十分强大,应谨慎使用,下面仅介绍部分常用功能
    -a 显示当前终端所有设置
    -g 以能作为 stty 命令参数的方式显示终端设置
    以下是终端常用设置,在设置前加-表示清除设置:
    1.控制方式
    ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
    本命令设置终端输入波特率,若为0则使用缺省波特率。
    例如 stty ispeed 9600
    ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
    本命令设置终端输出波特率,参看 ispeed。
    2.输入方式
    ingbrk(-ignbrk) 忽略(不忽略)中断(BREAK)
    brkint(-brkint) 设置(清除)信号INTR为中断信号
    inlcr(-inlcr) 将换行转换(不转换)成回车
    icrnl( -icrnl) 将回车转换(不转换)成换行
    igncr(-ignrc) 忽略(不忽略)回车
    iuclc( -iuclc) 将大写字母转换(不转换)成小写字母
    3.输出方式
    olcut(-olcut) 将小写字母转换(不转换)为大写字母
    onlcr(-onlcr) 输出时将换行符转换(不转换)为回车换行
    ocrnl(-ocrnl) 输出时将回车符转换(不转换)为换行符
    4.本地方式
    echo (-echo) 设置(清除)回显
    stwrap(-stwrap) 截断(不截断)大于79个字符的行
    echoctl(-echoctr) 将控制键回显为^

    2.2 tty

    [语法]: tty
    [说明]: 显示出终端的设备名
    [例子]:
    tty

    2.3 lp

    [语法]: lp 文件...
    [说明]: 将文件送打印机打印
    [例子]:
    lp myfile 将文件myfile 送打印机输出

    2.4 lpstat

    [语法]: lpstat [选项] [打印任务号]
    [说明]: 显示打印机状态,选项的意义如下:
    -a [打印机表] 显示打印机表中指定的打印机可否接收打印请求
    -c [打印机类名] 显示打印机种类及在该打印机种类下的成员
    -d 显示系统预设的打印机
    -p [打印机表] 显示打印机表中打印机状态
    -r 显示lp 请求程序表( lp request scheduler)
    -s 打印系统统计表
    -t 打印所有状态信息
    -u [用户] 显示由用户发出的打印请求
    -v [打印机名表] 显示每个打印机名称,是对应于该打印机设备文件的路径名
    [例子]:
    lpstat -t 打印所有状态信息

    2.5 cancel

    [语法]: cancel 打印任务号
    cancel 打印机名
    cancel -u 用户名 [打印机]
    [说明]: 本命令可按打印机名,打印任务,用户来取消打印任务
    [例子]:
    cancel -u mary 取消用户 mary 的所有打印请求

    2.6 enable

    [语法]: enable 打印机表
    [说明]: 本命令可激活一个或多个打印机

    2.7 disable

    [语法]: disable [-cw] 打印机表
    [说明]: 使一个或多个打印机不能打印
    -c 立即取消正在打印的打印请求
    -w 等正在打印的内容打完后,才禁止打印机

    2.8 sync

    [语法]: sync
    [说明]: 将磁盘缓冲区内容写回磁盘
    2.9 mount

    [语法]: mount [-r] 设备 目录
    [说明]: 将设备安装到目录下
    -r 以只读方式安装

    2.10 umount

    [语法]: umount 设备
    [说明]: 将已安装的文件系统卸下

    2.11 tar

    [语法]: tar -c[vwfbL] [设备] [块] 文件...
    tar -r[vwfbL] [设备] [块] 文件...
    tar -t[vfL] [设备] [文件...]
    tar -u[vwfbL] [设备] [块] 文件...
    tar -x[lmovwfL] [设备] [文件...]
    [说明]: 将多个文件归档,命令中各参数的意义为:
    r 附加方式归档
    x 抽取文件
    t 显示文件
    u 附加方式归档,同时删除旧版文件
    c 建立新档案文件
    v 显示所处理的文件名
    w 处理文件前,要求用户确认
    f 文件名 使用指定文件名作为档案文件
    bn 每次读写 n 块,缺省值为1,最大值为20
    m 将新的文件修改时间设为获取时的时间
    o 获取出来的文件以下达tar指令的UID和GID存储
    [例子]:
    tar cvf file.tar *
    tar tvf file.tar

    2.12 df

    [语法]: df [-t] [文件系统]
    [说明]: 显示剩余 i 节点和块数,使用 -t 选项,还显示总块数和 i 节点数
    [例子]: df -t

    2.13 du

    [语法]: du [-ars] [目录]
    [说明]: 显示磁盘空间专用情况
    -r 提供无法打开的文件信息
    -s 仅显示指定目录所占空间的总和
    -a 显示文件大小及目录总空间,其后可根文件名作参数

    第三章 进程管理

    3.1 sleep

    [语法]: sleep 时间
    [说明]: 挂起参数指定的秒数

    3.2 ps

    [语法]: ps [ -efl] [ -t 终端表] [ -u 用户表] [ -g 组表]
    [说明]: 显示出有关进程的状态
    -e 显示出现在正在运行的所有进程
    -f 显示所有信息
    -l 产生一个长列表
    -t 显示指定终端进程
    -u 显示指定用户进程
    -g 显示指定组进程

    3.3 at

    [语法]: at [-f 命令文件] [-m] [-q 队列] -t 时间
    [说明]: at命令由cron管理,在未来一个指定的时间内执行一组命令,命令可以从指定文件读入,也可从键盘读入,从键盘读入时以EOF结束,(通常为CTRL D)
    -f 从指定命令文件中读入命令
    -m 命令执行完后给用户发邮件
    -q 将命令放入指定队列
    -t 指定时间 指定的时间格式为 [[CC]YY]MMDDhhmm[.ss],CC表示
    年的前两位,YY表示年的后两位,MM表示月,DD表示日,hh表
    示时,mm表示分,ss表示秒

    3.4 kill

    [语法]: kill -信号 进程号
    [说明]: kill 将信号传递给指定进程,信号意义如下:
    1 暂停(hangup)
    2 中断(interrupt)
    3 退出(quit)
    4 非法指令(illeqgal instruction)
    5 跟踪中断(trace trap)
    6 Abort
    7 EMT 指令(Emulation trap)
    8 浮点格式异常(floating point exception)
    9 kill(不可忽略)
    10 通道错误(bus error)
    11 不合法内存段
    12 错误的系统调用参数
    13 写入不可读的连通管道
    14 alarm clock
    15 软件结束信号
    16 用户定义信号一
    17 用户定义信号二
    [例子]:
    kill -9 444 杀死进程号为 444 的进程

    第四章 系统管理和用户管理

    4.1 who

    [语法]: who
    who am i
    [说明]: 列出现在系统中的用户,who am i 显示自己

    4.2 whodo

    [语法]: whodo [-h] [-l] [用户]
    [说明]: 显示系统中用户及进程,若指定用户,则只列出该用户的信息
    -h 不显示头部信息
    -l 长列表格式输出

    4.3 passwd

    [语法]: passwd [用户]
    [说明]: 修改密码,指定用户则修改指定用户密码

    4.4 logname

    [语法]: logname
    [说明]: 取得当前用户注册名

    4.5 su

    [语法]: su [- ] [用户名]
    [说明]: su 命令使当前用户成为指定用户,若无指定,则成为超级用户,但必须输入该用户的密码,-选项表示用该用户的注册环境成为该用户

    4.6 time

    [语法]: time 命令
    [说明]: 执行命令,并在执行完后显示其运行的时间

    4.7 date

    [语法]: date
    date mmddhhmm[yy]
    [说明]: date 无参数时用于显示系统时间,修改时间时参数形式为
    月日时分[年]

    4.8 shutdown

    [语法]: shutdown [-y] [-gn] [-in]

    [说明]: UNIX 系统必须先关闭系统,再关电源
    -y 对提示的所有问题都回答 y
    -gn 给其他用户n 秒的时间退出,缺省值为60秒
    -in 系统退到第n种方式,方式如下:
    0 关机
    1 单用户模式
    2 多用户模式
    3 网络下的多用户模式
    6 关机并重新启动

    4.9 fsck

    [语法]: fsck [-y]
    [说明]: 本命令用于检查和修复文件系统,当文件系统出现混乱时,可使用本命令,-y选项表示对所有提问都回答YES

    第五章 通信和邮件

    5.1 wall

    [语法]: wall
    [说明]: 向所有用户广播通知信息,常用于警告所有用户

    5.2 mesg

    [语法]: mesg [-n] [-y]
    [说明]: mesg 用 -n 参数则禁止其他用户用 write 发消息,用 -y 参数则允许接收消息,若无参数则报告现在的状况

    5.3 write

    [语法]: write 用户 终端
    [说明]: write 与指定的终端上的用户直接对话,直到接收到文件结束符
    [例子]:
    write mary console

    5.4 mailx

    [语法]: mailx [选项] [名字]
    [说明]: 本命令用于发送和接收邮件,名字是收信人的用户名,本命令有许多内部命令,选项说明如下:
    -e 检查是否有邮件,若有则返回0
    -f 文件名 从文件中读取邮件而非从邮箱中
    -H 只显示信件标题
    -s 标题 设定标题为指定标题
    [命令说明]
    . 当前信件
    n 第 n 封信
    ^ 第一封未被处理的信
    $ 最后一封信
    * 所有的信
    n-m 第n 封至第m封信
    用户 由指定用户发出的信
    / 字符串 标题中包含字符串的信
    :c 满足指定类型c的信,类型可为
    d 已删除的信
    n 信传送的信
    o 旧信件
    r 已读过的信
    u 未读过的信
    p 一次显示多封信
    t 显示某封信的前若干行
    si 显示信件字符数
    h 显示信件标题
    d 删除信件
    u 恢复信件
    s [信件表] 文件名
    将信件存入指定文件中
    q 退出
    r 回信
    ~e 编辑信件
    ~r 文件 从文件中读取信件
    [例子]:
    mailx mary < myletter

    第六章 Shell 编程

    shell 不但是 Unix 的用户交互界面,还是一门程序设计语言,系统注册进入时就会执行一个shell命令文件 .profile ,下面对shell中的常用命令作简单介绍。
    $n shell 程序命令行中的第n 个参数,n为0-9,当n 为0时表示命令名
    $# 命令行中参数的个数
    $$ 本shell 命令的进程号
    $! 最后一个后台进程的代号
    $* 所有命令行参数
    $@ 与$*相似,但其值不同
    $HOME 注册时进入的目录
    $PATH 命令的搜索目录
    $PS1 系统第一个提示符,一般为$
    $PS2 系统第二个提示符,一般为>
    shift [n] 将命令行参数往左移一位,但$0不变
    变量名=字符串 将字符串赋予变量名,以后可用$变量名引用该变量
    export 变量名表 将变量名表所列变量传递给子进程
    read 变量名表 从标准输入读字符串,传给指定变量
    echo 变量名表 将变量名表指定的变量显示到标准输出
    set 显示设置变量
    env 显示目前所有变量
    if 条件执行,语法是: if 条件
      then 指令
      fi
    case 分支执行,语法是: case 字符串变量 in
         值1) 指令...
         值2) 指令...
         ...
         esac
    while 条件为真时循环,语法是:
    while 条件
    do
    指令...
    done
    until 条件为假时循环,语法是:
    until 条件
    do
    指令...
    done
    for 变量在表中时循环,语法是:
    for 变量名 in 字组表
    do
    指令...
    done
    break 从循环中退出,语法:
    break n
    n 表示跳出循环的层数
    continue 继续循环,语法:
    continue n
    n 表示退到包含continue 语句的第n 层继续循环
    exit 退出shell
    func shell内部可定义函数,语法: func 函数名()
      {
       指令...
      }
    expr 将其后的串解释为表达式并计算其值,运算符前后需有空格
    trap 捕获信号,语法 trap n ,捕获信号 n (信号说明参见kill)
    test 条件测试,语法 test [选项] 参数
    选项 -f 文件 若文件存在且可读则真
    -w 文件 若文件存在且可写则真
    -x 文件 若文件存在且可执行则真
    -f 文件 若文件存在且为普通文件则真
    -d 文件 若文件存在且为目录文件则真
    -p 文件 若文件存在且为fifo文件则真
    -s 文件 若文件存在且不空则真
    -z 串 若串长度为0则真
    -n 串 若串长度不为0则真
    串 若串不是空串则真
    串1=串2 若串1等于串2则真
    串1!=串2 若串1不等于串2则真
    n1 -eq n2 若n1与n2数值相当则真
    n1 -ne n2 若n1与n2数值不相当则真
    n1 -lt n2 若n1小于n2则真
    n1 -le n2 若n1小于等于n2则真
    n1 -gt n2 若n1大于n2则真
    n1 -ge n2 若n1大于等于n2则真
    可用 与 -a 或 -o 非 ! 将条件表达式连接起来

    第七章 数学计算命令

    [语法]: bc [-c] [-l] [文件...]
    [说明]: bc是一个交互式的高精度计算工具,采用类似于C语言的语法,能够从指定文件指定文件中读出命令执行,然后再进入交互式执行,事实上,bc是dc的预编译器,它自动激活dc,将语句经预编译后传递给dc,退出bc的命令是quit,bc中的ibase,obase,scale分别表示输入基数,输出基数,小数点右边的位数。
    -c bc 只编译,而不将编译结果送dc,将其送到标准输出上
    -l 预定义一个数学函数库,可在bc中使用以下函数
    s(x) sine
    c(x) cosine
    e(x) exponential
    l(x) log
    a(x) arctangent
    j(n,x) Bessel
    [例子]:
    bc -l 进入bc
    scale=10 将小数位定为10位
    e(1) 计算e的小数点后10位
    quit 退出bc

    附录 UNIX 常用命令简单说明

    UNIX 命令大多数可用联机帮助手册 man 获得帮助,下面是常用命令及简单说明,可供用户快速查找使用。

    命令 功能简述

    acctcom 等于进程记帐文件
    accton 启动或中止记帐进程
    adb 汇编语言调试工具
    admin 创建和管理SCCS文件
    ar 档案文件和库文件管理程序
    as 汇编器
    asa 回车控制
    at 在指定时间执行程序
    awk 模式搜索和处理语言
    banner 制作标题
    basename 生成文件基本名(无前。后缀)
    batch 命令的延迟执行
    bc 计算器
    bdiff 大型文件比较
    bfs 大文件搜索
    break 退出循环
    cal 打印日历表
    calendar 打印日历表
    cancel 取消打印任务
    case 分支语句
    cb C语言整理程序
    cd 改变当前目录
    cc C语言编译器
    cdc SCCS实用程序
    cflow 生成C语言流程图
    checkeq 数学公式排版命令
    chgrp 改变文件组
    chmod 改变文件存取模式
    chown 改变文件主
    chroot 改变根目录
    cksum 显示校验和
    clri 清除指定的I节点
    cmp 文件比较
    col 过滤反向换行
    comb SCCS实用程序
    comm 显示两个排序文件的公共行
    command 执行简单命令
    continue 进入下一循环
    cp 复制文件
    cpio 复制文件档案
    cpp C语言预处理程序
    crash 检查系统内存映象
    create 建立临时文件
    cref 生成交叉引用表
    cron 在指定时间执行一组命令
    crontab 为命令cron 准备crontab文件
    crypt 加密/解密
    csplit 将一个文件分解
    ct 远程终端注册
    ctags 创建供vi使用的标识符
    cu 呼叫另一UNIX系统
    cut 断开一文件中所选择的字段
    cxref 生成C程序交叉访问表
    date 打印和设置时间
    dc 桌面计算器
    dd 转换和复制文件
    delta SCCS实用程序
    deroff 去掉排版格式
    devnm 标识设备名
    df 显示可用磁盘空间
    diff 显示两个文件的差异
    diff3 显示三个文件的差异
    dircmp 目录比较
    dis 反汇编程序
    du 显示对磁盘的占用情况
    dump 对指定文件备份
    echo 回显指定参数
    ed 行编辑器
    edit 文本编辑器
    egrep 在文件中查找指定模式
    env 设置命令执行环境
    eqn 数学公式排版命令
    eval 执行指定命令
    ex 行编辑器
    exec 执行指定命令
    exit 进程中止
    expand 使表格占满行宽
    export 将变量传递给子程序
    expr 计算表达式值
    factor 因式分解
    false 返回FALSE
    fgrep 在文件中查找指定模式
    file 确定文件类型
    find 查找符号条件的文件
    fmt 安排简单的文本格式
    fold 折行
    for 循环语句
    fsck 文件系统检查和修复
    fsdb 文件系统调试程序
    fumount 强制性拆协指定资源
    function 函数说明
    fuser 列出使用文件的进程
    fwtmp 产生记帐记录
    get SCCS实用程序
    getconf 查找配置参数
    getopt 获得命令中的选择项
    getopts 获得命令中的选择项
    getty 设置终端类型、模式、行律等
    grep 在文件中查找指定模式
    head 打印文件的头若干行
    hexdump 按十六进制转储文件
    id 显示用户号
    if 条件语句
    init UNIX 初启进程
    install 安装一个文件到文件系统
    ipcrm 删除IPC队列
    ipcs 显示IPC状态
    join 连接两个文件(关系操作〕
    kill 中止指定进程
    killall 中止所有活动进程
    labelit 给文件系统提供标号
    ld 目标文件链接编辑器
    lex 词法分析程序
    line 读一行
    link 连接文件
    lint C程序检查程序
    ln 链接文件
    local 建立局部变量
    logger 显示注册信息
    login 注册
    logname 获取注册名
    look 在排序文件中查找某行
    lorder 查找目标库的次序关系
    lp 打印文件
    lpr 打印文件
    lpstat 显示打印队列状态
    ls 目录列表
    mail 发送或接收电子邮件
    mailx 发送、接收或处理电子邮件
    make 执行有选择的编译
    makekey 生成加密码
    man 显示命令用法
    mesg 接收或取消对话方式
    mkdir 建立目录
    mkfifo 建立FIFO文件
    mkfs 建立文件系统
    mknod 建立文件系统的I节点
    mount 安装文件系统
    mv 移动文件
    mvdir 移动目录
    ncheck 按节点号生成节点名清单
    neqn 数学公式排版命令
    newgrp 把用户加入到新组
    news 打印消息
    nice 改变命令执行优先级
    nl 给文件加行号
    nm 显示目标文件符号表
    nohup 忽略挂起或退出执行命令
    nroff 文本文件排版
    od 按八进制转储文件
    pack 压缩文件
    passwd 改变口令
    paste 文件合并
    pax 可移植档案管理程序
    pcat 显示压缩格式文件
    pg 分屏显示
    pr 按打印格式显示文件
    pstat 报告系统信息
    pwck 口令文件校验程序
    pwd 显示当前工作目录
    quot 检查文件系统所有权
    ratfor 转换成标准FORTRANC程序
    read 从标准输入读一行
    readonly 标记变量为只读
    red 文本编辑器
    regcmp 正规表达式编辑
    restor 文件系统恢复程序
    restore 文件系统恢复程序
    return 返回语句
    rev 颠倒文件中每行字符次序
    rm 删除文件
    rmdel SCCS使用程序
    rmdir 删除目录
    rsh(net) 远程SHELL
    rsh(sec) 受限SHELL
    runacct 运行日常记帐程序
    sact SCCS实用程序
    sag 打印系统活动图
    sar 报告系统活动
    sccsdiff SCCS实用程序
    sdb 符号调试器
    sdiff 并列显示两个文件的差别
    sed 流编辑器
    sendto 发送邮件
    set 设置选项或参数
    setmnt 建立文件系统安装表
    sh SHELL解释器
    shift 命令行参数移位
    shl SHELL层(layer)管理程序
    shutdown 关机
    size 显示目标文件长度
    sleep 挂起进程一段时间
    sort 文件排序和合并
    spell 拼写错误检查程序
    spellin 拼写错误检查
    spellout 拼写错误检查
    spline 按平滑曲线输出数据
    split 分解一个文件
    strings 在目标文件中寻找可打印字符
    strip 删除符号表
    stty 设置终端模式
    su 改变用户
    sum 显示文件校验和及块数
    sync 更新磁盘
    tabs 设置制表符
    tbl 表格排版
    tee 在管道上建立多通路
    tic 终端数据库编译程序
    time 打印执行命令所花时间
    tiemx 报告命令所花时间及活动
    touch 更新文件时间
    tput 恢复终端或查询数据库
    tr 转换字符
    trap 捕获信号
    troff 文本文件排版
    true 返回TRUE
    tsort 拓扑排序
    tty 显示终端设备名
    umask 设置文件掩码
    umount 拆卸文件系统
    uname 显示系统名
    unget SCCS实用程序
    uniq 删除文件中重复行
    units 度量单位转换
    unlink 删除文件
    unpack 将压缩文件还原
    until 循环语句
    update 更新磁盘
    val SCCS实用程序
    vc SCCS实用程序
    vi 全屏幕编辑器
    volcopy 文件系统的文字拷贝
    wait 等待所有字进程结束
    while 循环语句
    who 显示谁在使用系统
    whodo 显示哪些用户在做什么
    write 和另一用户直接对话
    xargs 建立参数表并执行命令
    yacc 语法分析程序生成器

  • Lotus notes for linux的安装

    2007-04-23 00:11:36

    IBM Lotus Notes 7.0.1 for SLED 10

    Release Notes

    Installation, migration, upgrade, and configuration information

    This release of the Notes client on Linux requires a Workplace Managed Client platform image which is

    supplied to host Notes as a plug-in. The forthcoming release of the Workplace Managed Client will also

    be able to host Notes as a plug-in, in a similar manner to the Windows Notes application plug-in. To use

    Notes on Linux, the following requirements must be met:

    Software requirements

    Lotus Notes 7.0.1

    Notes Domino Server running 7.0.1 or higher

    SUSE Linux Enterprise Desktop (SLED) 10

    Installation of the WMC platform and Notes Application Plug-in on the same machine

    SUSE Linux Enterprise Desktop (SLED) 10

    Gnome Desktop version 2.12.2-25.2

    Window Manager Metacity 2.12.2-29

    XGL-CVC 060522-0.13

    Compiz 060616-1.19

    Notes Domino Server running 6.5.4 or higher

    Mozilla 1.7.12 - gtk

    Minimum System Memory - 512 MB (recommended 1 GB)

    Disk space - 2 GB on the partitions where the product is installed to.

    Note: Metacity, XGL, and Compiz files can be downloaded from the Novell update site. To get updates from the

    Novell site, you must register your desktop.

    Pre-requisites for Installing Notes

    Download the Mozilla 1.7.12 version from the following location

    Download the “mozilla-i686-pc-linux-gnu-1.7.12-gtk2+xft.tar.gz” file from the following location.

    http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.7.12/contrib

    Install the Mozilla 1.7.12 in the following location. Make sure you are installing as root user.

    #su –

    #cd /usr/lib/

    #tar xzvf mozilla-i686-pc-linux-gnu-1.7.12-gtk2+xft.tar.gz

    Configuring the Mozilla 1.7.12 Browser for Notes Plugin

    In this section you will setup the Mozilla path for Notes Plugin. Update the following file to that Notes

    Plugin can find the right level of Mozilla version to function properly.

    File: /etc/gre.d/gre.conf

    #kwrite /etc/gre.d/gre.conf

    Add the following two lines to /etc/gre.d/gre.conf file

    [1.7.12]

    GRE_PATH=/usr/lib/mozilla

    Installation of required RPMS for SLED 10

    FileName: compiz-cvs_060616-1.19.i586.rpm

    FileName: metacity-2.12.2-29.i586.rpm

    FileName: xgl-cvs_060522-0.13.i586.rpm

    Install/Upgrade the RPMS

    These rpms are located in the Notes_linux_sled10_patch_Oct16.zip file.

    Download the Patch from the following site:

    ftp://ftp.software.ibm.com/software/lotus/fixes/notes/Notes_linux_sled10_patch_Nov27.zip

    #su - root

    #cd /tmp

    #unzip Notes_linux_sled10_patch_Nov27.zip

    #cd /tmp/sled10/

    #rpm -Uvh compiz-cvs_060616-1.19.i586.rpm

    #rpm -Uvh metacity-2.12.2-29.i586.rpm

    #rpm -Uvh xgl-cvs_060522-0.13.i586.rpm

    Installation instructions for Notes for Linux

    In order to be able to use Notes for Linux it is necessary to install the framework of IBM's Workplace

    Managed Client. These components are supplied as part of Notes for Linux, but as a separate image.

    The following sections provide details of the components supplied, and how to use them to install

    Notes for Linux.

    personality.zip

    This .zip file contains the installation framework for IBM's Workplace Managed Client. It contains all

    the necessary components to install the framework, as well as the Notes installation package. This file

    may be unzipped to either a local drive or to a Linux file server. It contains an updateSite directory that

    contains all the Workplace features and plug-ins needed by Notes. It also contains a deploy directory

    that controls the provisioning of the features in the updateSite.

    setuplinux.bin

    This file contains the Notes components to enable Notes for Linux. It is a self-contained installation

    file, but is recommended to be installed using the deploy directory provided within

    personality.zip. To do this, refer to the instructions below to place the file in the appropriate

    directory.

    The Lotus Notes Install pre-requisites steps

    1 - Login as a non-root user.

    2 - Unzip the file personality.zip as non-root user into a directory such as "plugin" in a user's home

    directory or other working directory. This could be a network-mounted directory if you want many

    machines to be able to install from one updateSite.

    #unzip Personality.zip –d plugin

    3 - Place the setuplinux.bin file in the correct directory, removing any existing one.

    #cd plugin/updateSite/features//com.ibm.workplace.notesinstall.linux.feature_7.0.1.0000-

    0900/bin/linux/

    #rm setuplinux.bin

    Copy the new setuplinux.bin file inside the above directory.

    4 - Choose the location for the Workplace Components.

    The default location for these components is /opt/IBM. To use this location, ensure the permissions

    are set to 777 for the "IBM" directory. If this is not desired, please choose a location that is writeable,

    such as within the user's home directory.

    setup_wct_platform.bin

    5 - Start the installation process, first ensuring that the setup_wct_platform .bin has execute

    permissions, by using the chmod command.

    #cd plugin

    #chmod 777 setup_wct_platform .bin

    #./ setup_wct_platform .bin

    6 - The Lotus Notes Installation process:

    - Select Next on the Welcome screen

    - The Software License window comes up, Select "I accept both the IBM and the non -IBM terms".

    - The Installation window with the Workplace Managed Client directory comes up; make sure to

    chose a location that the user has write permission to.

    - Choose the defaults and Click Next, or choose another writeable directory and Click Next

    - Click Next to start the installation on the window confirming that the Lotus Notes Plug-in will be

    installed.

    Once the installation is done, a window appears saying that the files have successfully installed.

    Click Next to start the Workplace Managed Client setup.

    - You will then see the provisioning system provision the features and plug-ins needed for Notes.

    - When it provisions the feature containing the Notes installer, you will be presented with the license

    agreement for Notes. Select "I accept the terms of the license agreement " and Click Next.

    - Once you click Next, the Notes Plug-in starts installing.

    - Once the installer is finished, the wizard will require you to logout and log back in to get the Notes

    environment variables set.

    - Click Finish, and Click Finish again.

    - Log out from the User session and log back in as the user you just installed Notes under.

    - When you log back in you should have an "IBM Lotus Notes" icon on your desktop; double click the

    icon.

    - The Notes personality of the Workplace Managed Client will start using the Notes for Linux plug-in.

    Notes setup will start, with dialogs asking for your Notes user information. Once you configure Notes

    with the appropriate information, you are able to use Notes on Linux.

    This Patch is necessary to run Lotus Notes effectively on SLED 10

    These are set of fixes required to run Lotus Notes on SLED 10.

    Please refer to following Technote #1247685 by going to the following site.

    Download the Patch from the following site:

    ftp://ftp.software.ibm.com/software/lotus/fixes/notes/Notes_linux_sled10_patch_Nov27.zip

    # cd /tmp

    #unzip Notes_linux_sled10_patch_Nov27.zip

    #cd /home/<non-root>/notes

    #patch -p1 < /tmp/sled10/patch1127_update_version_string

    Note:

    <non-root> variable is the non-root username you used to install Lotus Notes under.

    Uninstallation information

    Uninstalling Lotus Notes for Linux

    Login as either the user who installed the software or root.

    In order to uninstall the products, there are uninstallers provided.

    To uninstall Notes

    Locate the directory where Notes has been installed and the sub-directory _uninst.

    # cd ~/notes/_uninst

    # ./uninstaller.bin

    To uninstall the WMC components

    Locate the directory where WMC has been installed and the sub-directory _uninst.

    # cd <WMC install directory>/_uninst

    # ./uninstaller.bin

    In both cases, dialogs appear in which you can continue clicking 'Next' until the uninstallation is

    finished. There is a choice of whether to remove user data as part of the uninstall.
  • Oracle 9i for RedHat Linux 9i的安装

    2007-04-23 00:09:30

    一、 下载软件:
    otn.oracle.com上下载for Linux的版本,注意要下载32位版本(64位的安装时会出现无法运行二进制文件的错误)
    一般下载的文件名为:lnx_920_disk1.cpio.gzlnx_920_disk2.cpio.gzlnx_920_disk3.cpio.gz,在根目录下建一个目录/oracle,将文件保存在里面
    对下载的文件进行解压缩,gunzip lnx_920_disk1.cpio.gz lnx_920_disk2.cpio.gz lnx_920_disk3.cpio.gz,分别得到lnx_920_disk1.cpiolnx_920_disk2.cpiolnx_920_disk3.cpio三个文件
    再使用cpio –idmv < lnx_920_disk1.cpio
    cpio –idmv < lnx_920_disk1.cpio
    cpio –idmv < lnx_920_disk1.cpio
    进行解包,这样在/oracle下就多了三个文件夹Disk1Disk2Disk3
    二、 添加用户:
    root登陆,运行groupadd dba添加dba
    运行useradd –g dba –d /oracle –s /bin/bash oracle,添加一个名为oracle的用户,属于dba组,主目录为/oracle,使用bash,如果是用ksh,注意要编辑的环境配置文件名是.profile,而用bash的是.bash_profile,两个完全兼容,下面给出的环境参数对二者都适用
    运行chown –R oracle:dba /oracle
    运行chmod 755 /oracle
    三、 配置oracle的环境变量:
    root的身份运行vi /oracle/.bash_profile,按Insert,将下面的内容粘帖进去
    TERM=xterm; export TERM
    TMPDIR=/tmp; export TMPDIR
    export ORACLE_SID=gztp
    export ORACLE_BASE=/oracle
    export ORACLE_HOME=/oracle/product/9.2.0
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    export ORACLE_TERM=xterm
    PATH=$ORACLE_HOME/bin:/opt/bin:/bin
    PATH=$PATH:/usr/bin:/usr/local/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/java/bin
    export PATH
    export JAVA_HOME=/usr/local/java
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes12.zip
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    CLASSPATH=$CLASSPATH:network/jlib
    export CLASSPATH
    export LD_ASSUME_KERNEL=2.4.1
    export LANG=C
    注意ORACLE_SID填入需要的名称,还有就是LANG= C可以解决安装界面起来后的乱码问题,为了解决乱码,我们试了很多的方法,比如用export LANG=zh_CN.GB2312但只有这个有效。按Esc,输入:wq,退出后,以oracle的身份登陆,运行set | more命令看设置是否生效。
    四、 配置内核参数
    运行sysctl –a | grep kernel查看当前的内核参数,首先修改shmmax
    运行sysctl –w kernel.shmmax=需要设置的数值,如果内存为1G,该值为8589934590,内存为512M,该值为4294967295
    修改SEMMSLSEMMNSSEMOPMSEMMNI的值
    运行echo SEMMSL_valueSEMMNS_valueSEMOPM_valueSEMMNI_value > sem
    以上的修改并不是必须的,因为我们安装过程中并没有修改上述数值,但安装还是成功完成且数据库使用正常。
    echosysctl修改的参数在系统重新启动后会失效,所以可以把修改的语句放到/etc/rc.d/rc.local
    五、 开始安装
    oracle用户登陆,进入\oracle\Disk1,运行./runInstaller
    进入oracle图形安装界面,在安装的准备阶段,需要输入UNIX Group Name,不需要输入,按Next,出现提示,
    按照提示运行文件即可。
    在安装过程中还会出现一个问题
    ”Error in invoking target install of makefile/oracle/product/9.2.0/ctx/lib/ins_ctx.mk”
    解决方法为:
    $ cd /oracle/product/9.2.0/ctx/lib
    $vi env_ctx.mk
    INSO_LINK=-L$(CTXLIB) $(LDLIBFLAG)m $(LDLIBFLAG)sc_ca $(LDLIBFLAG)sc_fa
    $(LDLIBFLAG)sc_ex $(LDLIBFLAG)sc_da $(LDLIBFLAG)sc_ut $(LDLIBFLAG)sc_ch
    $(LDLIBFLAG)sc_fi $(LLIBCTXHX) $(LDLIBFLAG)c –WI,-rpath,$(CTXHOME)lib
    $(CORELIBS) $(COMPEOBJS) $(LINKLDLIBS)
    其实要修改的只有最后一个,即$(LINKLDLIBS),将其加入即可。
    ” retry ” 继续
    安装完后可以建库,完成后,以oracle用户登陆,运行sqlplus “ / as sysdba “
    关闭数据库,运行shutdown
    启动数据库,运行startup,如果正常,即表示安装成功。
  • Linux中JDK的安装和配置方法

    2007-04-23 00:08:06

    安装JDK

    sun网站上直接下载JDKhttp://java.sun.com/j2se/1.4.2/download.html 提供了两个下载:

    1
    RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586.bin, 32.77 MB) 这个是自解压的文件,在linux上安装如下:

    # chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin

    # ./j2sdk-1_4_2_04-linux-i586.bin

    在按提示输入yes后,jdk被解压到./j2sdk1.4.2_04目录下。为与下面2JDK安装路径一致,我们进行下列操作,/usr/java下建立安装路径,并将文件考到该路径下:

    # mkdir /usr/java

    # cp -fr ./j2sdk1.4.2_04 /usr/java



    2
    RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586-rpm.bin, 32.77 MB)这个也是一个自解压文件,不过解压后的文件是j2sdk-1_4_2_04-linux-i586-rpm包,执行rpm命令装到linux上就可以了。安装如下:

    #chmod u+x ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # rpm -ivh j2sdk-1_4_2_04-linux-i586-rpm

    安装软件会将JDK自动安装到 /usr/java/j2sdk1.4.2_04目录下。

    二、配置环境变量

    1.
    修改用户环境变量

    假设使用java的用户为 kunp,编辑该用户的.bashrc文件进行环境变量设置。

    # vi /home/kunp/.bashrc

    .bashrc文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    2.
    修改所有用户的环境变量

    # vi /etc/profile

    在该文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    一定要在CLASSPATH路径中加入$CLASSPATH:

  • 用户菜单

    我的栏目

    我的存档

    数据统计

    RSS订阅

    Open Toolbar