立即登录

shell脚本实用案例 Linux学习

03/15 01:49:06

shell脚本实用案例 Linux学习

5.5.3 cal指令

查看日历

基本语法:cal [选项] (不加选项,显示本月日历)

应用案例:显示2022年日历,即 cal 2022

5.6 搜索查找类 5.6.1 find指令

find指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端。

基本语法:find [搜索范围] [选项]

选项说明:

应用案例:

案例1:按文件名:根据名称查找/home目录下的hello.txt文件,find /home -name hello.txt

案例2:按拥有者:查找/opt目录下,用户名称为nobody的文件,find /opt -user nobody

案例3:查找整个linux系统下大于200M的文件(+n 大于 -n 小于 n 等于),find / -size +200M

5.6.2 locate指令

locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定时更新locate时刻。

基本语法:locate 搜索文件

特别说明:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

5.6.3 which指令

查看某个指令在哪个目录下,which [命令]

5.6.4 grep指令和管道符号|

grep过滤查找,管道符"|",表示将前一个命令的处理结果输出传递给后面的命令处理

基本语法:grep [选项] 查找内容 源文件

常用选项:

应用案例:在hello.txt 文件中,查找“yes”所在行,并且显示行号 ,

写法1:cat hello.txt | grep “yes”

写法2:grep -n “yes” hello.txt

5.7 压缩和解压类 5.7.1 gzip/gunzip指令

gzip用于压缩文件,gunzip用于解压文件

基本语法:

gzip 文件 (压缩文件,只能将文件压缩为*.gz文件)

gunzip 文件.gz (解压文件命令)

5.7.2 zip/unzip指令

zip用于压缩文件,unzip用于解压,这个在项目打包发布中很有用

基本语法:

zip [选项] XXX.zip 将要压缩的文件内容(压缩文件和目录的命令)

unzip [选项] XXX.zip (解压缩文件)

zip常用选项:-r 递归压缩,即压缩目录

unzip常用选项:-d 指定解压后文件的存放目录

应用案例:

案例1:将/home下的所有文件即home文件夹进行压缩成 myhome.zip,zip -r myhome.zip /home/

案例2:将myhome.zip 解压到 /opt/tmp 目录下,unzip -d /opt/tmp /home/myhome.zip

5.7.3 tar指令

tar指令是打包指令,最后打包后的文件是 .tar.gz 的文件

基本语法:tar [选项] XXX.tar.gz 打包的内容(打包目录,压缩后的文件格式 .tar.gz)

选项说明:

应用案例:

案例1:压缩多个文件,将/home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz,tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt

案例2:将/home的文件夹压缩成 myhome.tar.gz,tar -zcvf myhome.tar.gz /home/

案例3:将pc.tar.gz解压到当前目录,tar -zxvf pc.tar.gz

案例4:将myhome.tar.gz解压到/opt/tmp目录下,tar -zxvf /home/myhome.tar.gz -C /opt/tmp(-C是指定目录)

6. 组管理和权限管理 6.1 Linux组的基本介绍

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组(所有者所在的组)、其它组(除所在组以外的其它组)的概念

6.2 文件/目录 所有者

一般为文件的创建者,谁创建了该文件,就自然地成为该文件的所有者。

6.2.1 查看文件的所有者

ls -ahl(或者 ll)

6.2.2 修改文件的所有者

chown 新用户者 文件/目录(改变所有者)

chown 新用户名:新组名 文件/目录(改变所有者和所在组)

chown -R 新用户名 目录(使目录下的所有子文件或目录递归生效)

6.3 文件/目录 所在组

当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组(默认)

6.3.1 查看文件/目录所在组

同上,ls -ahl(或者 ll)

6.3.2 修改文件所在组

chgrp 组名 文件名

6.4 其它组

除文件的所有者和所在组的用户外shell脚本实用案例,系统的其它用户都是文件的其它组

6.5 改变用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组

shell解释器脚本_shell脚本 里调用shell_shell脚本实用案例

1.usermod -g 新组名 用户名

2.usermod -d 新目录名 用户名(改变该用户登录的初始目录,用户必须要有进入新目录的权限,才可以修改)

6.6 权限的基本介绍

总共10位,0到9位的说明:

1.第0位确定文件类型(d,-,l,c,b)

2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限

3.第4-6位确定所在组(同用户组的)拥有该文件的权限

4.第7-9位确定其他用户拥有该文件的权限

6.7 rwx权限详解 6.7.1 rwx作用到文件 6.7.2 rwx作用到目录

