首页 >>  正文

shell脚本awk命令

来源:baiyundou.net   日期:2024-09-21

作者:ZwissC

这篇文章整合了许多大佬的文章,一些简单的步骤在本文中将省略,可以在相关链接中查找。另外一些基础操作也省略了,这需要读者具有相关的经验。希望对大家有帮助,这套流程下来我非常顺利,希望你也能成功!

前言

最近入手了一台QNAP TS-428,随着IPV6公网的普及,目前家中的宽带已经可以获取到公网IPV6地址(中国移动-需要光猫设置成桥接模式,并且路由器打开ipv6功能)。经过设置路由器开放IPV6防火墙后,经中国联通流量测试(流量默认支持IPV6网络)可以正常访问。随后我将NAS获取的ipv6公网地址添加到域名解析中,也可以正常使用。但是过了一段时间后由于NAS获取的公网ipv6地址变化,导致无法正常访问。因此最好在NAS上设置好DDNS,同时将SSL证书替换到NAS中。\n    

一、openwrt上开放IPV6端口

参考:https://zhuanlan.zhihu.com/p/375655093

我这里只需要设置好WAN做PPPOE即可,不需要对WAN6进行设置。我使用的固件会在LAN中显示获取到了IPv6地址,然后在LAN的DHCP服务器的IPv6设置中:路由通告服务、DHCPv6服务设为服务器模式、NDP代理禁用、DHCPv6为无状态+有状态,即可。

然后防火墙的通信规则中按照知乎的样式添加一条转发规则,并按知乎的教程设置好名称、源区域、目标区域、端口号、限制地址。

重新连接网络后,可以在设置中查看是否获得24开头的ipv6地址。同时可以用https://ds.test-ipv6.com/ 查看ipv6连通情况(并不是非常准确)。

这时可以通过http://[2409:8b43:311b:b6e0:211:32ff:fe12:3456]:5000/ 这样格式的地址尝试访问NAS(将[]中的地址替换成NAS获取的地址和端口号)

二、手动设置域名验证解析

DNSPOD里设置一个二级域名、AAAA、和你的IPV6地址即可,等待解析生效后就可以尝试用域名访问了。\n    

三、设置HTTPS

1.更换NAS的ssl证书

官方教程 https://docs.qnap.com/operating-system/qts/5.0.x/zh-cn/替换服务器证书-8E7C1926.html

在腾讯云中申请你的二级域名ssl证书,下载时选择其它。

然后转到NAS的控制台>系统>安全>SSL证书和密钥,转到服务器证书,单击取代当前证书,选择导入证书。这时证书选择.pem格式,私人密钥选择.key格式并应用。

2.设置qb的https

SSH连接 在类似 /share/CACHEDEV1_DATA/.qpkg/qBittorrent/ 的目录中新建ssl文件夹,将.key和.crt文件复制进去,然后用chmod 755 ***.key 修改文件的权限。

然后再修改 .qpkg/qBittorrent/.config/qBittorrent/ 目录的qBittorrent.conf中的WebUIHTTPSCertificatePath=***.crt 和 WebUIHTTPSKeyPath=***.key

填写参考:/share/CACHEDEV1_DATA/.qpkg/qBittorrent/ssl/ab.abc.com_bundle.crt

然后重启qb即可(nas的app中停止再启动)

四、用脚本自动更新DDNS

经过搜索,有一个通过docker的ddns-go项目,但是无奈咱们的小机器实在没有那么多内存来开docker(也许可以,但是没必要)。另外QNAP自带的DDNS(网络与虚拟交换机中)自定义DDNS服务大多是国外的使用起来不太方便,听说群晖里就自带DNSPOD的DDNS,乐。最后结合DNSPOD关于DDNS的文档说明,应该是可以通过shell脚本来实现自动更新的。因此我也找到了一个大佬的项目。

知乎:https://zhuanlan.zhihu.com/p/401048713

原作者的使用说明:https://blog.csdn.net/Imkiimki/article/details/83794355

如果你无法访问GitHub那么知乎上分享的下载地址也是最新的版本。

1、获取DNSPOD的API

https://www.dnspod.cn/login?s_url=https://console.dnspod.cn/account/token/token

这里注意选择:DNSpod Token。然后创建密钥,ID应该是六位数。

然后修改ArDNSPod中的dns.conf安装“ID,KEY”的顺序替换arToken

2、设置脚本

然后在NAS的SSH中测试下面命令是否正确输出ipv6地址,其实eth0替换成本机的网卡设备名。

ip addr show dev eth0 | sed -e's/^.*inet6 ([^ ]*)/.*$/1/;t;d'

这里我输出得到两行地址24开头的公网、和fe开头的内网,因此我这里将这句改成,后面添加的意思是去掉第二行

ip addr show dev eth0 | sed -e's/^.*inet6 ([^ ]*)/.*$/1/;t;d'| sed '2d'

将这个命令替换到脚本的65行中,修改后这一行是

ip addr show dev eth0 | sed -e's/^.*inet6 ([^ ]*)/.*$/1/;t;d'|sed '2d' | awk 'NR==1'

随后在修改一下第25行的解析类型=3

最后同样的修改sh和conf的权限为755。

脚本我上传的位置是 /share/CACHEDEV1_DATA/.qpkg/ddns/ 。特别的有网友提到QNAP在重启之后会删除非系统文件,我这个位置应该不是系统文件的范围应该不会被删除吧。

