Linux命令行与shell脚本编程大全第三版 学习笔记

Linux自己的文件资料: /usr/share/doc (在你的Linux系统中)  https://www.osyunwei.com/archives/290.html

 0. 注意Linux中一切皆文件,本文中的文件指的是广义的文件,包括文件、目录、硬件设备 等等。

1. 初识Linux shell


1.1, Linux分为四个部分: Linux内核,GNU工具集,图形化桌面环境,应用软件

1.1.1, Linux内核主要负责四种功能:系统内存管理,软件程序管理,硬件设备管理,文件系统管理

1.1.1.1, 物理内存&虚拟内存;交换空间(swap space),换入(swapping in), 换出(swapping out)

1.1.1.2, 进程;init进程;/etc/initab (TODO:被systemd取代了); runlevel(共有5个运行等级);

1.1.1.3,任何与Linux系统通信的硬件设备,都需要在Linux内核代码中加入驱动程序代码;内核模块;Linux系统将硬件设备当成特殊的文件(Linux系统一切皆文件),称为设备文件,分为三类(1字符型设备文件,2块设备文件,3网络设备文件);Linux系统为系统上的每个设备都创建了一种称为节点的特殊文件,每个节点都有唯一的数值对供Linux内核标识它,数值对包含一个主设备号和一个次设备号。

1.1.1.4, Linux支持的文件系统类型(ext, ext4, msdos,ntfs,proc,vfat[即fat32]....);Linux内核采用虚拟文件系统(Vitual File System)作为和每个文件系统交互的接口。

