Skip to content

Latest commit

 

History

History
206 lines (129 loc) · 8.19 KB

202103W5.md

File metadata and controls

206 lines (129 loc) · 8.19 KB

@Author : Lewis Tian ([email protected])

@Link : github.com/taseikyo

@Range : 2021-03-28 - 2021-04-03

Weekly #22

readme | previous | next

本文总字数 2352 个,阅读时长约:4 分 35 秒,统计数据来自:算筹字数统计

*Photo by Justin W on Unsplash

Table of Contents

  • algorithm
    • 替换文件中的某一行
  • review
    • 当登录 Windows 时启动 WSL 后台服务
  • tip
    • Ubuntu Temporary failure in name resolution DNS 解析问题
    • scp 拷贝目录丢失软链接的问题
  • share
    • 先学会做人,再来做事

algorithm

1. 替换文件中的某一行

假设一个文件中有一行代码为 int output_length = 10;,这是个 C 语言代码,我需要将其修改为 20、40、80 和 100,分别输出。

对于这一需求,用 Python 其实很简单,就是一个 find+replace 的做法,然后我试了下用 Bash Shell 脚本来处理,还花了一点时间处理(自找麻烦),那么下面对比一下代码:

1、首先是 Python 版本:

def foo(length):
	with open("main.c") as f:
		lines = f.readlines()

	for idx, line in enumerate(lines):
		if line.find("output_length") > 0:
			lines[idx] = f"int output_length = {length}\n"
			break
	with open("main.c", "w") as f:
		f.write("".join(lines))

没实际运行过,大概就是这么个流程

2、Shell 版:

[ $# -eq 1  ] && val=$1 || val=10

file=main.c
newstr="int output_length = ${val};"

# 行号
line=$(grep -n "output_length" $file | head -n 1 | cut -d":"  -f1)
# 打印 & 删除对应行
sed -n "${line}p" $file
sed -i "${line}d" $file
# 插入代码
sed -i "$((line-1))a $newstr" $file > /dev/null

总结,有病。

review

由于我要使用 crontab 服务,结果发现并没有启动,我本来以为按照这个博客(解决 windows 子系统 wsl 下 crontab 无法开启的问题)就解决了。

实际上即使你把 "/etc/rsyslog.d/50-default.conf" 中 cron 的注释去掉,当 Windows 重启后,crontab 服务器还是没有自动启动,需要手动 sudo service cron start,于是就搜了一下,发现这篇博客。

还有个类似的 CSDN 博客:(20210128 已解决)WSL2 开机启动 cron

主要步骤:

点我查看

1、将启动命令写入一个脚本

echo "service cron start" >> ~/start_cron.sh
chmod +x ~/start_cron.sh

2、启用无密码 sudo

# Open visudo to edit your sudo config
sudo visudo
# add this line to enable sudo run only this script, replace userid with your own
tian ALL=(root) NOPASSWD: /home/tian/start_cron.sh

(小插曲,由于默认编辑器是 nano,我退出后直接 vim 编辑 /etc/sudoers 导致文件损害,然后重装了 Ubuntu 20.04,果然是不作死就不会死,明明 sudoers 文件开头注释写着 "# This file MUST be edited with the 'visudo' command as root.")

3、新建定时任务

任务计划程序库 --> 创建任务

常规:start_cron

触发器:新建 --> 登录时 --> 确定

操作:新建 --> 启动程序 --> 程序或脚本(C:/Windows/System32/bash.exe)>>参加参数(-c "sudo ~/start_cron.sh"

(当我在写这些的时候还没尝试过,仅仅按照步骤做了,后面再更新)


更新:

上述方法无效,然后在试另一个方法:https://askubuntu.com/a/1178910/1015648

该链接给出了两个方法:

Solution 1、使用 VBE 脚本:

进入 "C:/Users/%username%/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"

新建 sshserver.vbe 脚本,写入以下内容:

Set ws = CreateObject("Wscript.Shell") 
ws.run "wsl -d Ubuntu -u root service ssh start", vbhide

对于我则是 start_cron.vbe

Set ws = CreateObject("Wscript.Shell") 
ws.run "wsl -d Ubuntu20.04 -u root /home/tian/start_cron.sh", vbhide

我试着运行了 wsl -d Ubuntu20.04 -u root /home/tian/start_cron.sh 发现 cron 服务确实跑起来了,而使用上述 C:/Windows/System32/bash.exe -c "sudo ~/start_cron.sh" 则没用,由此看来应该是有用的。

Solution 2、同上面的计划任务,但是使用命令不同

命令:C:/Windows/System32/wsl.exe,参数:-d Ubuntu -u root service ssh start

再更新,经过测试,Sol. 1 确实有效!

tip

准确来说,这不是一个技巧,而是一个解决 bug 的方法,但还是记录一下,下次遇到直接解决。

上面的博客中,查了很多方法,跟我走过的路类似,差别是我最终还是通过这个博客解决的。

失败的过程就不讲了,解决方法是编辑 /etc/systemd/resolved.conf,把 DNS 那一行解开注释,替换为 DNS=8.8.8.8,然后重启就 OK 了。

2. scp 拷贝目录丢失软链接的问题

这个我在去年就遇到过一次,今年又遇到了;

去年在遇到之后发现早就有人踩坑,且指明了方向:scp -r 拷贝目录(其中有软链)之坑------被 404 问题折腾一个晚上啊!!!再谈软链接的 scp 拷贝,这位大哥给出的意见是不要用 scp -r 拷贝目录,先在 A 服务器上打包,然后 scp 到 B 服务器上;

话虽如此,但我遇到另一个问题,就是打包丢失文件的问题。

由于缺失头文件,而 g++ 编译输出的错误也不靠谱,说是其他头文件的定义问题,最后我才发现少东西了,绝了。

所以这里稍微做个拷贝目录的万全之策:

  1. A 服务器打包目录(记录总文件数 A-num)
  2. B 服务器解包目录,记录总文件数 B-num,比较 A-num 和 B-num
  3. 可选,比较两个目录所有文件的大小,看起来吓人,其实直接用 Python 脚本就搞定了,按顺序输出每个子目录(如果有)下每个文件的大小,然后 diff 就完了。

另外用 tar 打包/解包的简单命令(来自知乎:tar 命令,压缩/解压 .tar.xz 和 .tar.gz):

  • 打包:tar caf foo.tar.xz *.txt
  • 解包:tar xf foo.tar.xz

解释:

  • x 是解压,c 是压缩,f 后跟压缩包的路径
  • 解压时压缩包的格式会自动识别
  • 压缩时 tar.gz 用 z,tar.xz 用 J(注意大小写),根据后缀自动选择用 a,否则是普通的 tar
  • 显示详细信息用 v,指定解压路径用 -C(这回有横杠了)

share

1. 先学会做人,再来做事

昨天跟同学去集锦园吃晚饭,回实验室路上突然说起校歌、、校花和校训的问题。

我就很喜欢华科的校训:明德厚学 求是创新

我的理解校训想让每个华科学子先明明德、知是非,再厚积薄发、推陈出新。记得舅舅也说过类似的话,不求做个多成功的人,至少做一个正直善良孝顺的人。

这其实适用所有人,如果人人都能明白(显然不可能),那么那句话(树多必有枯枝,人多必有白痴)就不会流传广泛了。

网上最近涌现了很多小丑(一直都有),吃着中国的饭,花着人民币(或许不是),替外国人说话;更有甚者,管不住自己的脑子(或许只是个空壳),在网上发表侮辱先烈的言论,比如:63岁男子在微信群辱骂烈士王伟 被北京警方刑事拘留,一把年纪,活到狗身上了。

一直很好奇这些上跳下窜的都是些什么妖魔鬼怪?

readme | previous | next