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

初识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系统用来读写数据的标准的文件系统。

文件系统 描述
ext Linux扩展文件系统,最早的Linux文件系统
ext2 第二扩展文件系统,在ext的基础上提供了更多 的功能
ext3 第三扩展文件系统,支持日志功能
ext4 第四扩展文件系统,支持高级日志功能
hgfs OS/2高性能文件系统
ISO9660 ISO 9660文件系统(CD-ROM)
minix minix文件系统
msdos 微软的FAT16
ncp Netware文件系统
nfs 络文件系统
ntfs 支持Microsoft NT文件系统
proc 访问系统信息
ReiserFS 高级Linux文件系统,能提供性能和硬盘恢复功能
smb 支持 络访问的Samba SMB文件系统
sysv 软早期的Unix文件系统
ufs BSD文件系统
umsdos 建立在msdos上的类Unix文件系统
vfat Windows95文件系统(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

选项 参数 描述
-background black, red, green, yellow, blue, magenta, cyan, white 将终端的背景色改为指定颜色
-foreground black, red, green, yellow, blue, magenta, cyan, white 将终端的前景色改为指定颜色
-inversescreen on或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 进程目录,存放现有硬件及当前相关信息
/root root用户的主目录
/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进程信 :

名称 描述
1 HUP 挂起
2 INT 中断
3 QUIT 结束运行
9 KILL 无条件终止
11 SEGV 段错误
15 TERM 尽可能终止
17 STOP 无条件停止运行,但不终止
18 TSTP 停止或暂停,但继续在后台运行
19 CONT 在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参数一起使用时,公输出第一例相似的两行
-z –zero-terminated 用NULL字符作为行尾,而不是用换行符

搜索数据

grep

grep [option] pattern [file]

常用参数:

  • -v: 输入不匹配该模式的行
  • -n: 显示行
  • -c: 统计符合匹配的行数
  • -e:多模式匹配,每个参数使用-e来标识
  • parttern支持正则表达式
fgrep

压缩数据

Linux文件压缩工具

工具 文件扩展名 描述
bzip2 .bz2 采用Burrows-Wheeler块排序文本压缩算法和霍夫曼编码
compress .Z 最初的Unix文件压缩工具,已经快没人用了
gzip .gz GNU压缩工具,用Lempel-Ziv编码
zip .zip Windows上PKZIP工具的Unix实现
gzip

这个软件意在编写一个能够替代原先Unix中compress工具的免费版。它包含以下工具

  • gzip: 用来压缩文件
  • gunzip: 用来解压缩

归档数据

tar

tar function [options] object1 object2 …

function参数定义了tar命令应该做什么,如下:

功能 长名称 描述
-A –concatenate 将一个已有的tar归档文件追加到另一个已有tar归档文件
-d –create 创建一个新的tar归档文件
-d –diff 检查归档文件和文件系统的不同之年
–delete 从已有tar归档文件中删除
-r –append 追加文件到已有tar归档文件末尾
-t –list 列出已有tar归档文件中的内容
-u –update 将比tar归档文件中已有的同名文件新的文件追加到该 tar归档文件中
-x –extract 从已有tar归档文件中提取文件

tar命令选项

选项 描述
-C dir 切换到指定目录
-f file 输出结果到时文件或设备file
-j 将输出重定向给bzip2命令来压缩内容
-p 保留所有文件权限
-v 在处理文件时显示文件
-z 将输出重定向给gzip命令来压缩内容

理解 Shell

shell的类型

系统启动什么样的shell程序取决于你个人的用户配置。在/etc/passwd文件中,在用记ID记录的第7个字段中列出了默认的shell程序。

shell的父子关系

bash shell程序可使用命令行参数修改shell启动方式。

常用参数:

参数 描述
-c string 从string中读取命令并进行处理
-i 启动一个能够接收用户输入 的交互式shell
-l 以登录shell的形式启动
-r 启动一个受限shell,用户会被限制在默认目录中
-s 从标准输入中读取命令

进程列表

将所有命令写在一行并以分 分隔,最后使用圆括 括起所有命令。

(pwd; cd; ls; echo $BASH_SUBSHELL)

加入括 使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。

进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括 中,并在命令列表尾部加上分 (;)。语法为{command; }。使用花括 进行命令分组并不会像进程列表那样创建出子shell.

别出心裁的子shell用法

探索后台模式
sleep

在后台模式中运行命令可以在处理命令的同时让出CLI,以供使用。

演示后台模式的一个经典命令就是sleep。

sleep接受一个cdvo,yynw参数是你希望进程等待的秒数。

sleep 10 &

想要将命令置入后台模式,可以在命令末尾加上字符&。

jobs

可以显示出当前运行在后台模式中的所有用户的进程。

参数:

  • -l: 显示后台进程的PID
将进程列表置入后台

&

协程

协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。

要进程协程处理,得使用coproc命令,还有要在子shell中执行的命令。

e.g.

理解shell的内建命令

外部命令

外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是sheel程序的一部分。外部命令程序通常位于/bin,/usr/bin,/sbin或者/usr/bin中。

我们可以使用which和type命令找到它们。

当外部命令执行时,会创建一个子进程。这种操作被称为衍生(forking)。

内建命令

内建命令与外部命令的区别在于前都不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。

因为不既不需要通过衍生出子进程来执行,也不需要打开程序文件,内建命令的执行速度要更快,效率也高。

history

可以查看最近用过的命令列表,通常历史记录中会保存最近的1000条命令。你也可以修改这个数字,你需要修改名为HISTSIZE的环境变量。

  • history -a: 可以将命令历史强制写入.bash_history文件。
命令别名

alias命令是另一个shell的内建命令。它允许你为常用的命令及其参数创建另一个名称,从而将输入量减少到最低。

很多Linux发行版很有可能已经为你设置好了一些常用命令的别名。可以使用alias -p查看。

使用Linux环境变量

Linux环境变量能帮你提升Linux shell体验。很多程序和脚本都通过环境变量来获取系统信息、存储临时数据和配置信息。

什么是环境变量

在bash shell中,环境变量分为两类:

  • 全局变量
  • 局部变量

全局环境变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建他们的shell可见。

查看全局变量,可以使用env或printenv命令。

要显示个别环境变量的值,可以使用printenv命令。

printenv HOME

也可以使用echo $环境变量名

echo $HOME

局部环境变量

局部变量只能在定义它们的进程中可见。

在Linux系统中没有一个只显示局部环境变量的命令。

set命令会显示为某个特定进程设置的所有环境变量,包括局部变量,全局变量以及用户定义变量。

设置用户定义变量

可以在bash shell中直接设置自己的变量。

设置局部用户定义变量

我们可以通过等 给环境变量赋值,值可以是数值或字符串。

my_variable=Hello

echo $my_variable

如果要给变量赋一个含有空格的字符串值,必须用单引 来界定字符串的首和尾。

变量名,等 和值之间不能有空格。

设置全局环境变量

方法是:先创建一个局部环境变量,然后再把它导出到全局环境中。

使用export命令完成命令导出到全局环境,变量名前不需要加$.

删除环境变量

unset

注意: 在涉及环境变量名时,如果要用到变量,使用

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年11月26日
下一篇 2018年11月26日

相关推荐