开发者社区> 问答> 正文

Linux基础命令

记录一下Linux的常用命令

展开
收起
一生有你llx 2018-08-07 09:12:02 31561 0
12 条回答
写回答
取消 提交回答
  • ReLinux基础命令
    这命令真多,谁能全部记得住?
    2019-03-18 21:53:30
    赞同 展开评论 打赏
  • 感谢分享  
    2019-03-07 17:17:18
    赞同 展开评论 打赏
  • ReLinux基础命令
    刷屏吗?
    2019-01-31 22:34:57
    赞同 展开评论 打赏
  • ReLinux基础命令
    今日论坛不能回帖了?
    2018-12-25 09:53:54
    赞同 展开评论 打赏
  • 艺赫广告
    ReLinux基础命令
    感谢分享。
    2018-12-20 15:39:00
    赞同 展开评论 打赏
  • ReLinux基础命令
    Linux的常用命令
    2018-12-02 17:04:31
    赞同 展开评论 打赏
  • ReLinux基础命令
    软设学习交流群【136174991】 一起讨论学习
    2018-11-26 17:17:50
    赞同 展开评论 打赏
  • 一个懂点编程,懂点硬件的人
    ReLinux基础命令
    这是您个人做的吗?花了不少时间吧
    里面文件居然超过1000个,我都无法转存
    2018-11-11 18:06:27
    赞同 展开评论 打赏
  • 2018-11-02 20:53:57
    赞同 展开评论 打赏
  • ReLinux基础命令
    格式化一下不?
    2018-10-30 10:29:00
    赞同 展开评论 打赏
  • 后端开发者,阿里云用户
    太长了,我不想看~~
    2018-10-23 08:33:33
    赞同 展开评论 打赏
  • 专注物联网
    ReView组件
    Arch
         Arch指令主要用于显示当前主机的硬件结构类型,我们可以看到它输出的结果有:i386、i486、mips、alpha等。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
        arch  [选项]

    2、选项列表
        --help    
            显示此命令的帮助信息
        --version
            显示命令的版本信息

    3、实例
    点击(此处)折叠或打开

    [root@localhost ntop-4.0.1]# arch
    i686 //可以看到当前是32位的i686机器
    [root@localhost ntop-4.0.1]# arch --help
    用法:arch [选项]...
    输出机器的体系结构。
    --help        显示此帮助信息并退出
    --version        显示版本信息并退出
    请向 bug-coreutils@gnu.org 报告arch 的错误
    GNU coreutils 项目主页:
    GNU 软件一般性帮助:
    请向 报告arch 的翻译错误
    要获取完整文档,请运行:info coreutils 'arch invocation'
    [root@localhost ntop-4.0.1]# arch --version
    arch (GNU coreutils) 8.4
    Copyright (C) 2010 Free Software Foundation, Inc.
    许可证:GPLv3+:GNU 通用公共许可证第3 版或更新版本。
    本软件是自由软件:您可以自由修改和重新发布它。
    在法律范围内没有其他保证。
    由David MacKenzie 和Karel Zak 编写。
    [root@localhost ntop-4.0.1]#

    -------------------------

    ReView组件
    lspci
        lspci是一种实用程序,用于在系统中显示有关pci总线的信息以及连接到它们的设备。
        默认情况下,它显示了一个简单的设备列表。使用下面描述的选项可以请求更详细的输出或其他程序用于解析的输出。
        如果要报告PCI设备驱动程序或lspci本身中的bug,请使用选项“lspci-vvx”或更好的“lspci-vvxxx”的输出(不过,可能会有警告)。
        输出的某些部分,特别是在高度冗长的模式下,只有经验丰富的PCI黑客才能理解Proba-Bly。有关字段的确切定义,请参阅PCI规范或head er.h和/usr/include/linux/pci.h文件。
        在许多操作系统上,对PCI配置空间的某些部分的访问仅限于root用户,因此对于普通用户来说,lspci的功能是有限的。然而,lspci尽力显示尽可能多的可用信息,并将所有其他信息标记为<访问拒绝>文本
        该命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
        lspci  [选项]
        lspci命令中,我们经常会看到一些“[]:[].[]”这样格式的数字,例如“00:01.0”,这一个参数是总线编号,第二个是插槽编号,第三个是功能编号,它们都是十六进制的数字。

    2、选项列表
        1)基础显示模式
        -m
            以向后兼容并且机器可读的方式转储设备信息
        -mm
            以机器可读的方式转储设备信息,以便脚本解析
        -t
            以树形结构显示pci设备的层次关系,包含所有总线、桥梁、设备和它们之间的连接
        2)显示选项
        -n
            显示pci设备的厂商和设备代码
        -v
            显示所有设备的详细信息
        -vv
            以更加详细的方式显示设备信息
        -k
            显示处理每个设备的内核驱动程序以及能够处理该设备的内核模块。默认情况下,当-v以正常的输出模式打开时。(目前只在内核2.6或更高版本的Linux上工作。)
        -x
            显示配置空间标准部分的十六进制转储(CardBus桥的前64字节或128字节)。
        -xxx
            显示整个PCI配置空间的十六进制转储。当您试图读取配置空间的某些部分时,只有当几个PCI设备崩溃时,它才可用,而且只适合root用户。(这种行为可能没有违反PCI标准,但至少非常愚蠢)。然而,这样的设备很少见,所以您不必太担心
        -xxxx
            显示扩展(4096字节)PCI配置空间在PCI-X2.0和PCIExpress总线上可用的十六进制转储
        -b
            以总线为中心的视图。显示由pci总线上的卡看到的所有irq编号和地址。注意,不是有内核看到的
        -D
            始终显示PCI域号。默认情况下,lspci在只有域0的机器上略过它们。
         3)解析ID为名称的选项
        -n
            将PCI供应商和设备代码显示为编号,而不是在PCI ID列表中查找它们。
        -nn
            显示pci供应商和设备的代码和名字
        -q
            如果在本地pci.id文件中找不到设备,则使用DNS查询中央PCI ID数据库。如果DNS查询成功,结果将缓存在~/.pciids-cache中,即使-q不再给出,也会在后续运行中识别。请在自动脚本中使用此开关时要小心,以避免数据库服务器超载。
        -qq
            和“-q”一样,但是本地缓存被重置
        -Q
            查询中央数据库,即使是本地也有缓存数据可查。如果您怀疑显示的条目是错误的,请使用此方法。
        4)选择设备的选项
        -s [域]:[总线]:[插槽].[功能]
            只显示指定域中的设备(如果您的计算机有几个主机桥接器,它们可以共享公共总线编号空间,或者每个设备可以自己寻址PCI域;域编号为0到ffff)、总线编号(0到ff)、插槽编号(0至1f)、函数编号(0至7)。地址可以省略或设置为“*”,这两者都意味着“任何值”。所有数字都是十六进制的。例如,“0:”表示总线0上的所有设备,“0”表示设备0在任何总线上的所有功能,“0.3”在所有总线上选择设备0的第三功能,“4”仅显示每个设备的第四个功能。
        -d [厂商:设备]
            显示指定厂商和设备的信息,厂商号和设备号都是十六进制。
        5)其他选项
        -i
            指定pci设备编号文件,默认文件是/usr/share/hwdata/pci.ids
        -p
            使用指定文件作为PCI ID的映射文件,默认使用/lib/Module/kernel_version/Modes.pcimap
        -M
            调用总线映射模式,它对所有pci设备,包括配置错误的桥后面的设备进行彻底扫描。此选项只在直接硬件访问模式下提供有意义的结果,通常需要根权限。请注意,总线。。程序只扫描pci域0。
        6)PCI设备访问选项
        -A
            库支持多种方法来访问PCI硬件。默认情况下,它使用第一个可用的访问方法,但您可以使用此选项覆盖此决定。你可以使用“-A help”来先看可用的方法
        -O =
            库的行为由多个命名参数控制。此选项允许设置任何参数的值。使用“-Ohelp“获取已知参数及其默认值的列表。
        -H1
            通过Intel配置机制1直接访问硬件
        -H2
            通过Intel配置机制2直接访问硬件
        -F
            与其访问真正的硬件,不如从先前运行的lspci-x生成的给定文件中读取设备及其配置寄存器的值列表,这对于分析用户提供的错误报告非常有用,因为您可以任何方式显示硬件配置,而不需要使用更多转储请求来干扰用户。
        -G
            提高库的调试级别

    3、关于选项的说明
        1)关于“–m”选项
        如果您打算自动处理lspci的输出,请使用本节中描述的机器可读的输出格式之一(-m、-vm、-vmm)。所有其他格式都可能在lspci的不同版本之间发生变化。所有的数字都是以十六进制打印的。如果要处理数字ID而不是名称,请添加-n开关.
    在简单格式中,每个设备都在一行上进行描述,这些参数被格式化为适合传递给shell脚本的参数,即由空格分隔的值,必要时引用和转义。其中一些参数是位置:槽、类、供应商名称、设备名称、子系统名称和子系统名称(如果设备没有子系统,最后两个参数是空的);其余的参数是选项
        2)关于“-vmm”选项
        详细的输出是由空行分隔的记录序列,每条记录用一行来描述一个设备,每一行包含一个‘tag:value’对。标记和值由单个制表符分隔。记录或记录中的行都不按任何特定顺序排列。标记区分大小写。下面是已经定义的tag:
        Slot,设备所在的插槽名称
        Class,类名
        Vendor,厂商名
        Device,设备名
        SVendor,子系统供应商名字
        SDevice,子设备名字
        PhySlot,设备所在的物理插槽
        Rev,修序号
        ProgIf,编程接口
        Driver,当前正在处理设备的内核驱动程序
        Module,内核模块的报告

    4、实例
        1)以机器可读的方式显示
    [root@localhost ntop-4.0.1]# lspci -m
    00:00.0 "Host bridge" "Intel Corporation" "440FX - 82441FX PMC [Natoma]" -r02 "" ""
    00:01.0 "ISA bridge" "Intel Corporation" "82371SB PIIX3 ISA [Natoma/Triton II]" "" ""
    00:01.1 "IDE interface" "Intel Corporation" "82371AB/EB/MB PIIX4 IDE" -r01 -p8a "" ""
    00:02.0 "VGA compatible controller" "InnoTek Systemberatung GmbH" "VirtualBox Graphics Adapter" "" ""


        2)显示设备代码和名字
    [root@localhost ntop-4.0.1]# lspci –nn
    //设备代码0600, 厂商代码8086:1237
    00:00.0 Host bridge [0600: Intel Corporation 440FX - 82441FX PMC [Natoma [8086:1237 (rev 02)
    00:01.0 ISA bridge [0601: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II [8086:7000
    00:01.1 IDE interface [0101: Intel Corporation 82371AB/EB/MB PIIX4 IDE [8086:7111 (rev 01)


        3)以树形结构显示
    [root@localhost ntop-4.0.1]# lspci –t
    //总线编号,插槽,功能编号
    -[0000:00-+-00.0
               +-01.0
               +-01.1
               +-02.0


        4)显示指定位置的设备信息
    [root@localhost ntop-4.0.1]# lspci -s 0000:01.0
    00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II


        5)显示指定厂商和设备号的设备信息
    [root@localhost ntop-4.0.1]# lspci -d 8086:1237
    00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma (rev 02)

    -------------------------

    ReView组件
    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

    -------------------------

    ReView组件
    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

    -------------------------

    ReView组件
    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 seconds

    2)设置硬件时钟
    [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 seconds

    3)将硬件时钟设置成本地时间格式
    [root@localhost ntop-4.0.1]# hwclock --localtime
    2018年09月04日
    星期二 01时05分46秒  -0.462990 seconds

    4)将硬件时钟设置成系统时间
    [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

    -------------------------

    ReView组件
    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/

    -------------------------

    ReView组件
    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

    -------------------------

    ReLinux基础命令
    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 98”将不显示1998年的日历。两个参数表示月份(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

    -------------------------

    ReLinux基础命令
    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。

    -------------------------

    ReLinux基础命令
    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

    -------------------------

    ReLinux基础命令
    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:关闭

    -------------------------

    ReLinux基础命令
    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
                时区的缩写,例如EDT

    3、说明
          默认情况下,使用数字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

    -------------------------

    ReLinux基础命令
    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 1

    3、实例
    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 20180909090000 weijie  //可以看到用户weijie在9.9之前没有登录
            wtmp begins Wed Aug  8 18:02:52 2018

            [root@localhost ~]# last -t 20180909090000 root  //用户root在9.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

    -------------------------

    ReLinux基础命令
    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 | --version


    2、选项列表
          -h | --help
                帮助信息
          -V | --version
                显示命令版本信息
          --status-all
                显示所有的服务状态
          --full-restart
                重启服务,运行两次,先停止后开启
          [service_name  cmd]
                控制服务。例如service vsftpd start。cmd可以是start、stop、restart

    3、实例
          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 已停

    -------------------------

    ReLinux基础命令
    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 ~]#

    -------------------------

    ReLinux基础命令
    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 /]#

    -------------------------

    ReLinux基础命令
    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. XXXXXXXXXX

    3、实例
    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

    -------------------------

    ReLinux基础命令
    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类型的
        

    -------------------------

    ReLinux基础命令
    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

    -------------------------

    ReLinux基础命令
    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,默认情况会生成uuid

    3、说明
            交换头不触及第一个块。引导加载程序或磁盘标签可以在那里,但不建议安装。建议的设置是为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

    -------------------------

    ReLinux基础命令
    mkisofs
    内容太多,参考
    http://blog.itpub.net/29270124/viewspace-2218137/

    -------------------------

    ReLinux基础命令
    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

    -------------------------

    ReLinux基础命令
    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 ~]#  

    -------------------------

    ReLinux基础命令
    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分区不使用

    -------------------------

    ReLinux基础命令
    dumpe2fs
          显示ext2、ext3、ext4文件系统的超级快和块组信息。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          dumpe2fs  [ -bfhixV ]  [ -o superblock=superblock ]  [ -o blocksize=blocksize ]  device

    2、选项列表
          -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)
          。。。

    -------------------------

    ReLinux基础命令
    findfs
            查找指定卷标或者UUID的文件系统对应的设备文件。findfs将搜索系统中的磁盘,寻找具有标签匹配标签或与UUID相等的文件系统。如果找到文件系统,文件系统的设备名称将打印在stdout上。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            findfs  LABEL=label
            findfs  UUID=uuid

    2、选项列表
            无

    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/sdb4





    volname
            显示iso9660格式设备的卷标,一般情况下是CD-ROM。它还适用于包含iso-9660文件系统的普通文件。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            volname  [device]

    2、选项列表
            设备名
                    要显示卷标的设备,如果不指定,默认显示/dev/cdrom的卷标q

    3、实例
    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、实例
            无

    -------------------------

    ReLinux基础命令
    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 ]  device

    2、选项列表
            -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 ~]#      

    -------------------------

    ReLinux基础命令
    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)      //小于最小值,失败

    -------------------------

    ReLinux基础命令
    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-file

    2、选项列表
            -I
                    将文件中的元数据恢复到分区
            -r
                    创建raw格式的image
            -Q
                    创建QCOW2格式的image

    3、说明
            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

    -------------------------

    ReLinux基础命令
    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]# l n -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  [选项]  dir

    2、选项列表
            --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

    -------------------------

    ReLinux基础命令
    chgrp
            改变文件或者目录所属的群组,使用参数“--reference”,可以改变文件的群组为指定的关联文件群组。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            chgrp  [选项]  group  file
            chgrp  [选项]  –reference=RFILE  file

    2、选项列表
            --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

    -------------------------

    ReLinux基础命令
    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    回 40楼haohaoganhuo的帖子
    是的,自己做的

    -------------------------

    ReLinux基础命令
    chmod
            改变文件或者目录的权限,可以用数字或者字母来标识权限。在数字模式下:0,代表没有权限;1,代表可执行;2,代表可读;4,代表可写;多个权限可以相加。在字符模式下:x,代表执行;r,代表读;w,代表写;g,代表组权限;o,代表组内其他用户权限;u,代表用户权限ls命令中,看到的权限分别是:用户权限、组权限、组内其他用户权限。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            chmod  [选项]  mode  file
            chmod  [选项]  八进制模式  file
            chmod  [选项]  –reference=RFILE  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --changes
                    和verbose一样,但是只有在发生改变的时候才显示详细信息
            --preserve-root
                    禁止对根目录递归炒作
            --no-preserve-root
                    不特殊对待根目录,默认值
            -f | --silent | --quiet
                    忽略部分错误信息
            --reference=file
                    使用关联文件所属的组
            -v | --verbose
                    显示详细信息
            -R | --recursive
                    用递归的方式改变所有的目录和子目录

    3、说明
            chmod根据模式更改每个给定文件的文件模式位,该模式可以是要进行的更改的符号表示,也可以是表示新模式位的位模式的八进制数。符号模式的格式是[ugoa...][[+-=][perms...]...],其中perms为集合rwxXst的零个或多个字母,或来自结合ugo的单个字母。可以给出多种符号模式,用逗号分隔。
            字母ugoa控制哪些用户访问文件的权限将被更改:(u)拥有该文件的用户、(g)文件组中的其他用户、(o)不属于文件组的其他用户或所有用户(A)。如果所有这些都没有给出,那么效果就好像给定了“a”,但是在umask中设置的位不受影响。
    运算符‘+’使所选的文件模式位被添加到每个文件的现有文件模式位中;‘-’使它们被删除;‘=‘使它们被添加,并使未提及的位被删除,除非目录的未提及的设置用户和组ID位不受影响。
            字母“rwxXst”为受影响的用户选择文件模式位:(r)读、(w)写、(x)执行(或搜索目录)、(X)只在文件是目录或已对某些用户具有执行权限、(s)在执行时设置用户或组ID、(t)限制删除标志或粘性位时执行/搜索。您可以指定“ugo”其中的一个或多个字母:(u)授予拥有文件的用户的权限,(g)授予属于文件组的其他用户的权限,(o)授予上述两个类别中任何一个用户的权限。
            数字模式是1到4个八进制数字(0-7),通过将值4、2和1的位相加而得。省略的数字被假定为前导零。第一个数字选择设置用户ID(4)和设置组ID(2),并限制删除或粘贴(1)属性。第二位数为拥有该文件的用户选择权限:读(4)、写(2)和执行(1);第三位数选择文件组中具有相同值的其他用户的权限;第四位数字选择对不属于文件组的其他用户具有相同值的权限。
            chmod从不更改符号链接的权限;chmod系统调用不能更改它们的权限。这不是一个问题,因为符号链接的权限从未被使用过。但是,对于命令行中列出的每个符号链接,chmod会更改指向文件的权限。相反,chmod忽略递归目录遍历过程中遇到的符号链接。

    4、设置uid和gid
            如果文件的组ID与用户的有效组ID或用户的辅助组ID不匹配,则chmod将清除常规文件的“set-group-ID”位,除非用户具有适当的权限。附加限制可能导致MODE或RFILE的“set-user-ID”和“set-group-ID”位被忽略.此行为取决于底层chmod系统调用的策略和功能。当有疑问时,检查底层系统行为。
            chmod保留目录的“set-user-ID”和“set-group-ID”位,除非您显式地另外指定。您可以使用“u+s”和“g-s”这样的符号模式设置或清除位,也可以用数字模式设置(但不清楚)这些位。

    5、限制删除标志或粘性位
            受限制的删除标志或粘性位是一个位,其解释取决于文件类型。对于目录,它防止非特权用户删除或重命名目录中的文件,除非他们拥有该文件或目录;这称为目录的限制删除标志,通常在/tmp之类的可写目录中找到。对于一些旧系统上的常规文件,这一位将程序的文本映像保存在交换设备上,以便在运行时更快地加载;这称为粘性位。

    6、实例
    1)修改文件的权限为最大值
            [root@localhost weijie]# chmod 777 1.c
            You have new mail in /var/spool/mail/root
            [root@localhost weijie]# ls -l 1.c
            -rwxrwxrwx 1 root weijie 0 9月   7 09:11 1.c
    2)设置组和其他用户只读,使用字符模式设置
            [root@localhost weijie]# chmod 777 1.c           //改为最大权限
            [root@localhost weijie]# ls -l 1.c
            -rwxrwxrwx 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chmod go+r 1.c          //修改组、其他用户权限
            [root@localhost weijie]# ls -l 1.c
            -rwxrwxrwx 1 root weijie 0 9月   7 09:11 1.c     //这里没有效果

            [root@localhost weijie]# chmod 700 1.c          //组、其他用户权限为0
            [root@localhost weijie]# chmod go+r 1.c         //组、其他用户增加读权限
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c    //成功。可以看到使用字符模式的时候,权限是一种或的算法,而不是直接赋值

    -------------------------

    ReLinux基础命令
    chown
            改变文件或者目录的所有者,或者所属的群组。如果只给出一个所有者(用户名或数字用户ID),则该用户将成为每个给定文件的所有者,并且文件的组不会被更改。如果所有者后面跟着冒号和组名(或数字组ID),在它们之间没有空格,那么文件的组所有权也会被更改。如果用户名后面有冒号,但没有组名,则使该用户成为文件的所有者,并将文件组更改为该用户的登录组。如果给出冒号和组,但省略了所有者,则只更改文件组;在本例中,Chown执行与chgrp相同的功能。如果只给出冒号,或者整个操作数为空,则所有者和组都不会更改。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。


    1、语法
            chmod  [选项]  [owner:group] | [owner] | [.group]  file
            chmod  [选项]  –reference=RFILE  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --changes
                    和verbose一样,但是只有在发生改变的时候才显示详细信息
            --dereference
                    修改符号链接所指的对象
            -h | --no-dereference
                    修改符号链接
            --from=CURRENT_OWNER:CURRENT_GROUP
                    仅当每个文件的当前所有者和组匹配此处指定的所有者和组时,才更改其所有者和组。可以省略这两种属性之一,在这种情况下,省略的属性不需要匹配。
            --preserve-root
                    禁止对根目录递归炒作
            --no-preserve-root
                    不特殊对待根目录,默认值
            -f | --silent | --quiet
                    忽略部分错误信息
            --reference=file
                    使用关联文件所属的组
            -v | --verbose
                    显示详细信息
            -R | --recursive
                    用递归的方式改变所有的目录和子目录
            -H
                    如果命令行参数是指向目录的符号链接,请遍历它。配合“-R”使用。
            -L
                    遍历到遇到的目录的每个符号链接,配合“-R”使用。
            -P
                    不要遍历任何符号链接(默认),配合“-R”使用。

    3、实例
    1)通过名称改变组信息
            [root@localhost weijie]# ls -l 1.c                 //当前的组是weijie
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chown .david 1.c         //把组改为david。注意语法,前面有个点
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 root david 0 9月   7 09:11 1.c
    2)通过id修改组信息,id可以从/etc/group中找到
            [root@localhost weijie]# ls -l 1.c                 //当前的组是weijie
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chown .500 1.c         //把组改为500,这个id对应的名称就是david。注意语法,前面有个点
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 root david 0 9月   7 09:11 1.c
    3)通过名称改所有者
            [root@localhost weijie]# ls -l 1.c                 //当前的所有者,root
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chown david 1.c         //把所有者改为david。
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 david weijie 0 9月   7 09:11 1.c
    4)同时改变所有者和组
            [root@localhost weijie]# ls -l 1.c                 //当前的组是weijie
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chown 500:500 1.c         //把组和所有者都改为500,注意语法,中间有个冒号
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 david david 0 9月   7 09:11 1.c

    -------------------------

    ReLinux基础命令
    rmdir
            删除一个空目录,可以同时删除途经的父目录,但是要确保父目录中没有其他内容。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            rmdir  [选项]  dir

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            --ignore-fail-on-non-empty
                    忽略由非空目录造成的错误信息
            -p | --parent
                    删除目录,以及途经的父目录
            -v | --verbose
                    显示详细信息

    3、实例
    1)简单删除一个目录
            [root@localhost weijie]# ls -l test            //查看目录的详细信息
            总用量 4
            drwxr-xr-x 2 root root 4096 9月  10 21:21 test
            [root@localhost weijie]# rmdir testt/test/       //删除目录中的一个子目录
            [root@localhost weijie]# ls -l test               //查看目录信息
            总用量 0
    2)使用-p选项,删除子目录以及途经的父目录,父目录只有当前的一个子目录
            [root@localhost weijie]# mkdir test02/test          //在test02中创建目录test
            You have new mail in /var/spool/mail/root
            [root@localhost weijie]# ls test02/                  //查看是否创建成功
            test
            [root@localhost weijie]# rmdir -p test02/test/     //使用-p选项删除目录test,这样会导致test02一起被删除
            [root@localhost weijie]# ls                           //查看当前目录,test02已经不在了
            1.c  link  link1  link2  my.iso  test  testt  wj234.q1C  wjtpflR
    3)使用-p选项,删除子目录以及途经的父目录,父目录中还有其他内容
            [root@localhost weijie]# ls testt/                   //查看目录内容
            1.c  test
            [root@localhost weijie]# rmdir -p testt/test/       //使用-p选项删除
            rmdir: 删除目录 "testt" 失败: 目录非空                    //删除途经的父目录testt出错,因为这个目录下还有其他内容
            [root@localhost weijie]# ls testt/                    //查看,子目录已经删除
            1.c
    4)同时改变所有者和组
            [root@localhost weijie]# ls -l 1.c                 //当前的组是weijie
            -rwxr--r-- 1 root weijie 0 9月   7 09:11 1.c
            [root@localhost weijie]# chown 500:500 1.c         //把组和所有者都改为500,注意语法,中间有个冒号
            [root@localhost weijie]# ls -l 1.c
            -rwxr--r-- 1 david david 0 9月   7 09:11 1.c

    -------------------------

    ReLinux基础命令
    ls
          显示当前目录下的所有内容。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           ls  [OPTION]... [FILE]...

    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          -a | --all
                列出所有的文件
          -A | --almost-all
                列出所有文件,但是不包含以 . 或者 .. 开头的文件
          --author
                和“-l”一起使用,打印出每个文件的作者
          -b | --escape
                将文件名中不可输出的字符,以“\+字符编码”的方式输出。编码为八进制
          --block-size=SIZE
                设置block的字节
          -B | --ignore-backups
                不要列出以“~”结尾的隐含条目,其实就是备份文件
          -c
                和“–lt”一起使用的时候,按照文件状态改变的时间排序;和“-l”一起使用的时候,通过名字排序
          -C
                多列显示结果,默认选项
          --color[=WHEN]
                以高亮颜色显示不同文件,值可以是always、never、auto
          -d | --directory
                只显示目录名,不显示目录下的内容。不显示符号链接指向的目录
          -D | --dired
                为Emacs的dired模式设计的输出
          -f
                不排序,使能“-aU”,关闭“-ls -color”
          -F | --classify
                在每个输出项的后面,追加文件类型标识符。
                *,代表具有可执行权限的普通文件。
                /,代表目录。
                @,代表符号链接。
                |,代表有名管道。
                =,代表套接字。
          --file-type
                和“-F”一样,但是不输出*
          --format=WORD
                跨越-x,逗号-m,水平-x,长-l,单列-1,详细-l,垂直-c
          --full-time
                显示完整的时间,-l --time-style=full-iso
          -g
                和“-l”一样,但是不显示拥有者
          --group-directories-first
                将文件前的目录分组,但是“--sort”的任何使用都会禁用分组。
          -G | --no-group
                在长列表中,不要打印组名
          -h
                以更加易读的方式显示,和“-l”一起使用
          -si
                和“-h”一样,但是以1000位整,而不是1024
          -H | --dereference-command-line
                遵循命令行中列出的符号链接
          --dereference-command-line-symlink-to-dir
                遵循指向目录的每个命令行符号链接
          --hide=PATTERN
                不要列出与shell模式匹配的隐含条目(被-a或-A覆盖)
          --indicator-style=WORD
                将带有样式字的指示符附加到条目名称:无(默认)、斜杠(-p)、文件类型(-文件类型)、分类(-F)
          -i
                显示文件的索引节点
          -I | --ignore=PATTERN
                不要列出与shell模式匹配的隐含条目
          -k
                等价于“--block-size=1K”
          -L | --dereference
                当显示符号链接的文件信息时,请显示链接引用文件的信息,而不是链接本身的信息。
          -l
                以长格式显示
          -m
                用水平的方式显示,文件之间用“,”和一个空格隔开
          -n | --numeric-uid-gid
                类似-l,但是列出用户ID和组ID。
          -N | --literal
                打印原始条目名(不要专门处理控制字符)
          -o
                和选项“-l”一样,但是不显示组信息
          -p | --indicator-style=slash
                在目录前面加一个斜杠“/”
          -q | --hide-control-chars
                无法显示的字符,使用“?”代替
          --show-control-chars
                按原样显示非图形字符
          -Q | --quote-name
                用双引号括住条目名
          --quoting-style=WORD
                对条目名使用引用样式词:literal,locale,shell,shell-always,c,escape
          -r | --reverse
                排序的时候,以文件名反向排序
          -R | --recursive
                递归显示子目录
          -s | --size
                以块为单位显示文件大小。默认一块1024k
          -S
                以文件大小排序
          -t
                按文件的修改时间,降序排列
          --sort=WORD
                按指定要求排序,而不是按名称排序:不排序(-U),扩展名(-X),大小(-S),时间(-t),版本(-v)
          --time=WORD
                配合“-l”使用,将时间显示为指定的,而不是修改时间:atime(-u),access(-u),use(-u),ctime(-c),或state(-c);如果指定了“--sort=time”,则使用指定的时间作为排序键。
          --time-style=STYLE
                配合“-l”使用,时间用指定的风格显示:full-iso,long-iso,locale,+FORMAT。FORMAT解释为“日期”;如果格式为      FORMAT1<newline>FORMAT2,FORMAT1适用于非最近文件,FORMAT2适用于最近文件;如果样式以“POSIX-”为前缀,则样式仅在POSIX区域设置之外生效。
          -T | --tabsize=COLS
                指定制表符的大小,默认是8
          -u
                配合“-lt”使用:按访问时间排序,并显示;配合“-l”使用:显示访问时间,按名称排序;其他情况:按访问时间排序
          -U
                不要排序;按目录顺序列出条目
          -v
                文本中自然排序的(版本)数字
          -w | --width=COLS
                设定屏幕宽度而不是当前值
          -x
                按行而不是按列出条目
          -X
                按输入扩展名按字母顺序排序
          -1
                每行列出一个文件
          --lcontext
                显示安全上下文。启用“-l”。对于大多数显示器来说,行可能太宽了。
          -Z, --context
                显示安全上下文,以便适合大多数显示。只显示模式、用户、组、安全上下文和文件名。。
          --scontext
                只显示安全上下文和文件名。

    3、说明
          在默认情况下,使用颜色来区分文件类型是禁用的,并且使用“--color=never“。只有当标准输出连接到终端时,ls才会发出颜色代码。LS_CONERS环境变量可以更改设置,使用dircolors命令来设置。
          大小可以是KB,1000; K,1024,;MB,1000*1000;M,1024*1024

    4、实例
    1)显示所有文件,并且在后面追加文件类型
          [root@localhost weijie]# ls -lF
          总用量 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
          -rw-r--r-- 3 root root 358400 9月   7 15:46 link1
          lrwxrwxrwx 1 root root      6 9月  10 12:13 link2 -> my.iso
          -rw-r--r-- 3 root root 358400 9月   7 15:46 my.iso
          drwxrwxrwx 2 root root   4096 9月  10 11:33 test/
          drwxr-xr-x 2 root root   4096 9月  10 16:10 test02/
          drwxr-xr-x 2 root root   4096 9月  10 11:35 testt/
          -rw------- 1 root root      0 9月   7 14:55 wj234.q1C
          drwx------ 2 root root   4096 9月   7 14:50 wjtpflR/
    2)显示目录名称,不显示目录下的内容
          [root@localhost /]# ls /weijie/                //列出weijie目录下的所有文件
          1.c  link  link1  link2  my.iso  test  test02  testt  wj234.q1C  wjtpflR
           [root@localhost /]# ls -ld /weijie/          //只显示wejie这个目录本身的信息
          drwxr-xr-x 6 root root 4096 9月  10 15:28 /weijie/
          [root@localhost /]#

    -------------------------

    ReLinux基础命令
    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    ReLinux基础命令

    -------------------------

    ReLinux基础命令
    mv
          将文件或者目录移动到另一个地方,或者重命名。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           mv  [选项]  [-T]  src  dst
          mv  [选项]  src  directory
          mv  [选项]  -t  directory  src


    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          --backup=[control]
                为每一个存在的文件创建备份
          -b
                和“--backup”一样,但是没有参数
          -f | --force
                强制移动
          -i | --interactive
                使用交互的方式移动
          -n | --no-clobber
                不覆盖已经存在的文件。如果同时制定了“-i,-n,-f”中的多个选项,那么只有最后一个选项有效。
          --strip-trailing-slashes
                从每个源参数中移除任何尾随斜线。
          -S | --suffix=SUFFIX
                重写通常的备份后缀
          -t | --target-directory
                将所有源文件移动到目标文件夹
          -T |  --no-target-directory
                将目标视为正常文件
          -u | --update
                当目的文件不存在,或者源文件比目的文件新的时候才移动
          -v | --verbose
                显示详细执行过程

    3、说明
          备份后缀为‘~’,除非设置为“--”后缀或者SSIMPLE_BACKUP_SUFFIX。版本控制方法可以通过“--backup”的选项或通过VERSION_CONTROL环境变量来选择。以下是这些值:
          none,off:从不备份,即使给出了“--backup”选项。
          numbered,t:创建编号备份。
          existing,nil:如果有编号备份,则为编号,否则为简单。
          simple,over:总是创建简单备份。

    4、实例
    1)在同一个目录下移动,即重命名。
          [root@localhost weijie]# ls
          1.c  link  link1  link2  my.iso  test  test01  wj234.q1C  wjtpflR
          [root@localhost weijie]# mv test01 test02
          [root@localhost weijie]# ls
          1.c  link  link1  link2  my.iso  test  test02  wj234.q1C  wjtpflR
    2)移动到其他地方
          [root@localhost test02]# ls
          test
          [root@localhost test02]# mv test/ /weijie/testt
          [root@localhost test02]# ls
          [root@localhost test02]# cd ..
          [root@localhost weijie]# ls
          1.c  link  link1  link2  my.iso  test  test02  testt  wj234.q1C  wjtpflR

    -------------------------

    diff
          逐行比较两个文本文件,把文件的差异显示到标准输出。如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          diff  [选项]  files

    2、选项列表
          -v | --version
                显示命令版本信息
          --help
                显示帮助文档
          -m | --mode=MODE
                设置目录的权限
          -i | --ignore-case
                比较的时候,忽略大小写
          --ignore-file-name-case
                在比较文件名的时候,忽略大小写
          --no-ignore-file-name-case
                比较文件名的时候,不能忽略大小写
          -E | --ignore-tab-expansion
                不比较tab
          -b | --ingore-space-change
                不比较空格数
          -w | --ignore-all-space
                忽略所有的空格
          -B | --ignore-blank-lines
                不比较空白行
          -I res | --ignore-mathcing-lines=res
                不比较含有指定字符串res的行
          --strip-trailing-cr
                出去输入行尾随的东西
          -a | --text
                将所有的文件都当做文本文件
          -c  -C NUM  --context[=NUM]
                显示不同之处的前后部分内容,默认是3行
          -u  -U NUM  --unified[=NUM]
                显示相同之处的前后部分内容,默认是3行
          --label LABEL
                使用文件的标签,而不是名字
          -p | --show-c-function
                比较c语言文件的时候,显示不同之处所在的函数
          -F RE  |  --show-function-line=RE
                显示匹配RE的最近的行
          -q | --brief
                只显示是否有差异,不显示详细内容
          -e | --ed
                输出一个ed脚本
          --normal
                输出一个正常的diff
          -n | --rcs
                结果以rcs的方式显示
          -y | --side-by-side
                将两个文件已并列方式显示比较结果
          -W num | --width=NUM
                使用“-y”选项的时候,指定列宽
          --left-column
                只输出公共行的左列
                --suppress-common-lines
          不要输出公共行
                -D NAME | --ifdef=NAME
          输出合并文件以显示‘#ifdef NAME’的差异
                --GTYPE-group-format=GFMT
          同上,但用GFMT格式化GTYPE输入组
          --line-format=LFMT
                同上,但用LFMT格式化GTYPE输入组
          --LTYPE-line-format=LFMT
                同上,但用LFMT格式化LTYPE输入行
          -l | --paginate
                将输出传递给pr”以分页
          -t | --expand-tabs
                将制表符展开为输出中的空格
          -T | --initial-tab
                通过预置选项卡使制表符对齐
          -N | --new-file
                将缺席文件视为空文件
          --unidirectional-new-file
                将缺席的第一批文件视为空文件
          -s | --report-identical-files
                当两个文件相同时报告
          -X FILE | --exclude-from=FILE
                排除与文件中任何模式匹配的文件
          -S FILE | --starting-file=FILE
                从文件开始比较目录时
          -r | --recursive
                用递归的方式比较子目录下的所有文件
          -x path
                不比较指定的文件
          --from-file=FILE1
                将FILE 1与所有操作数进行比较。FILE 1可以是一个目录
          --to-file=FILE2
                将所有操作数与文件2进行比较。文件2可以是一个目录
          --horizon-lines=NUM
                保持通用前缀和后缀的NUM行
          -d  --minimal
                努力找出一组较小的变更
          --speed-large-files
                假设文件很大,并且有许多零散的小更改。

    3、实例
    1)比较两个文件,不使用参数 (两个文件只有第一行不同)
          [root@localhost test02]# diff 1.c 2.c             //直接比较,这里只输出不同之处
          1c1
          < 逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。
          ---
          > 逐行比较两个文本文件,把文件的差异显示到标准输出。
    2)使用选项-y,以分列的方式输出两个文件
          [root@localhost test02]# diff -y 1.c 2.c             //使用选项y,这里以列的方式,显示文件全部内容
          逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。              |    逐行比较两个文本文件,把文件的差异显示到标准输出。
          如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文                     如果要指定要比较目录,那么diff命令会比较目录中相同文件      名的文
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS             此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS
          [root@localhost test02]# diff  1.c 2.c
    3)使用选项-W,指定列宽
          [root@localhost test02]# diff -y -W 100 1.c 2.c     //这里指定列宽100,并不能完全显示,因此看不到差异之处
          逐行比较两个文本文件,把文件的差异显示到标准      |    逐行比较两个文本文件,把文件的差异显示到标准
          如果要指定要比较目录,那么diff命令会比较目录            如果要指定要比较目录,那么diff命令会比较目录
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentO        此命令的适用范围:RedHat、RHEL、Ubuntu、CentO
    4)比较目录
          [root@localhost weijie]# diff test01 test02               //这里只比较目录下相同名字的文件
          diff test01/1.c test02/1.c
          1c1
          < 逐行比较两个文本文件,把文件的差异显示到标准输出。
          ---
          > 逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。
    5)使用选项-q,查看是否不同
          [root@localhost weijie]# diff -q test01/1.c test02/1.c     //比较是否不同
          Files test01/1.c and test02/1.c differ                         //只显示是否相同,不显示详细不同之处

    -------------------------

    cmp
          用字节的方式,比较两个文件是否存在差异,但是不保存运算结果。Cmp指令只会根据结果设置相关的标志位,这个指令之后往往会跟着一个条件跳转指令。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          cmp  [OPTION]... FILE1  [FILE2  [SKIP1  [SKIP2]]]

    2、选项列表
          -v | --version
                显示命令版本信息
          --help
                显示帮助文档
          -b | --print-bytes
                输出不同的字节
          -i num | --ignore-initial=num
                跳过开始的num个字节
          -i num1 num2 | --ignore-initial=num1:num2
                第一个文件跳过num1个字节,第二个文件跳过num2个字节
          -l | --verbose
                输出不同之处的字节序号,以及这个字节的值    
          -n LIMIT | --bytes=LIMIT
                最多比较LIMIT字节
          -s | --quiet | --silent
                不输出;只输出退出状态

    3、实例
    1)直接比较
          [root@localhost weijie]# diff -y 1.c 2.c      //首先使用diff查看不同之处
          asd          |    ase
          sdf          |    sdd
          dfg        dfg
          [root@localhost weijie]# cmp 1.c 2.c          //开始比较
          1.c 2.c differ: byte 3, line 1                 //只显示第一个不同之处,第一行,第3个字节
    2)使用选项-b,显示不同之处的字节
          [root@localhost weijie]# cmp -b 1.c 2.c  
          1.c 2.c differ: byte 3, line 1 is 144 d 145 e        //显示不同的地方,第一个文件是d,第二个文件是e。但是这里还是只有第一个不同之处
    3)使用选项-l,显示所有不同之处
          [root@localhost weijie]# cmp -lb 1.c 2.c       //同时使用了l 和 b选项
           3 144 d    145 e           //第一个不同之处
           7 146 f    144 d           //第二个不同之处

    -------------------------

    comm
          逐行比较两个已经排序过的文件。结果以3列显示:第1列显示只在file1出现的内容,第2列显示只在file2出现的内容,第3列显示同时出现的内容。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          comm [OPTION]... FILE1 FILE2

    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          -1
                不显示第一个文件中出现的内容
          -2
                不显示第二个文件出现的内容
          -3
                不显示同时出现的内容    
          --check-order
                检查输入是否正确排序,即使所有输入行都已经配对
          --nocheck-order
                不检查输入是否正确排序
          --output-delimiter=STR
                使用STR将列分割

    3、实例
    1)直接比较
          [root@localhost weijie]# diff -y 1.c 2.c        //查看两个文件
          abc          |    abd
          def          |    efg
          ghi          |    ghi
          [root@localhost weijie]# comm 1.c 2.c          //比较,这两个文件必须已经排序
          abc
                    abd
          def
                    efg
                    ghi
    2)只显示两个文件共同出现的内容
          [root@localhost weijie]# comm -12 1.c 2.c
          ghi

    -------------------------

    diffstat
          这个程序读取diff的输出,并显示每个文件的插入、删除和修改的直方图。Diffstat是一个用于检查大型复杂修补程序文件的程序。它从包含diff输出的一个或多个输入文件中读取,生成针对引用的每个文件更改的总行的直方图。如果输入文件名以.bz 2、.gz、.lzma、.z或.z结尾,Diffstat将通过管道从相应的程序读取未压缩数据。它还可以根据标准输入的管道文件推断压缩类型。
          Diffstat识别来自diff的最流行的输出类型:
          unified,修补程序首选。
          context,最好的可读性,但不太紧凑。
          default,不是很好,但很容易产生。

          Diffstat检测由diff输出的行,以判断比较了哪些文件,然后在第一列中计数表示更改类型(插入、删除或修改)的标记。这些在直方图中显示为“、”-“和”!“字符。如果命令行上没有指定文件名,Diffstat将读取标准输入中的差异。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。


    1、语法
          diffstat  [options]  [file-specifications]

    2、选项列表
          -b
                忽略diff中的“二进制文件XXX和YYY不同”匹配的行
          -c
                在每一行输出前加上“#”,使其成为shell脚本的注释行。
          -D destination
                指定一个目录,其中包含可作为应用差异的结果而引用的文件。Diffstat将计算相应文件中的行数(在通过-p选项调整名称之后),以获得每个文件中的总行数。
          -e file
                将标准错误重定向到文件
          -f format
                指定直方图的格式:
                0,为了简洁,它只显示值和一个直方图代码insert (+),delete (-)或modify (!)。
                1,正常格式。
                2,用点填充直方图。
                4,使用直方图打印每个值。
                任何非零值都会给出直方图。点和个别值可以结合在一起,例如-f6给出两者。
          -h
                显示帮助信息并且退出
          -k
                禁止合并报表中的文件名
          -l
                只列出文件名。不生成直方图。
          -m
                从修补程序文件的每个“块”中合并插入/删除计数,以接近修改行的计数
          -n number
                指定用于文件名的最小宽度。如果不指定这一点,Diffstat在去掉常见前缀后使用最长文件名的长度。
          -N number
                指定用于文件名的最大宽度。超过此限制的名称在左侧被截断。如果您没有指定此选项,下面将检查-n选项。
          -o file
                将标准输出重定向到文件
          -p number
                重写删除公共路径名的逻辑,模拟修补程序“-p”选项。
          -q
                抑制空差异的“0文件更改”消息
          -r code
                提供直方图中显示的数据的可选舍入,而不是通过错误调整截断数据:
                0,是默认的。不执行舍入操作,但累积错误将添加到下列中。
                1,舍入数据。
                2,对数据进行舍入并调整直方图,以确保在有任何差异的情况下显示某些内容,即使这些差异通常被四舍五入为零。
          -S source
                这类似于-D选项,但指定了一个可以找到原始文件(在应用差异之前)的位置。
          -t
                重写直方图,生成逗号分隔值的输出。
          -u
                禁止对报表中的文件名进行排序。
          -v
                显示进度,例如,如果输出重定向到文件,则将进度消息写入标准错误
          -V
                显示版本号,并且退出
          -w number
                指定直方图的最大宽度。直方图将永远不会小于10列,以防文件名过大。

    3、环境变量
          Diffstat运行在可移植的UNIX环境中。您可以通过设置与输入文件名称相对应的环境变量来覆盖用于解压缩输入文件的程序的编译路径。然而,Diffstat假设生成的程序使用相同的命令行选项,例如“-c”来解压缩到标准输出。
          DIFFSTAT_BZCAT_PATH
          DIFFSTAT_BZIP2_PATH
          DIFFSTAT_COMPRESS_PATH
          DIFFSTAT_GZIP_PATH
          DIFFSTAT_LZCAT_PATH
          DIFFSTAT_PCAT_PATH
          DIFFSTAT_UNCOMPRESS_PATH
          DIFFSTAT_ZCAT_PATH


    4、实例
    统计差异信息
          [root@localhost wj]# diff 1.c 2.c
          1c1
          < asd
          ---
          > add
          3,4c3,4
          < dfg
          < ass
          ---
          > dsgf
          > sss
          [root@localhost wj]# diff 1.c 2.c |diffstat -f 2
           unknown |    6 +++---..........................................................
           1 file changed, 3 insertions(+), 3 deletions(-)
          [root@localhost wj]# diff 1.c 2.c |diffstat -f 1
           unknown |    6 +++---
           1 file changed, 3 insertions(+), 3 deletions(-)
          You have new mail in /var/spool/mail/root
          [root@localhost wj]# diff 1.c 2.c |diffstat -f 0
           unknown |    6     3 +    3 -    0 !
           1 file changed, 3 insertions(+), 3 deletions(-)
          [root@localhost wj]#

    -------------------------

    file
          判断指定文件的文件类型,它依据文件内容判断,并不依据扩展名。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          file  [选项]  filename

    2、选项列表
          -v | --version
                显示命令版本信息
          --help
                显示帮助文档
          -b | --brief
                列出结果的时候,不显示文件名
          -C | --compile
                编写一个magic.mgc输出文件,其中包含魔术文件或目录的预解析版本
          -c | --checking-printout
                以检查魔术文件的解析形式的打印输出。这通常与-m标志一起使用,用于在安装新的魔术文件之前调试它。
          -e | --exclude testname
                从确定文件类型的测试列表中排除在testname中指定的测试。有效的测试名称是:
                apptype,EMX应用程序类型(仅在EMX上)。
                text,各种类型的文本文件(此测试将尝试猜测文本编码,而不管“编码”选项的设置如何)
                encoding,用于软魔术测试的不同文本编码
                tokens,在文本文件中查找已知的令牌
                cdf,打印复合文档文件的详细信息
                compress,检查并查看压缩文件
                elf,打印ELF文件的细节。
                soft,查阅魔法档案。
                tar,检查tar文件
          -F | --separator
                指定文件名和结果之间的分隔符,默认:
          -f namefile | --files-from namefile
                从给定的文件中,读取文件名,然后操作
          -h | --no-dereference
                选项导致符号链接不被遵循(在支持符号链接的系统上)。如果没有定义环境变量POSIXLY_TRIDER,则这是默认的
          -i | --mime
                导致文件命令输出MIME类型字符串,而不是更传统的人类可读的字符串。因此,它可以说‘text/plain;;charset=us-ascii’而不是‘ASCII文本’。为了使此选项工作,文件更改了它处理命令本身识别的文件的方式(例如许多文本文件类型、目录等),并使用了另一个“魔术”文件。(见下文档案部分)
          --mime-type | --mime-encoding
                类似-i,但只打印指定的元素。
          k | --keep-going
                第一次匹配别停,继续。随后的匹配将具有字符串‘\012-’。(如果需要换行符,请参见‘-r’选项。)
          -L | --dereference
                选项导致符号链接被遵循,就像ls(1)中的同名选项(在支持符号链接的系统上)。如果定义了环境变量POSIXLY_TRIDER,则这是默认的
          -m | --magic-file magicfiles
                指定包含魔术的文件和目录的备用列表。这可以是单个项目,也可以是冒号分隔的列表。如果在文件或目录旁边找到已编译的魔术文件,则将使用它。
          -N | --no-pad
                让文件名在输出中对齐    
          -n | --no-buffer
                检查每个文件后,强迫stdout被刷新。这只有在检查文件列表时才有用。它用于希望从管道输出文件类型的程序。
          -p | --preserve-date
                在支持utime(2)或utime(2)的系统上,尝试保留分析过的文件的访问时间,假装文件从未读取过它们。
          -r | --raw
                不要将不可打印的字符翻译为\ooo。通常,文件将不可打印的字符转换为它们的八进制表示形式
          -s | --special-files
                通常,文件只尝试读取和确定STAT(2)报告是普通文件的参数文件的类型。这可以防止出现问题,因为读取特殊文件可能会产生特殊的后果。指定-s选项会导致file也读取参数文件,这些参数文件是块文件或字符特殊文件。这对于确定原始磁盘分区中数据的文件系统类型非常有用,这些分区是块特殊文件。此选项还会导致文件忽略stat(2)所报告的文件大小,因为在某些系统上,它报告原始磁盘分区的大小为零。
          -z | --uncompress
                试着查看压缩文件
          -0 | --print0
                在文件名结束后输出空字符‘\0’。很好地削减了产量。这不影响仍然打印的分隔符。
          -z
                尝试读取压缩文件的内容

    3、说明
          file对每个参数进行测试,试图对其进行分类。按照这个顺序执行的测试有三组:文件系统测试、魔术测试和语言测试。成功的第一个测试将导致打印文件类型。打印的类型通常包含一个单词text(该文件只包含打印字符和几个常见的控制字符,并可能安全地在ASCII终端上读取)、executable (该文件包含以某种UNIX内核可以理解的形式编译程序的结果),或包含任何其他含义的data(数据通常是“二进制”或不可打印的)。异常是众所周知的包含二进制数据的文件格式(核心文件、tar存档).在修改魔术文件或程序本身时,请确保保留这些关键字。用户依赖于知道目录中的所有可读文件都打印了单词“text”。不要像Berkeley那样,把“shell命令文本”改为“shell脚本”
          文件系统测试基于检查STAT(2)系统调用的返回。该程序检查该文件是否为空文件,或是否为某种特殊文件。如果在系统头文件中定义了适合您正在运行的系统的任何已知文件类型(套接字、符号链接或有名管道),则会直观地显示它们。
          魔术测试用于检查具有特定固定格式的数据的文件。这方面的典型示例是二进制可执行文件(已编译的程序)a.out文件,其格式在标准include目录中的#include<a.out.h>中定义,或者#include <exec.h>。这些文件具有一个“魔术号”,存储在文件开头附近的某个特定位置,该位置告诉UNIX操作系统该文件是二进制可执行文件,以及其中的几种类型中的哪一种。“魔术”的概念已经通过扩展应用于数据文件。任何在一个小的固定偏移量处具有一些不变标识符的文件通常都可以用这种方式来描述。标识这些文件的信息是从已编译的魔术文件/usr/share/misc/magic.mgc中读取的,如果编译的文件不存在,则从/usr/share/misc/magc目录中读取这些文件。此外,如果$HOME/.magic.mgc或$home/.magic存在,则它将优先用于系统魔术文件。如果/etc/magic存在,它将与其他魔术文件一起使用。
          如果文件与魔术文件中的任何条目不匹配,则检查它是否为文本文件。ASCII、ISO-8859-x、非ISO 8位扩展-ASCII字符集(例如在Macintosh和IBM PC系统上使用的字符集)、UTF-8编码Unicode、UTF-16编码Unicode和EBCDIC字符集可以通过构成每组可打印文本的不同范围和字节序列来区分。如果一个文件通过了这些测试中的任何一个,就会报告它的字符集。ASCII、ISO-8859-x、UTF-8和Extended-ASCII文件被识别为“Text”,因为它们在几乎任何终端上都是可读的;UTF-16和EBCDIC仅仅是“字符数据”,因为它们包含文本,但是文本需要翻译才能被读取。此外,文件将试图确定文本类型文件的其他特征.如果文件的行被CR、CRLF或Nel终止,而不是Unix标准LF,这将被报告。还将识别包含嵌入转义序列或过度醒目的文件。
          一旦文件确定了在文本类型文件中使用的字符集,它将试图确定该文件是用哪种语言编写的。语言测试寻找特定的字符串(Cf. #include<names.h>),它可以出现在文件的前几个块中的任何地方。例如,关键字.br表示文件很可能是troff(1)输入文件,正如关键字struct表示C程序一样。这些测试不如前两组可靠,因此它们是最后执行的。语言测试例程还测试一些混类(例如tar(1)存档)。
          任何无法标识为已在上述任何字符集中写入的文件,都被简单地称为“data”。

    4、环境变量
          环境变量MAGIC可以用来设置默认的魔术文件名。如果设置了该变量,那么文件将不会尝试打开$HOME/.magic。文件酌情将‘.mgc’添加到此变量的值中。环境变量POSIXLY_RIDER控制(在支持符号链接的系统上),文件是否会尝试遵循符号链接。如果设置了,那么文件将遵循符号链接,否则就不会。这也是由-l和-h选项控制的。

    5、返回值
          文件在成功时返回0,在错误时返回非零。如果文件操作数命名的文件不存在,无法读取,或者无法确定由文件操作数命名的文件的类型,则不认为这是影响退出状态的错误。

    6、文件
          /usr/share/misc/magic.mgc,默认已编译魔术列表。
          /usr/share/misc/magic,包含默认魔术文件的目录。

    7、实例
    1)直接查看文件
          [root@localhost weijie]# file 1.c
          1.c: ASCII text         //默认分隔符是冒号
          [root@localhost weijie]# file -F , 1.c         //指定分隔符为逗号
          1.c, ASCII text
    2)从给定文件中读取文件名,然后进行操作
          [root@localhost weijie]# cat 1.c
          2.c
          3.c

          [root@localhost weijie]# file -f 1.c         //从1.c读取文件内容,将他们作为文件名重新进行file操作。
          2.c: ASCII text
          3.c: ASCII text
    3)读取特殊文件的类型
          $ file -s /dev/wd0{b,d}
          /dev/wd0b: data
          /dev/wd0d: x86 boot sector
          $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
          /dev/hda:   x86 boot sector
          /dev/hda1:  Linux/i386 ext2 filesystem
          /dev/hda2:  x86 boot sector
          /dev/hda3:  x86 boot sector, extended partition table
          /dev/hda4:  Linux/i386 ext2 filesystem
          /dev/hda5:  Linux/i386 swap file
          /dev/hda6:  Linux/i386 swap file
          /dev/hda7:  Linux/i386 swap file
          /dev/hda8:  Linux/i386 swap file
          /dev/hda9:  empty
          /dev/hda10: empty
    4)以MIME格式输出
          $ file -i file.c file /dev/{wd0a,hda}           //输出MIME类型
          file.c:      text/x-c
          file:        application/x-executable
          /dev/hda:    application/x-not-regular-file
          /dev/wd0a:   application/x-not-regular-file

    -------------------------

    whereis
          查找命令的位置,包括执行文件、源代码、手册文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          whereis  [选项]  cmd
          whereis [-bmsu] [-BMS directory...  -f] filename...

    2、选项列表
          -b
                只搜索二进制文件
          -m
                只搜索手册文件
          -s
                只搜索源代码
          -u
                寻找不寻常的条目。如果文件没有每个请求类型的一个条目,则该文件被认为是不寻常的。因此,“Whereis –m –u *”请求当前目录中没有文档的文件。
          -B
                在指定目录下搜索二进制文件
          -M
                在指定目录下搜索手册文件
          -S
                在指定目录下搜索源代码文件
          -f
                不显示文件名前的路径,在是使用-S 、–M、 -B选项时,必须使用这个选项

    3、实例
    1)查找某个命令的二进制文件
          [root@192 bin]# whereis -b ls
          ls: /bin/ls
    2)查找命令的手册文件
          [root@192 bin]# whereis -m ls
          ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
    3)查找/usr/bin中所有未记录在/usr/man/man 1中且源在/usr/src中的文件:
          [root@192 bin]# cd /usr/bin
          [root@192 bin]# whereis -u -M /usr/man/man1 -S /usr/src -f *

    -------------------------

    which
          在环境变量PATH中搜索某个命令,返回命令的执行文件或者脚本位置,默认只显示第一个结果。这需要一个或多个参数。对于它的每个参数,它会打印出当在shell提示符下输入该参数时将执行的可执行文件的完整路径。它通过使用与bash(1)相同的算法在环境变量路径中列出的目录中搜索可执行文件或脚本来做到这一点。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          which  [options]  [--]  programname  [...]

    2、选项列表
          -v | -V | --version
                显示命令版本信息
          --help
                显示帮助文档
          -a | -all
                输出所有的结果,而不只是第一个
          --read-alias | -i
                从stdin中读取别名,在stdout上报告匹配的别名。
          --skip-alias
                忽略“--read-alias”
          --read-function
                从标准输入读取函数,在stdout输出
          --skip-functions
                忽略“--skip-functions”
          --skip-dot
                忽略PATH中以点开头的目录
          --skip-tilde
                跳过路径中以主目录中的波浪线和可执行文件开头的目录。
          --show-dot
                如果路径中的目录以点开始,并为该路径找到匹配的可执行文件,则打印“./Programname”而不是完整路径。
          --show-tilde
                当目录与主目录匹配时,输出一个波浪线。如果将该选项作以root身份调用,则忽略此选项
          --tty-only
                如果不在TTY上,则停止右边的处理选项。

    3、返回值
          它返回失败参数的数量,或者当未指定“程序名”时返回-1。

    4、实例
    1)搜索指令
          [root@192 /]# which -a ls
          alias ls='ls --color=auto'         //ls是一个别名
                  /bin/ls
    2)显示所有结果
          [root@192 /]# which -a ll
          alias ll='ls -l --color=auto'
                /bin/ls
                /usr/bin/which: no ll in (/usr/lib/qt-3.3/bin:/usr/local/sbin:
                /usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/src/jdk1.8.0_181/bin:/root/bin)

    -------------------------

    sort
          以行为单位,对文本文件进行排,并输出排序结果。默认情况下,以每一行为一个单位,从首字符开始按照ASCII码向后逐个比较。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          sort  [选项]  file
          sort [OPTION]... --files0-from=F

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -b
                忽略每行开头的空白字符
          -d | --dictionary-order
                排序时只考虑空格、数字、英语字母
          -f | --ignore-case
                将小写字母改为大写
          -g | --general-numeric-sort
                按一般数值比较
          -i | --ignore-nonprinting
                只考虑040到176之间的ASCII字符
          -M | --month-sort
                按月份排序
          -h | --human-numeric-sort
                按可读性数据排序,例如1K,2G
          -n | --numeric-sort
                按数值大小排序    
          -R | --random-sort
                按键的随机散列排序
          --random-source=FILE
                从文件中获取随机字节
          -r | --reverse
                逆序排列
          --sort=WORD
                按给出的要求排序:general-numeric  -g,  human-numeric  -h,  month  -M, numeric -n, random -R, version -V
          -V | --version-sort
                按版本数字排序
          --batch-size=NMERGE
                最多一次合并NMERGE个输入;更多地使用temp文件
          -c | --check | --check=diagnose-first
                检测是否已排序,不排序
          -C | --check=quiet | --check=silent
                和“-c”一样,不要报告第一个坏行
          --compress-program=PROG
                用prog压缩时间,用prog-d解压
          --files0-from=F
                从文件F中以NUL结尾的名称指定的文件读取输入;如果F是-,则从标准输入中读取名称。
          -k | --key=POS1[,POS2]
                在POS 1(起始1)处启动键,在POS 2(默认行尾)结束键
          -m | --merge
                合并已经排序的文件,不排序
          -o | --output=file
                将结果输出到指定文件
          -s | --stable
                通过禁用最后的比较来稳定排序
          -S | --buffer-size=SIZE
                主内存缓冲器使用SIZE
          -t | --field-separator=SEP
                使用sep代替分隔符
          -T | --temporary-directory=DIR
                将DIR用于临时目录,而不是$TMPDIR或/tmp;多个选项指定多个目录
          -u, --unique
                和“-c”一起使用,检查是否有严格的排序;如果没有-c,则只输出相同运行的第一个。
          -z, --zero-terminated
                结束行为0字节,而不是换行符

    3、实例
    1)直接排序
          [root@192 weijie]# cat 1.c
          1K
          1M
          1G
          1T
          [root@192 weijie]# sort 1.c         //直接对比字符排序
          1G
          1K
          1M
          1T
    2)按照可读的单位来排序
          [root@192 weijie]# sort -h 1.c       //文件的内容按照单位排序,这些很明显是内存大小单位
          1K
          1M
          1G
          1T
    3)按照数字排序
          [root@192 weijie]# cat 2.c
          123
          23
          212
          [root@192 weijie]# sort 2.c         //默认排序,按照字符逐个比较
          123
          212
          23
          [root@192 weijie]# sort -n 2.c     //把内容当做数字排序
          23
          123
          212

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用  
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    cat
          连接文本文件或者标准输入,将结果输出到标准输出设备。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          cat  [选项]  file
          cat  file1  file2  >  file3

    2、选项列表
          --help
                显示帮助文档
          --version
                显示命令版本
          -A | --show-all
                显示所有,等价于 –vET
          -b | --number-nonblank
                所有输出显示行号,除了空白行
          -e
                等价于 –vE
          -E | --show-ends
                在每一行的结尾输出 $
          -n | --number
                显示行号
          -s | --squeeze
                将连续的空行合并为一行
          -T
                将tab显示为^I
          -t
                等价 –vT
          -v | --show-nonprinting
                除了LDF和RAB,所有的控制符用“^“和“M-“方式显示

    3、实例
    1)输出文件内容,带行号
          [root@192 weijie]# cat -b 1.c
               1    2.c
               2    3.c
    2)合并两个文件到第三个
          [root@192 weijie]# cat 1.c 2.c
          2.c
          3.c
          123
          345
          [root@192 weijie]# cat 1.c 2.c > 3.c
          [root@192 weijie]# cat 3.c
          2.c
          3.c
          123
          345

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    paste
          将指定的文件按照列的方式合并,将结果显示到标准输出设备上,相当于两个并列的cat命令。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          paste  [选项]  files

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本
          -d list | --delimiters=list
                以指定的分隔符区取代tab
          -s
                合并同一个文件的多行

    3、实例
    1)合并三个文件
          [root@localhost weijie]# cat 1.c     //显示这几个文件的内容
          1K
          1M
          1G
          1T
          [root@localhost weijie]# cat 2.c
          123
          23
          212
          [root@localhost weijie]# cat 3.c
          123
          23
          212

          [root@localhost weijie]# paste 1.c 2.c 3.c      //将文件合并
          1K    123    123
          1M    23    23
          1G    212    212
          1T    
    2)合并同一个文件的多行
          [root@localhost weijie]# cat 4.c
          123
          23
          212
          [root@localhost weijie]# paste -s 4.c       //将同一个文件的多行合并成多列
          123    23    212

    -------------------------

    split
          将一个大文件切割成较小的文件,默认情况下每1000行就会切割一次。分割后的文件,默认以xaa、xab、xac等命名。用户亦可以指定名字的前缀,例如指定前缀test,那么分割后的文件是testaa、testab、testac等。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          split  [OPTION]… [INPUT [PREFIX]

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -a | --suffix-length=N
                使用长度为N的后缀(默认为2)
          -b | --bytes=SIZE
                设置多少个字节分割一次
          -C size | --line-size=size
                设置每行最多size个字节
          -d | --numeric-suffixes
                用数字后缀代替字母
          -l num | --line=num | -num
                设置每多少行切割一次
          --verbose
                在打开每个输出文件之前打印一个诊断文件

    3、实例
    1)每2行分割一次
          [root@localhost weijie]# split -2 5.c                 //每2行分割一次
          [root@localhost weijie]# ls
          1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  xaa  xab  xac      //分割后的文件会自动命名
          [root@localhost weijie]# cat xaa                      //查看分割后的文件
          1,2c1,2
          < 123
          [root@localhost weijie]# cat xab
          < 23
          ---
          [root@localhost weijie]# cat xac
          > 12345
          > 2334
    2)每10个字节分割一次,并指定输出文件的名字前缀
          [root@localhost weijie]# split -b 10 5.c Tsplit           //10个字节分割,前缀名Tsplit
          [root@localhost weijie]# ls
          1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  Tsplitaa  Tsplitab  Tsplitac  Tsplitad  xaa  xab  xac
          [root@localhost weijie]# cat Tsplitaa
          1,2c1,2
          < [root@localhost weijie]# cat Tsplitab
          123
          < 23

    -------------------------

    fold
          按照指定的宽度显示文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          fold  [选项]  file

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -b | --bytes
                以字节为单位,指定宽度
          -c | --characters
                以字符为单位,指定宽度
          -s | --space
                以空格分割
          -w | --width
                指定列宽,默认30

    3、实例
          每6个字节一行输出
          [root@localhost weijie]# cat 1.c
          hello world, i am david. i love linux, love code.

          [root@localhost weijie]# fold -b6 1.c
          hello
          world,
           i am
          david.
           i lov
          e linu
          x, lov
          e code

    -------------------------

    tr
          删除或者更改文件中的字符串,这个指令一般需要两个字符集。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          tr  [选项]  set1  set2

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -c | -C | --complement
                使用SET1的补码
          -d | --delete
                删除字符集1中指定的内容
          -s | --squeeze-repeats
                将set1中重复出现的内容,替换成单次出现的内容    
          -t | --truncate-set1
                首先将SET1按照SET2的长度截断

          集合指定为字符串。大多数人代表自己。解释序列是:
          \NNN,具有八进制值nnn的字符(1到3位八进制数字)
          \\,反斜线符号
          \a,可听BEL
          \b,(键盘的)退格键
          \f,换页
          \n,换行
          \r,返回
          \t,水平tab
          \v,垂直tab
          CHAR1-CHAR2,从CHAR 1到CHAR 2的所有字符按升序排列
          [CHAR*],拷贝set2中的字符,长度为set1的长度
          [CHAR*REPEAT],重复拷贝
          [:alnum:],所有字母和数字
          [:alpha:],所有字母
          [:blank:],所有的水平空白
          [:cntrl:],所有的控制字符
          [:digit:],所有的数字
          [:graph:],所有的可打印的字符,不包括空格
          [:lower:],所有的小写字母
          [:print:],所有的可打印字符,包括空格
          [:punct:],所有标点符号
          [:space:],所有的水平和垂直空格
          [:upper:],所有的大写字母
          [:xdigit:],所有的十六进制数字
          [=CHAR=],所有等价于CHAR的字符
          如果没有给出‘-d’,同时出现SET1和SET2,则会发生翻译。‘-t’只能在翻译时使用。通过在必要时重复SET1的最后一个字符,Set2被扩展到SET1的长度。Set2的多余字符将被忽略。只有[:lower:]和[:upper:]保证按升序展开;在set2翻译时使用,它们只能成对使用以指定大小写转换。‘-s’在不翻译或删除时使用SET1;压缩使用SET2,并在翻译或删除后发生。
        
    3、实例
    1)删除内容
          [root@localhost weijie]# cat 1.c
          hello world, i am david. i love linux, love code.
          [root@localhost weijie]# tr -d hello < 1.c        //将1.c的内容输出到tr,然后删除出现的字符
           wrd, i am david. i v inux, v cd.                   //这里并不是删除一个单词hello,而是删除出现的这5个字母
    2)将文件中的小写字母替换成大写
          [root@localhost weijie]# tr -s a-z A-Z < 1.c
          HELO WORLD, I AM DAVID. I LOVE LINUX, LOVE CODE.

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    touch
          将文件的访问时间和修改时间修改为当前时间。如果指定的文件不存在,那么将会创造空文件,除非指定-c或-h选项。文件参数字符串‘-‘被专门处理,并导致touch更改与标准输出相关联的文件的时间。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          touch  [选项]  file

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -a
                只改变访问时间
          -c | --no-create
                不创建文件
          -d | --date=time
                设置为指定的时间,而不是当前的时间
          -f
                忽略
          -h
                只改变符号链接
          -m
                只改变修改时间
          -r | --reference=file
                使用指定文件的时间
          -t
                使用CCYYMMDDhhmmss时间
          --time=WORD
                改指定的时间:Word为access、atime或use
          “--date=STRING”是一种主要自由格式的人类可读的日期字符串,例如“Sun,2月29日16:21:42-0800”或“2004-02-29 16:21:21:42”,甚至“下星期四”。日期字符串可能包含指示日历日期、日时间、时区、周中日、相对时间、相对日期和数字的项。空字符串表示一天的开始。

    3、实例
    1)创建文件
          [root@localhost weijie]# ls                    //文件不存在
          1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  Tsplitaa  Tsplitab  Tsplitac  Tsplitad  xaa  xab  xac
          [root@localhost weijie]# touch -c 6.c          //使用选项-c,不创建文件
          [root@localhost weijie]# ls
          1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  Tsplitaa  Tsplitab  Tsplitac  Tsplitad  xaa  xab  xac
          [root@localhost weijie]# touch 6.c             //不使用任何选项,创建文件
          [root@localhost weijie]# ls
          1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  6.c  Tsplitaa  Tsplitab  Tsplitac  Tsplitad  xaa  xab  xac
    2)用指定的文件来修改目标文件时间
          [root@localhost weijie]# ll 1.c 2.c               //查看文件时间
          -rwxr--r-- 1 root david 50 9月  14 10:07 1.c
          -rwxr--r-- 1 root root  11 9月  13 16:52 2.c
          [root@localhost weijie]# touch -r 2.c 1.c       //将1.c的时间修改和2.c一样
          [root@localhost weijie]# ll 1.c 2.c              //查看文件时间
          -rwxr--r-- 1 root david 50 9月  13 16:52 1.c
          -rwxr--r-- 1 root root  11 9月  13 16:52 2.c

    -------------------------

    umask
          指定创建文件时所需要的权限掩码,掩码的执行权限对于文件没有效果。如果模式以数字开头,则解释为八进制数字;否则解释为符号模式掩码,类似于chmod(1)所接受的模式掩码。如果省略模式,则打印掩码的当前值。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          umask  [选项]  mask

    2、选项列表
          -S
                以字符方式表示权限掩码
          -P
                显示当前权限掩码

    3、实例
    1)查看mask,创建目录
          [root@localhost weijie]# umask                       //不用任何参数,可以查看掩码,0022
          0022
          [root@localhost weijie]# mkdir test               //创建目录
           [root@localhost weijie]# ll -d test               //查看
          drwxr-xr-x 2 root root 4096 9月  14 10:44 test   //权限755
    2)创建文件
          [root@localhost weijie]# touch 11.c               //创建文件
          You have new mail in /var/spool/mail/root
          [root@localhost weijie]# ll 11.c                  //查看权限
          -rw-r--r-- 1 root root 0 9月  14 10:46 11.c     //权限644,因为掩码中的执行权限,对文件没有效果
    3)修改掩码,创建目录
          [root@localhost weijie]# umask 0033              //修改掩码
          [root@localhost weijie]# mkdir test/             //创建目录
          [root@localhost weijie]# ll -d test/             //查看权限
          drwxr--r-- 2 root root 4096 9月  14 10:48 test/           //权限是744

    -------------------------

    cksum
          检查文件的crc是否正确,统计文件的字节数。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          cksum  [选项]  file

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息

    3、实例
          检测文件
          [root@192 weijie]# cksum 1.c
          //crc校验   字节数   文件名
          4188905735   12      1.c
        



    sum
          计算文件的校验码和块数,可以采用BSD和system V两种算法。如果没有指定文件,或者文件名是“-”,那么文件就是标准输入。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          sum  [选项]  file

    2、选项列表
          --version
                显示版本信息
          --help
                显示帮助文档
          -r
                使用system v算法,使用1k字节。
          -s
                使用BSD算法,使用512字节

    3、实例
    1)BSD算法
          [root@192 weijie]# sum -r 1.c
          //校验    块数
          35112     1
    2)systemV算法
          [root@192 weijie]# sum -s 1.c
          //校验  块数  文件名
          543     1     1.c

    -------------------------

    rm
          删除文件和目录,默认情况下不会删除目录。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          rm  [选项]  file

    2、选项列表
          --help
                显示帮助文档
          --version
                显示版本信息
          -f | --force
                强制执行,不交互
          -i
                交互模式,每删除一个文件都要询问
          -I
                在删除三个以上的文件之前,或者在递归删除之前,提示一次。“-I“的侵扰性不如“-i”,但仍能免受大多数错误的侵扰。
          --interactive[=WHEN]
                根据时间提示:从不(never),一次(-i),或始终(-i)。没有指定WHEN,总是提示
          --one-file-system
                递归删除层次结构时,跳过与相应命令行参数不同的文件系统上的任何目录。
          --no-preserve-root
               删除根目录
          --preserve-root
                不删除根目录,默认的
          -r | -R | --recursive
                递归的方式删除子目录
          -v | --verbose
                显示详细执行过程

    3、说明
          默认情况下,rm不删除目录。使用--recursive (-r or -R)选项也可以删除每个列出的目录及其所有内容。要删除名称以“-”开头的文件,例如“-foo”,请使用以下命令之一:
          rm  --  -foo
          rm  ./-foo
          注意,如果使用rm删除文件,通常可以恢复该文件的内容。如果您想要更多的保证内容是真正不可恢复的,请考虑使用shred。

    4、实例
    1)删除te开头的文件
          [root@localhost weijie]# ls
          11.c  1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  6.c  te000  te001  test
          [root@localhost weijie]# rm te*
          rm:是否删除普通文件 "te000"?y
          rm:是否删除普通文件 "te001"?y
          rm: 无法删除"test": 是一个目录          //无法删除目录
    2)删除目录
          [root@localhost weijie]# rm -rf test/             //强制删除目录
           [root@localhost weijie]# ls
          11.c  1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  6.c

    -------------------------

    tmpwatch
          删除最近一段时间没有访问的文件,时间以小时为单位,节省磁盘空间。tmpwatch递归删除给定时间未被访问的文件。通常,它用于清理用于临时保存空间(如/tmp)的目录。当更改目录时,tmpwatch对可能的争用条件非常敏感,如果检测到错误,就会退出。它不遵循它正在清理的目录中的符号链接(即使给出一个符号链接作为它的参数),它不会切换文件系统,跳过根用户的lost+found目录,只删除空目录、常规文件和符号链接。
    默认情况下,tmpwatch根据文件的atime(访问时间),而不是它们的Mtime(修改时间)来确定文件的日期。如果文件在“ls-l”暗示应该删除时没有被移除,请使用“ls-u”检查它们的数据,以确定这是否解释了问题的原因。
          如果指定了--atime”,“--ctime”或者“--mtime”选项,那么删除文件的时间由他们中的最大值决定。如果“--dirmtime”选项意味着忽略目录的atime,即使使用了“—atime”选项。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          tmpwatch  [选项]  time  file
        tmpwatch  [-u|-m|-c]  [-MUadfqstvx]  [--verbose]  [--force] [--all]  [--nodirs]  [--nosymlinks]  [--test]  [--fuser]  [--quiet]  [--atime|--mtime|--ctime]  [--dirmtime]  [--exclude path]  [--exclude-user user]  time  dirs

    2、选项列表
          -u | --atime
                根据文件的atime(访问时间)做出删除文件的决定。请注意,定期更新的文件系统扫描使目录保持最近的状态。
          -m | --mtime
                根据文件的Mtime(修改时间)而不是atime做出删除文件的决定。
          -c |  -ctime
                根据文件的ctime(Inode Changing Time)而不是atime来决定删除文件;对于目录,根据mtime做出决定
          -M | --dirmtime
                根据目录的Mtime(修改时间)而不是atime作出删除目录的决定;完全忽略目录的atime
          -a | -all
                删除所有文件类型,而不仅仅是常规文件、符号链接和目录。
          -d | --nodirs
                不要尝试删除目录,即使它们是空的。
          -f | -force
                强制删除,即使root用户没有写的权利
          -l | --nosymlinks
                不删除符号链接
          -q | --quite
                只报告致命错误
          -s | --fuser
                尝试在删除文件之前使用“fuser”命令查看文件是否已打开。默认情况下未启用。在某些情况下确实有帮助,但不是全部。依赖于/sbin中安装的fuser。不支持HPUX或Solaris
          -t | --test
                不删除,只是演示要做什么
          -U | --exclude-user=user
                不删除指定所有者的文件,可以指定用户名,也可以指定用户ID
          -v | --verbose
                显示详细信息
          -x | --exclude
                跳过目录及其内部文件,如果路径不存在,则它必须是不包含符号链接的绝对路径。
          -X | --exclude-pattern=pattern
                跳过路径匹配模式;如果目录匹配模式,则其中包含的所有文件也将被跳过。模式必须匹配不包含符号链接的绝对路径。

    3、实例
    1)删除当前目录1小时内没有访问的文件
          [root@192 weijie]# ls
          1.c   2.c   3.c   magic.mgc  test01  test03     wjtpflR
          1.c~  2.c~  3.c~  my.iso     test02  wj234.q1C
          You have new mail in /var/spool/mail/root
          [root@192 weijie]# tmpwatch 1 .
          [root@192 weijie]# ls
          1.c  1.c~  2.c
    2)不删除指定用户的文件
          [root@192 weijie]# ll
          总用量 12
          -rwxr--r-- 1 root david 12 9月  13 16:49 1.c         //文件所有者都是root
          -rw-r--r-- 1 root david 30 9月  13 16:43 1.c~
          -rwxr--r-- 1 root root  11 9月  13 16:52 2.c
          [root@192 weijie]# tmpwatch -U root 1 .            //不删除root用户的文件
          [root@192 weijie]# ls
          1.c  1.c~  2.c

    -------------------------

    mkdir
          如果目录不存在,那么就创建目录。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          mkdir  [选项]  dir

    2、选项列表
          --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

    -------------------------

    chattr
          改变文件的属性,这个命令只有超级用户才能使用。这个指令适用于ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs系统。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          chattr  [-RVf]  [ -v version ]  + | - | =[属性]  file
          运算符‘+‘使所选属性被添加到文件的现有属性中;’-’使它们被删除;‘=’使它们成为文件所拥有的唯一属性。

    2、选项列表
          -R
                递归的方式修改目录及其子目录下的文件属性
          -V
                显示详细执行过程
          -f
                跳过错误信息
          -v version
                设置文件或者目录的版本号

    3、属性
          a,只能以append的方式打开
          A,最后修改时间不被记录
          c,对文件进行压缩,而读取的时候会得到解压数据
          D,同步目录更新
          d,不进行备份
          E,压缩文件有错误,这个属性不能被用户手动修改
          e,文件使用扩展区来映射到磁盘
          -I,目录使用hash树来索引,这个属性不能被用户手动修改
          h,文件大小超过2TB,这个属性不能被用户手动修改
          i,文件不能被修改,但是可以删除或者重命名
          s,将数据块清零并存入磁盘
          S,同步更新。将文件修改之后,结果写入磁盘
          u,预防意外删除
          -T,目录层次结构顶部
          -X,压缩原始存取。虽然lsattr(1)可以显示它,但它目前不能使用chattr(1)进行设置或重置。
          -Z,压缩脏文件。虽然它可以由lsattr(1)显示,但不能使用chattr(1)设置或重置

    4、实例
    1)增加a属性,设置版本号。显示详细的执行过程
          [root@192 weijie]# chattr -v 1 -V +a 1.c
          chattr 1.41.12 (17-May-2010)
          1.c的标志被设为 -----a-------e-             //这里显示出最后的结果
          Version of 1.c set as 1
    2)删除a属性,增加c属性
          [root@192 weijie]# chattr -Vv 2 -a +c 1.c
          chattr 1.41.12 (17-May-2010)
          1.c的标志被设为 --------c----e-
          Version of 1.c set as 2

    -------------------------

    lsattr
          显示指定文件或者目录的属性。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          lsattr  [选项]  file

    2、选项列表
          -v
                列出文件版本号
          -R
                递归列出所有子目录中文件的属性
          -a
                列出所有文件的属性,包含隐藏文件
          -d
                列出目录的属性,而不是它里面内容的属性
          -V
                显示执行过程

    3、实例
    1)列出文件属性
          [root@192 weijie]# lsattr 1.c
          -------------e- 1.c
    2)列出目录下所有文件属性
          [root@192 weijie]# lsattr -a test01
          -------------e- test01/.
          -------------e- test01/..
          -------------e- test01/1.c~
    -------------e- test01/1.c
    3)列出目录属性
          [root@192 weijie]# lsattr -d test01
          -------------e- test01




    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    ar
          ar指令可以创建、修改库,也可以从库中提取单个模块。库是一个单独的文件,里面包含了按照特定结构组织起来的其他文件,我们称作member。归档文件通常是一个二进制文件,我们一般将归档文件当作库来使用。原始文件的内容、模式(权限)、时间戳、所有者和组保存在存档中,并可在提取时恢复。
          GNU ar可以维护其成员具有任意长度的名称的档案;但是,根据您的系统上对ar的配置方式,可以对成员名长度进行限制,以便与其他工具维护的存档格式兼容。如果存在,限制通常是15个字符(典型的与a.out相关的格式)或16个字符(典型的与coff相关的格式)。
    当您指定修饰符的时候,ar会为存档中可重定位的对象模块中定义的符号创建一个索引。创建之后,每当ar对其内容进行更改时,这个索引就会在存档中更新(除了Q更新操作外)。具有这样一个索引的归档可以加速链接到库,并允许库中的例程相互调用,而不考虑它们在存档中的位置。您可以使用“nm -s”或“nm --print-armap”列出此索引表。如果存档缺少表,则可以使用另一种称为ranlib的ar形式来添加表。
          GNU ar可以随意创建一个瘦存档,其中包含一个符号索引和对档案成员文件的原始副本的引用。这样的存档对于构建用于本地构建的库非常有用,因为在本地构建中,可重新定位的对象将保持可用,而复制每个对象的内容只会浪费时间和空间。薄档案也是扁平的,因此将一个或多个档案添加到一个瘦归档中将单独添加嵌套归档的元素。存档元素的路径是相对于归档本身存储的。
          GNU Ar被设计成与两个不同的设施兼容。您可以使用命令行选项来控制它的活动,比如Unix系统上的不同类型的ar;或者,如果您指定了单一命令行选项-M,您可以使用标准输入提供的脚本来控制它,比如MRI "librarian"程序。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          ar   [--plugin name]   [-X32_64]   [-]p[mod  [relpos]  [count]]   archive   [member...]

    2、选项列表
          GNU ar允许您在第一个命令行参数中按任意顺序混合操作代码p和修饰符标志mod。如果您愿意,可以用“-”开始第一个命令行参数。p键字母指定要执行的操作;它可能是以下任一操作,但您必须仅指定其中一个操作
          操作代码
          c,创建归档文件
          d,删除归档中的成员文件,将要删除的模块的名称指定为member。如果没有指定要删除的文件,则存档将保持不变
          m,改变成员文件在归档中的顺序 。如果在多个成员中定义了一个符号,则存档中成员的排序会改变程序使用库链接的方式。如果在“m”中没有使用修饰符,那么在成员参数中命名的任何成员都会移动到归档文件的末尾;您可以使用a、b或i修饰符将它们移动到指定的位置。
          p,将存档的指定成员打印到标准输出文件。如果指定了v修饰符,请在将其内容复制到标准输出之前显示成员名。
          q,将文件附加在归档文件的最后。修饰符a、b和i不影响此操作;新成员总是放在归档的末尾。修饰符v在追加时使每个文件都有ar列表。因为这个操作的重点是速度,所以存档的符号表索引不会更新,即使它已经存在;您可以显式地使用ar或ranlib来更新符号表索引。但是,有太多不同的系统假设快速追加索引,因此GNU ar实现了q作为r的同义词。
          r,将文件‘member’插入到归档文件,如果归档中存在要插入的文件,那么就覆盖。此操作与q的不同之处在于,如果现有成员的名称与要添加的成员匹配,则删除它们。如果成员中不存在‘member’,ar显示错误消息,并保持与该名称匹配的任何现有存档成员不受干扰。默认情况下,在文件末尾添加新成员;但您可以使用其中一个修饰符a、b或i请求相对于现有成员的位置。与此操作一起使用的修饰符v将引发插入的每个文件的一行输出。字母a或r,以指示文件是否被追加(没有删除旧成员)或被替换。
    t
    ,显示归档文件包含的文件列表。通常只显示成员名称;如果还希望查看模式(权限)、时间戳、所有者、组和大小,则还可以通过指定v修饰符来请求。如果未指定成员,则将列出存档中的所有文件。如果一个存档中有多个同名文件,只列出第一个实例;要查看它们,您必须要求一个完整的列表。
    x
    ,从归档文件中提取成员文件,您可以在此操作中使用v修饰符,在提取时请求ar列出每个名称。如果不指定成员,则提取存档中的所有文件。无法从瘦存档中提取文件。
    许多修饰符(Mod)可以紧跟p键,以指定操作行为的变化
          修饰符
          a,在存档的现有成员之后添加新文件。如果使用修饰符a,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。
          b,在存档的现有成员之前添加新文件。如果使用修饰符b,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。(与i相同)
          c,创建档案。当您请求更新时,如果指定的存档不存在,则始终创建它。但是,除非事先指定通过使用此修饰符来创建警告,否则将发出警告。
          D,在确定性模式下操作。当添加文件和存档索引时,对UID、GID、时间戳使用零,并对所有文件使用一致的文件模式。当使用此选项时,如果ar与相同的选项和相同的输入文件一起使用,则多次运行将创建相同的输出文件,而不管输入文件的所有者、组、文件模式或修改时间。
          f,截断存档中的名称。GNU ar通常允许任意长度的文件名。这将导致它创建与某些系统上的本机ar程序不兼容的档案。如果这是个问题,那么当将f修饰符放在归档文件中时,可以使用f修饰符来截断文件名。
          i,在存档的现有成员之前插入新文件。如果使用修饰符i,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。(与b相同)
          l,没有用的修饰符
          N,使用计数参数。如果存档中有多个具有相同名称的条目,则使用此方法。从存档中提取或删除给定名称的实例计数
          o,提取成员时保留成员的原始日期。如果不指定此修饰符,则从档案中提取的文件将加盖提取时间。
          P,在存档中匹配名称时使用完整路径名称。GNU ar不能创建具有完整路径名的存档(这类档案不是POSIX投诉),但其他归档创建者可以。此选项将导致GNU ar使用完整的路径名匹配文件名,这在从另一个工具创建的归档文件中提取单个文件时非常方便。
          s,将对象文件索引写入存档,或更新现有的索引,即使没有对归档进行其他更改。您可以在任何操作中使用此修饰符标志,也可以单独使用。在存档上运行ar等于在它上运行ranlib。
          S,不要生成存档符号表。这可以加快构建一个大型库的几个步骤。结果存档不能与链接器一起使用。为了构建符号表,必须在ar的最后一次执行时省略S修饰符,或者必须在归档文件上运行ranlib。
          T,将指定的归档文件设置为瘦存档。如果它已经存在并且是一个常规存档,则现有成员必须与存档目录相同。
          u,通常,ar r将列出的所有文件插入存档中。如果只想插入比同名的现有成员更新的文件,请使用此修饰符。u修饰符仅允许用于操作r(替换)。特别是不允许使用组合qu,因为检查时间戳将失去操作q的任何速度优势。
          v,显示详细执行过程
          V,显示ar的版本
          AR忽略初始选项-x32_64,以便与AIX兼容。此选项产生的行为是GNU ar的默认行为。ar不支持任何其他-X选项;特别是,它不支持-x32,这是AIX ar的默认设置。
          可选的命令行开关“--plugin name”使ar加载名为name的插件,这增加了对更多文件格式的支持。只有在工具链已启用插件支持的情况下,此选项才可用。
          @file选项,从文件中读取命令行选项。已读取的选项被插入以代替原始的@file选项。如果文件不存在或无法读取,则将按字面处理该选项,而不删除该选项。file中的选项用空格分隔。可以在选项中包含空格字符,方法是将整个选项包围在单引号或双引号中。任何字符(包括反斜杠)都可以通过前缀所包含的字符来包括在反斜杠中。file本身可能包含额外的@file选项;任何此类选项都将被递归处理。

    3、实例
    1)创建归档文件
          [root@localhost weijie]# ar -rc mlib.a 1.c 2.c           //创建归档
          [root@localhost weijie]# ls
          11.c  1.c  1.c~  2.c  3.c  4.c  4.c~  5.c  6.c  mlib.a
          [root@localhost weijie]# ar -t mlib.a                      //查看归档的文件列表
          1.c
          2.c
    2)在归档中插入文件
          [root@localhost weijie]# ar -rc mlib.a 3.c              //插入3.c,此时归档中还没有3.c
          [root@localhost weijie]# ar -t mlib.a                   //查看文件列表,3.c被加入
          1.c
          2.c
          3.c
          [root@localhost weijie]# ar -rc mlib.a 1.c            //插入1.c,注意此时1.c已经存在了
          [root@localhost weijie]# ar -t mlib.a                  //查看文件列表,1.c已经被覆盖了
          1.c
          2.c
          3.c
    3)在归档的最后插入文件
          [root@localhost weijie]# ar -q mlib.a 1.c             //是用选项q来追加到最后,注意这个和r是不一样的
          [root@localhost weijie]# ar -t mlib.a                  //查看文件列表,新增加了1.c
          1.c
          2.c
          3.c
          1.c
    4)从归档中删除文件
          [root@localhost weijie]# ar -d mlib.a 1.c             //删除1.c
          [root@localhost weijie]# ar -t mlib.a                  //查看文件列表,第一个1.c已经删除,但是最后还有一个
          2.c
          3.c
          1.c
          [root@localhost weijie]# ar -d mlib.a 1.c             //再次删除1。C
          [root@localhost weijie]# ar -t mlib.a                  //查看文件列表,1.c已经被删除
          2.c
          3.c

    -------------------------

    gzexe
          压缩可执行文件,在执行程序的时候可以自动实现解压。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          gzexe  file

    2、选项列表
          --help
                帮助信息
          --version
                显示命令版本信息
          -d
                解压

    3、实例
    1)压缩ls指令
          [root@localhost weijie]# gzexe /bin/ls                 //压缩ls指令,原来的指令文件变为ls~
          /bin/ls:     56.0%
          [root@localhost weijie]# ls -l /bin/ls*                //压缩后的命令占用更少的磁盘,而且还可以执行
          -rwxr-xr-x  1 root root  53198 9月  19 17:55 /bin/ls
          -rwxr-xr-x  1 root root 118932 11月 22 2013 /bin/ls~
    2)解压ls指令
          [root@localhost weijie]# gzexe -d /bin/ls              //解压
          [root@localhost weijie]# ls -l /bin/ls*                //解压之后,原来的压缩包变为ls~
          -rwxr-xr-x  1 root root 118932 9月  19 17:58 /bin/ls
          -rwxr-xr-x  1 root root  53198 9月  19 17:55 /bin/ls~

    -------------------------

    zip
          zip是一种最通用的文件压缩方式,使用于unix、msdos、windows、OS等系统。如果在编译zip时包含bzip 2库,zip现在也支持bzip 2压缩。当将大于4GB的文件添加到存档中时,zip会自动使用Zip 64扩展名,包含Zip 64条目的归档将被更新(如果结果的归档仍然需要Zip 64),归档的大小将超过4GB,或者当归档中的条目数超过64K时。Zip 64也用于从标准输入中传输的档案,因为事先不知道这些档案的大小,但是选项fz可以用来强制zip创建与PKZIP 2兼容的档案(只要不需要Zip 64扩展)。必须使用PKZIP4.5兼容解压缩,例如解压缩6.0或更高版本,才能使用Zip 64扩展名提取文件。
          zip程序将一个或多个压缩文件与有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到zip存档中。对于文本文件来说,压缩比为2:1和3:1是常见的。zip只有一种压缩方法(通缩),并且可以在不压缩的情况下存储文件。(如果添加了bzip 2支持,zip也可以使用bzip 2压缩,但这些条目需要一个合理的现代解压缩来解压缩。当选择bzip 2压缩时,它将通货紧缩替换为默认方法。)zip会自动为每个要压缩的文件选择更好的两个文件(通缩或存储,如果选择bzip2,则选择bzip2或Store)。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          zip  [选项]  zipfile  list

    2、选项列表
          -? | -h | --help
                帮助信息
          -h2 | --more-help
                显示扩展帮助,包括更多关于命令行格式、模式匹配和更模糊的选项。
          -V | --version
                显示命令版本信息
          -a | --ascii
                将系统使用的EBCDIC文件转换为ascii
          -A | --adjust-sfx
                调整自解压可执行档案。自解压缩的可执行存档是通过将SFX存根放在现有存档的前面创建的。-A选项告诉zip调整存储在归档中的条目偏移量,以考虑到这些“序言”数据。
          -b path  |  --temp-path path
                为临时zip归档使用指定的路径
          -B | --binary
                使用二进制格式,默认是文本格式
          -c | --entry-comments
                给被压缩的文件加上注释信息
                -d | --delete
                将指定的文件从压缩文件中删除
          -db | --display-bytes
                显示正在运行的字节计数,显示压缩的字节和要运行的字节。
          -dc | --display-counts
                显示已压缩的条目的运行计数和要运行的条目
          -dd | --display-dots
                在每个条目被拉链时显示点(除了在具有自己的进度指示器的端口上)。见下面的设置点大小-DS。默认情况下,每处理10 MB的输入文件就有一个点。-v选项还显示点(以前的速率比这个高得多,但现在-v也默认为10 MB),这个速率也是由-ds控制的。
          -dg | --display-globaldots
                显示存档的进度点,而不是为每个文件显示进度点。
          -ds size | --dot-size size
                设置为显示的每个点处理的输入文件的数量。尺寸为nm格式,其中n是一个数字,m是一个乘数。目前m可以是k(KB),m(MB),g(GB),或者t(TB),所以如果n是100,m是k,那么大小将是100 k,即100 KB。默认值为10 MB。
          -du | --display-usize
                显示每个条目的未压缩大小。
          -dv | --display-volume
          显示正在读取的每个条目的卷(磁盘)号,如果读取现有存档,并将其写入
          -D | --no-dir-entries
                不要在zip存档中为目录创建条目。
          -DF | --difference-archive
                创建一个包含自原始存档创建以来所有新的和已更改的文件的归档文件。
          -e | --encrypt
                压缩文件加密
          -f | --freshen
                替代压缩文件中的旧文件,如果文件不存在,那么不会追加文件
          -F | --fix | -FF | --fixfix
                尝试修复已经损坏的压缩文件
          -FI | --fifo
                通常zip会跳过读取遇到的任何FIFO(命名管道),因为如果FIFO没有被喂入,zip就会挂起。
          -FS | --filesync
                将存档的内容与操作系统上的文件同步
          -g | --grow
                将文件追加到已经存在的压缩文件结尾
          -i | --include
                仅包含指定的文件
          -j | --junk-paths
                压缩的时候,忽略文件名中的路径,只保存文件名和内容
          -J | --junk-sfx
                从存档中删除任何预置的数据
          -i | --include
                只包含指定的文件
          -la | --log-append
                附加到现有日志文件。默认值是覆盖
          -lf | --logfile-path
                在给定路径上打开日志文件。默认情况下,该位置的任何现有文件都会被覆盖
          -li | --log-info
                在日志中包含信息消息,例如正在压缩的文件名。默认情况下,只包含命令行、任何警告和错误以及最终状态。
          -L | --license
                显示zip的许可证
          -m | --move
                将指定的文件移动到压缩文件
          -MM | --must-match
                所有输入模式必须至少匹配一个文件,所有找到的输入文件必须是可读的。
          -n | --suffixes
                不要尝试压缩以给定后缀命名的文件。
          -nw | --no-wild
                不要执行内部通配符处理。
          -o | --latest-time
                将zip归档的“最后修改”时间设置为在zip归档中的条目中找到的最新(最老的)“最后修改”时间。
          -O | --output-file
                像往常一样处理归档更改,但不是更新现有存档,而是将新存档输出到输出文件。
          -p | --path
                将相对文件路径作为存储在存档中的文件名称的一部分
          -P | --password
                加密
          -q | --quite
                静默模式,不显示执行过程
          -r | --recurse-paths
                压缩的时候,递归处理目录
          -R | --recurse-patterns
                递归遍历目录结构,从当前目录开始。
          -s | --split-size
                启用创建拆分存档并设置拆分大小
          -sb | --split-bell
                如果拆分并使用拆分暂停模式,则在zip对每个拆分目标暂停时按下铃声。
          -sc | --show-command
                显示已处理并退出的启动zip的命令行
          -sf | --show-files
                显示要操作的文件,然后退出。
          -so | --show-options
                显示在当前系统上编译的zip支持的所有可用选项
          -sp | --split-pause
                如果使用-s启用拆分,则启用拆分暂停模式
          -su | --show-unicode
                和-sf一样,如果存在,还会显示路径的unicode版本
          -sU | --show-just-unicode
                和-sf一样,仅显示路径的Unicode版本(如果存在),否则显示路径的标准版本。
          -sv | --split-verbose
                在拆分时启用各种详细的消息,显示拆分是如何进行的。
          -t mmddyyyy | --from-date mmddyyyy
                不要对在指定日期之前修改的文件进行操作,其中mm是月份(00-12),dd是月份的日期(01-31),yyyy是年。
          -T | --test
                测试新zip文件的完整性。如果检查失败,旧的zip文件将保持不变,并且(使用-m选项)不会删除输入文件。
          -TT | --unzip-command
                当使用-T选项时,使用命令cmd而不是“unzip-tqq”来测试存档。
          -U | --copy-entries
                将条目从一个存档复制到另一个存档。
          -u | --update
                更新文件,不存在的时候,直接追加。仅当zip存档中的现有条目比zip存档中的版本修改得更近时,才替换(更新)它。
          -UN | --unicode
                确定zip应该如何处理unicode文件名
          -x | --exclude
                压缩时不包含指定的文件
          -y
                压缩时直接保存符号链接
          -v | --verbose
                显示执行过程
          -ws | --wild-stop-dirs
                通配符仅在目录级别匹配。
          -#
                使用指定的数字#调整压缩速度,其中-0表示没有压缩(存储所有文件),-1表示最快的压缩速度(压缩较少),-9表示最慢的压缩速度(最佳压缩,忽略后缀列表)。默认的压缩级别是-6
          -@ | --names-stdin
          从标准输入中获取输入文件列表。每行只有一个文件名。

    4、模式匹配
          ?,匹配任意单个字符
          *,匹配任意多个字符
          []匹配括号内所示范围内的任何字符(例如:[a-f],[0-9])。

    5、退出码
          0,正常,没有错误。
          2,压缩文件的意外结束。
          3,检测到zip文件格式中的通用错误。
          4,在程序初始化期间,zip无法为一个或多个缓冲区分配内存。
          5,检测到zip文件格式出现严重错误。
          6,条目太大,无法处理(例如,不使用Zip 64或试图读取现有存档太大时,输入文件大于2GB)或条目太大,不能用zip拆分。
          7,无效注释格式。
          8,zip-T失败或内存不足。
          9,用户使用Control-C(或类似的)过早中止zip。
          10,使用临时文件时,zip遇到了一个错误。
          11,读取或查找错误。
          12,zip无事可做。
          13,丢失或空压缩文件。
          14,写入文件时出错。
          15,zip无法创建要写入的文件。
          16,坏命令行参数。
          18,zip无法打开要读取的指定文件。
          19,在此系统中不支持的选项编译了zip。

    6、例子代码
          创建存档stuff.zip(假设它不存在),并以压缩形式将所有文件放在当前目录中(.zip后缀自动添加,除非存档名称已经包含一个点;这允许明确说明其他后缀)。
                zip  stuff  *
                zip  stuff  .* *

          压缩整个目录。创建存档foo.zip,其中包含当前目录中包含的目录foo中的所有文件和目录。
                zip  -r  foo  foo
          您可能希望创建一个包含foo中文件的zip存档,而不记录目录名foo。可以使用-j选项关闭路径,如
                zip  -j  foo  foo/*
          如果您缺少磁盘空间,您可能没有足够的空间来保存原始目录和相应的压缩归档文件。在这种情况下,您可以使用-m选项分步骤创建归档文件。如果foo包含子目录Tom、Dick和Harry。其中,第一个命令创建foo.zip,下两个命令添加到其中。在完成每个zip命令后,最后创建的归档文件将被删除,为下一个zip命令提供工作空间。
                zip  -rm  foo  foo/tom
                zip  -rm  foo  foo/dick
                zip  -rm  foo  foo/harry

          使用-s设置拆分大小并创建拆分存档。大小可选地被k(KB)、m(MB)、g(Gb)或t(Tb)之一跟随。创建目录foo的拆分存档,每个分区不大于2GB。如果foo包含5 GB的内容,并且内容未经压缩就存储在拆分存档中(为了使这个示例变得简单),这将创建三个分块,分别是2GB的split.z01、2GB的split.z02和略高于1GB的split.zip。
                zip  -s  2g  -r  split.zip  foo
          虽然zip不更新拆分档案,但zip提供了新的选项-O(-Output-file),允许更新拆分档案并将其保存在新的存档中。读取归档文件,即使拆分,也会添加foo.c和bar.c文件,并将结果存档写入outArchive.zip。如果inArchive.zip是拆分的,那么outArchive.zip默认为相同的拆分大小。请注意,outArchive.zip和使用它创建的任何拆分文件都会在没有警告的情况下被覆盖。这种情况将来可能会改变。
                zip  inarchive.zip  foo.c  bar.c  --out  outarchive.zip

    7、实例
    1)压缩文件
          [root@localhost weijie]# zip -r res . -i *.c             //压缩当前目录下的所有.c文件
            adding: 11.c (stored 0%)
            adding: 4.c (stored 0%)
            adding: 2.c (deflated 9%)
            adding: 3.c (stored 0%)
            adding: 5.c (deflated 13%)
          [root@localhost weijie]# ls
          11.c  1.c.gz  2.c  3.c  4.c  5.c  6.c~  res.zip
    2)给压缩文件添加、删除内容
          [root@localhost weijie]# zip res.zip -g 6.c~          //追加6.c~
            adding: 6.c~ (stored 0%)
          [root@localhost weijie]# zip res.zip -d 2.c           //删除2.c
          deleting: 2.c
    3)压缩时设置密码
          [root@localhost weijie]# zip -er res . -i *.c        //设置密码,需要输入两次密码
          Enter password:
          Verify password:
            adding: 11.c (stored 0%)
            adding: 4.c (stored 0%)
            adding: 2.c (deflated 9%)
            adding: 3.c (stored 0%)
            adding: 5.c (deflated 13%)

    -------------------------

    zipinfo
          在不解压的情况下,获取zip压缩文件的的详细信息。zipinfo列出了ZIP档案中有关文件的技术信息,最常见的是在MS-DOS系统上。这些信息包括文件访问权限、加密状态、压缩类型、版本和操作系统或压缩程序的文件系统等。默认的行为(没有选项)是列出存档中每个文件的单线条目,标题和拖车行为整个归档提供摘要信息。格式是Unix‘ls-l’和‘unzip-v’输出之间的交叉。见下文的详细说明。请注意,zipinfo与解压缩程序相同(在Unix下,链接到它);然而,在某些系统上,在解压缩编译时可能忽略了zipinfo支持。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          zipinfo  [-12smlvhMtTz]  file[.zip]  [file(s) ...]  [-x xfile(s) ...]

    2、参数和选项列表
          file[.zip]
                ZIP存档的路径。如果文件规范是通配符,则按操作系统(或文件系统)确定的顺序处理每个匹配的文件。只有文件名可以是通配符;路径本身不能。通配符表达式类似于unix egrep(1)(正则)表达式,可能包含
          [file(s)]
                要处理的归档成员的可选列表,用空格分隔。(用VMSCLI定义的VMS版本必须用逗号分隔文件。)正则表达式(通配符)可用于匹配多个成员;参见上文。同样,请务必引用否则将由操作系统展开或修改的表达式。
          [-x xfile(s)]
                要排除在处理之外的归档成员的可选列表。

          -h | --help
                帮助信息
          -V | --version
                显示命令版本信息
          -1
                只列出文件名称
          -2
                和“-1”类似,但是可以单配其他选项“-h”、-i”、-z”
          -s
                类似“ls –l”的短格式
          -m
                类似“ls -l”的medium格式
          -l
                类似“ls -l”的长格式
          -v
                显示zip文件的详细信息
          -h
                只列出压缩包的文件名、大小、包内文件数目
          -M
                类似more命令,分屏显示
          -t
                列出压缩文件内的文件数目、压缩前后文件大小、压缩率
          -T
                将压缩包内文件的日期以年、月、日、时、分、秒的顺序列出
          -z
                显示压缩文件的注释信息

    3、例子代码
          要获得包含头行和总计行的ZIP存档Storage.zip的完整内容的基本的、简短的列表,只使用归档名称作为zipinfo的参数。
                zipinfo  storage
          要生成一个基本的、长格式的列表(而不是冗长的),包括标题和总计行,请使用-l:
                zipinfo  -l  storage
          要列出没有标题和总计行的存档的完整内容,可以忽略-h和-t选项,或者显式地指定内容:
                zipinfo  --h-t  storage
                zipinfo  storage  \*

          默认情况下,若要关闭汇总行,请使用环境变量(此处假定为C shell):
                setenv  ZIPINFO  --t
                zipinfo  storage

          为了再次获得第一个示例的完整、简短的列表,考虑到前面示例中设置了环境变量,有必要显式地指定-s选项,因为-t选项本身意味着只打印页      脚行
                setenv  ZIPINFO  --t
                zipinfo  -t  storage            [only totals line]
                zipinfo  -st  storage           [full listing]
        
          若要以中等格式列出存档中单个文件的信息,请显式指定文件名。
               zipinfo  -m  storage  unshrink.c
          任何成员文件的规范都将覆盖默认的标头和总计行;将只打印有关请求文件的一行信息。这是在请求有关单个文件的信息时所期望的直观结果。对于多个文件,了解总的压缩和未压缩大小通常是有用的;在这种情况下,可以显式地指定-t:
                zipinfo  -mt  storage  "*.[ch]"  Mak\*
          要获取有关ZIP存档的最大信息,请使用详细选项。如果操作系统允许,通常明智的做法是将输出输送到Unix More(1)这样的过滤器中:
                zipinfo  -v  storage | more
          要查看存档中最近修改的文件,请结合外部排序实用程序(如Unix Sort(1)和sed(1)使用-T选项
                zipinfo  -T  storage | sort  –nr  -k  7 | sed  15q

    4、实例
    1)显示压缩文件内的信息
          [root@localhost weijie]# zipinfo res.zip                        //查看压缩包内文件信息
          Archive:  res.zip
          Zip file size: 907 bytes, number of entries: 5
          -rw-r--r--  3.0 unx        0 BX stor 18-Sep-14 10:46 11.c
          -rwxr--r--  3.0 unx       15 TX stor 18-Sep-19 16:08 4.c
          -rwxr--r--  3.0 unx       11 TX defN 18-Sep-19 16:08 2.c
          -rwxr--r--  3.0 unx       15 TX stor 18-Sep-19 16:08 3.c
          -rw-r--r--  3.0 unx       38 TX defN 18-Sep-14 09:41 5.c
          5 files, 79 bytes uncompressed, 73 bytes compressed:  7.6%
    2)使用-h选项
          [root@localhost weijie]# zipinfo -h res.zip             //只显示压缩包大小、文件数目
          Archive:  res.zip
          Zip file size: 907 bytes, number of entries: 5

    -------------------------

    bunzip2
          解压缩bzip2压缩过的文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          bunzip2  [-fkvsVL]  文件

    2、选项列表
          -f | --force
                强制执行
          -k | --keep
                解压之后,保留源文件
          -v | --verbose
                显示详细信息
          -s | --small
                减少内存使用,用于压缩、解压缩和测试。使用修改的算法对文件进行解压缩和测试,该算法每个块字节只需要2.5字节。这意味着任何文件都可以在2300 k内存中解压缩,尽管速度是正常速度的一半。
          -L | --license | -V | --version
                显示软件版本,许可条款和条件。

    3、实例
    1)解压,保留压缩包
          [root@localhost weijie]# bunzip2 -k 2.c.bz2             //解压之后保留压缩包
          [root@localhost weijie]# ls
          11.c  1.c.gz  1.gz  2.c  2.c.bz2  3.c  4.c  5.c  6.c~  rec000012.c.bz2  res.zip
    2)解压
          [root@localhost weijie]# bzip2 -d res.bz2            //解压
          [root@localhost weijie]# ls
          11.c  1.c.bz2  2.c  3.c  4.c  5.c  6.c~  bak  res
    3)将两个文件压缩到一个文件中
          [root@localhost weijie]# cat 1.c 2.c                   //输出两个文件的内容
          hello world,
          i am david.
          i love linux,
          love code.
          123
          23
          212
          [root@localhost weijie]# bzip2 –c 1.c > foo.gz        //将1.c压缩到foo
          [root@localhost weijie]# bzip2 –c 2.c >> foo.gz       //将2.c压缩到foo
          [root@localhost weijie]# bgzip2 -d foo.gz              //解压foo
          [root@localhost weijie]# cat foo                        //显示foo的内容
          hello world,
          i am david.
          i love linux,
          love code.
          123
          23
          212

    -------------------------

    bzcat
          解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s。该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
    bzcat  [-s]  文件

    2、选项列表
          -s
                降低程序运行时内存使用

    3、实例
          解压文件到标准输出
          [root@localhost weijie]# cat 2.c
          123
          23
          212
          [root@localhost weijie]# bzcat -s 2.c.bz2             //将文件解压到标准输出
          123
          23
          212

    -------------------------

    zcat
          解压有gzip压缩的文件,将解压结果送到标准输出。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          zcat  [-fhVL]  文件

    2、选项列表
          -h | --help
                帮助信息
          -V | --version
                显示命令版本信息
          -f | --force
                强制执行
          -L | --licence
                显示gzip的版本并且退出

    3、实例
    1)查看压缩包信息
          [root@localhost weijie]# zcat -l 1.c.gz
             compressed        uncompressed  ratio uncompressed_name
                     70                  53   9.4% 1.c
    2)解压文件到标准输出
          [root@localhost weijie]# zcat 1.c.gz
          hello world,
          i am david.
          i love linux,
          love code.

    -------------------------

    bzmore
          将bzip压缩过的文件解压到标准输出,同时也可以将普通文件显示到标准输出。该指令可以实现分屏显示,并且不会删除压缩包。bzmore是一个过滤器,它允许在软拷贝终端上一次检查压缩或纯文本文件。bzmore可以处理使用bzip2压缩的文件,也可以处理未压缩的文件。如果文件不存在,bzmore将查找同名文件,并添加.bz2后缀。Bzmore通常在每个屏幕后暂停,打印-更多-在屏幕底部。如果用户然后键入回车,则会显示多一行。如果用户点击一个空格,则会显示另一个屏幕。其他可能性将在后面列举。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          bzmore  文件

    2、选项列表
          Bzmore在文件“/etc/Tercap”中查找以确定终端特性,并确定默认窗口大小。在能够显示24行的终端上,默认窗口大小为22行。在bzmore暂停时可能键入的其他序列及其效果如下(i是可选的整数参数,默认为1):
          i<space>
                多显示i行(或另一个屏幕,如果没有给出参数)
          ctrl+D
                多显示11行(“滚动”)。如果给定i,则滚动大小设置为i。
          d
                同上
          iz
                与键入空格相同,但如果有i,则会成为新的窗口大小。请注意,窗口大小将恢复到当前文件末尾的默认值。
          is
                跳过i行,然后打印出满屏幕
          if
                跳过i屏幕,打印一整行的屏幕
          q | Q
                停止读取当前文件;继续下一个文件(如果有的话)
          e | q
                当输出提示符--More-- (Next  file:  file时,此命令将导致bzmore退出。
          s
                当输出提示符--More-- (Next  file:  file时,此命令将导致bzmore跳过下一个文件,然后继续
          =
                显示当前的行号
          i/expr
                搜索正则表达式expr的第i次出现。如果找不到模式,bzmore将继续到下一个文件(如果有的话)。否则,会显示一个屏幕,在找到表达式的位置之前开始两行。用户的擦除和删除字符可用于编辑正则表达式。通过第一列的擦除将取消搜索命令。
          in
                搜索输入的最后一个正则表达式的第i次出现
          !command
                使用命令唤醒shell。字符‘!’在“命令”中,将替换为前面的shell命令。序列“\!”改为“!”
          :q | :Q
                停止读取当前文件;转到下一个文件(如果有的话)(与q或Q相同)。
          .
                重复前面的命令

          这些命令立即生效,即不需要键入回车。在给出命令字符本身的时间之前,用户可以点击行终止字符来取消正在形成的数值参数。此外,用户还可以点击擦除字符来重新显示-更多的消息。
          在任何时候,当输出被发送到终端时,用户可以按退出键(通常是Control-\)。Bzmore将停止发送输出,并显示通常的“--More--”提示。然后,用户可以正常方式输入上述命令之一。不幸的是,当这样做时,会丢失一些输出,因为当退出信号发生时,终端输出队列中等待的任何字符都会被刷新。
          该程序将终端设置为noecho模式,以便输出可以连续。因此,您键入的内容将不会显示在您的终端上,除了‘/’和‘!’命令。
          如果标准输出不是teletype,那么bzmore就像bzcat一样,只是在每个文件之前打印一个头。

    3、实例
    1)解压bz2文件
          [root@localhost weijie]# bzmore 2.c.bz2             //将内容解压到标准输出,不删除压缩包
          ------> 2.c.bz2 <------
          123
          23
          212
    2)显示普通文件
          [root@localhost weijie]# bzmore 1.c                 //直接显示普通文件
          ------> 1.c <------
          hello world,
          i am david.
          i love linux,
          love code.

    -------------------------

    gunzip
          解压缩被gzip压缩过的文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          gunzip [-acfhlLnNrtvV]  [-S suffix] 文件

    2、选项列表
          -h | --help
                帮助信息
          -V | --version
                显示命令版本信息
          -f | --force
                强制执行
          -a | --ascii
                文本模式。此选项仅在某些非Unix系统上支持。
          -c | --stdout | --to-stdout
                将解压的文件写到标准输出,源文件不变。如果有多个输入文件,则输出由一系列独立压缩的成员组成。为了获得更好的压缩,在压缩所有输入文件之前先将它们连接起来。
          -l | --list
                列出压缩文件的信息
          -L | --licence
                列出gzip的许可证并且退出
          -n | --no-name
                解压缩时,如果存在,不要还原原始文件名(仅从压缩文件名中删除gzip后缀),如果存在则不要恢复原始时间戳(从压缩文件中复制它)。此选项是解压缩时的默认选项。
          -N | --name
                解压缩时,如果存在,请还原原始文件名和时间戳。此选项对于限制文件名长度的系统或在文件传输后丢失时间戳的系统非常有用。
          -r | --recursive
                递归遍历目录结构。如果命令行中指定的任何文件名都是目录,则gzip将下降到目录中,并压缩它在目录中找到的所有文件(或者解压它们,如果是gunzip的话)。
          -t | --test
                测试压缩文件完整性
          -v | --verbose
                显示详细执行过程
          -S
                解压缩时,在从输入文件名派生输出文件名时,将.suf添加到后缀列表的开头以尝试。

    3、实例
    1)解压
          [root@localhost weijie]# gunzip -v 1.gz               //解压,显示详细执行过程
          1.gz:    9.4% -- replaced with 1
    2)指定文件后缀
          [root@localhost weijie]# gunzip -v 1.mygz             //解压,后缀不是gz,报错
          gzip: 1.mygz: unknown suffix -- ignored
          [root@localhost weijie]# gunzip -v -S "mygz" 1.mygz   //指定后缀名,不报错
          1.mygz:     9.4% -- replaced with 1.

    -------------------------

    安装telnet    
          telnet是标准的远程登录协议,历史悠久。但是telnet的对话数据没有加密,甚至用户名和密码都是明文显示,这样的服务风险极大。目前大多数系统多已经不会再安装这个服务了,用户需要自己手动安装

    1、安装telnet软件,用户可以将telnet的服务器和客户端都安装
          [root@localhost wj]# rpm -qa | grep telnet
          [root@localhost wj]# yum install -y telnet-server   //telnet服务器端,允许其他电脑连接
          Installed:
            telnet-server.i686 1:0.17-48.el6                                                                                          
          Complete!

          [root@localhost wj]# yum install -y telnet      //telnet客户端,可以连接其他电脑
          Installed:
            telnet.i686 1:0.17-48.el6                                                                                                  
          Complete!

    2、配置telnet,修改配置文件“/etc/xinetd.d/telnet”,将参数disable改为no
          [root@localhost wj]# gedit /etc/xinetd.d/telnet
           # default: on
          # description: The telnet server serves telnet sessions; it uses \
          #    unencrypted username/password pairs for authentication.
          Service telnet
          {
              flags        = REUSE
              socket_type    = stream        
              wait        = no
              user        = root
              server        = /usr/sbin/in.telnetd
              log_on_failure    += USERID
              disable        = no  //这个默认是yes,只有改成no才可以启动telnet
          }


    3、修改端口。telnet默认的端口是23,用户可以修改“/etc/services”文件来改变端口。
          [root@localhost wj]# gedit /etc/service
          telnet          23/tcp     //为了防止被攻击,一般都不会使用23端口。注意这里的23端口要使用tcp和udp两种协议
          telnet          23/udp

    4、修改防火墙,打开tcp和udp的23端口
          [root@localhost wj]# gedit /etc/sysconfig/iptables
         -A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
          -A INPUT -m state --state NEW -m udp -p udp --dport 23 -j ACCEPT

          [root@localhost wj]# service iptables restart
          iptables:将链设置为政策 ACCEPT:filter nat                [确定]
          iptables:清除防火墙规则:                                 [确定]
          iptables:正在卸载模块:                                   [确定]
          iptables:应用防火墙规则:                                 [确定]
          iptables:载入额外模块:nf_conntrack_ftp                   [确定]


    5、启动telnet
          [root@localhost wj]# service xinetd restart        //telnet依赖xinetd
          停止 xinetd:                                              [确定]
          正在启动 xinetd:                                          [确定]

    6、测试,在window端连接telnet。注意,不要用root用户登录,默认不允许。
          [root@localhost wj]# telnet 192.168.0.119
          Trying 192.168.0.119...
          Connected to 192.168.0.119.
          Escape character is '^]'.
          CentOS release 6.5 (Final)
          Kernel 2.6.32-431.el6.i686 on an i686
          login: david
          Password:
          Last login: Thu Aug 16 08:24:19 from 192.168.0.119
          already login

    -------------------------

    head
            显示文件开头的几行,默认显示10行,可以使用选项-n来指定行数。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           head  [选项]  files    

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --bytes=[-]K
                    显示文件开头的n个字节;-n显示所有内容,但是不包含最后n字节
            -n | --lines=[-]K
                    显示开头的k行;-k显示所有行,但是不包含最后k行
            -q | --quite | --silent
                    不显示文件名
            -v | --verbose
                    显示文件名

    3、实例
    1)显示开头的10个字节
            [root@localhost weijie]# cat 5.c               //查看所有内容
            1,2c1,2
            < 123
            < 23
            ---
            > 12345
            > 2334
            [root@localhost weijie]# head -c 10 5.c      //显示前10个字节
            1,2c1,2
            <
    2)显示前3行    
            [root@localhost weijie]# head -n 3 5.c         //使用-n选项指定显示前3行
            1,2c1,2
            < 123
            < 23

    -------------------------

    more
            将内容较长的文本文件内容分屏显示,支持定位关键字。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           more  [-dlfpcsu]  [-num]  [+/pattern]  [+linenum]  [file ...]

    2、命令和选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -num
                    每一页显示的行数
            -d
                    在最后一行显示说明
            -l
                    更常见的做法是将^L(表单提要)视为特殊字符,并在包含表单提要的任何行之后暂停。-l选项将防止这种行为。
            -f
                    只处理正常行,太长的行不处理
            -p
                    不滚动,清屏显示文本
            -c
                    不滚动,清屏显示全新的一页
            -s
                    将多个空白行合并
            -u
                    压制下划线
            +/
                    在显示之前查找字符串
            +num
                    从第num行开始显示

            当使用more指令之后,屏幕进入了more的命令模式,我们需要借助一些命令才能查看所有的内容。
            h | ?
                    显示帮助信息
            空格
                    显示下面的几行,默认是滚动一屏
            z
                    显示下k行文本。默认为当前屏幕大小。参数成为新的缺省值。
            回车
                    显示下面的几行,默认是一行
            d | ^D
                    滚动几行,初始化时11
            q | Q
                    退出
            s
                    跳过前面的几行,默认是1
            f
                    跳过前面的几屏,默认是1
            b or ^B
                    跳过k个文本屏幕。默认为1。只适用于文件,而不是管道。
            ,
                    到以前搜索开始的地方
            =
                    显示当前行号
            !<cmd> or :!<cmd>
                    执行指令
            v
                    在当前行启动编辑器。如果定义了环境变量VISUAL,则从环境变量获取编辑器;如果未定义VISUAL,则从EDITOR获取;如果未定义可视化或编辑器,则默认为“vi”。
            ^L
                    重新绘制屏幕
            :n
                    跳转到下面的第n个文件,默认1
            :p
                    跳转到前面的第n个文件,默认1
            :f
                    显示当前的文件名和行号
            .
                    重复之前的命令
            /字符串
                    查找字符串,向尾部查找
            ?字符串
                    查找字符串,向头部查找

    3、实例
    管道配合more, 在最底部显示了more指令的说明信息
            [root@localhost weijie]# less /etc/httpd/conf/httpd.conf  
            alsa-info
            alsa-info.sh
            alsaloop
            alsamixer
            amidi
            amixer
            amuFormat.sh
            anthy-agent
            --More--[Press space to continue, 'q' to quit.]

    -------------------------

    cut
          将文件中每一行的指定内容显示到标准输出。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          cut  [选项]  file

    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          -b | --bytes=LIST
                设置输出字节数或者范围
          -c | --characters=LIST
                设置输出的字符数或者范围
          -d | --delimiter=DELIM
                指定列的分隔符,默认是tab
          -f | --fields=LIST
                显示分割后的列
          -n
                和“-b”一起使用,不要分割多字节字符
          --complement
                补充选定的字节、字符或字段集
          --output-delimiter=STRING
                使用STRING作为输出分隔符,默认为使用输入分隔符
          -s | --only-delimited
                如果该行没有分隔字符,那么不显示这行

    3、实例
          显示以:分割后的第3列
          [root@localhost weijie]# cat /etc/passwd              //查看内容
          root:x:0:0:root:/root:/bin/bash
          bin:x:1:1:bin:/bin:/sbin/nologin
          daemon:x:2:2:daemon:/sbin:/sbin/nologin
          adm:x:3:4:adm:/var/adm:/sbin/nologin
          lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

          [root@localhost weijie]# cut -f 3 -d: /etc/passwd      //以:为分隔符,显示第3列
          0
          1
          2
          3
          4

    -------------------------

    look
             显示文件中以特定字符串开始的行。在look执行二进制搜索时,必须对文件中的行进行排序。如果未指定文件,则使用文件“/usr/share/dict/words“,只比较字母数字字符,忽略字母字符的大小写。
             此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
             look  [选项]  string  files

    2、选项列表
             --version
                      显示命令版本信息
             --help
                      显示帮助文档
             -d
                      只对比数字和英文字母,其他忽略
             -f
                      忽略字符的大小写
             -a
                      使用字典文件/usr/dict/web2
             -t
                      指定字符串结束符

    3、实例
             显示以hello开头的行
             [root@localhost weijie]# cat 1.c                //查看文件
             hello world,
             i am david.
             i love linux,
             love code.
             [root@localhost weijie]# look hello 1.c       //显示以hello开头的行
             hello world,

    -------------------------

    od
          将指定文件的内容以八进制、十进制、十六进制等编码方式显示。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          od  [选项]  file
          od  [-abcdfilosx]... [FILE]  [[+]OFFSET[.]]
          od  --traditional  [OPTION]... [FILE]  [[+]OFFSET[.]  [+][LABEL][.]]

    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          -A | --address-radix=RADIX
                设置偏移量的编码单位
          -j | --skip-bytes=BYTES
                跳过指定书目的字符
          -N | --read-bytes=BYTES
                输出指定字符数
          -S | --strings[=BYTES]
                输出至少BYTES个图形字符的字符串
          -t | --format=TYPE
                指定输出格式
          -w | --width[=BYTES]
                设置每一行的最大字数
          -v | --output-duplicates
                显示重复的数据
          --traditional
                接受传统形式的参数

    3、实例
          1)以八进制方式显示内容
          [root@localhost weijie]# cat 3.c                     //查看内容
          12345
          2334
          212
          [root@localhost weijie]# od 3.c                     //以八进制显示
          0000000 031061 032063 005065 031462 032063 031012 031061 000012
          0000017
          2)以字符方式显示内容
          [root@localhost weijie]# cat 1.c                   //查看内容
          hello world,
          i am david.
          i love linux,
          love code.
          [root@localhost weijie]# od -t c 1.c              //以字符方式显示
          0000000   h   e   l   l   o       w   o   r   l   d   ,      \n   i    
          0000020   a   m       d   a   v   i   d   .      \n   i       l   o   v
          0000040   e       l   i   n   u   x   ,      \n   l   o   v   e       c
          0000060   o   d   e   .  \n
          0000065

    -------------------------

    tail
            显示文本文件尾部的部分内容,默认显示最后10行。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            tail  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --bytes=k
                    显示最后的k个字节
            -f
                    持续读取文本尾部数据,通常用于监控日志文件
            -F
                    等价于--follow=name
            -n | --lines=k
                    显示最后的k行
            --pid=PID
                    和-f一起使用,当指定进程号程序结束的时候,停止tail
            -q | --quite | --silent
                    不显示文件名    
            --retry
                    继续尝试打开文件,即使文件是不可访问的或变得不可访问。
            -v | --verbose
                    显示文件名

    3、实例
    1)显示最后一行
            [root@localhost weijie]# cat 1.c                   //查看文件
            hello world,
            i am david.
            i love linux,
            love code.
            [root@localhost weijie]# tail -n 1 1.c          //显示最后一行
            ove code.
    2)显示最后几个字符
            [root@localhost weijie]# tail -c 10 1.c         //显示最后10个字符
            ove code.

    -------------------------

    tac
         将指定文件中的行,按照反序方式显示。
         此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
         tac  [选项]  file

    2、选项列表
         --version
              显示命令版本信息
         --help
              显示帮助文档
         -b | --before
              将分隔符放到文件记录前
         -r | --regex
              将分隔符当做一般字符处理
         -s | --separator=STRING
              使用指定的间隔字符取代新建的控制字符

    3、实例
    1)反序显示
         [root@localhost weijie]# cat 1.c           //查看文件内
         hello world,
         i am david.
         i love linux,
         love code.
         [root@localhost weijie]# tac 1.c           //反序显示
         love code.
         i love linux,
         i am david.
         hello world,
    2)将分隔符放在文件前面
         [root@localhost weijie]# tac -b 1.c          //将分隔符“回车”放在文件最前面,导致最前面是两个空行,最后一行不能换行


         love code.
         i love linux,
         i am david. hello world, [root@localhost weijie]

    -------------------------

    tee
           将标准输入的内容复制到指定的文件中,同时在标准输出中显示。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           tee  [选项]  [files]

    2、选项列表
           --version
                  显示命令版本信息
           --help
                  显示帮助文档
           -a | --append
                  追加模式,并不覆盖
           -i | --ignore-interrupts
                  忽略终端信号

    3、实例
           将文件内容排序之后保存到另外的地方
           [root@192 weijie]# cat 2.c                        //查看内容
           hello    linux
           i     am     weijie
           love     world
           hehe
           im     join
           [root@192 weijie]# sort 2.c | tee 4.c         //排序之后保存到4.c,并且送到biaozhun输出
           hehe
           hello    linux
           i     am     weijie
           im     join
           love     worl

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    uniq
          将文件中重复出现的行删除,结果送到标准输出或者指定文件。在使用uniq指令之前,必须使用sort对内容进行排序,否则没有效果。如果没有选项,则将匹配的行合并到第一个匹配项。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          uniq  [选项]  [input]  [output]

    2、选项列表
          --version
                显示命令版本信息
          --help
                显示帮助文档
          -c | --count
                显示行重复出现的次数
          -d | --repeated
                仅显示重复出现的行
          -D|--all-repeated[=delimit-method]
                打印所有重复行
          -f | --skip-fields=N
                忽略前n个字段
          -i | --ignore-case
                比较时忽略大小写
          -s | --skip-chars=N
                忽略前n个字符
          -u | --unique
                只显示不重复的行
          -z | --zero-terminated
                以0字节为结束符,而不是换行
          -w | --check-chars=N
                比较不超过指定次数

    3、实例
          1)删除重复行
          [root@192 weijie]# cat 3.c                     //查看内容
          nihao linux.
          i am david.
          nihao linux.
          i am david.
          [root@192 weijie]# sort 3.c | uniq –c       //先排序,然后再删除重复行,显示重复行出现的次数
                2 i am david.
                2 nihao linux.
          2)只显示不重复的行
          [root@localhost weijie]# cat 3.c            //查看内容
          nihao linux.
          i am david.
          nihao linux.
          i am david.
          i love linux
          [root@localhost weijie]# sort 3.c | uniq -c –u     //只显示不重复的行
                1 i love linux

    -------------------------

    vim
            vim是unix系统最通用的文本编辑器,它的功能可以说是非常强大了,它是vi的升级版。vim有三种工作模式:编辑模式、命令模式、末行模式,默认打开的时候进入命令模式。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
            vim有许多内置命令,可以帮助我们更好的编辑文件

            命令说明
            ESC,                  进入到命令模式
            命令模式
            a,                       从光标位置之后添加内容
            A,                       从光标位置之后添加内容
            i,                        从光标位置开始插入内容
            I,                        从光标所在行的行首开始插入内容
            o,                       光标所在行的下方新建一行
            O,                      光标所在行的上方新建一行
            D,                      删除光标到这一行结束的字符
            dd,                     删除光标行
            ndd,                   删除光标开始的n行
            yy,                     复制光标行
            nyy,                  复制光标开始的n行
            p,                      粘贴到光标下方
            P,                      粘贴到光标上方
            /字符串,            从光标开始向后查找
            ?字符串,         从光标开始向前查找
            :,                    进入末行模式
            末行模式
            num,                 跳到指定行
            w,                     保存
            q,                     退出
            q!,                  强制退出
            set nu,             显示行号
            set nonu,         不显示行号

    1、语法
            vim  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            +num
                    从文本的指定行开始显示
            -b
                    进入二进制模式
            -d
                    进入diff模式,编辑多个文件时,显示差异部分
            -m
                    不允许修改文件
            -n
                    不使用缓存
            -o
                    同时打开n个文件
            -p
                    以tab形式显示每个文件
            -r
                    列出缓存,并显示恢复的信息
            -s
                    静默模式,不显示任何错误信息

    3、实例
    1)使用tab编辑多个文件
            [root@localhost weijie]# vim –p 1.c 2.c                  //tab显示多个文件
            1.c                                  2.c                
            hello world,                        x
            i am david.
            i love linux,
            love code.
    2)显示行号
              1 hello world,
              2 i am david.
              3 i love linux,
              4 love code.
            ~                                                                                                
            :set nu                   //在末行模式下使用set nu显示行号

    -------------------------

    ex
           ex会启动vim编辑器,它的执行效果和vim –E相同。从ex模式回到普通模式,可以在vim中输入:vim。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           ex  [选项]  file

    2、选项列表
           --version
                  显示命令版本信息
           --help
                  显示帮助文档
           +num
                  从文本的指定行开始显示
           -b
                  进入二进制模式
           -c
                  第一个文件编辑完成偶执行指定的指令
           -d
                  进入diff模式,编辑多个文件时,显示差异部分
           -m
                  不允许修改文件
           -n
                  不使用缓存
           -o
                  同时打开n个文件
           -p
                  以tab形式显示每个文件
           -r
                  列出缓存,并显示恢复的信息
           -R
                  以只读模式打开
           -s
                  静默模式,不显示任何错误信息

    3、实例
           ex模式编辑文件
           [root@localhost weijie]# ex 1.c                //进入ex模式编辑

           "1.c" 5L, 62C
           进入 Ex 模式。输入 "visual" 回到正常模式。
           :visual                                             //输入visual,回到正常模式

           hello world,
           i am david.
           i love linux,
           love code.
           nihao ed

    -------------------------

    sed
            sed是一种流编辑器,用来从输入流中读取内容并完成转换,输入流可以来自一个文件,也可以来自一个管道。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            sed  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -n | --quite | --slient
                    静默模式
            -e | --expression=script
                    给指令添加脚本
            -f | --file=script-file
                    将文件内容作为脚本,追加给指令
            --follow-symlinks
                    处理到位时遵循符号链接;硬链接仍将被破坏。
            -i[SUFFIX]  |  --in-place[=SUFFIX]
                    编辑文件到位(如果提供了扩展名,则进行备份)。默认的操作模式是中断符号链接和硬链接。这可以通过跟随符号链接和复制来改变。
            -c  |  --copy
                    当在-i模式下对文件进行洗牌时,请使用复制而不是重命名。虽然这将避免断开链接(符号或硬链接),但结果的编辑操作并不是原子操作。这很少是想要的模式;-遵循符号链接通常就足够了,而且它更快、更安全。
            -l | --line-length=N
                    指定每一行最大字符数,超过就自动换行
            --posix
                    禁用所有的GNU表达式
            -r | --regexp-extended
                    在脚本中使用扩展正则表达式。
            -s
                    将文件看作是分离的,而不是单独连续的长字符串
            -u | --unbuffered
                    从输入文件中加载最少数量的数据,并更频繁地刷新输出缓冲区。

            如果没有给出-e、--expression,、-f或-file选项,那么第一个非选项参数将作为sed脚本进行解释。其余的参数都是输入文件的名称;如果没有指定输入文件,则读取标准输入。
            1)没有地址的命令
            : label
                    b和t命令的标签
            #comment
                    注释将扩展到下一行(或-e脚本片段的末尾)。
            }
                    {}块的结束括号
            2)没有地址或者一个地址的命令
            =
                    打印当前的行号
            a \
            text
                    追加文本,在换行符之前有一个嵌入的反斜杠
            i \
            text
                    插入文本,在换行符之前有一个嵌入的反斜杠
            q [exit-code]
                    立即退出sed脚本,而不处理任何更多的输入,除非自动打印没有被禁用,当前的模式空间将被打印出来。退出代码参数是一个GNU扩展。
            Q [exit-code]
                    立即退出sed脚本,而不处理任何更多的输入。这是一个GNU扩展
            r filename
                    附加从文件中读取的文本。
            R filename
                    附加从文件读取的一行。命令的每次调用都从文件中读取一行。
            3)接受地址范围的命令
            {
                    开始一个命令块(以)结尾)
            b label
                    分支到标签;如果省略标签,则分支到脚本的末尾。
            t label
                    如果“s///”自读取上一个输入行以来以及从最后一个t或T命令开始已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则将其分支到脚本的末尾。
            T label
                    如果自读取上一个输入行以来,以及自最后一个t或T命令以来,没有“s///”已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则从“分支到脚本的末尾”。这是一个GNU扩展。
            c\
            text
                    用文本替换徐那种的行,在换行符之前有一个嵌入的反斜杠
            d
                    删除模式空间。开始下一个周期。
            D
                    删除模式空间中的第一个嵌入换行符。开始下一个周期,但如果模式空格中仍然有数据,则跳过从输入中读取。
            h H
                    复制/追加模式空间到保持空间
            g G
                    复制/追加保持空间到模式空间
            x
                    交换持有空格和模式空格的内容
            l
                    以“视觉清晰”的形式列出当前行。
            l width
                    以“视觉清晰”的形式列出当前行,在宽度width处将其拆分。这是一个GNU扩展。
            n N
                    在模式空间中读取/追加下一行输入
            p
                    打印到当前模式空间
            P
                    打印到当前模式空间的第一个嵌入换行符
            s/regexp/replacement/
                    尝试将regexp与模式空间匹配。如果成功,则将该部分替换为替换部分。替换可以包含特殊字符&引用匹配的模式空间的那一部分,特殊转义\1到\9引用regexp中相应的匹配子表达式。
            w filename
                    将当前模式空间写入文件名
            W filename
                    将当前模式空间的第一行写入文件名。这是一个GNU扩展。
            y/source/dest/
                    将在源中出现的模式空间中的字符音译为dst中相应的字符。

    3、地址
            SED命令可以在没有地址的情况下给出,在这种情况下,命令将对所有输入行执行;使用一个地址,则只对与该地址匹配的输入行执行该命令;或者使用两个地址,在这种情况下,将对所有与从第一个地址开始并继续到第二个地址的包含行范围匹配的输入行执行命令。关于地址范围,需要注意三件事:语法是addr 1,addr 2(即地址用逗号分隔);addr 1匹配的行将始终被接受,即使addr 2选择了前面的行;如果addr 2是regexp,则不会根据addr 1匹配的行对其进行测试。
            在地址(或地址范围)之后,在命令之前,可以插入一个“!”,这指定只有当地址(或地址范围)不匹配时才执行命令。支持以下的地址类型“
            number,只匹配指定的行号。
            first~step,从指定的行first开始,每step行匹配一次。
            $,匹配最后一行。
            /regexp/,匹配正则表达式regexp的行。
           \cregexpc,匹配正则表达式regexp的行。c可以是任何字符
            0,addr2,从“匹配的第一个地址”状态开始,直到找到addr 2为止。这类似于1,addr 2,但如果addr 2匹配输入的第一行0,addr 2表单将位于其范围的末尾,而1,addr 2窗体仍将位于其范围的开头。这只在addr 2是正则表达式时才起作用。
            addr1,+N,将匹配addr 1和addr 1后面的N行。
           addr1,~N,将匹配addr 1和addr 1后面的行,直到输入行号为N的倍数的下一行为止。

    4、实例
            从一个文件读取内容输入到另一个文件
            [root@192 weijie]# cat 1.c                      //查看文件内容
            hello world,
            i am david.
            i love linux,
            love code.
            nihao ed
            [root@192 weijie]# sed r 1.c >> 2.c           //将1.c读取,写入到2.c
            [root@192 weijie]# cat 2.c                      //查看内容
            123
            23
            212
            i am david.
            i love linux,
            love code.
            nihao ed

    -------------------------

    join
           找出两个文件中相同的字段,根据相同字段合并两个文件,将合并结果显示到标准输出。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           join  [选项]  file1  file2

    2、选项列表
           --version
                  显示命令版本信息
           --help
                  显示帮助文档
           -a 1或2
                  将文件中没有相同字段的行显示出来
           -e string
                  如果在文件中找不到指定的字符串,在输出中填入选项中的字符串
           -I | --ignore-case
                  忽略大小写
           -j FIELD
                  等价于“-1  FIELD  -2  FIELD”
           -o format
                  用指定的格式显示结果
           -t CHAR
                  指定分隔符
           -v 1或2
                  和-a一样,但是只显示没有相同字段的行
           -1 FIELD
                  连接文件1指定的字段
           -2 FIELD
                  连接文件2指定的字段
           --check-order
                  检查输入是否正确排序,即使所有输入行都是可修的。
           --nocheck-order
                  不检查输入是否正确排序

    3、实例
    1)合并两个文件到标准输出
           [root@192 weijie]# cat 1.c 2.c             //查看文件
           hello world
           i am david
           love linux
           this code
           nihao ed
           hello linux
           i am weijie
           love world
           hehe
           im join
           [root@192 weijie]# join 1.c 2.c           //合并相同行
           hello world linux
           i am david am weijie
           love linux world
    2)显示没有相同字段的行
           [root@192 weijie]# join 1.c 2.c -v 1          //显示文件1中不没有相同字段的行
           this code
           nihao ed
           [root@192 weijie]# join 1.c 2.c -v 2         //显示文件2中没有相同字段的行
           hehe
           im join

    -------------------------

    col
            过滤掉影响阅读的控制字符,使用重定向符把说明手册的内容输出到文本文件时,控制字符就成乱码。col指令可以过滤掉控制字符,使文本可读。col从标砖输入读取内容,输出到标准输出。col在读取字符时跟踪字符集,并确保字符集在输出时是正确的。如果输入试图备份到最后一条刷新行,col将显示一条警告消息。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            col  [-bfpx]  [-lnum]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -b
                    过滤所有的控制字符
            -f
                    过滤掉RLF字符,忽略HRLF字符
            -p
                    忽略未知的控制字符
            -x
                    将多个空格用tab代替
            -lnum
                    设置缓冲区大小,默认128行

    3、实例
    将clear指令的手册经过过滤,输出到文本文件
            [root@192 weijie]# man clear > 3.c                  //将手册从定向到文件
            [root@192 weijie]# vim 3.c                            //编辑文件,内部有很多乱码,这些都是控制字符
            clear(1)                                                              clear(1)
            N^HNA^HAM^HME^HE
                   c^Hcl^Hle^Hea^Har^Hr - clear the terminal screen

            S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
                   c^Hcl^Hle^Hea^Har^Hr

            D^HDE^HES^HSC^HCR^HRI^HIP^HPT^HTI^HIO^HON^HN
                   c^Hcl^Hle^Hea^Har^Hr clears your screen if this is possible.  It looks in the environ-
                   ment for the terminal type and then in the t^Hte^Her^Hrm^Hmi^Hin^Hnf^Hfo^Ho database to  figure
            out how to clear the screen.

            [root@192 weijie]# man clear | col -b > 3.c                //将手册内容过滤之后,定向到文件
            [root@192 weijie]# vim 3.c                                    //编辑文件内容,没有乱码
            clear(1)                                                              clear(1)
            NAME
            clear - clear the terminal screen

            SYNOPSIS
            clear

            DESCRIPTION
                   clear clears your screen if this is possible.  It looks in the environ-
                   ment for the terminal type and then in the terminfo database to  figure
                   out how to clear the screen.

    -------------------------

    colrm
            从标准输入读取数据,删除指定的列,然后送到标准输出。如果用一个参数调用,则将从指定的列开始删除每一行的列。如果使用两个参数调用,则将删除从第一列到最后一列的列。列编号以第1列开始。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            colrm  [startcol]  [endcol]

    2、选项列表


    3、实例
    1)删除第5列之后的列
            [root@192 weijie]# cat 1.c                    //显示内容
            hello world
            i am david
            love linux
            this code
            nihao ed
            [root@192 weijie]# colrm 5 < 1.c            //删除第5列之后
            hell
            i am
            love
            this
            niha
    2)删除5~9列
            [root@192 weijie]# colrm 5 9 < 1.c          //删除5~9列
            hellld
            i amd
            lovex
            this
            niha
    3)不删除,全部显示
            [root@192 weijie]# colrm < 1.c             //不指定列,显示所有的
            hello world
            i am david
            love linux
            this code
            nihao ed

    -------------------------


    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    paste
            将文件以行的方式合并在一起,用tab字符分隔开,将结果送到标准输出。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            paste  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -d | --delimiters=LIST
                    指定间隔字符
            -s | --serial
                    顺序的合并一个文件的多行到一行

    3、实例
    1)顺序合并文件,使用间隔符“;”
            [root@192 weijie]# cat 1.c                             //查看内容
            hello world
            i am david
            love linux
            this code
            nihao ed
            [root@192 weijie]# paste -d ";" -s 1.c            //使用分号为间隔,合并文件的多行到一行
            hello world;i am david;love linux;this code;nihao ed
    2)合并两个文件
            [root@192 weijie]# paste 1.c 2.c                   //合并两个文件,默认间隔符是tab
            hello world    hello linux
            i am david        i am weijie
            love linux        love world
            this code        hehe
            nihao ed        im join

    -------------------------

    wc
            统计文件的字节数、单词数、行数。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            wc  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --bytes
                    仅显示字节数
            -m | --chars
                    仅显示字符数
            -l | --lines
                    仅显示行数
            -L | --max-line-length
                    显示文件中最长行的字符数
            -w | words
             显示单词数

    3、实例
    1)显示字节数
            [root@192 weijie]# cat 1.c
            hello world
            i am david
            love linux
            this code
            nihao ed
            [root@192 weijie]# wc -c 1.c
            53 1.c
    2)显示行数
            [root@192 weijie]# wc -l 1.c
            5 1.c
    3)显示单词数
            [root@192 weijie]# wc -w 1.c
            11 1.c

    -------------------------

    fmt
            将指定文件的内容,按照指定的格式重新排版,结果送到标准输出。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           fmt  [width]  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -c | --crown-margin
                    每段前两行缩排
            -p | --prefix=STRING
                    重新排版以指定字符串开头的行
            -s | --split-only
            将长行分割开
            -t | --tagged-paragraph
                    将第一行缩进
            -u | --uniform-spacing
                    字与字之间一个空白,句子后两个空白
            -w | --width=WIDTH
                    设置每行字符数,默认75

    3、实例
    1)格式化文本
            [root@192 weijie]# cat 3.c
            nihao    
            linux
            i
            am
            david
            [root@192 weijie]# fmt 3.c                       //直接格式化,将所有的内容合并成行
            nihao linux i am david
    2)缩进第一行
            [root@192 weijie]# cat 3.c
              nihao linux.
              i am david.
            [root@192 weijie]# fmt -5 -t 3.c               //每行5个字符,第一行缩进
              nihao
            linux.
              i
    am
    david.

    -------------------------

    expand
            将文件中的tab转换成空格,结果送到标准输出。如果没有指定文件,那么从标准输入读取。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            expand  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -i | --initial
                    不转换空白行的tab
            -t | --tabs
                    指定tab代表的字符数,默认8个

    3、实例
    替换tab
            [root@192 weijie]# cat 2.c                      //查看内容
            hello       linux
            i            am           weijie
            love        world
            hehe
            im            join
            [root@192 weijie]# expand -t 1 2.c           //将tab用1个空格代替
            hello linux
            i  am  weijie
            love  world
            hehe
            im  join





    unexpand
            将文件中的空白字符转换为控制字符tab,将结果送到标准输出。空格数大于8才能被替换。如果没有指定文件,那么从标准输入读取。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            unexpand  [选项]  file

    2、选项列表
            --version
                    显示命令版本信息
            --help
                    显示帮助文档
            -a
                    转换所有的空格
            --first-only
                    仅转换开头的空格
            -t | --tabs
                    指定tab代表的字符数,默认是8

    3、实例
    替换空格
            [root@192 weijie]# cat 3.c                         //查看内容,有16个空格
            nihao                linux
            [root@192 weijie]# unexpand -a –t 16 3.c         //替换16个空格,变为tab
            nihao         linux

    -------------------------

    chfn
            chfn指令可以改变通过finger指令查看到的信息。此信息存储在/etc/passwd文件中,并由Finger程序显示。LinuxFinger命令将显示可由chfn更改的四条信息:您的真名、您的工作区和电话以及您的家庭电话。这四条信息中的任何一条都可以在命令行上指定。如果命令行上没有提供任何信息,chfn将进入交互模式。在交互模式下,chfn将提示每个字段。在提示符下,您可以输入新信息,也可以按“返回”使字段保持不变。输入关键字“None”使字段为空。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            chfn  [选项]  user

    2、选项列表
            -u | --help
                    显示帮助文档
            -v | --version
                    显示命令版本
            -f | --full-name
                    设置真实姓名
            -o | --office
                    设置办公室地址
            -h | --home-phone
                    设置家庭电话
            -p | --office-phone
                    设置办公室电话

    3、实例
    修改用户真实姓名和家庭电话
            [root@localhost david]# chfn -f wejie -h 110 root           //修改信息
            Changing finger information for root.
            Finger information changed.
            [root@localhost david]# finger root                            //查看信息,已经修改成功
            Login: root                       Name: wejie
            Directory: /root                        Shell: /bin/bash
            Office: 110
            On since 五 9月  7 21:02 (CST) on tty1 from :0
                14 days 21 hours idle
            On since 六 9月 22 07:36 (CST) on pts/0 from :0.0
               9 hours 12 minutes idle
            On since 四 9月 13 08:55 (CST) on pts/1 from :0.0
            New mail received 六 9月 22 18:05 2018 (CST)
                 Unread since 二 8月 21 09:22 2018 (CST)
            No Plan.

    -------------------------

    chsh
            改变用户登录时使用的shell,默认使用bash。如果命令行上没有给出shell,chsh将提示输入一个shell。chsh将接受系统上任何可执行文件的完整路径名。但是,如果shell未在“/etc/shell”文件中列出,则将发出警告。另一方面,也可以将其配置为只接受此文件中列出的shell,除非您是root用户。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            chsh  [选项]  user

    2、选项列表
            -u | --help
                    显示帮助文档
            -v | --version
                    显示命令版本
            -s | --shell
                    改变登录后使用的shell环境
            -l | --list-shells
                    显示系统当前可以用的shell

    3、实例
    1)查看可用的shell
            [root@localhost david]# chsh -l david                  //显示当可用shell
            /bin/sh
            /bin/bash
            /sbin/nologin
            /bin/dash
            /bin/tcsh
            /bin/csh
    2)改变用户shell
            [root@localhost david]# chsh -s /bin/sh david         //改变登录shell
            Changing shell for david.
            Shell changed.
            [root@localhost david]# su david                        //切换用户,shell已经改变
            sh-4.1$

    -------------------------

    usermod
            修改用户的信息,包括用户名、密码、家目录、uid等。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
    usermod  [选项]  [参数]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -c comment
                    修改备注信息
            -d home_dir
                    修改账户每次登陆使用的目录
            -e expire_date
                    修改账号终止日期,MM/DD/YY
            -f inactive_days
                    账号过期后多久停用
            -g initial_group
                    修改账户的组,这个组必须存在
            -G group,[...]
                    修改用户的附加组
            -l login_name
                    变更使用者login时的名称为login_name,其余不变。特别是,使用者目录名应该也会跟着更动成新的登入名。
            -s shell
                    修改账户登录后使用的shell
            -u uid
                    修改用户ID

    3、文件
            /etc/passwd,使用者帐号资讯。
            /etc/shadow,使用者帐号资讯加密。
            /etc/group,群组资讯。

    4、实例
    1)修改用户uid
            [root@localhost david]# tail -n 2 /etc/passwd                     //查看用户信息
            webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
            user01:x:502:502::/home/user01:/bin/bash
            [root@localhost david]# usermod -u 503 user01                      //修改uid为503
            [root@localhost david]# tail -n 2 /etc/passwd                      //查看用户信息,uid已经改变
            webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
            user01:x:503:502::/home/user01:/bin/bash
    2)修改备注信息
            [root@localhost david]# usermod -c "user01 test" user01          //修改备注信息为“user01 test”
            [root@localhost david]# tail -n 2 /etc/passwd                      //查看用户信息
            webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
            user01:x:503:502:user01 test:/home/user01:/bin/bash

    -------------------------

    useradd
           创建新的系统用户,useradd指令只能以管理员的身份运行,创建的用户都在“/etc/passwd”文件中。当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHat Linux提供,可帮每个新加入的使用者建立个别的group,毋须添加-n选项。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           useradd  [-D]  [选项]  [参数]
           useradd  [-c comment]  [-d home_dir]  [-e expire_date]  [-f inactive_time]  [-g initial_group]  [-G group[,...]]  [-m [-k skeleton_dir] | -M]  [-s shell]  [-u uid [ -o]]  [-n]  [-r]  login
           useradd  -D  [-g default_group]  [-b default_home]  [-f default_inactive]  [-e default_expire_date]  [-s default_shell]

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           使用-D选项
           -b dir
                  指定用户的基目录,默认是home
           -e date
                  使用者账号有效日期
           -f days
                  指定密码过期后多少天关闭账号
           -g group
                  指定账户的组,这个组必须存在
           -s shell
                  指定账户使用的shell
           不使用-D选项
           -c comment
                  备注信息
           -d home
                  账户每次登陆使用的目录
           -e date
                  账号终止日期,MM/DD/YY
           -f days
                  账号过期后多久停用
           -g group
                  指定账户的组,这个组必须存在
           -G group
           指定用户的附加组
           -m
                  使用者目录如果不存在,自动创建
           -n
                  取消自动创建于账号同名的组
           -p password
                  设置账户的密码
           -r
                  创建系统账号
           -s
                  指定账户登录后使用的shell
           -u uid
                  指定用户ID

    3、文件
           /etc/passwd,使用者帐号资讯。
           /etc/shadow,使用者帐号资讯加密。
           /etc/group,群组资讯。
           /etc/default/useradd,定义资讯。
           /etc/login.defs,系统广义设定。
           /etc/skel,内含定义档的目录。

    4、实例
    1)创建用户
           [root@localhost david]# useradd -p 123456 user01                //创建用户,密码123456
           [root@localhost david]# tail -n 2 /etc/passwd                   //查看是否创建成功
           webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
           user01:x:503:503::/home/user01:/bin/bash
           [root@localhost david]# ls /home/                                  //在home下创建家目录
           david  test01  user01  weijie
    2)设定用户的家目录、uid、备注
           [root@localhost david]# useradd -d /home/other -u 600 -c "test user" user02             //创建用户
           [root@localhost david]# tail -n 2 /etc/passwd           //查看用户信息
           user01:x:503:503::/home/user01:/bin/bash
           user02:x:600:600:test user:/home/other:/bin/bash
           [root@localhost david]# ls /home/                         //家目录other
           david  other  test01  user01  weijie

    -------------------------

    userdel
            删除用户,如果没有附加选项,仅删除用户,不删除相关文件。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            userdel  [-r]  user

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -r
                    删除用户的同时,删除其相关文件

    3、实例
    1)不使用选项,删除用户
            [root@localhost david]# userdel test01            //删除用户
            [root@localhost david]# ls /home/                  //相关文件还存在
            david  test01  user01  weijie
    2)删除用户所有信息
            [root@localhost david]# userdel -r user02             //删除用户,使用-r
            [root@localhost david]# ls /home/                       //相关文件也删除
            david  test01  user01  weijie
            [root@localhost david]# tail -n 2 /etc/passwd
            webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
            user01:x:503:503::/home/user01:/bin/bash

    -------------------------

    su
            临时切换身份到另外一个用户,使用su切换用户之后,不会改变当前的工作目录,但是会改变一些环境变量。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            su  [选项]  [参数]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -    | -l | --login
                    切换用户时启动一个新的shell,可以改变工作目录以及环境变量
            -c | --command
                    执行案指令后,立刻恢复原来的身份
            --session-command=COMMAND
                    使用-c将单个命令传递给shell,而不创建新会话。
            -f | --fast
                    使shell不读取启动文件
            -m | -p | --preserve-environment
                    保留原来的环境变量
            -s | --shell
                    指定切换用户后使用的shell

    3、实例
    1)切换用户
            [root@192 weijie]# su david                    //切换用户,环境变量没有发生改变
            [david@localhost weijie]$
    2)使用选项“-”切换
            [root@localhost weijie]# su – david          //使用选项“-”,工作目录发生变化
            [david@localhost ~]$  
    3)从其他用户切换到root
            [david@localhost ~]$ su                         //没有任何选项和参数,可以直接切换到root用户,需要输入密码
            密码:
            [root@localhost david]#

    -------------------------

    pwck
           检查用户密码文件“/etc/passwd”和“/etc/shadow”的完整性,将验证结果送到标砖输出。提示用户删除格式不正确或有其他不可更正错误的条目。检查以验证每个条目是否具有:正确的字段数、唯一有效的用户名、有效的用户和组标识符、有效的主组、有效的家目录、有效的登录shell。
    当指定了第二个文件参数或系统上存在“/etc/shadow”时,就启用了shadow检查。它会检查一下信息:每个passwd条目都有一个匹配的阴影条目,每个影子条目都有一个匹配的passwd条目,在shadow文件中指定了密码,阴影条目有正确的字段数,阴影条目在shadow中是唯一的,最近的密码更改不会在将来发生。
           检查正确的字段数和唯一用户名是致命的。如果条目有错误的字段数,则会提示用户删除整行。如果用户没有肯定地回答,所有进一步的检查都会被绕过。提示删除具有重复用户名的条目,但仍将进行其余检查。所有其他错误都是警告,并鼓励用户运行usermod命令来更正错误。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           pwck  [选项]  

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           -q
                  仅显示报错信息
           -r
                  以只读模式执行
           -s
                  使用UID作为文件的排序依据

    3、配置
           下面“/etc/login.defs“中的配置变量更改了该工具的行为:
           PASS_MAX_DAYS,可以使用密码的最大天数。如果密码早于此,则将强制进行密码更改。如果没有指定,将假定-1(这将禁用限制)。
           PASS_MIN_DAYS,密码更改之间允许的最短天数。任何密码更改尝试比这更早将被拒绝。如果未指定,则假定为-1(这将禁用限制)
           PASS_WARN_AGE,在密码过期前发出警告的天数。零表示警告只在到期之日发出,负值表示没有发出警告。如未指定,则不会提供警告。

    4、文件
           /etc/group,组账户信息。
           /etc/passwd,用户账户信息。
           /etc/shadow,安全用户帐户信息。

    5、返回值
           pwck命令会返回下列结果
           0,成功
           1,无效的命令
           2,1个或多个密码出错
           3,无法打开密码文件
           4,不能锁定密码文件
           5,不能更新密码文件
           6,无法排序密码文件

    6、实例
    1)普通用户调用pwck
           [david@localhost ~]$ pwck                                  //查看密码文件
           pwck: cannot lock /etc/passwd; try again later.
           [david@localhost ~]$ echo $?                              //打印返回值,这个返回值在shell变量“#?”中
           4
    2)root调用pwck
           [root@localhost david]# pwck
           user 'adm': directory '/var/adm' does not exist
           user 'uucp': directory '/var/spool/uucp' does not exist
           user 'gopher': directory '/var/gopher' does not exist
           user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
           user 'pulse': directory '/var/run/pulse' does not exist
           user 'saslauth': directory '/var/empty/saslauth' does not exist
           user 'vboxadd': directory '/var/run/vboxadd' does not exist
           user 'mailnull': directory '/var/spool/mqueue' does not exist
    user 'smmsp': directory '/var/spool/mqueue' does not exist

    -------------------------

    passwd
           更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码。这个任务是通过调用LinuxPAM和LibuserAPI来完成的。本质上,它使用LinuxPAM将自己初始化为一个“passwd”服务,并利用配置的密码模块对用户的密码进行身份验证和更新。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           passwd  [选项]  user
           passwd  [-k]  [-l]  [-u  [-f]]  [-d]  [-e]  [-n mindays]  [-x maxdays]  [-w warndays]  [-i inactivedays]  [-S]  [--stdin]  [username]

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           -d
                  删除用户的密码,只有root用户才能使用
           -e
                  使用户密码失效,强制用户下次登录改变密码,只有root用户才能使用
           -n
                  设置密码的最短有效时间,只有root用户才能使用
           -x
                  设置密码最大有效时间,只有root用户才能使用
           -S
                  显示简短的密码信息,只有root用户才能使用
           -l
                  锁定用户,只有root用户才能使用
           -u
                  解锁用户,只有root用户才能使用
           -k
                  选项-k用于指示更新只适用于过期的身份验证令牌(密码);用户希望像以前一样保留其未过期的令牌。
           -i
                  这将设置此帐户的过期密码将被视为不活动的天数,如果用户帐户支持密码生存期,则应禁用该帐户。只对根用户可用。
           -w
                  这将设置用户将开始收到警告,如果用户帐户支持密码生存期,其密码将过期的天数。只对根用户可用。
           --stdin
                  此选项用于指示passwd应从标准输入中读取新密码,该输入可以是管道。

    3、实例
    1)锁定用户,锁定之后不能登录
           [root@localhost david]# passwd -l david              //锁定用户
           锁定用户 david 的密码 。
           passwd: 操作成功
           [root@localhost david]# passwd -u david               //解锁用户
           解锁用户 david 的密码 。
           passwd: 操作成功
    2)删除用户密码
           [root@localhost david]# passwd -d david               //清除用户david密码
           清除用户的密码 david。
           passwd: 操作成功
           [root@localhost david]# su weijie                      //切换到普通胡勇weijie
           [weijie@localhost david]$ su david                     //从普通用户weijie切换到普通用户david,不需要密码
           [david@localhost ~]$

    -------------------------

    finger
          finger指令用来查找、显示指定用户的信息。查询远程主机信息是,可以用user@localhost来指定用户。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          finger  [-lmsp]  user

    2、选项列表
          -s
                显示用户的用户名、真实姓名、登录终端、闲置时间、登录时间、地址、电话
          -l
                显示用户的用户名、真实姓名、用户家目录、登录后的shell、登录时间、电子邮件、计划文件
          -p
                和-l一样,但是不显示“.plan“、“.project”、“.pgpkey”文件
          -m
                不查找用户真实姓名

    3、实例
    查看用户root信息
          [root@localhost david]# finger -l root
          Login: root                       Name: root
          Directory: /root                        Shell: /bin/bash
          On since 五 9月  7 21:02 (CST) on tty1 from :0
              14 days 20 hours idle
          On since 六 9月 22 07:36 (CST) on pts/0 from :0.0
             9 hours 5 minutes idle
          On since 四 9月 13 08:55 (CST) on pts/1 from :0.0
          New mail received 六 9月 22 18:00 2018 (CST)
         Unread since 二 8月 21 09:22 2018 (CST)
    No Plan.

    -------------------------

    logname
          显示当前登录的用户名称。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          logname

    2、选项列表
          --help
                显示帮助文档
          --version
                显示命令版本

    3、实例
    查看当前登录用户
          [root@localhost david]# logname               //查看登录用户
          root
          [root@localhost david]# su david             //切换用户
          [david@localhost ~]$ logname                 //查看登录用户,依然是root
          root

    -------------------------

    grpck
            grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性。检查的内容包括:正确的字段数、唯一有效的组名称、有效的组标识符、成员和管理员的有效列表、“/etc/gshadow”文件中的相应条目。检查正确的字段数和唯一的组名是致命的。如果条目有错误的字段数,则会提示用户删除整行。如果用户没有肯定地回答,所有进一步的检查都会被绕过。提示删除具有重复组名的条目,但仍将进行其余检查。所有其他错误都是警告,并鼓励用户运行groupmod命令来更正错误。
            对“/etc/group“和“/etc/gshadow“文件进行操作的命令不能更改损坏或重复的条目。在这种情况下,应该使用grpck来删除违规条目。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            grpck  [选项]  group

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -r
                    以只读模式运行
            -s
                    使用gid对group和gshadow进行排序

    3、配置
            下面“/etc/login.defs”中的配置变量更改了该工具的行为:
            MAX_MEMBERS_PER_GROUP(number),每个组条目的最大成员数。达到最大值时,在“/etc/group”中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的GID)。默认值为0,这意味着组中的成员数没有限制。此功能(拆分组)允许限制组文件中的行长度。这对于确保NIS组的行不大于1024个字符非常有用。如果你需要执行这样的限制,你可以使用25。注意:拆分组可能不支持所有的工具(即使在阴影工具集中)。除非您真的需要这个变量,否则不应该使用它。

    4、文件
           /etc/group,组账户信息。
            /etc/gshadow,安全组账户信息。
           /etc/passwd,用户账户信息。

    5、实例
    1)检查组信息
            [root@localhost david]# grpck                 //检查组信息,返回0,没有任何错误
            [root@localhost david]# echo $?
            0
    2)对/etc/group排序
            [root@localhost david]# tail –n 2 /etc/group            //查看组信息
            smmsp:x:51:
            webalizer:x:67:
            user01:x:502:
            group02:x:999:
            [root@localhost david]# grpck -s /etc/group            //按照gid排序
            [root@localhost david]# tail –n 2 /etc/group           //查看信息,已经排序
            user01:x:502:
            group02:x:999:
            nfsnobody:x:65534:

    -------------------------

    groupmod
        修改组的基本信息,包括组名称、组ID等信息。
        此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
        groupmod  [选项]  group

    2、选项列表
        --help
            显示帮助文档
        --version
            显示命令版本
        -g gid
            指定组id
        -n name
            指定组名
    3、实例
        修改组id合名字
        [root@localhost david]# tail -n 2 /etc/group                            //查看组信息
        user01:x:502:
        group01:x:503:
        [root@localhost david]# groupmod -g 999 -n group02 group01           //修改组id:999,组名字:group02
        [root@localhost david]# tail -n 2 /etc/group                            //查看组信息,已经修改
        user01:x:502:
        group02:x:999:

    -------------------------

    gpasswd
            gpasswd指令用来管理组文件“/etc/group”和“/etc/gshadow”,每个组可以设置管理员、组员、密码。系统管理员可以使用-A选项定义组管理员,使用-M选项定义成员。他们拥有组管理员和成员的所有权利。由具有组名的组管理员调用的gpasswd只提示输入组的新密码。如果设置了密码,则成员仍然可以在没有密码的情况下使用newgrp(1),而非成员必须提供密码。
            组密码是一个固有的安全问题,因为允许多个人知道密码。然而,群组是允许不同用户之间合作的有用工具。
            警告,此工具仅对“/etc/group”和“/etc/gshadow”文件进行操作。因此,您不能更改任何NIS或LDAP组。这必须在相应的服务器上执行。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            gpasswd  [选项]  group

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -a | --add user
                    向组中添加用户
            -d | --delete user
                    删除成员
            -r | --remove-password
                    删除组密码
            -R | --restrict
                    限制对命名组的访问。只允许组成员使用newgrp加入命名组。
            -M |  --members user,...
                    向组添加多个成员
            -A | --administrators user,..
                    设置组管理员

    3、配置
            下面“/etc/login.defs”中的配置变量更改了该工具的行为:
            ENCRYPT_METHOD(string),这定义了用于加密密码的系统默认加密算法(如果命令行上没有指定算法)。可用的算法有:DES(默认)、MD5、 SHA256、SHA512。注意:此参数重写MD5_CRYPT_ENAB变量。
            MAX_MEMBERS_PER_GROUP(number),每个组条目的最大成员数。达到最大值时,在/etc/group中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的GID)。默认值为0,这意味着组中的成员数没有限制。此功能(拆分组)允许限制组文件中的行长度。这对于确保NIS组的行不大于1024个字符非常有用。如果你需要执行这样的限制,你可以使用25。注意:拆分组可能不支持所有的工具(即使在阴影工具集中)。除非你真的需要这个变量,否则你不应该使用它。
            MD5_CRYPT_ENAB(boolean),指示是否必须使用基于MD5的算法加密密码。如果设置为“是”,新密码将使用基于MD5的算法进行加密,该算法与FreeBSD最新版本使用的算法兼容。它支持无限长度的密码和更长的盐字符串。如果您需要将加密密码复制到其他不了解新算法的系统,则设置为“否”。默认为否。该变量由ENCRYPT_METHOD变量或用于配置加密算法的任何命令行选项取代。不推荐这个变量。您应该使用ENCRYPT_METHOD。
            SHA_CRYPT_MIN_ROUNDS(number)SHA_CRYPT_MAX_ROUNDS(number),当Encrypt_Method设置为SHA 256或SHA 512时,默认情况下这将定义加密算法使用的SHA轮数(当命令行上未指定轮数时)。有很多回合,这是比较困难的暴力强制密码。但是还要注意的是,需要更多的CPU资源来对用户进行身份验证。如果没有指定,libc将选择默认的回合数(5000)。数值必须在1000-999999999范围内。如果只设置了SHA_CRYPT_MIN_ROUNDS或SHA_CRYPT_MAX_ROUNDS中的一个,则将使用此值。如果SHA_CRYPT_MIN_ROUNDS>SHA_CRYPT_MAX_ROUNDS,则将使用最高值。

    4、文件
            /etc/group,组账户信息。
            /etc/gshadow,安全组账户信息。

    5、实例
    1)将用户user01 添加到组weijie
            [root@localhost david]# gpasswd -a user01 weijie         //向组添加用户
            Adding user user01 to group weijie
            [root@localhost david]# cat /etc/group                    //查看组信息,已经成功添加
            weijie:x:501:user01
    2)设置组管理员
            [root@localhost david]# gpasswd -A weijie weijie          //设置管理员
            [root@localhost david]# cat /etc/gshadow                  //查看组信息,管理员已经设置
             weijie:!:weijie:

    -------------------------

    groupadd
            指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            groupadd  [选项]  group

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -g gid
                    指定组id
            -r
                    创建系统组
            -f
                    新增一个已经存在的群组帐号,系统会出现错误讯息然后结束groupadd。如果是这样的情况,不会新增这个群组(如果是这个情况下,系统不会再新增一次)也可同时加上-g选项当你加上一个gid,此时gid就不用是唯一值,可不加-o参数,建好群组后会显结果

    3、文件
            /etc/group,群组信息。
            /etc/gshadow,群组加密信息。

    4、实例
    创建组,指定组的id
            [root@localhost david]# groupadd group01 -g 999           //创建组,指定id
            [root@localhost david]# tail -n 2 /etc/group               //查看组信息
            user01:x:502:
            group01:x:999:




    groupdel
            删除组,如果租内有用户,那么必须先删除用户。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            groupdel  group

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本

    3、实例
    删除组
            [root@localhost david]# groupdel group01              //删除组
            [root@localhost david]# tail -n 2 /etc/group         //查看组信息,已经删除
            webalizer:x:67:
            user01:x:502:

    -------------------------

    init
            init是所有进程的父进程,它由内核执行,可以启动其他所有的进程。init指令在启动时会参考/etc/inittab文件的配置,完成其他进程的启动。init通常不会由用户进程执行,并且期望进程id为1。如果不是这样,它将实际执行telinit(8)并将所有参数传递给它。
            init管理的进程称为作业,并由/etc/init目录中的文件定义。init(8)是一个基于事件的init守护进程。这意味着作业将通过系统状态发生的更改自动启动和停止,包括作业的启动和停止。这与基于依赖项的init守护进程不同,后者启动一组指定的目标作业,并通过迭代它们的依赖项来解决它们应该启动的顺序和其他作业所需的顺序。主要事件是startup (7)事件,在守护进程加载完其配置后发出。其他有用的事件是以作业更改状态发出的starting (7)、started (7)、stopping (7)和stopped (7)事件。
            init有7种运行等级
            0,关机
            1,单用户模式
            2,多用户模式,不启动nfs
            3,多用户模式,有网络功能
            4,保留
            5,图形界面
            6,重启
            Upstart init(8)守护进程不跟踪运行级别本身,而是完全由用户空间工具实现。为表示运行级的更改而发出的事件是runlevel(7)事件。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           init  [选项]  [参数]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            --verbose
                    将有关作业状态更改和事件释放的详细消息输出到系统控制台或日志,这对于调试引导非常有用。

    3、实例
            无

    -------------------------

    nice
           nice指令可以设置程序运行的优先级,优先级会影响到程序的调度时间。nice的范围是-20~19,其中-20级别最高,19级别最低。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           nice  [选项]  [cmd]

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           -n | --adjustment=N
                  设置优先级

    3、实例
    1)设置指令wc优先级
           [root@localhost ~]# nice -n 19 wc                    //设置wc的优先级最低
           ^Z                                                         //按下组合键ctrl+z
           [2]+  Stopped                 nice -n 19 wc
           [root@localhost ~]#
    2)查看进程优先级
           [root@localhost ~]# ps -ao "%p%y%x%c%n"             //查看进程等级,wc的等级是19
             PID TTY          TIME COMMAND          NI
            8321 pts/0    00:00:00 wc               19
            8370 pts/0    00:00:00 ps                0

    -------------------------

    nohup
            nohup可以使程序能够忽略挂起信号,继续运行。用户退出时会挂载,而nohup可以保证用户退出后程序继续运行。如果标准输入是终端,请将其从/dev/null重定向。如果标准输出是终端,则将输出附加到“nohup.out”(如果可能的话),否则追加到“$home/nohup.out”。如果标准错误是终端,请将其重定向到标准输出。若要将输出保存到文件中,请使用“nohup COMMAND > FILE”。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            nohup  cmd

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本

    3、实例
            以nohup形式运行find指令
            [root@localhost ~]# nohup find /weijie/ -name *.c             //运行find
            nohup: 忽略输入并把输出追加到"nohup.out"                            //结果会保存到nohup.out文件中
            [root@localhost ~]# cat nohup.out                                //查看结果
            /weijie/11.c
            /weijie/4.c
            /weijie/2.c
            /weijie/3.c
            /weijie/5.c
            /weijie/1.c

    -------------------------

    pkill
           pkill可以给指定的进程发送信息,它可以结束某个执行的进程或者目录登录的用户。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           pkill [-signal]  [-fvx]  [-n|-o] [-P ppid,...]  [-g pgrp,...]  [-s sid,...]  [-u euid,...]  [-U uid,...]  [-G gid,...]  [-t term,...]  [pattern]

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           -f
                  查找完成的文件名
           -g pgrp
                  只匹配列出的进程组ID中的进程。进程组0被转换为pgrep或pkill自己的进程组。
           -G gid
                  只匹配实际组ID列出的进程。可以使用数值或符号值。
           -n
                  选择最近执行的进程
           -o
                  选择最早的进程
           -P ppid
                  选择父pid匹配的进程
           -s sid
                  只匹配进程会话ID列出的进程。会话ID 0被转换为pgrep或pkill自己的会话ID。
           -t term
                  查找符合终端号的进程
           -u euid
                  只匹配其有效用户ID列出的进程。
           -U uid
                  只匹配实际用户ID列出的进程。可以使用数值或符号值。
           -v
                  查找不符合条件的进程
           -x
                  只匹配其名称(如果-f指定了命令行)与模式完全匹配的进程。
           -signal
                  要发送的信号

    3、返回值
           0,一个或多个进程符合。
           1,没有进程符合
           2,命令的语法错误
           3,致命错误:内存不足等。


    4、实例
           杀死wc进程
           [root@localhost ~]# pkill -SIGKILL wc                   //向wc发送KILL信号,杀死进程
           [1]-  已杀死               nice -n 19 wc
           You have new mail in /var/spool/mail/root 
           [root@localhost ~]# ps                                    //查看进程,wc已经杀死
             PID TTY          TIME CMD
            8266 pts/0    00:00:00 bash
            8554 pts/0    00:00:00 ps

    -------------------------

    renice
           renice指令可以重新调整程序运行的优先级,可以通过进程id、用户id、组id来修改优先级。修改组的等级,影响组内所有用户的所有进程优先级;修改用户等级,影响该用户的所有进程优先级。除了超级用户之外,其他用户只能改变他们拥有的进程的优先级,并且只能在0到PRIO_MAX(20)范围内单调地增加他们的“nice value”。(这防止了凌驾于行政法规之上。)超级用户可以更改任何进程的优先级,并将优先级设置为PRIO_MIN(-20)~PRIO_MAX。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           renice  -n  N  –u  username
           renice  -n  N  –g  gid
           renice  -n  N  –p  pid

    2、选项列表
           -h | --help
                  显示帮助文档
           -v | --version
                  显示命令版本
           -n | --priority
                  优先级
           -u | --user=name
                  设置指定用户的优先级
           -g | --pgrp=gid
                  设置组的优先级
           -p | --pid=PID
                  设置指定进程的优先级

    3、实例
    1)通过pid修改指令wc优先级
           [root@localhost ~]# ps -ao "%p%y%x%c%n"                           //查看进程优先级
             PID TTY          TIME COMMAND          NI
            8321 pts/0    00:00:00 wc               19
            8451 pts/0    00:00:00 ps                0
           [root@localhost ~]# renice -n 15 -p 8364                         //重设wc进程的优先级,变为15
            8364: old priority 19, new priority 15
    2)修改用户root的优先级
           [root@localhost ~]# renice -n 0 -u root                          //修改用户root的优先级为0
           0: old priority -11, new priority 0
           [root@localhost ~]# ps -ao "%p%y%x%c%n"                         //查看进程优先级,当前进程都是root用户的,优先级都是0
             PID TTY          TIME COMMAND          NI
            8321 pts/0    00:00:00 wc                0
            8364 pts/0    00:00:00 wc                0
            8458 pts/0    00:00:00 ps                0

    -------------------------

    killall
            killall可以根据名字来杀死进程,它会给指定名字的所有进程发送信息。如果没有指定信号名,则发送SIGTERM。信号可以通过名称(例如-HUP或-SIGHUP)或数字(例如-1)或选项-s来指定。如果命令名不是正则表达式(选项-r),并且包含斜杠(/),则将选择执行该特定文件的进程,与其名称无关。如果每个列出的命令至少有一个进程被杀死,或者没有列出命令,并且至少有一个进程符合-u和-Z搜索条件,则KILLALL返回一个零返回代码。否则KILLALL返回非零。KILLALL进程永远不会杀死自己(但可能会杀死其他KILLALL进程)。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            killall  [选项]  name

    2、选项列表
            -e | --exact
                    进程需要和名字完全相符
            -I | --ignore-case
                    忽略大小写
            -g | --process-group
                    结束进程组
            -i | --interactive
                    结束之前询问
            -l | --list
                    列出所有的信号名称
            -q | --quite
                    进程没有结束时,不输出任何信息
            -r | --regexp
                    将进程名模式解释为扩展的正则表达式。
            -s | --signal
                    发送指定信号
            -u | --user
                    结束指定用户的进程
            -v | --verbose
                    显示详细执行过程
            -w | --wait
                    等待所有的进程都结束
            -V |--version
                    显示版本信息
            --help
                    显示帮助信息

    3、实例
    结束所有进程
            [root@localhost ~]# ps                        //查看进程,有3个wc进程
             PID TTY          TIME CMD
             8266 pts/0    00:00:00 bash
             9781 pts/0    00:00:00 wc
             9784 pts/0    00:00:00 wc
             9785 pts/0    00:00:00 wc
             9786 pts/0    00:00:00 ps
            [root@localhost ~]# killall -9 wc          //结束所有的wc进程
            [root@localhost ~]# ps                       //查看进程,wc都被杀死
              PID TTY          TIME CMD
             8266 pts/0    00:00:00 bash
             9788 pts/0    00:00:00 ps
            [1]   已杀死               nice -n 19 wc
            [2]-  已杀死               nice -n 19 wc
            [3]+  已杀死               nice -n 19 wc

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    watch
            watch指令可以间歇性的执行程序,将输出结果以全屏的方式显示,默认是2s执行一次。watch将一直运行,直到被中断。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    2、    语法
            watch  [-dhvt]  [-n <seconds>]  [--differences[=cumulative]]  [--help]  [--interval=<seconds>]  [--no-title]  [--version]  <command>

    2、选项列表
            -d | --differences
                    高亮显示差异部分
            --cumulative
                    高亮显示“sticky”
            -n
                    指定时间间隔
            -t | --no-title
                    不显示日期时间以及间隔秒数
            -h | --help
                    帮助信息
            -v | --version
                    显示版本信息

    3、例子代码
            查看邮件
            watch -n 60 from
            查看目录内容的变化
            watch -d ls –l
            如果您只对用户Joe拥有的文件感兴趣,可以使用
            watch -d ’ls -l | fgrep joe’
            要想看到引号的效果,请试一试
            watch echo $$
           watch echo ’$$’
            watch echo "’"’$$’"’"
            您可以监视管理员安装最新的内核。
            watch uname -r

    4、实例
    每3s执行一次ls指令
            [root@localhost ~]# watch –n 3 ls              //每3s执行一次ls
            Every 3.0s: ls                                                              Sun Sep 23 09:04:40 2018

            1
            1.c~
            anaconda-ks.cfg
            icmp_echo_ignore_all~
            icmp_echo_ignore_alv~
            icmp_echo_ignore_alw~
            icmp_echo_ignore_alx~
            icmp_echo_ignore_aly~
            icmp_echo_ignore_alz~
            install.log
            install.log.syslog
            mail
            nohup.out
            公共的
            模板
            视频
            图片
            文档
            下载
            音乐
            桌面

    -------------------------

    pstree
            pstree显示正在运行的进程的树形结构,树以PID为根;如果省略了pid则以init为根。如果指定了用户名,则显示根植于该用户拥有的进程的所有进程树。如果pstree被调用为pstree.x11,那么它将提示行尾的用户按RETURE,并且在这种情况发生之前不会返回。这对于在x终端中运行pstree非常有用。
            pstree通过将相同的分支放在方括号中并以重复计数作为前缀,在视觉上合并它们。例如:

                    init-+-getty
                        |-getty
                        |-getty
                        ‘-getty
            变成下面的样子
                    init---4*[getty]
            进程的子线程在父进程下找到,并以大括号显示进程名,例如:
                    icecast2---13*[{icecast2}]
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            pstree [选项]

    2、选项列表
            -a
                    显示每个进程的完整指令,包括路径、参数
            -A
                    使用ascii码显示树形
            -c
                    关闭精简表示法
            -G
                    使用VT 100线条绘制字符
            -h
                    高亮显示正在执行的程序
            -H
                    类似“-h”,但是突出显示指定的进程。与-h不同,如果高亮显示不可用,pstree在使用-H时会失败。
            -l
                    长格式显示
            -n
                    以进程号排序,默认以名字排序
            -p
                    显示pid
            -u
                    显示用户
            -U
                    以utf-8显示字符
            -V
                    显示命令版本信息
            -Z
                    每个SELinux的上下文

    3、实例

    1)显示完成的树形结构
            [root@localhost ~]# pstree -a
            init
              ├─NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid
              │   ├─dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid ...
              │   └─{NetworkManager}
              ├─VBoxClient --clipboard
              │   └─VBoxClient --clipboard
    2)显示进程号
            [root@localhost ~]# pstree -p
            init(1)─┬─NetworkManager(6362)─┬─dhclient(6377)
                    │                      └─{NetworkManager}(6379)
                    ├─VBoxClient(7869)───VBoxClient(7870)───{VBoxClient}(7872)
                    ├─VBoxClient(7882)───VBoxClient(7883)
                    ├─VBoxClient(7890)───VBoxClient(7891)───{VBoxClient}(7894)
                    ├─VBoxClient(7898)───VBoxClient(7899)─┬─{VBoxClient}(7901)
                    │                                    └─{VBoxClient}(7903)
                    ├─VBoxClient(7306)───VBoxClient(7308)
                    ├─VBoxClient(7312)───VBoxClient(7314)───{VBoxClient}(7317)
                    ├─VBoxClient(7318)───VBoxClient(7320)─┬─{VBoxClient}(7323)
                    │                                    └─{VBoxClient}(7325)

    -------------------------

    pidof
           pidof可以查找指定名称的进程的pid,将结果送到标准输出。pidof有两种返回值:0,找到至少一个进程;1,没有找到进程。pidof实际上与killall5相同;程序根据调用它的名称进行操作。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           pidof  [选项]  name

    2、选项列表
           -s
                  一次只响应一个进程号
           -c
                  只显示运行在root目录下的进程,这个选项只对root用户有效
           -o
                  忽略指定进程号的进程
           -x
                  同时显示在shell脚本运行中的相同名称

    3、实例
    1)查看指定进程的id
           [root@localhost ~]# pidof bash            //显示bash进程的id,有两个
           8563 8266
    2)一次只显示一个进程
           [root@localhost ~]# pidof -s bash         //只显示出一个进程id
           8563

    -------------------------

    pgrep
           pgrep指令可以按名字或者其他属性搜索指定的进程,显示出进程的id到标准输出。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           pgrep  [-flvx]  [-d delimiter]  [-n|-o]  [-P ppid,...]  [-g pgrp,...]  [-s sid,...]  [-u euid,...]  [-U uid,...]  [-G gid,...]  [-t term,...]  [pattern]

    2、选项列表
           --help
                  显示帮助文档
           --version
                  显示命令版本
           -d delimiter
                  设置用于分隔输出中每个进程ID的字符串(默认为换行符)。(仅限于pgrep)
           -f
                  查找完成的文件名
           -g pgrp
                  只匹配列出的进程组ID中的进程。进程组0被转换为pgrep或pkill自己的进程组。
           -G gid
                  只匹配实际组ID列出的进程。可以使用数值或符号值。
           -l
                  列出进程的名字和id
           -n
                  选择最近执行的进程
           -o
                  选择最早的进程
           -P ppid
                  选择父pid匹配的进程
           -s sid
                  只匹配进程会话ID列出的进程。会话ID 0被转换为pgrep或pkill自己的会话ID。
           -t term
                  查找符合终端号的进程
           -u euid
                  只匹配其有效用户ID列出的进程。
           -U uid
                  只匹配实际用户ID列出的进程。可以使用数值或符号值。
           -v
                  查找不符合条件的进程
           -x
                  只匹配其名称(如果-f指定了命令行)与模式完全匹配的进程。

    3、实例
    1)查看指定进程信息
           [root@localhost ~]# pgrep -l wc               //显示名称和进程号
           8572 wc
    2)查看某个终端的进程
           [root@localhost ~]# pgrep -l -t tty1          //显示tty1下的进程id和进程名字
           7734 Xorg

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    hostname    
            hostname指令用于设置或者显示系统主机名,没有任何参数就会返回gethostname()函数的返回值。使用hostname指令之后,主机名会立马被修改,但是重启系统之后就失效了。可以修改配置文件/etc/sysconfig/network,使主机名永久有效。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            hostname  [选项]

    2、选项列表
            -h | --help
                    显示帮助文档
            -V | --version
                    显示命令版本
            -v
                    显示详细执行过程
            -a | --alias
                    显示主机别名
            -d | --domain
                    显示主机dns域名
            -F file
                    从文件读取
            -f | --fqdn | --long
                    显示完全格式的域名
            -A | --all-fqdns
                    显示机器的全部FQDNs
            -i | --ip-address
                    显示指定主机的ip地址
            -I | --all-ip-address
                    显示主机所有的地址
            -s | --short
                    以短格式显示,仅显示从第一个点分开的部分
            -y | --yp | --nis
                    显示nis域名

    3、FQDN
            不能用此命令更改FQDN(由hostname-fqdn返回)或DNS域名(由dnsdomainname返回)。系统的FQDN是resolver为主机名返回的名称。技术上:FQDN是由gethostname(2)返回的主机名。DNS域名是第一个点之后的部分。因此,如何更改取决于配置文件(通常在“/etc/host.conf”中)。通常(如果在DNS或NIS之前解析主机文件),您可以在“/etc/host”中更改它。
            如果一台机器有多个网络接口/地址,或者在移动环境中使用,那么它可能有多个FQDN/域名,或者根本没有。因此,避免使用“hostname -fqdn”、“hostname  --domain”和“dnsdomainname”。“hostname --ip-address”地址也受到同样的限制,因此也应该避免。

    4、实例
    1)显示主机名
            [root@localhost ~]# hostname             //显示完整名字
            localhost.localdomain
            [root@localhost ~]# hostname –s         //显示短格式名字
            localhost    
            [root@localhost ~]# hostname –a         //显示主机别名
            localhost.localdomain localhost4 localhost4.localdomain4 localhost.localdomain localhost6 localhost6.localdomain6
    2)显示主机ip
            [root@localhost ~]# hostname -i
            127.0.0.1 127.0.0.1

    -------------------------

    ypdomainname    
            ypdomainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机NIS/YP域名。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            ypdomainname  [-v]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -v
                    显示详细执行过程

    3、实例
    显示主机域名
            [root@localhost ~]# ypdomainname                         //显示域名
            www.weijie.com
            [root@localhost ~]# ypdomainname www.david.com        //设置域名
            [root@localhost ~]# ypdomainname                         //显示域名
            www.david.com
        


    nisdomainname    
            nisdomainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机NIS/YP域名。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            nisdomainname  [-v]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -v
                    显示详细执行过程

    3、实例
    显示主机域名
            [root@localhost ~]# nisdomainname                          //显示域名
            www.david.com
            [root@localhost ~]# nisdomainname www.weijie.com        //设置域名
            [root@localhost ~]# nisdomainname                          //显示域名
            www.weijie.com
        


    domainname    
            domainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机域名。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            domainname  [-v]  [-F filename]  [name]

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -v
                    显示详细执行过程
            -F | --file filename
                    从指定文件读取主机域名

    3、实例
    显示主机域名
            [root@localhost ~]# domainname -v
            getdomainname()=`(none)'
            (none)
            [root@localhost ~]# domainname www.david.com
            You have new mail in /var/spool/mail/root
            [root@localhost ~]# domainname
            www.david.com
        


    dnsdomainname    
            dnsdomainname将打印FQDN(完全限定域名)的域部分。系统的完整FQDN以“hostname --fqdn”返回。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
    1、语法
            dnsdomainname  [-v]  

    2、选项列表
            --help
                    显示帮助文档
            --version
                    显示命令版本
            -v
                    显示详细执行过程

    3、实例
    显示主机域名
            [root@localhost ~]# dnsdomainname –v                      //-v选项显示详细执行过程
            gethostname()=`localhost.localdomain'
            Resolving `localhost.localdomain' ...
            Result: h_name=`localhost'
            Result: h_aliases=`localhost.localdomain'
            Result: h_aliases=`localhost4'
            Result: h_aliases=`localhost4.localdomain4'
            Result: h_aliases=`localhost.localdomain'
            Result: h_aliases=`localhost6'
            Result: h_aliases=`localhost6.localdomain6'
            Result: h_addr_list=`127.0.0.1'
            Result: h_addr_list=`127.0.0.1'

    -------------------------

    ifcfg
            ifcfg是一个简单的脚本替换iconfig命令,它可以设置网络接口的ip地址。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            ifcfg  [device]  [cmd]  [address]
            device就是网卡设备,它可能有别名。cmd可以是add、delete、stop。address就是ip地址。

    2、选项列表
            无

    3、实例
    1)添加ip地址
            [root@localhost ~]# ifcfg eth0 add 192.168.0.250/24                     //添加地址250
            Forwarding is ON or its state is unknown (4). OK, No RDISC.
            [root@localhost ~]# ifconfig                                                //查看网络信息
            eth0      Link encap:Ethernet  HWaddr 08:00:27:14:33:57  
                      inet addr:192.168.0.250  Bcast:192.168.0.255  Mask:255.255.255.0
                      inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                      RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:72250 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:1000
                      RX bytes:83580745 (79.7 MiB)  TX bytes:5842176 (5.5 MiB)
    2)删除ip地址
            [root@localhost ~]# ifcfg eth0 delete 192.168.0.250/24                   //删除网卡地址
            Forwarding is ON or its state is unknown (4). OK, No RDISC.
            [root@localhost ~]# ifconfig                                                  //查看网卡信息,ip地址已经删除
            eth0      Link encap:Ethernet  HWaddr 08:00:27:14:33:57  
                      inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                      RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:1000
                      RX bytes:83580745 (79.7 MiB)  TX bytes:5842218 (5.5 MiB)

    -------------------------

    ifconfig
           ifconfig指令用来配置网络接口参数,同时还可以显示当前内核网络接口的工作状态。如果没有提供参数,则ifconfig将显示当前活动接口的状态。如果给定单个接口参数,则只显示给定接口的状态;如果给定单个“-a”参数,则显示所有接口的状态,即使是关闭的接口也是如此。否则,它会配置一个接口。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
           ifconfig  [interface | up | down]

    2、选项参数列表
           interface
                  接口的名称。这通常是一个驱动程序名,后面跟着一个单元号,例如用于第一个以太网接口的eth0。
           up
                  此标志将导致激活接口。如果将地址分配给接口,则会隐式指定该地址。
           down
                  此标志导致关闭此接口的驱动程序。
           [-]arp
                  启用或禁用在此接口上使用ARP协议。
           [-]promisc
                  启用或禁用接口的混杂模式。如果选中,网络上的所有数据包都将由接口接收。
           [-]allmulti
                  启用或禁用所有多播模式。如果选中,则接口将接收网络上的所有多播数据包。
           metric N
                  此参数设置接口度量。它在GNU/Linux下不可用
           mtu N
                  此参数设置接口的最大传输单元(MTU)。
           dstaddr addr
                  为点对点链路(如PPP)设置远程IP地址.这个关键字现在已经过时了;使用pointopoint关键字代替。
           netmask addr
                  设置此接口的IP网络掩码。此值默认为通常的A、B或C类网络掩码(从接口IP地址派生),但可以设置为任何值。
           add addr/prefixlen
                  向接口添加IPv 6地址
           del addr/prefixlen
                  从接口中删除IPv 6地址
           tunnel ::aa.bb.cc.dd
                  创建一个新的SIT(IPv6-in-IPv4)设备,通过隧道到达给定的目的地。
           irq addr
                  设置此设备使用的中断行。并非所有设备都可以动态更改其IRQ设置。
           io_addr addr
                  为该设备设置I/O空间中的起始地址
           mem_start addr
                  设置此设备使用的共享内存的起始地址。只有少数几个设备需要这个
           media type
                  设置设备要使用的物理端口或介质类型。并非所有设备都可以更改此设置,以及那些可以更改其支持的值的设备。典型的类型值是10 base 2(细以太网)、10 base T(双绞线10 Mbps以太网)、AUI(外收发信机)等。驱动的特殊介质类型可以用来告诉驱动对媒体进行自动感知。同样,并不是所有的驱动都能做到这一点。
           [-]broadcast [addr]
                  如果地址参数给定,则为该接口设置协议广播地址。否则,设置(或清除)接口的IFF_BROADCAST标志。
           [-]pointopoint [addr]
                  这个关键字启用了接口的点对点模式,这意味着它是两台机器之间的直接链接,没有其他人监听它。如果地址参数也给出了,就像过时的dstaddr关键字一样,设置链接另一端的协议地址。否则,设置或清除接口的IFF_POINTOPOINT标志。
           hw class address
                  如果设备驱动程序支持此操作,则设置此接口的硬件地址。关键字后面必须跟着硬件类的名称和相当于硬件地址的可打印的ASCII。目前支持的硬件类包括ether (以太网)、ax25(AMPRAX.25)、ARCnet和netrom(AMPR NET/ROM)。
           multicast
                  在接口上设置多播标志。这通常不应该需要,因为驱动程序本身设置正确的标志。
           address
                  要分配给此接口的IP地址。
           txqueuelen length
                  设置设备的传输队列的长度。对于具有高延迟(调制解调器链路,ISDN)的较慢设备,将其设置为小值是有用的,以防止快速批量传输过多地干扰诸如telnet之类的交互通信。

    3、地址族
           如果接口名称之后的第一个参数被识别为受支持地址族的名称,则该地址族用于解码和显示所有协议地址。目前支持的地址族包括Internet(TCP/IP,默认值)、inet6(IPv 6)、Axis25(AMPR分组无线电)、ddp(AppleTalk相位2)、IPX(Novell IPX)和netrom(AMPR分组无线电)。在IPv4虚线小数表示法中提供的所有数字都可以是十进制、八进制或十六进制,正如ISO C标准所指定的那样(即,前导0x或0x表示十六进制;否则,前导“0”表示八进制;否则,该数字被解释为十进制)。使用十六进制和八进制数字是不符合RFC的,因此它的使用是不鼓励的,可能会消失。

    4、实例
    1)查看当前网络状态
           [root@localhost ~]# ifconfig                //没有任何参数选项,显示当前所有网络状态
           eth0      Link encap:Ethernet  HWaddr 08:00:27:14:33:57  
              inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
              TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:83580745 (79.7 MiB)  TX bytes:5842218 (5.5 MiB)

           lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:7347 errors:0 dropped:0 overruns:0 frame:0
              TX packets:7347 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:786270 (767.8 KiB)  TX bytes:786270 (767.8 KiB)
    2)查看指定网卡的状态
           [root@localhost ~]# ifconfig eth0           //显示指定网卡状态
           eth0      Link encap:Ethernet  HWaddr 08:00:27:14:33:57  
              inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
              TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:83580745 (79.7 MiB)  TX bytes:5842218 (5.5 MiB)
    3)启动网卡
           [root@localhost ~]# ifconfig eth0 down           //关闭eth0
           [root@localhost ~]# ifconfig eth0 up             //开启eth0
           [root@localhost ~]# ifconfig eth0                 //查看eth0,已经分配ip
           eth0      Link encap:Ethernet  HWaddr 08:00:27:14:33:57  
              inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:107280 errors:0 dropped:0 overruns:0 frame:0
              TX packets:72262 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:83582067 (79.7 MiB)  TX bytes:5843588 (5.5 MiB)

    -------------------------

    ifup
          ifup指令用来启动网络接口设备,设备必须是定义在“/etc/sysconfig/network-scripts/ifcfg-ethX”或者“/etc/sysconfig/network”的文件。这些脚本通常使用一个参数:配置的名称(例如eth0)。在引导序列中,使用“boot”的第二个参数调用它们,以便在引导过程中不想打开的设备(ONBOOT=no)此时可以被忽略。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          ifup interface

    2、选项列表
          无

    3、实例
          激活网卡
          [root@localhost ~]# ifup eth0           //激活网卡eth0
          活跃连接状态:激活中
          活跃连接路径:/org/freedesktop/NetworkManager/ActiveConnection/2
          状态:激活的
          连接被激活



    ifdown
          ifdown指令用来关闭网络接口设备,设备必须是定义在“/etc/sysconfig/network-scripts/ifcfg-ethX”或者“/etc/sysconfig/network”的文件。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          ifdown interface

    2、选项列表
          无

    3、实例
          关闭网卡
          [root@localhost ~]# ifdown eth0         //关闭eth0
          设备状态:3 (断开连接)

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    arp
          arp指令用来管理系统的arp缓冲区,可以显示、删除、添加静态mac地址。ARP以各种方式操纵内核的ARP缓存。主要选项是清除地址映射项并手动设置。为了调试目的,ARP程序还允许对ARP缓存进行完全转储。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          arp  [-evn]  [-H type]  [-i if]  -a  [hostname]
          arp  [-v]  [-i if]  -d  hostname  [pub]
          arp  [-v]  [-H type]  [-i if]  -s  hostname  hw_ addr  [temp]
          arp  [-v]  [-H type]  [-i if]  -s  hostname  hw_ addr  [netmask nm]  pub
          arp  [-v]  [-H type]  [-i if]  -Ds  hostname  ifa  [netmask nm]  pub
          arp  [-vnD]  [-H type]  [-i if]  -f  [filename]

    2、选项列表
          --help
                显示帮助文档
          --version
                显示命令版本
          -H type
          --hw-type type
          -t type
                在设置或读取ARP缓存时,这个可选参数告诉ARP应该检查哪类条目。此参数的默认值为ether(即IEEE 802.3 10 Mbps以太网的硬件代码0x01)。其他可能的值有,如ARCnet(Arcnet)、PROnet(PRINET)、AX.25(Axis 25)和Net/ROM(Netrom)。
          -a [hostname] | --all [hostname]
                显示本机的arp缓冲区内容
          -d hostname | --delete hostname
                从缓冲区删除指定的地址类型
          -D | -use-device
                使用指定接口的mac地址
          -e
                使用Linux风格显示
          -i if | --device if
                显示指定设备的arp缓冲区
          -s hostname hw_addr
                设置指定主机的mac地址映射
          -f filename  |  --file filename
                类似于-s选项,只是这次地址信息是从filename设置的。数据文件的名称通常是“/etc/ether”,但这不是正式的。如果没有指定文件名“/etc/ether”作为默认值。该文件的格式很简单;它只包含带有硬件地址和由空格分隔的主机名的ASCII文本行。此外,还可以使用pub、temp和netmask标志。
          -n | --numeric
                使用数字方式显示
          -v | --verbose
                显示执行过程
          在所有需要主机名的地方,人们也可以用虚线小数点表示法输入IP地址。作为兼容性的特例,主机名和硬件地址的顺序可以交换。ARP缓存中的每个完整条目都将被标记为C标志。永久条目用M标记,已发布的条目带有P标志。

    3、实例
    1)添加静态映射
          [root@localhost ~]# arp -i eth0 -s 192.168.1.6 ff:ee:ee:ee:ee:ee        //将目标ip地址映射固定mac
          [root@localhost ~]# arp –a                                                      //查看arp缓冲区
          ? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
          ? (192.168.1.6) at ff:ee:ee:ee:ee:ee [ether] PERM on eth0
    2)以数字方式显示
          [root@localhost ~]# arp -vn
          Address                  HWtype  HWaddress           Flags Mask            Iface
          10.0.2.2                 ether   52:54:00:12:35:02   C                     eth0
          192.168.1.6              ether   ff:ee:ee:ee:ee:ee   CM                    eth0
          Entries: 2    Skipped: 0    Found: 2

    -------------------------

    arping
          arping指令用于发送arp请求到一个相邻的主机,在指定网卡上发送arp请求指定地址,源地址使用-s指定。该指令可以直径ping MAC地址,找出哪些地址被哪些电脑使用了。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          arping  [-AbDfhqUV]  [-c count]  [-w deadling]  [-s source]  -I  interface  destnation

    2、选项列表
          -A
                与-U相同,但是发送的是ARP RELAY报文
          -b
                只发送物理层的广播报文
          -c count
                指定发送测试数据包的次数
          -D
                重复地址检测模式
          -f
                如果目的主机有回应,立刻停止发送测试数据包
          -h
                显示帮助信息
          -I interface
                指定网络设备接口
          -q
                静默模式
          -s source
                指定发送测试包的源地址
          -U
                更新邻居主机arp缓存
          -V
                显示版本信息
          -w
                指定超时时间

    3、实例
    向邻居主机发送请求
          [root@localhost ~]# arping -I eth0 192.168.1.8                       //指定网卡,向目标ip发送请求
          ARPING 192.168.1.8 from 192.168.1.9 eth0
          Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D]  0.817ms       //可以看到目标ip的mac地址
          Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D]  0.749ms
          Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D]  0.741ms
          Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D]  0.787ms

    -------------------------

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
    链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    ipcalc
            ipcalc提供了一种计算主机IP信息的简单方法。各种选项指定ipcalc应该在标准输出上显示什么信息。可以指定多个选项。必须始终指定要操作的IP地址。大多数操作还需要一个网络掩码或CIDR前缀。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
            ipcalc  [OPTION]... <IP address>[/prefix]  [netmask]

    2、选项列表
            -c | --check
                    检测ip地址
            -4
                    指定ipv4
            -6
                    指定ipv6
            -b | --broadcast
                    显示指定ip的广播地址和网络掩码
            -h | --hostname
                    显示指定ip的主机名
            -m | --netmask
                    计算给定地址的掩码
            -p | --prefix
                    显示给定掩码或者ip的前缀
            -n | --network
                    显示给定ip和掩码的网络地址
            -s | --slient
                    不显示任何错误信息

    3、实例
    1)计算网络地址
            [root@localhost ~]# ipcalc -n  192.168.1.9/24
            NETWORK=192.168.1.0
    2)计算广播地址
            [root@localhost ~]# ipcalc -b  192.168.1.9/24
            BROADCAST=192.168.1.255
    3)计算子网掩码
            [root@localhost ~]# ipcalc -4 -m  192.168.1.9
            NETMASK=255.255.255.0

    -------------------------

    netstat
          netstat指令可以显示当前的网络连接、路由表、接口统计信息、伪装连接和多播成员资格等信息。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          netstat  [address_family_options]  [--tcp|-t]  [--udp|-u]  [--raw|-w]  [--listening|-l]  [--all|-a]  [--numeric|-n]  [--numeric-hosts]  [--numeric-ports]  [--numeric-ports]  [--symbolic|-N]  [--extend|-e[--extend|-e]]  [--timers|-o]  [--program|-p]   [--verbose|-v]  [--continuous|-c]   [delay]
          netstat  {--route|-r}  [address_family_options]  [--extend|-e[--extend|-e]]  [--verbose|-v]  [--numeric|-n]  [--numeric-hosts]  [--numeric-ports]  [--numeric-ports]  [--continuous|-c] [delay]
          netstat  {--interfaces|-I|-i}  [iface]  [--all|-a]  [--extend|-e]  [--verbose|-v]  [--program|-p]  [--numeric|-n]  [--numeric-hosts]  [--numeric-ports]  [--numeric-ports]  [--continuous|-c]  [delay]
          netstat  {--groups|-g}  [--numeric|-n]  [--numeric-hosts]  [--numeric-ports]  [--numeric-ports]   [--continuous|-c]   [delay]
          netstat  {--masquerade|-M}  [--extend|-e]  [--numeric|-n]  [--numeric-hosts]  [--numeric-ports]  [--numeric-ports]  [--continuous|-c] [delay]
          netstat  {--statistics|-s}  [--tcp|-t]  [--udp|-u]  [--raw|-w]  [delay]
          netstat  {--version|-V}
          netstat {--help|-h}

          address_family_options:
          [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,  ...  }]  [--unix|-x]  [--inet|--ip]  [--ax25]  [--ipx]  [--netrom]  [--ddp]

    2、选项列表
          --help
                显示帮助信息
          --version
                显示版本信息
          -v | --verbose
                显示执行过程
          -n | --numeric
                直接显示数字ip
          --numeric-hosts
                显示主机的数字地址,不影响端口和用户名
          --numeric-ports
                显示端口,不影响主机和用户名
          --numeric-users
                显示用户id,不影响主机和端口
          -A | --protocol
                指定网络类型
          -c | --continuous
                持续显示
          -e | --extend
                显示其他附加信息
          -o | --timers
                显示计时器
          -p | --program
                显示正在使用的socket程序pid和名字
          -l | --listen
                只显示监听的socket信息
          -a | -all
                显示所有连接中的socket信息
          -F
                显示FIB
          -C
                显示路由的缓存
          -Z | --context
                如果打开了SELinux,那么就打印SELinux的上下文
          -T | --notrim
                停止修剪长地址

    3、说明
          netstat打印有关Linux网络子系统的信息。打印的信息类型由第一个参数控制
          (none)
                默认情况下,netstat显示打开的套接字列表。如果不指定任何地址族,则将打印所有已配置地址家族的活动套接字。
          -r | --route
                打印内核路由表
          -g | --groups
                显示IPv4和IPv6的多播组成员信息
          -i| --interfaces=iface , -I=iface
                显示所有网络接口的表,或指定的ifaces。
          -M | --masquerade
                显示假连接列表。
          -s | --statistics
                显示每个协议的汇总统计信息。

    4、输出
          Active Internet connections(TCP, UDP, raw),说明
          Proto,socket使用的协议,tcp, udp, raw。
          Recv-Q,连接到此套接字的用户程序未复制的字节数。
          Send-Q,远程主机未确认的字节数。
          Local Address,套接字的本地端的地址和端口号。除非指定了“--numeric (-n)“选项,否则套接字地址将解析为其规范主机名(FQDN),端口号将被转换为相应的服务名称。
          Foreign Address,套接字的远程端的地址和端口号。类似于“本地地址”。
          State,socket的状态。由于在原始模式中没有状态,通常在UDP中也没有使用状态,因此这一列可以保留为空白。通常,这可以是几个值之一:            
                ESTABLISHED,套接字有一个已建立的连接。
                SYN_SENT,套接字正在积极尝试建立连接。
                SYN_RECV,已从网络接收到连接请求。
                FIN_WAIT1,套接字关闭,连接正在关闭。
                FIN_WAIT2,连接被关闭,套接字正在等待来自远程端的关闭。
                TIME_WAIT,套接字在关闭后等待处理仍在网络中的数据包。
                CLOSED,没有使用套接字。
                CLOSE_WAIT,远程终端已关闭,等待套接字关闭。
                LAST_ACK,远程终端已关闭,套接字已关闭。等待确认
                LISTEN,套接字正在监听传入的连接。除非您指定“--listening”或“--all(-a)”选项,否则输出中不包含此类套接字。
                CLOSING,两个套接字都已关闭,但我们仍然没有发送所有数据。
                UNKNOWN,套接字的状态未知。
          User
          PID/Program name
          Timer

          Active UNIX domain Sockets,说明
          Proto,套接字使用的协议(通常是Unix)。
          RefCnt,参考计数(即通过这个套接字附加的进程)。
          Flags,所显示的标志是SO_ACCEPTON (显示为ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果未连接套接字的相应进程正在等待连接请求,则在未连接套接字上使用SO_ACCECPTON。其他的标志不正常。
          Type可能的几种值:
                SOCK_DGRAM,套接字以数据报(无连接)模式使用。
                SOCK_STREAM,这是一个流(连接)套接字。
                SOCK_RAW,套接字用作原始套接字。
                SOCK_RDM,这个服务提供可靠传递的消息。
                SOCK_SEQPACKET,这是一个顺序的数据包套接字。
                SOCK_PACKET,原始接口访问套接字。
                UNKNOWN,不知道的状态
          State
                FREE,套接字还没有分配
                LISTENING,套接字正在监听请求。
                CONNECTING,套接字正在尝试连接。
                CONNECTED,套接字已经连接。    
                DISCONNECTING,套接字断开连接。
                (empty),套接字没有连接到其他地方。
                UNKNOWN,未知的状态
          PID/Program name,打开套接字的进程ID(PID)和进程名。更多信息可在上面写的活动互联网连接部分获得。
          Path,这是连接到套接字上的相应进程的路径名。

    5、文件
          /etc/services,服务翻译文件
          /proc,proc文件系统的挂载点,它允许访问内核状态。
          /proc/net/dev,设备信息。
          /proc/net/raw,raw套接字信息。
          /proc/net/tcp,tcp套接字信息。
          /proc/net/udp,udp套接字信息。
          /proc/net/igmp,IGMP多播信息。
          /proc/net/unix,Unix域名套接字信息。
          /proc/net/ipx,IPX套接字信息。
          /proc/net/ax25,AX25套接字信息。
          /proc/net/appletalk,DDP (appletalk) 套接字信息。
          /proc/net/nr,NET/ROM套接字信息
          /proc/net/route,IP路由信息。
          /proc/net/ax25_route,AX25路由信息。
          /proc/net/ipx_route,IPX路由信息。
          /proc/net/nr_nodes,NET/ROM 节点列表。
          /proc/net/nr_neigh,NET/ROM邻居。
          /proc/net/ip_masquerade,伪装连接。
          /proc/net/snmp,静态。


    6、实例
    1)显示指定类型的网络信息
          [root@localhost ~]# netstat -A inet             //指定网络类型inet
          Active Internet connections (w/o servers)
          Proto Recv-Q Send-Q Local Address               Foreign Address             State      
          udp        0      0 192.168.0.113:33423         192.168.0.1:domain          ESTABLISHED
          udp        0      0 192.168.0.113:40242         192.168.1.1:domain          ESTABLISHED
          udp        0      0 192.168.0.113:50786         192.168.0.1:domain          ESTABLISHED
    2)显示路由表
          [root@localhost ~]# netstat –r                 //显示路由表
          Kernel IP routing table
          Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
          255.255.255.255 -               255.255.255.255 !H        - -          - -
          192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
          224.0.0.0       -               255.255.255.0   !         - -          - -
          default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
    3)显示网卡状态
          [root@localhost ~]# netstat –i                    //显示网卡状态
          Kernel Interface table
          Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flag
          eth0       1500   0   121817      0      0      0    79998      0      0      0 BMRU
          lo        16436   0     8374      0      0      0     8374      0      0      0 LRU

    -------------------------

    traceroute
          traceroute指令输出到目标主机的路由包。Traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路径上从每个网关激发ICMP TIME_SUBERS响应。
          traceroute6等价于“traceroute -6”
          唯一需要的参数是目标主机的名称或IP地址。探测数据包的总大小(IPv 4默认为60字节,IPv 6为80字节)是一个可选参数。在某些情况下,可以忽略指定的大小或将其增加到最小值。
          该程序试图跟踪IP数据包将遵循的路由到某些Internet主机,方法是使用一个小的ttl(生命时间)启动探测包,然后从网关侦听ICMP“时间超过”的答复。我们以1开头,然后增加1,直到我们得到一个ICMP“端口不可达”(或TCP重置),这意味着我们到达了“主机”,或者达到了最大值(默认为30跳)。在每个ttl设置处发送三个探针(默认情况下),并打印一行,显示每个探针的ttl、网关地址和往返时间。在请求时,可以在地址之后添加其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在5.0秒(默认)内没有响应,则会为该探针打印一个“*”(星号)。
          追踪结束后,可以打印一些附加注释:!h、!n或!P(主机、网络或协议不可达)、!s(源路由失败)、!F(所需碎片化)、!X(管理上禁止通信)、!v(主机优先级冲突)、!C(有效的优先截止),或!<num>(ICMP不可达代码<num>)。如果几乎所有的探测器都导致某种无法到达的情况,Traceroute就会放弃并退出。
          我们不希望目标主机处理UDP探测包,因此目标端口被设置为一个不太可能的值(您可以使用-p标志更改它)。ICMP或TCP跟踪不存在这样的问题(对于TCP,我们使用半开放技术,这样可以防止目标主机上的应用程序看到我们的探测)。
    在现代网络环境下,由于防火墙的广泛应用,传统的traceroute方法并不总是适用的。这样的防火墙过滤“不太可能”的UDP端口,甚至ICMP回音。为了解决这个问题,还实现了一些额外的跟踪方法
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
          traceroute [-46dFITUnreAV]  [-f first_ttl]  [-g gate,…]  [-i device]  [-m max_ttl]  [-p port]  [-s src_addr]
          [-q nqueries]  [-N squeries]  [-t tos]  [-l flow_label]  [-w waittime]  [-z sendwait]
          [-UL]  [-P proto]  [--sport=port]  [-M method]  [-O mod_options]  [--mtu]  [--back]  host  [packet_len]

    2、选项列表
          --help
                显示帮助信息
          -V | --version
                显示版本信息
          -4 | -6
                显式强制IPv4或IPv6跟踪。默认情况下,程序将尝试解析给定的名称,并自动选择适当的协议。如果解析主机名同时返回ipv4和ipv6地址,traceroute将使用ipv4。
          -I
                使用ICMP进行路由探测
          -T
                使用TCP协议的SYN进行路由探测
          -d
                是能socket调试功能
          -f first_ttl
                指定第一个数据包的TTL,默认是1
          -F
                不使用碎片
          -g gateway
                告诉Traceroute将IP源路由选项添加到传出数据包,该数据包通知网络通过指定网关路由数据包(大多数路由器出于安全原因禁用了源路由)。通常,允许多个网关(逗号分隔)。对于IPv 6,num,addr,addr.允许使用,其中num是路由标头类型(默认为类型2)。注意,0类型的路由头现在已不再推荐使用(Rfc 5095)
          -i interface
                指定网络接口
          -m max_ttl
                指定最大ttl,默认30
          -N squeries
                指定同时发送的探测数据包的数量。同时发送几个探针可以大大加快示踪速度。默认值为16。
          -n
                使用ip地址,不使用hostname
          -p port
                指定UDP端口
          -t tos
                对于IPv 4,设置服务类型(TOS)和优先级值。有用的值是16(低延迟)和8(高吞吐量)。注意,为了使用一些TOS优先级值,您必须是超级用户。对于IPv 6,设置流量控制值。
          -w waittime
                指定等待应答的时间,默认5s
          -q nqueries
                设置每个跳的探测数据包数。默认为3
          -r
                忽略正常的路由表
          -s
                指定发送数据包的ip地址
          -z
                探测之间的最小时间间隔(默认为0)。如果值大于10,则它指定一个以毫秒为单位的数字,否则为秒数(浮点值也允许)。当某些路由器对icmp消息使用速率限制时非常有用。
          -e
                显示ICMP扩展(Rfc 4884)。一般形式是类/类型:后面是十六进制转储。MPLS(Rfc 4950)以一种形式显示出来“MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL”
          -A
                在路由注册表中执行路径查找,并在相应地址之后直接打印结果。

          --sport=port
                选择要使用的源端口
          -M method
                对traceroute操作使用指定的方法。默认的传统UDP方法有名称Default,ICMP(-I)和TCP(-T)分别有ICMP和TCP。特定于方法的选项可以通过-O传递。
          -O option
                指定一些特定于方法的选项。几个选项用逗号分隔(或在cmdline上使用多个-O)。每种方法都可能有自己的特定选项,或者许多方法根本没有它们
          -U
                使用UDP对特定的目标端口进行跟踪(而不是增加每个探针的端口)。默认端口为53(DNS)
          -UL
                使用UDPLITE追踪
          -P protocol
                使用指定协议的原始数据包进行跟踪。默认协议为253(Rfc 3692)。
          --mtu
                沿着被追踪的路径发现MTU
          --back
                打印后跳数时,它似乎与前进方向不同。在假定远程跳发送初始ttl设置为64、128或255(这似乎是一种常见的做法)的情况下,猜测了这个数字。它以“-NUM”的形式打印为否定值。

    3、可用的方法method
          通常,特定的traceroute方法可能必须由-M名称来选择,但是大多数方法都有它们简单的命令行开关(如果存在,您可以在方法名称之后看到它们)。
          default
                传统的、古老的追踪方法。默认使用。
                探测包是具有所谓“不可能”目标端口的UDP数据报。第一个探针的“不可能”端口是33434,然后每个下一个探针的端口增加一个。由于预期端口未使用,目标主机通常返回“ICMP不可访问端口”作为最终响应。(但是,没有人知道当某些应用程序侦听这样的端口时会发生什么)。
    这个方法普通用户就可以使用。
          icmp       -I
                目前最常用的方法是使用ICMP回波数据包作为探针。如果您可以ping(8)目标主机,则icmp跟踪也适用。
          tcp        -T
                众所周知的现代方法,旨在绕过防火墙。使用常量目标端口(默认为80,http)。
    如果网络路径中存在一些过滤器,那么很可能任何“不太可能”的UDP端口(对于默认方法而言)或甚至ICMP回波(对于ICMP)都会被过滤,并且整个跟踪只会在这样的防火墙上停止。要绕过网络过滤器,我们必须只使用允许的协议/端口组合。如果我们追踪一些,比如说,邮件服务器,那么更有可能“-      T –p 25”可以到达它,即使-我不能。
                这种方法使用了众所周知的“半开放技术”,它可以防止目标主机上的应用程序看到我们的探测。通常,发送TCP syn。对于未被监听的端口,                         我们接收TCP重置,一切都完成了。对于活动侦听端口,我们接收TCP syn ack,但通过TCP重置(而不是预期的TCP ack)应答,这样即使应用程序从未注意到,远程TCP会话也会被删除。
                这个方法有以下的一些选项,默认的是syn、sysctl
                syn,ack,fin,rst,psh,urg,ece,cwr,在任意组合中为探测包设置指定的tcp标志。
                flags=num,将TCP标头中的标志字段设置为num。
                ecn,发送带有TCP标志ECA和CWR的syn数据包(用于显式拥塞通知,rfc 3168)
                sack,timestamps,window_scaling,在传出探测包中使用相应的tcp标头选项。
                sysctl,对上面的TCP头选项和ecn使用当前sysctl(“/proc/sys/net/*”)设置。默认情况下始终设置,如果没有其他指定的话
                mss=num,对maxseg tcp报头选项使用num值(当syn)
          tcpconn
                TCP方法的初始实现,简单使用CONNECT(2)调用,完成TCP会话的完全打开
          udp       -U
                使用带有常量目标端口的UDP数据报(默认为53,DNS)。也打算绕过防火墙。
                注意,与TCP方法不同的是,目标主机上的相应应用程序总是接收我们的探测(带有随机数据),而且大多数都很容易被它们混淆。但是,大多数情况下,它不会响应我们的数据包,因此我们永远不会看到跟踪中的最后一跳。(幸运的是,似乎至少DNS服务器会以愤怒的方式回复)。此方法不需要特权。
          udplite   -UL
                对探针使用udplite数据报(具有固定的目标端口,默认为53),此方法不需要特权。选项:
                coverage=num,设置udplite范围num。
          raw       -P proto
                发送协议原始数据包。选项:
                protocol=proto,使用IP协议Proto(默认253)

    4、说明
    为了加速工作,通常同时发送几个探测器。另一方面,它制造了一个“包裹风暴”,特别是在回复方向。路由器可以节流ICMP响应的速率,有些应答可能会丢失。为了避免这种情况,减少同步探测的数量,甚至将其设置为1(类似于最初的traceroute实现),即-N1。
    最终(目标)主机可以丢弃一些同时进行的探测,甚至可能只回答最新的探测。它可以导致额外的“看上去像过期”啤酒花接近最后一跳。我们使用智能算法来自动检测这种情况,但如果在您的情况下它无法帮助,只需使用-N1。
    为了获得更好的稳定性,您可以通过-z选项来减缓程序的工作速度,例如,在探测之间使用“-z 0.5”进行半秒暂停。
    如果有些跳对每种方法都没有任何报告,那么获得某些信息的最后机会是使用“ping -R”命令(ipv4,并且仅对最近的8跳)。

    5、实例
    追踪到baidu的路由信息
    [root@localhost ~]# ping www.baidu.com -c 1                         //ping目标,得到ip地址
    PING www.a.shifen.com (111.13.100.91) 56(84) bytes of data.

    [root@localhost ~]# traceroute -n www.baidu.com                   //追踪路由
    traceroute to www.baidu.com (111.13.100.92), 30 hops max, 60 byte packets
    1  192.168.1.1  4.124 ms  3.936 ms  3.882 ms
    2  10.46.80.1  8.917 ms  9.238 ms  9.233 ms
    3  183.203.226.201  12.855 ms  12.788 ms  12.802 ms
    4  221.180.30.197  12.792 ms 221.180.30.45  12.776 ms  12.762 ms
    5  221.183.47.225  13.526 ms  13.363 ms  13.259 ms
    6  221.183.37.249  26.798 ms  23.556 ms  26.832 ms
    7  * * *
    8  111.13.98.101  20.569 ms  20.460 ms 111.13.98.93  24.463 ms
    9  111.13.98.93  27.215 ms 111.13.98.101  20.895 ms 111.13.112.53  26.946 ms
    10  111.13.108.5  24.136 ms 111.13.112.57  23.754 ms 111.13.112.61  23.712 ms

    -------------------------

    ip
          ip指令可以显示或操作路由、网路设备,设置路由策略和通道。
         此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
         ip [选项]  OBJECT  COMMAND [help]
         OBJECT对象可以是:link,网络设备;addr,设备的协议地址;route,路由表;rule,策略;neigh,arp缓存;tunnel,ip通道;maddr,多播地址;mroute,多播路由
         COMMAND是操作命令,不同的对象有不同的命令配置。
         link对象支持的命令:set、show。
         addr对象支持的命令:add、del、flush、show。
         route对象支持的命令:list、flush、get、add、del、change、append、replace、monitor。
         rule对象支持的命令:list、add、del、flush。
         neigh对象支持的命令:add、del、change、replace、show、flush。
         tunnel对象支持的命令:add、change、del、show。
         maddr支持的命令:add、del。
         mroute支持的命令:show

    2、选项列表
         -V | -Version
              显示版本信息
         --help
              显示帮助信息
         -s | -stats | -statistics
              显示详细的信息
         -f | -family
              指定协议类型
         -4
              等同-family inet
         -6
              等同-family inet6
         -0
              等同-family link
         -o | -oneline
              每条记录输出一行
         -r | -resove
              使用系统名字解析DNS

    3、ip link---网络设备配置
         链路是一种网络设备,相应的命令显示和改变设备的状态。
         1)ip link set,改变设备属性
         devNAME(default),NAME指定要操作的网络设备。配置SR-IOV虚拟功能(VF)设备时,此关键字应指定关联的物理功能(PF)设备。
         up,down,改变设备的状态,开或者关。
         arp on,arp off,更改设备的NOARP标志。
         multicast on,multicast off,更改设备的MULTICAST标志。
         dynamic on,dynamic off,更改设备的DYNAMIC标志。
         nameNAME,更改设备的名字,如果设备正在运行或者已经有一个配置好的地址,那么操作无效。
         txqueuelenNUMBER,txqlenNUMBER,更改设备发送队列的长度。
         mtuNUMBER,更改设备MTU。
         addressLLADDRESS,更改接口的站点地址
         broadcastLLADDRESS,brdLLADDRESS,peerLLADDRESS,当接口为POINTOPOINT时,更改链路层广播地址或对等地址。
         netnsPID,将设备移动到与进程PID关联的网络命名空间
         aliasNAME,给设备一个符号名以便于参考
         vfNUM,指定要配置的虚拟功能设备。必须使用dev参数指定关联的pf设备。
         警告:如果请求更改多个参数,则在任何更改失败后立即中止IP。这是IP能够将系统移动到不可预测状态的唯一情况。解决方案是避免使用一个ip链路集调用来更改多个参数。
         2)ip link show,显示设备属性
         devNAME(default),NAME指定要显示的网络设备。如果省略此参数,则列出所有设备。
         up,只显示运行的设备。

    4、ip address---协议地址管理
         该地址是附加到网络设备上的协议(IP或IPv 6)地址。每个设备必须至少有一个地址才能使用相应的协议。可以将几个不同的地址附加到一个设备上。这些地址不受歧视,因此别名一词不太适合它们,我们在本文件中也没有使用它。ip addr命令显示地址及其属性,添加新地址并删除旧地址。
         1)ip address add,增加新的协议地址
         devNAME,要向其添加地址的设备的名称。
         localADDRESS(default),接口的地址。地址的格式取决于协议。它是一个用于IP的虚线四边形和一系列十六进制半字,用冒号分隔用于IPv 6。地址后面可以是斜杠和十进制数,它们编码网络前缀长度。
         peerADDRESS,点对点接口的远程端点的地址。同样,地址后面可以是斜杠和十进制数,编码网络前缀长度。如果指定了对等地址,则本地地址不能具有前缀长度。网络前缀与对等端相关联,而不是与本地地址相关联。
         broadcastADDRESS,接口的广播地址。可以使用特殊符号“和”-“代替广播地址。在这种情况下,通过设置/重置接口前缀的主机位来导出广播地址。
         labelNAME,每个地址都可以用标签字符串标记。为了保持与Linux2.0网络别名的兼容性,此字符串必须与设备名称重合,或者必须以设备名后跟冒号作为前缀。
         scopeSCOPE_VALUE,地址有效的区域的范围。可用的作用域列在文件“/etc/iproute2/rt_scopes“中。预定义的范围值是:
              Ⅰ)global,地址全局有效。
              Ⅱ)site,(仅IPv 6)该地址为站点本地地址,即该地址在此站点内有效。
              Ⅲ)link,该地址是本地链接,即它仅在此设备上有效。
              Ⅳ)host,该地址仅在此主机内有效。
         2)ip address delete,删除协议地址
         Arguments:与“ip addr add“的参数一致。设备名称是必需的参数。其余的都是可选的。如果没有提供参数,则删除第一个地址。
         3)ip address show,显示协议地址
         devNAME(default),设备名字
         scopeSCOPE_VAL,仅列出具有此作用域的地址。
         toPREFIX,仅列出匹配PREFIX的地址。
         labelPATTERN,只列出与模式匹配的标签的地址。
         dynamic,permanent,仅IPv 6)仅列出由于无状态地址配置而安装的地址,或只列出永久(非动态)地址。
         tentative,(仅IPv 6)仅列出未通过重复地址检测的地址。
         deprecated,(仅IPv 6)仅列出废弃地址
         primary,secondary,只列出主(或辅助)地址。
         4)ip address flush,刷新协议地址
         此命令刷新由某些条件选择的协议地址。此命令具有与Show相同的参数。不同之处在于,当不给出参数时,它不会运行。警告:这个命令(以及下面描述的其他刷新命令)非常危险。如果你犯了一个错误,它不会原谅它,而是会残酷地清除所有的地址。
         使用-statistics选项,命令变得详细。它打印出已删除地址的数量和为刷新地址列表而进行的轮次数。如果提供了两次此选项,则“ip addr flush“也会以上一小节描述的格式转储所有已删除的地址。

    5、ip addrlabel---协议地址标签管理
         IPv 6地址标签用于RFC 3484中描述的地址选择。优先级由用户空间管理,只有标签存储在内核中。
         1)ip addrlabel add,增加地址标签
         prefixPREFIX,devDEV,输出接口。
         labelNUMBER,prefix的标签,0xffffffff保留。
         2)ip addrlabel del,删除地址标签
         该命令删除内核中的一个地址标签条目。参数:与“ip addrlabel add“的参数一致,但不需要标签。
         3)ip addrlabel list,列出地址标签
         显示地址标签的内容。
         4)ip addrlabel flush,刷新地址标签
         刷新地址标签的内容,并且不保存默认设置

    6、ip neighbour---邻居/ARP表管理
         邻居对象为共享相同链路的主机建立协议地址和链路层地址之间的绑定。邻接条目被组织成表。IPv 4邻居表的另一个名称是ARP表。相应的命令显示邻居绑定及其属性,添加新的邻居项并删除旧条目。
         1)ip neighbour add,增加邻居表
         2)ip neighbour change,改变已经存在的邻居表
         3)ip neighbour replace,增加一个表或者修改已经存在的表
         这些命令创建新的邻居记录或更新现有记录。上面的三个命令使用方法如下:
         toADDRESS(default),邻居的协议地址。它要么是IPv4,要么是IPv6地址。
         devNAME,连接到邻居的接口。
         lladdrLLADDRESS,邻居的链路层地址,可以是null。
         nudNUD_STATE,邻居的状态,可以是下面的值:
              Ⅰ)permanent,邻居项永远有效,只能内管理员删除。
              Ⅱ)noarp,邻居项有效。将不会尝试验证此条目,但可以在其生存期届满时删除该条目。
              Ⅲ)reachable,邻居项在可达超时过期之前是有效的。
              Ⅳ)stale,邻居的进入是有效的,但却是可疑的。如果邻居状态有效且此命令未更改地址,则此选项不会更改邻居状态。
         4)ip neighbour delete,删除邻居表
         此命令使邻居项无效。这些参数与“ip neigh add“相同,只是将忽略lladdr和nud。警告:试图删除或手动更改内核创建的noarp条目可能会导致不可预测的行为。特别是,即使在NOARP接口上,如果地址是多播或广播的,内核也可以尝试解析此地址。
         5)ip neighbour show,显示邻居表
         toADDRESS(default),选择要列出的邻居的前缀
         devNAME,只列出与此设备相连的邻居
         unused,只列出当前未使用的邻居
         nudNUD_STATE,只列出此状态中的相邻项。NUD_STATE接受下面列出的值或特殊值all,这意味着所有状态。此选项可能发生不止一次。如果没有此选项,则IP列出除None和noarp以外的所有条目。
         6)ip neighbour flush,刷新邻居表
         此命令刷新相邻表,根据某些条件选择要刷新的条目。此命令具有与show相同的参数。不同之处在于,当不给出参数时,它不会运行,而要刷新的默认邻居状态不包括permanent和noarp。

    -------------------------

    7、ip route—路由表管理
         操纵内核路由表中的路由条目保存其他网络节点的路径信息。路由类型可以是:
         Ⅰ)unicast,路由条目描述到路由前缀所涵盖的目的地的实际路径。
         Ⅱ)unreachable,这些目的地是无法到达的。丢弃数据包,生成不可访问的ICMP消息主机。本地发件人得到一个EHOSTUNEACH错误。
         Ⅲ)blackhole,这些目的地是无法到达的。数据包被静默丢弃。本地发送者得到一个EINVAL错误
         Ⅳ)prohibit,这些目的地是无法到达的。丢弃数据包并生成ICMP消息通信,该ICMP消息通信在管理上被禁止。本地发件人得到一个EACCES错误。
         Ⅴ)local,目的地分配给此主机。数据包被环回并在本地传送。
         Ⅵ)broadcast,目的地是广播地址。数据包作为链路广播发送。
         Ⅶ)throw,与策略规则一起使用的特殊控制路径。如果选择这样的路由,则将终止此表中的查找,假装没有找到路由。如果没有策略路由,则相当于路由表中没有路由。丢包并生成不可到达的ICMP消息网。本地发送者得到一个ENETUNEACH错误。
         Ⅷ)nat,一条特殊的NAT路线。前缀覆盖的目的地被认为是虚拟地址(或外部地址),需要在转发之前转换为真实地址(或内部地址)。选择要转换到的地址,并附带属性警告:Linux2.6中不再支持路由NAT。
         Ⅸ)via,anycast,未实现目标是分配给此主机的任意广播地址。它们主要等同于本地地址,但有一个不同之处:当将这些地址用作任何数据包的源地址时,这些地址是无效的。
         multicast,用于多播路由的一种特殊类型。它不存在于普通路由表中。
         路由表:Linux-2.x可以将路由打包到从1到255范围内的数字标识的多个路由表中,或者根据文件/etc/iucte 2/rt_tables的名称,默认情况下,所有普通路由都插入主表(ID 254),内核只在计算路由时使用此表。实际上,另一个表总是存在的,这是不可见的,但更重要的是。它是本地表(ID 255)。此表由本地地址和广播地址的路由组成。内核自动维护这个表,管理员通常不需要修改它,甚至不需要查看它。使用策略路由时,多个路由表进入游戏。
         1)ip route add,增加路由
         2)ip route change,修改路由
         3)ip route replace,改变或者增加路由
         toTYPEPREFIX(default),路由的目标前缀。如果省略类型,则IP采用类型单播。以上列出了其他类型的值。前缀是一个IP或IPv 6地址,后面有斜杠和前缀长度。如果前缀的长度丢失,则IP将采用全长主机路由.还有一个特殊的前缀默认值-相当于“IP 0/0“或者”to IPv6 ::/0“。
         tosTOS,dsfieldTOS,服务类型(TOS)密钥。该密钥没有关联的掩码,最长的匹配被理解为:首先,比较路由和数据包的TOS。如果它们不相等,那么数据包仍然可以匹配为零TOS的路由。TOS要么是8位十六进制数字,要么是“/etc/iproute2/rt_dsfield“中的标识符
         metricNUMBER,preferenceNUMBER,路由的首选值。NUMBER是任意32位数。
         tableTABLEID,要添加此路由的表。TABLEID可能是文件“/etc/iproute2/rt_tables“中的一个数字或字符串。如果省略此参数,则IP假定主表,但本地路由、广播路由和NAT路由除外,默认情况下这些路由被放入本地表中。
         devNAME,输出设备名字。
         viaADDRESS,下一个路由器的地址。实际上,这个字段的意义取决于路由类型。对于普通单播路由,它要么是真正的下一跳路由器,要么是安装在BSD兼容模式下的直接路由,它可以是接口的本地地址。对于NAT路由,它是已翻译的IP目的地块的第一个地址。
         srcADDRESS,发送到路由前缀所涵盖的目的地时要首选的源地址。
         realmREALMID,指定此路由的域。REALMID可能是文件“/etc/iproute2/rt_realms“中的一个数字或字符串。
         mtuMTU,mtulockMTU,沿着到达目的地的路径的MTU。如果未使用修饰符锁,则由于路径MTU发现,内核可能更新MTU。如果使用修饰符锁,则不会尝试路径MTU发现,所有数据包都将在IPv4情况下不使用DF位发送,或者在IPv6中碎片到MTU。
         windowNUMBER,TCP向这些目的地广告的最大窗口,以字节为单位。它限制了TCP对等点允许发送给我们的最大数据突发。
         rttTIME,最初的RTT(‘往返时间’)估计。如果没有指定后缀,则单元是直接传递给路由代码的原始值,以保持与以前版本的兼容性。否则,如果使用s、sec或secs后缀指定秒,使用ms、msec或msecs指定毫秒。
         rttvarTIME(2.3.15+ only),初始RTT方差估计。值与上述RTT指定的值相同。
         rto_minTIME(2.6.23+ only),与此目标通信时要使用的最小TCP重传超时。值与上述RTT指定的值相同。
         ssthreshNUMBER(2.3.15+ only),初始慢启动阈值的估计。
         cwndNUMBER(2.3.15+ only),阻塞窗口的夹子。如果不使用锁标志,则忽略它
         initcwndNUMBER,TCP连接的MSS中的最大初始拥塞窗口(CWND)大小。
         initrwndNUMBER(2.6.33+ only),连接到此目标的初始接收窗口大小。实际窗口大小是此值乘以连接的MSS。默认值为零,意味着使用慢速开始值。
         advmssNUMBER(2.3.15+ only),MSS(“最大段大小”)在建立TCP连接时向这些目的地做广告。如果未给出,Linux将使用从第一跳设备MTU中计算出来的默认值。(如果到达这些目的地的路径是不对称的,则这种猜测可能是错误的。)
         reorderingNUMBER(2.3.15+ only),到达此目标的路径上的最大重排序。如果未给出,Linux将使用sysctl变量“net/ipv4/tcp_reordering“所选择的值。
         nexthopNEXTHOP,多径路径的下一个。NEXTHOP是一个复杂的值,其语法类似于顶级参数列表:
         Ⅰ)viaADDRESS,下一个路由器。
         Ⅱ)devNAME,输出设备
         Ⅲ)weightNUMBER,是反映其相对带宽或质量的多径路由的此元素的权重。
         scopeSCOPE_VAL,路由前缀所涵盖的目的地的范围。SCOPE_VAL可以是文件“/etc/iproute2/rt_scopes“中的一个数字或字符串。如果省略此参数,则IP假定所有网关单播路由的作用域全局、直接单播和广播路由的范围链接以及本地路由的范围主机。
         protocolRTPROTO,此路由的路由协议标识符。RTPROTO可以是文件“/etc/iproute2/rt_protos“中的一个数字或字符串。如果未给出路由协议ID,则IP假定协议启动(即假定路由是由不了解他们正在做的事情的人添加的)。一些协议值有固定的解释:
         Ⅰ)redirect,该路由是由于icmp重定向而安装的。
         Ⅱ)kernel,该路由是由内核在自动配置期间安装的。
         Ⅲ)boot,该路由是在启动过程中安装的。如果路由守护进程启动,它将清除所有这些守护进程。
         Ⅳ)static,管理员安装了该路由以覆盖动态路由。路由守护进程将尊重它们,甚至可能会向其对等方发布广告。
         Ⅴ)ra,路由是由路由器发现协议安装的。
         onlink,假装Nextthop直接连接到此链接,即使它不匹配任何接口前缀。
         equalize,允许在多径路由上逐包随机化。如果没有这个修饰符,路由将被冻结到一个选定的下一个,这样负载拆分将只发生在每个流基上。只有当内核被修补时,均衡化才能工作。
         4)ip route delete,删除路由
    “ip route del“与”ip route add“具有相同的参数,但它们的语义略有不同。键值(to、tos、首选项和表)选择要删除的路由。如果存在可选属性,则IP验证它们是否与要删除的路由的属性一致。如果没有找到具有给定密钥和属性的路由,则”ip route del“将失败
         5)ip route show,显示路由
         toSELECTOR(default),仅从给定的目的地范围中选择路由。SELECTOR由一个可选修饰符(root、match、exact)和一个前缀组成。root选择前缀不小于PREFIX的路由。例如,“root  0/0“选择整个路由表。match选择前缀长度不超过PREFIX的路由。例如,”match  10.0/16“选择10.0/16、10/8和0/0,但未选择10.1/16和10.0.0/24。exact(或仅仅前缀)选择具有此前缀的路由。如果这两个选项都没有出现,则IP假设为根0/0,即它列出了整个表。
         tosTOS,只选择具有给定tos的路由。
         tableTABLEID,显示此表中的路线。默认设置是显示tablemain。TABLEID可以是实表的ID,也可以是特殊值之一:
         Ⅰ)all,列出所有的表。
         Ⅱ)cache,备份路由缓存。
         cloned,cached,列出克隆的路由,即由于某些路由属性(F.E)而从其他路由动态分叉的路由。(MTU)已更新。实际上,它等同于“table cache“。
         fromSELECTOR,语法与to相同,但它绑定源地址范围而不是目的地。请注意,FROM选项仅适用于克隆路由。
         protocolRTPROTO,仅列出此路由的协议。
         scopeSCOPE_VAL,仅列出具有此范围的路由
         typeTYPE,只列出此类型的路由。
         devNAME,只列出经过此设备的路由
         viaPREFIX,只列出通过前缀选择的下一个路由器的路由
         srcPREFIX,只列出由前缀选择的首选源地址的路由。
         realmREALMID,realmsFROMREALM/TOREALM,只列出这些领域的路由。
         6)ip route flush,刷新路由表
         此命令刷新由某些标准选择的路由,参数具有与“ip route show“的参数相同的语法和语义,但是路由表没有列出,而是被清除。唯一的区别是默认操作:显示转储所有IP主路由表,但刷新打印助手页。
         使用“-statistics“选项,命令变得详细。它打印出已删除路由的数目和刷新路由表的轮数。如果该选项被给予两次,IP路由刷新也会以上一小节描述的格式转储所有已删除的路由。
         )ip route get,获取一个单独的路由
         此命令获取一条到达目标的路由,并按照内核所看到的那样打印其内容。
         toADDRESS(default),目标地址。
         fromADDRESS,源地址。
         tosTOS,dsfieldTOS,服务类型。
         iifNAME,预期将从该包到达的设备。
         oifNAME,强制将此数据包路由的输出设备。
         connected,如果没有提供源地址(选项从),则重新查找从第一次查找中接收到的源设置为首选地址的路由。如果使用策略路由,则可能是不同的路由。
         请注意,此操作不等同于“ip route show“。show显示现有路线。如果必要的话,get解决它们并创建新的克隆。

    8、ip rule---路由策略数据库管理
         rule规则在路由策略数据库中控制路由选择算法。Internet中使用的经典路由算法只根据数据包的目的地地址(理论上,而不是实际中的TOS字段)进行路由决策。在某些情况下,我们希望通过不同的方式路由数据包,这不仅取决于目的地地址,还取决于其他数据包字段:源地址、IP协议、传输协议端口,甚至包有效负载。此任务称为“策略路由”。为了解决这一问题,传统的基于目标的路由表按照最长的匹配规则排序,被替换为“路由策略数据库”(RPDB),该数据库通过执行一组规则来选择路由。
         每个策略路由规则由一个选择器和一个动作谓词组成。RPDB按照增加优先级的顺序进行扫描。每个规则的选择器应用于{源地址、目标地址、传入接口、tos、fwmark},如果选择器与数据包匹配,则执行操作。动作谓词可能会成功返回。在这种情况下,它将给出路由或故障指示,并终止RPDB查找。否则,RPDB程序将继续执行下一条规则。
         语义上,自然动作是选择下一个和输出设备。在启动时,内核配置由三条规则组成的默认rpdb:
         Ⅰ)Priority: 0。Selector:匹配任何内容,Action:查找本地路由表(ID 255)。本地表是包含本地地址和广播地址的高优先级控制路由的特殊路由表。
         Ⅱ)Priority: 32766。Selector:匹配任何内容,Action:查找路由表主(ID 254)。主表是包含所有非策略路由的普通路由表.管理员可以删除和/或用其他规则重写此规则。
         Ⅲ)Priority: 32767。Selector:匹配任何内容,Action:查找路由表默认值(ID 253)。默认表为空。如果没有先前的默认规则选择数据包,则保留用于某些后处理。这一规则也可以删除。
         RPDB可能包含以下类型的规则:
         Ⅰ)unicast,该规则规定返回在规则引用的路由表中找到的路由。
         Ⅱ)blackhole,这条规则规定要悄悄丢弃数据包。
         Ⅲ)unreachable,该规则规定生成“网络不可达”错误。
         Ⅳ)prohibit,该规则规定产生“在行政上禁止通信”错误。
         Ⅴ)nat,该规则规定将ip数据包的源地址转换为其他值。
         1)ip rule add,增加规则。
         2)ip rule delete,删除规则。
         typeTYPE(default),这个规则的类型
         fromPREFIX,选择要匹配的源前缀
         toPREFIX,选择要匹配的目标前缀
         iifNAME,选择要匹配的传入设备。如果接口是回送的,则该规则只匹配来自此主机的数据包。这意味着您可以为转发包和本地数据包创建单独的路由表,从而完全隔离它们。
         tosTOS,dsfieldTOS,选择要匹配的TOS值。
         fwmarkMARK,选择要匹配的fwmark值。
         priorityPREFERENCE,这条规则的优先级。每个规则都应该有一个显式设置的唯一优先级值。选项、偏好和顺序是优先级的同义词。
         tableTABLEID,如果规则选择器匹配,则查找路由表标识符。还可以使用查找而不是表。
         realmsFROM/TO,规则匹配和路由表查找成功时要选择的区域。只有当路由没有选择任何领域时,才使用要使用的领域。
         natADDRESS,要翻译的IP地址块的基(用于源地址)。该地址可以是NAT地址块的开始(由NAT路由选择),也可以是本地主机地址(甚至为零)。在最后一种情况下,路由器不会翻译数据包,而是将它们伪装成这个地址。使用map-to而不是nat意味着同样的事情。
         3)ip rule flush,刷新规则,还转储所有已删除的规则。
         没有参数。
         4)ip rule show,显示规则
         没有参数

    9、ip maddress---多播地址管理
         1)ip maddress show,显示多播地址
         devNAME(default),设备名字
         2)ip maddress add,增加多播地址
         3)ip maddress delete,删除多播地址
         这些命令附加/分离一个静态链路层多播地址,以便在接口上侦听。请注意,不可能静态地加入协议多播组。此命令仅管理链接层地址
         addressLLADDRESS(default),链路层多播地址。
         devNAME,加入/删除多播地址的设备

    10、ip mroute---多播路由缓存管理
         mroute对象是由用户级mrouting守护进程创建的多播路由缓存条目。由于组播路由引擎当前接口的局限性,无法对多播路由对象进行管理更改,因此只能显示对象
         ip mroute show,列出mroute缓存项
         toPREFIX(default),选择要列出的目标多播地址的前缀。
         iifNAME,接收多播数据包的接口。
         fromPREFIX,选择多播路由的IP源地址的前缀

    11、ip tunnel---通道配置
         tunnel对象是隧道,它将数据包封装在IP包中,然后通过IP基础结构发送。加密(或外部)地址族由“-f“选项指定。默认的是ipv4。
         1)ip tunnel add,增加一个新隧道
         2)ip tunnel change,修改一个已经存在的隧道
         3)ip tunnel delete,删除隧道
         nameNAME(default),隧道设备名字。
         modeMODE,设置隧道模式。可用的模式取决于封装地址系列。IPv 4封装可用的模式:ipip、SIT、isatap和grep;IPv6封装的模式:ip6ip6、ipip6和any。
         remoteADDRESS,设置隧道的远程端点
         localADDRESS,设置隧道数据包的固定本地地址。它必须是此主机的另一个接口上的地址。
         ttlN,在隧道化的数据包上设置固定的TTL N。N是介于1-255范围内的一个数字.0是一个特殊值,意味着数据包继承TTL值。IPv 4隧道的默认值是:Inherence。IPv6隧道的默认值是:64。
         tosT,dsfieldT,tclassT,在隧道数据包上设置固定的TOS(或IPv 6中的流量类)T。默认值是:inherit。
         devNAME,将隧道绑定到设备名称,以便隧道数据包只能通过此设备路由,并且在到达端点的路由发生更改时无法逃逸到另一个设备。
         nopmtudisc,禁用此隧道上的路径MTU发现。默认情况下启用它。请注意,固定的ttl与此选项不兼容:使用固定的ttl进行隧道操作总是会使pmtu发现。
         keyK,ikey K,okey K,(只有GRE隧道)使用键控GRE与密钥K,K要么是一个数字或一个类似IP地址的虚线四边形。key参数设置在两个方向上使用的键。ikey和okey参数为输入和输出设置不同的键。
         csum, icsum, ocsum,(只有GRE隧道)生成/要求隧道数据包的校验和。ocsum标志计算传出数据包的校验和。icsum标志要求所有输入数据包都具有正确的校验和。csum标志等效于组合icsum ocsum。
         seq, iseq, oseq,(只有GRE隧道)序列化数据包。oseq标志允许对传出数据包进行排序。iseq标志要求对所有输入数据包进行序列化。seq标志等效于iseq oseq组合。这不是工作。不要用它
         dscpinherit,(只有IPv 6隧道)在内部和外部报头之间继承DS字段
         encaplimELIM,设置固定的封装限制。缺省值为4
         flowlabelFLOWLABEL,(只有IPv 6隧道)设置固定的流标签。
         4)ip tunnel prl,潜在路由器列表(只有ISATAP)
         devNAME,
         prl-defaultADDR,
         prl-nodefaultADDR,
         prl-deleteADDR,
         添加或删除addr作为潜在的路由器或默认路由器
         5)ip tunnel show,列出隧道
         没有参数

    -------------------------

    iptables
          iptables指令用来设置Linux内核的ip过滤规则以及管理nat功能。iptables用于在Linux内核中设置、维护和检查IPv4数据包的过滤规则表。可以定义几个不同的表。每个表包含许多内置链,也可能包含用户定义的链。每个链都是一个规则列表,可以匹配一组数据包。每条规则都指定如何处理匹配的数据包。这被称为“目标”,它可能是跳转到同一表中的用户定义链。
         此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

    1、语法
         iptables [-t table]  {-A|-D}  chain  rule-specification
         iptables [-t table]  -I  chain [rulenum]  rule-specification
         iptables [-t table]  -R  chain  rulenum rule-specification
         iptables [-t table]  -D  chain rulenum
         iptables [-t table]  -S  [chain [rulenum]]
         iptables [-t table]  {-F|-L|-Z}  [chain [rulenum]]  [options...]
         iptables [-t table]  -N  chain
         iptables [-t table]  -X  [chain]
         iptables [-t table]  -P  chain target
         iptables [-t table]  -E  old-chain-name  new-chain-name rule-specification = [matches...] [target]
         match = -m matchname [per-match-options]  target = -j targetname [per-target-options]
         目前Linux内核支持3个相互独立的表:filter,过滤ip数据包;nat,配置nat功能;mangle,修改ip数据包。
         filter是默认表,包含INPUT(发送给本机) 、OUTPUT(本机向外发送)、FORWARD(被路由出去)三个链。
         nat表包含PREROUTING(修改刚收到的数据包) 、OUTPUT(在路由之前处理本机产生的数据包) 、POSTROUTING(修改将要发送的数据包)三个链
         mangle表包含PREROUTING(路由之前,修改收到的包) 、OUTPUT(路由之前,修改本机产生的包) 、INPUT(修改发送到本机的包) 、FORWARD (修改路由之后的包) 、POSTROUTING(修改将被本机发送的包)五个链。
         Linux系统中的内置目标包括:ACCEPT(允许数据包通过)DROP(丢弃数据包) QUEUE(传递包到用户空间)RETURN(停止向后检测其他的规则,返回之前的条用规则处)

    2、选项列表
         选项可以按组来区分
         -t table
              指定要管理的表
         -A | --append chain rule-specification
              追加记录
         -D | --delete chain rule-specification
              删除记录
         -I | --insert chain [rulenum] rule-specification
              插入记录
         -R | --replace chain [rulenum] rule-specification
              替换记录
         -L | --list [chain]
              列出记录
         -S | --list-rules [chain]
              列出已选择链的所有规则。如果没有选择任何链,则所有链都打印
         -F | --flush [chain]
              删除指定的记录
         -Z | --zero [chain [rulenum]]
              将数据计数和字节计数清零
         -N | --new-chain chain
              用户自定义新链
         -X | --delete-chain [chain]
              删除用户自定义链
         -P | --policy chaintarget
              为指定的链设置策略
         -E | --rename-chain old new
              重命名链
         -h
              显示帮助信息
         参数
         [!] –p | --protocol protocol
              指定协议类型tcp、udp、icmp、all,协议前加!标识否定
         [!] –s |  --sourceaddress[/mask][,…
              源地址
         [!] –d 
         --destinationaddress[/mask][,…
              目标
         -j | --jump
              指定跳转的目标
         -g | --goto chain
              这指定应在用户指定的链中继续处理。与“--jump”选项不同,返回将不再在此链中继续处理,而是在通过“--jump”调用我们的链中继续处理。
         [!] –i | --in-interface name
              接收数据包的接口名称(仅用于输入、转发和PREROUTING链的数据包)。当“!”参数在接口名称之前使用,意义被倒置。如果接口名以“+”结尾,则以此名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。
         -o | --out-interfacename
              指定数据包离开的网络接口
         [!] –f | --fragment
              这意味着该规则仅指分段数据包的第二段和更多的片段。
         -c | --set-counters packets bytes
              这使管理员能够初始化规则的数据包和字节计数器(在插入、追加、替换操作期间)。
         其他选项
         -v | --verbose
              冗长的输出,该选项使List命令显示接口名称、规则选项(如果有的话)和TOS掩码。还列出了数据包计数器和字节计数器
         -n | --numeric
              数字输出IP地址和端口号将以数字格式打印。默认情况下,程序将尝试将它们显示为主机名、网络名称或服务(只要适用)。
         -x | --exact
              扩大数字。显示数据包和字节计数器的确切值,而不是只显示K‘s(1000倍)M’s(1000 K倍数)或G‘s(1000 m倍数)中的四舍五入数。此选项仅与-L命令相关。
         --line-numbers
              当列出规则时,将行号添加到每条规则的开头,对应于该规则在链中的位置。
         --modprobe=command
              在向链中添加或插入规则时,使用命令加载任何必要的模块(目标、匹配扩展等)

    3、匹配扩展
         iptable可以使用扩展的数据包匹配模块。它们以两种方式加载:隐式地,当指定“-p”或“—protocol”时,或者使用“-m”或“—match”选项,后面跟着匹配的模块名称;之后,根据特定模块的不同,可以使用各种额外的命令行选项。可以在一行中指定多个扩展匹配模块,并且可以在指定模块后使用“-h“或“--help“选项来接收特定于该模块的帮助。
         1)addrtype
         此模块根据数据包的地址类型匹配数据包。地址类型在内核网络堆栈中使用,并将地址分类为不同的组。该组的确切定义取决于特定的第三层协议。地址类型可以是以下的几种:
         UNSPEC,未指明的地址,例如,0.0.0.0。
         UNICAST,单播地址。
         LOCAL,本地地址。
         BROADCAST,广播地址。
         ANYCAST,选播包。
         MULTICAST,多播地址。
         BLACKHOLE,黑洞地址。
         UNREACHABLE,不可达到的地址。
         PROHIBIT,被禁止的地址。
         THROW,FIXME。
         NAT,FIXME。
         XRESOLVE,
         [!] --src-type type,如果源地址为给定类型,则匹配。
         [!] --dst-type type,如果目标地址是给定类型的,则匹配。
         --limit-iface-in,地址类型检查可以限制在数据包即将进入的接口上。此选项仅在PREROUTING、INPUT和FORWARD链中有效。它不能用“--limit-iface-out “选项来指定。
         --limit-iface-out,地址类型检查可以限制在包将要输出的接口上。此选项仅在POSTROUTING、OUTPUT和FORWARD链中有效。它不能用“--limit-iface-in“选项指定。
         2)ah
         此模块与IPSec数据包的身份验证头中的Spis匹配。
         [!] --ahspi spi[:spi]
         3)cluster
         允许您部署网关和后端负载共享集群,而不需要负载平衡器。此匹配要求所有节点都看到相同的数据包。因此,集群匹配决定该节点是否必须处理给定以下选项的数据包。
         --cluster-total-nodesnum,设置集群中的总节点数。
         [!] --cluster-local-nodenum,设置本地节点编号ID。
         [!] --cluster-local-nodemaskmask,设置本地节点编号ID掩码。您可以使用此选项而不是”--cluster-local-node“。
         --cluster-hash-seedvalue,设置Jenkins散列的种子值。
         iptables  -A PREROUTING  -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node  1  --cluster-hash-seed  0xdeadbeef  -j  MARK  --set-mark 0xffff
         iptables  -A PREROUTING  -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node  1  --cluster-hash-seed  0xdeadbeef  -j  MARK  --set-mark 0xffff
         iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP
         iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP
         下面的命令使所有节点都看到相同的数据包
         ip maddr add 01:00:5e:00:01:01 dev eth1
         ip maddr add 01:00:5e:00:01:02 dev eth2
         arptables   -A  OUTPUT   -o   eth1  --h-length  6  -j  mangle  --mangle-mac-s 01:00:5e:00:01:01
         arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
         arptables   -A  OUTPUT   -o   eth2  --h-length  6  -j  mangle  --mangle-mac-s 01:00:5e:00:01:02
         arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
         4)comment
         允许向任何规则添加注释(最多256个字符)。
         --commentcomment
    iptables -A INPUT -s 192.168.0.0/16 -m  comment  --comment  "A  privatized  IP block"
         5)connbytes
         主要用途是检测长时间下载,并在流量控制中使用较低优先级的频带来标记它们。每个连接传输的字节也可以通过“conntrack -L”查看,并通过ctnetlink访问。
         [!] --connbytesfrom[:to],将大于FROM,小于TO的连接中的数据包匹配,“!”用于匹配不在此范围内的数据包。
         --connbytes-dir {original|reply|both},要考虑哪些数据包
         --connbytes-mode {packets|bytes|avgpkt},是否检查数据包的数量、传输的字节数或到目前为止收到的所有数据包的平均大小(以字节为单位)。请注意,当“both”与“avgpkt”一起使用时,而且数据(主要是)只朝一个方向(例如HTTP)进行,平均数据包大小将约为实际数据包的一半。
    iptables   ..  -m  connbytes  --connbytes 10000:100000  --connbytes-dir  both --connbytes-mode bytes
         6)connlimit
         允许您限制每个客户端IP地址(或客户地址块)到服务器的并行连接数。
         [!] --connlimit-aboven,如果现有连接的数目大于n,则匹配
         --connlimit-maskprefix_length,使用前缀长度对主机进行分组。对于IPv 4,这必须是介于(包括)0和32之间的数字。对于IPv 6,在0到128之间。
         #每个客户端主机允许2个telnet连接
         iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2  -j REJECT
         iptables  -A  INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
         #将并行HTTP请求的数量限制在每C类网络16次(24位网络掩码)
         iptables  -p  tcp  --syn  --dport  80  -m   connlimit  --connlimit-above   16 --connlimit-mask 24 -j REJECT
         #将链路本地网络的并行HTTP请求限制为16次
         (ipv6)   ip6tables  -p  tcp  --syn  --dport  80  -s fe80::/64  -m  connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT
         7)connmark
         此模块匹配与连接关联的netfilter标记字段(可以使用下面的CONNMARK目标进行设置)。
         [!] --markvalue[/mask],将连接中的数据包与给定的标记值相匹配(如果指定了掩码,则在比较之前用标记进行逻辑分析)
         8)conntrack
         此模块与连接跟踪结合时,允许访问此数据包/连接的连接跟踪状态。
         [!] --ctstatestatelist,Statelist是要匹配的连接状态的逗号分隔列表。下面列出了可能的状态。
         [!] --ctprotol4proto,第4层协议匹配(按号码或名称)
         [!] --ctorigsrcaddress[/mask]
         [!] --ctorigdstaddress[/mask]
         [!] --ctreplsrcaddress[/mask]
         [!] --ctrepldstaddress[/mask],与original/reply、source/destination地址匹配。
         [!] --ctorigsrcportport
         [!] --ctorigdstportport
         [!] --ctreplsrcportport
         [!] --ctrepldstportport,匹配original/reply、source/destination端口(TCP/UDP/等)或GRE键
         [!] --ctstatusstatelis,Statuslist是要匹配的连接状态的逗号分隔列表。下面列出了可能的状态
         [!] --ctexpiretime[:time],将剩余生存期(以秒为单位)与给定值或范围(包括)进行匹配。
         --ctdir {ORIGINAL|REPLY},匹配按指定方向流动的数据包。如果根本没有指定此标志,则匹配两个方向的数据包。
         ctstate的有效值
         INVALID,意味着数据包与已知的连接没有关联。
         NEW,意味着该数据包已启动一个新连接,或与未在两个方向上看到数据包的连接相关联。
         ESTABLISHED,意味着该数据包与看到两个方向的数据包的连接相关联。
         RELATED,意味着数据包正在启动新连接,但与现有连接相关联,例如FTP数据传输或ICMP错误。
         SNAT,虚拟状态,如果原始源地址与回复目的地不同,则进行匹配。
         DNAT,虚拟状态,如果原始目的地与应答源不同,则进行匹配。
         ctstatus的有效值
         NONE,不是下列任何一项。
         EXPECTED,这是一个预期的连接。
         SEEN_REPLY,ConnTrack在两个方向都看到了数据包。
         ASSURED,连接项不应提前过期。
         CONFIRMED,确认连接:原始数据包已离开框。
         9)dccp
         [!] --source-port,--sportport[:port]
         [!] --destination-port,--dportport[:port]
         [!] --dccp-typesmask,当DCCP数据包类型为“掩码”之一时匹配。“掩码”是以逗号分隔的数据包类型列表。类型可以是:REQUEST、RESPONSE、DATA、ACK、DATAACK、CLOSEREQ、CLOSE、RESET、SYNC、SYNCACK、INVALID。
         [!] --dccp-optionnumber,匹配如果设置DCP选项 
         10)dscp
         此模块与IP报头中TOS字段中的6位DSCP字段匹配。Dscp已经取代了IETF中的TOS。
         [!] --dscpvalue,匹配数值(十进制或十六进制)值[0-63]
         [!] --dscp-classclass,匹配DiffServ类。此值可能是BE、EF、AFxx或CSX类中的任何一个。然后,它将被转换为其相应的数值。
         11)ecn
         这允许您匹配IPv 4和TCP报头的ECN位。ECN是RFC3168中指定的显式拥塞通知机制。
         [!] --ecn-tcp-cwr,如果设置了TCP ECN CWR(拥塞窗口接收)位,则匹配。
         [!] --ecn-tcp-ece,如果设置了TCP ECN ECE(ECN Echo)位,则匹配。
         [!] --ecn-ip-ect num,这与特定的IPv 4 ECT(ECN能力传输)相匹配。你必须在‘0’和‘3’之间指定一个数字。
         12)esp
         此模块与ipsec数据包的esp报头中的spis匹配。
         [!] --espspispi[:spi]
         13)hashlimit
         哈希限制使用散列桶来表示一组连接的速率限制匹配(如极限匹配),使用单个iptables规则。分组可以完成perhostgroup(源和/或目标地址)和/或每个端口。它使您能够表达“每组每个时间量子N个数据包”:
         源主机上的匹配:192.168.0.0/16期间每台主机每秒1000个数据包。
         源Prot匹配:每项服务每秒100包(192.168.1.1)。
         子网的匹配:10.0.0.0/8中每个/28子网每分钟10000包。
         --hashlimit-uptoamount[/second|/minute|/hour|/day],如果速率低于或等于amount/quantum,则匹配。它被指定为一个数字,带有可选的时间量子后缀;默认值是3/小时。
         --hashlimit-aboveamount[/second|/minute|/hour|/day],如果速率大于amount/quantum,则匹配
         --hashlimit-burstamount,要匹配的数据包的最大初始数量:当未达到上述指定的限制时,该数目将被重新充电一次,最多可达到此数目;默认值为5。
         --hashlimit-mode {srcip|srcport|dstip|dstport},...,要考虑的以逗号分隔的对象列表。如果给出了“--hash-limit-mode“选项,hashlimit就像limit一样,但是在进行哈希内务管理时会花费很大的代价。
         --hashlimit-srcmaskprefix,当使用“--hashlimit-mode“时,所遇到的所有源地址都将根据给定的前缀长度进行分组,因此创建的子网将受到哈希限制。前缀必须介于(包括)0和32之间。    

    -------------------------

    16)NFQUEUE
         此目标是QUEUE目标的扩展。与QUEUE相反,它允许您将数据包放入任何特定队列中,该队列由其16位队列号标识。它只能与内核版本2.6.14或更高版本一起使用,因为它需要nfnetlink_Queue内核支持。队列平衡选项在Linux2.6.31中添加,队列旁路在2.6.39中添加。
         --queue-numvalue,这指定要使用的队列号。有效队列号为0至65535。默认值为0。
         --queue-balancevalue:value,这指定要使用的队列范围。然后在给定的队列中平衡数据包。
         --queue-bypass,默认情况下,如果在NFQUEUE上没有用户空间程序侦听,那么所有要排队的数据包都会被丢弃。当使用此选项时,将悄悄绕过NFQUEUE规则。包将转到下一个规则。
         17)NOTRACK
         此目标禁用与该规则匹配的所有数据包的连接跟踪,只能在raw表中使用。
         18)RATEEST
         RATEEST目标收集统计数据,执行速率估计计算,并将结果保存起来,以便使用最优匹配进行以后的评估。
         --rateest-namename,将匹配的数据包计数到按名称引用的池中,这是可以自由选择的。
         --rateest-intervalamount{s|ms|us},速率测量间隔,以秒、毫秒或微秒为单位。
         --rateest-ewmalogvalue,速率测量平均时间常数。
         19)REDIRECT
         此目标仅在NAT表、PREROUTING和输出链以及仅从这些链调用的用户定义链中有效。它将数据包重定向到机器本身,方法是将目标IP更改为传入接口的主地址(本地生成的数据包映射到127.0.0.1地址)。
         --to-ports port[-port],这将指定要使用的目的端口或端口范围:否则,目标端口将永远不会更改。只有配合选项“-p tcp”和“-p udp”才有用。
         --random,如果使用选项“--random”,则端口映射将是随机的(内核>=2.6.22)
         20)REJECT
         这用于响应匹配的数据包发送错误数据包:否则,它等同于丢弃,因此它是一个终止目标,结束规则遍历。此目标仅在输入、前向和输出链以及用户定义的仅从这些链调用的链中有效。以下选项控制返回的错误数据包的性质:
         --reject-withtype,type可以是icmp-net-unreachable, icmp-host-unreachabl,icmp-port-unreachable,icmp-proto-unreachable,icmp-net-prohibited,icmp-host-prohibited,icmp-admin-prohibited
         21)SAME
         类似于SNAT/DNAT,取决于链:它接受一系列地址“--to 1.2.3.4-1.2.3.7”。为每个连接提供相同的源/目标地址。
         --toipaddr[-ipaddr],要将源映射到的地址。可以为多个范围指定不止一次。
         --nodst,在选择新的源-ip时,不要在计算中使用目标-ip。
         --random,端口映射将强制随机化,以避免基于端口预测的攻击(内核>=2.6.21)。
         22)SECMARK
         这用于设置与数据包关联的安全标记值,以供安全子系统(如SELinux)使用。它只在残缺表中有效。标记宽32位。
         --selctxsecurity_context
         23)SET
         此模块从ip集中添加和/或删除可由ipset(8)定义的项。
         --add-setsetnameflag[,flag...],将数据包的地址/端口添加到集合中
         --del-setsetnameflag[,flag...],从集合中删除数据包的地址/端口
         24)SNAT
         此目标仅在NAT表中的POSTROUTING链中有效。它指定应该修改数据包的源地址(并且这个连接中的所有未来数据包也将被破坏),并且应该停止检查规则。它需要一种选择
         --to-sourceipaddr[-ipaddr][:port[-port]],它可以指定单个新的源IP地址、包含的IP地址范围以及可选的端口范围(只有在规则还指定-p TCP或-p UDP时才有效)。     如果未指定端口范围,则512以下的源端口将映射到512以下的其他端口:512和1023之间的端口将映射到1024以下的端口,而其他端口将映射到1024或以上端口。如有可能,不会更改端口。
         --random,如果使用了选项“--random”,则端口映射将被随机化(内核>=2.6.21)。
         --persistent,为每个连接提供相同的源/目标地址。这取代了同一个目标。对持久映射的支持可从2.6.29-Rc2中获得
         25)TCPMMS
         此目标允许更改TCP SYN数据包的MSS值,以控制该连接的最大大小(通常将其限制为输出接口的MTU减去40(ipv4)或者减去60(ipv6)。当然,它只能与-p TCP一起使用。它仅在mangle表中有效。
         该目标用于克服阻碍“ICMP碎片需要”或“ICMPv 6数据包太大”数据包的犯罪行为。这个问题的症状是,Linux防火墙/路由器的所有功能都很好,但是它背后的机器永远不能交换大数据包:Web浏览器连接,然后挂起没有收到的数据;小邮件工作正常,但大型电子邮件挂着;SSH工作正常,但scp在初次握手后挂起。
         解决办法:激活此选项并将规则添加到防火墙配置中,如
    iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
         --set-mssvalue,显式地将MSS选项设置为指定的值。如果数据包的MSS已经低于值,则不会增加(从Linux2.6.25开始),以避免主机依赖适当的MSS出现更多问题
         --clamp-mss-to-pmtu,自动将MSS值夹到(IPv4的PATH_MTU-40;IPv 6的PATH_MTU-60)。
         26)TCPOPTSTRIP
         此目标将从TCP数据包中删除TCP选项。(它实际上将以无操作代替。)因此,您需要添加“-p tcp”参数。
         --strip-optionsoption[,option...],去掉给定的选项。这些选项可以由TCP选项号或符号名称指定。可以通过使用“-j TCPOPTSTRIP -h”调用iptable来获得可识别选项的列表。
         27)TOS
         此模块在IPv 4报头中设置服务类型字段(包括“优先级”位)或在IPv 6报头中设置优先级字段。注意,TOS与DSCP和ECN共享相同的位。tos目标仅在mangle表中有效。
         --set-tosvalue[/mask],将掩码和XOR值给出的位归零到TOS/Priority字段中。如果省略掩码,则假定为0 xff。
         --set-tossymbol,在为IPv4使用TOS目标时,可以指定一个符号名。它暗示了0xFF的掩码。可以通过使用“-j TOS -h”调用iptables来获得已识别的TOS名称的列表。
         --and-tosbits,bits和TOS执行与操作。(助记符用于“--set-tos 0/invbits”,其中inbit是位的二进制否定。)
         --or-tosbits,bits和TOS执行或操作。
         --xor-tosbits,bits和TOS执行异或操作。
         28)TPROXY
         此目标仅在mangle表、PREROUTING链和用户定义链中有效,这些链仅从该链调用。它将数据包重定向到本地套接字,而不以任何方式更改数据包报头。它还可以更改标记值,然后在高级路由规则中使用。它有三个选项:
         --on-portport,这指定要使用的目标端口。这是必需的选项,0表示新的目标端口与原始端口相同。这只有在规则还指定“-p tcp“或”-p udp“时才有效。
         --on-ipaddress,这指定要使用的目标地址。默认情况下,该地址是传入接口的ip地址。这只有在规则还指定“-p tcp“或”-p udp“时才有效。
         --tproxy-markvalue[/mask],用给定的值/掩码标记数据包。这里的fwmark值集可以被高级路由使用。(透明代理工作所必需的:否则这些数据包将被转发,这可能不是您想要的。)
         29)TRACE
         此目标标记Packes,以便内核在遍历表、链、规则时记录与数据包匹配的每条规则。(日志记录需要ipt_log或ip6t_log模块)。数据包以字符串前缀记录:“TRACE:tablename:chainname:type:ruenum”,其中type可以是普通规则的“rule”,用户定义的链末尾的隐式规则可以是“return”,内置链的策略可以是“policy”。
         只能在raw表中使用。
         30)TTL
         这用于修改IPv 4 TTL头字段。TTL字段确定数据包可以遍历多少跳(路由器),直到超过生存时间。设置或递增ttl字段可能非常危险,因此应不惜任何代价加以避免。不要在离开本地网络的数据包上设置或增加值!
         --ttl-setvalue,设置TTL值为value。
         --ttl-decvalue,减少TTL的值value次。
         --ttl-incvalue,增加TTL的值value次。
         31)ULOG
         此目标提供匹配数据包的用户空间日志记录。当为规则设置此目标时,Linux内核将通过NetLink套接字对此数据包进行多播。然后,一个或多个用户空间进程可以订阅各种多播组并接收分组。与日志一样,这是一个“不终止的目标”,即在下一个规则中继续进行规则遍历。
         --ulog-nlgroupnlgroup,这指定了将数据包发送到的netlink组(1-32)。默认值为1
         --ulog-prefixprefix,前缀为指定前缀的日志消息;长度可达32个字符,用于区分日志中的消息。
         --ulog-cprangesize,要复制到用户空间的字节数。值为0总是复制整个数据包,而不考虑其大小。默认值为0
         --ulog-qthresholdsize,内核中要排队的数据包数。例如,将此值设置为10,在内核内累加10个数据包,并将它们作为一个NetLink多部分消息传输到用户空间。默认值为1(用于向后兼容性)

    5、实例
    1)显示filter表的记录
         [root@localhost ~]# iptables -t filter –L                //显示指定表的记录
         Chain INPUT (policy ACCEPT)
         target     prot opt source               destination        
         ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
         ACCEPT     icmp --  anywhere             anywhere                  
         …
         Chain FORWARD (policy ACCEPT
         target     prot opt source               destination        
         ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
         ACCEPT     icmp -- anywhere            anywhere            
         …
         Chain OUTPUT (policy ACCEPT)
         target     prot opt source               destination
    2)禁止端口135的tcp数据包
         [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 135 -j DROP          //添加记录,忽略135端口的tcp数据包
         [root@localhost ~]# iptables –L         //查看表,已经加入规则
         Chain INPUT (policy ACCEPT)
         target     prot opt source               destination        
         ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
         DROP       tcp  --  anywhere             anywhere            tcp dpt:epmap
    3)禁止目标地址访问本机
         [root@localhost ~]# iptables -A INPUT -s 192.168.1.110 -j DROP                           //禁止110地址访问本机
         [root@localhost ~]# iptables -L |grep DROP                                                  //查看filter表,已经添加记录
         DROP       tcp  --  anywhere             anywhere            tcp dpt:epmap
         DROP       all  --  192.168.1.110        anywhere

    -------------------------

    accept
          accept指令用来设置允许向目标打印机发送打印任务。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora。

    1、语法
          cupsaccept  [ -E ]  [ -U username ]  [ -h hostname[:port] ]  destination(s)

    2、选项列表
          -E
                强制加密
          -U
                连接打印机的时候,发送用户名
          -h
                选择目标打印机ip和端口

    3、实例
          允许向目标打印机发送打印任务
          [root@localhost /]# accept printer01

        

    reject
          reject指令用来设置拒绝向目标打印机发送打印任务。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
          cupsreject  [ -E ]  [ -U username ]  [ -h hostname[:port] ]  [ -r reason ]  destination(s)

    2、选项列表
          -E
                强制加密
          -U
                连接打印机的时候,发送用户名
          -h
                选择目标打印机ip和端口
          -r
                设置拒绝的原因

    3、实例
          拒绝向目标打印机发送打印任务
          [root@localhost /]# reject printer01              //拒绝发送打印请求
          You have new mail in /var/spool/mail/root
          [root@localhost /]# lpr /weijie/5.c               //打印文件,可以看到结果失败了
          lpr: Destination "printer01" is not accepting jobs.

    -------------------------

    lpc
            lpc指令用来控制打印机,它提供了一个命令行,用户可以输出命令来控制打印机。如果命令行上没有指定命令,lpc将从标准输入中显示提示符并接受命令。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
            lpc  [ command  [ parameter(s) ] ]

    2、命令列表
            exit | quit
                    退出打印机命令行
            ? | help
                    显示帮助
            status
                    显示打印机状态

    3、实例
    进入lpc命令行
            [root@localhost /]# lpc               //进入命令行
            lpc> help                            //显示帮助
            命令可能是缩写。命令是:
            exit    help    quit    status  ?
            lpc> ?                               //显示帮助
            命令可能是缩写。命令是:
            exit    help    quit    status  ?
            lpc> status                        //显示打印机状态
            printer01:
                打印机在设备 'ipp' 上,速度 -1
                队列已停用
                打印已启用
                1 个条目
                监控程序已存在
            lpc> exit                          //退出
            You have new mail in /var/spool/mail/root
            [root@localhost /]#

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    lpr
            lpr指令用来打印文件,如果没有指定文件名,那么从标准输入读取内容。CUPS提供了许多设置默认目标的方法。首先查询“LPDEST”和“PRINTER”环境变量。如果没有设置,则使用lpoptions(1)命令的当前默认集,然后使用lpadmin(8)命令进行默认设置。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
            lpr  [  -E  ]  [ -H server[:port] ]  [ -U username ]  [ -P destination[/instance] ]  
            [ -# num-copies [ -h ] [ -l ] [ -m ] [ -o option[=value] ] [ -p]  [ -q ]  [ -r  ]  [  -C/J/T title ]  [ file(s) ]

    2、命令列表
            -E
                    使用加密模式
            -H
                    指定远程打印服务器
            -C | -J | -T “name”
                    设置打印任务名字
            -P destination[/instance]
                    指定打印机名字
            -U username
                    设置别名    
            -# copies
                    将要打印的副本数量从1份设置为100份。
            -h
                    关闭标语打印
            -l
                    指定文件已经被格式化,发送的时候不应该过滤
            -m
                    打印完成之后发送邮件
            -o option[=value]
                    设置job的选项
            -p
                    指定文件应该被格式化
            -q
                    等待打印
            -r
                    打印之后,文件被删除

    3、实例
            打印指定的文件
            [root@localhost /]# lpr -C P1 /weijie/4.c                 //打印文件,设置打印的名字
            [root@localhost /]# lpq                                      //查看打印队列
            printer01 已准备就绪,正在打印
            顺序    所有者   作业     文件                         总大小
            active  root    2       5.c                             1024 字节
            1st     root    3       P1                              1024 字节
            [root@localhost /]#  

    -------------------------

    lp
            lp指令用来打印文件,也可以修改存在的打印任务。使用该指令可以指定打印的页码、副本等。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
           lp  [ -E ]  [ -U username ]  [ -c ]  [ -d destination[/instance] ]  [ -h hostname[:port] ]  [ -m ]  [ -n num-copies ]
                    [ -o option[=value] ]  [ -q priority ]  [ -s ] [ -t title ]  [-H handling ]  [ -P page-list ]  [ -- ]  [ file(s) ]
            lp  [ -E ] [ -U username ] [ -c ] [ -h hostname[:port] ] [ -i job-id ] [ -n num-copies] [ -o option[=value] ]
                    [ -q priority ]  [ -t title ]  [ -H handling ]  [ -P page-list ]


    2、命令列表
            --
                    标记选项的结尾;使用它打印以(-)开头的文件。
            -E
                    使用加密模式
            -U username
                    设置用户名
            -c
                    向后提供兼容
            -d destination
                    目标打印机
            -h hostname[:port]
                    远程打印机
            -i job-id
                    指定要修改的打印任务
            -n
                    设置打印副本的次数1~100
            -m
                    打印完成之后发送邮件
            -o  "name=value [name=value ...]"
                    设置打印选项
            -q priority
                    设置打印级别1~100,100最大,默认50
            -s
                    静默模式
            -t “name”
                    设置打印任务名字
            -u username
                    以指定的名字提交作业。
            -H hh:mm
                    设置打印开始时间。可以是时间格式,也可以是hold,等待打印;immediate,立即打印;restart,重新启动打印任务;resume,挂载打印任务。

    3、实例
            打印指定的文件
            [root@localhost /]# lpq                 //查看当前打印队列
            printer01 已准备就绪,正在打印
            顺序    所有者   作业     文件                         总大小
            active  root    2       5.c                             1024 字节
            1st     root    3       P1                              1024 字节
            [root@localhost /]# lp -H 10:00 -q 100 /weijie/4.c              //打印文件,指定最高级别和时间
            请求 id 是 printer01-4(1 个文件)
            You have new mail in /var/spool/mail/root
            [root@localhost /]# lpq               //查看打印队列,可以看到刚才的任务是第一个要打印的
            printer01 已准备就绪,正在打印
            顺序    所有者   作业     文件                         总大小
            1st     root    4       4.c                             1024 字节
            active  root    2       5.c                             1024 字节
            2nd     root    3       P1                              1024 字节
            [root@localhost /]#  

    -------------------------

    lprm
            lprm指令用来删除当前打印队列上的任务,如果没有指定,那么就删除当前打印任务。您可以指定一个或多个职务ID编号来取消这些职务,或者使用选项”-”取消所有作业。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
            lprm  [ -E ]  [ -U username ]  [ -h server[:port] ]  [ -P destination[/instance]]  [ - ]  [ job ID(s) ]

    2、命令列表
            -E
                    使用加密模式
            -P
                    指定打印机
            -h
                    指定远程服务器
            -U
                    设置别名

    3、实例
            删除打印任务
            [root@localhost /]# lpq                 //查看当前打印队列
            printer01 已准备就绪,正在打印
            顺序    所有者   作业     文件                         总大小
            1st     root    4       4.c                             1024 字节
            active  root    2       5.c                             1024 字节
            2nd     root    3       P1                              1024 字节
            [root@localhost /]# lprm 3             //删除3号任务
            You have new mail in /var/spool/mail/root
            [root@localhost /]# lpq                //查看打印队列,3号任务已经删除
            printer01 已准备就绪,正在打印
            顺序    所有者   作业     文件                         总大小
            1st     root    4       4.c                             1024 字节
            active  root    2       5.c                             1024 字节
            [root@localhost /]#  

    -------------------------

    cancel
           cancel指令用来取消已经存在的打印任务。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
           cancel  [ -E ]  [ -U username ]  [ -a ]  [ -h hostname[:port] ]  [ -u username ]  [id ]  [ destination ]  [ destination-id ]

    2、命令列表
           -E
                  使用加密模式
           -a
                  取消所有打印任务
           -h
                  指定远程服务器
           -U
                  设置别名
           -u
                  取消被指定用户拥有的打印任务

    3、实例
    取消打印任务
           [root@localhost /]# lpq                   //查看打印队列
           printer01 已准备就绪,正在打印
           顺序    所有者   作业     文件                         总大小
           1st     root    4       4.c                             1024 字节
           active  root    2       5.c                             1024 字节
           [root@localhost /]# cancel 4            //取消4号任务
           You have new mail in /var/spool/mail/root
           [root@localhost /]# lpq                 //查看打印队列,4号任务已经取消
           printer01 已准备就绪,正在打印
           顺序    所有者   作业     文件                         总大小
           active  root    2       5.c                             1024 字节
           [root@localhost /]#  

    -------------------------

    lpq
           lpq指令用来显示当前打印队列的状态。如果命令行中没有指定打印机或类,则将显示默认目标上排队的作业。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
           lpq  [ -E ]  [ -U username ]  [ -h server[:port] ]  [ -P destination[/instance] ]  [ -a ]  [ -l ]  [ +interval ]

    2、命令列表
           -E
                  使用加密模式
           -a
                  显示所有打印机的任务
           -h
                  指定远程服务器
           -U
                  设置别名
           -P
                  设置目标打印机
           -l
                  以长格式汇报信息

    3、实例
    查看打印任务
           [root@localhost /]# lpq -l
           printer01 已准备就绪,正在打印
          
           root:active                            [作业 2 本地主机]
                   5.c                                     1024 字节
           You have new mail in /var/spool/mail/root
           [root@localhost /]#  

    -------------------------

    lpstat
           lpstat指令用来显示当前任务、打印机的状态。如果没有参数,那么就显示打印队列。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。

    1、语法
           lpstat  [选项]

    2、命令列表
           -E
                  使用加密模式
           -H
                  显示远程打印机的名字和端口
           -R
                  显示任务的顺序
           -U
                  设置别名
           -W
                  设置要显示哪个任务
           -a
                  显示允许打印的打印机队列
           -c
                  显示打印机类
           -d
                  显示默认打印机
           -h server[:port]
                  指定备用服务器
           -l
                  显示打印机、类或作业的长列表。
           -o
                  显示指定打印机的队列
           -p
                  显示指定打印机,无论打印机是否激活
           -r
                  显示CUPS是否在运行
           -s
                  显示状态总和
           -t
                  显示所有的状态。等价于"-r", "-d", "-c","-v", "-a", "-p","-o"一起使用
           -u [user(s)]
                  显示由指定用户排队的打印作业列表。如果未指定用户,则列出当前用户排队的作业。
           -v [printer(s)]
                  显示打印机及其连接的设备。如果没有指定打印机,则列出所有打印机。

    3、实例
    查看CUPS是否运行
           [root@localhost /]# lpstat -r
           调度程序正在运行
           You have new mail in /var/spool/mail/root
           [root@localhost /]#  

    -------------------------

    sysctl
            sysctl指令用来修改正在运行的内核参数,可以修改的参数都保存在/proc/sys/目录中,修改会立即生效。Linux中的sysctl支持需要Procfs。您可以使用sysctl来读取和写入sysctl数据。
            此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
    sysctl  [-n]  [-e]  variable ...
    sysctl  [-n]  [-e]  [-q]  -w  variable=value ...
    sysctl  [-n]  [-e]  [-q]  –p  <filename>
    sysctl  [-n]  [-e]  -a
    sysctl  [-n]  [-e]  -A

    2、选项列表
            -n
                    显示内核参数的值,不显示其名称
            -e
                    忽略错误
            -N
                    只显示名字
            -q
                    不在标准输出显示值
            -w
                    复制的时候需要
            -p
                    加载sysctl的设置情况
            -a | -A
                    显示所有内核参数的值和名字
            variable
                    读取的变量名,可以用“/”做分隔符
            variable=value
                    如果value包含由shell解析的引号或字符,则可能需要将该值括在双引号中。这需要使用-w参数。

    3、实例
    显示所有的内核参数
            [root@localhost ntop-4.0.1]# sysctl –a                  //显示所有的内核参数名字和值
            …
            sunrpc.transports = tcp 1048576
            sunrpc.transports = udp 32768
            sunrpc.transports = tcp-bc 1048576
            sunrpc.udp_slot_table_entries = 16
            sunrpc.tcp_slot_table_entries = 2
            sunrpc.tcp_max_slot_table_entries = 65536
            sunrpc.min_resvport = 665
            sunrpc.max_resvport = 1023
            sunrpc.tcp_fin_timeout = 15

    -------------------------

    iostat
          iostat指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态。iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载。iostat命令生成可用于更改系统配置的报告,以更好地平衡物理磁盘之间的输入/输出负载。
          iostat命令生成的第一个报告提供了自系统启动以来的统计数据,除非在省略该第一个报告时使用-y选项。每一份后续报告都涵盖自上次报告以来的时间。每次运行iostat命令时都会报告所有统计信息。报告由CPU标题行和CPU统计数据行后面的一行组成。在多处理器系统中,CPU统计数据作为所有处理器之间的平均值计算在系统范围内.设备标题行后面显示配置的每个设备的一行统计信息。当使用选项-n时,会显示NFS标题行,并为每个已挂载的网络文件系统显示一行统计信息。
          此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
          iostat  [选项]

    2、选项列表
          -c
                显示cpu情况
          -d
                显示设备利用率
          -h
                配合-n选项使用,让输出更加易读
          -j
                显示指定设备的名字、id、label
          -k
                以“kb/s”为单位显示,默认使用“块/s”为单位
          -m
                以Mb/s为单位
          -N
                显示注册设备的映射名字
          -n
                显示NFS状态
          -p
                显示块设备状态
          -t
                显示报告时间
          -x
                显示扩展信息
          -V
                显示版本信息,并且退出
          -y
                如果在给定间隔内显示多个记录,则自系统启动以来省略带有统计信息的第一次报告。
          -z
                告诉iostat,对于在示例期间没有活动的任何设备,都要省略输出。

    3、报告
          iostat命令生成三种类型的报告:CPU利用率报告、设备使用报告和网络文件系统报告。
    1)CPU利用率报告
          iostat命令生成的第一个报告是CPU利用率报告。对于多处理器系统,CPU值是所有处理器之间的全局平均值。报告的格式如下:
          %user,显示在用户级别(应用程序)执行时CPU利用率的百分比。
          %nice,以良好的优先级在用户级别执行时显示CPU利用率的百分比。
          %system,显示在系统级(内核)执行时出现的CPU利用率百分比。
          %iowait,显示CPU或CPU空闲的时间百分比,在此期间,系统有未执行的磁盘I/O请求。
          %steal,显示虚拟机管理程序为另一个虚拟处理器服务时,虚拟CPU或CPU在非自愿等待中花费的时间百分比。
          %idle,显示CPU或CPU空闲的时间百分比,并且系统没有未执行的磁盘I/O请求。
    2)设备使用报告
          iostat命令生成的第二个报告是设备使用报告。设备报告提供每个物理设备或分区的统计信息。可以在命令行上输入要显示统计信息的块设备。如果不使用-x选项,也可以在命令行中输入分区。如果没有输入设备或分区,则为系统使用的每个设备显示统计信息,并提供内核为其维护统计信息。如果在命令行上给出ALL关键字,则会显示系统定义的每个设备的统计信息,包括从未使用过的设备。报告可能会显示以下字段,这取决于所使用的标志
          Device:,该列给出了nth设备的设备(或分区)名称,它以devm-n的形式显示,内核为2.4,其中m是设备的主要数字,n是一个独特的数字。对于较新的内核,将显示/dev目录中列出的设备名称。
          tps,指示每秒发送给设备的传输次数。传输是对设备的I/O请求。多个逻辑请求可以组合成对设备的单个I/O请求。转移是不确定的大小。
          Blk_read/s,指示从设备读取的数据量,以每秒多个块表示。块等效于内核2.4及更高版本的扇区,因此其大小为512字节。对于较老的核,块的大小是不确定的。
          Blk_wrtn/s,指示写入设备的数据量,以每秒多个块表示。
          Blk_read,读入的总块数
          Blk_wrtn,写入的总块数
          kB_read/s,指示从设备读取的数据量,以每秒千字节表示。
          kB_wrtn/s,指示从设备写入的数据量,以每秒千字节表示。
          kB_read,读取的总量,kb
          kB_wrtn,写入的总量,kb
          MB_read/s,指示写入设备的数据量,以每秒兆字节表示。
          MB_wrtn/s,指示读取设备的数据量,以每秒兆字节表示。
          MB_read,读取的总量,Mb
          MB_wrtn,写入的总量,Mb
          rrqm/s,每秒合并到设备的读取请求数。
          wrqm/s,每秒合并到设备的写入请求数。
          r/s,每秒向设备发出的读取请求数。
          w/s,每秒向设备发出的写入请求数。
          rsec/s,每秒从设备读取的扇区数。
          wsec/s,每秒从设备写入的扇区数。
          rkB/s,每秒从设备读取的千字节数。
          wkB/s,每秒从设备写入的千字节数。
          rMB/s,每秒从设备读取的兆字节数。
          wMB/s,每秒从设备写入的兆节数。
          avgrq-sz,向设备发出的请求的平均大小(按扇区)
          avgqu-sz,向设备发出的请求的平均队列长度。
          await,向要服务的设备发出I/O请求的平均时间(毫秒)。这包括请求在队列中花费的时间和服务它们的时间。
          svctm,向设备发出的I/O请求的平均服务时间(毫秒)。警告!不要再相信这个领域了。此字段将在以后的sysstat版本中删除。
          %util,向设备发出I/O请求的CPU时间百分比(设备的带宽利用率)。当此值接近100%时,设备饱和发生。
    3)NFS报告
          NetworkFilessystem(NFS)报告为每个挂载的网络文件系统提供统计信息。报告显示了以下领域:
          Filesystem:,此列显示NFS服务器的主机名,后面是冒号,以及安装网络文件系统的目录名。
          rBlk_nor/s,指示应用程序通过Read(2)系统调用接口读取的块数。块的大小为512字节。
          wBlk_nor/s,指示应用程序通过写(2)系统调用接口编写的块数。块的大小为512字节。
          rBlk_dir/s,指示从使用O_DIRECT标志打开的文件中读取的块数。
          wBlk_dir/s,指示写入使用O_DIRECT标志打开的文件的块数。
          rBlk_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的块数。
          wBlk_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的块数。
          rkB_nor/s,指示应用程序通过Read(2)系统调用接口读取的千字节数。
          wkB_nor/s,指示应用程序通过write(2)系统调用接口编写的千字节数。
          rkB_dir/s,指示从使用O_DIRECT标志打开的文件中读取的千字节数。
          wkB_dir/s,指示写入到使用O_DIRECT标志打开的文件中的千字节数。
          rkB_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的千字节数。
          wkB_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的千字节数。
          rMB_nor/s,指示应用程序通过Read(2)系统调用接口读取的兆字节数。
          wMB_nor/s,指示应用程序通过write(2)系统调用接口编写的兆字节数。
          rMB_dir/s,指示从使用O_DIRECT标志打开的文件中读取的兆字节数。
          wMB_dir/s,指示写入到使用O_DIRECT标志打开的文件中的兆字节数。
          rMB_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的兆字节数。
          wMB_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的兆字节数。
          ops/s,指示每秒向文件系统发出的操作数。
          rops/s,指示每秒向文件系统发出的“读”操作数。
          wops/s,指示每秒向文件系统发出的“写”操作数。

    4、环境变量
          iostat命令考虑了以下环境变量:
          S_TIME_FORMAT,如果存在此变量,且其值为ISO,则在报表标题中打印日期时,将忽略当前区域设置。iostat命令将使用ISO 8601格式(YYYY-MM-DD)。选项-t显示的时间戳也将符合ISO 8601格式。

    5、例子代码
          iostat
          为所有CPU和设备显示自启动报告以来的单个历史记录
          iostat –d 2
          以两秒钟间隔显示连续设备报告
          iostat –d 2 6
          对所有设备每隔两秒钟播放六次报告
          iostat -x hda hdb 2 6
          以两秒钟的间隔显示六份扩展统计报告,用于设备HDA和HDB。
          iostat -p sda 2 6
          为设备SDA及其所有分区(sda 1等)以两秒钟间隔显示六个报告。

    6、实例
    1)显示cpu情况
          [root@localhost ntop-4.0.1]# iostat –c                  //只显示cpu状态
          Linux 2.6.32-431.el6.i686 (localhost.localdomain)     2018年10月10日     _i686_    (1 CPU)

          avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.17    0.00    0.11    0.04    0.00   99.68

          You have new mail in /var/spool/mail/root
          [root@localhost ntop-4.0.1]#
    2)显示nfs系统状态
          [root@localhost ntop-4.0.1]# iostat -n -h –t               //显示nfs状态,要求显示出时间
          Linux 2.6.32-431.el6.i686 (localhost.localdomain)     2018年10月10日     _i686_    (1 CPU)

          2018年10月10日 17时34分11秒
          Filesystem:              rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s     ops/s    rops/s    wops/s

          [root@localhost ntop-4.0.1]#

    -------------------------

    tload
           tload指令以字符的方式显示当前系统的平均负载情况。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
           tload  [-V]  [-s scale]  [ -d delay ]  [tty]

    2、选项列表
           -d
                  显示更新时间间隔
           -s
                  显示图表的垂直刻度单位
           -V
                  显示版本信息

    3、实例
    显示中断负载情况
           [root@localhost ntop-4.0.1]# tload -d 5 -s 1 /dev/pts/2             //显示指定中断的负载,每5s更新一次
           0.00, 0.00, 0.00                                                                            
           -------                                                                                      
           -------                                                                                      
           -------      

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk


    -------------------------

    dmesg
           dmesg指令用来打印和控制内核的输出信息,这些信息保存早ring buffer中。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
           dmesg  [-c]  [-r]  [-n level]  [-s bufsize]

    2、选项列表
           -c
                  打印之后清除缓冲区
           -r
                  打印raw信息
           -s
                  设置缓冲区大小,默认16392
           -n
                  指定记录信息的等级

    3、实例
    查看开机内核输出信息
           [root@localhost dev]# dmesg -c                    //查看信息,之后删除缓冲区内容
           。。。
           e1000: eth0 NIC Link is Down
           e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
           40:34:12.277699 timesync vgsvcTimeSyncWorker: Radical host time change: 40 928 048 000 000ns (HostNow=1 539 132 201 613 000 000 ns        HostLast=1 539 091 273 565 000 000 ns)
           40:34:22.278538 timesync vgsvcTimeSyncWorker: Radical guest time change: 40 932 566 440 000ns (GuestNow=1 539 132 211 613 841 000 ns GuestLast=1 539 091 279 047 401 000 ns fSetTimeLastLoop=true )
           hrtimer: interrupt took 2772539 ns

    -------------------------

    free
           free指令用来显示内存的使用情况,显示系统中可用和已使用的物理和交换内存的总量,以及内核使用的缓冲区。应该忽略共享内存列;它已经过时了。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
           free  [选项]

    2、选项列表
           -b
                  显示内存使用情况,单位byte
           -k
                  显示内存使用情况,单位KB
           -m
                  显示内存使用情况,单位MB
           -o
                  不显示缓冲区调节行
           -t
                  显示内存总和
           -s
                  按照指定的时间间隔显示内存使用情况
           -l
                  显示详细的低内存和高内存提高统计数据
           -V
                  显示命令的版本并退出

    3、实例
    1)以kb为单位显示
           [root@localhost ntop-4.0.1]# free –k                     //以kb为单位显示
                        total       used       free     shared    buffers     cached
           Mem:       1659316    1405992     253324          0     227856     741672
           -/+ buffers/cache:     436464    1222852
           Swap:      2940920          0    2940920
    2)以MB为单位显示
           [root@localhost ntop-4.0.1]# free -m –t                    //以MB为单位显示,同时显示总和
                        total       used       free     shared    buffers     cached
           Mem:          1620       1373        247          0        222        724
           -/+ buffers/cache:        426       1194
           Swap:         2871          0       2871
           Total:        4492       1373       3119

    做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ  密码:n7bk

    -------------------------

    top
            top指令用来显示Linux的进程信息,这是一个动态显示的过程。top提供运行系统的动态实时视图。它可以显示系统摘要信息以及当前由Linux内核管理的任务列表。所显示的系统摘要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动期间使配置持久。
           

    -------------------------

    uname
           uname指令用来显示计算机硬件以及操作系统的相关信息,例如计算机名、内核版本、硬件架构。
           此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。

    1、语法
           uname  [选项]

    2、选项列表
           -a | --all
                  显示所有的信息
           -s | --kernel-name
                  显示内核名字
           -n | --nodename
                  显示主机名
           -r | --kernel-release
                  显示内核发型版本号
           -v | --kernel-version
                  显示内核版本
           -m | --machine
                  显示计算机硬件架构名字
           -p | --processor
                  显示cpu类型
           -i | --hardware-platform
                  显示硬件平台
           -o | --operating-system
                  显示操作系统
           --help
                  显示帮助信息,并且退出
           --version
                  显示版本信息,并且退出

    3、实例
    显示系统所有信息
           [root@localhost ntop-4.0.1]# uname –a           //显示所有信息
           Linux localhost.localdomain 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux

    2018-10-18 21:17:27
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载