grep命令

三剑客

  • grep 文本过滤工具

  • sed sream editor,流编辑器,文本编辑工具

  • awk 文本报告生成器,格式化文本

正则表达式

表示控制或通配的功能的特殊字符

  • 基本正则表达式 BRE

  • 拓展正则表达式 ERE

  • Notes

grep:Global search ERgular expression and Print out the line(输出的是行)

  • 文本搜索工具,根据用户指定的“模式”,对目标文本进行匹配检查,打印匹配到的行

  • 模式:由正则表达式的元字符及文本字符所编写的过滤条件

  • 格式:

grep [options] Pattern [file]

  • grep [OPTIONS] -e PATTERN … [FILE…]

  • grep [OPTIONS] -f FILE … [FILE…]

  • OPTIONS:

–color=auto 文本着色

  • -I : Ignore 忽略大小写

  • -O:只显示匹配到的文本

  • -V :反向匹配

  • -E :支持拓展的正则表达式

  • -Q:–quiet 不输出任何信息

  • -A#,-B#,-C#,输出上下的行,A后,B前,C前后

  • 基本正则表达式的元字符

字符匹配

. 匹配任意单个字符

  • 分组符号(括号)
1
2
3
4
5
6
7
- 引用,分组括号中的模式匹配到的内容会被正则表达式自动记录下内部变量中
- \1,从左侧起,第一个括号匹配到的字符
- \2
- \3
- 等等
- ```
grep "\(l..e\).*\1" lovers.ext 这样就可以保证同一行中前后出现的一样。

Linux下图形和命令行的切换

图形切换命令行
1
systemctl set-default multi-user.target
命令行切换图形
1
systemctl set-default graphical.target

sed命令详解

sed:字符流编辑器

工作流程:sed会读取文件里的行,然后缓存到sed模式空间,接着开始处理符合规则的行,不符合规则的行会输出到屏幕,符合规则的行也会输出到屏幕。在这个过程中,它只处理了缓存里的数据,没有修改原文件

使用格式

1
sed [options][sed内置命令字符] [输入文件]
  • 选项参数
    -n 取消默认sed输出,常与内置命令p一起使用

  • -i 将修改结果写入文件

  • -e 多次编辑,不需要管道符

  • -r 支持正则表达

  • sed内置命令字符
    a 对文本 进行追加

  • d 删除匹配行

  • i 在指定行前插入一行或者多行文本

  • p 打印匹配的内容,通常与-n一起使用

  • s/被替换/替换上的/g 把前面的换成后面的,g代表全局

  • sed匹配范围(在内置命令前写上)
    空地址 全文处理,什么都不写

  • 单地址 指定文件某一行,数字

  • /pattern/ 被模式匹配到的每一行

  • 范围区间
    10,20 十到二十行

  • 10,+5 第十行加上 向下5行

  • /pattern1/,/pattern2/

  • 步长
    1~2 表示从第一行开始步长为2的行

shell脚本编程实现

根据其编程过程中调用库还是调用外部的程序文件

  • shell脚本编程

​ 利用系统上的命令及编程组件进行编程

  • 完整编程

​ 利用库或编程组件进行编程

shell脚本编程:过程式编程,解释运行,依赖于外部程序文件运行

如何写shell脚本

  • 第一行顶格写shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件如

#!/bin/bash

  • #!/usr/bin/python

  • #!/usr/bin/perl

Notes:

​ 所以xx.sh其实是一个文本文件,运行这个文件真正的过程是内核读取了文件前面的内容,并用bash去运行文本里的内容。所以当bash xx.sh时,xx.sh并不需要+x权限。

​ 脚本中的空白行和#开头的行都会被忽略,除了shebang.

  • 文本编辑器

行编辑器:sed

  • 全屏幕编辑器:nano ,vi,vim

  • bash的配置文件

profile类:为交互式登录的shell提供配置,交互式:通过某终端输入账号密码登录打开的shell;通过su - username或 su -l username打开的终端;

​ 全局:对所有用户都生效;

​ /etc/profile

​ /etc/profile.d/*.sh

​ 局部:对单个用户生效

​ ~/.bash_profile

​ 功用:

​ 用于定义环境变脸

​ 运行命令或脚本

  • bashrc类:为非交互式登录的shell提供配置,非交互式:su username;在图形界面打开的终端;运行脚本的时候的子shell;

​ 全局:

​ /etc/bashrc

​ 用户个人:

​ ~/.bashrc

​ 功用:

​ 定义本地变量

​ 定义命令别名

​ 交互式登录shell进程:​ /etc/profile—->>/etc/profile.d/*——->/.bash_proflie——>/.bashrc——>/etc/bashrc

​ 非交互的shell:

​ ~/.bashrc——>/etc/bashrc——>/etc/profile.d/*

  • 命令行定义的特性,在当前shell有效

  • 配置文件定义的特性,在下一次有效

通过命令行重新定义一次

  • 重新加载一次配置文件
    source

  • .

shell脚本逻辑判断和参数传递

向脚本传递参数

  • 位置参数,ls /etc ,/etc就是命令传递进去的参数

  • $1,$2,$3…${10},${11}

  • shift n ,轮替前n个参数,踢掉

  • 特殊变量
    $0,脚本路径本身

  • $#,传递参数个数

  • $@,所有参数

  • $*,所有参数

执行顺序

  • 选择执行

单分支

1
2
3
if 测试条件;then (then可以写在下面,不带;)
代码分支
fi
  • 双分支
1
2
3
4
5
if 测试条件;then
分支1
else
分支2
fi

shell脚本高级用法

循环执行

  • for

  • while

  • until

  • 循环控制语句

continue,提前结束本轮循环

  • break,结束循环

  • while特殊用法:遍历文件的行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while read VAR;do
循环体;
done

#### 控制语句

- 多分支if,执行到一个结束就不执行了



```shell
if condtion1;then
...
elif condition2;then
...
elif condition3;then
...
else
...
fi
  • case语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
