lsusb
    显示本机的usb设备列表,可以显示出usb的详细信息,包括设备的读取速度和描述符。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
    lsusb  [选项]2、选项列表
    -v
        告诉lsusb详细显示所示设备的详细信息。这包括设备当前速度的配置描述符。如果可用,类描述符将显示USB设备类,包括集线器、音频、HID、通信和芯片卡。
    -s [[bus]:][devnum]
        显示指定总线和设备号的设备信息,总线和设备号用十进制标识。格式:lsusb –s 00:01
    -d [vendor]:[product]
        显示指定厂商和产品编号的设备,用十六进制表示编号。格式:lsusb –d 8086: 
    -D
        显示指定设备文件的设备信息,例如:lsusb –D /proc/bus/usb/001/001。只有root用户才可以使用这个选项
    -t
        以树状结构显示
    -V
        指令版本信息    如果指定的设备没有被找到,那么返回一个非0值。/usr/share/hwdata/usb.ids文件中记录了所有的USB设备节点的信息,包括制造商、产品号、类、子类、协议等等。3、实例
    1)直接显示简单的设备信息
    [root@localhost ntop-4.0.1]# lsusb
    //总线号      设备号          厂商ID
    Bus 001      Device 001:   ID 1d6b:0001 Linux Foundation 1.1 root hub
    2)显示详细信息
    [root@localhost ntop-4.0.1]# lsusb -v
    Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Device Descriptor:      //设备描述符
    bLength                18
    bDescriptorType         1
      …
    Hub Descriptor:         //集线器描述符
    bLength              11
     …
    Hub Port Status:       //集线器端口状态
       Port 1: 0000.0100 power
       Port 2: 0000.0100 power
      …
    Device Status:     0x0003   //设备状态
    Self Powered
    Remote Wakeup Enabled
    3)显示指定总线上的设备
    [root@localhost ntop-4.0.1]# lsusb -s 001:001
    Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    4)显示指定厂商的设备信息
    [root@localhost ntop-4.0.1]# lsusb -d 1d6b:001
    Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    5)以树状结构显示
    [root@localhost ntop-4.0.1]# lsusb -t
    Bus#  1
    `-Dev#   1 Vendor 0x1d6b Product 0x0001

解决方案 »

  1.   

    eject
         eject指令允许在软件控制下弹出可移动媒体(通常是光盘、软盘、磁带或Jaz或ZIP磁盘)。该命令还可以控制一些由某些设备支持的自动弹出功能的多光盘转换器,并关闭一些光盘驱动器的盘。    对应于name的设备被弹出。名称可以是一个设备文件或挂载点,可以是一个完整的路径,也可以是前面省略的“/dev”、“/media”或“/mnt”。如果未指定名称,则使用默认名称“cdrom”。    根据设备是CD ROM、SCSI设备、可移动软盘还是磁带,有四种不同的弹出方法。默认情况下,弹出将按顺序尝试所有四种方法,直到成功为止。如果该设备目前已安装,则在弹出前将其卸载。    此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
        eject  -h
        eject [-vnrsfmqp]  []
        eject [-vn]  -d
        eject [-vn]  -a  on|off|1|0 []
        eject [-vn]  -c  slot []
        eject [-vn]  -i  on|off|1|0 []   
        eject [-vn]  -t  []
        eject [-vn]  -T  []
        eject [-vn]  -x   []
        eject [-vn]  -X  []
        eject -V
     
    2、选项列表
        -h | --help
            显示简单的帮助文档
        -V | --version
            显示命令版本信息,然后退出
        -v | --verbose
            执行指令的时候显示详细信息,可以在命令行看到指令在干什么
        -d | --default
            显示默认的设备名字(cdrom)
        -a on|1|off|0
            这个选项控制自动弹出模式,只有某些设备才支持。如果是能这个开关,设备在关闭的时候会自动弹出。
        -c | --changerslot
            使用此选项,可以从ATAPI/IDE CD-ROM转换器中选择CD插槽。使用此特性需要Linux2.0或更高版本。当一个更改请求工作的时候,无法使用CD-ROM驱动器(挂载的数据CD或播放音乐CD)。还请注意,转换器的第一个插槽称为0,而不是1。
        -i on|1|off|0
            此选项可以锁定弹出按钮,使其不工作。当启用时,当按下按钮时,驱动器将不会弹出。这是有用的,当您携带笔记本电脑在一个袋子或箱子,不希望它弹出,如果该按钮是无意中按下。
        -t | --trayclose
            有了这个选项,驱动器被赋予一个CD-ROM托盘关闭命令。并非所有设备都支持此命令。
        -T | --traytoggle
            如果CD-ROM托盘已经打开,那么它将关闭;如果CD-ROM托盘已经关闭,那么它将弹出。并非所有设备都支持此命令,因为它使用了上面的CD-ROM托盘关闭命令。
        -x | --cdspeed
            使用此选项,CDROM驱动器可以进行选择速度。速度参数是一个指示所需速度的数字(例如,8表示8X速度),或0表示最大数据速率。并非所有设备都支持此命令,而且您只能指定驱动器能够达到的速度。每次媒体更改时,此选项将被清除。此选项可以单独使用,也可以与-t和-c选项一起使用。
        -X | --listspeed
            显示cdrom的可用速度。使用此选项,将探测CD-ROM驱动器以检测可用的速度。输出一个速度列表,可用作-x选项的参数。这只适用于Linux2.6.13或更高版本,在以前的版本上只报告最高速度。还请注意,某些驱动器可能无法正确报告速度,因此选项不适用于它们。
        -n | --noop
            显示所选的设备,但是不执行任何操作
        -r | --cdrom
            弹出 cdrom设备
        -s | --scsi
            弹出SCSI设备
        -f | --floppy
            弹出 floppy设备
        -q | --tape
            弹出 磁带设备
        -p | --proc
            允许使用/proc/mounts代替/etc/mtab
        -m | --no-umount
            此选项允许eject与自动挂载可移动媒体的设备驱动程序一起工作,因此这些设备必须总是已挂载的。该选项告诉eject不要尝试卸载给定的设备,即使它是根据/etc/mtab或/proc/挂载安装的。
     
    3、example
        弹出默认设备
            eject
        弹出一个名字为cdrom的设备或者挂载点
            eject cdrom
        使用设备名来弹出
            eject /dev/cdrom
        使用挂载点弹出
            eject /mnt/cdrom
        弹出第4个IDE设备
            eject hdd
        弹出第一个SCSI设备
            eject sda
        使用SCSI分区名称弹出
            eject sda4
        在多盘交换机上选择第5盘
            eject –v –c4 /dev/cdrom
        打开声音放映机CD-ROM上的自动弹出功能
            eject –a on /dev/sbpcd
     
    4、说明
         eject指令执行成功之后会返回0,如果失败就返回1。
        eject指令只适用于支持四种弹出方法中的一种或多种方法的设备。这包括大多数光盘驱动器(IDE、SCSI和专有)、一些SCSI磁带驱动器、Jaz驱动器、ZIP驱动器(并行口、SCSI和IDE版本)和LS 120可移动软盘。用户还报告说,在Sun SPARC和Apple Macintosh系统上,软盘驱动器也取得了成功。如果弹出无法工作,很可能是对设备的内核驱动程序的限制,而不是弹出程序本身的限制。
        -r、-s、-f和-q选项允许控制用于弹出的方法。可以指定多个方法。如果没有指定这些选项,则会尝试所有四个选项(在大多数情况下,这很好)。
        eject并不总是能够确定设备是否已安装(例如,它是否有多个名称)。如果设备名称是一个符号链接,弹出将跟随该链接并使用它所指向的设备。
        如果eject确定该设备可以具有多个分区,则它将尝试在弹出之前卸载该设备的所有已安装分区。如果卸载失败,程序将不会尝试弹出媒体。
        你可以弹出一张音频CD。如果驱动器是空的,一些CDROM将拒绝打开托盘。有些设备不支持托盘关闭命令。
    如果启用了自动弹出功能,则在运行此命令后,驱动器将始终弹出。并不是所有的linux内核CDROM驱动程序都支持自动弹出模式,无法找到自动弹出模式的状态。
        您需要适当的权限才能访问设备文件。要弹出某些设备(例如SCSI设备),需要以root或setuidroot的形式运行。
        用于查找设备的启发式方法(给定名称)如下所示。如果名称以尾随斜杠结尾,则删除它(这是为了支持使用shell文件名完成生成的文件名)。如果名称以“.”或“/”开头,则尝试将其作为设备文件或挂载点打开。如果失败,它会尝试将‘/dev/’、‘/media/’、‘/mnt/’、‘/dev/cdroms’、‘/dev/rdsk/’、‘/dev/dsk/’和最后‘./’放在名称前面,直到找到可以打开的设备文件或挂载点。        安装设备的程序检查/etc/mtab。如果失败,它还会检查/etc/fSTAB以查找当前未挂载设备的挂载点。
        建议创建符号链接,如/dev/cdrom或/dev/zip,以便eject可以使用容易记住的名称来确定合适的设备。
        要保存类型,可以为特定设置工作的弹出选项创建shell别名。
     
    5、实例
         1)没有指定设备类型,直接弹出cdrom。此种情况下会依次尝试所有的方式,直到弹出为止。
        [root@localhost ~]# eject –v     //使用-v来显示指令执行的过程
        eject: using default device `cdrom'
        eject: device name is `cdrom'
        eject: expanded name is `/dev/cdrom'
        eject: `/dev/cdrom' is a link to `/dev/sr0'
        eject: `/dev/sr0' is not mounted
        eject: `/dev/sr0' is not a mount point
        eject: checking if device "/dev/sr0" has a removable or hotpluggable flag
        eject: `/dev/sr0' is not a multipartition device
        eject: trying to eject `/dev/sr0' using CD-ROM eject command  //尝试第一种弹出方式
        eject: CD-ROM eject command failed
        eject: trying to eject `/dev/sr0' using SCSI commands   //尝试第二种弹出方式
        eject: SCSI eject succeeded
         2)使用“-r”选项,弹出cdrom
        [root@localhost ~]# mount    //查看是否有光盘挂载
        /dev/mapper/VolGroup-lv_root on / type ext4 (rw)
        …
        /dev/sr0 on /media/VBox_GAs_5.2.16 type iso9660 (ro,nosuid,nodev,uhelper=udisks,uid=0,gid=0,iocharset=utf8,mode=0400,dmode=0500)
     
        [root@localhost ~]# eject -v –r    //弹出光盘
        eject: using default device `cdrom'
        …
        eject: trying to eject `/dev/sr0' using CD-ROM eject command
        eject: CD-ROM eject command succeeded
     
      

  2.   

    hwclock      hwclock是一种访问硬件时钟的工具,可以显示当前时间,将硬件时钟设置为指定的时间,将硬件时钟设置为系统时间,以及从硬件时钟设置系统时间。您还可以定期运行hwlock以插入或删除硬件时钟中的时间,以补偿系统漂移(如果继续运行,则该时钟始终以一定的速率获得或丢失时间)。    该命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
        hwclock  [functions]  [options]2、选项列表
        下面的选项告诉hwclock指令该执行那个函数
        -r | --show
            读取硬件时钟并在标准输出上打印时间。显示的时间总是本地时间,即使您将硬件时钟保持在协调的世界时间。请参见-UTC选项。
        --set
            将硬件时钟设置为-date选项指定的时间
        -s | --hctosys
            从硬件时钟设置系统时间。还将内核的时区值设置为由TZ环境变量和/或/usr/share/zoneinfo指示的本地时区,正如tzset(3)所解释的那样。内核时区值的过时的tz_dsttime字段被设置为DST_NONE。(有关此字段过去的含义的详细信息,请参阅日期的settimeofday(2)。
    这是在系统启动脚本中使用的一个很好的选项
        -w | --systohc
            将硬件时钟设置为当前的系统时间
        --systz
            根据当前时区设置内核的时区并重置系统时间,系统时间仅在启动后的第一次调用时重置。本地时区被认为是TZ环境变量和/或/usr/share/zoneinfo所指示的,tzset(3)将解释它们。内核时区值的过时tz_dsttime字段设置为DST_NONE。(有关此字段过去的含义的详细信息,请参阅日期的settimeofday(2)。这是-hctosys的另一个选项,它不读取硬件时钟,并且可以在最近2.6内核的系统启动脚本中使用,因为您知道系统时间包含硬件时钟时间。如果硬件时钟已经在协调时,则不会重置。
        --adjust
            从硬件时钟中增加或减去时间,以说明自上次时钟设置或调整以来的系统漂移。请参阅下面的讨论
        --getepoch
            将内核的硬件时钟时纪元打印到标准输出。这是在AD中引用硬件时钟中的零年值的年份数。正在使用的约定是,硬件时钟中的年份计数器包含1952年以来的完整年份数,然后是内核的硬件计数器时代值必须是1952年。每当hwlock读取或设置硬件时钟时,就会使用这个纪元值。epoch只有在Alpha机器上有。
        --setepoch
            将内核的硬件时钟纪元值设置为--epoch选项指定的值。
        -v | --version
            在标准输出上显示hwclock的版本
        --date=date_string
            如果指定-set选项,则需要此选项。否则,将忽略该选项。这将指定设置硬件时钟的时间。选项是date指令的参数。例如:hwclock --set --date="9/22/96 16:45:05"。参数在本地时间,即使您将硬件时钟保持在协调的世界时间。请参见-UTC选项。
        --epoch=year
            指定硬件时钟时***始的年份,即在AD中,硬件时钟的年份计数器中的零值所指的进入AD的年份数。它与-setepoch选项一起使用,以设置内核的硬件时钟时代概念,或者指定用于直接ISA访问的时代。例如:
        hwclock --setepoch --epoch=1952    下面的选项配合函数使用
        -u | --utc | --localtime
            指示硬件时钟分别保持在协调的世界时间或本地时间。您可以选择是否将时钟保持在协调世界协调时或本地时间,但时钟中没有显示任何信息。这是你所选择的,所以这个选项就是你如何将信息提供给时钟。如果您指定了这些选项中的一个错误的(或者没有指定,并且选择了错误的默认值),那么硬件时钟的设置和查询都将被搞砸。如果您没有指定-utc或-localtime,则默认值以最后一次使用hwlock设置时钟时指定的值为准(即,hwlock成功地使用-set、-system ohc或-调整器选项运行),如adjtime文件中所记录的。如果adjtime文件不存在,则默认值为本地时间。
        --noadjfile
            禁用/etc/adjtime.hwlock提供的工具,不使用此选项读取或写入该文件。在使用此选项时,必须指定-UTC和--localtime
        --adjfile=ilename
            覆盖默认的/etc/adjtime文件
        -f | --rtc=filename
            重写默认/dev文件名,在许多平台上为/dev/rtc,但可能是/dev/rtc0、/dev/rtc1,等等。
        --directisa
            只有在ISA机器或Alpha上才有意义(粗略地说,它实现了足够多的ISA机器来实现hwlock的目的)。对于其他机器,它没有作用。这个选项告诉hwlock使用显式I/O指令来访问硬件时钟。如果没有这个选项,hwlock就会尝试。若要使用/dev/rtc设备(假定它由RTC设备驱动程序驱动),如果它无法打开设备(用于读取),它将使用显式I/O指令。
        --badyear
            表示硬件时钟无法存储超出1994-1999年范围的年份。在一些BIOSes(几乎所有在4/26/94至5/31/95之间制造的BIOSes)中都存在一个问题,在这些BIOSes中,它们无法处理1999年之后的年份。如果试图将世纪价值设置为小于94(或95 in)的值。在某些情况下,实际设置的值为94(或95),因此,如果您有这些机器中的一台,则hwlock不能在1999年之后设置,也不能以正常的方式使用时钟的值作为真正的时间。为了弥补这一点(没有BIOS更新,这肯定更好),请始终使用-如果您有这些机器中的一台,就使用-坏年份。在adjtime文件中假设日期是过去一年内的日期。要想让它发挥作用,你最好每年至少运行一次hwclock --set或hwlock –systohc。虽然hwlock在读取硬件时钟时忽略了年份值,但当它设置时钟时,它会设置年份值,将其设置为1995、1996、1997或1998,无论哪个年份在闰年周期中所处的位置与真正的年份相同。这样,硬件时钟就会插入。如果你让硬件时钟在没有设置的情况下运行一年以上,这个方案可能会失败,最后你可能会损失一天。
        --srm
            此选项等价于--epoch=1900,用于使用srm控制台指定alphad上最常见的历元。
        --arc
            此选项等价于--epoch=1980,用于使用ARC控制台指定ALPHS上最常见的历次(但Ruffans有1900年)。
        --jensen | --funky-toy
            这两个选项指定了您拥有的Alpha机器的类型。如果您没有Alpha,则它们是无效的,如果有,它们通常是不必要的,因为hwlock应该能够自行确定运行在什么上,至少在安装/proc时是这样的。(如果您发现您需要这些选项之一使hwlock工作,请与维护人员联系,看看程序是否可以改进以自动检测您的系统。‘hwlock --debug’和‘cat/proc/cpuinfo’的输出可能会引起人们的兴趣。)
        --jensen代表运行在Jensen模式。
        --funky-toy意味着在您的机器上,必须使用UF位而不是硬件时钟中的UIP位来检测时间转换。选项名中的“toy”是指机器一年中的时间
        --test
            测试程序,不改变任何设置
        --debug
            显示大量关于hwlock内部正在做什么的信息,其中一些功能是复杂的,这个输出可以帮助您理解程序是如何工作的。3、说明
        一般在操作系统中都会有两个时钟,硬件时钟是主板上的定时器时钟,系统时钟是系统的内核时钟,它们相互不影响。
        1)硬件时钟
        这个时钟,运行独立于任何控制程序运行在CPU中,甚至当机器关闭。在ISA系统中,这个时钟被指定为ISA标准的一部分。控制程序可以读取或设置这个时钟为整秒,但控制程序也可以检测1秒时钟的边缘,因此该时钟实际上具有无限的精度。    这种时钟通常被称为硬件时钟、实时时钟、RTC、BIOS时钟和CMOS时钟。硬件时钟以其大写的形式被hwlock所发明,因为其他所有的名称都不适合误导。例如,一些非ISA系统有几个实时时钟。一个非常低功耗的I2C或SPI时钟芯片可以与备用电池一起作为硬件时钟,以初始化一个功能更好的集成实时时钟,用于大多数其他用途。    2)系统时钟
        这是由Linux内核内的时钟保持的时间,由计时器中断驱动。(在ISA机器上,计时器中断是ISA标准的一部分)。它只有在linux在机器上运行时才有意义。系统时间是从1970年世界协调时(UTC)1月1日00:00开始的秒数(或者更简洁地说,是1969年以来的秒数)。不过,系统时间不是整数,它实际上是无限的。系统时间是重要的时间。Linux系统中硬件时钟的基本目的是在Linux不运行时保持时间。在Linux启动时,将系统时间从硬件时钟初始化,然后不再使用硬件时钟。请注意,在设计ISA的DOS中,硬件时钟是唯一的实时时钟。    重要的是,当系统运行时,系统时间不存在任何不连续性,比如使用date命令来设置它。但是,在系统运行时,您可以对硬件时钟做任何您想做的事情,而下一次Linux启动时,它将使用硬件时钟的调整时间进行设置。    Linux内核维护系统的本地时区的概念。但是不要被误导-几乎没有人关心内核认为它在哪个时区。相反,关心时区的程序(可能因为他们想为您显示本地时间)几乎总是使用更传统的方法。确定时区:它们使用“tz”环境变量或“/usr/share/zoneinfo”目录,如tzset(3)的手册页所解释的那样。时区值是错误的,vFAT文件系统会在文件上报告并设置错误的时间戳。    当您使用”--hctosys”选项设置系统时间时,hwlock将内核时区设置为“tz”或“/usr/share/zoneinfo”所指示的值。    时区值实际上由两部分组成:1)字段“tz_minutesWest”表示本地时间(未根据DST进行调整)滞后于UTC;2)字段“tz_dsttime”,指示当前在本地有效的夏令时(DST)约定的类型。第二个字段不在Linux下使用,始终为零。    3)hwclock如何访问硬件时钟
        hwlock使用多种不同的方法来获取和设置硬件时钟值,最常见的方法是对设备特殊文件“/dev/rtc”执行I/O操作,假定该文件是由rtc设备驱动程序驱动的。然而,这种方法并不总是可用的。首先,rtc驱动程序是linux中比较新的一种。此外,虽然有一些版本的rtc驱动程序可以在decalpha上工作,但似乎有大量的alpha无法工作(常见的症状是时钟挂起)。此外,最近的linux系统对rtc有更多的通用支持,甚至支持不止一个的系统,所以您可能需要通过指定/dev/rtc 0或/dev/rtc 1来覆盖默认值。    在旧系统中,访问硬件时钟的方法取决于系统硬件。    在ISA系统中,hwlock通过对端口0x70和0x71进行I/O操作,可以直接访问构成时钟的“CMOS存储器”寄存器。它使用实际的I/O指令,因此只有在超级用户有效用户ID的情况下才能这样做。(对于jensen Alpha,hwlock无法执行这些I/O指令,因此它使用设备文件“/dev/port”,它提供了与I/O子系统几乎一样低的接口)。这是一种非常糟糕的访问时钟的方法,因为用户空间程序通常不应该进行直接I/O和禁用中断。但是在ISA和Alpha系统中,这是唯一的方式。    在m68k系统上,hwlock可以通过控制台驱动程序访问时钟,通过设备文件“/dev/tty1”访问时钟。    hwlock尝试使用文件“/dev/rtc”。如果内核没有编译“/dev/rtc”,或者它无法打开“/dev/rtc”,那么hwlock将返回到另一种方法(如果可用的话)。在ISA或Alpha计算机上,您可以强制hwclock使用CMOS寄存器的直接操作,而无需通过指定“--directisa”选项。    4)校准功能adjust
        硬件时钟通常不是很精确,但是它的许多不准确是完全可以预测的,它每天得到或失去相同的时间。这被称为系统漂移。hwlock的“调整”功能允许您进行系统校正以纠正系统漂移。它的工作方式如下:hwlock保存了一个文件“/etc/adjtime”,它保存了一些历史信息。    假设您从没有adjtime文件开始,发出hwlock-set命令将硬件时钟设置为真实的当前时间。hwlock创建adjtime文件,并在其中记录当前时间,作为最后一次校准时钟。5天后,时钟增加了10秒,因此您可以发出另一个“hwlock --set”命令来设置它。返回10秒。hwlock更新adjtime文件,显示当前时间作为最后一次校准时钟,并以系统漂移速率记录每天2秒。24小时过去,然后发出“hwlock --adjust”命令。hwlock查阅adjtime文件,看到时钟离开时每天增加2秒。一个人呆了整整一天。所以它从硬件时钟中减去2秒。然后,它记录当前时间作为最后一次调整时钟的时间。又过了24小时,你又发出了另一个“hwclock --adjust”指令。hwclock做了同样的事情:减去2秒,用当前时间更新adjtime文件,这是最后一次调整时钟。
        
        每次您校准时钟(使用--set或—systohc)时,hwlock根据上次校准的时间、上次调整后的时间、在任何中间的调整中假定的漂移率以及时钟当前的关闭量,重新计算系统漂移率。在hwclock使用的任何时候,都会出现少量的误差,因此它不会进行小于1秒的调整。稍后,当您再次请求调整时,累积漂移将超过1秒钟,而hwlock则会进行调整。    在系统启动时,在“hwlock --hctosys”之前进行hwlock的调整是很好的,并且在系统通过cron运行时也可以定期进行调整。
    虽然adjtime文件的命名仅仅是为了控制时间调整的历史记录,但它实际上包含了hwlock在从一个调用到下一个调用时记忆信息时使用的其他信息。adjtime文件的格式是ASCII:
        第1行的3个数字数字,用空格隔开,分别代表:a)系统漂移率,每天以秒为单位,浮点小数点;b)自1969年世界协调时以来最近调整或校准的秒数,小数整数;c)零(与时钟(8)兼容)为十进制整数。
        第2行一个数字,代表自1969年世界协调时以来最近一次校准产生的秒数。如果还没有校准,或者已知任何先前的校准都是没有意义的,那么值就是0(例如,因为在校准之后,硬件时钟已经被找到,不包含有效时间)。这是一个十进制整数。
        第3行是“utc”或“local”。指示硬件时钟是设置为协调世界时间还是设置为本地时间。    5)内核如何自动同步硬件时钟
        在某些系统中,您应该注意到硬件时钟保持同步的另一种方式。Linux内核有一种模式,它每11分钟将系统时间复制一次到硬件时钟。这是一个很好的模式,当您使用一些复杂的东西,比如NTP来保持系统时间同步时。(NTP是一种保持系统时间同步的方法,它可以与网络上的某个时间服务器或连接到您的系统的无线电时钟保持同步。参见RFC 1305)。    这个模式(我们称之为“11分钟模式”)是关闭的,直到有东西打开它。ntp守护进程xntpd就可以打开它。您可以通过运行任何东西来关闭它,包括“hwlock --hctosys”,它以老式的方式设置系统时间。    如果你的系统以11分钟的模式运行,不要使用“hwlock --adjust”或“hwlock-hctosys”。在启动时使用“hwlock --hctosys”来获得一个合理的系统时间是可以接受的,直到您的系统能够运行为止。从外部源设置系统时间并启动11分钟模式
    4、实例
    1)不使用任何参数,直接查看硬件时钟
    [root@localhost ntop-4.0.1]# hwclock
    2018年08月23日
    星期四 15时01分28秒  -0.577410 seconds2)设置硬件时钟
    [root@localhost ntop-4.0.1]# hwclock --set --date="0904"    //设置硬件时钟,需要date参数来配合使用
    [root@localhost ntop-4.0.1]# hwclock
    2018年09月04日
    星期二 09时04分09秒  -0.479386 seconds3)将硬件时钟设置成本地时间格式
    [root@localhost ntop-4.0.1]# hwclock --localtime
    2018年09月04日
    星期二 01时05分46秒  -0.462990 seconds4)将硬件时钟设置成系统时间
    [root@localhost ntop-4.0.1]# date      //查看当前系统时间
    2018年 09月 04日
    星期二 12:25:15 CST
    [root@localhost ntop-4.0.1]# hwclock –w  //将硬件时钟设置为系统时间
    [root@localhost ntop-4.0.1]# hwclock     //查看硬件时钟
    2018年09月04日
    星期二 12时25分48秒  -0.263687 seconds
      

  3.   

    du
        以块为单位,显示当前目录下,所有目录、文件、子目录的磁盘使用情况。总结每个文件的磁盘使用情况,对目录进行递归处理
        此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
        du  [选项]  [目录]2、选项列表
        --help
            帮助
        --version
            显示命令版本信息
        -a | --all
            显示所有的文件大小,包含目录、文件、子目录。默认情况下不显示文件的大小
        --apparent-size
            打印表观大小,而不是磁盘使用量;虽然表观大小通常较小,但由于(“稀疏”)文件中的漏洞、内部碎片、间接块等原因,它可能更大。
        B | --block-size=SIZE
            设置显示时的块大小
        -b | --bytes
            等价于“--apparent-size --block-size=1”
        -c | --total
            产生一个总和统计
        -D | --dereference-args | -H
            只引用命令行中列出的符号链接
        --files0-from=F
            总结文件F中指定的以NUL结尾的文件名的磁盘使用情况;如果F是“-”,则从标准输入中读取名称
        -h | --human-readable
            以更加易读的方式来显示
        --si
            和“-h“一样,只是显示单位是1000,而不是1024
        -k
            相当于—block-size=1k
        -m
            相当于—block-size=1M
        -l | --count-links
            如果是硬链接,那么记录次数
        -L | --dereference
            取消引用所有符号链接
        -P | --no-dereference
            不要跟随任何符号链接,这是默认的
        -0 | --null
            以0字节(而不是换行符)结束每一行输出
        -S | --separate-dirs
            不包括子目录的大小
        -s | --summarize
            只显示每个参数的总数
        -x | --one-file-system
            跳过不同文件系统上的目录
        -X | --exclude-from=FILE
            排除与文件中任何模式匹配的文件
        --exclude=PATTERN
            排除匹配模式的文件
        --max-depth=N
            只有目录层数少于N,才打印目录(或文件)的总数(或带有-all);“--max-depth=0 “等价于 ” --summarize “
        --time
            显示最后修改的时间
        --time=WORD
            将时间显示为指定的内容而不是修改时间,可以是:atime、access、use、ctime或status。
        --time-style=STYLE
            使用指定的格式显示时间,时间格式可以是full-iso,long-iso,iso,+FORMAT    该指令显示的值的单位是“--block-size”、“DF_BLOCK_SIZE”、“BLOCK_SIZE”,、BLOCKSIZE”这是四个值中第一个可用的值。 除了第一个值是用户设定的,其他3个都是环境变量。如果这四个值没有可用的,那么默认是1024(如果设置了POSIXLY_CORRECT,那么就是512)。
    显示的单位可能是:KB,1000;K,1024;MB,100*100;M,1024*1024。3、实例
    1)查看home目录总大小
    [root@192 ~]# du /home -s
    2320472 /home
    2)使用“--time”选项,显示最后的修改时间
    [root@192 ~]# du /home --time
    4 2010-11-12 08:54 /home/test01/.gnome2
    4 2010-08-18 23:43 /home/test01/.mozilla/extensions

    3)使用“-m”选项,以Mb为单位显示 
    [root@192 ~]# du /home -m
    1 /home/test01/.gnome2                //不够1M的,按照1M处理
    1 /home/test01/.mozilla/extensions

    4)指定“--time“的显示 
    [root@localhost ~]# du /weijie/ --time=use              //最后使用时间
    12 2018-10-08 09:11 /weijie/www.baidu.com
    4 2018-10-08 09:11 /weijie/testftp
    56 2018-10-13 08:40 /weijie/
    [root@localhost ~]# du /weijie/ --time=status            //状态改变时间
    12 2018-10-03 10:09 /weijie/www.baidu.com
    4 2018-10-02 09:34 /weijie/testftp
    56 2018-10-03 10:09 /weijie/
      

  4.   

    df
        显示磁盘分区上的磁盘使用状况,可以显示出文件系统名称、大小、挂载点等信息。df显示包含每个文件名参数的文件系统上可用的磁盘空间。如果不给出文件名,则显示所有当前挂载的文件系统上可用的空间。默认情况下,磁盘空间显示在1K的块中,除非设置了环境变量POSIXLY_RIDER,在这种情况下使用512个字节块。
        如果参数是包含已挂载文件系统的磁盘设备节点的绝对文件名,df将显示该文件系统上的可用空间,而不是包含设备节点的文件系统(始终是根文件系统)。这样做的各种系统都需要非常不可移植的文件系统结构知识。
        此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
    df  [OPTION]...  [FILE]...2、选项列表
        --help
            帮助
        --version
            显示命令版本信息
        -a | --all
            显示所有的文件系统,包含虚拟文件系统 
        [文件]
            显示指定文件所在的文件系统信息
        -B | --block-size=SIZE
            设置显示时的块大小
        --direct
            显示文件的统计信息,而不是挂载点
        --total
            产生一个总和
        -h | --human-readable
            以更加易读的方式来显示
        -H | --si
            以更加易读的方式显示,但是使用1000为一个单位,而不是1024
        -i | --inodes
            显示inode信息
        -k
            等价于”--block-size=1k”
        -l | --local
            显示本地文件系统
        --no-sync
            在获取使用信息之前,不唤醒同步
        --sync
            在获取信息之前唤醒同步
        -P | --portability
            使用POSIX输出格式
        -t | --type=TYPE
            显示指定类型的文件系统信息
        -T | --print-type
            显示文件系统类型
        -x | --exclude-type=TYPE
            不显示指定的文件系统    该指令显示的值的单位是“--block-size”、“DF_BLOCK_SIZE”、“BLOCK_SIZE”,、BLOCKSIZE”这是四个值中第一个可用的值。 除了第一个值是用户设定的,其他3个都是环境变量。如果这四个值没有可用的,那么默认是1024(如果设置了POSIXLY_CORRECT,那么就是512)。
    显示的单位可能是:KB,1000;K,1024;MB,100*100;M,1024*1024。3、实例
    1)使用“-h”选项,以方便阅读的方式显示文件系统信息
    [root@localhost ~]# df –h
    //文件系统名字                      大小    已用    可用   使用百分比   挂载点
    Filesystem                        Size    Used   Avail Use%        Mounted on
    /dev/mapper/VolGroup-lv_root   25G     13G    11G    56%         /
    tmpfs                               811M    292K  810M   1%          /dev/shm
    /dev/sda1                          485M    33M    427M   8%          /boot
    2)使用“-T”选项,显示出文件系统的类型
    [root@localhost ~]# df –T
    //文件系统名字                      类型       大小         已用        可用   使用百分比   挂载点
    Filesystem                       Type      1K-blocks    Used       Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root ext4      25552764     13364332  10890412   56%   /
    tmpfs                             tmpfs     829656       292        829364     1%    /dev/shm
    /dev/sda1                         ext4     495844       32996      437248     8%    /boot
    3)使用“-B”选项,指定显示时的块大小是2048kb。注意结果可以和上面对比一下
    [root@localhost ~]# df –B 2048
    //文件系统名字                      类型       大小         已用        可用   使用百分比   挂载点
    Filesystem                       Type      2K-blocks    Used       Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root ext4      12776382    6682164    5445208     56%   /
    tmpfs                             tmpfs     414828      146         414682      1%    /dev/shm
    /dev/sda1                         ext4     247922       16498     218624       8%    /boot
    4)使用“-t”选项,指定显示“ext4”类型的文件系统信息
    [root@localhost ~]# df –t ext4
    //文件系统名字                      类型       大小         已用        可用   使用百分比   挂载点
    /dev/mapper/VolGroup-lv_root ext4      25552764     13364332  10890412   56%   /
    /dev/sda1                         ext4     495844       32996      437248     8%    /boot
      

  5.   

    bc
        bc是一种算数语言,其语法和c语言类似,可以交互执行。通过命令行选项可以获得一个标准的数学库。如果请求,在处理任何文件之前定义数学库。BC从处理所有文件的代码开始。命令行中列出的文件按所列顺序排列。在处理完所有文件后,BC从标准输入中读取。所有代码都在读取时执行。(如果文件包含停止处理器的命令,BC将永远不会从标准输入中读取。
        此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
        bc  [ -hlwsqv ]  [long-options]  [  file ... ] 2、选项列表
        -h | --help
            帮助信息
        -v | --version
            显示命令版本信息
        -l | --mathlib
            定义标准数学库
        -i | --interactive
            强制交互
        -w | --warn
            显示POSIX的警告信息
        -s | --standard
            使用POSIX标准来处理
        -q | --quiet
            不显示欢迎信息3、说明
      1)数据
      bc中最基本的元素是数字。数字是任意精度的数字。这种精度既包括整数部分,也包括分数部分。所有的数字在内部用十进制表示,所有的计算都用十进制来表示。(此版本截断除法和乘运算的结果。)数字有两个属性:长度和小数位。长度是数字中有效位的总数,小数位是小数点之后的的有效位数。例如,0.000001的长度是6,小数位是6;1935.000的长度是7,小数位是3。
      2)变量
      数字存储在两种类型的变量中,简单变量和数组。变量名称以字母开头,后面跟着任意数量的字母、数字和下划线。所有字母都必须小写。(全字母-数字名是扩展名。在POSIX bc中,所有名称都是一个小写字母。)变量的类型在上下文中是明确的,因为所有数组变量名称后面都会有方括号([])。
    有四个特殊的变量:scale、ibase、obase和last。scale定义了一些操作在小数点之后是如何使用数字的,默认值是0。ibase和obase定义输入和输出数字的转换基。默认值都是基数10。last(扩展)是一个变量。它是最后打印的数字的值。所有这些变量可能都有分配给它们的值,以及表达式中使用的值。
      3)注释
      bc中的注释以字符“/*”开头,以字符“*/”结尾。注释可以从任何地方开始,并显示为输入中的单个空格。(这会导致注释分隔其他输入项。例如,在变量名的中间找不到注释。)注释包括注释开始和结束之间的任何新行(行尾)。
    为了支持bc脚本的使用,添加了行注释作为扩展。行注释从“#”字符开始,继续到行的结束。行结束字符不是注释的一部分,而是正常处理的。
    如果命令行上的任何文件无法打开,bc将报告该文件不可用并终止。4、关于表达式
      这些数字由表达式和语句操作。由于语言设计为交互式,所以语句和表达式会尽快执行。没有“主”程序,而是在遇到时执行代码。
    一个简单的表达式只是一个常量。BC使用变量ibase指定的当前输入基将常量转换为内部十进制数。(函数中有一个例外。)ibase的有效值为2到16,将超出此范围之后,分配给ibase的值可能是2或16。输入数字可能包含字符0-9和A-F。(注:它们必须是大写字母,小写字母是变量名称。)无论ibase的值是多少,单数数字总是有该数字的值。(即A=10。)对于多位数字,bc将所有大于或等于ibase的输入数字更改为IBASE-1的值。这使得FFF始终输入的最大3位数。
      完全表达式类似于许多其他高级语言。由于只有一种数字,所以没有混合类型的规则。相反,有关于表达式精度的规则。每个表达式都有一个精度。这是从原始数字的精度、所执行的操作以及在许多情况下变量scale的值导出的。变量scale的有效值为0到可由c语言整数表达的最大值。
      在以下合法表达式的描述中,“expr”指的是一个完整的表达式,“var”指的是一个简单的或数组变量。除非特别提到,结果的精度是所涉及的表达式的最大精度。
          普通表达式    -expr    结果是对表达式的否定。
        ++var    变量增加1,而新值是表达式的结果
        --var    变量减1,而新值是表达式的结果
        var++    表达式的结果是变量的值,然后变量增加1
        var--    表达式的结果是变量的值,然后变量减1
        expr * expr        表达式的结果是这两个表达式的乘积
        expr + expo        表达式的结果是这两个表达式的和
        expr – expr        表达式的结果是这两个表达式的差
        expr / expr        表达式的结果是这两个表达式的商。结果的精度是变量scale的值。
        expr % expr        表达式的结果是“余数”
        expr ^ expr        表达式的结果是n次方,第二个表达式必须是整数。如果指数是负数,那么结果的精度是scale
      (expr)    强制对表达式进行计算
        var = expr        变量就是表达式的值
        var <op>= expr        相当于“var=var<op>expr”,例如”var -= expr” 等价于“var=var-expr”    关系表达式
        关系表达式是一种特殊的表达式,计算结果总是0或1。如果关系为真,则计算为1;如果关系为假,则结果是0.。这些表达式可能出现在任何合法表达式中。(POSIX bc要求关系表达式仅用于if、while和语句,并且只能在其中进行一次关系测试。)
        expr1 < expr2
        expr1 <= expr2
        expr1 > expr2
        expr1 >= expr2
        expr1 == expr2
        expr1 != expr2
        expr1 && expr2
        expr1 || expr2
        !expr
         运算符的优先级如下,从上到下依次增加:
        ||
            左结合
        &&
            左结合
        !
            不结合
        关系运算符
            左结合
        赋值运算符
            右结合
        +和-
            左结合
        *、/、%
            左结合
        ^
            右结合
        一元运算符 -
            不结合
        ++和--
            不结合    选择此优先级是为了使符合POSIX的bc程序能够正确运行。这将导致关系运算符和逻辑运算符在与赋值表达式一起使用时有一些不寻常的行为。例如下面的表达式:
    a = 3<5
      大多数C程序员会假设这会将“3<5”(值1)的结果赋给变量“a”,这在bc中所做的是将值3赋给变量“a”,然后比较3到5。在使用关系运算符和逻辑运算符与赋值运算符时,最好使用括号。
      在bc中还提供了一些特殊的表达式。这些表达式与用户定义的函数和标准函数有关。它们都以“名称(参数)”的形式出现。有几个标准函数:
      1)length(expr),计算表达式结果的有效位数。
      2)read(),Read函数(一个扩展)将从标准输入中读取一个数字,而不管该函数发生在何处。注意,这可能会导致标准输入中的数据和程序混合出现问题。这个函数的最佳使用是在一个已经编写好的程序中,这个程序需要用户输入,但绝不允许从用户输入程序代码。读函数的值是从标准输入中读取的数字,使用转换基的变量ibase的当前值。
      3)scale ( expr ),这个函数的值是expr表达式中小数点之后的位数。
      4)sqrt ( expression ),函数的结果是表达式的开方值。5、关于语句
         语句(在大多数代数语言中)提供表达式计算的顺序。在bc中,语句被“尽快”执行。执行发生在遇到的换行符的时候,并且有一个或多个完整的语句。由于这种立即执行,换行符在bc中非常重要。事实上,分号和换行符都用作语句分隔符。如果换行符放置不当,将导致语法错误。因为换行符是语句分隔符,所以可以使用反斜杠字符隐藏换行符。(<nl>)在bc中显示为空格而不是新行。语句列表是由分号和换行符分隔的一系列语句。
         1)表达式
         这条语句做两件事之一。如果表达式以“<变量><赋值>.”开头,则被认为是赋值语句。如果表达式不是赋值语句,则计算表达式并将表达式打印到输出。在打印数字之后,将打印换行符。例如,“a=1”是一个赋值语句和“(a=1)”是一个具有内嵌赋值的表达式。输出基obase的有效值是2~BC_BASE_MAX。对于基数2至16,通常采用书写数字的方法。对于大于16的基数,bc使用多字符数字方法将每个较高的基数打印成以10为基数的数据。由于数字具有任意精度,一些数字可能无法在一条输出线上打印。这些长数字将被分割,以“\”作为一行上的最后一个字符,每行打印的最大字符数为70个。由于bc的交互性,打印一个数字会导致最后将打印值赋值给特殊变量“last”的副作用。这允许用户恢复打印的最后一个值,而不必重新键入打印数字的表达式。将last变量赋值为“最后一个值”是合法的,并将最后一个打印的值用指定的值覆盖。新赋值将保持不变,直到打印下一个数字或将另一个值分配给“last”为止。
         2)字符串
      字符串被打印到输出。字符串以双引号开始,包含所有字符直到下一个双引号字符。所有字符都是字面意思,包括任何换行符。字符串后不打印换行符。
         3)打印列表
      print语句(扩展)提供了另一种输出方法。“list”是由逗号分隔的字符串和表达式的列表。每个字符串或表达式都按列表的顺序打印。不打印终止换行符。表达式的将被计算出值,最后将其值打印并分配给变量“last”。打印语句中的字符串将打印到输出中,并可能包含特殊字符。特殊字符以反斜杠字符“\”开始。bc识别的特殊字符是“a”(警报或钟)、“b”(反斜杠)、“f”(表单提要)、“n”(换行符)、“r”(回车)、“q”(双引号)、“t”(制表符)和“\”(反斜杠)。反斜杠后面的任何其他字符都将被忽略。
         4)语句列表
         这是复合语句。它允许将多个语句组合在一起执行。
         5)if (表达式)  statement 1  [else statement 2]
         if语句根据表达式的值决定执行statement 1或statement 2。如果表达式为非零,则执行statement 1。如果存在statement 2,且表达式的值为0的时候执行statement 2。
      6)while ( expression )  statement
         while语句将在表达式为非零时执行语句。它在每次执行语句之前计算表达式。循环的终止是由零表达式值或break语句的执行引起的。
         7)for ( [expression1] ; [expression2] ; [expression3] )  statement
         for语句控制语句的重复执行。表达式1是在循环之前计算的。表达式2是在每次语句执行之前计算的。如果表达式2为非零,则计算语句;如果为零,则终止循环。每次执行语句后,计算表达式3。在重新计算表达式2之前,如果未找到表达式1或表达式3,则不会在计算值的点上对其进行任何计算。
         8)break
         break语句用来强制退出,通常用在for语句或者while语句中。
         9)continue
         continue语句用来结束本次循环。
         10)halt
         halt语句会导致bc程序退出。
         11)return
         函数返回0.
         12)return expr
         返回表达式的值。
         13)伪语句,这些语句不会执行,他们在编译的时候才会起作用。下面列出伪语句
               a)limits,打印由于bc版本而产生的限制
               b)quit,遇到quit指令的时候就会退出bc,无论它出现在什么地方。例如“if (0 == 1) quit”就会导致退出bc
               c)warranty,打印较长的授权通知
    6、函数
          1)函数
          bc中的函数总是计算一个值并将其返回给调用者。函数定义是“动态的”,在输入中遇到定义之前,函数是未定义的。然后使用该定义,直到遇到相同名称的另一个定义函数。然后,新定义取代旧的定义。函数定义方式如下:
               define name ( parameters ) { newline
                auto_list  statement_list }
    函数的调用很简单“name(parameters)”。
         2)参数
         参数是数字或数组。在函数定义中,可以有0个或者多个参数,通过逗号分隔开。所有参数都是通过值参数调用的。数组是通过符号“name[]在参数定义中指定的。在函数调用中,实参是数字参数的完整表达式。相同的符号。数组的定义和传值使用相同的符号。命名数组通过值传递给函数。由于函数定义是动态的,因此在调用函数时会检查参数号和类型。参数数量或类型的不匹配都会导致运行时错误。对未定义函数的调用也会出现运行时错误。
         3)auto_list
    “auto_list”是供“本地”使用的变量的可选列表。auto_list的语法(如果存在)是“autoname,…;”。(分号是可选的。)每个名称都是自动变量的名称。数组可以使用与参数相同的表示法来指定。这些变量的值在函数开始时被推入堆栈中。然后将变量初始化为零,并在函数的整个执行过程中使用。在函数退出时,这些变量被弹出,以便恢复这些变量的原始值(在函数调用时)。这些参数实际上是自动变量,它们被初始化为函数调用中提供的值。自动变量不同于传统局部变量,因为如果函数A调用函数B,B可以使用相同的名称访问函数A的自动变量,除非函数B调用它们为自动变量。由于自动变量和参数被推到堆栈上,bc支持递归函数。
         4)函数体
          函数体是一系列bc语句的列表。同样,语句用分号或换行符分隔。返回语句导致函数的终止和值的返回。返回语句有两个版本。第一个形式“return”将值0返回给调用表达式。第二种形式“return (表达式)”计算表达式的值并将该值返回给调用表达式。在每个函数的末尾有一个隐含的“return (0)”。这允许一个函数终止并返回0,而不需要显式返回语句。
          函数还会改变变量ibase的用法。函数体中的所有常量都将在函数调用时使用ibase的值进行转换。在函数执行过程中,ibase的更改将被忽略,但标准函数读取除外,后者将始终使用ibase的当前值来转换数字。
         当前版本的bc,在函数中添加了几个扩展。首先,定义的格式稍微放松了一些。标准要求开始大括号与定义关键字在同一行,所有其他部分必须在下面的行上。这个版本的bc将允许之前的任何数目的换行符。在函数的开头支撑之后,例如,下面的定义是合法的:
        define  d  (n)  { return  (2*n); }
        define  d  (n)
                { return  (2*n); }
         5)void类型
      函数可以定义为void。空函数不返回值,因此可能不会在任何需要值的地方使用。空函数在输入行调用时不会产生任何输出。关键字void放在关键字定义和函数名称之间。例如,请考虑下面的例子
        define  py (y)  { print "--->", y, "<---", "0; }
        define  void  px (x)  { print "--->", x, "<---", "0; }
        py(1)
        --->1<---
        0                   //由于py不是void,因此有默认返回值,因此这里打印了它的返回值,
        px(1)
        --->1<---           //px是void类型,最后不会打印返回值
    此外,还为数组添加了按变量调用。为了申明一个数组变量,函数中的数组参数是这样定义的“*name[]” 。

    7、数学库
         1)如果使用“-l”选项调用bc,则预加载一个数学库,并将默认精度设置为20。数学库中有一下的函数:
      s(x),计算x的正弦值,x是弧度值。
      c(x),计算x的余弦值,x是弧度值。
      a(x),计算x的反正切值,返回弧度。
      l(x),计算x的自然对数。
      e(x),e的x次方。
      j(n,x),从n到x的阶数。
         2)例子
      下面的句子可以将“pi”的值赋值给shell变量pi
    pi = $(echo  "scale=10; 4*a(1)"  |  bc  -l)
      下面的句子就是数学库中e的次方定义方式
            scale = 20
            /* Uses the fact that e^x = (e^(x/2))^2
                When x is small enough, we use the series:
                e^x = 1 + x + x^2/2! + x^3/3! + ...
            */
            define e(x) {
                auto  a, d, e, f, i, m, v, z            /* Check the sign of x. */
                if (x<0) {
                    m = 1
                    x = -x
                }            /* Precondition x. */
                z = scale;
                scale = 4 + z + .44*x;
                while (x > 1) {
                    f += 1;
                    x /= 2;
                }            /* Initialize the variables. */
                v = 1+x
                a = x
                d = 1
                for (i=2; 1; i++) {
                    e = (a *= x) / (d *= i)
                    if (e == 0) {
                        if (f>0) while (f--)  v = v*v;
                        scale = z
                        if (m) return (1/v);
                    return (v/1);
                    }
                    v += e
                }
            }     下面的语句实现一个计算支票簿余额的简单程序
            scale=2
            print "\nCheck book program!\n"
            print "  Remember, deposits are negative transactions.\n"
            print "  Exit by a 0 transaction.\n\n"
            print "Initial balance? "; bal = read()
            bal /= 1
            print "\n"
            while (1) {
                "current balance = "; bal
                "transaction? "; trans = read()
                if (trans == 0) break;
                bal -= trans
                bal /= 1
            }
            quit     下面的语句采用递归的方式计算x的阶乘
            define f (x) {
                if (x <= 1) return (1);
                return (f(x-1) * x);
            }8、readline和libedit选项
         可以编译GNU bc(通过一个配置选项)来使用GNU readline输入编辑器库或bsd libedit库。这允许用户在将行发送到bc之前进行编辑。它还允许保存以前键入的行的历史记录。当选择此选项时,bc还有一个特殊变量。变量“history”是保留的历史记录行数。对于readline,值-1表示不限制历史记录的行数,0将禁用历史记录功能,默认值为100。
      

  6.   


    9、差别
      这个版本的bc是从POSIX P 1003.2/D11草案中实现的,包含了与草案和传统实现相比的一些区别和扩展,它不是以传统的方式使bc(1)实现的,这个版本是一个解析和运行程序字节代码转换的单一进程。这里有一个“无文档”选项(-c),它导致程序将字节码输出到标准输出,而不是运行它。它主要用于调试解析器和准备数学库。差异的一个主要来源是扩展,下面列出一些差异和扩展:
         1)LANG环境变量,此版本在处理lang环境变量和从lc_开始的所有环境变量时不符合POSIX标准。
         2)名字,传统和POSIX bc都有用于函数、变量和数组的单字母名称。它们被扩展为以字母开头的多字符名称,可以包含字母、数字和下划线字符。
         3)字符串,字符串不允许包含NUL字符。POSIX表示所有字符都必须包含在字符串中。
         4)last,POSIX bc中没有last变量。
         5)比较,POSIX bc只允许在if语句、while语句和for语句的第二个表达式中进行比较。
         6)if语句,POSIX bc中if语句没有else。
         7)for语句,POIX bc中要求for语句中的3个表达式都必须具备。
         8)&&,||,!,POSIX bc中没有逻辑运算。
         9)read,POSIX bc没有read功能。
         10)打印语句,POSIX bc没有打印语句。
         11)continue语句,POSIX bc没有continue语句。
         12)return,POSIX bc要求return的表达式加括号。
         13)数组参数,POSIX bc不(目前)完全支持数组参数。POSIX语法允许函数定义中的数组,但没有提供将数组指定为实际参数的方法。(这很可能是语法上的疏忽。)传统的bc实现只通过值数组参数进行调用。
         14)函数,POSIX bc要求函数开头的大括号和define关键字在同一行,语句在下一行。
         15)=+, =-, =*, =/, =%, =^。POSIX bc不要求定义这些“旧样式”赋值操作符。此版本可能允许这些“旧样式”赋值。使用限制语句查看安装的版本是否支持它们。如果它确实支持“旧样式”赋值运算符,则“a=-1”语句将使a减少1,而不是将a设置为值-1。
         16)数字中的空格,bc的其他实现允许数字空格。例如,“x=1 3”将值13赋值给变量x。相同的语句将导致bc版本中的语法错误。
         17)错误和执行,在程序中发现语法和其他错误时,此实现与其他实现的代码不同。如果在函数定义中发现语法错误,则错误恢复机制将尝试查找语句的开头并继续解析函数。一旦在函数中发现语法错误,该函数将不可调用并变为未定义。交互执行代码中的语法错误将使当前执行块失效。执行块由在完整语句序列之后出现的行尾终止。例如
         a = 1
         b = 2
    这个语句有两个执行块,而下面的语句
         {a = 1
         b = 2}
    只有一个执行块。任何运行时错误都会终止当前的执行块,而警告则不会。
         18)中断,在交互会话期间,SIGINT信号(通常由终端上的“ctrl+c“生成)将导致当前执行块的执行中断。它将显示一个“运行时”错误,指示哪个功能被中断。在所有运行时结构被清除后,将打印一条消息通知用户bc准备好接收更多的输入。所有先前定义的函数都保留定义,所有非自动变量的值是中断点的值。在清理过程中,所有自动变量和函数参数都会被移除。对于一个非交互式会话,SIGINT信号将终止bc的整个运行。10、限制
         下面列出当前bc程序的一些限制,有一些限制可能已经被用户修改过。
      1)BC_BASE_MAX,最大输出基设置为999。最大输入基为16。
      2)BC_DIM_MAX,这是当前分布的65535以内的任意限制,每个机器可能都不一样。
      3)BC_SCALE_MAX,小数点前后的位数都由INT_MAX限制。
      4)BC_STRING_MAX,字符串中的字符字数由INT_MAX限制。
      5)exponent,指数运算中的指数值由LONG_MAX限制。
      6)variable names,当前对每个简单变量、数组和函数名字的限制32767。11、环境变量
         下面的环境变量由bc程序来控制
      1)POSIXLY_CORRECT,和“-s”选项一样。
      2)BC_ENV_ARGS,这是另一种获取bc参数的机制。格式与命令行参数相同。这些参数是先处理的,因此环境参数中列出的任何文件在任何命令行参数文件之前都会被处理。这允许用户设置“标准”选项和文件,以便在每次调用环境变量中的文件通常包含用户希望在每次运行bc时定义的函数定义。
      3)BC_LINE_LENGTH,这应该是一个整数,指定数字输出行中的字符数。这包括用于长数字的反斜杠和换行符。,如果值是0,将禁用多行功能。此变量的任何其他值如果小于3,则将行长设置为70。12、实例
         1)简单计算
            [root@192 ~]# bc
            bc 1.06.95      //欢迎语句
            Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
            This is free software with ABSOLUTELY NO WARRANTY.
            For details type `warranty'. 
            12+23    //输入加法表达式,回车
            35       //得到结果
            100/25   //输入除法表达式,回车
            4         //得到结果
            quit     //退出指令
            [root@192 ~]# 
         2)执行for循环语句
            for(i=0; i<3; i++){print "hello\n"}   //这是一个打印语句
            hello
            hello
            hello
         3)从文件读取内容并且执行bc        [root@localhost /]# cat test.c                 //查看文件的内容,里面全是bc语句
            /*define 3 functions add,sub,mul*/
            define add(x,y){
                return x+y;
            }
            define sub(x,y){
                return x-y;
            }
            define mul(x,y){
                return x*y;
            }
            /*for statement*/
            for(i=0;i<3;i++){
                print "bc test ",i,"\n";
            }
            /*print statement*/
            print "10+5=",add(10,5),"\n"
            print "10-5=",sub(10,5),"\n"
            print "10&5=",mul(10,5),"\n"
            /*quit bc program*/
            quit
            [root@localhost /]# bc test.c                   //bc程序从文件获取到代码,然后执行
            bc 1.06.95
            Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
            This is free software with ABSOLUTELY NO WARRANTY.
            For details type `warranty'. 
            bc test 0
            bc test 1
            bc test 2
            10+5=15
            10-5=5
            10&5=50
      

  7.   

    cal
            cal指令可以显示一个日历信息,如果没有指定选项和参数,那么就会显示当前的月份。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            cal [-smjy13]  [[[day] month] year]  
    2、选项列表
            -V
                    显示命令版本信息
            -1
                    显示一个月的日历信息,这是默认值
            -3
                    显示上个月、这个月、下个月的日历信息
            -s
                    将星期日作为第一天来显示
            -m
                    将星期一作为一周的第一天,默认星期日是第一天
            -j
                    显示儒略历(显示的是从1月1日起,到当前的天数)
            -y
                    显示当年的日历信息
           一个参数指定要显示的年份(1-9999);请注意,必须指定完整的年份:“cal 89”将不显示1989年的日历。两个参数表示月份(1-12)和年份。三个参数表示日期(1-31)、月份和年份,如果在终端上显示日历,则会突出显示日期。如果没有参数,则显示当前月份的日历。一年从1月1日开始。一周的第一天由地区决定。
    3、实例
    1)显示儒略历日历
            [root@localhost ~]# cal –j      //这里显示的不是“日”,而是一年的第几天
                     九月2018         
            日  一  二  三  四  五  六
                            244
            245 246 247 248 249 250 251
            252 253 254 255 256 257 258
            259 260 261 262 263 264 265
            266 267 268 269 270 271 272
            273
            2)将“星期日”作为第一天显示,显示最近3个月
            [root@localhost ~]# cal -3 -s
                  八月 2018                      九月2018                    十月 2018     
            日  一 二  三  四 五  六      日  一  二 三  四  五六    日 一 二  三  四 五 六
                        1  2  3   4                            1                1   2   3  4  5  6
            5  6  7   8  9  10 11           2   3   4  5   6  7  8      7  8   9  10 11 12 13
            12 13 14 15 16 17 18          9   10 11 12 13 14 15       14 15 16 17 18 19 20
            19 20 21 22 23 24 25      16  17 18 19 20 21 22      21 22 23 24 25 26 27
            26 27 28 29 30 31          23 24 25 26 27 28 29    28 29 30 31         
                                                30                                       
            [root@localhost ~]#
    3)将星期一作为一个星期的第一天
            [root@localhost ~]# cal -m
                  九月2018     
            一 二 三 四 五 六日
                            1  2
            3  4  5  6  7  8  9
            10 11 12 13 14 15 16
            17 18 19 20 21 22 23
            24 25 26 27 28 29 30
      

  8.   

    支持楼主,get
      

  9.   

    chkconfig
          启动或者关闭系统服务,设置服务的运行级别,该指令并不会立刻启动或者停止服务,而是在开机的时候发生效果。      chkconfig提供了一个简单的命令行工具,用于维护/etc/rc[0-6].d目录层次结构,使系统管理员不必直接操作这些目录中的许多符号链接。这个     chkconfig的实现受到IRIX操作系统中的chkconfig命令的启发。但是,这个版本没有在/etc/rc[0-6].d层次结构之外维护配置信息,而是直接管理/etc/rc[0-6].d中的符号链接。这将留下所有有关在单个位置启动服务init的配置信息。      chkconfig有五个不同的功能:添加用于管理的新服务、从管理中删除服务、列出服务的当前启动信息、更改服务的启动信息以及检查特定服务的启动状态。      当chkconfig后面只有一个服务名称的时候,它会检查服务是否配置为在当前运行级中启动。如果是,则chkconfig返回true;否则返回false。“--level”选项可以用来使chkconfig查询指定运行级下的服务状态,而不是当前的运行级。当使用“--list”参数运行chkconfig或根本没有参数时,将显示所有服务及其当前配置的清单。      如果在服务名称之后指定了on、off、reset或resetpriorities之一,则chkconfig将更改指定服务的启动信息。on和off标志将分别导致服务在被更改的运行级别中启动或停止。reset标志将服务的所有运行级别的on/off状态重置为init脚本文件中指定的样子,重置的时候会有一个询问。而resetpriorities标志则会直接将服务的on/off状态重置为init脚本中指定样子。默认情况下,on和off选项只影响运行级别2、3、4和5,而reset和resetpriorities影响所有运行级别。请注意,对于每个服务,每个运行级都有一个开始脚本或一个停止脚本。当切换runlevel时,init将不会重新启动已经启动的服务,也不会重新停止未运行的服务。      chkconfig还可以通过xinetd.d配置文件管理xinetd脚本,xinetd服务只支持on、off、--list。      chkconfig支持一个“--type”参数,当几个服务共享名字的情况下,这个选项就有效。支持该选项的服务可以是sysv和xinetd。      此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          chkconfig [--list]  [--type type][name]
          chkconfig --add  name
          chkconfig --del  name
          chkconfig - -override  name
          chkconfig [--level levels]  [--type type]  name  
          chkconfig [--level levels]  [--type type]  name 
     
    2、选项列表
          --help
                帮助信息
          --version
                显示命令版本信息
          --list 服务名
                此选项列出chkconfig所知道的所有服务,以及它们是在每个运行级别中停止还是启动。如果指定了名称,则仅显示有关服务名称的信息。
          --add 服务名
                增加服务。当添加新服务时,chkconfig确保服务在每个运行级别上都有一个启动项或一个杀死项。如果任何运行级缺少这样的条目,chkconfig将按照init脚本中的默认值创建适当的条目。请注意,“INIT INFO”部分中的默认条目优先于initscript中的默认运行级别;如果存在任何必需的启动或要求停止条目,则将调整脚本的开始和停止优先级,以考虑这些依赖项。
          --del 服务名
                将服务从chkconfig管理中删除,与它相关的/etc/rc[0-6].d中的任何符号链接都被删除。
          --level [levels] [name] [on|off|reset]
                设置指定服务在指定运行级别的开机状态,级别可以是0~6。例如: chkconfig –level 35 vsftpd on
          --override name
                如果/etc/chkconfig.d/name文件现在存在,并且与基础配置脚本不同,则更改服务名称的配置文件,而不使用基础配置。
     
    3、关于运行级别
          每个应该由chkconfig管理的服务都需要在其init.d脚本中添加两行或者多行注释。第一行告诉chkconfig默认应该在什么运行级别启动服务,以及启动和停止优先级级别。如果服务在默认情况下不应该在任何运行级别中启动,则应该使用“-”来代替runlevel列表。第二行包含服务的描述,并且可以通过反斜杠继续扩展多行。例如random.init中有三行注释
                # chkconfig: 2345 20 80
                # description: Saves and restores system entropy pool for \
                # higher quality random number generation.
    这意味着随机脚本应该在级别2、3、4和5中启动,它的开始优先级应该是20,它的停止优先级应该是80。
     
          chkconfig还支持从左到右的“-”分隔符,并将优先于可用的“chkconfig:”行应用它们。例如下面的:
                ### BEGIN INIT INFO
                # Provides: foo
                # Required-Start: bar
                # Defalt-Start: 2 3 4 5
                # Default-Stop: 0 1 6
                # Description: Foo init script
                ### END INIT INFO
    在这种情况下,“foo”的启动优先级将被更改,它将高于“bar”启动优先级。在添加依赖项时必须小心,因为它们可能导致许多脚本的启动和停止优先级发生巨大变化。
     
    4、实例
    1)查看所有服务
          [root@localhost ~]# chkconfig --list
          NetworkManager    0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
              …
          基于 xinetd 的服务:
              chargen-dgram:    关闭
              chargen-stream:   关闭
              …
    2)查看指定服务
          [root@localhost ~]# chkconfig --list vsftpd
          vsftpd         0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:启用  6:关闭
    3)设置ftp服务在3和5这两个级别启动
          [root@localhost ~]# chkconfig --level 35 vsftpd on    //级别3和5启动
          [root@localhost ~]# chkconfig --list vsftpd             //查看是否设置成功
          vsftpd         0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
     
      

  10.   

    date
          以给定的格式显示当前的日期,或者设置系统时间。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          date  [选项]。
          date  [+格式]。
          date  -u  [参数]
          参数格式[MMDDhhmm[[CC]YY][.ss]],分别对应(月、日、时、分、年前两位、年后两位、秒)2、选项和格式列表
          --help
                帮助信息
          --version
          显示命令版本信息
                -f | --file=DATEFILE
                和“--date”一样,文件的每一行都设置一次
          -d | --date=STRING
                显示字符串代表的时间,注意不是当前时间
          -r | --reference=FILE
                显示文件的最后修改时间
          -R | --frc-2822
                以rfc-2822的方式输出日期和时间,
          --rfc-3339=TIMESPEC
                以rfc-3339的方式输出日期和时间,精度可以是date、seconds、ns,日期和时间用一个空格隔开
          -s |  --set=STRING
                用指定字符串设置时间
          -u |  --utc, --universal
                输出或者设置通用时间      格式
          %a
                当前locale 的星期名缩写(例如: 日,代表星期日)
          %A
                当前locale 的星期名全称 (如:星期日
          %b
                当前locale 的月名缩写 (如:一,代表一月)
          %B
                当前locale 的月名全称 (如:一月)
          %c
                当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
          %C
                世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
          %d
                按月计的日期(例如:01)
          %D
                按月计的日期;等于%m/%d/%y
          %e
                按月计的日期,添加空格,等于%_d
          %F
                完整日期格式,等价于 %Y-%m-%d
          %g
                ISO周数年的最后两位数
          %G
                ISO周数年份
          %H
                小时(00-23)
          %I
                小时(00-12)
          %j
                按年计的日期(001-366)
          %k
                小时,00~23
          %l
                小时,1~12
          %m
                月份(01-12)
          %M
                分(00-59)
          %n
                新的一行
          %N
                十亿分之一秒
          %p
                当前locale 下的”上午”或者”下午”,未知时输出为空
          %P
                和“%p”一样,但是输出小写字母
          %r
                当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
          %R
                24 小时时间的时和分,等价于 %H:%M
          %s
                从1970-01-01 00:00:00开始的秒数
          %S
                秒(00-60)
          %t
                tab字符
          %T
                时间,等于%H:%M:%S
          %u
                一个星期的一天,1是星期一。(1~7)
          %U
                一年中的第几周,以周日为每星期第一天(00-53)
          %V
                ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
          %w
                一个星期的一天,0是周日. (0~6)
          %x
                当前locale 下的日期描述 (如:12/31/99)
          %X
                当前locale 下的时间描述 (如:23:13:48)
          %y
                年份最后两位数位 (00-99)
          %Y
                年
          %z
                +hhmm格式的数字时区,例如“-0400
          %:z
                +hh:mm格式的数字时区,例如“-04:00
          %::z
                +hh:mm:ss格式的数字时区,例如“-04:00:00 “
          %:::z
                数字时区,使用“:”达到必要的精度,例如“-04, +05:30“
          %Z
                时区的缩写,例如EDT3、说明
          默认情况下,使用数字0来填补数字时间中的空缺。当然也可以指定其他方式:“%-“,不填补;”%_“,使用空格填补;”%0“,使用0;”%^“使用大写字母;”%#“,使用相反的字母
          “--date=String“是一种自由格式,是一种方便读取的日期字符串,例如“Sun,2月29日16:21:42-0800”或“2004-02-29 16:21:42:42”,甚至是“下星期四”。日期字符串可能包含指示日历日期、时间、时区、周中日、相对时间、相对日期和数字的项。空字符串表示一天的开始。日期字符串可以包含指示日历日期、时间、时区、星期数、相对时间、相对日期和数字的项。日期字符串格式比这里容易记录的要复杂,但是在info文档中有完整的描述。4、实例
    1)不适用任何参数,直接显示日期和时间
          [root@localhost ~]# date
          2018年 09月 05日 星期三 11:48:58 CST     //注意,这里显示的是CST时间
    2)显示UTC时间
          [root@localhost ~]# date -u
          2018年 09月 05日 星期三 03:51:53 UTC
    3)设置CST日期时间
          [root@localhost ~]# date -s 2018-9-4   //这里可以看到支持的日期格式。如果没有设置时间,那么默认就是0点0分
          2018年 09月 04日 星期二 00:00:00 CST
          [root@localhost ~]# date -s 20180905
          2018年 09月 05日 星期三 00:00:00 CST
          [root@localhost ~]# date -s 2018/9/6
          2018年 09月 06日 星期四 00:00:00 CST
          [root@localhost ~]# date -s 11:56     //修改时间
          2018年 09月 05日 星期三 11:56:00 CST
          [root@localhost ~]# date -s 11:54:40
          2018年 09月 05日 星期三 11:54:40 CST
    4)显示当前是一年中的第几周,第几天 
          [root@localhost ~]# date +第%U周第%j天 
          第35周第248天
    5)显示12小时制度下的时间 
          [root@localhost ~]# date +%r
          下午 12时02分48秒
          [root@localhost ~]# date +%p%H:%M:%S     //这里可以使用多个格式组合,达到上面的效果
    下午12:03:24
    6)显示当前日期 
          [root@localhost ~]# date +%x
          2018年09月05日
          [root@localhost ~]# date +%F
          2018-09-05
          [root@localhost ~]# date +%Y-%m-%d    //多格式拼接
          2018-09-05
      

  11.   

    last
            显示以前登录过的用户信息,last指令会搜索/var/log/wtmp文件(或者是经过-f选项指定的文件),然后列出文件中所有的用户信息。如果执行last指令时提示“last /var/log/wtmp∶ NO such file or directory”,则需要使用指令touch /var/log/wtmp手工创建此文件 
            lastb指令用来显示登录失败的用户信息,其用法和last一样,对应的日志文件是/var/log/btmp
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            last  [-R]  [-num]  [ -n num ]  [-adFiowx]  [ -f file ]  [ -t YYYYMMDDHHMMSS ]  [name...]  [tty...]
            lastb  [-R]  [-num]  [ -n num ] [ -f file ]  [-adFiowx]  [name...]  [tty...]2、选项列表
            -f 文件名
                    指定登录的日志文件(默认是/var/log/wtmp)
            -num
                    指定last显示多少行信息
            -n num
                    和“-num”一样
            -R 
                    不显示主机名字
            -a
                    在最后一列显示主机名
            -d
                    将非本地登录的用户ip转换成主机名
            -F
                    显示所有的登录和注销时间和日期
            -o
                    读取旧的日志文件
            -w
                    显示用户名和域名
            -x
                    显示系统关机信息和运行级别的变化信息
            -t [YYYYMMDDHHMMSS]
                    显示指定时间的登录信息
            [name]
                    显示指定用户的登录信息
            [tty]
                    显示指定终端的登录信息,last tty1 = last 13、实例
    1)显示最近登录的5条信息
            [root@localhost ~]# last -5    //也可以使用last –n 5
            //登录用户  登录终端   主机名            登录时间             注销时间  持续时间
            root     pts/0        :0.0             Tue Sep  4 13:10   still logged in   
            root     pts/0        :0.0             Wed Aug 22 15:07 - 13:09 (12+22:02)  
            root     pts/1        :0.0             Wed Aug 22 07:46 - 13:10 (13+05:23)  
            root     pts/0        :0.0             Wed Aug 22 07:43 - 11:02  (03:18)    
            root     tty1         :0               Wed Aug 22 07:20   still logged in    wtmp begins Wed Aug  8 18:02:52 2018
    2)显示用户weijie和root在8月9号的登录信息
            [root@localhost ~]# last -t 20180809090000 weijie  //可以看到用户weijie在8.9之前没有登录
            wtmp begins Wed Aug  8 18:02:52 2018        [root@localhost ~]# last -t 20180809090000 root  //用户root在8.9之前登录过几次
            root     pts/0        :0.0             Wed Aug  8 20:19 - down   (00:05)    
            root     tty1         :0               Wed Aug  8 20:19 - down   (00:06)    
            root     pts/1        :0.0             Wed Aug  8 18:16 - 20:16  (01:59)    
            root     pts/0        :0.0             Wed Aug  8 18:08 - 20:15  (02:06)    
            root     tty1         :0               Wed Aug  8 18:04 - 20:16  (02:11)    wtmp begins Wed Aug  8 18:02:52 2018
    3)显示终端tty1的登录信息
            [root@localhost ~]# last 1    //等同于last tty1
            root     tty1         :0               Wed Aug 22 07:20   still logged in   
            root     tty1         :0               Tue Aug 21 17:34 - down   (02:24)    
            …  
            wtmp begins Wed Aug  8 18:02:52 2018
      

  12.   

    service
          service可以控制系统服务(打开、关闭、重启)。service在尽可能可预测的环境中运行SystemV init脚本,删除大多数环境变量并将当前工作目录设置为根目录。脚本参数位于“/etc/init.d/script”中的System V init脚本。受支持的命令值取决于调用的脚本,服务将命令和选项传递给init脚本。
          所有脚本至少应该支持start命令和stop命令。作为特例,如果命令是“--full-restart”,脚本将运行两次,首先使用stop命令,然后使用start命令。“service  --status-all”按照字母顺序运行所有的init脚本,执行status命令。用户可以在/etc/init.d/目录下找到服务的脚本文件。
          只有环境变量LANG和TERM传递给init脚本文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          service SCRIPT COMMAND [OPTIONS]
          service --status-all
          service --help | -h | --version2、选项列表
          -h | --help
                帮助信息
          -V | --version
                显示命令版本信息
          --status-all
                显示所有的服务状态 
          --full-restart
                重启服务,运行两次,先停止后开启
          [service_name  cmd]
                控制服务。例如service vsftpd start。cmd可以是start、stop、restart3、实例
          1)查看所有服务当前的运行状态
          [root@localhost ~]# service --status-all
          abrt-ccpp hook is installed
          abrtd (pid  2031) 正在运行...
          abrt-dump-oops 已停
          acpid (pid  1507) 正在运行..    
          …
          2)查看指定服务(vsftpd)的运行状态
          [root@localhost ~]# service vsftpd status
          vsftpd (pid 30818) 正在运行...
          3)停止指定服务(vsftpd) 
          [root@localhost ~]# service vsftpd stop
          关闭 vsftpd:                                              [确定]
          [root@localhost ~]# service vsftpd status
          vsftpd 已停
      

  13.   

    shutdown
          shutdown指令以安全的方式来关闭系统,所有已经登录的用户都会被告知系统将要关闭。并且在最后五分钟内,新的登录将被阻止。过了指定的time后,关机会向init(8)守护进程发送一个请求,以便将系统降至适当的运行级别。这是通过发出runlevel(7)事件来执行的,该事件包括RUNLEVEL环境变量中的新运行级以及PREVLEVEL变量中的前一个运行级(从环境或/var/run/utmp获得)。可以设置一个额外的INIT_HART变量,它将包含使用halt指令关机的HAL值,或者使用power off指令关机的POWEROFF值。 
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          shutdown  [选项]  [时间]  [警告信息]2、选项列表
          -c
                取消正在执行的关机,这个选项没有时间参数
          -h
                关闭计算机,等于halt或者power off
          -P
                等价power off
          -H
                等价halt
          -k
                只是发出警告信息,注销登录,并没有 关机 
          -r
                重启,等于reboot
          时间
                now代表立刻关机; +m代表m分钟后关闭; 23:00代表在晚上11点关机3、说明
          如果设置为首选从/var/run/utmp读取RUNLEVEL,关机将从此环境变量读取当前运行级。“/var/run/utmp”文件,读取当前运行级的位置,该文件还将使用新的运行级别进行更新。“/var/log/wtmp”文件,新运行级记录将追加到此文件中。Upstart init(8)守护进程不跟踪运行级别本身,而是完全由其用户空间工具实现。4、实例
    1)5分钟后关闭机器,并发出警告“I am downing”
          [root@192 /]# shutdown -h +5 I am downing        //当前操作有root用户发出,5分钟后关机,并且有提示信息
          Broadcast message from root@192.168.0.113
           (/dev/pts/1) at 10:40 ...
          The system is going down for halt in 5 minutes!     //5分钟
          I am downing                                         //自定义的提示信息
          [weijie@192 root]$                                  //当前控制台是weijie用户登录,他也收到关机信息
          Broadcast message from root@192.168.0.113
           (/dev/pts/1) at 10:40 ...
          The system is going down for halt in 5 minutes!
          I am downing 
    2)取消关机
          [root@192 ~]# shutdown –c                        //需要打开另一个终端,输入取消命令
          [root@192 /]# shutdown -h +5 I am downing     //在之前的关机命令窗口,最后可以看到取消的信息
          …
          The system is going down for halt in 4 minutes!
          I am downing 
          shutdown: Shutdown cancelled        
          [root@192 /]# 
      

  14.   

    yes
          反复的输出指定的字符串,直到手动停止。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          yes  [STRING]...
          yes  OPTION
          如果不指定字符串,那么输出字符“y”2、选项列表
          --help
                帮助信息,并且退出
          --version
                显示命令版本信息,并且退出3、实例
    1)输出hello world
          [root@localhost ~]# yes hello world
          hello world
          hello world
          hello world
          hello world^C      //使用ctrl+c强制停止
          [weijie@192 root]$ 
    2)输出字符y
          [root@localhost ~]# yes          //没有任何选项和参数,输出字符y
          y
          y
          y
          y
          y
          ^C
          You have new mail in /var/spool/mail/root
          [root@localhost ~]# 
      

  15.   

    sudo
          sudo允许用户以超级用户或安全策略指定的另一个用户的身份执行命令。Sudo支持安全策略插件和输入/输出日志的插件。第三方可以开发和分发自己的策略和I/O日志插件,以便与sudo前端无缝地工作。默认的安全策略是sudoers,它是通过文件/etc/sudoers或通过LDAP配置的。      安全策略确定用户在需要什么权利的时候需要运行sudo。该策略可能要求用户使用密码或其他身份验证机制进行身份验证。如果需要身份验证,如果用户的密码未在可配置的时限内输入,sudo将退出。此限制是特定于策略的;sudoers安全策略的默认密码提示超时为5分钟。      安全策略可能支持凭据缓存,允许用户在不需要身份验证的情况下再次运行sudo。sudoers策略将凭据缓存5分钟,除非在sudoers(5)中重写。通过使用“-v”选项运行sudo,用户可以在不运行命令的情况下更新缓存的凭据。      安全策略可能记录使用sudo的成功和失败情况。如果配置了I/O插件,运行中的命令的输入和输出也可能被记录下来。      此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          sudo -h | -K | -k | -V
          sudo -v  [-AknS]  [-g group name | #gid]  [-p prompt]  [-u user name | #uid]
          sudo -l[l] [-AknS]  [-g group name | #gid]  [-p prompt]  [-U user name] [-u user name | #uid]  [command]
          sudo [-AbEHnPS]  [-C fd]  [-g group name | #gid]  [-p prompt]  [-r role]  [-t type]  [-u user name | #uid]  [VAR=value]  -i |  -s [command]
          sudoedit [-AnS]  [-C fd]  [-g group name | #gid]  [-p prompt]  [-u user name | #uid]  file  ...
     
    2、选项列表
          -h
           帮助信息
          -V
                显示命令版本信息
          -A
                通常,如果sudo需要密码,它就会从用户终端读取密码。如果指定了-A(Askpass)选项,则执行一个(可能是Graphi cal)帮助程序来读取用户密码并将密码输出到标准输出。如果设置了SUDO_ASKPASS环境变量,则指定助手程序的路径。否则,如果“/etc/sudo.conf”包含了askpass程序的路径,将使用该值。例如:
    # Path to askpass helper program
    Path askpass /usr/X11R6/bin/ssh-askpass
          -b
                在后台运行命令。请注意,如果使用-b选项,则不能使用shell作业控件操作进程。大多数交互命令在后台模式下都无法正常工作。
          -C fd
                通常,sudo将关闭除标准输入、标准输出和标准错误之外的所有打开的文件描述符。“-C”选项允许用户在标准错误(文件描述符3)之上指定起点。不允许值小于3。安全策略可能限制用户使用“-C”选项的能力。sudoers策略仅允许用户只有在开启“closefrom_override”之后,才可以使用“-C”选项
          -E
                运行时保留用户环境。“-E”选项向安全策略指示用户希望保存他们现有的环境变量。如果指定了“-E”选项,且用户没有保留环境的权限,则安全策略可能返回错误
          -e
                编辑命令文件,而不是执行命令。当查询安全策略的时候,使用字符串“sudoedit”代替命令。如果用户通过策略认证,有3个步骤需要做:1)产生一个临时的副本;2)运行策略指定的编辑器来编辑临时文件。sudoers策略依次使用环境变量SUDO_EDITOR,、VISUAL 、EDITOR。如果没有设置这三个环境变量,则使用编辑器sudoers(5)选项中列出的第一个程序;3)如果修改了临时文件,则将临时文件复制回原来的位置,并移除临时版本。
    如果指定的文件不存在,它将被创建。注意,与sudo运行的大多数命令不同,编辑器是在调用用户的环境中运行的。如果由于某些原因,sudo无法用指定的编辑器更新文件,则用户将收到警告,编辑后的副本将保留在临时文件中。
          -g group 
                由指定的用户组来执行命令。使用#gid,而不是组名。注意,shell要求使用反斜杠(‘\’)转义‘#’
          -H
          -H(Home)
                选项要求安全策略将“HOME”环境变量设置为由密码数据库指定的目标用户的家目录。根据策略,这个选项很可能是默认的。
          -i [command]
                模拟初始登录。“-i“选项将目标用户的密码数据库条目指定的shell作为登录shell运行。这意味着shell将读取特定于登录的资源文件,如“.profile”或“.login”。如果指定了命令,则通过shell的-c选项将其传递给shell执行。如果未指定命令,则执行交互式shell。sudo试图在运行shell之前更改到该用户的家目录。安全策略应将环境初始化为最小变量集,类似于用户登录时存在的变量集。
          -K
                删除用户缓存的凭据,不能与命令或其他选项一起使用。此选项不需要密码。并非所有安全策略都支持凭据缓存。
          -k [command]
                单独使用时,sudo选项可以使用户的缓存凭据无效。下一次运行sudo时,将需要密码。此选项不需要密码,添加该选项是为了允许用户从.logout文件中撤消sudo权限。并非所有安全策略都支持凭据缓存。
    当与可能需要密码的命令或选项一起使用时,“-k”选项将导致sudo忽略用户的缓存凭据。因此,sudo将提示输入密码(如果安全策略需要密码),并且不会更新用户缓存的凭据。
          -l[l] [command]
                列出用户能执行的命令。如果没有指定命令,则-l(List)选项将列出当前主机上调用用户(或-u选项指定的用户)所允许的命令。如果指定了命令并得到安全策略的允许,则会显示命令的完全路径以及任何命令行参数。如果指定了命令但不允许执行,sudo将退出,状态值为1。如果使用l参数(即-ll),则使用较长的列表格式。
          -n
                非交互式,将不提示用户。-n选项防止sudo提示用户输入密码。如果运行命令需要密码,sudo将显示错误消息并退出。
          -P
                保存组向量。“-P“选项使sudo保持调用用户的组向量不变。默认情况下,sudoers策略将组向量初始化为目标用户所在的组列表。然而,实际有效的组ID仍然被设置为与目标用户匹配。
          -p prompt
                使用指定的密码提示语句:
                %H,扩展为主机名,包括域名;
                %h,扩展为主机名,不包括域名;
                %p,扩展为请求其密码的用户的名称;
                %U,扩展到运行命令的用户的登录名;
                %u,扩展到调用用户的登录名;
                %%,两个连续的‘%’字符折叠成一个‘%’字符;
          -r role
                “-r“选项将导致新的安全上下文具有由role指定的角色。
          -S 
          从标准输入读取密码,而不是终端获取。密码后面必须跟着换行符
          -s [command]
                如果设置了shell环境变量,则“-s“选项运行由shell环境变量指定的shell,或者运行密码数据库中指定的shell。如果指定了命令,则通过shell的”-c“选项将命令传递给shell执行。如果没有指定命令,则执行交互式shell。
          -t type
                “-t“选项将导致新的安全上下文的类型,如果没有指定类型,则从指定的角色派生默认类型。
          -U user
                “-U”选项与“-l”选项一起使用,以列出指定用户的权限。安全策略可能限制列出其他用户的特权。sudoers策略只允许root或当前主机上具有完整特权的用户使用此选项。
          -u user
                以指定的用户身份执行指令。“-u“选项使sudo以root以外的用户身份运行指定的命令。要指定#uid而不是用户名。当以uid的形式运行命令时,许多shell要求用反斜杠‘\’转义“#”。安全策略可能会将UID限制在密码数据库。sudoers策略允许不存在于密码数据库中的UID,只要没有设置targetpw选项。其他安全策略可能不支持这一点。
          -v
                当给定-v(验证)选项时,sudo将更新用户的缓存凭据,必要时对用户密码进行身份验证。对于sudoers插件,这会将sudo超时再延长5分钟(或安全策略设置的超时时间),但不会运行命令
          --
                这个选项提示,sudo应该停止处理命令行参数
     
          为命令设置的环境变量也可以var=value的形式传递到命令行,例如LD_Library_path=/usr/local/pkg/lib。传递到命令行的变量受与正常环境变量相同的限制,但有一个重要的例外。如果在sudoers中设置setenv选项,则要运行的命令具有SETENV标记集或匹配的命令。
     
    3、执行命令
          当sudo执行命令时,安全策略指定命令的执行环境。通常,将实际有效的uid和gid设置为与密码数据库中指定的目标用户相匹配,并根据组数据库初始化组向量(除非指定了-p选项)。安全策略可能会指定一些参数:真实有效用户ID、真实有效组ID、补充组ID、环境列表、当前工作目录、文件创建掩码、SELinux的角色和类型、调度级别。
          1)进程模型
          当sudo运行一个命令时,它调用fork(2),设置上面描述的执行环境,并在子进程中调用execve系统调用。主sudo进程等待命令完成,然后将命令的退出状态传递给安全策略的close方法并退出。如果配置了I/O日志插件,则将一个新的伪终端((“pty”)被创建,第二个sudo进程用于在用户现有的pty和正在运行的新pty之间传递作业控制信号。这个额外的进程使挂起并恢复命令成为可能。如果没有它,命令将使用POSIX术语中的“孤立进程组”。也不会收到任何作业控制信号
          2)信号处理
          因为命令是作为sudo进程的子进程运行的,所以sudo会将接收到的信号中继到命令。除非该命令在新的pty中运行,否则SIGHUP、SIGINT和SIGQUIT信号将不会被中继,除非它们是由用户进程而不是内核发送的。否则,该命令将在用户按下“ctrl+c”时接收到两次SIGINT.信号。由于SIGSTOP和SIGKILL不能被捕获,因此不会被中继到命令。作为一般规则,当您希望挂起sudo运行的命令时,应该使用SIGTSTP而不是SIGSTOP。
          作为特例,sudo将不会中继它正在运行的命令发送的信号。这可以防止命令意外地杀死自己。在某些系统上,reboot(8)命令在重新启动系统之前将SIGTERM发送到所有非系统进程,而不是它自己。这防止sudo将接收到的SIGTERM信号中继回reboot(8),然后该信号可能会在系统实际启动之前退出,使其处于类似于单用户模式的半死状态。但是,请注意,此检查只适用于sudo运行的命令,而不适用于命令可能创建的任何其他进程。因此,通过sudo运行调用重reboot(8)或shutdown(8)的脚本可能导致系统处于这种未定义状态,除非使用exec()函数系列而不是system()运行reboot(8)或shutdown(8)(后者在命令和调用进程之间插入一个shell)。
     
    4、插件
          插件根据“/etc/sudo.conf”文件的内容动态加载。如果没有“/etc/sudo.conf”文件,或者它不包含插件行,sudo将使用传统sudoers安全策略和I/O日志记录,这相当于以下“/etc/sudo.conf”文件
          #
          # Default /etc/sudo.conf file
          #
          # Format:
          #   Plugin plugin_name plugin_path plugin_options ...
          #   Path askpass /path/to/askpass
          #   Path noexec /path/to/sudo_noexec.so
          #   Debug sudo /var/log/sudo_debug all@warn
          #   Set disable_coredump true
          #
          # The plugin_path is relative to /usr/libexec unless
          #   fully qualified.
          # The plugin_name corresponds to a global symbol in the plugin
          #   that contains the plugin interface structure.
          # The plugin_options are optional.
          #
          Plugin policy_plugin sudoers.so
          Plugin io_plugin sudoers.so
          插件行由插件关键字组成,后面跟着符号名字和包含插件的共享对象的路径。符号名字是插件共享对象中struct policy_plugin或struct io_plugin的名称。路径可以是完全限定的或相对的。如果不完全限定,则相对于“/usr/libexec”目录。路径之后的任何附加参数都是作为参数传递给插件的开放函数。不以Plugin、Path、
    Debug、Set开头的行将被默认忽略。
     
    5、路径
          路径行由Path关键字组成,后面跟着要设置的路径的名称及其值。例:
          Path noexec /usr/libexec/sudo_noexec.so
          Path askpass /usr/X11R6/bin/ssh-askpass
     
          以下与插件无关的路径可以在“/etc/sudo.conf”文件中设置
          1)askpass,辅助程序的完全限定路径,用于在没有终端可用时读取用户的密码。当sudo从图形应用程序执行时,情况可能是这样。由askpass指定的程序应该将传递给它的参数显示为提示符,并将用户的密码写入标准输出。askpass可能被环境变量SUDO_ASKPASS覆盖。
          2)noexec,共享库的完全限定路径,包含仅返回错误的execv()、execve()和fexecve()库函数的虚拟版本,用于在支持LD_PRELOAD或其等效的系统上实现noexec功能。默认值为“/usr/libexec/sudo_noexec.so”。
     
    6、调试标志
          Sudo版本1.8.4及更高版本支持一种灵活的调试框架,如果存在问题,可以帮助跟踪sudo在内部做什么。
    Debug行由Debug关键字组成,后面跟着要调试的程序名称(sudo、visudo、sudoreplay)、调试文件名和以逗号分隔的调试标志列表。sudo和sudoers插件使用的调试标志语法是subsystem@priority,但是插件可以自由使用不同的格式,只要它不包括逗号。例如语句“Debug sudo /var/log/sudo_debug all@warn,plugin@info”将会在警告级别和更高级别记录插件子系统的所有调试语句以及信息级别的语句。
          目前,每个程序只支持一个调试条目。sudo调试条目由sudo前端、sudodit和plugins共享。将来的版本可能会增加对每个插件调试行的支持和/或对单个程序的多个调试文件的支持。
          sudo前端使用的优先级依次为:crit、err、warn、notice、diag、info、trace、debug.。当指定每个优先级时,还包括所有高于此优先级的优先级。例如,通知的优先级将包括记录在通知中的调试消息以及更高的优先级。
          sudo前端可以使用一下子系统:
          all 
                所有的子系统。
          args
                命令行参数进程。
          conv
                用户回会话
          edit
          sudoedit。
          exec
                命令执行过程。
          main
          sudo的主函数。
          netif
                网络接口处理。
          pcomm
                插件会话
          plugin
          插件配置。
          pty
                为tty相关代码。
          selinux
                SELinux专用处理。
          util
                实用函数。
          utmp 
                utmp处理
      

  16.   

     
    7、退出值
          当程序成功执行时,sudo的退出状态将只是被执行的程序的退出状态。否则,如果存在配置/权限问题或sudo无法执行给定的命令,sudo将以1退出。在后一种情况下,错误字符串将打印到标准错误。如果sudo无法在用户路径中调用stat函数统计一个或多个条目,则在stderr上打印错误。(如果该目录不存在,或者它实际上不是一个目录,则忽略该条目,并且不打印错误。)在正常情况下不应该发生这种情况。stat(2)返回“拒绝权限”的最常见原因是,如果您正在运行一个自动侦听器,并且您的路径中的一个目录位于当前无法访问的计算机上。
     
    8、安全说明
          当执行外部命令时,sudo试图保持安全。为了防止命令欺骗,sudo在用户路径中搜索命令时,最后检查“.”和““。但是请注意,实际的path环境变量没有被修改,而是不改变地传递给sudo执行的程序。
          请注意,sudo通常只记录它显式运行的命令。如果用户运行“sudo su“或”sudo sh“之类的命令,则从该shell运行的后续命令不受sudo的安全策略的约束,提供shell转义的命令也是如此。如果启用了I/O日志记录,随后的命令将有它们的输入和输出记录,但这些命令不会有传统的日志。因此,当用户通过sudo访问命令时,必须小心,以验证该命令不会无意中给用户一个有效的root shell。
          为了防止泄露潜在的敏感信息,sudo在执行时默认禁用核心转储。为了帮助调试sudo崩溃,您可能希望通过在“/etc/sudo.conf“文件中将“disable_coredump”设置为false来重新启用核心转储,如下所示
          Set disable_coredump false
          请注意,默认情况下,大多数操作系统从setuid程序(包括sudo)禁用核心转储。要实际获得sudo核心文件,您可能需要为setuid进程启用核心转储。在BSD和Linux系统上,这是通过“sysctl“命令完成的,在Solaris上可以使用”coreadm“命令。
     
    9、环境变量
          sudo使用一下环境变量,安全策略控制命令环境的实际内容。
          EDITOR
                如果没有设置SUDO_EDITOR或VISUAL,则默认编辑器使用”-e”模式。
          MAIL
                在“-i“模式中或在sudoers中启用env_reset时,将其设置为目标用户的邮件线轴。
          HOME
                如果指定了“-i“或”-H“,在sudoers中赋值给目标用户的home目录,或者赋值给env_reset或all_set_home。或者当指定”-s“选项时,sudoers中赋值给set_home。
          PATH
                可能被安全策略覆盖
          SEHLL
                使用“-s“选项,执行运行的shell
          SUDO_ASKPASS
                如果没有可用的终端,或者指定了“-A“选项,则指定用于读取密码的辅助程序的路径。
          SUDO_COMMAND
                赋值给sudo运行的命令
          SUDO_EDITOR
                “-e“模式下的默认编辑器
          SUDO_GID
                赋值给调用sudo的用户的组ID
          SUDO_PROMPT
                作为默认的密码提示语句
          SUDO_PS1
                如果设置,PS1将被设置为正在运行的程序的值。
          SUDO_UID
                赋值给调用sudo的用户的ID
          SUDO_USER
                赋值给调用sudo的用户登录名
          USER
                赋值给目标用户(默认是root,除非指定“-u“选项)
          VISUAL
                如果在“-e“模式下没有指定”SUDO_EDITOR“,那么这个就是默认编辑器
     
    10、实例
    1)查看当前用户支持的指令
          [weijie@192 /]$ sudo –l       //当前用户没有权利执行任何sudo指令
          [sudo] password for weijie: 
          对不起,用户 weijie 不能在 192 上运行 sudo。
          You have new mail in /var/spool/mail/root
     
          [root@192 /]# sudo –l       //当前用户是root,因此可以执行所有的sudo指令
          匹配此主机上 root 的默认条目:
              requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
              DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1
              PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
              LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
              LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
              LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
             secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
     
          用户 root 可以在该主机上运行以下命令:
              (ALL) ALL
    2)以指定的用户身份来执行命令,不可以指定root
          [root@192 /]# sudo -u weijie ls /home/david/         //以用户weijie的身份来查看用户david的家目录,很明显是没有权利的
          ls: 无法打开目录/home/david/: 权限不够
          [root@192 /]# sudo -u weijie ls /home/weijie/       //以用户weijie的身份来查看用户weijie的家目录,这个当然可以
          1.zip  mail
          [root@192 /]# sudo  ls /home/david/                   //直接查看用户david家目录,由于当前在root环境下,因此完全可以
          mail
    3)其他例子代码
          $ sudo -u yaz ls ~yaz                               //查看用户yaz的家目录
          $ sudo -u www vi ~www/htdocs/index.html          //以用户www的身份编辑文件
          $ sudo -g adm view /var/log/syslog                //以组adm的身份去查看日志文件,  
          $ sudo -u jim -g audio vi ~jim/sound.txt         //要使用不同的主组以Jim的身份运行编辑器
          $ sudo shutdown -r +15 "quick reboot"             //关机
          $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"   //若要对/home分区中的目录进行使用列表,请注意,这将在子shell中运行命令,以使cd和文件重定向工作。
      

  17.   

    mktemp
          创建临时文件或者目录,这样的创建方式是安全的。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
          mktemp  [选项]  [TEMPLATE]2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助信息
          -d | --directory
                创建目录
          -u | --dry-run
                不要创建任何东西,只要打印一个名字(不安全)
          -q | --quiet
                发生错误的时候不显示提示信息
          --suffix=SUFF
                附加SUFF到模板中。SUFF不能包含斜杠。如果模板不以X结尾,则使用此选项。
          --tmpdir[=dir]
                指定临时文件的路径,如果tmpdir后面没有路径,那么使用变量$TMPDIR;如果这个变量也没指定,那么临时文件创建在/tmp目录下。使用此选项,模板不能是绝对名称。与“-t“不同,模板可能包含斜杠,但mktemp只创建最终组件
          -p DIR
                使用DIR作为前缀
          -t
                将模板解释为一个相对于目录$TMPDIR(如果设置)的单个文件名组件;否则通过-p指定的目录;或者使用/tmp(-t已经弃用)
          TEMPLATE
                临时文件名,名字中必须包含至少3个字母X。如果没有指定,那么默认是tmp. XXXXXXXXXX3、实例
    1)创建临时文件
          [root@localhost weijie]# mktemp wj123.XXXX       //名字包含4个X
          wj123.kpET
          You have new mail in /var/spool/mail/root
          [root@localhost weijie]# mktemp wj123.XXXXXX     //名字包含6个X
          wj123.oH2o4P
          [root@localhost weijie]# ls
          1.c  wj123.kpET  wj123.oH2o4P
    2)创建临时目录
          [root@localhost weijie]# mktemp -d wjtp         //名字中没有X
          mktemp: 模板"wjtp" 中X 太少
          [root@localhost weijie]# mktemp -d wjtpxxx      //名字中没有X,这里可以看到X必须是大写的
          mktemp: 模板"wjtpxxx" 中X 太少
          [root@localhost weijie]# mktemp -d wjtpXXX      //创建成功
          wjtpflR
           [root@localhost weijie]# ls -l
          总用量 4
          -rw-r--r-- 1 root root    0 9月   7 09:11 1.c
          -rw------- 1 root root    0 9月   7 14:47 wj123.kpET
          -rw------- 1 root root    0 9月   7 14:47 wj123.oH2o4P
          drwx------ 2 root root 4096 9月   7 14:50 wjtpflR
    3)在/tmp中创建临时文件
          [root@localhost weijie]# mktemp --tmpdir wj234.XXX             //tmpdir没有指定路径,在tmp下创建
          /tmp/wj234.BNy
          You have new mail in /var/spool/mail/root
    4)在指定目录下创建临时目录
          [root@localhost weijie]# mktemp --tmpdir=/weijie wj234.XXX    //在tmpdir指定的路径下创建
          /weijie/wj234.q1C
          [root@localhost weijie]# ls
          1.c  wj123.kpET  wj123.oH2o4P  wj234.q1C  wjtpflR
    5)使用选项-u创建
          [root@localhost weijie]# mktemp -u wj123.XXXXXX         //使用-u选项
          wj123.dSgIKl
          [root@localhost weijie]# ls                                  //看不到临时文件,因为没有创建
          1.c  wj123.kpET  wj123.oH2o4P  wj234.q1C  wjtpflR
      

  18.   

    mkfs
    在磁盘分区上创建ext2、ext3、ext4、ms-dos、vfat文件系统,默认情况下会创建ext2。mkfs用于在设备上构建Linux文件系统,通常是硬盘分区。文件要么是设备名称(例如/dev/hda1,/dev/sdb2),要么是包含文件系统的常规文件。成功返回0,失败返回1。 实际上,mkfs只是Linux下可用的各种文件系统构建器(mkfs.fstype)的前端,在可能/sbin、/sbin/fs、/sbin/fs.d、/etc/fs、/etc/fs等多个目录中搜索特定于文件系统的生成器(编译时定义了精确的列表,但至少包含/sbin和/sbin/fs),最后在PATH环境变量中列出的目录中搜索。 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 1、语法
    mkfs  [-V]  [-t fstype]  [fs-options]  filesys  [blocks]
     
    2、选项列表
    -V
    显示详细执行过程
    -t
    指定文件系统类型,默认ext2
    fs-options
    传递给真正的文件系统构建器的特定选项。虽然没有保证,但大多数文件系统构建器都支持下列选项
    -l filename
    从指定文件中读取坏块列表
    -c
    创建文件系统之前进行坏道检测
    -v
    显示详细执行过程
     
    3、实例
    创建ext2文件系统
    [root@localhost ~]# mknod /dev/sdb4 b 1 1      //创建一个设备
     
    [root@localhost ~]# mke2fs /dev/sdb4
    mke2fs 1.41.12 (17-May-2010)
    文件系统标签=
    操作系统:Linux
    块大小=1024 (log=0)
    分块大小=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    4096 inodes, 16384 blocks
    819 blocks (5.00%) reserved for the super user
    第一个数据块=1
    Maximum filesystem blocks=16777216
    2 block groups
    8192 blocks per group, 8192 fragments per group
    2048 inodes per group
    Superblock backups stored on blocks:
        8193
    正在写入inode表: 完成                           
    Writing superblocks and filesystem accounting information: 完成
    This filesystem will be automatically checked every 26 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
     
    [root@localhost ~]# mount /dev/sdb4 /media/disk            //将文件系统挂载
     
    [root@localhost ~]# df –T      //查看已经使用的文件系统
    Filesystem                   Type    1K-blocks     Used Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root ext4     25552764 13250844  11003900  55% /
    tmpfs                        tmpfs      829656      268    829388   1% /dev/shm
    /dev/sda1                    ext4       495844    32996    437248   8% /boot
    /dev/sr0                     iso9660     56618    56618         0 100% /media/VBox_GAs_5.2.18
    /dev/sdb1                    vfat        15863      140     14904   1% /media/disk
    /dev/sdb4                    ext2        15863      140     14904   1% /media/disk            //可以看到这里是ext2类型的
        
     
      

  19.   

    mke2fs
          在磁盘分区上创建ext2、ext3、ext4文件系统,默认情况下会创建ext2。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          mke2fs  [选项]  [设备]
          mke2fs  [ -c | -l filename ]  [ -b block-size ]  [ -f fragment-size ]  [ -g blocks-per-group ]  [ -G number-of-groups ]  [ -i bytes-per-inode ]  [ -I inode-size ]  [ -j ]  [-J  journal-options]  [ -K ]  [ -N number-of-inodes ] [ -n ]  [ -m reserved-blocks- percentage ]  [ -o creator-os ]  [ -O feature[,...]]  [ -q ]  [ -r  fs-revision-level]  [ -E  extended-options]  [ -v ]  [ -F ]  [ -L volume-label ]  [ -M last-mounted-directory ] [ -S ]  [ -t fs-type ]  [ -T usage-type ]  [ -U UUID ]  [ -V ]  device  [ blocks-count ]
    mke2fs  -O  journal_dev  [ -b block-size ]  [ -L volume-label ]  [ -n ]  [ -q ]  [ -v ]  external-journal  [ blocks-count ] device是与设备相对应的特殊文件(例如:g/dev/hdXX)。blocks-count是设备上的块数。如果省略,mke2fs会自动配置文件系统的大小。如果调用为mkfs.ext3,则创建日记,好像指定了“-j”选项。新创建的文件系统参数的默认值(如果没有被下面列出的选项覆盖)由“/etc/mke2fs.conf”配置文件控制。2、选项列表
          -V
                显示命令版本信息
          -b block-size
                指定文件系统上块的大小(kb),有效值1024、2048、4096。如果省略,块大小将由文件系统大小和文件系统的预期使用量(请参阅-T选项)来决定。如果块大小为负值,则mke2fs将使用启发式方法来确定适当的块大小,同时限制块大小至少为block-size字节。这对于某些硬件设备非常有用(这些硬件设备要求块大小为2k的倍数)。
          -c
                坏道检测。如果该选项被指定两次,则使用较慢的读写测试,而不是快速只读测试。
          -E extended-options
                为文件系统设置扩展选项。扩展选项是逗号分隔的,可以使用等号复制。在mke2fs的早期版本中,“-E”选项以前是“-R”。为了向后兼容,仍然接受“-R”选项。支持下面的扩展选项:
          1)stride=stride-size。使用stride-size个块来配置RAID数组,这是在移动到下一个磁盘之前读取或写入磁盘的块数,有时被称为块大小。这主      要影响文件系统元数据在mke2fs时的存放位置,以避免将它们放置在单个磁盘上,这可能会影响性能。块分配程序也可能使用它。
          2)stripe-width=stripe-width。使用stripe-width个块来配置RAID数组,这通常是stride-size *n,其中N是RAID中包含数据磁盘的数目(例如,对于RAID 5,有一个奇偶校验磁盘,所以N将是数组中磁盘数量减去1),这允许块分配器在写入数据时防止修改RAID中的奇偶。
          3)resize=max-online-resize。预留足够的空间,以便块组描述符能够增长以支持具有在线调整块大小的文件系统。
          4)lazy_itable_init[= <0 to disable, 1 to enable>]。如果使能了,并且也启用了uninit_bg功能,那么inode表将不会被mke2fs完全初始化。这明显加快了文件系统的初始化速度,但它要求内核在文件系统首次挂载时在后台完成对文件系统的初始化。如果省略了选项值,则默认为1以启用延迟inode表初始化。
          5)test_fs。在文件系统超级块中设置一个标志,指示可以使用试验性内核代码(如ext4dev文件系统)挂载它。
          6)discard。尝试在mkfs时丢弃块(在固态设备和稀疏/稀疏的Provi-Sied存储中丢弃块是有用的)。当设备宣传丢弃数据时,将所有尚未归零的inode表标记为零。这大大加快了文件系统初始化的速度。此设置为默认设置。
          7)nodiscard。在mkfs时不会丢弃块。
          -f fragment-size
                设置文件系统碎片的大小。mke2fs接受“-f”选项,但目前忽略它,因为第二个扩展文件系统还不支持片段
          -F
                强制mke2fs创建文件系统,即使指定的设备不是块特殊设备上的分区,或者其他参数没有意义。。由于这个指令很危险,因此必须确认两次
          -g blocks-per-group
                指定块组中的块数。用户通常没有任何理由设置此参数,因为默认设置对文件系统是最佳的。开发测试用例的开发人员通常使用此选项。
          -G number-of-groups
                指定组的数量,这些组将被打包在一起用来创建更大的虚拟块组。组数必须是2的幂,并且只能在启用Flex_BG文件系统功能时指定。
          -i bytes-per-inode
                mke2fs为磁盘上每一个inode字节创建一个inode。bytes/inode比越大,创建的inode就越少。这个值一般不应该小于文件系统的块大小,因为在这种情况下,将产生比以往任何时候都多的inode。在文件系统创建后不可能扩展该文件系统上的inode数,因此要小心确定此参数的正确值。
          -I inode-size
                指定每个inode的大小(以字节为单位)。mke2fs默认创建256字节的inode。在2.6.10之后的内核和一些早期的供应商内核中,可以使用大于128个字节的inode存储扩展属性以提高性能。inode表将消耗,这将减少文件系统中的可用空间,也会对性能产生负面影响。大型inode中存储的扩展属性在旧内核中是不可见的,这样的文件系统将根本无法用2.4内核挂载。在创建文件系统之后,不可能更改此值。
          -j
                创建ext3文件系统。如果没有指定“-j”选项,则默认日志参数将用于创建存储在文件系统中的适当大小的日志
          -J journal-options
                使用命令行中指定的选项创建ext 3日志。选项是逗号分隔的,可以使用相等号对参数赋值。支持以下两个参数,而且这两个参数只能指定一个。
                size=journal-size。指定内部日志的大小,单位是MB。日志的大小必须至少为1024个文件系统块(如果使用1k块,则为1MB,如果使用4k块,则为4MB),并且可能不超过102,400个文件系统块。
                device=external-journal。将文件系统附加到位于指定“external-journal“的日志块设备上,“external-journal“必须已使用以下命令创建:mke2fs -O journal_dev external-journal。请注意,“external-journal“必须具有与新文件系统相同的块大小。此外,虽然支持将多个文件系统附加到单个“external-journal“,但linux内核和e2fsck(8)目前还不支持共享“external-journal“。
    -K
                保留,不要试图在mkfs时丢弃块
          -l filename
                从文件中读取磁盘坏块信息。注意,必须使用mke2fs使用的块大小来生成坏块列表中的块号。因此,mke2fs的-c选项是一种简单得多且不容易出错的方法,用于在格式化磁盘之前检查是否存在错误块,因为mke2fs将自动将正确的参数传递给坏块程序。
          -L new-volume-label
                设置文件系统卷标,卷标最大16个字节
          -m reserved-blocks-percentage
                指定为超级用户保留的文件系统块的百分比。这样可以避免碎片,并允许root有用的守护进程(如syzabd(8)在非特权进程被阻止写入文件系统后继续正确运行。默认百分比为5%。
          -M last-mounted-directory
    设置文件系统最后的挂载目录。一些实用程序可以从上一次挂载目录中选择键,以确定文件系统应该安装在何处。
          -n
                不创建文件系统,而是演示创建文件系统时该怎么做
          -N number-of-inodes
                重写应为文件系统保留的inode数量的默认值。
          -o creator-os
                重写文件系统的“creator operating system”字段的默认值。默认情况下,creator字段设置为mke2fs编译出的操作系统的名称。
          -O feature[,...]
                创建具有给定功能的文件系统(文件系统选项),覆盖默认的文件系统选项。默认情况下启用的特性由base_features关系指定,或者在/etc/mke2fs.conf配置文件中的[defaults]部分中指定,或者在-T选项指定的用法类型的[fs_type]子节中指定,并由文件系统的[fs_types]子节中的特性关系进一步修改使用类型。
    文件系统特性集将使用此选项指定的特性集进行进一步编辑,或者如果未给出此选项,则由正在创建的文件系统类型的default_features关系进行编辑,或者在配置文件的[defaults]部分中进行编辑。
    文件系统功能集由一系列要启用的以逗号分隔的特性组成。要禁用一个功能,只需在特征名前加上插入符号(‘^’)。伪文件系统功能“none”将清除所有文件系统功能。feature可以是以下内容:
                1)dir_index。使用hashed b-trees来加快大目录中的查找速度
                2)extent。使用间extent块来存储inode中数据块的位置。这是一种更有效的编码,它加快了文件系统的访问速度,特别是对于大型文件。
                3)filetype。将文件类型信息存储在目录条目中。
                4)flex_bg。允许将每个块组元数据(分配位图和inode表)放置在存储介质上的任何位置。此外,mke2fs将每个块组元数据放在每个“flx_bg group”的第一个块组中。可以使用-G选项指定flx_bg组的大小。
                5)has_journal。创建ext 3日志,和“-j”选项一样。
                6)journal_dev。在给定设备上创建外部ext 3日志,而不是常规ext 2文件系统。
                7)large_file。文件系统可以包含大于2GB的文件。(创建文件>2GB时,现代内核会自动设置此特性。)
                8)resize_inode。保留空间,这样块组描述符表在将来可能会增长。对于使用regze2fs在线调整大小很有用。默认情况下,mke2fs将尝试预留足够的空间,以便文件系统可以增长到其初始大小的1024倍。
                9)sparse_super。创建一个较少SuperBlock备份的文件系统(在大型文件系统上节省空间)。
                10)uninit_bg。在不初始化所有块组的情况下创建一个文件系统。这个特性还允许校验和功能,以及每个块组中highest-inode-used统计信息。这个特性可以显著加快文件系统的创建时间(如果启用了lazable_init),还可以大大减少e2fsck的时间。它只受最近Linux内核中的ext 4文件系统的支持。
          -q
                静默执行,通常用在脚本文件中。
          -r revision
                为新的文件系统设置文件系统修订号。
          -S
                只写超级块和组描述符。如果所有的超级块和备份超级块都损坏了,并且需要一种最后的恢复方法,这是很有用的。它导致mke2fs重新初始化超级块和组描述符,同时不触及inode表、块和inode位图。e2fsck程序应该在使用此选项后立即运行,并且无法保证任何数据都是可挽救的。使用此选项时指定正确的文件系统块大小至关重要,否则不可能恢复。
          -t fs-type
                指定文件系统类型,默认ext2。此选项根据“/etc/mke2fs.conf(5)”中的fstypes配置节控制默认使用哪些文件系统选项
    如果使用“-O”选项显式地添加或删除应该在新创建的文件系统中设置的文件系统选项,则所请求的fs-type可能不支持所产生的文件系统。(例如,“mke2fs -t ext3 -O extents /dev/sdXX”将创建一个不受ext3实现支持的文件系统。 “"mke2fs -t ext3 -O^has_journal /dev/hdXX”将创建一个没有日志的文件系统,因此Linux内核中的ext 3文件系统代码将不支持该文件系统。)
          -T usage-type[,...]
                指定文件系统的使用方式,以便mke2fs可以选择最佳的文件系统参数。所支持的usage-type在配置文件“/etc/mke2fs.conf(5)”中定义。用户可以使用逗号分隔列表指定一个或多个usage-type。
          -U
                用指定UUID创建系统
          -v
                显示详细执行过程3、实例
    创建ext2文件系统
          [root@localhost ~]# mknod /dev/sdb4 b 1 1      //创建一个设备      [root@localhost ~]# mke2fs /dev/sdb4          //创建文件系统,没有指定类型,默认是ext2
          mke2fs 1.41.12 (17-May-2010)
          文件系统标签=
          操作系统:Linux
          块大小=1024 (log=0)
          分块大小=1024 (log=0)
          Stride=0 blocks, Stripe width=0 blocks
          4096 inodes, 16384 blocks
          819 blocks (5.00%) reserved for the super user
          第一个数据块=1
          Maximum filesystem blocks=16777216
          2 block groups
          8192 blocks per group, 8192 fragments per group
          2048 inodes per group
          Superblock backups stored on blocks: 
           8193
          正在写入inode表: 完成                            
          Writing superblocks and filesystem accounting information: 完成
          This filesystem will be automatically checked every 26 mounts or
          180 days, whichever comes first.  Use tune2fs -c or -i to override.       [root@localhost ~]# mount /dev/sdb4 /media/disk            //将文件系统挂载      [root@localhost ~]# df –T      //查看已经使用的文件系统
          Filesystem                   Type    1K-blocks     Used Available Use% Mounted on
          /dev/mapper/VolGroup-lv_root ext4     25552764 13250844  11003900  55% /
          tmpfs                        tmpfs      829656      268    829388   1% /dev/shm
          /dev/sda1                    ext4       495844    32996    437248   8% /boot
          /dev/sr0                     iso9660     56618    56618         0 100% /media/VBox_GAs_5.2.18
          /dev/sdb1                    vfat        15863      140     14904   1% /media/disk
          /dev/sdb4                    ext2        15863      140     14904   1% /media/disk            //可以看到这里是ext2类型的 
      

  20.   

    mknod
          创建块设备或者字符设备文件。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          mknod  [选项]  设备名  设备类型  主设备号  次设备号2、选项参数列表
          --version
                显示命令版本信息
          --help
                显示帮助信息
          -m | --mode=MODE
                设置权限
          -Z |  --context=CTX
                设置SELinux的安全上下文
                设备类型
                b,块设备;c,字符设备;u,没有缓冲的字符设备;p,fifo设备
                设备号
                只能是十进制和八进制,如果是0x开头,那么还是十进制。对于b、c、u设备,必须给出设备号,对于p设备,必须忽略设备号
          
    当类型为b、c或u时,必须同时指定主设备号和次设备号;当类型为p时,必须省略它们。如果主设备号或次设备号以0x或0x开头,则解释为十六进制;否则,如果以0开头为八进制,其他为十进制。3、实例
    1)创建块设备文件
          [root@localhost ~]# mknod /dev/sdb4 b 1 1      //创建一个设备
          [root@localhost weijie]# ls -l /dev/sdb4 
          brw-r--r-- 1 root root 1, 1 9月   7 08:21 /dev/sdb4
    2)创建字符设备文件
          [root@localhost ~]# mknod /dev/ttywj c 2 1      //创建一个设备
          [root@localhost weijie]# ls -l /dev/ttywj 
          crw-r--r-- 1 root root 2, 1 9月   7 09:42 /dev/ttywj
      

  21.   

    mkswap
            在Linux设备或者文件中创建交换分区,创建完成之后必须使用swapon来使用它。一般在“/etc/fstab”中有一个交换分区列表,这样开机的时候就可以使用它。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            mkswap  [-c]  [-f]  [-p PSZ]  [-L label]  [-U uuid]  device  [size]
            参数device通常是一个磁盘分区(类似于/dev/sdb7),但也可以是一个文件。Linux内核不查看分区ID,但是许多安装脚本将假定十六进制类型82(Linux_SWAP)的分区是交换分区。(警告:Solaris也使用此类型。小心不要关闭Solaris分区。)
            参数size是多余的,但为了向后兼容性而保留
            PSZ参数指定要使用的页大小。指定它几乎是不必要的(甚至是不明智的),但是某些旧的libc版本是关于页面大小的,所以mkswap有可能弄错了它。症状是后续Swapon失败了,因为没有找到交换签名。PSZ的典型值为4096或8192。2、选项列表
            -c
                    创建交换分区之前,检测坏块。如果有,那么打印出数量。
            -f
                    强制执行。如果没有此选项,mkswap将拒绝擦除带有分区表的设备上的第一个块或整个磁盘上的第一个块(例如/dec/sda)。
            -p
                    设置页大小,默认4096。一般是不需要指定这个参数的
            -L label
                    指定一个label,方便swapon使用。只适用于新的风格交换区域
            -v1
                    创建v1版本的swap分区,2.5内核之后只支持这种的
            -U uuid
                    指定uuid,默认情况会生成uuid3、说明
            交换头不触及第一个块。引导加载程序或磁盘标签可以在那里,但不建议安装。建议的设置是为Linux交换区域使用单独的分区。mkswap和许多其他类似mkfs的实用程序一样,擦除了第一块,这样就可以删除磁盘上的旧系统。mkswap拒绝擦除带有磁盘标签的设备上的第一个块,或者整个磁盘。
            交换区域的最大有用大小取决于体系结构和内核版本,在i386、PPC、m68k、ARM、sparc上为1 GiB、MIPS上为512 MiB、alpha上为128 GiB、sparc64上为3 TiB。对于2.3.3以后的内核来说,没有这样的限制。请注意,在2.1.117之前,内核为每个页面分配了一个字节,而现在它分配了两个字节,因此使用中的交换区域2 GIB可能需要2个MIB内核内存。
            目前,Linux允许32个交换区域(这是Linux2.4.10之前的8个)。使用中的区域可以在文件“/proc/swaps”中看到(自2.1.25以来)。mkswap拒绝10页以下的区域。如果您不知道您的机器使用的页面大小,您可能可以使用“cat /proc/cpuinfo”查找它。
            若要设置交换文件,必须在使用mkswap初始化该文件之前创建该文件,例如使用以下命令:
             # dd if=/dev/zero of=swapfile bs=1024 count=65536
            注意,交换文件不能包含任何漏洞(因此,使用cp(1)创建该文件是不可接受的)4、实例
    1)创建交换分区,指定页大小2048
            [root@localhost ~]# mkswap -p 2048 /dev/sdb4           //这里指定页大小2048,取代了系统默认的4096
            Using user-specified page size 2048, instead of the system value 4096
            Setting up swapspace version 1, size = 16382 KiB
            no label, UUID=42f07b0e-0adb-47b6-a906-1209efabb981
    2)创建交换分区,指定页大小4096,指定label
            [root@localhost ~]# mkswap -p 4096 -L wj /dev/sdb4    //笔者当前的系统,不能使用2048大小的页
            Setting up swapspace version 1, size = 16380 KiB
            LABEL=wj, UUID=c458a15d-50ee-4e10-a49b-b59add4879d5
    3)使用交换分区
            [root@localhost ~]# swapon /dev/sdb4           //使用指定的分区
            [root@localhost ~]# swapon –s                   //查看分区使用情况
            Filename Type Size Used Priority
            /dev/dm-1              partition 2940920 0 -1
            /dev/sdb4              partition 16376 0 -2
      

  22.   

    mkisofs
        内容太多,参考https://blog.csdn.net/wj78080458/article/details/83549286
      

  23.   

    dump
          检查ext2/3/4文件系统,确定哪些文件需要备份,这些需要备份的文件将会被复制到指定的磁盘或者其他存储介质。dump检查Ext 2/3/4文件系统上的文件,并确定哪些文件需要备份。这些文件被复制到给定的磁盘、磁带或其他存储介质中以确保安全保存(请参阅下面的-f选项以进行远程备份)。大于输出介质的转储被分解为多个卷。在大多数媒体上,大小是通过写入来确定的,直到返回媒体结束指示为止。
          在无法可靠地返回媒体结束指示(例如一些盒式磁带驱动器)的媒体上,每个卷都是固定大小的;实际大小是通过指定墨盒介质或通过下面的磁带大小、密度和/或块计数选项来确定的。默认情况下,在提示操作员更改媒体后,每个卷都使用相同的输出文件名。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          dump  [选项]  [-f 目标文件]  源文件
          dump  [-level#]  [-ackMnqSuv]  [-A file]  [-B records]  [-b blocksize]  [-d density]  [-D file]  [-e inode numbers]  [-E file]  [-f file]  [-F script]  [-h level]  [-I nr  errors]  [-jcompression  level]  [-L label]  [-Q file]  [-s feet]  [-T date]  [-y]  [-zcompression level]  files-to-dump
          dump  [-W | -w]
          files-to-dump要么是文件系统的挂载点,要么是要作为文件系统子集备份的文件和目录列表。在前一种情况下,可以使用安装文件系统的路径或卸载文件系统的设备。在后一种情况下,对备份设置了某些限制:-u是不允许的,唯一支持的转储级别是0,所有文件和目录都必须驻留在同一个文件系统中。2、选项列表
          -level#
                备份级别。如果是0,那么就备份整个文件系统;如果大于0,那么就会备份相对于上一个更低级别备份的新文件和修改过的文件。默认是0。在子目录中,只允许使用0级备份
          -a
                “自动尺寸”。绕过所有的磁带长度计算,并写入,直到媒体结束指示返回。这是最适合大多数现代磁带驱动器,这是默认的。当附加到现有磁带或使用带有硬件压缩的磁带驱动器时,特别推荐使用此选项(在这种情况下,您永远无法确定压缩比)。
          -A archive_file
                存档指定文件中的“内容转储表”,由RESTORE(8)使用,以确定文件是否在正在恢复的转储文件中。
          -b blocksize
                每个转储记录的千字节数。默认的块大小为10,除非-d选项已用于指定6250 BPI或更高的磁带密度,在这种情况下,默认的块大小为32。但是请注意,由于IO系统将所有请求分割成块MAXBSIZE(可低到64 KB),因此在使用更高的值时,可能会遇到转储(8)和恢复(8)的问题,这取决于内核和/或libC版本。
          -B records
                每卷1 kB块的数目。通常不需要,因为转储可以检测到媒体的结束.达到指定大小时,dump将等待您更改卷。此选项将重写基于长度和密度的磁带大小计算。如果压缩限制了每个卷的压缩输出的大小。多个值可以作为一个由逗号分隔的参数给出。每个值将按所列顺序用于一个转储卷;如果转储创建的卷比给定的值数多,则其余卷将使用最后一个值。这对于填充已经部分填充的媒体(然后在空媒体上继续使用全尺寸卷)或混合不同大小的媒体非常有用。
          -c
                更改默认使用的磁带驱动器,密度为8000 BPI,长度为1700英尺。指定墨盒驱动器将覆盖媒体端检测。
          -d density
                设置磁带密度。默认为1600 BPI。指定磁带密度将覆盖媒体端检测。
          -D file
                设置文件的路径名,该文件存储有关前一个完整转储和增量转储的信息。默认位置是/etc/dumpdate
          -e inodes
                不包含指定的inodes。inodes参数是一个逗号分隔的inode编号列表
          -E file
                从文本文件中读取备份时要排除的inode列表。该文件应该是一个普通文件,其中包含由换行符分隔的inode编号。
          -f filename
                将备份写入文件;文件可能是一个特殊的设备文件,如/dev/st0(atAPE驱动器)、/dev/rsd1c(软盘驱动器)、普通文件或-(标准输出)。多个文件名可以作为一个由逗号分隔的参数。每个文件将按所列顺序用于一个转储卷;如果转储所需的卷数量超过给定的名称数,则在提示进行媒体更改后,最后一个文件名将用于所有剩余卷。如果文件的名称为“host:file”或“user@host:file”,dump写入远程主机上的命名文件(应该已经存在,那么转储不会使用RMT(8)创建新的远程文件)。远程RMT(8)程序的默认路径名是“/etc/rmt”;这可以被环境变量RMT覆盖
          -F script
                在每个磁带的末尾运行脚本(最后一个除外)。设备名称和当前卷号将在命令行上传递。如果转储应该继续而不要求用户更改磁带,则脚本必须返回0;如果转储应该继续,则返回0。更改磁带。任何其他退出代码都会导致转储中止。出于安全考虑,转储在运行脚本之前返回到实际用户ID和真实组ID。
          -h level
                只对给定级别或以上的转储授予用户节点标志UF_NODUMP。默认荣誉级别为1,因此增量备份省略了这些文件,但完整备份保留了这些文件。当给定的备份级别大于这个-h指定的级别时,那么就不备份标志为“UF_NODUMP”的文件。
          -I nr_errors
                默认情况下,在请求操作符干预之前,转储将忽略文件系统上的前32次读取错误。可以使用此标志将其更改为任意值。当在活动文件系统上运行转储时,这是非常有用的,因为读取错误只是表示映射和转储传递之间的不一致。0,代表忽略所有的错误
          -jcompression_level
                使用bzlib库压缩要写入磁带上的每个块。只有在将文件或管道转储到文件或管道时,或者在将磁带驱动器转储到磁带驱动器时,如果磁带驱动器能够写入可变长度的块,此选项才能工作。您至少需要0.4b24版本的还原才能提取压缩磁带。使用压缩编写的磁带将与BSD磁带格式不兼容。(可选)参数指定bzlib将使用的压缩级别。默认压缩级别为2。如果指定了可选参数,则选项字母和参数之间不应该有空白。
          -k
                使用Kerberos身份验证与远程磁带服务器对话。(只有在编译转储时启用此选项时才可用。)
          -L label
                用户提供的文本字符串标签label被放置到转储头中,在这里,像RESTORE(8)和FILE(8)这样的工具可以访问它。请注意,此标签最多限于LBLSIZE(当前16)个字符,其中必须包括终止\0
          -m
                如果指定了此标志,dump将优化自上次转储以来已更改但未修改的inode的输出(“已更改”和“修改”的含义在stat(2)中定义)。对于这些inode,dump将只保存元数据,而不是保存整个inode内容。此标志的使用必须是一致的,这意味着增量转储集中的每个转储都有该标志,或者没有人拥有该标志。
                如果使用此选项,请注意,许多从档案中解压缩文件的程序(例如tar、rpm、unzip、dpkg)可能会将文件的mtime设置为过去的日期。如果修改后的mtime早于以前的级别转储,以这种方式安装的文件可能无法使用“dump-m”正确转储。使用这种“元数据”inode编写的磁带将与bsd磁带格式或较早版本的还原不兼容。
          -M
                启用多卷功能.使用“-f”指定的名称被视为前缀,并按顺序写入<prefix>001, <prefix>002等等。这在将文件转储到Ext 2/3/4分区上的文件时非常有用,以绕过2GB文件大小限制
          -n
                每当转储需要操作员注意时,以类似于wall(1)的方式通知组操作符中的所有操作符。
          -q
                每当需要操作员注意时,立即使dump中止,而无需提示写入错误、磁带更改等。
          -Q file
                启用快速文件访问支持。每个inode的磁带位置存储在RESTORE使用的文件中(如果用参数q和文件名调用)直接将磁带定位在当前正在进行的文件恢复中。这将节省从大型备份恢复单个文件的时间,保存磁带和驱动器的磁头。
                建议将st驱动程序设置为在调用带参数的转储/还原之前返回逻辑磁带位置而不是物理磁带位置。因为并非所有磁带设备都支持物理磁带位置,所以当st驱动程序设置为默认物理设置时,这些磁带设备在转储/还原期间返回一个错误。请参见st(4)手册页,选项MTSETDRVBUFFER。,或mt(1)手册页,介绍如何设置驱动程序返回逻辑磁带位置。在使用参数“-Q”调用RESTORE之前,始终确保st驱动程序设置为返回调用转储过程中使用的相同类型的磁带位置。否则,还原可能会被混淆。
    此选项可在转储到本地磁带(见上文)或本地文件时使用。
          -s feet
                试图计算在特定密度下所需的磁带数量。如果超过此数量,则转储提示输入新磁带。建议在这个选项上有点保守。默认的磁带长度是2300英尺。指定磁带大小将覆盖媒体端检测。
          -S
                大小估计。确定在没有实际执行转储的情况下执行转储所需的空间数量,并显示它将占用的估计字节数。这对于增量转储非常有用,可以确定需要多少卷媒体。
          -T date
                指定备份的日期。使用指定的日期作为转储的开始时间,而不是从查看/etc/dumpdate中确定的时间。日期的格式与ctime(3)的格式相同,后面跟着rfc 822时区规范:一个正负号,后面跟着两位数的小时数和两位数的分钟数。例如,格林威治以西8小时为0800小时,格林威治以东2小时半为0230小时。此时区设置考虑了夏时制时间(如果适用于时区):当夏时制时间生效时,UTC偏移量将与夏时制时间无效时的抵消值不同。为了向后兼容,如果没有指定时区,则假定为本地时间。此选项对于希望在特定时间内转储的自动转储脚本非常有用。-T选项与-u选项相互排斥。
          -u
                备份完成后,在/etc/dumpdates中记录备份的文件系统、日期。人们可以阅读/etc/dumpdate的格式,包括每行一个空闲的格式记录:文件系统名称、增量级别和ctime(3)格式转储日期,后面是rfc 822时区规范(详见-u选项)。如果未指定时区偏移量,则将时间解释为本地时间。每当写入文件时,文件中的所有日期都转换为本地时区,而不更改UTC时间。每个文件系统在每个级别上可能只有一个条目。如果需要,可以编辑/etc/dumpdate文件以更改任何字段。
          -v
                显示详细的信息,帮助调试错误
          -W
                显示出最近的备份时间、层级,检测需要备份的文件。当W选项出现时,其他的选项都被忽略。转储告诉操作符哪些文件系统需要转储。这个信息是从文件“/etc/dumpdate”和“/etc/fsman”收集的。-W选项会导致对”/etc/dumpdate”中的所有文件系统和”/etc/mtab”中的所有文件系统以及在”/etc/mtab”和”/etc/fstat”中识别的文件系统打印出来。最近的转储日期和级别将突出显示应该转储的文件系统。
          -w
                类似于“-W”,但只在“/etc/mtab”和“/etc/fstat”中打印需要转储的可识别的文件系统。
          -y
                使用lzo库压缩要写入磁带的每个块。这不能像zlib库那样压缩,但速度要快得多。只有在将文件或管道转储到磁带驱动器时,或者当磁带驱动器能够写入可变长度的块时,此选项才能工作。您至少需要0.4b34版本的还原才能提取压缩磁带。使用压缩编写的磁带将与bsd磁带格式不兼容。
          -zcompression level
                使用zlib库压缩要写入磁带上的每个块。此选项仅在将文件或管道转储到文件或管道时才能工作,或者在将磁带驱动器转储到磁带驱动器时,如果磁带驱动器能够写入可变长度的块,则此选项才能工作。您将需要至少0.4b22版本的恢复,以提取压缩磁带。使用压缩编写的磁带将与BSD磁带格式不兼容。(可选)参数指定zlib将使用的压缩级别。默认压缩级别为2。如果指定了可选参数,则选项字母和参数之间不应该有空白。3、说明
          dump需要操作员对以下条件进行干预:磁带结束、转储结束、磁带写入错误、磁带打开错误或磁盘读取错误(如果存在nr错误的阈值以上)。除了通知-n键所暗示的所有操作符之外,在转储不能继续时,或者在发生严重错误时,转储与转储控制终端上的操作符进行交互。所有的问题转储构成必须通过键入“是”或“否”,适当地回答。
          因为做一个dump需要花费大量的时间和精力,所以在每个磁带卷的开头都会转储检查点。如果由于某种原因写入该卷失败,则在重新装入和删除旧磁带并安装新磁带之后,在操作员许可下,转储将从检查点重新启动。
          dump以周期性的间隔告诉操作符正在发生什么,包括通常对要写入的块数、所需磁带的数量、完成时间和磁带更改时间的低估计。输出是冗长的,因此其他人知道终端控制转储是繁忙的,而且会持续一段时间。
          在发生灾难性磁盘事件时,将所有必要的备份磁带或文件恢复到磁盘所需的时间可以通过错位增量转储来保持在最低限度。一种将磁带数量降到最小的增量式转储的有效方法如下:
          1)总是从0级备份开始,例如:“/sbin/dump -0u -f /dev/st0 /usr/src“。这应该每隔一段时间进行一次,比如每月一次或每两个月一次,并在一套永久保存下来的新磁带上进行。
          2)在级别0之后,每天都会对活动文件系统进行转储,并使用此转储级别序列:” 3 2 5 4 7 6 9 8 9 9 ... “。
    经过几个月左右的时间,每天和每周的磁带都应该从转储周期中轮换出来,新的磁带应该被带进来。4、环境变量
          1)TAPE。如果没有指定“-f“选项,dump将使用通过TAPE指定的设备作为转储设备。TAPE可以是磁带名字、host:tapename、user@host:tapename。
          2)RMT。环境变量RMT将用于确定远程rmt(8)程序的路径名。
          3)RSH。dump使用此变量的内容来确定远程备份时要使用的远程shell命令的名称(rsh、ssh等)。如果未设置此变量,则将使用rcmd(3),但只有root才能进行远程备份。5、文件
          1)/dev/st0,要备份到的默认磁带单元。
          2)/etc/dumpdates,dump的日期记录。
          3)/etc/fstab,转储表:文件系统和频率
          4)/etc/mtab,转储表:挂载的文件系统
          5)/etc/group,查找组操作符6、退出码
          成功时dump状态为零。启动错误用退出代码1表示;异常终止用退出代码3表示。
          当发生读取错误时,转储输出相应的物理磁盘块和扇区号以及Ext 2/3/4逻辑块号。它不打印相应的文件名,甚至不打印inode编号。用户必须使用调试器(8),命令nCheck和icheck将由转储输出的ext2blk数字转换为inode号,然后转换为文件名。
          每个卷轴都需要一个新的进程,所以卷轴的父进程已经写的只是挂在一起,直到写了整个磁带。如果压缩为ON,则估计的磁带数不正确。如果dump知道dump序列,就会很好,保持跟踪的磁带,告诉操作员要安装什么磁带,并为运行恢复的操作员提供更多的帮助。
          由于转储的安全历史,它无法在不以root用户身份运行的情况下进行远程备份。目前,如果设置setuid(与以前一样),它就能工作,但这可能会构成安全风险。请注意,可以将rsh设置为使用远程shell程序。7、bug
          这个版本的dump只能处理Ext 2/3/4文件系统,这可能被认为是一个错误。具体来说,它不适用于FAT文件系统。忽略文件系统上少于32个读取错误(用-i更改此错误)。如果注意读取错误很重要,则可以解析转储的输出,以查找包含文本“读取错误”的行。8、实例
    备份目录/weijie
          [root@localhost /]# dump -0f /bak/1.bak /weijie/      //备份到1.bak
            DUMP: Date of this level 0 dump: Fri Sep  7 09:26:15 2018
            DUMP: Dumping /dev/mapper/VolGroup-lv_root (/ (dir weijie)) to /bak/1.bak
            DUMP: Label: none
            DUMP: Writing 10 Kilobyte records
            DUMP: mapping (Pass I) [regular files]
            DUMP: mapping (Pass II) [directories]
            ...      [root@localhost weijie]# file /bak/1.bak                //查看备份文件
          /bak/1.bak: new-fs dump file (little endian), This dump Fri Sep  7 09:26:15 2018, Previous dump Thu Jan  1 08:00:00 1970, Volume 1, Level zero, type: tape header, Label none, Filesystem / (dir weijie), Device /dev/mapper/VolGroup-lv_root, Host localhost.localdomain, Flags 3
      

  24.   

    ex2fsck
            检查ext2、ext3、ext4文件系统,如果系统已经挂载了,那么不建议去检查,因为这样是不安全的。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            e2fsck  [-pacnyrdfkvtDFV]  [-b  superblock]  [-B  blocksize]  [-l|-L bad_blocks_file ]  [-C fd]  [-j external-journal]  [-E extended_options ]  device
            设备是存储文件系统的设备文件(例如/dev/hdc 1)。2、选项列表
            -a | -p
                    自动修复文件系统
            -b superblock
                    指定块大小。不要使用普通的超级块,而是使用由superblock指定的替代超级块。此选项通常在主超级块损坏时使用。备份超级块的位置取决于文件系统的块大小。对于具有1k块的文件系统,可以使用备份超级块。在块8193处找到;对于具有2k块的文件系统,在块16384处找到;对于4k块在块32768处找到。
                    其他备份超级块可以通过使用mke2fs程序使用-n选项打印出创建超级块的位置来确定。mke2fs的-b选项必须指定文件系统的块大小,以便打印出准确的超级块位置。
                    如果指定了另一个超级块,并且文件系统不是只读的,e2fsck将确保主超级块在完成文件系统检查后得到适当更新。
            -B blocksize
                    正常情况下,e2fsck将在不同块大小下搜索超级块,以试图找到适当的块大小。在某些情况下,此搜索可能会被愚弄。此选项迫使e2fsck只尝试在特定块大小上定位超级块。如果找不到超级块,e2fsck将以致命错误结束。
            -c
                    此选项会导致e2fsck使用badblock(8)程序对设备执行只读扫描,以查找任何坏块。如果发现任何坏块,则将它们添加到坏块inode中,以防止将它们分配给文件或目录。如果指定了该选项两次,则将使用无损读写测试完成坏块扫描。
            -C fd
                    此选项导致e2fsck将完成信息写入指定的文件描述符,以便监视文件系统检查的进度。运行e2fsck的程序通常使用此选项。如果文件描述符号为负数,则将使用文件描述符的绝对值,而进度信息最初将被抑制。之后,可以通过向e2fsck进程发送SIGUSR 1信号来启用它。如果指定的文件描述符为0,e2fsck将在其业务进行时打印一个完成栏。这要求e2fsck在视频控制台或终端上运行。
            -d
                    显示调试信息 
            -D
                    优化文件系统中的目录。此选项导致e2fsck尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引这些目录,或者对较小目录的目录进行排序和压缩,或者使用传统的线性目录对文件系统进行排序和压缩。即使没有-D选项,e2fsck有时也可能优化几个方向。例如,如果启用目录索引,并且目录没有索引,或者索引结构被破坏并需要重建,则会受益。-D选项强制对文件系统中的所有目录进行优化。它们较小,搜索速度稍快,但实际上,您不需要使用此选项。-D选项将检测单个目录中具有重复名称的目录项,由于性能原因,e2fsck通常不强制执行。
            -E extended_options
                    设置e2fsck扩展选项。扩展选项是逗号分隔的,可以使用等于(‘=’)号进行参数设置。
                    ea_ver=extended_attribute_version,在检查文件系统时,设置e2fsck所需的扩展属性块的版本。版本号可能是1或2。默认的扩展属性版本格式是2。
                    fragcheck,在传递1期间,为文件系统中的文件打印任何不连续块的详细报告。
                    discard,在进行完整的文件系统检查后,尝试丢弃空闲块和未使用的inode块。
                    nodiscard,不要试图丢弃空闲块和未使用的inode块。这个选项与discard选项正好相反。此设置为默认设置。
            -f
                    强制检查
            -F
                    在开始检查之前,清空缓冲区
            -I file
                    指定文件中的块添加在损坏列表
            -j file
                    设置文件系统在日志文件的路径
            -k
                    当与-c选项相结合时,坏块列表中的任何现有坏块将被保留,而通过运行badblocks (8)发现的任何新坏块将被添加到现有的坏块列表中。
            -l filename
                    将文件名指定的文件中所列的块号添加到坏块的列表中。此文件的格式与badblocks (8)程序生成的格式相同。请注意,块号是基于文件系统的块大小。因此,对e2fsck使用-c选项更简单、更安全,因为它将确保将正确的参数传递给badblock程序。
            -L filename
                    将坏块列表设置为文件名指定的块列表。(此选项与-l选项相同,除非在将文件中列出的块添加到坏块列表之前清除坏块列表。)
            -n
                    打开文件系统只读,并假设对所有问题的答案为“no”。允许非交互地使用e2fsck。此选项不能与-p或-y选项同时指定。
            -p
                    自动修复(“preen”)文件系统。此选项将导致e2fsck自动修复任何不需要人工干预就能安全修复的文件系统问题。如果e2fsck发现可能需要系统管理员采取额外纠正措施的问题,e2fsck将打印问题的描述,然后以代码4退出。(请参阅退出代码部分。)此选项通常由系统的引导脚本使用。它不能与-n或-y选项同时指定。
            -r
                    不执行任何操作,提供向后的兼容性
            -S
                    交换文件系统的字节顺序
            -t
                    打印e2fsck的时间统计信息。如果使用此选项两次,则附加的时间统计信息将按传递方式打印。
            -v
                    显示执行的详细过程
            -V
                    显示命令版本号,并且退出
            -y
                    所有的交互回话都回答yes,此选项不能与-n或-p选项同时指定。3、说明
            e2fsck用于检查ext 2/ext 3/ext 4系列文件系统。对于使用日志的ext 3和ext 4文件系统,如果系统在没有任何错误的情况下被不干净地关闭,通常在日志中重播提交的事务之后,文件系统应该标记为干净。因此,对于使用日志的文件系统,e2fsck通常会重播日志并退出,除非它的超级块表明需要进一步检查。
            请注意,通常在挂载的文件系统上运行e2fsck是不安全的。唯一的例外是指定了-n选项,并且没有指定-c、-l或-L选项。然而,即使这样做是安全的,如果挂载了文件系统,e2fsck打印的结果也是无效的。

    4、返回值
            e2fsck可以返回以下值:
            0,没有错误。
            1,文件系统错误更正。
            2,文件系统错误更正,系统应该重启。
            4,文件系统错误没有更正。
            8,操作错误。
            16,语法错误。
            32,用户取消了操作。
            128,共享库错误5、信号
            对e2fsck发送以下信号,并产生相应的结果:
            SIGUSR1,此信号导致e2fsck开始显示完成栏或发出进度信息。(见对-C选项的讨论。)
            SIGUSR2,此信号导致e2fsck停止显示完成栏或发出进度信息。。6、实例
    以只读的方式检查sda1
            [root@localhost ~]# e2fsck  -n /dev/sda1
            e2fsck 1.41.12 (17-May-2010)
            Warning!  /dev/sda1 is mounted.             //文件系统已经挂载,因此会有警告
            Warning: skipping journal recovery because doing a read-only filesystem check.      //以只读的方式执行,不去修复
            /dev/sda1: clean, 39/128016 files, 49152/512000 blocks
      

  25.   

    fsck
            检查或者修复指定的文件系统,可以是设备名、挂载点,还可以是一个ext2的label,或者是一个UUID。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            fsck  [选项]  –t  systype  device
            fsck  [-sAVRTMNP]  [-C [fd]]  [-t fstype]  [filesys...]  [--]  [fs-specific-options]2、选项列表
            -s
                    检查的序列。如果有多个文件系统需要检查,那么按照顺序来操作。注意:e2fsck(8)默认以交互模式运行。要使e2fsck(8)在非交互式模式下运行,必须指定-p或-a选项,如果希望自动更正错误,则必须指定-n选项。
            -t fslist
                    指定要检查的文件系统的类型。当指定-A标志时,只检查与fslist匹配的文件系统。fslist参数是以逗号分隔的文件系统和选项说明符列表。这个逗号分隔的列表中的所有文件系统都可能以否定操作符“no”或“!”作为前缀,该操作符要求只检查fslist中未列出的文件系统。如果fslist中的所有文件系统都不以否定操作符作为前缀,那么将只检查fslist中列出的文件系统。
    选项说明符可能包含在逗号分隔的fslist中。它们必须具有“opts=s-option”的格式。如果存在选项说明符,那么只有在“/etc/fstat”的挂载选项字段中包含                s-option的文件系统才会被检查。如果选项说明符以否定操作符为前缀,那么只有那些没有fs-option的文件系统才会被选中。在它们的挂载选项字段“/etc/ffstab中”将被检查。例如,如果“opts=ro”出现在fslist中,那么只会检查“/etc/fstab”中列出的带有ro选项的文件系统。
    为了兼容Mandrake发行版,它的引导脚本依赖于对fsck程序的未经授权的ui更改,如果在fslist中找到了一个文件系统类型的循环,就会将它视为将opts=loop指定为-t选项的参数。
                    通常,文件系统类型是通过在“/etc/fstab”文件中搜索文件并使用相应的条目来推断的。如果无法推断该类型,并且只有一个文件系统作为-t选项的参数,fsck将使用指定的文件系统类型。如果该类型不可用,则使用默认的文件系统类型(当前Ext 2)。
            -A
                    遍历“/etc/fstab”文件,并尝试在一次运行中检查所有文件系统。此选项通常来自“/etc/rc”系统初始化文件,而不是用于检查单个文件系统的多个命令。除非指定了-P选项(见下文),否则将首先检查根文件系统。之后,将按照“/etc/fstab”文件中fs_passno(第六个)字段指定的顺序签入文件系统。跳过fs_passno值为0的文件系统,将检查fs_passno值大于零的文件系统。如果有多个文件系统具有相同的通行号,fsck将尝试并行地检查它们,尽管它将避免在同一个物理磁盘上运行多个文件系统检查。
    fsck不与任何其他设备并行检查堆叠设备。因此,在“/etc/fstab“文件中非常常见的配置是将根文件系统设置为fs_passno值为1,并将所有其他文件系统设置为fs_passno值为2。如果由于某种原因需要避免多个文件系统检查并行运行,则选择不使用此配置。例如,如果有问题的机器内存不足,因此过多的分页会引起关注。
                    fsck通常不会在调用文件系统的检查器之前检查设备是否实际存在。因此,如果文件系统特定的检查器返回致命错误,则不存在的设备可能导致系统在引导期间进入文件系统修复模式。“/etc/fstab”挂载选项不会失败,可以让fsck跳过不存在的设备。fsck还跳过具有特殊文件系统类型AUTO的不存在设备。
            -C [fs]
                    显示检查的进度。显示支持这些文件系统检查程序的完成/进度条(目前只用于ext 2和ext 3)。Fsck将管理文件系统检查器,以便它们中一次只显示一个进度条。gui前端可以指定文件描述符fd,在这种情况下,进度条信息将发送到该文件描述符。
            -M
                    不要检查已安装的文件系统,并返回安装文件系统的退出代码0。
            -N
                    不执行检查操作,只是演示一下 
            -P
                    设置-A标志时,与其他文件系统并行检查根文件系统。这不是世界上最安全的事情,因为如果根文件系统怀疑e2fsck(8)可执行文件可能被破坏了!这个选项主要是为那些不希望将根文件系统重新划分为小型和紧凑(这是真正正确的解决方案)的系统管理员提供的。
            -R
                    当使用-a标志检查所有文件系统时,跳过根文件系统
            -T
                    启动时不要显示标题
            -V
                    显示执行过程
            fs-specific-options
                    fsck不理解的选项被传递给特定于文件系统的检查器。这些参数不能使用参数,因为fsck无法正确猜测哪些参数可以选择选项,哪些参数不能。后面的选项和参数被视为要传递给文件系统特定检查器的文件系统特定选项。
                    请注意,fsck的设计并不是为了将任意复杂的选项传递给特定于文件系统的检查器。如果您正在做一些复杂的事情,请直接执行特定于文件系统的检查程序。如果您传递fsck一些非常复杂的选项和参数,并且它没有按照您的预期执行,那么就不要将它报告为bug。你几乎肯定在做一些不该用fsck做的事。
                    不同文件系统特定fsck的选项没有标准化。如果有疑问,请查阅文件系统特定检查器的手册页。虽然没有保证,但大多数文件系统检查程序都支持下列选项
            -a
                    自动修复文件系统。请注意e2fsck(8)只支持向后兼容。此选项映射到e2fsck的-p选项,与某些文件系统检查器支持的-a选项不同,该选项是安全的。
            -n
                    对于某些特定于文件系统的检查程序,-n选项将导致fs特定的fsck避免试图修复任何问题,但只需将此类问题报告给stdout。然而,并不是所有特定于文件系统的检查程序都是如此。特别是,如果给定该选项,fsck.reiserfs(8)将不会报告任何损坏。fsck.minix(8)根本不支持-n选项。
            -r
                    以交互方式修复文件系统(请求确认)。注意:如果多个fsck并行运行,使用此选项通常是个坏主意。还请注意,这是e2fsck的默认行为;它仅出于向后兼容性的原因支持此选项。
            -y
                    对于某些特定于文件系统的检查程序,-y选项将导致fs特定的fsck总是试图自动修复任何检测到的文件系统损坏。有时专家可能能够更好地手动驱动fsck。请注意,并非所有特定于文件系统的检查程序都实现了此选项。特别是fsck.minix(8)和fsck.lamfs(8)不支持-y选项。3、说明
            如果命令行上没有指定任何文件系统,并且没有指定-A选项,fsck将默认为串行地检查/etc/fstat中的文件系统。fsck指令可以有以下的返回值:
            0,没有错误。
            1,文件系统错误更正。
            2,系统应该重启。
            4,系统错误没有更正。
            8,操作错误。
            16,语法错误。
            32,用户取消fsck。
            128,共享库错误。
            检查多个文件系统时返回的退出代码是所检查的每个文件系统的退出代码的逐位OR。
            实际上,fsck只是linux下可用的各种文件系统检查器(fsck.fstype)的前端。文件系统特定的检查器首先在/sbin中搜索,然后在/etc/fs和/etc中搜索,最后在PATH环境变量中列出的目录中搜索。4、环境变量
            fsck的执行收到以下环境变量的影响:
            1)FSCK_FORCE_ALL_PARALLEL,如果设置了此环境变量,fsck将尝试并行运行所有指定的文件系统,而不管文件系统是否位于同一设备上。(这对于RAID系统或高端存储系统(如IBM或EMC等公司销售的存储系统)非常有用。)请注意,fs_passno值仍被使用。
            2)FSCK_MAX_INST,这个环境变量将限制一次运行的文件系统检查器的最大数量。这允许具有大量磁盘的配置避免fsck一次启动过多的文件系统检查器,这可能会使系统上可用的CPU和内存资源超载。为零,则可以生成无限数量的进程。这是当前的默认情况,但未来版本的fsck可能会尝试根据从操作系统收集会计数据自动确定可以运行多少个文件系统检查。
            3)PATH,PATH环境变量用于查找文件系统检查器,首先搜索一组系统目录:/sbin、/sbin/fs.d、/sbin/fs、/etc/fs和/etc/fs,然后搜索路径环境中的一组目录。
            4)FSTAB_FILE,这个环境变量允许系统管理员覆盖/etc/fstab文件的标准位置,对于正在测试fsck的开发人员也很有用。5、实例
    检查sdb4
             [root@localhost ~]# [root@localhost ~]# fsck -t swap /dev/sdb4
            fsck from util-linux-ng 2.17.2
            e2fsck 1.41.12 (17-May-2010)
            /dev/sdb4 was not cleanly unmounted, 强制检查.
            Resize inode not valid.  重建<y>? 是        第一步: 检查inode,块,和大小
            第二步: 检查目录结构
            第3步: 检查目录连接性
            Pass 4: Checking reference counts
            第5步: 检查簇概要信息
            Free 块s count wrong for 簇 #0 (7854, counted=7855).
            处理<y>? 是        Free 块s count wrong (15722, counted=15723).
            处理<y>? 是        /dev/sdb4: ***** 文件系统已修改 *****
            /dev/sdb4: 11/4096 files (0.0% non-contiguous), 661/16384 blocks
            [root@localhost ~]# 
      

  26.   

    swapon
          在指定的设备上启用交换分区,使用的设备或文件由专用文件参数提供。它可以是”-L label”或”-U UUID”,以指示一个设备的标签或UUID。对swapon的调用通常发生在系统引导脚本中,使所有交换设备都可用,因此分页和交换活动交叉在多个设备和文件之间。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          swapon  -s  [-h]  [-V]
          swapon  [-f]  [-p priority]  [-v]  specialfile...
          swapon  -a  [-e]  [-f]  [-v]2、选项列表
          -V | --version
                显示版本信息
          -h | --help
                显示帮助文档
          -v | --verbose
                执行的时候显示详细信息
          -a | --all
                打开所有的交换分区。除具有“noauto”选项的设备外,所有标记为“/etc/fstab”中“swap”的设备都是可用的。已经用作交换的设备将被悄悄跳过。
          -e | --ifexists
                跳过不存在的设备
          -f |  --fixpgsz
                如果交换空间的页大小与当前运行的内核不匹配,则重新初始化(exec/sbin/mkswap)。mkswap(2)初始化整个设备,不检查是否存在错误块。
          -L label
                启动指定label的交换分区,为此,需要访问/proc/分区。
          -p
                设置优先权0~32767,数字越大,优先权越高。将“pri=value”添加到与“swapon -a”一起使用的“/etc/fstab”选项字段中。
          -s | --summary
                按设备显示交换用途摘要,等价于“cat /proc/swaps “
          -U uuid
                启动指定uuid的交换分区3、说明
          您不应该在有漏洞的文件上使用swapon。交换NFS可能无法工作。swapon会自动检测并用旧的软件挂起数据重写交换空间签名(例如S1SUSPEND,S2SUSPEND,.)。问题是,如果我们不这样做,那么我们将在下一次尝试取消挂起时数据损坏。4、实例
    1)启动sdb4
          [root@localhost ~]# swap                 //创建交换分区
          Setting up swapspace version 1, size = 16380 KiB
          LABEL=wj, UUID=aec14728-0f33-4676-8bef-612ea1bdf985
          [root@localhost ~]# swapon /dev/sdb4                        //启用交换分区
          [root@localhost ~]# swapon -s /dev/sdb4                    //查看信息
          Filename Type Size Used Priority
          /dev/sdb4               partition 16376 0     -1
          [root@localhost ~]# 
    2)以标签的形式启动
          [root@localhost ~]# blkid -c /dev/null                 //找到交换分区的UUID
          /dev/sda1: UUID="059facc9-c58e-42d0-b8f5-7644c4574888" TYPE="ext4" 
          /dev/sda2: UUID="z3WRza-EIUl-dib9-7CGq-zRYt-DMdL-jT2ld9" TYPE="LVM2_member" 
          /dev/mapper/VolGroup-lv_root: UUID="9ad51e8e-3700-45a8-a195-531a95ff717d" TYPE="ext4" 
          /dev/mapper/VolGroup-lv_swap: UUID="2ebcaf57-3c6a-45be-8f34-3326d1fa1762" TYPE="swap"  
          [root@localhost ~]# free         //查看
                       total       used       free     shared    buffers     cached
          Mem:       1659316    1601620      57696          0     261664    1075780
          -/+ buffers/cache:     264176    1395140
          Swap:            0          0          0
          [root@localhost ~]# swapon -U 2ebcaf57-3c6a-45be-8f34-3326d1fa1762        //启动交换分区
          [root@localhost ~]# free            //查看
                 total       used       free     shared    buffers     cached
          Mem:       1659316    1604132      55184          0     261684    1075780
          -/+ buffers/cache:     266668    1392648
          Swap:      2940920          0    2940920
          [root@localhost ~]#  
      

  27.   

    swapoff
          关闭交换分区,同时可以刷新交换分区的缓存。关闭交换分区后,使用free指令查看内存,swap数值会减少。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          swapoff  [-v]  specialfile...
          swapoff  -a  [-v]2、选项列表
          -V | --version
                显示版本信息
          -h | --help
                显示帮助文档
          -v | --verbose
                执行的时候显示详细信息
          -a | --all
                关闭所有的交换分区3、实例
    关闭所有的交换分区
          [root@localhost ~]# swapoff –a         //关闭所有交换分区
          [root@localhost ~]# free                //查看内存使用状态
                       total       used       free     shared    buffers     cached
          Mem:       1659316     678908     980408          0      85608     369308
          -/+ buffers/cache:     223992    1435324
          Swap:            0          0          0          //swap分区不使用
      

  28.   

    dumpe2fs
          显示ext2、ext3、ext4文件系统的超级快和块组信息。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          dumpe2fs  [ -bfhixV ]  [ -o superblock=superblock ]  [ -o blocksize=blocksize ]  device2、选项列表
          -b
                显示文件系统中保留的损坏块
          -o superblock=superblock
                检查文件系统时,使用指定大小的超级块。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
          -o blocksize=blocksize
                检查文件系统时,指定块大小。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
          -f
                强制执行 
          -h
                只显示超级块信息,而不显示任何块组描述符详细信息
          -i
                显示从e2image获得的文件系统信息,使用设备作为image文件的路径名。
          -x
                以十六进制显示文件系统信息
          -V
                显示命令版本信息,并且退出3、实例
    显示sdb4的组块信息
          [root@localhost ~]# dumpe2fs /dev/sdb4
          dumpe2fs 1.41.12 (17-May-2010)
          Filesystem volume name:   <none>
          Last mounted on:          <not available>
          Filesystem UUID:          e2a0cb30-f3ca-47de-92b8-780296960d93
          Filesystem magic number:  0xEF53
          Filesystem revision #:    1 (dynamic)
                Group 0: (Blocks 1-8192)
            主 superblock at 1, Group descriptors at 2-2
            保留的GDT块位于 3-65
            Block bitmap at 66 (+65), Inode bitmap at 67 (+66)
            Inode表位于 68-323 (+67)
            7855 free blocks, 2037 free inodes, 2 directories
            可用块数: 338-8192
            可用inode数: 12-2048
          Group 1: (Blocks 8193-16383)
          
      

  29.   

    findfs
            查找指定卷标或者UUID的文件系统对应的设备文件。findfs将搜索系统中的磁盘,寻找具有标签匹配标签或与UUID相等的文件系统。如果找到文件系统,文件系统的设备名称将打印在stdout上。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            findfs  LABEL=label
            findfs  UUID=uuid2、选项列表
            无3、实例
    1)查找指定UUID的文件系统的设备
            [root@localhost ~]# findfs UUID=059facc9-c58e-42d0-b8f5-7644c4574888
            /dev/sda1
            You have new mail in /var/spool/mail/root
    2)查找指定LABEL的文件系统的设备 
            [root@localhost ~]# findfs LABEL=wj
            /dev/sdb4volname
            显示iso9660格式设备的卷标,一般情况下是CD-ROM。它还适用于包含iso-9660文件系统的普通文件。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            volname  [device]2、选项列表
            设备名
                    要显示卷标的设备,如果不指定,默认显示/dev/cdrom的卷标q3、实例
    1)不指定设备,显示默认设备的卷标 
            [root@localhost ~]# volname
            VBOXADDITIONS_5.2.18_124319  
    2)显示指定设备的卷标 
            [root@localhost ~]# volname /dev/sdb4         //这个设备不是iso9660,因此没有结果
                                    
            [root@localhost ~]# volname /weijie/my.iso  //这个设备是iso9660格式
            CDROM         e2label
            修改ext2、ext3、ext4文件系统的标签,如果没有指定标签,那么会显示当前的标签。文件系统标签最长16个字符。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            e2label  device  [new-label]2、选项列表
            device
            设备名称
            label
            标签名称。不指定名称,会显示当前名称。标签名称最多16个字符,超过16个字符将会被自动截断3、实例
    指定sdb4的标签
            [root@localhost ~]# e2label /dev/sdb4 hello     //指定标签名字
            [root@localhost ~]# e2label /dev/sdb4            //显示标签名字
            hello
            [root@localhost ~]# 

    sync
            将内存缓冲区的数据强制写入到磁盘,通常Linux系统会将数据写入到内存缓冲区,然后一次性将缓冲区的数据写入到磁盘。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            sync [选项]2、选项列表
            --version
                    显示版本信息
            --help
                    显示帮助文档3、实例
            无
      

  30.   

    tune2fs
            tune2fs允许系统管理员在Linux ext2、ext3或ext4文件系统上调整各种可调的文件系统参数。这些选项的当前值可以使用-l选项显示,也可以通过使用dumpe2fs (8)程序显示。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            tune2fs  [选项]  device
            tune2fs  [ -l ]  [ -c max-mount-counts ]  [ -e errors-behavior ]  [ -f ]  [ -i interval-between-checks ]  [ -j ]  [ -J journal-options ]  [ -m reserved-blocks-percentage ]  [-o  [^]mount-options[,...]  ]  [ -r reserved-blocks-count ]  [ -s sparse-super-flag ]  [ -u user ]  [ -g group ]  [ -C mount-count ]  [ -E extended-options ]  [  -L  volume-name  ]  [  -M  last-mounted-directory  ]  [ -O [^]feature[,...]  ]  [ -T time-last-checked ]  [ -U UUID ]  device2、选项列表
            -l
                    显示设备的详细信息
            -c max-mount-counts
                    检查文件系统之前,调整最大挂载次数。如果最大挂载计数为0或-1,e2fsck(8)和内核将忽略文件系统的挂载次数。如果对强制检查文件系统的挂载计数,将避免在使用日志文件系统时一次检查所有文件系统。
            -C mount-count
                    设置文件系统的挂载次数,如果设置为比-c选项设置的max-mount-counts参数更大的值,e2fsck(8)将在下次重新启动时检查文件系统。
            -e error-behavior
                    当检测到错误时,更改内核代码的行为。在任何情况下,文件系统错误都会导致e2fsck(8)在下一次引导时检查文件系统。错误行为可以是下列行为之一:
                    continue,继续执行正常执行。
                    remount-ro,重新以只读的方式挂载。
                    panic,产生kernel panic。
            -E extended-options
                    为文件系统设置扩展选项。扩展选项是逗号分隔的,可以使用相等号(‘=’)符号进行参数化。支持下列扩展选项:
                    stride=stride-size,为RAID数组配置具有步长文件系统块的文件系统。这是在移动到下一个磁盘之前读取或写入磁盘的块数。这主要影响文件系统元数据(如位图)在mke2fs(2)时间的放置,以避免将它们放置在单个磁盘上,这可能会损害性能。它也可以被块分配器使用。
    stripe_width=stripe-width,为RAID数组配置文件系统,每条带宽的文件系统块。这通常是stride-size *N,其中N是RAID中数据磁盘的数目(例如RAID 5 N+1,RAID 6 N+2)。这允许块分配器在写入数据时防止对RAID条中的奇偶性进行读-修改-写入(如果可能的话)。
    hash_alg=hash-alg,设置用于具有散列b树目录的文件系统的默认哈希算法。接受的有效算法有:legacy、half_md4和tea。
    mount_opts=mount_option_string,设置一组默认的挂载选项,这些选项将在挂载文件系统时使用。与使用-o选项指定的基于位掩码的默认挂载选项不同,mount_option_string是最大长度为63字节的任意字符串,存储在超级块中。ext 4文件系统驱动程序将首先应用基于位掩码的默认选项,然后在解析从mount (8)程序传递的挂载选项之前解析mount_option_string。此超级块设置仅在2.6.35以上内核中执行,而ext2和ext3文件系统驱动程序则完全不执行。
                    test_fs,在文件系统超级块中设置一个标志,指示可以使用试验性内核代码(如ext4dev文件系统)挂载它。
                    ^test_fs,清除test_fs标志,指示仅使用production-level文件系统代码挂载文件系统。
            -f
                    强制执行。当从具有外部日志的文件系统(或损坏到似乎有外部日志)而外部日志不可用的文件系统中删除Has_Journal文件系统特性时,此选项非常有用。
            -g group
                    设置可以使用保留文件系统块的组。group参数可以是数值gid或组名。如果给定组名,则在将其存储在超级块之前,将其转换为数字gid。
            -i  interval-between-checks[d|m|w]
                    调整两个文件系统检查之间的最大时间。没有后缀或d将数字间隔检查解释为天,m为月,w为周.值为零将禁用与时间相关的检查。强烈建议启用-c(mount-count-dependent)检查或-i(time-dependent)检查,以强制对文件系统进行定期完整的e2fsck(8)检查。如果不这样做,可能会导致文件系统损坏(由于磁盘、电缆、内存或内核错误)而忽略,最终导致数据丢失或损坏。
            -j
                    向文件系统添加ext3日志,如果没有指定-J选项,则将使用默认日志参数来创建存储在文件系统中的适当大小的日志(给定文件系统的大小)。请注意,您必须使用具有ext3支持的内核才能实际使用日志。
                    如果此选项用于在已安装的文件系统上创建日志,则将在文件系统的顶层目录中创建一个不可变的文件,即日志,因为它是在安装文件系统时创建日志inode的唯一安全方法。虽然ext 3日志是可见的,但在安装文件系统时删除它或修改它是不安全的;因此,文件被标记为不可变。在检查未挂载的文件系统时,e2fsck(8)将自动将.Journal文件移动到不可见的保留日志inode。对于除根文件系统以外的所有文件系统,这应该在下一个重新启动周期中自动和自然地发生。由于根文件系统是只读安装的,因此必须从救援软盘上运行e2fsck(8)才能完成此转换。
            -J journal-options
                    重写默认ext 3日志参数。日记选项是逗号分隔的,可以使用相等号(‘=’)符号进行参数化。支持下列日志选项:
                    size=journal-size,创建一个存储在文件系统中的日志,大小journal-size。日志的大小必须至少为1024个文件系统块(如果使用1k块,则为1MB;如果使用4k块,则为4MB)。并且可能不超过102,400个文件系统块。文件系统中必须有足够的空闲空间来创建这样大小的日志。
                    device=external-journal,将文件系统附加到位于外部日志上的日志块设备上。外部日志必须已使用以下命令创建“mke2fs  -O  journal_dev  external-journal”。注意,外部日志必须与将要使用的文件系统以相同的块大小进行格式化。此外,虽然支持将多个文件系统附加到单个外部日志,但Linux内核和e2fsck(8)目前还不支持共享外部日志。除了直接指定设备名称之外,还可以通过LABEL=label或UUID=UUID指定外部日志,以便通过存储在日志开头的ext2超级块中的卷标签或UUID来定位外部日志。使用dupe2fs(8)显示日志设备的卷标签和UUID。
                    size和device只能有一个。
            -L volume-label
                    设置文件系统卷标。ext2文件系统标签最多可以长达16个字符;如果卷标签超过16个字符,tune2fs将截断它并打印警告。卷标签可由mount(8)、fsck(8)和/etc/fstab(5)(可能还有其他)使用,方法是指定LABEL=volume_label,而不是/dev/hda 5这样的块特殊设备名。
            -m  reserved-blocks-percentage
                    设置只能由特权进程分配的文件系统百分比。保留一些文件系统块以供特权进程使用是为了避免文件系统碎片,并允许系统守护进程(如syAdd.1-d(8)在非特权进程被阻止写入文件系统之后继续正确运行。通常,保留块的默认百分比是5%。
            -M last-mounted-directory
                    设置最后的挂载目录
            -o [^]mount-option[,...]
                    在文件系统中设置或清除指定的默认挂载选项。默认的挂载选项可以被“/etc/fstab”(5)中指定的挂载选项覆盖,也可以在命令行参数上覆盖mount(8)。旧内核可能不支持此特性;特别是,在2.4.20之前的内核几乎肯定会忽略超级块中的默认挂载选项字段。可以通过用逗号分隔功能来清除或设置多个挂载选项。以插入字符(‘^’)为前缀的挂载选项将在文件系统的超级块中清除;没有前缀字符的挂载选项或以‘+’作为前缀的挂载选项将添加到文件系统中。可以使用tune2fs设置或清除下列挂载选项:
                    debug,bsdgroups,user_xattr,acl,uid16,journal_data,journal_data_ordered,journal_data_writeback,nobarrier,block_validity,discard,nodelalloc
            -O [^]feature[,...]
                    设置或清除文件系统中指定的文件系统特性(选项)。多个文件系统特性可以通过用逗号分隔特性来清除或设置。以插入字符(‘^’)为前缀的文件系统特性将在文件系统的超级块中清除;没有前缀字符或前缀为‘+’的文件系统特性将添加到文件系统中。可以使用tune2fs设置或清除下列文件系统特性:dir_index,filetype,flex_bg,has_journal,large_file,resize_inode,sparse_super,uninit_bg。
            -r reserved-blocks-count
                    设置保留文件系统块的数目
            -T time-last-checked
                    使用e2fsck设置上次检查文件系统的时间。时间使用当前(本地)时区进行解释。这在使用逻辑卷管理器对文件系统进行一致快照的脚本中很有用,然后在空闲时间检查文件系统,以确保它没有因为硬件问题而损坏,等等。如果文件系统是干净的,那么这个选项可以用来设置原始文件系统上的最后一次检查时间。最后一次检查的格式是国际日期格式,有一个可选的时间说明符,即YYYYMMDD[HH[MM[SS]。关键字Now也被接受,在这种情况下,上一次检查时间将设置为当前时间。
            -u user
                    设置可以使用保留文件系统块的用户。用户可以是uid或用户名。如果给定用户名,则将其转换为数字uid,然后将其存储在超级块中。
            -U UUID
                    将文件系统的通用唯一标识符(UUID)设置UUID。UUID的格式是由连字符分隔的一系列十六进制数字,如“c1b9d5a2-f162-11cf-9ece-                0020afc76f16”。UUID参数也可能是以下内容之一:
                    clear,清除UUID。
                    random,产生一个随机的UUID。
                    time,产生一个基于时间的UUID。3、实例
    1)查看sdb4的详细信息 
            [root@localhost ~]# tune2fs -l /dev/sdb4
            tune2fs 1.41.12 (17-May-2010)
            Filesystem volume name:   hello
            Last mounted on:          <not available>
            Filesystem UUID:          e2a0cb30-f3ca-47de-92b8-780296960d93
            …
            First inode:              11
            Inode size:           128
            Default directory hash:   half_md4
            Directory Hash Seed:      4930bf0f-771e-4940-9255-bee40d138079
    2)设置最大挂载次数 
            [root@localhost ~]# tune2fs -c 30 /dev/sdb4       //设置最大挂载次数
            tune2fs 1.41.12 (17-May-2010)
            Setting maximal mount count to 30
            You have new mail in /var/spool/mail/root
            [root@localhost ~]# tune2fs -l /dev/sdb4         //查看详细信息
            tune2fs 1.41.12 (17-May-2010)
            Filesystem volume name:   hello
            Maximum mount count:      30                         //最大挂载次数已经修改为30
            Directory Hash Seed:      4930bf0f-771e-4940-9255-bee40d138079
            [root@localhost ~]#       
      

  31.   

    可以使用lm-sensors工具包看看,必须先要安装这个包
      

  32.   

    resize2fs
          调整ext2\ext3\ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小。如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小。
          size参数指定所请求的文件系统的新大小。如果没有指定任何单元,那么size参数的单位应该是文件系统的文件系统块大小。size参数可以由下列单位编号之一后缀:“s”、“K”、“M”或“G”,分别用于512字节扇区、千字节、兆字节或千兆字节。文件系统的大小可能永远不会大于分区的大小。如果未指定Size参数,则它将默认为分区的大小。
          resize2fs程序不操作分区的大小。如果希望扩大文件系统,必须首先确保可以扩展基础分区的大小。如果您使用逻辑卷管理器LVM(8),可以使用fdisk(8)删除分区并以更大的大小重新创建它,或者使用lvexport(8)。在重新创建分区时,请确保使用与以前相同的启动磁盘圆柱来创建分区!否则,调整大小操作肯定无法工作,您可能会丢失整个文件系统。运行fdisk(8)后,运行resize2fs来调整ext 2文件系统的大小,以使用新扩大的分区中的所有空间。
          如果希望缩小ext2分区,请首先使用resize2fs缩小文件系统的大小。然后可以使用fdisk(8)缩小分区的大小。缩小分区大小时,请确保不使其小于ext2文件系统的新大小。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
          resize2fs  [选项]  device  [size]
          resize2fs  [ -fFpPM ]  [ -d debug-flags ]  [ -S RAID-stride ]  device  [ size ]2、选项列表
          -d debug-flags
                打开各种resize2fs调试特性,如果它们已经编译成二进制文件的话。调试标志应该通过从以下列表中添加所需功能的数量来计算:
                2,调试块重定位。
                4,调试iNode重定位。
                8,调试移动inode表。
          -f
                强制执行,覆盖一些通常强制执行的安全检查。
          -F
                执行之前,刷新文件系统的缓冲区
          -M
                将文件系统缩小到最小值
          -p
                显示已经完成任务的百分比
          -P
                显示文件系统的最小值
          -S RAID-stride
                resize2fs程序将启发式地确定在创建文件系统时指定的RAID步长。此选项允许用户显式地指定RAID步长设置,以便由resize2fs代替。3、实例
    1)显示sda1最小值 
          [root@localhost ~]# resize2fs -P /dev/sda1
          resize2fs 1.41.12 (17-May-2010)
          Estimated minimum size of the filesystem: 37540
    2)设置sdb4为1k 
          [root@localhost ~]# resize2fs /dev/sdb4 1k
          resize2fs 1.41.12 (17-May-2010)
          resize2fs: New size smaller than minimum (373)     //小于最小值,失败
      

  33.   

    e2image
            e2Image程序将位于设备上的ext2、ext3或ext4文件系统元数据保存到由图像文件指定的文件中。通过对这些程序使用-i选项,image文件可以由dupe2fs和调试器来检查。这可以帮助专家恢复严重损坏的文件系统。
            如果image文件是”-“,那么e2image的输出将被发送到标准输出,以便输出可以管道到另一个程序,如gzip(1)。(请注意,目前只有在使用-r选项创建原始image文件时才支持这一点,因为创建普通image文件或QCOW 2映像的过程目前需要对文件进行随机访问,这不能使用管道进行。)
    最好为系统上的所有文件系统创建映像文件,并定期保存分区布局(可以使用fdisk-l命令生成)。image文件应该存储在它所包含的数据的文件系统以外的其他文件系统上,以确保在文件系统严重损坏的情况下可以访问这些数据。
            为了节省磁盘空间,e2Image将image文件创建为稀疏文件,或以QCOW2格式创建。因此,如果需要将稀疏image文件复制到另一个位置,则应该首先对其进行压缩,或者使用GNU版本的cp ” sparse=always”选项。这不适用于QCOW2映像,它并不稀疏。
            ext2映像文件的大小主要取决于文件系统的大小和正在使用的inode数量。对于一个典型的10GB文件系统,120万个节点中有20万个节点在使用,image文件将大约为35兆字节;在55万个节点中使用15000个节点的4G文件系统将产生一个3MB的image文件。image文件通常是可压缩的;占用磁盘上32 MB空间的image文件通常会压缩到3或4MB。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            e2image [ -rsI ] device image-file2、选项列表
            -I
                    将文件中的元数据恢复到分区
            -r
                    创建raw格式的image
            -Q
                    创建QCOW2格式的image3、说明
            1)“-I”选项
            “-I”选项将导致e2Image将存储在映像文件中的元数据重新安装到设备上。它可用于在紧急情况下将文件系统元数据还原回设备。只有当其他选择失败时,才应该使用”-I”选项作为一种绝望措施。如果文件系统在创建image文件后发生了更改,数据将丢失。通常,您应该首先对文件系统进行完整的映像备份,以便以后尝试其他恢复策略。
            2)“-r”选项
            “-r”选项将创建一个原始image文件,而不是普通的image文件。原始image文件与普通image文件有两种不同之处。首先,将文件系统元数据放置在适当的位置,以便e2fsck、dupe2fs、调试器等。可以直接在原始image文件上运行。为了尽量减少原始映像文件占用的磁盘空间,将该文件创建为稀疏文件。(请注意使用不了解如何创建稀疏文件的实用程序复制或压缩/解压缩该文件;该文件将与文件系统本身一样大!)其次,原始image文件还包括标准image文件没有的间接块和目录块,尽管这在将来可能会发生变化。
            当将文件系统作为bug报告的一部分发送给维护人员时,有时会使用原始映像文件到e2fsprogs。当以这种方式使用时,建议的命令如下(用适当的设备替换hda1):“e2image  -r  /dev/hda1  -  |  bzip2  >  hda1.e2i.bz2”。这将只发送元数据信息,没有任何数据块。但是,目录块中的文件名仍然可以显示关于文件系统内容的信息,bug报告人员可能希望将这些信息保密。要解决此问题,可以指定“-s”选项。这将导致e2Image对目录条目进行置乱,并在写入image文件之前将目录块中任何未使用的部分清零。但是,“-s”选项将防止分析与散列树索引目录相关的问题
            请注意,即使您将“/dev/hda 1”替换为另一个原始磁盘映像或先前由e2Image创建的QCOW2映像,这也是可行的。
            3)“-Q”选项
            “-Q”选项将创建一个QCOW2 image文件,而不是普通的或原始的image文件。QCOW2 image包含原始image所做的所有信息,但是与原始image不同的是,它并不稀疏。QCOW 2映像通过将数据以特殊格式存储,并将数据紧密地打包在一起,从而将磁盘空间的数量降到最低,从而避免了漏洞,同时仍然最小化了大小。
            为了将文件系统作为bug报告的一部分发送给维护人员到e2fsprogs,请使用以下命令:“e2image  -Q  /dev/hda1  hda1.qcow2“、”bzip2  -z  hda1.qcow2”。这将只发送元数据信息,没有任何数据块。但是,目录块中的文件名仍然可以显示关于文件系统内容的信息,bug报告人员可能希望将这些信息保密。要解决此问题,可以指定“-s”选项。这将导致e2Image对目录条目进行置乱,并在写入image文件之前将目录块中任何未使用的部分清零。但是,“-s”选项将防止分析与哈希树索引目录相关的问题.
            请注意,e2Image创建的qcow2映像是规则的qcow2映像,可以通过知道qcow2格式的工具进行处理,例如qemu-img。4、实例
    保存sdb4元数据 
            [root@localhost ~]# e2image /dev/sdb4 sdb4
            e2image 1.41.12 (17-May-2010)
            [root@localhost ~]# file sdb4
            sdb4: Linux rev 1.0 ext2 filesystem data
      

  34.   

    ln
            为指定的目录或者文件创建链接,如果没有指定链接名,那么会创建一个和源文件名字一样的链接。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            ln  [OPTION]... [-T]  TARGET  LINK_NAME   (1st form)
            ln  [OPTION]... TARGET                  (2nd form)
            ln  [OPTION]... TARGET... DIRECTORY     (3rd form)
            ln  [OPTION]...  –t  DIRECTORY  TARGET...  (4th form)
            第一种用法,创建一个名字为LINK_NAME的目标链接;第二种用法,创建指向当前目录中目标的链接;第3和第4种用法,创建指向目录中每个目标的链接。默认情况下创建硬链接,使用使用 “symbolic”创建符号链接。创建硬链接时,每个目标都必须存在。符号链接可以保存任意文本;如果稍后解析,则相对链接将根据其父目录进行解释。2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            --backup[=CONTROL]
                    为已经存在的链接创建备份
            -b
                    和“—backup”一样,但是没有参数
            -d | -F | --directory
                    允许超级用户创建硬链接
            -f | --force
                    强制创建,如果已经存在,删除原来的硬链接
            -i | --interactive
                    确认是否删除目的文件
            -L | --logical
                    创建硬链接到符号链接的关联
            -n | --no-dereference
                    处理与某个目录的symlink的目标,就像它是一个正常文件一样
            -P | --physical
                    创建符号链接的硬链接
            -s | --symbolic
                    创建符号链接
            -S | --suffix=SUFFIX
                    重写通常的备份后缀
            -t | --target-directory
                    指定要创建链接的目录
            -T | --no-target-diretory
                    将链接作为普通文件
            -v | --verbose
                    打印每个链接文件的名字3、实例
    1)创建一个硬链接 
            [root@localhost weijie]# ln -v my.iso link1
            "link" => "my.iso"
    2)创建一个符号链接 
            [root@localhost weijie]# ln -v -s my.iso link2
            "link2" -> "my.iso"
            [root@localhost weijie]# ls -l
            总用量 1068
            -rw-r--r-- 3 root root 358400 9月   7 15:46 link1
            lrwxrwxrwx 1 root root      6 9月  10 12:13 link2 -> my.iso
    mkdir
            如果目录不存在,那么就创建目录。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            mkdir  [选项]  dir2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -m | --mode=MODE
                    设置目录的权限
            -p | --parents
                    创建多层目录的时候,如果父目录不存在,那么首先创建父目录
            -v | --vervose
                    显示执行过程3、实例
    1)创建一个最大权限的目录 
            [root@localhost weijie]# mkdir -m 777 test
            [root@localhost weijie]# ls -l
            总用量 360
            -rw-r--r-- 1 root root      0 9月   7 09:11 1.c
            -rw-r--r-- 1 root root 358400 9月   7 15:46 my.iso
            drwxrwxrwx 2 root root   4096 9月  10 11:33 test
    2)创建目录及其父目录 
            [root@localhost weijie]# mkdir -v test01/test           //目录test01不存在,无法在其下创建test目录
            mkdir: 无法创建目录"test01/test": 没有那个文件或目录        [root@localhost weijie]# mkdir -p -v test01/test         //使用选项-p,当目录test01不存在的时候,首先创建test01
            mkdir: 已创建目录 "test01"
            mkdir: 已创建目录 "test01/test"
            You have new mail in /var/spool/mail/root
      

  35.   

    学习linux的基础的好东西,最好是能弄成一个下载的整体文档;怎么感觉是找了本书来刷积分的。
      

  36.   

    chgrp
            改变文件或者目录所属的群组,使用参数“--reference”,可以改变文件的群组为指定的关联文件群组。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法
            chgrp  [选项]  group  file
            chgrp  [选项]  –reference=RFILE  file2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --changes
                    和verbose一样,但是只有在发生改变的时候才显示详细信息
            --dereference
                    改变符号链接所指向的文件,而不是符号链接自己。这是默认选项
            -h | --no-dereference
                    修改符号链接,仅适用于可更改符号链接所有权的系统
            --no-preserve-root
                    不要特殊处理“/”,默认选项
            --preserve-root
                    未能对“/”进行递归操作
            -f | --silent | --quiet
                    忽略部分错误信息
            --reference=file
                    使用关联文件所属的组,而不是指出一个具体的值
            -R, --recursive
                    递归处理目录及其内部的文件
            -v | --verbose
                    显示详细信息
            -H
                    如果命令行参数是指向目录的符号链接,请遍历它。配合”-R”使用
            -L
                    遍历到遇到的目录的每个符号链接。配合”-R”使用
            -P
                    不要遍历任何符号链接(默认)。配合”-R”使用3、实例-
    1)修改文件所属的组
            [root@localhost weijie]# ls –l                   //使用ls查看详细信息
            总用量 1072
            -rw-r--r-- 1 root root      0 9月   7 09:11 1.c
            -rw-r--r-- 3 root root 358400 9月   7 15:46 link
             [root@localhost weijie]# chgrp weijie 1.c    //修改组
            [root@localhost weijie]# ls –l                  //再次查看,修改已经成功
            总用量 1072
            -rw-r--r-- 1 root weijie      0 9月   7 09:11 1.c
            -rw-r--r-- 3 root root   358400 9月   7 15:46 link
    2)使用选项“--reference”
            [root@localhost weijie]# chgrp --reference=1.c my.iso         //1.c的组已经是weijie了
            [root@localhost weijie]# ls -l
            总用量 1072
            -rw-r--r-- 1 root weijie      0 9月   7 09:11 1.c
            -rw-r--r-- 3 root weijie 358400 9月   7 15:46 my.iso           //my.iso所属的组也变成wiejie
    3)只修改符号链接自己
            [root@localhost wj]# ls -l 1.c 11.c                               //查看文件信息
            lrwxrwxrwx 1 root root 3 10月 26 10:11 11.c -> 1.c
            -rw-r--r-- 1 root root 0 10月 24 10:12 1.c
            [root@localhost wj]# chgrp -h weijie 11.c                       //修改组
            [root@localhost wj]# ls -l 1.c 11.c                              //查看文件信息,只有符号链接自己的组被修改了
            lrwxrwxrwx 1 root weijie 3 10月 26 10:11 11.c -> 1.c
            -rw-r--r-- 1 root root   0 10月 24 10:12 1.c