首页 >>  正文

shell脚本awk用法

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

作者: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":"cache","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证书设置

寇芬贾2406如何在shell脚本里传递一个变量给awk -
储狱万13667757997 ______ 有两种方法:方法一:通过环境变量,例如在终端定义环境变量var export var="abc"则在 awk 脚本中可以使用 ENVIRON 调用 printf ENVIRON["var"]方法二:通过 awk 内置变量 ARGC,ARGV,跟C/C++ 一样,但是是大写的,eg:printf ARGV[0]

寇芬贾2406shell 输入字符串,搜索系统所有包含该字符串文件? -
储狱万13667757997 ______ 有两种写入方式:1、grep -i "aaa" -A 1 1.txt | grep -v -e "--" >2.txt grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来.若不指定任何文件名...

寇芬贾2406脚本语言中shell pwd | awk - F'/mnt|/hgnf|/lib' '{print $$1}' -
储狱万13667757997 ______ pwd是输出当前目录的意思;| 用管道传输结果给后面的命令awk-F'/mnt|/hgnf|/lib' 用 '/mnt|/hgnf|/lib' 对结果进行分割,-F后面应该有空格'{print $$1}' 分割后输出第一项 你这个输出结果和下面相同 pwd | awk '{print $1}' 或者 pwd

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

寇芬贾2406shell脚本中读取文件,比如A=0x3,A是一数字读取之后是一字符串,怎么可以直接读取到数字 -
储狱万13667757997 ______ 用awk,awk里面数字、字符串没有区分,字符串进行运算时也会当成数字.A=0x3这样子,可以设置-F=【字段分隔符=】 这样,awk中$1就是A,$2就是他的值 0x3 echo "A=0x3" >tmp.txt awk -F= '{print $2;print $2+20}' tmp.txt试一下,我这里Win10刚换成Win7,试不了.

寇芬贾2406怎么用awk一次输出多列 -
储狱万13667757997 ______ cut 不行吗? cut -d" " -f 10-20 file awk '{for(i=10;i<=20;i++)printf $i""FS;print""}' file

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

寇芬贾2406shell脚本 逐行读取文件并修正某一列符合判断条件的字段 -
储狱万13667757997 ______ shell用于命令组织,awk操作文件 awk '{if($3=="03")$3="col03"; print}'

寇芬贾2406shell脚本模糊匹配某个日期的四类文件,然后统计文件个数,判断文件最后修改时间 -
储狱万13667757997 ______ 1. 使用ls -l命令列出文件信息2. 使用awk命令抓取修改日期信息3. 使用修改日期比对你所指定的日期,如果一致则统计数加一

寇芬贾2406用shell编程计算2*(3+4)的值,并输出结果 -
储狱万13667757997 ______ [root@jerome-1 ~]# let "x=2*(3+4)" [root@jerome-1 ~]# echo $x14

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