解决群晖Moment不显示拷入照片

解决群晖Moment不显示拷入照片

近期趁着双十一购入群晖一台,装好Moments,将照片导入Moment文件夹,但刷新并没有在Moments主页看到直接考入文件夹内的照片。 开始以为是正在转码,搜索一圈也有人这么说,后来有人提出是由于权限问题,于是尝试修复。 ...

November 7, 2020 | 1 分钟 | 356 字 | Tianlun Song
局域网内跨平台传输文件、文字 | Dukto

局域网内跨平台传输文件、文字 | Dukto

在日常生活和实际工作中经常需要涉及到局域网内多设备传输文件,此前尝试过飞鸽传书,发现Mac平台体验并不好,也不够可靠;使用NAS等网络存储设备可以解决,但不能随时随地都带这个NAS,此时通过一款可跨平台传输文件的工具在网内分享文件就可极大提升效率。 ...

October 30, 2020 | 2 分钟 | 612 字 | Tianlun Song
iTerms 常用快捷键

iTerms 常用快捷键

切换 tab: ⌘+← , ⌘+→ , ⌘+{ , ⌘+} , ⌘+数字 直接定位到该 tab; 新建 tab: ⌘+t; 顺序切换 pane: ⌘+[ , ⌘+] ; 按方向切换 pane: ⌘+Option+方向键 ; 切分屏幕: ⌘+d 水平切分, ⌘+Shift+d 垂直切分; 智能查找,支持正则查找: ⌘+f 。 多个Tab、窗口执行同一个命令: ⌘Command + ⇧Shift + I 参考文献 你应该知道的 iTerm2 使用方法–MAC终端工具:http://wulfric.me/2015/08/iterm2/ Send command to all iTerm 2 panes:https://blog.blakesimpson.co.uk/page.php?id=35&title=send-command-to-all-iterm-2-panes iTerms多个Tab、窗口执行同一个命令:https://blog.csdn.net/u014440417/article/details/81136505

October 22, 2020 | 1 分钟 | 406 字 | Tianlun Song
Python执行或远程执行shell命令

Python执行或远程执行shell命令

最近想要实现通过脚本循环再 Linux 下运行 shell 命令,经过探索发现使用 Python 语言有几种解决方案,在此简单记录。 方案一:脚本本地执行命令 在 Python 中有两个库都可以实现运行 shell 命令的效果: import subprocess import os 使用方法也很简单: ...

October 21, 2020 | 2 分钟 | 725 字 | Tianlun Song
终端抓包神器 | tcpdump参数解析及使用

终端抓包神器 | tcpdump参数解析及使用

本文整理转自:tcpdump参数解析及使用详解 tcpdump介绍 tcpdump 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统操作系统(如linux,BSD等)。类Unix系统的 tcpdump 需要使用libpcap这个捕捉数据的库就像 windows下的WinPcap。 ...

October 20, 2020 | 3 分钟 | 1119 字 | Tianlun Song
SecureCRT下Python脚本编写

SecureCRT下Python脚本编写