可用数字表示为;r=4,w=2,x=1 因此rwx=7

6.8 修改权限-chmod 6.8.1 基本说明

通过chmod指令,可以修改文件或者目录的权限

6.8.2 第一种方式:+、-、=变更权限

u:所有者 g:所在组 o:其他人 a:所有人(u、g、o的总和)

1.chmod u=rwx,g=rx,o=x 文件/目录名(分别给予权限)

2.chmod o+w 文件/目录名(给其他人增加写权限)

3.chmod a-x 文件/目录名(去除所有人执行的权限)

6.8.3 第二种方式:通过数字变更权限

r=4,w=2,x=1

rwx=4+2+1=7

chmod u=rwx,g=rx,o=x 就相当于 chmod 751

7. 定时任务调度 7.1 crond 任务调度 7.1.1 概述

任务调度:是指系统在某个时间执行的特定的命令或程序

任务调度分类:

1.系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等等

2.个别用户工作:个别用户可能希望执行某些程序,比如对mqsql数据库的备份

7.1.2 基本语法

crontab [选项]

7.1.3 常用选项

指令:service crond restart (重启任务调度)

7.1.4 快速入门

现要求:每分钟执行一次指令 ls -l /etc/ > /tmp/to.txt

即:先 crontab -e 新建定时任务

再输入:

*/1 表示每隔1分钟执行一次

特殊符号的说明:

特定时间执行的案例:

7.1.5 应用案例

案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中

*/1 * * * * date >> /tmp/mydate

案例2:每隔1分钟,将当前日期和日历都追加到 /home/mycal 文件中

在/home下新建my.sh文件:

date >> /home/mycal
cal >> /home/mycal

*/1 * * * * /home/my.sh(每隔一分钟去执行shell脚本)

案例3:每天凌晨2:00 将mysql数据库testdb,备份到文件/home/db.bak中

0 2 * * * mysqldump -u root -p密码 testdb > /home/db.bak

7.2 at定时任务 7.2.1 基本介绍

7.2.2 at命令格式

at [选项] [时间]

Ctrl + D (都按两次)结束at命令的输入

Ctrl+删除键 进行删除

7.2.3 at时间定义

7.2.4 应用案例

案例1:2天后的下午5点执行 /bin/ls /home

at 5pm + 2 days

at> /bin/ls /home

案例2:atq命令来查看系统中,没有执行的工作任务

atq

案例3:明天17点钟,输出时间到 /root/date100.log

at 5pm tomorrow

at> date > /root/date100.log

shell脚本 里调用shell_shell解释器脚本_shell脚本实用案例

案例4:2分钟后,输出时间到 /root/date200.log

at now + 2 minutes

at> date > /root/date200.log

案例5:删除已经设置的任务

atrm 编号

8. Linux磁盘分区、挂载 8.1 Linux分区 8.1.1 原理介绍

8.1.2 硬盘说明

8.1.3 查看所有设备挂载情况

命令:lsblk 或者 lsblk -f

8.2 挂载的案例

分区、格式化、挂载、卸载

8.3 磁盘情况查询 8.3.1 查询系统整体磁盘的使用情况

基本语法:df -h

8.3.2 查询指定目录的磁盘占用情况

基本语法:du -h 目录 (默认为当前目录)

-s 指定目录占用大小汇总

-h 带计量单位

-a 含文件

–max-depth=1 子目录深度

-c 列出明细的同时,增加汇总值

**应用案例:**查询 /opt 目录的磁盘占用情况,深度为1

du -h --max-depth=1 /opt

8.4 磁盘情况-工作使用指令 8.4.1 统计/opt文件夹下文件的个数

ls -l /opt | grep “^-” | wc -l

(正则,以 - 开头的,即文件,wc进行统计)

8.4.2 统计/opt文件夹下目录的个数

ls -l /opt | grep “^d” | wc -l

8.4.3 统计/opt文件夹下文件的个数,包括子文件夹里的

ls -lR /opt | grep “^-” | wc -l

(-R 递归)

8.4.4 统计/opt文件夹下目录的个数,包括子文件夹里的

ls -lR /opt | grep “^d” | wc -l

8.4.5 以树状显示目录结构

语法:tree 目录

默认情况下没有tree指令,使用 yum install tree 安装

9. 网络配置 9.1 Linux网络配置原理图

即ip地址必须要与wmnet8在同一个网段下才能ping通,192.168.2.*

9.2 查看网络IP和网关

