Liunx Shell编程与编辑器使用详解-上

Liunx Shell编程与编辑器使用详解-上

文章目录

  • Liunx Shell编程与编辑器使用详解-上
    • 一、Shell 编程基础
      • 基本概念
        • 常用的Shell类型
        • Shell通配符的常用
        • IO 重定向
        • 管道(Pipe)
        • 命令的执行顺序
        • 运行脚本
    • 二、系统管理与设置
      • 2.1 常用的信息显示命令
        • cal 命令:日期显示
        • cat /proc/meminfo 内存使用情况查询
        • free命令: 内存详细信息查询
        • cat /proc/cpuinfo : 处理器CPU信息显示
        • cat /proc/modules : 查询当前系统被加载模块
      • 系统信息显示命令
        • proc 文件系统 : 访问系统内核信息
        • modinfo: 内核模块信息
        • cat /etc/issue: 系统的当前发行版本
        • /proc 目录下的相关文件
        • dmesg: 启动信息查询
      • 文件系统信息显示常用命令
        • echo : 文本行输出显示
        • isosize:iso9660文件系统大小显示
        • pwd : 当前工作目录
        • procinfo :系统状态信息的显示
        • stat :文件/文件系统的详细信息的显示
      • Liunx操作系统信息查询
        • uname : 操作系统信息的显示
        • vmstat :虚拟内存的统计信息的显示
        • uptime:系统的运行信息的显示
        • locale: 当前系统的语言设置
        • tload: 系统负载显示
        • lsmod:所有已加载模块的显示
      • 进程资源
        • top:进程信息显示
        • time : 进程执行时间显示
        • pstree:以树状图显示程序
        • ps :监测进程
        • pmap:显示程序的占用资源信息
        • jobs:后台作业
        • mev: 监视鼠标情况
        • fuser:用套接口或者文件识别进程
      • Liunx 终端命令行操作
        • fgconsole : 显示当前虚拟终端数目
        • history: 显示历史指令
        • gdialog:Shell脚本创建对话框
    • 参考
    • 小结

一、Shell 编程基础

基本概念

常用的Shell类型

Shell具有不同的风格,就像UNIX操作系统有不同的风格一样。每种不同风格都具有各自的命令喝功能,最常用的Shell包括Bourne Shell,、Bourne Again Shell、C Shell 、Korn Shell和Perl Shell等。

后面编程部分所设计的脚本语言,以Bourne Again Shell为例(Bash)。

Shell通配符的常用

Shell中支持使用通配符,常用的通配符如下所示。

  • ? : 表示任意的单个字符
  • ***** : 表示任意长度的任意字符串
  • [] : 表示匹配放在**[]**中的任意一个字符
  • {} : 将大括号中的字符串(表示多个字符)以及前导字符串和后继字符串作为匹配条件

我们可以看一下案例来了解其具体用法

Liunx Shell编程与编辑器使用详解-上_第1张图片

其实这里可能会比较混淆 [] 和 **{}**的用法。可以通过下面这个例子看出前面标出强调的一个和多个的区别

Liunx Shell编程与编辑器使用详解-上_第2张图片

IO 重定向

常用的输入输出重定向命令格式说明

命令行 说明
命令 1 > 文件 1 将命令1的输出结果重定向到文件1
命令 1 &> 文件1 将命令1的输出结果和标准错误输出一起重定向到文件1
命令1 >> 文件 1 将命令1的输出结果追加到文件1中
命令 1 2> 文件1 将命令1的标准错误输出的结果重定向到文件1中
命令1 < 文件1 将文件1 作为命令1的标准输入
命令1 << 字符串1 允许连续输入数据,直到接收到字符1

为了理解上述表格中的命令,我们以 >> 作为案例

image-20221029160749265

最后我们查看a.txt中有两行数据为:

a.txt
a.txt

cat 命令

cat 命令用于连接文件并打印到标准输出设备上

cat 通常与IO重定向同时使用

实例

把txt1 的文档内容加上行号输入txt2这个文档中:

cat -n txt1 > txt2

把txt1 的文档内容加上行号(空白行不加编号)输入到txt2这个文档中:

cat -b txt1 >> txt2

清空txt1 的文档内容:

cat /dev/null > txt1
管道(Pipe)

