在Ubuntu下编写shell脚本读取文件

在Ubuntu下编写shell脚本读取文件,第1张

需求功能:

创建测试用例文件 text :

创建shell脚本

运行结果:

利用 awk 'END{print NR}' [文件名] 来输出行数:

在shell脚本中添加该功能:

运行结果:

上面的shell文件只是把文件名写死在脚本中,并没有实际使用意义,所以需要编写一个指令来指定需要读取的文件,就像 vim [文件名] 一样

“$1” 代表第1个参数,也就是在 read 之后紧跟的参数,将其作为文件名传入:

将脚本移动至环境变量对应的目录中:(可以自己更改 /bin/xxx 来决定运行命令的名称,但注意不能重复)

sudo mv read /bin/read

然后添加运行权限:

sudo chmod 755 /bin/read

打开终端的目录可以是任何位置,通过以下命令即可运行shell脚本:

sudo read [文件路径]

同理,我们还可以自己为复杂指令编写shell脚本,来提高命令的使用效率,例如开关ss服务,打开锐捷客户端认证等等。

利用TTL起始值判断 *** 作系统,不同类型的 *** 作系统都有默认的TTL值(简陋扫描,仅作参考)

TTL起始值:Windows xp(及在此版本之前的windows)  128 (广域网中TTL为65-128)

    Linux/Unix64(广域网中TTL为1-64)

    某些Unix:255

    网关:255

使用python脚本进行TTL其实质判断

使用nmap识别 *** 作系统:nmap -O 19216845129 #参数-O表示扫描 *** 作系统信息,nmap基于签名,指纹,特征,CPE编号等方法去判断目标系统的信息

CPE:国际标准化组织,制定了一套标准,将各种设备, *** 作系统等进行CPE编号,通过编号可以查询到目标系统

使用xprobe2进行 *** 作系统识别,专门用来识别目标 *** 作系统:xprobe2 19216845129,但结果并不是很精确

被动 *** 作系统识别:不主动向目标主机发数据包,基于网络监听原理

通过抓包分析,被动扫描,使用kali中的p0f工具进行网络监听

p0f:p0f是一种被动指纹识别工具,可以识别您连接的机器,连接到您的盒子的机器,甚至连接在盒子附近的机器,即使该设备位于数据包防火墙后面。

p0f的使用:只要接收到数据包就可以根据数据包判断其信息,首先输入p0f,然后在浏览器里面输入目标系统的网址,便会获得目标系统的信息

或者使用p0f结合ARP地址欺骗识别全网OS

snmp扫描:简单网络管理协议,明文传输,使用网络嗅探也可获取到信息

SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

snmp的基本思想是为不同种类、不同厂家、不同型号的设备定义一个统一的接口和协议,使管理员可以通过统一的外观面对这些需要管理的网管设备进行管理,提高网管管理的效率,简化网络管理员的工作。snmp设计在TCP/IP协议族上,基于TCP/IP协议工作,对网络中支持snmp协议的设备进行管理。

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent)),代理实现设备与管理站的SNMP通信。如下图

管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理 *** 作。

已有的设备,只要新加一个SNMP模块就可以实现网络支持。旧的带扩展槽的设备,只要插入SNMP模块插卡即可支持网络管理。网络上的许多设备,路由器、交换机等,都可以通过添加一个SNMP网管模块而增加网管功能。服务器可以通过运行一个网管进程实现。其他服务级的产品也可以通过网管模块实现网络管理,如Oracle、WebLogic都有SNMP进程,运行后就可以通过管理站对这些系统级服务进行管理。

使用UDP161端口(服务端),162端口(客户端),可以监控网络交换机,防火墙,服务器等设备

可以查看到很多的信息,但经常会被错误配置,snmp里面

有一些默认的Community,分别是Public/private/manager

如果目标的community是public,那么就可以发送SNMP的查询指令,对IP地址进行查询

在kali中存在对snmp扫描的工具,为onesixtyone

在Windows XP系统安装SNMP协议:

1,在运行框输入appwizcpl

2,找到管理和监控工具,双击

3,两个都勾选,然后点OK

使用onesixtyone对目标系统进行查询:命令为:onesixtyone 19216845132  public

  onesixtyone -c  字典文件  -I  主机  -o 倒入到的文件 -w 100

