Deepin 切换壁纸小工具

Linux Python Deepin 切换壁纸小工具 切换壁纸这种事,找到接口,一行代码就可以解决,本来打算用 bash 脚本,但是考虑到随机选取壁纸等因素,用 python 的 os 模块完成任务。 一、思路 找到切换壁纸的接口 设置壁纸库(文件夹) python 脚本完成功能 半小时触发脚本自动切换壁纸 二、实现过程 1、切换壁纸接口 本脚本只在 Linux 下使用。 在 Linux 下(准确说是 GNOME 桌面),通过 gsettings set 指令完成对特定值(壁纸文件位置)进行修改,即可修改壁纸。 # Ubuntu 下切换指令(注意有个 file) gsettings set org.gnome.desktop.background picture-uri "file:/home/user/Desktop/1.jpg" #Deepin 下切换指令(注意没有 file) gsettings set com.deepin.wrap.gnome.desktop.background picture-uri "/home/user/Desktop/1.jpg" 2、设置壁纸库 这步没什么好说的啊,把喜欢的壁纸放在一个文件夹下,方便之后的存取使用。 3、python 完成功能 直接上代码,看代码注释就好了。 # -*- coding: utf-8 -*- # @Date : 2018-05-21 12:07:17 # @Author : Light (halysl0817@gmail.com) # @Link : ${link} # @Version : $Id$ import os import random """ TODO(halysl0817@gmail.com):Change the wallpaper by changing the time 利用linux下的crontab工具实现半小时切换一次, */30 * * * * python /xxx/changebackground.py """ # 更换壁纸指令,此为deepin更换指令,不代表所有linux发行版更换指令 cmd = "gsettings set com.deepin.wrap.gnome.desktop.background picture-uri " # 图片目录,用户可自主更换 path = "/home/light/Documents/code/spider-on-lol/lolSpider/lolSpider/img/hero_skin_img/full/" # 利用os.listdir()方法获取图片目录下的所有文件名的列表 pic_list = os.listdir(path) # 确切的文件位置,以及确切的更换指令 real_path = path + str(random.choices(pic_list))[2:-2] real_cmd = cmd + "\"" + real_path +"\"" # 执行 os.system(real_cmd) 4、自动切换壁纸 利用 Linux 下的 crontab 完成定时任务。 ...

dmidecode 的使用

Linux dmidecode 的使用 dmidecode 命令可以让你在 Linux 系统下获取有关硬件方面的信息。dmidecode 的作用是将 DMI 数据库中的信息解码,以可读的文本方式显示。由于 DMI 信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等。 DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI 信息的收集必须在严格遵照 SMBIOS 规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS 和 DMI 是由行业指导机构 Desktop Management Task Force(DMTF) 起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。 DMI 充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI 的主要组成部分是 Management Information Format(MIF) 数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过 DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 语法 dmidecode [选项] 选项 -d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。 -h:显示帮助信息。 -s:只显示指定DMI字符串的信息。(string) -t:只显示指定条目的信息。(type) -u:显示未解码的原始条目内容。 –dump-bin file:将DMI数据转储到一个二进制文件中。 –from-dump FILE:从一个二进制文件读取DMI数据。 -V:显示版本信息。 dmidecode参数string及type列表: Valid string keywords are: 下列选项,可通过 dmidecode -s xxx 来查看,对于特定的单项,更方便获取结果。 bios-vendor bios-version bios-release-date system-manufacturer system-product-name system-version system-serial-number system-uuid baseboard-manufacturer baseboard-product-name baseboard-version baseboard-serial-number baseboard-asset-tag chassis-manufacturer chassis-type chassis-version chassis-serial-number chassis-asset-tag processor-family processor-manufacturer processor-version processor-frequency Valid type keywords are: 下面选项,可通过 dmidecode -t xxx 来获取信息,一般是某一单类别硬件信息。 ...

find 的使用

Linux find 的使用 find 用于 Linux 的查找,它的使用方法比较多。 # 常规根据文件名查询 find / -name xxx # 查找文件夹 find / -name -type d xxx # 根据文件属性进行查找 find / -user root -ls find / -user root -group root -ls find / -uid 1 -gid 1 -ls find / -nouser -ls # 根据文件权限进行查找 find / -perm 755 -type f -ls find / -perm 750 -type d -ls find / -perm /750 -type d -ls # 表示任何一个目录只要其所有者具有读写执行中的任何一项权限,或是其所属组具有读和执行中的任何一项权限,就可以符合查找条件 find / -perm -750 -type d -ls # 表示所要查找的目录其所有者必须具有读写执行权限,同时其所属组必须具有读和执行权限,对其他用户的权限没有要求 link 根据文件属性或权限进行find查找

GitHub 配置 ssh key