case $VAR in
PAT1)
分支1
;;
PAT2)
分支2
;;
PAT3)
分支3
;;
*)
分支4
;;
esac

获取命令帮助

程序的组成部分

  • 二进制程序文件

  • 库文件

  • 配置文件

  • 帮助文件

命令语法通用格式

  • COMMAD OPTIONS ARGUMENTS,如ls -l /etc ,-l就是OPTIONS,/etc 就是arguments
1
2
3
4
5
options 通常有两种表现形式
短:-c ,-T等,一般可以合起来写
长:--password等
有些选项可以自带参数,如--name mysql
arguements :表示命令对什么生效
  • 普通命令 /bin, /usr/bin, /usr/local/bin

  • 管理命令/sbin, /usr/sbin,/usr/local/sbin

  • 共享库:/lib, /usr/local/lib,/usr/local/lib

Notes

  • type命令 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

  • alias:别名。

  • keyword:关键字,Shell保留字。

  • function:函数,Shell函数。

  • builtin:内建命令,Shell内建命令。

  • file:文件,磁盘文件,外部命令。

  • unfound:没有找到。

获取命令的使用帮助

Notes:

  • 内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。

  • 外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存

内部命令

  • help

外部命令

  • 自身的命令 –help

  • 手册manual

  • `man
    NAME:名字和简要说明
    SYNOPSIS:简要格式
    []:可省略
    <>:必须提供
    a|b:多选一
    …:同类可出现多个
    DESCRIPTION:描述
    OPTIONS:选项
    COMMANDS:下级命令

man以压缩文件的格式存储信息
/usr/share/man
man1,man2….章节
1.用户命令
2.系统调用
3.C库调用
4.设备文件以及特殊文件
5.配置文件格式
6.游戏使用帮助
7.杂项
8.管理工具和守护进行
`

  • info 命令

​ 获取在线文档

  • 自带的帮助文档

​ /usr/share/doc/APP-VERSION

​ 三个主要文件

README:程序相关信息

  • INSTALL:安装信息

  • CHANGES:版本迭代更新信息

arm64开发板上armbian换源报错E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/dists/focal/restricted/binary-amd64/Packages 404 Not Found [IP: 101.6.15.130 443]

sources.list如图

sources.list

apt报错

结果 sudo apt update 却遇上了报错

分明使用的是ubuntu-ports,处理器架构也是arm64,apt 怎么会去获取amd64的软件包呢,多次换源无果,实在令人难解。

好在根据关键词多次搜索,终于发现原因所在。使用dpkg查看系统软件包架构发现

1
2
3
ajin@CRRC:~$ dpkg --print-foreign-architectures
armhf
amd64

这一指令可以显示已安装软件包中包含的其他体系架构,比如系统本身是64位的,而用户安装了一个32位的软件,则这个32位的体系结构就被称为”foreign-architectures”.