windows下查看网络配置:ipconfig

linux下查看网络配置:ifconfig

9.3 Linux网络环境配置 9.3.1 第一种方法(自动获取)

linux登录后,通过界面来设置自动获取ip

特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样,因此不能做服务器

9.3.2 第二种方法(指定ip)

直接修改配置文件来指定IP,并可以连接到外网

编辑:vim /etc/sysconfig/network-scripts/ifcfg-ens33

要求:将 ip地址配置成静态的,比如:ip地址为192.168.200.130

进入文件夹后:

需修改:BOOTPROTO=“static”

添加:

#IP地址

IPADDR=192.168.200.130

#网关

GATEWAY=192.168.200.2

#域名解析器

DNS1=192.168.200.2

然后需要修改这里的子网ip

与192.168.200.130在同一网段,并在NAT设置中辅助论坛,将网关修改为192.168.200.2

最后重启网络服务或者重启:

service network restart/reboot

【小白入门 通俗易懂】2021韩顺平 一周学会Linux_哔哩哔哩_bilibili

9.4 设置主机名和host映射 9.4.1 设置主机名 9.4.2 设置host映射

9.5 主机名解析过程分析(Hosts、DNS)

10. 进程管理 10.1 基本介绍 10.2 显示系统执行的进程 10.2.1 基本介绍

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数

一般组合使用:ps -aus

10.2.2 ps详解

10.2.3 应用案例

要求:以全格式显示当前所有的进程,查看进程的父进程。查看sshd的父进程信息

ps -ef 是 以全格式显示当前所有的进程

-e 显示所有进程 -f 全格式

即:ps -ef |grep sshd

10.3 终止进程kill和killall 10.3.1 介绍

若是某个进程执行一半需要停止时,或是已消耗了很大的系统资源时,此时可以停止该进程

10.3.2 基本语法

kill [选项] 进程号

killall 进程名称(进程名称也支持通配符,这在系统因负载过大而变得很慢时很有用)

10.3.3 常用选项

-9:表示强迫进程立即停止

10.3.4 应用案例

案例1:踢到某个非法登录用户

先ps查询sshd登录用户的进程号,然后:kill 某个用户的进程号

案例2:终止远程登录服务sshd,在适当时候再次重启 sshd服务

即:kill 7665

重启 :/bin/systemctl start sshd.service

案例3:终止多个gedit(文本编辑器)

killall gedit

案例4:强制杀掉一个终端

kill -9 bash对应的进程号

10.4 查看进程树pstree 10.4.1 基本语法

pstree [选项]

10.4.2 常用选项

-p:显示进程的PID

-u:显示进程的所属用户

10.4.3 应用案例

案例1:以树状的形式显示进程的pid

pstree -p

案例2:以树状的形式显示进程的用户id

pstree -u

10.5 服务(service)管理 10.5.1 介绍

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口shell脚本实用案例,等待其它程序的请求,比如(mysqld,sshd,防火墙等),因此我们又称为守护进程。

10.5.2 service管理指令

10.5.3 查看服务名

方式1:输入:setup,可以看到全部的系统服务

带*表示自动启动的服务,按空格可选择,按tab退出

方式2:ls -l /etc/init.d

10.5.4 服务的运行级别(runlevel)

10.5.5 chkconfig指令

设置服务在不同的运行级别上是否自启动

使用细节:设置完之后,需要reboot才能生效

10.5.6 systemctl 管理指令

基本语法:systemctl [start|stop|restart|status] 服务名

systemctl指令管理的服务在 /usr/lib/systemd/system 查看

10.5.7 systemctl 设置服务的自启动状态

10.5.8 细节讨论

10.5.9 防火墙

在客户端通过telnet测试端口

在Linux服务器防火墙开启时:

客户端测试端口会失败:

我们再关闭Linux的防火墙:

再次测试:

即可成功:

10.5.10 firewall指令-打开/关闭端口

10.5.11 应用案例

1.启用防火墙,测试111端口时候能telnet,不能

2.开放111端口,firewall-cmd --permanent --add-port=111/tcp,然后需要 firewall-cmd --reload

2.关闭111端口,firewall-cmd --permanent --remove-port=111/tcp,然后需要 firewall-cmd --reload

10.6 动态监控进程 10.6.1 介绍

top与ps命令很类似。它们都用来显示正在执行的进程 。top与ps最大的不同之处,在于top在执行一段时间后可以更新正在运行的进程。

10.6.2 基本语法