onesixtyone默认的字典在:/usr/share/doc/onesixtyone/dicttxt

使用snmpwalk查找目标系统的SNMP信息:snmpwalk 19216845129 -c public -b 2c

snmpcheck -t  19216845129

snmpcheck -t  19216845129 -w  参数-w检测是不是有可写权限

SMB协议扫描:server message block,微软历史上出现安全问题最多的协议,在Windows系统上默认开发,实现文件共享

在Windows系统下管理员的Sid=500,

SMB扫描:nmap -v -p 139,445 19216845132 --open 参数-v表示显示详细信息,参数--open表示显示打开的端口

nmap 19216845132 -p 139,445 --script=smb-os-discoverynse

smb-os-discoverynse:这个脚本会基于SMB协议去判别 *** 作系统,主机名,域名,工作组和当前的时间

nmap -v -P 139,445 --script=smb-check-vulns  --script-args=unsafe=1 19216845132

脚本smb-check-vulns:检查已知的SMB重大的漏洞

后面给脚本定义参数 --script-args=unsafe=1,unsafe可能会对系统有伤害,导致宕机,但要比safe准确

nbtscan -r 192168450/24参数-r使用本地137端口进行扫描,兼容性较好,可以扫描一些老版本的Windows

nbtscan可以扫描同一局域网不同的网段,对于局域网扫描大有裨益

enum4linux -a 19216845132 :

SMTP扫描:目的在于发现目标系统的邮件账号

使用nc -nv 19216845132 25

VRFY root :确定是不是有root用户

nmap扫描SMTP服务:

nmap smtp163com -p25 --script=smtp-enum-usersnse --script-args=smtp-enum-

usersmethods={VRFY}

脚本smtp-enum-usersnse用于发现远程系统上所有user的账户

nmap smtp163com -p25 --script=smtp-open-relaynse,如果邮件服务器打开了open-relay功能,那么黑客可以拿管理员的邮箱去发送钓鱼邮件

防火墙识别:通过检查回包,可能识别端口是否经过防火墙过滤

设备多种多样,结果存在一定的误差

第一种情况:攻击机向防火墙发送SYN数据包,防火墙没有给攻击机回复,攻击机再发送ACK数据包,若防火墙返回RST数据包,那么证明该端口被防火墙过滤

第二种类似

第三种:攻击机向防火墙发送SYN数据包,防火墙返回SYN+ACK或者SYN+RST数据包,攻击者再发送ACK数据包,若防火墙返回RST数据包,那么就可以证明防火墙对于该端口没被过滤unfiltered=open

第四种情况类似,证明该端口是关闭的,或者防火墙不允许其他用户访问该端口

使用python脚本去判定:

使用nmap去进行防火墙识别:nmap有系列防火墙过滤检测功能

nmap -sA 19216845129 -p 22 参数-sA表示向目标主机发送ACK数据包,参数-sS表示向目标发送SYN数据包,通过抓包分析收到的数据包判断是否有防火墙检测功能

负载均衡识别:负载均衡可以跟为广域网负载均衡和服务器负载均衡

在kali中使用lbd命令用于识别负载均衡机制

格式:lbd +域名/IP地址,如lbd   >

方式一

当然是windows电脑安装达梦管理工具,直接把脚本贴进去执行,但避免不了出现误 *** 作

在这里插入描述

方式二

使用shell脚本执行sql

1 先找到达梦数据库安装位置吧

[root@localhost ~]# ss -nlp |grep 5236

tcp LISTEN 0 128 [::]:5236 [::]: users:(("dmserver",pid=103380,fd=4))

[root@localhost ~]# ps -ef|grep dmserver

root 85093 66993 0 17:56 pts/6 00:00:00 grep --color=auto dmserver

dmdba 103380 1 8 13:36 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dmini -noconsole

1

2

3

4

5

1

2

3

4

5

2 直接在linux上执行shell命令执行sql脚本

21 # disql username/password:port

使用这个命令可以进入sql控制台