在Liunx系统中,管道的主要功能时将其他程序的输出结果直接导出到另一个程序来当成输入数据,管道的操作符是 |。管道语法格式为:

命令1 | 命令2 | ……

注意: 管道操作符的左边一定是一条送往标准输出设备的命令,管道操作符的右边一定是一条从标准输入设备读入的命令。

实例

Liunx Shell编程与编辑器使用详解-上_第3张图片

通过这个案例综合使用卡面提到的IO重定向以及liunx通配符的使用方法。

命令的执行顺序

命令的执行顺序可分为顺序执行和有条件执行。顺序执行是指多个命令依次执行,前后的命令并无因果关系。而有条件执行是指命令的前后之间存在条件关系,只有满足一定条件才能执行或不被执行。

顺序执行

顺序执行多个命令是指在命令行一条一条地输入命令,命令之间用(;)分隔,且分号前后的命令无因果关系。例如:

image-20221029164953912

这个例子中可以看到其中的三条命令依次被执行,并被输出。

这个其实就跟C语言里一行写多条命令差不多。

有条件执行

有条件执行分为 && 和 || ,区别如下:

  • &&:连接两个命令,前一命令执行成功后才能执行后一个命令,相当于逻辑与。
  • ||:连接两个命令,前一个命令执行不成功菜执行后一个命令,相当于逻辑或。

有条件执行可以在很多高级语言中可以看到。感觉最常见的是在js中,通过有条件执行来避免执行指令失败时奔溃。

实例

Liunx Shell编程与编辑器使用详解-上_第4张图片

运行脚本

这里我们简单实现一个sh可执行文件,见下例子:

Liunx Shell编程与编辑器使用详解-上_第5张图片

简单说明:

这里我们首先通过cat命令创建一个a.sh文件,并且通过vi查看文件中的内容。

然后我们尝试执行该sh文件 ,发现由于文件权限问题无法执行成功。

我们使用chmod u+x ./a.sh将文件的权限设成可读、可执行

若希望把文件名作为命令执行时,都必须具有执行权限。如果该文件时一个Shell脚本,用户尝试执行这个文件时,还需具备读权限。而在执行一个二进制可执行文件时,不需要读权限。

二、系统管理与设置

2.1 常用的信息显示命令

cal 命令:日期显示

cal 命令用于显示日历,配合选项“-y”可以显示全年的年历。cal命令的语法格式如下所示:

cal [-1] [-3] [-s] [-m] [-j] [-y] [month] [year]

各个选项的说明表

选项 说明
-1 显示单月份信息,默认设置
-3 显示前一月、当前以及下一月月历信息
-s 显示输出时将星期日作为每周的第一天,默认设置
-m 显示输出将星期一作为每周的第一天
-j 显示距1月1日的天数,即从1月1日开始计算
-y 显示整年日历
month 月份
year 年份

例如下图

Liunx Shell编程与编辑器使用详解-上_第6张图片

cat /proc/meminfo 内存使用情况查询

Liunx Shell编程与编辑器使用详解-上_第7张图片

注意:/proc目录下的文件并不是真正意义上的文件,关闭系统后,该目录中的文件不再存在。该目录通常用来帮助查看内核运行信息。

free命令: 内存详细信息查询

free命令用于显示系统使用和空闲的内存情况,设计的内存包括物理内存、交换分区内存(swap)和内核缓冲区内存以及高速缓存。free命令的参数列表如下:

选项 说明
-b 显示内存单位为字节
-k 显示内存的单位为KB
-m 显示内存的单位为MB
-g 显示内存的单位为GB
-o 按旧格式进行显示,即不显示"-/ + buffers/cache"行
-t 显示RAM以及swap的总和
-s delay 每隔指定时间刷新一次命令,单位为秒
-c count 设定刷新的次数
-V 显示输出版本信息并退出该命令

例如

Liunx Shell编程与编辑器使用详解-上_第8张图片

cat /proc/cpuinfo : 处理器CPU信息显示

文件/proc/cpuinfo中保存了处理器的相关信息,通过cat命令查看/proc/cpuinfo,可以查询CPU的相关信息。例如下图,由于信息过长这里只显示最后的10行

Liunx Shell编程与编辑器使用详解-上_第9张图片

cat /proc/modules : 查询当前系统被加载模块

文件/proc/modules中保存了当前系统中被加载模块的相关信息。配合cat命令可以查看当前系统加载模块的情况。

