• Linux学习(一)


    整理自http://c.biancheng.net/cpp/html/2726.html

    linux初识

    用户通过Shell与Linux内核交互。Linux下,很多工作都是通过命令完成的,学好Linux,首先要掌握常用命令。

    基本命令:

    [spark@nolonely home]$ cal
          May 2017      
    Su Mo Tu We Th Fr Sa
        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 31
    [spark@nolonely home]$ passwd    #修改密码

    [spark@nolonely ~]$ ls -l #查看目录和文件
    total 64

    -rwxrwxr-x. 1 spark spark  328 May 16 20:36 a.sh
    -rwxrwxr-x. 1 spark spark  170 May 17 00:14 b.sh
    -rw-rw-r--. 1 spark spark   41 Sep 26  2016 caa
    -rwxrwxr-x. 1 spark spark  383 May 17 00:31 c.sh
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Desktop
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Documents
    drwxr-xr-x. 3 spark spark 4096 Sep 28  2016 Downloads
    -rwxrwxr-x. 1 spark spark   48 May 17 00:37 d.sh
    -rwxrwxr-x. 1 spark spark  144 May 17 00:54 e.sh
    -rwxrwxr-x. 1 spark spark   71 May 17 01:13 f.sh
    -rwxrwxr-x. 1 spark spark  297 May 17 01:26 g.sh
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Music
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Pictures
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Public
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Templates
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Videos

    [spark@nolonely ~]$ whoami      #自己的用户名(用户ID)
    spark
    [spark@nolonely ~]$ users #当前在线的用户(同时登录到系统的用户)
    spark spark spark
    [spark@nolonely ~]$ who
    spark    tty1         2017-05-16 19:41 (:0)

    spark    pts/0        2017-05-16 19:42 (:0.0)
    spark    pts/2        2017-05-17 19:21 (192.168.244.1)
    [spark@nolonely ~]$ w
     
    02:22:24 up 19:18,  3 users,  load average: 0.00, 0.00, 0.00

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    spark    tty1     :0               Tue19   30:42m  9.26s  0.15s pam: gdm-password
    spark    pts/0    :0.0             Tue19   30:26m  0.10s  0.57s /usr/bin/gnome-terminal -x /bin/sh -c cd '/home/spark/De
    spark    pts/2    192.168.244.1    19:21    0.00s  0.71s  0.08s w
    [spark@nolonely ~]$ logout #退出登录,系统会清理有关信息并断开连接。
    [spark@nolonely ~]$ halt    #直接关闭系统
    [spark@nolonely ~]$ init 0    #使用预先定义的脚本关闭系统,关闭前可以清理和更新有关信息
    [spark@nolonely ~]$ init 6    #重新启动系统
    [spark@nolonely ~]$ poweroff    #通过断电来关闭系统
    [spark@nolonely ~]$ reboot    #重新启动系统
    [spark@nolonely ~]$ shutdown    #安全关闭系统

    注意:一般情况下只有超级用户和root用户(Linux系统中的最高特权用户)才有关闭系统的权限,但是给普通用户赋予相应权限也可以关闭系统。

    在所有Linux版本中,都会涉及到以下几个重要概念:

    • 内核:内核是操作系统的核心。内核直接与硬件交互,并处理大部分较低层的任务,如内存管理、进程调度、文件管理等。
    • Shell:Shell是一个处理用户请求的工具,它负责解释用户输入的命令,调用用户希望使用的程序。
    • 命令和工具:日常工作中,你会用到很多系统命令和工具,如cp、mv、cat和grep等。在Linux系统中,有250多个命令,每个命令都有多个选项;第三方工具也有很多,他们也扮演着重要角色。
    • 文件和目录:Linux系统中所有的数据都被存储到文件中,这些文件被分配到各个目录,构成文件系统。Linux的目录与Windows的文件夹是类似的概念。

    linux 文件管理

    在Linux中,有三种基本的文件类型:

    • 普通文件:普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。
    • 目录:目录可以包含普通文件和特殊文件,目录相当于Windows和Mac OS中的文件夹。
    • 设备文件:有些教程中称特殊文件,是一个含义。Linux 与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux 和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。
    [spark@nolonely ~]$ ls
    a.sh  b.sh  caa  c.sh  Desktop  Documents  Downloads  d.sh  e.sh  f.sh  g.sh  Music  Pictures  Public  Templates  Videos

    [spark@nolonely ~]$ ls -l
    total 64
    -rwxrwxr-x. 1 spark spark  328 May 16 20:36 a.sh
    -rwxrwxr-x. 1 spark spark  170 May 17 00:14 b.sh
    -rw-rw-r--. 1 spark spark   41 Sep 26  2016 caa
    -rwxrwxr-x. 1 spark spark  383 May 17 00:31 c.sh
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Desktop
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Documents
    drwxr-xr-x. 3 spark spark 4096 Sep 28  2016 Downloads
    -rwxrwxr-x. 1 spark spark   48 May 17 00:37 d.sh
    -rwxrwxr-x. 1 spark spark  144 May 17 00:54 e.sh
    -rwxrwxr-x. 1 spark spark   71 May 17 01:13 f.sh
    -rwxrwxr-x. 1 spark spark  297 May 17 01:26 g.sh
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Music
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Pictures
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Public
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Templates
    drwxr-xr-x. 2 spark spark 4096 Jul 20  2016 Videos

    每一列的含义如下:

    • 第一列:文件类型。
    • 第二列:表示文件个数。如果是文件,那么就是1;如果是目录,那么就是该目录中文件的数目。
    • 第三列:文件的所有者,即文件的创建者。
    • 第四列:文件所有者所在的用户组。在Linux中,每个用户都隶属于一个用户组。
    • 第五列:文件大小(以字节计)。
    • 第六列:文件被创建或上次被修改的时间。
    • 第七列:文件名或目录名。

    注意:每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"..",所以对于一个空目录,第二列应该为 2

    前缀 描述
    - 普通文件。如文本文件、二进制可执行文件、源代码等。
    b 块设备文件。硬盘可以使用块设备文件。
    c 字符设备文件。硬盘也可以使用字符设备文件。
    d 目录文件。目录可以包含文件和其他目录。
    l 符号链接(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。
    p 具名管道。管道是进程间的一种通信机制。
    s 用于进程间通信的套接字。

    元字符

    元字符是具有特殊含义的字符。* 和 ? 都是元字符:

    • * 可以匹配 0 个或多个任意字符;
    • ? 匹配一个字符。
    [spark@nolonely ~]$ ls *.sh    #  * 匹配任意一个字符。
    a.sh  b.sh  c.sh  d.sh  e.sh  f.sh  g.sh

    隐藏文件

    隐藏文件的第一个字符为英文句号或点号(.),Linux程序(包括Shell)通常使用隐藏文件来保存配置信息。

    [spark@nolonely ~]$ ls -a
    .                  b.sh      Desktop      f.sh             .gstreamer-0.10  .oracle_jre_usage  Videos
    ..                 caa       .dmrc        .gconf           .gtk-bookmarks   Pictures           .viminfo
    a.sh               .caa.swo  Documents    .gconfd          .gvfs            Public             .Xauthority
    .bash_history      .caa.swp  Downloads    .gnome2          .ICEauthority    .pulse             .xsession-errors
    .bash_logout       .cache    d.sh         .gnome2_private  .local           .pulse-cookie      .xsession-errors.old
    .bash_profile      .config   .esd_auth    .gnote           .mozilla         .ssh
    .bash_profile.swp  c.sh      e.sh         .gnupg           Music            Templates
    .bashrc            .dbus     .fontconfig  g.sh             .nautilus        .thumbnails

    一个点号(.)表示当前目录,两个点号(..)表示上级目录
    注意:输入密码时,星号(*)作为占位符,代表你输入的字符个数。

    查看文件内容:

    可以使用 cat 命令来查看文件内容:

    [spark@nolonely ~]$ cat a.sh 
    #!/bin/bash
    echo "What is your name?"
    read PERSON
    echo "Hello World!,$PERSON"
    myUrl="http://www.baidu.com"
    myNum=10
    echo $myUrl
    echo ${myUrl}
    for skill in Ada Coffe Action Java
    do
            echo "I am good at ${skill}Script"
    done
    
    myUrl="nihao"
    echo ${myUrl}
    
    readonly myUrl
    myUrl="sdf"
    echo ${myUrl}
    unset myUrl
    echo ${myUrl}
    
    $echo $$

    可以通过 cat 命令的 -b 选项来显示行号

    统计单词数目

    可以使用 wc 命令来统计当前文件的行数、单词数和字符数,下面是一个简单的例子:

    [spark@nolonely ~]$ wc a.sh 
     23  46 328 a.sh
    [spark@nolonely ~]$ wc a.sh b.sh c.sh 
     23  46 328 a.sh
      8  20 170 b.sh
     30  65 383 c.sh
     61 131 881 total

    每一列的含义如下:

    • 第一列:文件的总行数
    • 第二列:单词数目
    • 第三列:文件的字节数,即文件的大小
    • 第四列:文件名

    复制文件

    cp filename copyfile

    重命名文件

    $ mv old_file new_file

    删除文件

    $ rm filename1 filename2 filename3

    Linux目录

    主目录:登录后的位置就是主目录

    [spark@nolonely ~]$ cd ~           #进入主目录
    [spark@nolonely ~]$ pwd
    /home/spark
    
    [spark@nolonely ~]$ cd ~spark0       #进入其他用户的主目录
        
    [spark@nolonely ~]$ cd -                #返回进入当前目录前所在的目录
    /home/spark

    绝对路径和相对路径:

    [spark@nolonely ~]$ /etc/passwd         #一个路径以 / 开头,就称为绝对路径;它表示当前文件与根目录的关系。
    [spark@nolonely ~]$ chem/notes      #不以 / 开头的路径称为相对路径,它表示文件与当前目录的关系。
    [spark@nolonely ~]$ $ls /usr/local     #查看目录中的文件

    目录

    #创建目录:
    $mkdir dirname        #当前目录下创建 mydir 目录,相对目录 $mkdir
    /tmp/test-dir #/tmp 目录下创建 test-dir 目录。绝对目录 $mkdir docs pub       #同时创建多个目录       $mkdir /tmp/amrood/test #使用 mkdir 命令创建目录时,如果上级目录不存在,就会报错。 $mkdir -p /tmp/amrood/test #为 mkdir 命令增加 -p 选项,可以一级一级创建所需要的目录,即使上级目录不存在也不会报错。


    #删除目录
    $rmdir dirname
    $rmdir dirname1 dirname2 dirname3

    #改变所在目录
    $cd dirname        #相对路径
    $cd /usr/local/bin    #绝对路径

    #重命名目录
    $mv olddir newdir


    #点号(.)
    #一个点号(.)表示当前目录,两个点号(..)表示上级目录(父目录)
    [spark@nolonely ~]$ ls -a
    .                  b.sh      Desktop      f.sh             .gstreamer-0.10  .oracle_jre_usage  Videos
    ..                 caa       .dmrc        .gconf           .gtk-bookmarks   Pictures           .viminfo
    a.sh               .caa.swo  Documents    .gconfd          .gvfs            Public             .Xauthority
    .bash_history      .caa.swp  Downloads    .gnome2          .ICEauthority    .pulse             .xsession-errors
    .bash_logout       .cache    d.sh         .gnome2_private  .local           .pulse-cookie      .xsession-errors.old
    .bash_profile      .config   .esd_auth    .gnote           .mozilla         .ssh
    .bash_profile.swp  c.sh      e.sh         .gnupg           Music            Templates
    .bashrc            .dbus     .fontconfig  g.sh             .nautilus        .thumbnails

    Linux文件权限和访问模式

    每个文件都拥有下面三种权限:

    • 所有者权限:文件所有者能够进行的操作
    • 组权限:文件所属用户组能够进行的操作
    • 外部权限(其他权限):其他用户可以进行的操作。

    查看文件的权限

    使用 ls -l 命令可以查看与文件权限相关的信息:

    $ls -l /home/amrood
    -rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
    drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

    第一列就包含了文件或目录的权限。

    第一列的字符可以分为三组,每一组有三个,每个字符都代表不同的权限,分别为读取(r)、写入(w)和执行(x):

    • 第一组字符(2-4)表示文件所有者的权限,-rwxr-xr-- 表示所有者拥有读取(r)、写入(w)和执行(x)的权限。
    • 第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr-- 表示该组拥有读取(r)和执行(x)的权限,但没有写入权限。
    • 第三组字符(8-10)表示所有其他用户的权限,rwxr-xr-- 表示其他用户只能读取(r)文件。

    文件访问模式

    文件权限是Linux系统的第一道安全防线,基本的权限有读取(r)、写入(w)和执行(x):

    • 读取:用户能够读取文件信息,查看文件内容。
    • 写入:用户可以编辑文件,可以向文件写入内容,也可以删除文件内容。
    • 执行:用户可以将文件作为程序来运行。

    目录访问模式

    目录的访问模式和文件类似,但是稍有不同:

    • 读取:用户可以查看目录中的文件
    • 写入:用户可以在当前目录中删除文件或创建文件
    • 执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。

    改变权限

    可以使用 chmod (change mode) 命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。

    使用符号表示权限

    对于初学者来说最简单的就是使用符号来改变文件或目录的权限,你可以增加(+)和删除(-)权限,也可以指定特定权限。

    符号 说明
    + 为文件或目录增加权限
    - 删除文件或目录的权限
    = 设置指定的权限


    下面的例子将会修改 testfile 文件的权限:

    $ls -l testfile
    -rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod o+wx testfile
    $ls -l testfile
    -rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod u-x testfile
    $ls -l testfile
    -rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod g=rx testfile
    $ls -l testfile
    -rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod o+wx,u-x,g=rx testfile     #使用多个符号
    $ls -l testfile
    -rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

    使用数字表示权限

    除了符号,也可以使用八进制数字来指定具体权限,如下表所示:

    数字说明权限
    0 没有任何权限 ---
    1 执行权限 --x
    2 写入权限 -w-
    3 执行权限和写入权限:1 (执行) + 2 (写入) = 3 -wx
    4 读取权限 r--
    5 读取和执行权限:4 (读取) + 1 (执行) = 5 r-x
    6 读取和写入权限:4 (读取) + 2 (写入) = 6 rw-
    7 所有权限: 4 (读取) + 2 (写入) + 1 (执行) = 7 rwx


    下面的例子,首先使用 ls -1 命令查看 testfile 文件的权限,然后使用 chmod 命令更改权限:

    $ls -l testfile
    -rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
    $ chmod 755 testfile
    $ls -l testfile
    -rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod 743 testfile
    $ls -l testfile
    -rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
    $chmod 043 testfile
    $ls -l testfile
    ----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

    更改所有者和用户组

    在Linux中,每添加一个新用户,就会为它分配一个用户ID和群组ID,上面提到的文件权限也是基于用户和群组来分配的。

    有两个命令可以改变文件的所有者或群组:

    • chown:chown 命令是"change owner"的缩写,用来改变文件的所有者。
    • chgrp:chgrp 命令是"change group"的缩写,用来改变文件所在的群组。

    chown 命令用来更改文件所有者,其语法如下:

    $ chown user filelist

    user 可以是用户名或用户ID,例如

    $ chown amrood testfile
    

    将 testfile 文件的所有者改为 amrood。

    注意:超级用户 root 可以不受限制的更改文件的所有者和用户组,但是普通用户只能更改所有者是自己的文件或目录。

    chgrp 命令用来改变文件所属群组,其语法为:

    $ chgrp group filelist

    group可以是群组名或群组ID,例如

    $ chgrp special testfile
    

    将文件 testfile 的群组改为 special

    SUID和SGID位

    在Linux中,一些程序需要特殊权限才能完成用户指定的操作。

    例如,用户的密码保存在 /etc/shadow 文件中,出于安全考虑,一般用户没有读取和写入的权限。但是当我们使用 passwd 命令来更改密码时,需要对 /etc/shadow 文件有写入权限。这就意味着,passwd 程序必须要给我们一些特殊权限,才可以向 /etc/shadow 文件写入内容。

    Linux 通过给程序设置SUID(Set User ID)和SGID(Set Group ID)位来赋予普通用户特殊权限。当我们运行一个带有SUID位的程序时,就会继承该程序所有者的权限;如果程序不带SUID位,则会根据程序使用者的权限来运行。

    SGID也是一样。一般情况下程序会根据你的组权限来运行,但是给程序设置SGID后,就会根据程序所在组的组权限运行。

    如果程序设置了SUID位,就会在表示文件所有者可执行权限的位置上出现's'字母;同样,如果设置了SGID,就会在表示文件群组可执行权限的位置上出现's'字母。如下所示:

    $ ls -l /usr/bin/passwd
    -r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
    $

    上面第一列第四个字符不是'x'或'-',而是's',说明 /usr/bin/passwd 文件设置了SUID位,这时普通用户会以root用户的权限来执行passwd程序。

    注意:小写字母's'说明文件所有者有执行权限(x),大写字母'S'说明程序所有者没有执行权限(x)。

    如果在表示群组权限的位置上出现SGID位,那么也仅有三类用户可以删除该目录下的文件:目录所有者、文件所有者、超级用户 root。

    为一个目录设置SUID和SGID位可以使用下面的命令:

    $ chmod ug+s dirname
    $ ls -l
    drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
    $

    Linux环境变量

    修改环境变量

    方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin

    使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。

    方法二:执行vi ~/.bash_profile修改文件中PATH一行,将/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行之后

    这种方法只对当前登录用户生效

    方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
    PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
    export PATH

    最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。

    常用环境变量

    下表列出了部分重要的环境变量,这些变量可以通过上面提到的方式修改。

    变量 描述
    DISPLAY 用来设置将图形显示到何处。
    HOME 当前用户的主目录。
    IFS 内部域分隔符。
    LANG LANG可以让系统支持多语言。例如,将LANG设为pt_BR,则可以支持(巴西)葡萄牙语。
    PATH 指定Shell命令的路径。
    PWD 当前所在目录,即 cd 到的目录。
    RANDOM 生成一个介于 0 和 32767 之间的随机数。
    TERM 设置终端类型。
    TZ 时区。可以是AST(大西洋标准时间)或GMT(格林尼治标准时间)等。
    UID 以数字形式表示的当前用户ID,shell启动时会被初始化。

     下面的例子中使用了部分环境变量:

    $ echo $HOME
    /root
    $ echo $DISPLAY
    
    $ echo $TERM
    xterm
    $ echo $PATH
    /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
    $

    Linux管道和过滤器

    我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道。为了建立管道,需要在两个命令之间使用竖线(|)连接。

    管道使用竖线(|)将两个命令隔开,竖线左边命令的输出就会作为竖线右边命令的输入。连续使用竖线表示第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

    能够接受数据,过滤(处理或筛选)后再输出的工具,称为过滤器

    grep

    $ls -l | grep "Aug"
    -rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
    -rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
    -rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
    -rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
    $

    grep 命令有很多选项:

     选项说明
    -v 反转查询,输出不匹配的行。例如,grep -v "test" demo.txt 将输出不包含"test"的行。
    -n 输出匹配的行以及行号。
    -l 输出匹配的行所在的文件名。
    -c 输出匹配的总行数。
    -i 不区分大小写进行匹配。

    使用 -i 选项进行不区分大小写的匹配:

    $ls -l | grep -i "carol.*aug"
    -rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros

    sort命令

    sort 命令在 Linux 中非常有用,它将文件中的各行按字母或数进行排序。sort命令既可以从特定的文件,也可以从stdin获取输入。

     选项描述
    -n 按照数字大小排序,例如,10会排在2后面;-n 选项会忽略空格或 tab缩进。
    -r 降序排序。sort 默认是升序排序。
    -f 不区分大小写。
    +x 对第x列(从0开始)进行排序。
    [spark@nolonely ~]$ ls -l | grep "sh"|sort -r
    -rwxrwxr-x. 1 spark spark   71 May 17 01:13 f.sh
    -rwxrwxr-x. 1 spark spark   48 May 17 00:37 d.sh
    -rwxrwxr-x. 1 spark spark  383 May 17 00:31 c.sh
    -rwxrwxr-x. 1 spark spark  328 May 16 20:36 a.sh
    -rwxrwxr-x. 1 spark spark  297 May 17 01:26 g.sh
    -rwxrwxr-x. 1 spark spark  170 May 17 00:14 b.sh
    -rwxrwxr-x. 1 spark spark  144 May 17 00:54 e.sh
    [spark@nolonely ~]$ ls -l | grep "sh"|sort -n
    -rwxrwxr-x. 1 spark spark  144 May 17 00:54 e.sh
    -rwxrwxr-x. 1 spark spark  170 May 17 00:14 b.sh
    -rwxrwxr-x. 1 spark spark  297 May 17 01:26 g.sh
    -rwxrwxr-x. 1 spark spark  328 May 16 20:36 a.sh
    -rwxrwxr-x. 1 spark spark  383 May 17 00:31 c.sh
    -rwxrwxr-x. 1 spark spark   48 May 17 00:37 d.sh
    -rwxrwxr-x. 1 spark spark   71 May 17 01:13 f.sh
    [spark@nolonely ~]$ ls -l | grep "sh"|sort -f
    -rwxrwxr-x. 1 spark spark  144 May 17 00:54 e.sh
    -rwxrwxr-x. 1 spark spark  170 May 17 00:14 b.sh
    -rwxrwxr-x. 1 spark spark  297 May 17 01:26 g.sh
    -rwxrwxr-x. 1 spark spark  328 May 16 20:36 a.sh
    -rwxrwxr-x. 1 spark spark  383 May 17 00:31 c.sh
    -rwxrwxr-x. 1 spark spark   48 May 17 00:37 d.sh
    -rwxrwxr-x. 1 spark spark   71 May 17 01:13 f.sh

    pg和more命令

    如果文件内容过多,全部显示会很乱,可以使用 pgmore 命令分页显示,每次只显示一屏。

    $ls -l | grep "Aug" | sort +4n | more
    -rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
    -rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
    -rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
    -rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
    .
    .
    .
    -rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
    --More--(74%)

    如上,一次只显示一屏文本,显示满后,停下来,并提示已显示全部内容的百分比,按空格键(space)可以查看下一屏,按 b 键可以查看上一屏。

  • 相关阅读:
    如何划分与组织内存(上)?
    CountDownLatch和CyclicBarrier:如何让多线程步调一致?
    怎样用读写锁快速实现一个缓存?
    并发容器的前世今生是怎样的?
    java的原子类到底是啥?ABA,CAS又是些什么?
    设置工作模式与环境(中):建造二级引导器
    希尔排序
    order by是怎样工作的?
    如何用信号量去实现一个限流器?
    读多写少的场景下,竟然还有比读写锁更牛X的锁?
  • 原文地址:https://www.cnblogs.com/nolonely/p/6874728.html
Copyright © 2020-2023  润新知