当前位置 博文首页 > 路途:《Linux命令行与shell脚本大全》笔记

    路途:《Linux命令行与shell脚本大全》笔记

    作者:[db:作者] 时间:2021-09-12 18:13

    初识Linux Shell

    什么是Linux

    Linux可划分为以下四部分:

    • Linux内核
    • GNU工具
    • 图形化桌面环境
    • 应用软件

    深入探究Linux内核

    内核主要负责以下四种功能:

    • 系统内存管理
    • 软件程序管理
    • 硬件设备管理
    • 文件系统管理
    系统内存管理

    不公管理服务器上的可用物理内存,还可以创建和不容易理虚拟内存。

    内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。

    内丰存储单元按组划分成很多块,这些块称作页面(page)。内核将每个存在 页面放在物理内存或交换空间。然后, 内核 会维护一个内存页面表。指明哪些页面位于物理内存内,哪些页面被换到硬盘上。

    内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制 到交换空间区域(称为换出,swapping out_)即使不宜可用内存。当程序要访问一个已被换出的内存页面时,内核必需从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程 要花时间,拖慢运行的进程。只要Linux系统在运行,为运行中的程序换出内存面对面的的过程 就不会停歇。

    软件程序管理

    Linux操作系统将运行中的程序称为进程。可分为前台运行和后台运行。内核控制着Linux系统管理运行在系统上的所有进程。

    内核创建了第一个进程(称为init进程)来启动系统上所有的其他进程。当内核启动时,它会将init进程加载到虚拟 内存中。内核 在启动任何其他进程时,都 会在虚拟 内存中给新进程分配 一块发你的区域 来存储该 进程用到的数据和代码。

    一些Linux发行版使用一个表来管理在系统开机时要自动 启动的进程。在Linux系统上,这个表通常位于专门文件/etc/inittab中。有的系统(如Ubuntu)则采用/etc/init.d目录将开机时启动或停止某个应用的脚本 放在之个目录 下。这些脚本通过/etc/rcX.d目录下的入口 启动。X代表运行级别。

    运行级别:

    ? 1.单用户

    ? 3.标准启动

    ? 5.X Windows

    ? 6.重启

    硬件设备管理

    内核的另一职责 是管理硬件设备。

    任何Linux系统需要 与之通信的设备,都需要在内核 代码 中加入其驱动程序 代码。程序 代码相当 于应用程序 和硬件设备的中间人,允许内核 与设备之间交换数据。在Linux内核 中有两种方法用于插入设备驱动代码:

    • 编译进内核 的设备驱动 代码
    • 可插入内核 的设备驱动 模块

    Linxu系统将硬件设备当成特殊 的文件,称为设备文件,设备文件有3种分类:

    • 字符型 设备谁的

      指处理数据时每次只能处理一个字符 的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建 的。

    • 块设备文件

      块设备是指处理数据时每次能处理大块数据 的设备,比如硬盘。

    • 网络设备文件

      是指采用数据包发送和接收数据 的设备,包括各种网卡和一个特殊 的回环设备。

    Linux为系统上的每个设备都创建 一种称为节点的特殊文件。与设备的所有通信都 通过设备节点完成。每个节点都 有唯一 的数值 对供Linux内核 标识 它。数值 对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识 主设备组下的某个特定设备。

    文件系统管理

    不同于其他一些操作系统,Linux内核 支持通过不同类型的文件系统从硬盘中读写数据。如下列出了Linux系统用来读写数据的标准的文件系统。

    文件系统描述
    extLinux扩展文件系统,最早的Linux文件系统
    ext2第二扩展文件系统,在ext的基础上提供了更多 的功能
    ext3第三扩展文件系统,支持日志功能
    ext4第四扩展文件系统,支持高级日志功能
    hgfsOS/2高性能文件系统
    ISO9660ISO 9660文件系统(CD-ROM)
    minixminix文件系统
    msdos微软的FAT16
    ncpNetware文件系统
    nfs网络文件系统
    ntfs支持Microsoft NT文件系统
    proc访问系统信息
    ReiserFS高级Linux文件系统,能提供性能和硬盘恢复功能
    smb支持网络访问的Samba SMB文件系统
    sysv软早期的Unix文件系统
    ufsBSD文件系统
    umsdos建立在msdos上的类Unix文件系统
    vfatWindows95文件系统(FAT32)
    XFS高性能 64位日志文件系统

    GNU工具

    GNU是GNU’s Not Unix的缩写。

    GNU组织开发了一套完整的Unix工具。

    核心GNU工具

    被称为coreutils软件包,它由三部分构成:

    • 用以处理文件的工具
    • 用以操作文本的工具
    • 用以管理进程的工具
    shell

    GNU/Linux shell 是一种特殊的交互式工具。它为用户提供了启动程序,管理文件系统中的谇反及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互 的部分。它允许你输入 文本命令,然后解释 命令,并在内核中执行。

    你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。

    在Linux,通常有好几中Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。所有Linux发行版默认的shell都是bash shell。

    shell描述
    ash一种运行在内存受限环境中简单轻量的shell,但与bash shell完全兼容。
    korn一种与Bourne shell兼容的编程shell,但关联数组和浮点运算待一些高级的编程特性。
    tcsh一种将C语言中的一些元素引入 到shell脚本 中的shell
    zsh一种结合 了bash,tcsh和korn的特性,同时提供高级编程特性,共享 历史 文件和主题化提示符的高级shell
    Linux桌面环境
    X Window系统
    KDE桌面
    GNOME桌面
    Unity桌面
    其他桌面
    • Fluxbox
    • Xfce
    • JWM
    • Fvwm
    • fvwm95

    Linux发行版

    不同的Linux发行版通常归类为3种:

    • 完整的核心Linux发行版
    • 特定用途的Linux发行版
    • LiveCD测试发行版

    核心Linux发行版

    发行版描述
    Slackware最早的LInux发行版中的一员,在Linux极客中比较流行
    Red Hat主要用于Internet服务器商业发行版
    Fedora从Red Hat分享出的家用发行版
    Gentoo为高级Linux用户设计 的发行版,公包含linux源代码
    openSUSE用于商用和家用的发行版
    Debian在Linux专家和商用 linux产品中流行的发行版

    特定用途的Linux发行版

    • CentOD
    • Ubuntu
    • PCLinuxOS
    • Mint
    • dyne:bolic
    • Puppy Linux

    Linux LiveCD

    走进Shell

    进入命令行

    控制台终端

    图形化终端

    通过Linux控制台终端访问CLI

    在大多数Linux发行版中,你可以使用简单按键组合访问某个Linux虚拟控制台。通常必须按下Ctrl + Alt组合键,然后按功能键F1 - F7进入要使用的虚拟控制台。

    可以将终端的背景色设置成白色,其中一种方法是

    setterm -inversescreen on

    setterm -background white

    setterm -foreground black

    共有八种颜色可供选择,分别是black, red, green, yeallow, blue, magenta, cyan, white

    选项参数描述
    -backgroundblack, red, green, yellow, blue, magenta, cyan, white将终端的背景色改为指定颜色
    -foregroundblack, red, green, yellow, blue, magenta, cyan, white将终端的前景色改为指定颜色
    -inversescreenon或off交换背景色和前景色
    -reset将终端外观恢复成默认设置并清屏
    -store将终端当前的前景色和背景色设置成-reset选项的值

    通过图形化终端仿真访问CLI

    使用GNOME Terminal仿真器

    使用Konsole Terminal仿真器

    使用Xterm

    基本Bash shell命令

    启动Shell

    shell提示符

    默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入。

    bash手册

    大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册 。

    man命令用来访问存储在Linux系统上的手册的页面。

    Linux手册页惯用的节名

    描述
    Name显示命令名和一段简短的描述
    Synopsis命令的语法
    Configuration命令配置信息
    Description命令的一般性描述
    Options命令选项描述
    Exit Status命令的退出状态指示
    Return Value命令的返回值
    Errors命令的错误的消息
    Environment描述所使用的环境变量
    Files命令用到的文件
    Versions命令的版本信息
    Conforming To命名所遵从的标准
    Notes其他有帮助的资料
    Bugs提供提交Bug的途径
    Example展示命令的用法
    Authors命令开以人员的信息
    Copyright命令源代码 的版权状况
    See Also与该 命令类型的其他命令

    Linux手册页的内容区域

    区域号所涵盖的内容
    1可执行程序或shell命令
    2系统调用
    3库调用
    4特殊文件
    5文件格式与约定
    6游戏
    7概览,约定及杂项
    8超级用户和系统管理员命令
    9内核例程

    手册页不是唯一 的资料。还有另一种叫作info页面的信息。

    另外大多数命令都可以接受-help或–help选项。

    浏览文件系统

    Linux文件系统

    Linux路径本身并没有提供任何有关文件空间存放在哪个物理磁盘上的信息。

    在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。

    常见Linux目录名称

    目录用途
    /虚拟目录的根目录。通常不会在这里存储文件
    /bin二进制目录,存放许多用户级的GNU工具
    /boot启动目录,存放启动文件
    /etc系统配置文件目录
    /home主目录,Linux在这里创建用户的目录
    /lib库目录,存放系统和应用程序的库文件
    /media媒体目录,可移动媒体设备的常用挂载点
    /mnt挂载目录,另一个可移动 媒体设备的常用挂载点
    /opt可选目录,常用于存放第三方软件包和数据文件
    /proc进程目录,存放现有硬件及当前相关信息
    /rootroot用户的主目录
    /sbin系统二进程目录,存放许多GNU管理员级工具
    /run运行目录,存放系统动作时的运行时数据
    /srv服务目录,存放本地服务的相关文件
    /sys系统目录,存放系统硬件信息的相关文件
    /tmp临时目录,可以在该目录中创建和删除临时工作文件
    /usr用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
    /var可变目录,用以存放经常变化的文件,比如日志文件

    遍历目录

    cd destination

    • 绝对文件路径

    绝对文件路径总是以正斜线作为起始,指明虚拟文件系统的根目录。

    • 显示shell会话的当前目录

    pwd

    • 相对文件路径

    相对文件路径允许用户指定一个基于当前位置的目录文件路径。

    单点(.): 表示当前目录

    双点(…):表示当前目录的父目录

    文件和目录列表

    基本列表功能

    ls命令最基本的形式会显示当前目录下的文件和目录

    参数:

    -F: 可以轻松区分文件和目录,它会在目录后边加/,还会在可执行文件后边星号。

    -a: 可以把隐藏文件和普通文件及目录一起显示出来。

    -R: 递归选项

    -l: 长列表格式输出

    -i: 显示inode

    会显示如下内容:

    • 文件类型,比如目录(d),文件(-), 字符型文件(c)或块设备(b);
    • 文件的权限
    • 文件的硬链接总数
    • 文件属主的用户名
    • 文件属组的组名
    • 文件的大小(以字节为单位)
    • 文件的上次修改时间
    • 文件名或目录名

    -h: 以容易识别的文件大小显示

    过滤输出列表

    ls xxx

    • ?: 代表一个字符
    • *:代表零个或多个字符

    处理文件

    创建文件

    touch filename

    会创建一个空文件

    如果只想改变文件的访问时间可以使用-a参数

    touch -a filename

    复制文件

    cp source destination

    参数:

    -i: 重名需要确认

    -R: 递归

    制表键自动补全

    链接文件

    Linux中有两种不同类型的文件链接

    • 符号链接

    ls -s source lnFile

    lnFile是指向source的一个新文件,可以通过inode编号查看

    • 硬链接

    硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。

    重命名文件

    mv命令,可以将目录移动到另一个位置或重新命名

    mv source destination

    mv oldfilename newfilename

    删除文件

    rm -i file

    -i: 删除文件时需要确认一次才会删除

    -f:强制删除文件

    -r:级联删除文件夹

    处理目录

    创建目录

    mkdir newDir

    参数:

    -p:创建多级目录

    删除目录

    rm -ri

    查看文件内容

    查看文件类型

    file my_file

    my_file: ASCII text

    查看整个文件

    • cat

      • -n: 显示行号
      • -b: 只给有文本的行加上行号
      • -T: 用^I替换制表符
    • more

      以分页的形式显示文件内容

    • less

    查看部分文件

    • tail

      tail命令默认会显示文件最后10行内容

      -n 2: 显示最后两行内容

      -f: 使tail保持活动状态,并不断显示添加到文件中的内容

    • head

      默认显示文件的前10行

      head -num: 显示前num行内容

    更多的Bash shell

    监测程序

    探查进程

    默认ps只会显示运行在当前控制台下的属于当前用记的进程。

    Linux系统中使用的GNU ps命令支持3种不同类型的命令行参数:

    • Unix风格的参数,前面加单破折线
    • BSD风格的参数,前面不加破折线
    • GNU风格的长参数,前面加双破折线

    Unix风格的ps命令参数

    参数描述
    -A显示所有进程
    -N显示与指定参数不符的所有进程
    -a显示除控制进程和无终端进程外的所有进程
    -d显示除控制进程外的所有进程
    -e显示所有进程
    -C cmdlist显示包含在cmdlist列表中的进程
    -G grplist显示组ID在grplist列表中的进程
    -U userlist显示属主的用户ID在userlist列表中的进程
    -g grplist显示会话或组ID在grplist列表
    -p pidlist显示PID在pidlist列表中的进程
    -s sesslist显示会话ID在sesslist列表中的进程
    -t ttylist显示终端ID在ttylist列表中的进程
    -u userlist显示有效用户iD在userlist列表中的进程
    -F显示更多额外输出(相对于-f参数而言)
    -O format显示默认的输出列以及format列表指定的特定列
    -M显示进程的安全信息
    -c显示进程额外调试器信息
    -f显示完整格式的输出
    -j显示任务信息
    -l显示长列表
    -o format公显示由format指定的列
    -y不要显示进程标记(process flag, 表明进程状态的标记)
    -Z显示安全标签(security context)信息
    -H用层级格式来显示进程(树状,用来显示父进程)
    -n namelist定义了WCHAN列显示的值
    -w采用宽输出模式,不限宽度显示
    -L显示进程中的线程
    -V显示ps命令的版本号

    e.g.

    ps -ef

    显示内容:

    • UID: 启动这些进程的用户
    • PID: 进程的进程ID
    • PPID: 父进程的进程号(如果该 进程是由另一个进程启动的)
    • C: 进程生命周期中的CPU利用率
    • STIME: 进程启动时的系统时间
    • TTY: 进程启动时的终端设备
    • TIME: 运行进程需要的累计CPU时间
    • CMD: 启动的程序名称

    -l参数:

    多出的列:

    • F: 内核分配给进程的系统标记
    • S: 进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)
    • PRI: 进程的优先级(越大的数字低的优先级)
    • NI: 谦让度值 用来参与决定优先级
    • ADDR: 进程的内存地址
    • SZ: 假如进程被换出, 所需要交换空间的大致大小
    • WCHAN: 进程休眠的内核函数的地址

    BSD风格

    主要命令参数:

    参数描述
    T显示跟当前终端关联的所有进程
    a显示跟任意终端关联的所有进程
    g显示所有的进程,包括控制进程
    r仅显示运行中的进程
    x显示所有的进程,甚至包括未分配任何终端的进程
    U userlist显示归userlist列表中的某用户ID所有的进程
    p pidlist显示PID在pidlist列表中的进程
    t ttylist显示所关联的终端在ttylist列表中的进程
    O format除了默认输出的列之外,还输出由format指定的列
    X按过去的Linux i386寄存器格式显示
    Z将安全信息添加到输出中
    j显示任务信息
    l采用长模式
    o format公显示由format指定的列
    s采用信号格式显示
    u采用基于用户的格式显示
    v采用虚拟内存格式显示
    N namelist定义在WCHAN列中使用的值
    O order定义显示信息列的顺序
    S将数值信息从子进程加到父进程上,比如CPU和内存的使用情况
    c显示真实的命令名称 (用以启动进程的程序名称)
    e显示命令使用的环境变量
    f用分层格式来显示进程,表明哪些进程启动了哪些进程
    h不显示头信息
    k sort指定用以将输出排序的列
    n和WCHAN信息一起显示出来,用数值来表示用户ID和组ID
    w为较宽屏幕显示宽输出
    H将线程按进程来显示
    m在进程后显示线程
    L列出所有格式指定符
    V显示ps命令的版本号

    输出结果中的大部分的输出列跟使用Unix风格参数时的输出是一样的,只有一小部分如下:

    • VSZ: 进程在内存中的大小以KB为单位

    • RSS: 进程在未换出时占用的物理内存

    • STAT: 代表当前进程状态 的双字符状态码

      • 第一个字符采用了和Unix风格S列相同的值,表明进程是在休眠,运行还是等待。

      • 第二个参数进一步说明进程的状态

        <: 该进程运行在高优先级上

        N:该进程运行在低优先级上

        L: 该进程有页面锁定在内存中

        s: 该 进程是控制进程

        l: 该进程是多线程的

        +: 该进程运行在前台

    GNU长参数

    常用参数

    参数描述
    –deselect显示所有进程,命令行中列出的进程
    –Group grplist显示组ID在grplist列表中的进程
    –User userlist显示用户ID在userlist列表中的进程
    –group grplist显示有效组ID在grplist列表中的进程
    –pid pidlist显示PID在pidlist列表中的进程
    –ppid pidlist显示父PID在pidlist列表中的进程
    –sid sidlist显示会话ID在sidlist列表中的进程
    –tty ttylist显示终端设备号在ttylist列表中的进程
    –user userlist显示有效用户ID的userlist列表中的进程
    –format format仅显示由format指定的列
    –context显示额外的安全信息
    –cols n将屏幕宽度设置为n列
    –columns n将屏幕宽度设置为n列
    –cumulative包含已停止的子进程的信息
    –forest用层级结构显示出进程和父进程之间的关系
    –headers在每页输出中都显示列的头
    –no-headers不显示列的头
    –lines n将屏幕高度设为n行
    –rows n将屏幕高度设为n排
    –sort order指定将输出按哪列排序
    –width n将屏幕宽度设为N列
    –help显示帮助信息
    –info显示调试信息
    –version显示ps命令的版本号

    实时监测进程

    top

    输出的第一部分显示的是系统的概况:

    第一行显示了当前时间,系统的运行时间,登录的用户数以及系统的平均负载。

    ? 平均负载有3个值,最近1分钟的,最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。

    ? 通常,如果系统的负载值超过2,就说明系统比较繁忙了。

    第二行显示了进程概要信息–top命令的输出中将进程叫作任务(task):

    ? 有多少进程处在运行,休眠,停止或僵化状态

    第三行显示了Cpu的概要信息。

    紧跟其后的两行说明了系统内存的状态。

    ? 第一行是系统的物理内存: 总共有多少内存,当前使用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间。

    最后一部分显示了当前运行中的进程的详细列表。有些跟ps命令的输出类似。

    • PID:进程的ID
    • USER: 进程属主的名字
    • PR: 进程的优先级
    • NI: 进程的谦让度值
    • VIRT: 进程占用的虚拟内存总量
    • RES: 进程占用的物理内存总量
    • SHR: 进程和其他进程共享 的内存总量
    • S: 进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)
    • %CPU: 进程使用的CPU时间比例
    • %MEM: 进程使用的内存占可用内存的比例
    • TIME+: 自进程启动到目前为止的CPU时间总量
    • COMMAND: 进程所对应的命令行名称,也就是启动的程序名。

    默认top命令会对按昭%cpu值对进程排序。可以在top运行时使用多种交互命令重新排序。每个交互式命令都 是单字符,在top命令运行时键入可改变top的行为。键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。用户在top命令的输出上有很大的控制权。

    结束进程

    在Linux中进程之间通过信号来通信。

    Linux进程信号:

    信号名称描述
    1HUP挂起
    2INT中断
    3QUIT结束运行
    9KILL无条件终止
    11SEGV段错误
    15TERM尽可能终止
    17STOP无条件停止运行,但不终止
    18TSTP停止或暂停,但继续在后台运行
    19CONT在STOP或TSTP之后恢复执行

    在Linux中有两个命令可以向运行中的进程发出进程信号

    kill

    kill -option pid pid pid…

    killall

    killall命令支持通过进程名而不是PID来结束进程。

    killall也支持通配符。

    e.g.

    killall http* # 结束所有以http开头的进程

    监测磁盘空间

    挂载存储媒体

    mount

    默认情况下,mount命令会输出当前系统上挂载的设备列表

    默认提供如下四部分信息:

    • 媒体的设备文件名
    • 媒体挂载到虚拟目录的挂载点
    • 文件系统类型
    • 已挂载媒体的访问状态

    需要手动在虚拟目录中挂载设备,需要以root用户身价登录,或是以root用户身份运行sudo命令。

    mount -t type device directory

    如果Type是VindowsPC共用的存储设备,通常类型如下:

    • vfat: Windows长文件系统
    • ntfs: windows NT, XP, Vistra和Windows7中广泛使用的高级文件系统
    • iso9660: 标准Cd-ROM文件系统

    mount命令的参数

    参数描述
    -a挂载/etc/fstab文件中指定的所有文件系统
    -f使用mount命令模拟挂载设备,但并不真的挂载
    -F和-a参数一起使用时,会同时挂载所有文件系统
    -v详细模式,将会说明挂载设备的每一步
    -I不启用任何/sbin/mount.filesystem下的文件系统帮助文件
    -l给ext2,ext3或XFS文件系统自动 添加文件系统标签
    -n挂载设备,但不注册到/etc/mtab已挂载设备文件中
    -p num进行加密挂载时,从文件描述符num中获得密码短语
    -s忽略该文件系统不支持的挂载选项
    -r将设备挂载为只读的
    -w将设备挂载为可读写的(默认参数)
    -L label将设备按指定 的label挂载
    -U uuid将设备按指定的uuid挂载
    -O和-a参数一起使用,限制命令只作用到特定的一组文件系统上
    -o给文件系统添加特定的选项

    以下为-o常用参数

    • ro: 以只读形式挂载
    • rw: 以读写形式挂载
    • user: 允许普通用户挂载文件系统
    • check=none: 挂载文件系统时不进行完整校验
    • loop: 挂载一个文件
    umount

    从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。

    umount [directory | device]

    df

    用来查看所有已挂载磁盘的使用情况

    命令输出格式:

    • 设备的设备文件位置
    • 能容纳多少个1024字节大小的块
    • 已用了多少个1024字节大小的块
    • 还有多少个1024字节大小的块可用
    • 已用空间所占比例
    • 设备挂载到了哪个挂载点上

    常用参数:

    • -h: 以可读的方式显示容量

    du

    此命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况

    常用参数

    • -c : 显示所有已列出文件总的大小
    • -h: 按用户易读的格式输出大小
    • -s: 显示每个输出参数的总计
    • –max-depth=num: 只统计num深度的目录

    处理数据文件

    排序数据

    sort

    常用参数:

    单破折线双破折线描述
    -b–ignore-leading-blanks排序时忽略起始的空白
    -C–check-quiet不排序,如果数据无序也不要报告
    -c–check不排序,但检查输入数据是不是已排序;未排序的话,报告
    -d–dictionary-order仅考虑空白和字母,不考虑特殊字符
    -f–ignore-case默认情况下,会将大写字母排在前面;这个参数会忽略大小写
    -g–general-number-sort按通用数值来排序(跟-n不同,把值当浮点数来排序,支持科学计数法表示的值)
    -i–ignore-nonprinting在排序时忽略不可打印字符
    -k–key=POST1 [, POS2]排序从POS1位置开始,如果指定了POS2的话,到POS2位置结束
    -M–month-sort用三个字符月份名按月份排序
    -m–mrege将两个已排序数据文件合并
    -n–numeric-sort按字符串数值来排序(并不转换为浮点数)
    -o–output=file将排序结果写出到指定的文件中
    -R–random-sort --random-source=FILE按随机生成的散列表的键值排序。 指定 -R参数用到的随机字节的源文件
    -r–reverse反序排序
    -S–buffer-size=SIZE指定使用的内存大小
    -s–stable禁用最后重排序比较
    -T–temporary-directory=DIR指定一个位置来存储临时工作文件
    -t–field-separator=SEP指定一个用来区分键位置的字符
    -u–unique和-c参数一起使用时, 检查严格排序;不和-c参数一起使用时,公输出第一例相似的两行