禅道博客

分享专业技术知识,文章内容干货满满

读书笔记《Linux命令行shell脚本编程大全》第24-26章

2023-12-21 15:16:57
牟月月
原创 491
摘要:本文主要学习、记录了书中第24-26章的学习心得和体会。

一、归档

1. 需要的功能

Linux中归档数据的主要工具是tar命令。tar命令可以将整个目录归档到单个文件中。下面的例子是用tar命令来创建工作目录归档文件。

tar命令会显示一条警告消息,表明它删除了路径名开头的斜线,将路径从绝对路径名变成相对路径名。这样就可以将tar归档文件解压到文件系统中的任何地方了。

这样就可以将tar归档文件解压到文件系统中的任何地方了。你很可能不想在脚本中出现这条消息。这种情况可以通过将STDERR重定向到/dev/null文件来实现。

由于tar归档文件会消耗大量的磁盘空间,最好能够压缩一下该文件。这只需要加一个-z选项就行了。它会将tar归档文件压缩成gzip格式的tar文件,这种文件也叫作tarball。


2. 创建逐日归档文件的存放位置

如果你只是备份少量文件,那么将这些归档文件放在你的个人目录中就行了。但如果要对多个目录进行备份,最好还是创建一个集中归档仓库目录。


二、管理用户账号

1、需要的功能

删除账户在管理账户工作中比较复杂。在删除账户时,至少需要4个步骤:

(1) 获得正确的待删除用户账户名;

(2) 杀死正在系统上运行的属于该账户的进程;

(3) 确认系统中属于该账户的所有文件;

(4) 删除该用户账户。


2、查找属于账户的文件

要找到用户文件,你可以用find命令。find命令用-u选项查找整个文件系统,它能够准确查找到属于该用户的所有文件。该命令如下:

find / -user $USER_ACCOUNT > $REPORT_FILE

删除账户

从系统中真正地删除该用户账户。这里用到了userdel命令:

userdel $USER_ACCOUNT

运行脚本

在测试脚本前,需要为脚本文件设置适合的权限。

 chmod u+x yunxing.sh

说明 要运行这种脚本,你必须以root用户账户的身份登录,或者使用sudo命令以root用户账户身份运行脚本。


Sudo ./yunxing.sh 


检测磁盘空间

如果你的Linux系统应用于生产环境,那么就不能依赖磁盘空间报告来避免服务器的磁盘空间被填满。应该考虑使用磁盘配额。如果已经安装了quota软件包,可以在shell提示符下输入man –k quota获得有关磁盘限额管理的更多信息。如果没有安装这个软件包,可以使用任何你喜欢的搜索引擎获取进一步的信息。


MySQL 数据库

mysql命令:mysql程序使用两种不同类型的命令:

(1) q 特殊的mysql命令
(2) q 标准SQL语句

mysql程序使用它自有的一组命令,方便你控制环境和提取关于MySQL服务器的信息。这些命令要么是全名(例如status),要么是简写形式(例如\s)。你可以从mysql命令提示符中直接使用命令的完整形式或简形式。

Show databases;查看创建的数据库

我们用SQL命令SHOW来显示当前在MySQL服务器上配置过的数据库,然后用SQL命令USE来连接到单个数据库。mysql会话一次只能连一个数据库。

在处理长命令时,这个功能很有用。你可以在一行输入命令的一部分,按下回车键,然后在下一行继续输入。这样一条命令可以占任意多行,直到你用分号表明命令结束。


3、创建数据库

创建一个新的数据库要用如下SQL语句。

CREATE DATABASE name;

创建数据表。

插入和删除数据

DELETE命令的基本格式如下。


DELETE FROM table;


查询数据

SELECT语句的基本格式如下。

SELECT datafields FROM table

在脚本中使用数据库。


三、向服务器发送命令

在建立起到服务器的连接后,接着就可以向数据库发送命令进行交互。有两种实现方法:

(1) 发送单个命令并退出;
(2) 发送多个命令。


1. 确定系统中都有谁

要用到的第一个工具就是who命令。该命令可以告诉你当前系统中所有的登录用户。可用信息的简略版本。这些信息包括:

(1) 用户名
(2) 用户所在终端

(3) 用户登入系统的时间


2. 启用消息功能

 

检查是否允许发送消息,结果中显示is n表明消息发送功能被关闭了,结果是y,表明允许发送消息。


3. 向其他用户发送消息

使用write命令通过其他登录用户的用户名和当前终端向其发送消息。


四、获取格言

1. 学习wget

wget是一款非常灵活的工具,它能够将Web页面下载到本地Linux系统中。要通过wget下载Web页面,只需要使用wget命令和网站的地址就行了。

注意,输出的最后仍然是OK。但是Web地址的结尾是error404.html。这才表示Web地址是无效的。


五、创建脚本

1. 检查所传递的URL

脚本仍旧使用wget和--spider选项来检查Web地址的有效性。但是结果必须保存到变量中,以便随后使用if语句进行检查。

check_url=$(wget -nv --spider $quote_url 2>&1)

网站URL的状态消息被保存在了变量check_url中。要从变量中找出错误指示error404,需要使用参数扩展和echo命令。

bad_url=$(echo ${check_url/*error404*/error404})

允许对保存在check_url中的字符串进行搜索。可以把字符串参数扩展视为sed的另一种简单快速的替代形式。在搜索关键词周围加上通配符(*error404*),这样可以搜索整个字符串。如果找到了,echo命令会使得字符串error404被保存在bad_url变量中。要是没有找到,bad_url变量中包含的就是check_url变量中的内容。


2. 获取Web页面信息

在脚本中使用本章先前讲过的wget命令。将日志文件和包含页面信息的HTML文件保存在/tmp目录中。

wget -o /tmp/quote.log -O /tmp/quote.html $quote_url

3. 解析出需要的信息

使用sed和gawk超出html文件中的格言信息脚本首先从保存着Web页面信息的/tmp/quote.html文件中删除所有的HTML标签。

sed 's/<[^>]*//g' /tmp/quote.html

删掉标签后,还是会有一些无用的信息,格言正好位于日期的右边,可以使用当前日期作为搜索关键字。这里需要用到grep命令、$()以及date命令。sed命令的输出通过管道传入grep命令。grep命令经过格式化的当前日期来匹配格言页面中的日期。找到日期文本之后,使用-A2选项提取出另外两行文本。

sed 's/<[^>]*//g' /tmp/quote.html | grep "$(date +%B' '%-d,' '%Y)" -A2

完整脚本如下:

暂时没有记录
评论通过审核后显示。