所以解决方法就是用dpkg来移除这个amd64的额外架构。

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
ajin@CRRC:~$ sudo dpkg --remove-architecture amd64
ajin@CRRC:~$ sudo apt update
命中:1 http://mirrors.tuna.tsinghua.edu.cn/armbian focal InRelease
命中:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal InRelease
命中:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates InRelease
命中:4 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-backports InRelease
命中:6 http://ppa.launchpad.net/openjdk-r/ppa/ubuntu focal InRelease
命中:7 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
命中:5 http://mirrors.ustc.edu.cn/armbian focal InRelease
命中:8 https://download.docker.com/linux/ubuntu focal InRelease
获取:9 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal/universe armhf Packages [10.9 MB]
获取:10 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal/restricted armhf Packages [10.8 kB]
获取:11 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal/main armhf Packages [1,227 kB]
获取:12 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal/multiverse armhf Packages [141 kB]
获取:13 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates/multiverse armhf Packages [9,898 B]
获取:14 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates/restricted armhf Packages [21.9 kB]
获取:15 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates/main armhf Packages [1,835 kB]
获取:16 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates/universe armhf Packages [1,172 kB]
获取:17 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-backports/universe armhf Packages [27.8 kB]
获取:18 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-backports/main armhf Packages [54.7 kB]
获取:19 http://ports.ubuntu.com/ubuntu-ports focal-security/universe armhf Packages [887 kB]
获取:20 http://ports.ubuntu.com/ubuntu-ports focal-security/multiverse armhf Packages [5,099 B]
获取:21 http://ports.ubuntu.com/ubuntu-ports focal-security/main armhf Packages [1,475 kB]
获取:22 http://ports.ubuntu.com/ubuntu-ports focal-security/restricted armhf Packages [21.6 kB]
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有 286 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。

之后果然没有报错了。

另外一种解决方法是在/etc/apt/sources.list中去指定自己需要的架构的软件包
1
deb [arch=arm64] https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse

双端备份APP

一个在局域网内工作的Linux和Android双端简易文件备份项目。Linux作为存储端,安卓作为客户端工作。在Linux上,主要的管理方式为web.

安卓端

  • 自动备份/查看照片

  • 自动备份指定的文件夹

  • 文件共享,用于传输指定文件

  • 远程下载

Linux端

  • 存储客户端照片视频并进行展示

  • 存储客户端文件并提供在线文件管理

  • 文件共享管理

  • 提供常见传输协议,如ftp,samba的gui设置

  • 提供磁盘管理

概述

关系数据库是支持关系模型的数据库系统,关系模型分为关系数据结构,关系操作集合和关系完整性约束。2.1将给出关系数据结构的形式化定义,2.2将介绍关系操作,2.3讲解三类完整性约束,2.4以及2.5讲解关系代数和关系演算

2.1

域:具有相同的的数据类型的值的集合称为域。域内允许的不同取值个数称为域的基数。

笛卡尔积:笛卡尔积是域的取值的全组合。

关系:笛卡尔积的子集称为关系,可按照属性的个数分为单元,二元,多元关系。如果关系中的某一属性组(最小)可以唯一标识一个元组,则这个属性组称为候选码。

主属性:候选码的诸属性称为主属性,其余称为非主属性。

2.2关系模式

关系的描述称为关系模式,给出形式R(U,D,DOM,F)其中R是关系名,U为其中的属性,DOM是属性向域的映像集合,F为属性间的依赖关系集合。

2.3关系的操作

关系的操作可分为增删查改,其中查询又是其中主要的一部分。查询操作可分为选择(select),投影()

习题

1.简述关系数据库语言的特点和分类

1
可以分为三类:关系代数语言,关系演算语言和具有关系代数语言和关系演算语言双重特点的语言。关系数据语言能够表示关系代数可以表示的查询,具有完备的表达能力。

2.定义以下术语,说明联系和区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(1)域,笛卡尔积,关系,元组,属性
域:域是一组有相同数据类型的集合
笛卡尔积:域之间不加条件的连接
关系:笛卡尔积的自己称为关系
元组:每个关系中的元素
属性:二维表中的一列称为属性
(2)主码,候选码,外码
主码.候选码中被选定的一个
候选码:能唯一标识一个元组的最小集合称为候选码
外码:参照外部表的码,并且自身不是码的属性称为外码
(3)关系模式,关系,关系数据库
关系模式:关系的描述称为关系模式,主要描述了关系名,属性名,域名,映像集合,属性间的依赖
关系:关系模式在某一时刻的内容
关系数据库:在给定的应用领域中,所有关系构成一个关系数据库

-

1
2
6.
7.
0%