1.1.2,GNU(GNU's Not Unix)是GNU组织在开源软件(Open Source Software,OSS)理念下模仿Unix操作系统开发的一系列标准的计算机系统工具;Linux内核和GNU工具结合在一起就构成了Linux操作系统,也叫GNU/Linux操作系统。

1.1.2.1, GNU核心工具包(coreutils软件包)由三部分构成:用以处理文件的工具,用以操作文本的工具,用以管理进程的工具。

1.1.2.2, shell是GNU工具集中的一部分,Linux发行版默认的shell一般是GNU bash shell,这是GNU开发的作为 标准Unix Shell--Bourne Shell(开发者名字命名)的替代品,bash即Bourne Again Shell;其他shell类型。

1.1.3,X.org等软件包实现了一套软件X Windows,XWondows 软件是直接和显卡和显示器打交道的底层程序, 用以产生图形化显示环境,建立在XWindows系统软件之上的桌面环境可以供用户操作文件或开启程序;比较流行的Linux桌面环境有:KDE(K DeskTop Environment), GNOME(the GNU Network Object Model Environment),Unity桌面环境(Ubuntu开发),其他低内存消耗的Linux桌面环境;桌面环境都配有各种应用软件。


 1.2,Linux的4个组成部分汇集起来组成一个易于安装的包就是Linux发行版;不同的Linux发行版可归为三类:完整的Linux发行版,特定用途的发行版,LiveCD测试发行版。

1.2.3, 多数PC可以从CD启动而不是必须从标准硬盘启动,基于这点,一些Linux发行版创建了含有Linux样本系统(称为Linux LiveCD)的可引导CD,Linux LiveCD是一种无需将Linux安装到硬盘就能体验Linux的发行版



 2. 走进Shell

2.1,终端

  • 不涉及GUI的终端:控制台终端(ctrl+alt+f2~f7)属于虚拟终端(运行在内存中),可以使用setterm -background yellow 等命令设置控制台终端样式;
  • GUI中的终端:桌面环境下的终端属于仿真终端;

3. 基本的Bash Shell 命令

3.1,启动shell

3.1.1, GNU bash shell 能够提供对Linux系统的交互式访问。它是作为普通程序运行的。除了Bash Shell还有一些其他的shell,如dash shell, tcsh等等。用户登录终端时启动的shell类型取决于用户账户如何配置, /etc/passwd 文件包含了系统所有用户账户列表以及每个用户的基本配置信息,例如其中一个用户条目:tonux:x:1000:1000:Tonux:/home/tonux:/bin/bash ,每个条目有七个字段,字段之间用分号分开,每个字段赋予用户账户某些特定特性,最后一个字段指定了用户使用的shell程序。

3.1.2,Bash Shell是在用户登录系统时自动启动的,但是是否会出现shell命令行界面(CLI)则依赖于使用的登录方式。如果是采用虚拟化终端登录,CLI命令提示符会自动出现,可以输入shell命令;如果是通过图形化桌面环境登录Linux的话,则需要启动一个图形化终端仿真器来访问shell 命令行界面(CLI)。


3.2,bash shell 的默认提示符是美元符号$, 可以修改。


3.3,bash手册

3.3.1, man 命令用来访问存储在Linux系统上的手册页面。如果养成了阅读手册的习惯,尤其是阅读第一段或是 DESCRIPTION 部分的前两段,最终你会学到各种技术行话,手册页也会变得越来越有用。

3.3.2,man -k keyword 可以查找关键词相关的命令,忘记命令具体名称时可以使用此技巧。

3.3.3, man命令手册分为9个模块,有的命令在不同的模块都有介绍,比如 hostname 命令,在第一个模块和第七个模块都有介绍。想要查看特定模块内的内容,可以使用man 7 hostname.

3.3.4,查看9个模块的介绍,使用如下命令: man 1 introman 2 intro......,各模块的类别信息如下:

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

 

 

 

 

 

 

 

 

 

 

 

  3.3.5,除了man 命令由于查看帮助手册外,还有如下命令可查看shell命令的帮助信息:

  • 1.  info 命令也能查看命令帮助信息,就内容来说,info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西;
    • info [options] <command> // n键-next node; p键-previous node;space键-下一页;backspace/del键:上一页;q键-退出;
  • 2,help命令,built-in 命令需要通过 help命令查看,如 help cd, help history等等, help help 可以查看help本身的相关信息;
  • 3,还可以使用命令的 --help 或 -help 或 -h 选项查看帮助信息, 如 cp --help ;

3.4, 浏览文件系统

3.4.1, Linux文件系统,

  • 在Windows中,PC上安装的物理驱动器决定了文件的路径名。Windows会为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。

  • Linux则采用了一种不同的方式。Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。

  • https://zhidao.baidu.com/question/1645248554140989660.html
  • https://www.cnblogs.com/sammyliu/p/5729026.html

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

3.4.2,cdpwd(present working directory)


 3.5, 文件和目录列表

3.5.1,ls 命令

  • ls -F 用以区分文件类型:目录后加/, 可执行文件加 *,软连接加@,
  • ls -d 只列出目录本身的信息,不列出其中的内容,
  • ls -i 显示文件/目录的 inode编号(文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。)
  • ls -a 列出隐藏文件
  • ls -R 递归列出子目录
  • ls -l  显示长列表, 输出第一行表示目录中包含的总块数。显示的时间是最后一次内容修改的时间,相当于选项 --time=mtime (modify time)

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

  • ls -ul 显示的时间是访问时间,-u 相当于 --time=atime (access time)
  • ls -cl 显示的时间是状态改变时间, -c相当于--time=ctime (change time)
  • ls -l 过滤器,元字符通配符(metacharacter wildcards)
    • 问号( ? )代表一个字符;
    • 星号( * )代表零个或多个字符;
    • [ai],[a-i],[!a]
  •  

3.6,处理文件

3.6.1,创建文件, touch

  • 访问时间[ access time ], 读取一次文件内容,便会将access time 更新为当前系统时间. 如less/more命令会更新access time, 但是ls, stat命令不会修改access time;,注意测试时发现访问时间始终显示的是文件被修改后第一次访问的时间,不改变文件的情况下访问文件后 访问时间并不更新。
  • 修改时间[ modify time],对文件内容修改一次便会更新该时间; 
  • 状态改变时间[ change time ], 更改文件的属性便会更新该时间;
  • stat filename 查看文件详细信息

3.6.3,cp:     cp source destination

  • source 和 destination 参数都是文件名时, cp 命令将源文件复制成一个新文件,并且以destination 命名。新文件就像全新的文件一样,有新的修改时间。默认覆盖同名文件。加上-i参数可以询问是否覆盖, 只有回答y才会继续覆盖文件。

  •  

3.6.4, 文件链接 

  • 链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接: 1,符号链接(软连接)symbolic link; 2,硬链接 hard link;
  • 符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。符号链接和其指向的文件是两个独立的文件。使用ls -l查看可以看到两个文件大小并不一致,使用ls -il查看发现两个文件的inode编号也不一样。
    • ln -s targetFile symbolicLink
  • 硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件,但是删除时可以分别删除任何一个文件而不会影响另外一个。注意只能对位于同一个物理存储设备的文件创建硬链接,不同的物理存储设备中的文件只能创建符号链接。
    • ln targetFile hardLink
  •  

3.6.5,移动文件、重命名文件

  • mv 命令可以将文件和目录移动到另一个位置或重新命名,可以移动位置的同时重命名。mv命令只移动或重命名文件,文件的inode编号和时间戳保持不变

  • mv source destination, -i 交互式提醒是否覆盖
  • mv 移动目录时,不需要加递归参数-R

3.6.6,删除文件

  • rm -i fileName, -i 命令参数提示你是不是要真的删除该文件。bash shell中没有回收站或垃圾箱,文件一旦删除,就无法再找回。因此,在使用 rm 命令时,要养成总是加入 -i 参数的好习惯。
  • rm -f fileName -f参数强制删除。小心为妙!
  •  

3.7,处理目录

3.7.1, 创建目录

  • mkdir newDirName
  • mkdir -p dir1/dir2/dir3...  同时创建多个目录和子目录,需要加入 -p 参数

3.7.2,删除目录

  • rmdir dirName rmdir命令只允许删除空目录。
  • rmdir 并没有 -i 选项来询问是否要删除目录。这也是为什么说 rmdir 只能删除空目录还是有好处的原因。

  • rm -ri myDir  也可以在整个非空目录上使用 rm 命令。使用 -r 选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。

  • 对 rm 命令而言, -r 参数和 -R 参数的效果是一样的。但是shell命令中,不同大小写的参数一般代表不同的功能。
  • rm -rf dirName命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有超级用户权限的时候。务必谨慎使用,请再三检查你所要进行的操作是否符合预期。

  •  

 

3.8,查看文件内容

3.8.1,查看文件类型

  • file fileName  file命令能够探测文件的内部,并确定文件的类型。
  •  

3.8.2,查看整个文件

  • cat 命令
    • cat fileName 查看整个文件的内容
    • cat -n fileName 添加行号
    • cat -b fileName 只给有文本的行添加行号
    • cat -T fileName 将制表符用^I 代替
  • more 命令
    • more fileName 一次显示一屏文本
  • less 命令: less命令实际上是more命令的升级版,less命令的命名实际上是个文字游戏(来自俗语“less is more”),能够实现在文本文件中前后翻动,而且还有一些高级搜索功能。
    • less fileName 

3.8.3,查看部分文件

  • tail 命令
    • tail fileName 默认显示文件的最后10行;
    • tail -n fileName 显示文件最后 n 行;
    • tail -f fileName -f 参数是 tail 命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。tail 命令会保持活动状态,并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。
  • head 命令
    • head fileName 默认显示文件的头10行
    • 文件头部信息一般不会改变,所以head命令不支持 -f 参数;
    •  

 



4. 更多的Shell 命令

4.1,监测程序

4.1.1, 探查进程 (ps 命令)

  • ps命令有两个版本:Unix风格参数(单破折号参数) 和 BSD(Berkeley software distribution,BSD)风格参数(不带破折号), 后来GNU开发人员又加入了另外一些长参数(双破折号),这些长参数可以配合前面任意一种风格使用。不同风格的参数显示的信息也有所差别。
  • ps ps 命令默认只会显示运行在当前控制台下的属于当前用户的进程。

4.1.1.1, Unix参数风格的ps, 常用参数如下

  • ps -e   -e 参数指定显示所有运行在系统上的进程;
  • ps -f -f 参数则扩展了输出,这些扩展的列包含了有用的信息。
    • UID:启动这些进程的用户
    •  PID:进程的进程ID。
    •  PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
    •  C:进程生命周期中的CPU利用率。
    • STIME:进程启动时的系统时间
    •  TTY:进程启动时的终端设备。
    •  TIME:此进程累计消耗的CPU时间
    • CMD:启动的程序名称
  • ps -l -l参数获取更多字段
    •  F :内核分配给进程的系统标记。
    • S :进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,指进程完成了,但父进程没有响应;T代表停止)。
    •  PRI :进程的优先级(越大的数字代表越低的优先级)。
    •  NI :谦让度值用来参与决定优先级
    •  ADDR :进程的内存地址
    •  SZ :假如进程被换出,所需交换空间的大致大小
    •  WCHAN :进程休眠的内核函数的地址。
    •  