本文主要内容转自:SecureCRT中python脚本编写学习指南 SecureCRT 支持 VB、JavaScript、Python 等多种脚本语言。 一、使用 python 语言实现 SecureCRT 中的 Dialog 功能 # $language = "Python" # $interface = "1.0" #crt.Dialog.FileOpenDialog([title,[buttonLabel,[defaultFilename,[filter]]]]) #弹出一个对话框,用于选择单个文件;如果选择了具体文件则返回该文件的绝对路径,如果选择了弹窗的“取消”,则返回空。 filePath = crt.Dialog.FileOpenDialog("please open a file","open","a.log","(*.log)|*.log") #filePath = crt.Dialog.FileOpenDialog("","","a.log","") #crt.Dialog.MessageBox(message, [title, [icon|buttons]]) 警告、按钮类型弹出一个消息框,可以定义按钮,使用按钮和文本消息来实现和用户的简单对话; crt.Dialog.MessageBox(filePath,"",64|0) crt.Dialog.MessageBox("会话已断开","session",64|2) crt.Dialog.MessageBox("确认是否退出","session",32|1) crt.Dialog.MessageBox("确认是否退出","session",32|3) crt.Dialog.MessageBox("是否继续安装","session",32|4) crt.Dialog.MessageBox("此会话已打开","session",48|5) crt.Dialog.MessageBox("无法连接此窗口","session",16|6) #crt.Dialog.Prompt(message [, title [,default [,isPassword ]]]) #弹出一个输入框,用户可以填写文字,比如填写文件名,填写路径,填写IP地址等,运行结果如果点击'ok',返回输入的字符串,否则返回"" password = crt.Dialog.Prompt("password","session","admin",False) crt.Dialog.MessageBox(password,"password",64|0) password = crt.Dialog.Prompt("password","session","",True) crt.Dialog.MessageBox(password,"password",64|0) 二、使用 python 语言实现 SecureCRT 中的 Screen 功能 # $language = "Python" # $interface = "1.0" # CurrentColumn返回当前光标的列坐标。 curCol = crt.Screen.CurrentColumn crt.Dialog.MessageBox(str(curCol)) # CurrentRow返回当前光标的行坐标。 curRow = crt.Screen.CurrentRow crt.Dialog.MessageBox(str(curRow)) # Columns 返回当前屏幕的最大列宽 cols = crt.Screen.Columns crt.Dialog.MessageBox(str(cols)) # Rows 返回当前屏幕的最大行宽 rows = crt.Screen.Rows crt.Dialog.MessageBox(str(rows)) #IgnoreEscape 定义当使用WaitForString、WaitForStrings和ReadString这三个方法时是否获取Escape字符(特殊字符如回车)默认是会获取的 crt.Screen.IgnoreEscape = False crt.Dialog.MessageBox(crt.Screen.ReadString(["\03"],5)) #获取ctrl+c crt.Screen.IgnoreEscape = True crt.Dialog.MessageBox(crt.Screen.ReadString(["\03"],2)) #不获取ctrl+c # MatchIndex 定义当使用WaitForStrings和ReadString这三个方法时会根据参数的位置 获取返回值,从1开始计算,如果没有一个匹配则返回0. outPut = crt.Screen.ReadString(["error","warning","#"],10) index = crt.Screen.MatchIndex if (index == 0): crt.Dialog.MessageBox("Timed out!") elif (index == 1): crt.Dialog.MessageBox("Found 'error'") elif (index == 2): crt.Dialog.MessageBox("Found 'warning'") elif (index == 3): crt.Dialog.MessageBox("Found '#'") # Synchronous 设置屏幕的同步属性。若设置为false,则在脚本中使用WaitForString、WaitForStrings、ReadString函数时可能存在丢失一部分数据的现象,设置为true后可能会存在屏幕卡顿的情况,默认为false crt.Screen.Synchronous = True crt.Screen.Send("\r\n") crt.Screen.ReadString("#") crt.Screen.Send("\r\n") crt.Screen.WaitForString("#") crt.Screen.Send("\r\n") crt.Screen.WaitForStrings(["#",">"]) crt.Screen.Send("conf t\r\n") # 方法 # Clear()清屏功能 # crt.Screen.Clear() # get()按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),不包含字符串中的回车换行符,所以这个多用于获取无格式的光标处字符串或某小段特定区域字符串。 out = crt.Screen.Get(row1, col1, row2, col2) crt.Dialog.MessageBox(out) # get2()解释按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列),包含字符串中的回车换行符,所以这个多用于获取大段带格式的字符串。 crt.Screen.Get2(row1, col1, row2, col2) # IgnoreCase 使用全局参数设置控制在使用WaitForString、WaitForStrings和ReadString这三个函数时是否对大小写敏感,默认为false大小写字符串都会检查,设置为true时则不会检测大小写。 crt.Screen.IgnoreCase = True crt.Screen.Send("show memory\r\n") crt.Screen.WaitForString("more") crt.Screen.Send("\r\n") crt.Screen.WaitForStrings("more","#") crt.Screen.Send("\r\n") crt.Screen.ReadString("more","#") # Send() 向远端设备或者屏幕发送字符串,当向屏幕发送字符串时需要指定第二个参数为Ture crt.Screen.Send("show version\r\n") crt.Screen.Send("\r\nhello,world!\r\n",True) crt.Screen.IgnoreCase = True while (crt.Screen.WaitForString("more",10)): crt.Screen.Send("\r\n") # SendKeys()向当前窗口发送按键,包含组合按键,比如可以发送类似"CTRL+ALT+C"等这样的组合键,这样写即可:crt.screen.sendkeys("^%c");这个功能需要语言本身支持,目前只有VBS和JS脚本可以使用。 # SendSpecial()可以发送特殊控制码,这个控制码是Crt内置的功能,具体可以包含的有Menu、Telnet、VT functions功能列表中提供的所有功能, crt.Screen.SendSpecial("vT_HOLD_SCREEN") # WaitForCursor()等待光标移动,当移动时返回值为true,当有超时时间参数且超时时返回false,否则会一直等待光标移动。利用这个功能可以用来判断一个命令的输出是否结束, crt.Screen.WaitForCursor(5) crt.Screen.Send("\r\nhello,world!\r\n",True) if ( crt.Screen.WaitForCursor(5)): crt.Screen.Send("show version\r\n") # WaitForKey()检测有键盘按键时返回true,当有超时时间参数且超时时返回false,否则会一直等待按键 if (crt.Screen.WaitForKey(5)): crt.Screen.Send("show version\r\n") # WaitForString()一般用于发送命令后等待某字符串 # crt.Screen.WaitForString(string,[timeout],[bCaseInsensitive]) crt.Screen.WaitForString("#",10) # WaitForStrings()与WaitForString是同样的功能,可以等待多个字符串 outPut = crt.Screen.WaitForStrings(["error","warning","#"],10) index = crt.Screen.MatchIndex if (index == 0): crt.Dialog.MessageBox("Timed out!") elif (index == 1): crt.Dialog.MessageBox("Found 'error'") elif (index == 2): crt.Dialog.MessageBox("Found 'warning'") elif (index == 3): crt.Dialog.MessageBox("Found '#'") # ReadString()与WaitForStrings功能类似,都是等待某几个字符出现,不同的是它还会读取字符串之前出现的所有字符。 crt.Screen.ReadString([string1,string2..],[timeout],[bCaseInsensitive]) 1. string,必选参数,等待的字符串,最少有一个,可以是特殊字符比如:\r\n; 2. timeout,可选参数,超时时间,当检测不到对应字符串时会返回false,没有此参数时会一直等待; 3. bCaseInsensitive,可选参数,大小写不敏感,默认值是false,表示将检测字符串的大小写,当为true时不检测大小写。 三、实例 1. 实例一,循环运行命令 # $language = "python" # $interface = "1.0" # This automatically generated script may need to be # edited in order to work correctly. import time start_time = time.time() end_time = time.time() def Main(): while True: end_time = time.time() crt.Screen.Synchronous = False crt.Screen.Send("?") crt.Screen.Send("\r\n") crt.Screen.Send("\r\n") time.sleep(1) running_time = end_time - start_time msg = "会话已断开\n" + \ "running ms : " + str(running_time) + "\n" + \ "start ms : " + str(start_time) + "\n" + \ "ent ms : " + str(end_time) + "\n" crt.Dialog.MessageBox(msg,"session",64|2) Main() 参考文献 SecureCRT 中 python 脚本编写学习指南:https://www.cnblogs.com/zhaoyujiao/p/4908627.html 友情链接:http://www.cnblogs.com/OnOwnRoad/ Python time sleep()方法:https://www.runoob.com/python/att-time-sleep.html Python(2)变量声明、变量类型:https://blog.csdn.net/qq20004604/article/details/78176329 Python 日期和时间:https://www.runoob.com/python/python-date-time.html 可能是最全面的 python 字符串拼接总结:https://segmentfault.com/a/1190000015475309 python 中整数,浮点数和字符串的转换:https://blog.csdn.net/mx_windforce/article/details/9009455 python 毫秒级 sleep:https://www.cnblogs.com/mmix2009/p/3223188.html Python 获取以毫秒为单位的时间戳:https://www.jianshu.com/p/9a8bfc04dbac python 基础学习 04(死循环):https://blog.csdn.net/yujin2010good/article/details/51278706