[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间 : 5524(ms)

disql V8

SQL>

进入SQL>后:

直接输入sql语句,使用英文分号结尾,回车执行。

使用“`sql文件路径”,可以执行sql脚本文件,注意前面有一个小撇(esc和tab中间的键)

使用“start sql文件路径”,可以执行sql脚本文件。

22 # disql username/password:port `sql文件位置

使用这个命令可以执行sql脚本

[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236 \`sql/testsql

[root@localhost sql]#

1

2

1

2

但需注意

这个脚本执行完sql会停留在sql执行行,如需执行完返回到shell命令行,则需要在sql文件结尾添加:exit; 。

这个shell语句不能用start执行sql文件,只能使用“`”,并且前面需要添加转义字符“\”。

23 达梦sql脚本注意事项

目前发现-创建schema语句以及执行过程结尾,都需要添加“/”结束

例如执行以下语句,回车执行,一直在输出数字,直到输入“/”,再回车执行,才执行成功。

[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间 : 6121(ms)

disql V8

SQL> create schema test;

2

3 /

*** 作已执行

已用时间: 26698(毫秒) 执行号:700604

SQL>

sql脚本示例:

-- 创建schema

CREATE SCHEMA DB_ZFBA_MOBILE;

/

-- 执行过程

begin

if exists(select 1 from DBA_TAB_COLUMNS where OWNER='DB_ZFBA_MOBILE' AND TABLE_NAME='T_ZJTQD') then

EXECUTE immediate 'drop table DB_ZFBA_MOBILET_ZJTQD';

end if;

end;

/

create table DB_ZFBA_MOBILET_ZJTQD

(

"C_BH" char(32) NOT NULL, -- 主键

"C_BH_AJ" varchar2(32) NULL, -- 案件编号

……

"DT_ZHXGSJ" datetime NULL, -- 最后修改时间

constraint PK_T_ZJTQD primary key( C_BH )

);

sql文件结尾添加exit;,保证多个sql文件执行不会中断

3 编写shell脚本

注意:shell脚本一定在linux中编写,windows编写的有些语句执行不成功(目前原因未知)

例如: a=a b=b c=$a$b echo $c 在windows下编写,linux中执行完会输出b

#!/bin/bash

# 请先配置数据库连接信息,再执行此脚本

DM_PATH=/home/dmdba/dmdbms #达梦数据库的安装位置

USERNAME=cpuser #达梦数据库连接用户名

PASSWORD=cpuser123 #达梦数据库连接密码

PORT=5236 #达梦数据库连接端口号

# 下面的信息请不要随意修改

CONNECT_INFO=$USERNAME/$PASSWORD:$PORT

echo "连接信息:"$CONNECT_INFO

# STEP 1

echo "开始执行---- sql/02_创建数据库对象/00CS_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/00CS_GSYSsql >> DB_DMlog

echo "执行完成---- sql/02_创建数据库对象/00CS_GSYSsql"

# STEP 2

echo "开始执行---- sql/02_创建数据库对象/01CT_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/01CT_GSYSsql >> DB_DMlog

echo "执行完成---- sql/02_创建数据库对象/01CT_GSYSsql"

# STEP 3

echo "开始执行---- sql/02_创建数据库对象/02CC_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/02CC_GSYSsql >> DB_DMlog

echo "执行完成---- sql/02_创建数据库对象/02CC_GSYSsql"

# STEP 4

echo "开始执行---- sql/02_创建数据库对象/03CI_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/03CI_GSYSsql >> DB_DMlog

echo "执行完成---- sql/02_创建数据库对象/03CI_GSYSsql"

# STEP 5

echo "开始执行---- sql/03_初始化数据/02I_T_Aty_CodeType_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化数据/02I_T_Aty_CodeType_GSYSsql >> DB_DMlog

echo "执行完成---- sql/03_初始化数据/02I_T_Aty_CodeType_GSYSsql"

# STEP 6

echo "开始执行---- sql/03_初始化数据/02I_T_Aty_Code_GSYSsql"

$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化数据/02I_T_Aty_Code_GSYSsql >> DB_DMlog

echo "执行完成---- sql/03_初始化数据/02I_T_Aty_Code_GSYSsql"

# Complete

echo "SQL全部执行完成---- 日志请查看DB_DMlog"

执行完成后,通过shell控制台和DB_DMlog日志可以分析sql脚本是否执行成功。

以上就是关于在Ubuntu下编写shell脚本读取文件全部的内容,包括:在Ubuntu下编写shell脚本读取文件、渗透测试之 *** 作系统识别、达梦数据库shell脚本怎么获取查询语句结果集等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10072142.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存