4.1.1.2, BSD风格的参数

  • ps l l参数与unix风格输出不同的字段如下
    • VSZ:进程在内存中的大小,以千字节(KB)为单位。
    • RSS:进程在未换出时占用的物理内存。
    •  STAT:代表当前进程状态的双字符状态码。
  •  

4.1.1.3, GNU长参数

  • ps --forest  --forest 参数会显示进程的层级信息,并用ASCII字符绘出可爱的图表

4.1.2,实时监测进程: top命令。【注:还有个更友好的 htop 命令】

  • 第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载,每5秒钟检查一次。值越大说明系统的负载越高。通常,如果系统的负载值超过了2,就说明系统比较繁忙了。

  • 第二行显示了进程概要信息—— top 命令的输出中将进程叫作任务(task):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

  • 第三行显示了CPU的使用情况。
  • 第四行显示了内存的使用情况。其中可用内存 = free + buff/cache。
    • 使用中的内存总量(used)指的是现在系统内核控制的内存数,
    • 空闲内存总量(free)是内核还未纳入其管控范围的数量。
    • 纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
  • 第五行显示了swap交换分区信息。我们要时刻监控这一行的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
  • 一次top示例解析:
    • 第一行:卍,当前时间:11:37:19,这个时间的更新频率即是top命令的刷新频率,可以通过内部命令s重新设置; 卍,系统运行时间:up 479 days, 11:30,即运行了479天11小时30分钟 卍,当前已登录的用户数:3users卍,最近1,5,15分钟的负载:1.35, 1.08, 0.64
    • 第三行:卍,4.0us(user space): 用户使用的CPU占4%;卍,3.1sy(sysctl):系统内核占用的cpu占3.1%;卍,68.2id(idle):空闲CPU占68.2%;卍,0.0ni:改变过优先级的进程占用CPU的百分比;卍,23.3wa(wait):IO等待占用CPU23.3%;
  • 默认情况下, top 命令在启动时会按照 %CPU 值对进程排序。通过top命令的交互命令可以对进程的显示方式进行控制,交互命令如下:
    • h - 显示交互命令帮助!
    • q – 退出 top。
    • 上下左右方向键 - 移动画面。
    • s 或 d - 改变进程列表刷新频率,默认是3s。按s后再输入一个数值即可改变。可以通过第一行的当前时间看出刷新频率。
    • l(小写的L) - 关闭或开启 第一部分第一行top信息的展示。
    • t -  关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示。
    • m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示。
    • N – 以 PID 的大小的顺序排列表示进程列表,从大到小排序。
    • P – 以 CPU 占用率大小的顺序排列进程列表,这也是默认排序方式。
    • M – 以内存占用率大小的顺序排列进程列表。
    • n – 设置在进程列表所显示进程的数量。
    • i - 忽略闲置和僵死进程。
    • k - 终止进程。先输入一个进程ID,然后输入发给此进程的信号signal。
  • top命令的参数: top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
    • top -p <pid> //只监控某个进程的状态
    • top -u <userName> // 只监控某个用户下的进程的状态
    • top -s // -s(小s) 参数使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险,如 k 交互指令将被禁用。