October 15, 2020 | 6 分钟 | 2922 字 | Tianlun Song
Make参数

Make参数

-b -m 这两个参数的作用是忽略和其它版本make的兼容性。 -B –always-make 认为所有的目标都需要更新(重编译)。 -C –directory= 指定读取makefile的目录。如果有多个“-C”参数,make的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。如:“make –C ~hchen/test –C prog”等价于“make –C ~hchen/test/prog”。 ...

October 14, 2020 | 4 分钟 | 1938 字 | Tianlun Song
Makefile实例:批量编译多个目标

Makefile实例:批量编译多个目标

gist: https://gist.github.com/songtianlun/8984626fd80cd20b7c2e71f95caaf8d1 # Batch Single C file MakeFile # 指定CPU架构 Architecture -> ARCH ARCH ?= CC = $(ARCH)gcc SUFFIX = .c CFLAGS += -Wall -g LD = CUR_SOURCE = $(wildcard *$(SUFFIX)) CUR_TARGETS = $(patsubst %$(SUFFIX), %, $(CUR_SOURCE)) all:$(CUR_TARGETS) # %:%.c 是一个表示与目标相同 文件的模式变量 $(CUR_TARGETS):%:%$(SUFFIX) $(CC) $< $(CFLAGS) -o $@ $(LD) # 指定伪目标 .PHONY:clean all clean: -rm -rf $(TARGETS) 参考文献 arch 这个词到底是什么意思?:https://www.v2ex.com/t/389388 玩转Makefile | 一次编译多个目标:https://blog.csdn.net/yychuyu/article/details/79950414

October 14, 2020 | 1 分钟 | 202 字 | Tianlun Song
Makefile中部分函数的使用

Makefile中部分函数的使用

foreach 一、作用 循环处理文件列表。 二、格式 $(foreach var text commond) var:局部变量 text:文件列表,空格隔开,每一次取一个值赋值为变量var commond:对var变量进行操作(一般会使用var变量,不然没意义),每次操作结果都会以空格隔开,最后返回空格隔开的列表。 ...

October 14, 2020 | 2 分钟 | 793 字 | Tianlun Song
Makefile基础语法

Makefile基础语法

Makefile 是描述文件依赖关系的说明,由若干个规则组成,每个 规则 的格式如下: 目标:依赖关系 <tab键> 命令 其中: 目标 是指 make 最终要创造的产物,也是 make 执行的动作名称,例如 clean ; 依赖关系 是指编译目标体需要依赖的一个或多个文件列表; 命令 是指为了从依赖文件创造目标文件所需执行的命令。 make 执行的动作也是一个目标,为避免该目标和文件目标冲突,可以使用以下格式将动作指定伪目标: ...

October 14, 2020 | 1 分钟 | 492 字 | Tianlun Song