top [选项]

10.6.3 选项说明

10.6.4 交互操作说明

10.6.5 应用案例

10.7 监控网络状态 10.7.1 查看系统网络情况netstat

基本语法:

netstat [选项]

选项说明:

-an 按一定顺序排列输出

-p 显示哪个进程在调用

一般会直接使用 netstat -anp

11. RPM与YUM 11.1 rpm包的管理 11.1.1 介绍

11.1.2 rpm包的简单查询指令

查询已安装的rpm列表:rpm -qa | grep XXX

11.1.3 rpm包名基本格式

11.1.4 rpm包的其它查询指令

11.1.5 卸载rpm包

基本语法:rpm -e rpm包的名称//erase

应用案例:删除firefox安装包,rpm -e firefox

细节讨论:

11.1.6 安装rpm包

基本语法:rpm -ivh rpm包全路径名称 (安装文件包)

参数说明:

i=install 安装

v=verbose 提示

h=hash 进度条

11.2 yum 11.2.1 介绍

yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包

11.2.2 yum的基本指令

查询yum服务器是否有需要安装的软件

yum list | grep xx

安装指定的yum包

yum install xxx

12. Shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序

12.1 Shell脚本的执行方式 12.1.1 脚本格式要求 12.1.2 编写输出“hello world”的脚本

#!/bin/bash
echo "helllo world~"

12.1.3 脚本的常用执行方式 12.2 Shell的变量 12.2.1 Shell变量介绍 12.2.2 Shell变量的定义

12.2.3 定义规则

shell脚本 里调用shell_shell脚本实用案例_shell解释器脚本

12.3 设置环境变量

在/etc/profile 文件中添加环境变量

12.4 位置参数变量 12.4.1 介绍

12.4.2 基本语法

12.5 预定义变量

就是shell设计者事先已经定义好的变量,可以在shell脚本中使用

三、Linux高级篇 1. 日志管理 1.1 基本介绍 1.2 系统常用日志

1.3 日志管理服务 rsyslogd

查询Linux中的 rsyslogd 服务是否启动:

ps aux | grep “rsyslog” | grep -v “grep”(grep -v 反向匹配,只选择不匹配的行,这里即挑选出不含"grep"的)

查询 rsyslogd 服务的自启动状态:

systemctl list-unit-files | grep rsyslog

rsyslogd 服务的配置文件【重点】:

/etc/rsyslog.conf

由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:

日志管理服务的应用实例:自定义日志

要求:在/etc/rsyslog.conf 中添加一个日志文件 /var/log/zmc.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存。通过重启、登录,看看是否有日志保存

vim /etc/rsyslog.conf,添加配置日志

然后,> /var/log/zmc.log 创建空的日志文件

重启,登录后,查看日志文件如下:

自定义日志成功。

1.4 日志轮替 1.4.1 基本介绍

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后,就会删除

1.4.2 日志轮替文件命名

1.4.3 logrotate配置文件

参数说明:

1.4.4 把自己的日志加入日志轮替 1.4.5 日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的

1.5 查看内存日志

2. Linux系统备份与恢复 2.1 基本介绍

实体机没有办法做快照,有两种方式进行备份和恢复:

没有安装过dump和restore指令的,需要先安装:

yum -y install dump

yum -y install restore

2.2 使用dump完成备份 2.2.1 dump基本介绍

dump支持分卷和增量备份(所谓增量备份是指上次备份后 修改/增加过的文件,也称差异备份)

2.2.2 dump语法说明

2.2.3 dump应用案例

案例1:将/boot 目录所有内容备份到 /opt/boot.bak.bz2 文件中,备份层级为"0"

dump -0uj -f /opt/boot.bak0.bz2 /boot

案例2:再次备份/boot 目录,备份层级为"1"(只备份上次使用层次"0"备份后发生 过改变的数据)

dump -1uj -f /opt/boot.bak1.bz2 /boot

2.2.4 dump -W

显示需要备份的文件及最后一次备份的层级,时间,日期

2.2.5 查看备份时间文件

cat /etc/dumpdates

2.2.6 dump 备份文件或者目录

只有分区支持增量备份,

如果备份文件或者目录,只能使用0级别备份

2.2.7 提醒

重要的备份文件,比如数据区,建议上传到其他服务器上保存!

2.3 使用restore完成恢复 2.3.1 基本介绍

restore用于从dump生成的备份文件中恢复原文件

2.3.2 restore基本语法

2.3.3 应用案例

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新资讯