abs:http://www.tldp.org/LDP/abs/html/index.html
字符串操作:
DevOps
先写一个语义不太清晰的写法:
1 |
exec 1<>/tmp/file |
通常来讲,1是标准输出,如果我们要重定向标准输出到文件 /tmp/file , 则写法如下:
1 |
exec >/tmp/file |
这里没有写文件描述符,默认为输出重定向说的就是文件描述符1,即:
1 |
exec 1>/tmp/file |
那么,你可能会说:
1 |
exec 1<>/tmp/file |
也有这个效果,那么这个有如何解释呢?
该命令逻辑上等效于: (实际上不是)
1 |
exec 1</tmp/file && exec 1>/tmp/file |
前面是说的输入重定向,后面说的是输出重定向;
但是,通常我们不会去读标准输出的,虽然0/1/2 和其它文件描述符都是一样的。
下面看一个实际测试:
因为每个文件描述符只有一个位置指针,读写操作的指针不是分开的,所以,这里我们是从文件尾部开始read的,所以啥也read不到,能否跳转到文件头read呢?
这里有很多有意思的思路: https://stackoverflow.com/questions/3838322/bash-read-write-file-descriptors-seek-to-start-of-file
为什么下面写法是不对的?
https://www.cnblogs.com/liqiuhao/p/7058254.html
关于pts tty的历史
通过bash解析db2look 导出的sql文件中的create table语句,并写入对应的独立的文件。
脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash target_dir=$1 while read line; do [[ "$line" == "" ]] && continue [[ $line == CREATE\ TABLE\ * ]] && { read schema table < <(awk -F'"' '{print $2 " " $4}' <<<"$line") #echo $schema $table dir="$target_dir/$schema" [ -d $dir ] || mkdir -p $dir file=$dir/${table}.sql echo "$line" >$file while read line; do [[ "$line" == IN\ * ]] && [[ "$line" != *\; ]] && continue # infact IN clause always not end with ; echo " $line" >>$file # Space indentation looks better [[ $line == *\; ]] && break done } done |
其实,grep也能提取,只是不方便分文件写入,而且,不方便去掉不想要的IN子句,grep的写法:
1 |
cat ifm30.sql |grep --binary-files=text -Pzo "^CREATE TABLE .+[^;]+;" |
一般来讲,这个事儿是sed该干的,但是,sed做起来也不那么简单,可能每次写都需要问百度。
bash如何实现呢?
这里涉及了三种情况:
写起来是不是比较麻烦?
脚本:
1 2 3 |
while read line; do [[ "$line" == "" ]] || echo "$line" done |
简直不敢相信,远比sed要简单的多吧。
因为read自然帮我们去的掉了行首行尾的空白了。
不过需要注意的是:
关于echo “$line” 中双引号的作用:
假如 line=”1 2 3″
echo $line 等效于 echo 1 2 3 ;根据我们基本的认知,2和3中间有多少个空格都等于1个空格,对于echo来讲都是3个参数
echo “$line” 等效于 echo “1 2 3” ; 这里的echo接收到的是1个参数,自然不能随意丢掉其中的空格
db2 中没有类似mysql中的show create table 的命令,只是db2look 可以导出表结构,如果要查看建表语句也不太方便,尤其想把每个表的建表语句都放在单独的文件,下面的命令可以从db2look到处的sql文件中提取表结构:
1 2 3 |
while read tb; do grep --binary-files=text -Pzo "^CREATE TABLE \"$schema\".\"$tb\"[^;]+;" db.sql >./tables/$tb done <<<"tb1 tb2 tb3" |
不过这样的话,也是先db2look得到文件后,先将表名提取出来,再提取表结构,步骤稍许麻烦。
db2look 用法:
1 |
db2look -d hxpuat -a -e -o hxpuat.sql |
周一
周二
周三
周四
周五
参考:
https://superuser.com/questions/446362/why-cant-i-create-soft-link-on-vboxsf-file-system
处于安全考虑,virtualbox 4.1.8之后, 不允许在共享目录中创建软连接,尽管不是只读挂载,创建软连接也会提示readonly;
原本的符号链接会访问错误的,如: Protocol error
快捷的做法是:我们可以直接copy原始文件,而不是使用软连接
但是可以通过如下命令修改:
1 |
VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1 |
实测:
VBoxManage setextradata docker VBoxInternal2/SharedFoldersEnableSymlinksCreate/workspace 1
还有一个问题: vboxsf挂载的文件系统的mode是固定的,通过chmod修改不了,如果有些文件就是期望某种mode的话,就是不好搞的,所以这个文件系统时不时会给我们带来麻烦
这里会卡上很长时间
一次保存文章时,不小心删除了很多内容,几小时后才发现,有点抓狂;
抓狂是没有用的,突然想起很多wiki都是有历史版本的功能的,如果wordpress也有该都好,其实是有的,就在眼皮底下,只是从来没用过而已;
第一次保存时看不到的:
更新后就能看到的:
找到历史版本,回退到指定的历史版本就可以了\(^o^)/