系统信息显示命令

proc 文件系统 : 访问系统内核信息

proc不是一个真实的文件系统,不占用外存空间,只是以文件的方式为访问Liunx内核数据提供接口。用户和应用程序可以通过查看/proc目录中的相关文件得到系统的运行信息,并可以改变内核的某些参数。由于系统的信息总是动态变化的,所以用于或应用程序读取/proc目录下的文件时获得的数据也是瞬时的。许多应用程序通过proc来访问Liunx内核信息。查看 /proc目录如下。

image-20221031113543884

其中,每个以数字命令的目录对应系统中运行的一个进程,该数字即为进程的PID号。数字目录中存放了该进程的运行信息,可以通过相应的命令进行查询。例如查询系统中运行的vi程序的相关信息。

Liunx Shell编程与编辑器使用详解-上_第10张图片

注意:

/proc目录中,可以通过查看 cpuinfo文件获得处理器的详细信息;通过 interrupts文件可以查看当前系统使用的中断号;通过 uptime 文件可以查看系统运行的时间;通过 filesystems文件,可以查看当前文件系统支持的文件系统类型

modinfo: 内核模块信息

modinfo命令用来显示内核模块信息。 modinfo命令会检测到与内核相关的模块文件,并显示检测的结果。其中,下表为参数选项说明:

选项 说明
-a 显示模块作者
-d 显示模块描述信息
-l 显示模块许可
-n 显示模块文件名称
-p 显示模块支持的参数信息
-V 显示版本信息
-h 显示帮助信息

使用这个命令时我们可以搭配前面的cat /proc/modules先找到想要查看的模块信息,例如:

Liunx Shell编程与编辑器使用详解-上_第11张图片

windows子系统下的Ubantu好像没有/proc/modules

cat /etc/issue: 系统的当前发行版本

文件/etc/issue中保存了当前系统的发行版本。配合使用 cat命令可以显示输出版本信息。例如:

image-20221031120145452

/proc 目录下的相关文件
文件 说明
cat /proc/version 查看系统内核当前版本
cat /proc/partitions 查看系统当前分区
cat /proc/interrupts 显示中断信息
cat /proc/filesystems 查用文件系统信息
dmesg: 启动信息查询

dmesg命令可以检测和控制内核的缓存,通常用来显示输出系统最后依次启动时的内核内部缓存信息。dmesg命令的参数列表如下所示:

选项 说明
-c 显示信息后清空缓冲区中的信息
-n level 设置将日志信息进行输出的级别,如设置为“n !”将只显示输出panic级别的信息
-s bufsize 设置查询所需的缓冲区大小,默认是16392字节

例如:

Liunx Shell编程与编辑器使用详解-上_第12张图片

文件系统信息显示常用命令

echo : 文本行输出显示

echo命令可以将参数输出到标准输出设备上,多个参数之间默认用空格分隔,在输出完成后自动添加换行符。echo命令通常用于显示输出我呢本行,该命令的参数选项说明如下:

选项 说明
-n 不输出最后的换行符“\n”
-e 对转义字符进行解析
-E 不解析转义字符
–help 显示输出帮助信息
–version 显示输出版本信息
string 指定显示的字符串

不同的Shell所支持的echo命令稍有不同

isosize:iso9660文件系统大小显示

isosize 命令用于显示输出iso9660文件系统的大小。该文件可以是普通的文件,也可以是一个块设备,如/dev/hdd或者/dev/sr0。该命令的参数选项为:

选项 说明
-x 以用户易读的方式进行显示
-d num -x不同时使用,显示的结果是实际大小(字节表示)除以指定的num,所以如果num代表“块”大小,则输出的结果将是块数
iso9660_image_file 指定iso9660文件系统
pwd : 当前工作目录

pwd命令用于显示用户当前所在目录的绝对路径。pwd命令的语法格式如下所示

pwd [--help] [--verison]
procinfo :系统状态信息的显示

procinfo命令用来显示系统的状态信息,其信息来源自/proc目录。procinfo命令可以显示在下表所示信息。

显示信息内容 说明
Memory(内存) 显示内存信息,与free命令显示内容相似
Bootup (启动) 系统的启动时间
Load average (平均负载) 显示正在运行作业的平均数,正在运行的进程数和所有进程的数目
User(用户) 运行作业所消耗的用户时间
Nice(优化) 运行优化作业所消耗的用户时间
System(系统) 运行作业所消耗的系统时间