Github SSH GitHub 配置 ssh key 生成 key ssh-keygen -t rsa -C "your_email@example.com" 代码参数含义: -t 指定密钥类型,默认是 rsa ,可以省略。 -C 设置注释文字,比如邮箱。 -f 指定密钥文件存储文件名。 然后在交互式页面,指定文件位置,推荐设置为 ~/.ssh/id_rsa_github。 然后回车,回车,等待命令结束后,通过 ls -al ~/.ssh 观察是否多了两个文件 id_rsa_github 和 id_rsa_github.pub。 将 key.pub 添加到 GitHub 账户 a. 首先你需要拷贝 id_rsa_github.pub 文件的内容,你可以用编辑器打开文件复制,也可以用命令复制该文件的内容,如: $ clip < ~/.ssh/id_rsa_github.pub b、登录你的github账号,从右上角的设置( Account Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。 c、点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。 ...

Go 的第一个爬虫

[[Go]] Web Crawler Go 的第一个爬虫 使用 Go 实现了第一个爬虫,只使用了标准模块,无第三方模块。整体难度较低,获取 http.cat 里所有猫的照片,先从入口进入,正则匹配相关图片的 url,然后通过 file.Write 实现内容的下载,在整个过程中,使用了 http、bytes、ioutil、os、regexp 等模块,对 Go 的文件模块、路径模块和正则模块有了简单的了解。 定义结构体,保存数据 var base_url = "https://http.cat" type cat struct { // 一个结构体代表一个爬取项目 name, url string } 爬取页面代码 func httpGet(url string) (data []byte, statusCode int) { // get 请求从 url 拿数据,返回 []byte, status code fmt.Printf("date:%s\turl:%s\n", time.Now(), url) resp, err := http.Get(url) if err != nil { statusCode = -100 return data, statusCode } defer resp.Body.Close() data, err = ioutil.ReadAll(resp.Body) if err != nil { statusCode = -200 return data, statusCode } statusCode = resp.StatusCode return data, statusCode } 直接返回 []byte 是方便外部处理更方便。可以直接写入,或者 string([]byte) 转换为字符串。 正则拿到 url func regexParse(data string) []cat { // 从爬虫结果中通过正则提取所有目标数据的 name 和 url imageExp := regexp.MustCompile(`\((/images/\d{3}.jpg)\)"></div><div class="Thumbnail_content__2eR9q"><div class="Thumbnail_title__2iqYK">(\d{3})</div><p>([\w-´ ]*)`) res := make([]cat, 0) tds := imageExp.FindAllStringSubmatch(data, 100) for _, value := range tds { var buffer1 bytes.Buffer var buffer2 bytes.Buffer buffer1.WriteString(value[2]) buffer1.WriteString("_") buffer1.WriteString(value[3]) name := buffer1.String() buffer2.WriteString(base_url) buffer2.WriteString(value[1]) url := buffer2.String() res = append(res, cat{name, url}) } return res } 通过 bytes.Buffer 实现字符串的拼接,还有其他几种拼接方案。正则通过 regular expressions 101 测试。 ...

grafana-backup的使用

Linux Monitoring [[Grafana]] grafana-backup的使用 这个工具依赖于 grafana api 实现数据的备份和恢复,和服务具体的部署无关,仅需要接口地址和 token。(如果需要备份组织和用户则需要配置admin的账号密码)。 安装 两种方式: 直接安装 pip install grafana-backup 源码安装 git clone https://github.com/ysde/grafana-backup-tool.git cd grafana-backup-tool pip install . tip:centos7 安装pip以及换源 yum -y install epel-release yum install python-pip pip install --upgrade pip mkdir ~/.pip echo '[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple' > ~/.pip/pip.conf 备份 备份和恢复都需要依赖配置文件,这个工具支持三种方式: 环境变量 配置硬编码 ~/.grafana-backup.json 配置 推荐使用第三种方式。 一个简易的配置类似于: { "general": { "debug": true, "verify_ssl": true, "backup_dir": "_OUTPUT_", "backup_file_format": "%Y%m%d%H%M", "pretty_print": false }, "grafana": { "url": "http://{{ ip }}:{{ port }}", "token": "{{ token }}", "search_api_limit": 5000, "default_password": "00000000", "admin_account": "", "admin_password": "" } } 上述的配置中,需要根据实际情况填写ip和端口。token的申请则使用 grafana 的 admin 用户在 web 页面上申请 admin 权限的 API 即可拿到。大致的操作路径:Configuration –> API keys –> Add API key –> Role=admin –> Add。 ...

HTTP 协议

[[Internet]] [[HTTP]] HTTP 协议 HTTP 简介 HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP 协议工作于客户端-服务端架构(C/S)上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。 Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。 HTTP 默认端口号为 80,但是你也可以改为 8080 (代理服务器)或者其他端口。 HTTP 消息结构 客户端请求消息(请求头) 客户端发送一个 HTTP 请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图: 1、请求行 请求行由请求方法字段、URL 字段和 HTTP 协议版本字段 3 个字段组成,它们用空格分隔。比如: GET /data/info.html HTTP/1.1 方法字段就是 HTTP 使用的请求方法,比如常见的 GET/POST/HEAD。HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。 URL 统一资源定位符 HTTP 协议版本有两种:HTTP1.0/HTTP1.1。 2、请求头部 大多数请求头并不是必需的,但 Content-Length 除外。对于 POST (向服务器提交数据)请求来说 Content-Length 必须出现。 ...

IBM x3650 m4 服务器网卡问题

Linux [[Server]] [[Hardware]] IBM x3650 m4 服务器网卡问题 问题描述 Bios 中显示四个网口都是正常 connected 状态。 系统为 Ubuntu 18.04 server 后,进入系统四个网口名为:eno2,eno3,eno4,eno5,且只有 eno3 可用。 有两台这个型号的机器,原先第一台出现这问题,我认为是其他三个网口坏了,但是第二台机器问题一模一样,让我产生了探究的心情。 解决过程 先从系统层面来看,手动配置 ip 信息,但无论怎么样网络都不会起变化,我也傻了,只有重启后才改变了网络(重启还导致了一个 glibc 的问题),但一直只有 eno3 可以连通。 再从硬件层面来看,先确认四个网口都可以连通(通过 Bios 里的数据查看),但是一进系统就只有一个口可以闪烁,去查下 IBM 的文档吧。 从文档和搜索结果来看,只想了 IMM 这个东西,也就是 Integrated Management Module。 最后经过一系列的操作,确实从这里解决了问题。 解决方案 简单版 开机按 F1 进入到 Bios,进入到 System Settings–>Integrated Manager Module 选择 Reset IMM to Defaults,然后确定,注意此时机器风扇会全负荷工作,噪音比较大 等声音消失就可以重启了 复杂版 开机按 F1 进入到 Bios,进入到 System Settings–>Integrated Manager Module–>Network Configuration 更改 Network Interface Port 为 Dedicated,Fail-Over Rule 为空 然后移动到最底下保存,提示要等几分钟,那就等吧(凭感觉就可以重启了) 重启完了过后,进入系统,这时候可能所有网口都不能用了,但不要怕,通过 ip a 查看结果,观察网卡是否有这些数据 <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000,关注到这个 noop,我们可以通过如下的方法启动它,并 DHCP 分配地址,但是重启后又会消失。 ...

IP 命令的使用和解释

Linux Network IP 命令的使用和解释 ip 是网络架构中不可缺少的概念。这里的 ip 指的是 Linux 的命令,查看 man 的结果,ip - show / manipulate routing, network devices, interfaces and tunnels,可见这个命令可以控制路由,网络设备,网卡和隧道。 使用 Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila | vrf | sr } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -br[ief] | -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] | -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]} 常见对象 object link 网络设备 address ip地址 addrlabel label configuration for protocol address selection route 路由 neigh arp 或者 NDISC 缓存条目管理 ntable 临近网络操作管理 tunnel 基于 IP 的隧道 tuntap TUN/TAP 设备管理 maddress 多播地址 mroute 多播路由缓存条目 mrule 多播路由策略数据库里的规则 monitor 查看 netlink 信息 xfrm IPSec 策略管理 netns 网络命名空间管理 l2tp 基于 IP 的隧道网络 tcp_metrics tcp 指标管理 token 标记的接口认证管理 常见参数 -V, -Version 显示ip命名的版本信息 -h, -human 显示人可以看懂的信息 -s, -stats 输出更多信息 -d, -details 输出更详细的信息 -f, -family 指定协议簇,可选值有 inet, inet6, bridge, ipx, dnet, mpls 或者 link -4, shortcut for -family inet -6, shortcut for -family inet6 -B, shortcut for -family bridge -c, -color 带颜色的输出 -o, -oneline 单行显示 常用命令 ip address [show] 显示 IPv4 或者 IPv6 的地址信息 ip address show up 仅展示打开的网络设备的地址信息 ip address show dev eth0 展示 eth0 设备的地址信息 ip address add 192.168.1.1/24 dev eth1 将 ip 地址赋予 eth1 ip address delete 192.168.1.1/24 dev eth1 删除 ip 地址 ip address flush dev eth4 scope global 删除所有 eth4 的所有全局 IPv4 和 IPv6 的地址 ip a 的解析 ip a 也就是 ip addr,通过它可以查看很多信息。 ...

jenkins 使用

[[Jenkins]] jenkins 使用 安装 记住安装git命令,否则无法连接到 git 仓库。 需要安装make,glibc-static,git,go 连接 参考:https://docs.gitlab.com/13.10/ee/integration/jenkins.html 有两种方式进行连接: Setting –》 Intergrations –》 Jenkins CI Setting –》 Intergrations –》 WebHook 但这两个都出现了一些问题: jenkins CI 在 13.11 版本之前都有bug,无法配置。 WebHook 出现 Invalid Token 问题 Invalid Token:https://github.com/jenkinsci/gitlab-plugin/issues/718