使用文件的inode号码删除无法打出名字的文件
在操作 UNIX和Linux系统时,偶尔由于误操作等会出现一些无法打出文件名(例如文件名包含非法字符)的文件,由于无法打出名字,所以不容易使用 rm 命令将其删除。
在操作 UNIX和Linux系统时,偶尔由于误操作等会出现一些无法打出文件名(例如文件名包含非法字符)的文件,由于无法打出名字,所以不容易使用 rm 命令将其删除。
很多docker容器为了轻量化,都不包含一些基础命令,如ip ,address,tcpdump 等,这给调试容器的网络带来了麻烦。
其实我们可以通过 命令进入容器的网络命名空间,使用宿主机的命令调试容器网络。
数据库分布在多台设备上的好处:
扩展负载
今天发现早上登录服务器,查看日志有大量ssh登录的爆破,所以先限制root用户不允许远程登录,再使用Fail2Ban自动封锁ip限制一下。
记录如下:
很多内网环境需要离线安装软件,就需要我们在可以上网的服务器上将需要安装的软件的相应安装包及其依赖下载下来,传输到离线机器,再安装。其中下载和处理依赖关系可能比较麻烦,所以本文特做记录。
F12 打开开发者模式,选择需要截图的节点,ctrl+shift+p 打开运行栏,搜索 shot,选择 Capture node screenshot,如下图:

如果截取手机或平板模式的图,先点击左上角的 Toggle device toolbar ( Ctrl + Shift + M )选择合适的设备,再进行上面步骤。
代码实现如下:
# 解析 yml , 数组自动添加序号
#
### 例如:
### yml 如下:
### global:
### input:
### - "main.c"
### - "main.h"
### flags: [ "-O3", "-fpic" ]
### sample_input:
### - { property1: value, property2: "value2" }
### - { property1: "value3", property2: 'value 4' }
###
### 执行: eval $(parse_yaml "config.yml")
###
### 解析结果如下,相当于生成了如下代码:
### global_input_1="main.c"
### global_input_2="main.h"
### global_flags_1="-O3"
### global_flags_2="-fpic"
### global_sample_input_1_property1="value"
### global_sample_input_1_property2="value2"
### global_sample_input_2_property1="value3"
### global_sample_input_2_property2="value 4"
###
### 最后可以使用间接变量引用,访问变量
###
function parse_yaml {
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo -e '\034')
sed -ne "s|,$s\]$s\$|]|" \
-e ":1;s|^\($s\)\($w\)$s:$s\[$s\(.*\)$s,$s\(.*\)$s\]|\1\2: [\3]\n\1 - \4|;t1" \
-e "s|^\($s\)\($w\)$s:$s\[$s\(.*\)$s\]|\1\2:\n\1 - \3|;p" $1 | \
sed -ne "s|,$s}$s\$|}|" \
-e ":1;s|^\($s\)-$s{$s\(.*\)$s,$s\($w\)$s:$s\(.*\)$s}|\1- {\2}\n\1 \3: \4|;t1" \
-e "s|^\($s\)-$s{$s\(.*\)$s}|\1-\n\1 \2|;p" | \
sed -ne "s|^\($s\):|\1|" \
-e "s|^\($s\)-$s[\"']\(.*\)[\"']$s\$|\1$fs$fs\2|p" \
-e "s|^\($s\)-$s\(.*\)$s\$|\1$fs$fs\2|p" \
-e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" | \
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]; idx[i]=0}}
if(length($2)== 0){ vname[indent]= ++idx[indent] };
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) { vn=(vn)(vname[i])("_")}
gsub(/\s*#.*$/, "", $3);
printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, vname[indent], $3);
}
}'
}用法:
数据在不共享内存的进程传递,就需要编码为字节序列。有多种方式。
兼容性 实际描述了 编码数据的进程 和 解码数据的进程 之间的关系。它对 可演化性(允许你升级系统的部分,而不必全部升级) 非常重要。