4.1.3,结束进程

  • 在Linux中,进程之间通过信号来通信。进程的信号就是预定义好的一个消息,进程能识别它并决定忽略还是作出反应。进程如何处理信号是由开发人员通过编程来决定的。大多数编写完善的程序都能接收和处理标准Unix进程信号。

  • kill -l 列出所有的信号
  • kill pid 默认向进程pid发送一个TERM(15)的信号。
  • kill -9 pid = kill -kill pid
  • killall xxxx  killall 命令非常强大,它支持通过进程名而不是PID来结束进程。 killall 命令也支持通配符,这在系统因负载过大而变得很慢时很有用。慎用!
  •  

4.1.4,


4.2,监测磁盘空间

4.2.1, 挂载存储媒体

  • Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的物理磁盘之前,需要把它放到虚拟目录下。这项工作称为挂载(mounting)。挂载的是磁盘的某个分区而不是整个磁盘。

  • mount 默认情况下, mount 命令会输出当前系统上挂载的设备列表。
  • mount device directory //device指磁盘的一个分区,directory称为挂载点
    •  -t 选项指明了要挂载的文件系统类型,如 mount -t ext4 device directory
    • 这种挂载文件系统的方法只能临时挂载文件系统。当重启Linux时,文件系统并不会自动挂载。要强制Linux在重启时自动挂载新的文件系统,可以将其添加到/etc/fstab文件中。
  • umount device 或 umount directory // umount 命令支持通过设备文件或者是挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它。可以使用lsof命令查看占用设备的程序。
    • umount -l device // -l (lazy) 参数可以在设备空闲时再卸载而不是立马就卸载。
  • lsof 用法见 此博文,lsof是一个很强大的命令。比起使用 netstat 查看网络连接情况,我更喜欢使用lsof来进行此项工作。
    • 因为lsof需要访问核心内存和各种文件,所以必须以root用户身份运行。
    • sudo netstat -nap | sed -n 1,3p //当输出过多时,可以通过sed -n 查看前3行输出,方便看到每个字段什么含义。
    • sudo lsof -i :<port> // 查看与指定端口相关的网络信息。类似于 netstat -nap| grep <port>
    • sudo lsof -i | grep <pid> //根据PID查找对应的端口号即其他相关网络信息。 类似于netstat -nap| grep <pid>
    • sudolsof -i |grep <user>`
  • df 命令可以让你很方便地查看所有已挂载磁盘的使用情况.

  •  df -h -h人性化阅读

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

  • du 显示当前目录下各个子目录(包括子目录的子目录)的占用空间大小

  • du dir 显示指定目录下各个子目录(包括子目录的子目录)的占用空间大小
  • du -a 显示所有文件占用大小(包括文件,目录,子目录,子目录下的文件)
  • du fileName 显示指定文件占用大小
  • du -s dir 只显示指定目录(不包含子目录)占用空间大小
  • du -S dir 显示指定目录及其子目录占用空间大小,但是父目录大小计算时不包含子目录的大小
  • du -c dir 显示指定目录(及其子目录)占用空间大小,并额外显示目录的总大小
  • du -b/-k/-m 显示大小单位为 byte/kb/mb
  • du -h显示单位为 human-readable, 以K,M,G为单位,提高信息的可读性,换算单位为1024。
  • du -H  同-h参数,但是换算单位为1000;
  • du -sh * ,常用命令组合,显示当前目录下 所有文件,目录(不包含子目录)占用大小
  • du -sh * | sort -nr 按占用空间大小倒序排列
    ·

4.3,处理数据文件

sort 命令(行级检测)

  • sort file 默认对文件中的所有行进行排序,默认排序规则是按照默认语言的排序规则,会将数字识别成文本
  • sort file file ... sort 支持对多个文件的排序(合并内容后排序)
  • sort -n file 将数字识别成数字而不是文本
  • sort -r file 倒序排
  • sort -t ":" file 用冒号":" 分割file中的内容,常常与-k参数连用
  • sort -k pos1[,pos2] file 排序从pos1开始,如果指定了pos2则到pos2结束。注意此参数必须与 -t 参数一起用才有意义,
  • sort -c <file> // 检查<file>是否已排序,该操作不会执行排序·
  • sort -u <file> // 输出排序后去重的结果

uniq 命令(行级检测)

  • uniq <file>  // <只>检查<file>文件中的相邻是否重复,如果重复则去重。
  • sort <file> | uniq //排序后去重,效果和 sort -u <file>相同

4.4, 搜索数据

关于grep工具涉及到的正则表达式,和平常的正则表达式规则有一些差异,主要是正则表达式有好几个流派:PCRE(Perl Compatible Regular Expression,这也是平常用的正则),POSIX(posix可以看做是unix操作系统的规范,防止不同版本差异过大带来的不便)规则下的正则表达式(又分成2类:BRE :basic regular expression; ERE :extended regular expression,虽然命名叫扩展,但并不要求兼容bre,实际是自成一派),具体可参阅这篇文章:Linux/Unix 工具与正则表达式的 POSIX 规范 。

  • grep [options]... pattern [file]...  global(G) search regular expression(RE) and print out the line。 使用正则表达式搜索文本,并把匹配的行打印出来。
  • grep pattern file1 file2 file3... 可以在多个文件中查找;
  • grep -v pattern file 反向搜索,输出不包含pattern的行;
  • grep -n pattern file 显示匹配行所在的行号;
  • grep -c pattern file 只显示匹配行的行数;
  • grep -e pattern1 -e pattern2 file 使用-e参数指定多个匹配模式;
  • grep -o pattern file 只输出匹配部分
  • grep -P pattern file  pattern为Perl格式的正则表达式
  • grep -E pattern file pattern为ERE格式的正则表达式,等同于egrep工具;
  • egrep
  • fgrep

4.5,压缩数据

  •  gzip [options]... [file]...
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值