如果会删除的话,按照下面这个添加计划任务的方案,就是手动安装一个用不到的app,然后将dns脚本的内容替换该app中的脚本。但是考虑到app安装的位置是.qpkg,应该不会被自动删吧。

https://blog.csdn.net/hondsam/article/details/103920016

3、设置计划任务

就是上面那篇文章,重新启动admin账号登录到ssh中然后修改crontab.

文件位置:/etc/config/crontab

","force_purephv":"0","gnid":"9c81645e331c47cf4","img_data":[{"flag":2,"img":[{"desc":"","height":"555","title":"","url":"https://p0.ssl.img.360kuai.com/t016fd285d2f79116ef.jpg","width":"600"},{"desc":"","height":"368","title":"","url":"https://p0.ssl.img.360kuai.com/t01abd24c5352456671.jpg","width":"600"},{"desc":"","height":"336","title":"","url":"https://p0.ssl.img.360kuai.com/t01f07f1c297b7a6b10.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1673345880000,"pure":"","rawurl":"http://zm.news.so.com/3bf63c4ccafaae4159ebc60751e49e48","redirect":0,"rptid":"73de746ba905ef61","s":"t","src":"什么值得买","tag":[{"clk":"ktechnology_1:腾讯云","k":"腾讯云","u":""}],"title":"威联通QNAP通过Shell脚本实现腾讯云/DNSpod的IPV6公网DDNS以及NAS和qb的https证书设置

元梵欢595如何在shell脚本里传递一个变量给awk -
全生蒲18395189596 ______ 先说简单的,如果是只传递变量,有几种方法: awk '{print v1, v2}' v1=$VAR1 v2=$VAR2 input_file# 或者,这种方法不是所有的awk分支都支持 awk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file# 或者,这种写法是最难受的 awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file 把变量用在正则里面的方法: awk ' $0 ~ v1; {print v2}' v1=$VAR1 v2=$VAR2 input_file

元梵欢595如何编写一个shell脚本查看某个进程是否在运行 -
全生蒲18395189596 ______ ^1 、编写一个shell脚本来查看某个进程是否在运行,用户可以通过ps命令获取所有的进程,然后通过awk命令提取进程名,再用grep提取相应的进程名即可. 2、参考代码如下: ps -aux |awk '{print $11}' | grep "^$1" >/dev/null case $? in 0) echo "find process $1" ;; 1) echo "$1 is not running" ;; *) echo "unknow error" esac3、脚本运行结果如下

元梵欢595Awk是什么? -
全生蒲18395189596 ______ 中文释义:三位创造者Aho、Weinberger和Kernighan统称Awk简介 AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、...

元梵欢595请问shell脚本第一行 - f的含义: #!/usr/bin/awk - f 这个位置还有哪些值,分别表示什么?
全生蒲18395189596 ______ Linux下脚本的第一行#! 是指明本脚本使用哪个解释器来执行当前脚本,从头文件看出这个一个awk脚本,第一行的意思可以理解为 使用 /usr/bin/awk -f 脚本名 来执行当前脚本: 比如脚本:test.awk的第一行是#!/usr/bin/awk -f那么执行这个脚本的时候就会根据第一行去寻找解释器,效果相当于在shell下执行 /usr/bin/awk -f test.akw 这里的-f是awk命令的一个参数,是从文件中读取脚本执行的意思.

元梵欢595如何用shell脚本画出一个圆 -
全生蒲18395189596 ______ 安装有awk命令的话:awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' | awk -f ColorPlot.awk#! /usr/bin/awk# 运行方法: awk 'BEGIN{while(k<10){print sin(k),cos(k);k=k+0.01}}' >datafile# awk -f ColorPlot.awk datafile BEGIN{ srand() xlen=35 ...

元梵欢595编shell脚本遇到一个问题,awk能切割掉最后一个字段的值嘛? -
全生蒲18395189596 ______ 先设个变量: path=/usr/share/man/man5/locale.alias.5.gz 法一,bash中特有的字符串分割法: echo ${path%/*}/ 法二,sed中的s替换命令,利用了*在正则中的贪婪特性: echo $path | sed 's#\(.*/\).*#\1#' 法三,awk字段分割重组: echo $path | awk -F/ '{for(i=1;i<NF;i++)printf("%s/",$i);printf("\n")}'

元梵欢595shell脚本 逐行读取文件并修正某一列符合判断条件的字段 -
全生蒲18395189596 ______ shell用于命令组织,awk操作文件 awk '{if($3=="03")$3="col03"; print}'

元梵欢595什么是Shell,Shell命令的两种执行方式 -
全生蒲18395189596 ______ Shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条. 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,...

元梵欢595在linux下的shell脚本中awk {print 0.45/$1}是什么意思?求解各位,谢谢. -
全生蒲18395189596 ______ $@:表示所有脚本参数的内容 $#:表示返回所有脚本参数的个数. 示例:编写如下shell脚本,保存为test.sh #!/bin/sh echo "number:$#" echo "argume:$@" 执行脚本: ./test.sh first_arg second_arg 说明:给脚本提供了两个参数,所以$#输出的结果是2,$@代表了参数的内容!

元梵欢595shell脚本编程 -
全生蒲18395189596 ______ 既然你的文件格式这么固定 用最简单的命令,head , tail 可以取出你想要的行 awk 用 "[" 当分隔符, 取出 第x个 再把 "]" 替换掉 ^ _ ^ 应该还有格式化输出的问题.如果有追问,请不要问我完整的shell脚本...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024