示例

Liunx Shell编程与编辑器使用详解-上_第13张图片

stat :文件/文件系统的详细信息的显示

stat命令用于显示文件或文件系统的详细信息,该命令语法参数列表如下表所示。

选项 说明
-f 不显示文件本身的信息,显示文件所在文件系统的信息
-L 显示符号链接
-t 简洁模式,只显示摘要信息
–help 帮助信息
–version 版本信息
filename 待查询的文件名称

示例

Liunx Shell编程与编辑器使用详解-上_第14张图片

Liunx操作系统信息查询

uname : 操作系统信息的显示

uname用于显示操作系统信息,其参数说明如下

选项 说明
-a 显示全部信息
-s 显示内核名称
-n 显示网络主机名称
-r 显示内核版本
-m 显示主机的硬件名称
-p 显示处理器类型
-i 显示主机的硬件平台
-o 显示所使用的操作系统名称

示例

image-20221031185205729

vmstat :虚拟内存的统计信息的显示

vmstat命令用来显示虚拟内存的统计信息,该命令的语法格式如下所示:

vmstat [-V] [-n] [-a] [delay] [count]

示例

image-20221031185453293

uptime:系统的运行信息的显示

uptime命令用于显示系统的运行信息,包括当前系统时间,系统已经运行的时间,用户登录数以及在过去1、5、15分钟内的系统的平均负载。

示例

image-20221031185750358

locale: 当前系统的语言设置

locale命令用于显示当前系统的语言设置,该命令参数说明如下所示:

选项 说明
-a 输出所有可用的语言名称
-m 输出所有可用的字符集
-c 按指定的类别输出
-k 按指定的关键字输出
-v 输出更多信息
-V 输出命令的版本号
tload: 系统负载显示

tload命令用于以图形方式显示系统的负载信息

选项 说明
-d 刷新的间隔时间,以秒为单位
-s 指定垂直方向的刻度,刻度越小,垂直方向的高度越大
Tty 指定显示终端
-V 显示版本信息

示例

Liunx Shell编程与编辑器使用详解-上_第15张图片

lsmod:所有已加载模块的显示

lsmod命令用于显示所有已加载的模块信息,其显示的信息与文件/proc/modules的内容相同。lsmod命令的语法格式如下所示:

lsmod [-V] [-h]

进程资源

top:进程信息显示

top命令可以动态显示当前系统中消耗资源最多的进程。top命令与ps命令的基本作用相同,都是用来显示当前的进程及其状态。但top命令能够实现动态显示,可以不断刷新当前状态,即top命令提供了对系统处理器的实时监测。

Liunx Shell编程与编辑器使用详解-上_第16张图片

time : 进程执行时间显示

time命令可以计算执行一个进程所需要的时间,包括实际CPU时间、用户时间、系统时间。

Liunx Shell编程与编辑器使用详解-上_第17张图片

pstree:以树状图显示程序

pstree命令将所有进程以树状图的方式进行显示。树状图默认会以init进程为根,如果指定了pid选项,则只显示指定进程为根的树状图。pstree的参数列表如下所示:

选项 说明
-a 显示进程完整的指令及其参数
-p 显示进程的进程号
-c 不进行精简,即对不同等的子树进行压缩
-h 高亮显示当前正在执行的进程及其父进程
-u 显示用户名称
-l 不对过长的记录进行剪切
-n 以PID进行排序
–user 显示指定用户的子树
–version 显示版本信息

示例

Liunx Shell编程与编辑器使用详解-上_第18张图片

ps :监测进程

ps命令用于监测进程的工作情况。进程正在运行的程序,一直处于动态变化过程中,而ps命令所显示的工作状态时瞬时的。如果试图连续查看某一进程的工作情况,必须连续使用该命令或者换用能够动态显示进程状态的top命令。ps的参数说明列表如下:

选项 说明
-a 显示所有的进程,包括其他用户线程
-A 显示所有进程
a 所有终端进程,但不包括session leaders
c 显示命令名称
-N 反向选择
-e 显示所有进程,等于-A
e 显示环境变量
-s 指定会话相关进程
-o,o 按用户自行定义的内容进行显示
-u 选择显示有效的UID或用户名
x 显示没有控制终端的进程
-m 显示线程
-H 显示树状结构
r 仅显示正在运行的进程
T 显示当前终端的所有进程
-U 指定用户的进程
-C 指定命令相关的进程
–help 帮助信息
–lines 显示行数
–width 每行显示的字符数
–version 版本信息

示例

Liunx Shell编程与编辑器使用详解-上_第19张图片

pmap:显示程序的占用资源信息

pmap命令用来显示指定程序的内存信息。该指令的语法格式如下:

pmap [pid] [/proc/pid]

例如,首先使用ps命令查询出PID,然后通过pmap查询进程的详细内存信息。

Liunx Shell编程与编辑器使用详解-上_第20张图片

jobs:后台作业

jobs命令显示当前正在后台执行的作业。在获得作业的相关信息之后,可以对作业进行进一步操作,如使用fg命令将作业调到前台执行,或者使用kill命令杀死指定的作业。jobs命令的参数列表如下:

选项 说明
-p 仅列出作业ID
-n 仅列出已经更改状态的作业ID
-l 列出后台作业的所有信息
-s 仅列出已经停止的作业
-r 仅列出正在运行的作业
mev: 监视鼠标情况

mev命令时gpm包的一部分,可以将鼠标控制口的事件打印到标准控制台上。该命令的参数列表如下:

选项 说明
-C number 选择虚拟控制台
-d number 选择默认掩码,所有不属于世卿颜的事件都不会被打印
-e 选择事件掩码
-E emacs模式,在emacs模式下,鼠标事件不再以数字格式表示,而是以lisp被表示
-l 交互模式,接受从标准终端输入的命令,并依次改变连接参数
-f 识别屏幕内的拖拽事件
-m number 最小修正掩码,低于这个修正码的事件将不被上报
-M number 最大修正掩码,高于这个修正掩码的事件将不被上报
-p 在拖拽期间描绘出指针的轨迹
-u 用户模式,该项为默认项
fuser:用套接口或者文件识别进程

fuser命令可以利用指定的文件或者套接口对进程进行识别,该命令的参数列表如下:

选项 说明
-l 显示信号列表
-4 ipv4
-6 ipv6
-a 显示与指定文件或目录相关的进程,包括未正在使用的文件
-k 杀死访问文件的进程
-i 交互模式,在杀死进程之前进行查询
-s 静默模式,不显示处理信息
-u 显示用户ID
-v 运行时,显示详细的处理信息
-V 显示版本信息
- 清零
-m 挂载文件系统
-n space 搜索指定的名字空间
-signal 发送信号
  • c : 当前目录
  • e : 扩展
  • f : 打开的文件
  • r : 根目录
  • m : 共享库

示例

image-20221031230153591

Liunx 终端命令行操作

fgconsole : 显示当前虚拟终端数目

fgconsoel命令用来显示活动的虚拟终端(vt)的数目。例如:

# fgconsole 		// 显示vt数目 
8
history: 显示历史指令

history命令保留了最近执行的命令记录,默认可以保留500个.历史清单从0 开始编写,直到保留最大值。history命令的参数列表如下:

选项 说明
n 显示历史记录中最近的 n 个记录
-a 将当前命令添加到历史记录中
r 读取历史记录,但不会添加到历史记录中
w 覆盖原有的history文件
-c 清除所有的历史记录
-d offset 删除历史记录中第offset个命令
-n filename 读取指定文件

示例

Liunx Shell编程与编辑器使用详解-上_第21张图片

gdialog:Shell脚本创建对话框

gdialog命令用来从Shell脚本创建对话框。gdialog目前支持的对话框包括:yes/no对话框,menu对话框、input对话框、message对话框、text对话框、info对话框、checklist对话框、radiolist对话框以及gauge对话框。gdialog命令的参数列表具体如下:

选项 说明
–title 设置对话框的标题
–backtitle backtitle 设置背景标题
–create-rc file 将对话框的基本配置信息输出到指定文件
Box options 对话框选项说明

参考

  • 《Liunx Shell编程与编辑器使用详解》

小结

感觉花时间看+跟着敲一遍还是很有必要的。就是比较花时间,虽然这个是上,不过应该不会有下了

你可能感兴趣的:(Liunx,编辑器,bash,unix)