dns
回家后发现家里的新拉的光纤是移动的,但是移动居然对53端口的udp实行完全拦截,也就是dns拦截。想起之前在宿舍使用的cloudflare的json格式的DoH还有DoT,所以决定搞一搞。
回家后发现家里的新拉的光纤是移动的,但是移动居然对53端口的udp实行完全拦截,也就是dns拦截。想起之前在宿舍使用的cloudflare的json格式的DoH还有DoT,所以决定搞一搞。
$
引用,如$FUCK
或${FUCK}
,花括号只起边界作用readonly xxxx
,将xxxx
设置为只读变量,只读变量不允许修改和删除unset
可以删除变量"ahh"${agg}"ahhhh"
${string:1:2}
${#string}
a=(var1 var2 var3)
a[n]=111
$(a[n])
,使用@
可以获取数组全部元素${#a[*]}
$0
: 可执行文件文件名$#
: 传递参数数量$*
: 传递的所有参数$$
: 当前运行脚本的PID$@
: 和$*
一样$-
: 显示Shell使用的当前选项$?
: 最后命令的退出状态。0表示没有错误,其他任何值表明有错误
[ $var -eq 0 ]
-eq
相等-ne
不等-gt
大于-lt
小于-ge
大于或等于-le
小于或等于[ -e $var ]
-b
是否块设备文件-c
是否字符设备文件-d
是否目录-e
文件是否存在-f
正常文件路径或文件名-x
可执行文件-L
是否符号连接-r
是否可读-w
是否可写[[ $var1 = $var2 ]]
,test $var1 = $var2
[[ $var1 != $var2 ]]
[[ -z $str1 ]]
[[ -n $str1 ]]
!
非-o
,||
或-a
,&&
与printf format-string [arguments...]
1 | a=10 |
1 | for var in item1 item2 ... itemN |
1 | while condition |
1 | case 值 in |
参数获取方式和cmd的参数获取一致
1 | [ function ] funname [()] |
docker build .
并不是指定dockerfile
的路径,而是指定了构建时ADD和COPY的上下文路径,然后根据这个路径将文件加入&复制到镜像中
RUN是在构建镜时执行一次的shell脚本
WORKDIR
)--chown=<user>:<group>
修改目标权限 COPY --chown=55:mygroup files* /mydir/
ADD URL
,将链接文件下载到指定位置,然后设置权限600ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
--build-arg <参数名>=<值>
在执行时加入HEALTHCHECK
支持下列选项:--interval=<间隔>
:两次健康检查的间隔,默认为 30 秒;--timeout=<时长>
:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;--retries=<次数>
:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。ONBUILD
是一个特殊的指令,它后面跟的是其它指令,比如 RUN
, COPY
等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行docker container start
1 | // 初始化信号量sem的初始值为value |
1 | // name是名称 |
示例
1 | int pid = fork(); |
1 | // 阻塞获取,值-1 |
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、信号、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC
网上好像用软链的方法挺多的,今天不是用软链方式(主要是我失败了)
老生常谈的问题
捣鼓了这么久,总算是实现在树莓派3b上开启支持ipv4和ipv6的热点,真是不容易,网上各种傻x桥接,根本跑不起来,看着都气人。