Linux

分类下相关文章

国产开源操作系统 open 麒麟安装体验

最近看到好多国产操作系统替代的消息,公司这边也遇到了客户要求用 open 麒麟系统开发上位机的需求, 禁止使用 Windows 系统。加之 Open 鸿蒙 PC 系统的新闻也渐渐有风声了。看来国产系统替代是绕不过了。 收到领导任务,正好安装测试一下 openKylin 系统。 效果图 安装文档 直接参考官方文档: https://docs.openkylin.top/zh/%E7%A4%BE%E5%8C%BA%E5%8F%82%E4%B8%8E%E6%8C%87%E5%8D%97/openKylin%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E6%8C%87%E ...

阅读全文...

通过 Makefile 及 ssh 远程执行命令,实现服务器线上服务的自动部署

最近一直写接口文档,基于 swaggo 实现的文档服务。由于要跟前端配合,所以每天都要频繁更新接口文档,非常麻烦。之前是半自动化状态: makefile 中 scp 文档程序到服务器 手动登录服务器,再 makefile 执行 systemd reload 文档服务 (文档服务基于 golang gin 所以需要重启服务) 最近在看一个开源项目的 Makefile 时,发现可以使用 ssh 远程执行命令,这样就不需要手动登录服务器来操作了,甚好。 Makefile 代码 .PHONY: doc doc: swag init --output api_docs --tags "微 ...

阅读全文...

systemd timer 与 crontab 的对比

在排查 certbot 不自动更新证书问题时,第一次知道 systemd timer 也能做为系统定时任务的管理工具。但是他与之前熟知的 crontab 有什么区别呢? 列举一下 systemd timer 的优势 支持微妙、毫秒、秒级的定时任务;而 crontab 只能支持到分钟级 上次任务没有执行完时,不会重复执行定时任务;而 crontab 需要手动处理单例问题 支持只执行一次的定时点的计划任务 方便的指定运行用户。 两个配置文件 每一个“.timer”文件必须有一个对应的“.service”文件存在,这样计时器才有意义。默认情况下,如果Timer和Service的文件名(不包含扩展 ...

阅读全文...

ulimit 查看 Maximum number of open file descriptors

ulimit 的作用 网上大部分介绍是说,ulimit 显示的是当前用户的资源限制。 “ulimit” is an interesting Linux shell command that can set or report the resource limit of the current user. 而 man ulimit 的描述是,shell 的资源限制。 ulimit builtin sets or outputs the resource usage limits of the shell and any processes spawned by it. ulimit ...

阅读全文...

ubuntu 上升级 tmux 到最新版本

我发现家里电脑旧版本的 tmux 与 NeoVim 的 ale 插件有兼容性问题,在提示语法错误时,会导致 vim 显示混乱。而退出 tmux 或者在公司电脑上用最新的 tmux 就不会出现这种显示问题。 用 apt install 的方式并不能获取到最新的 tmux 版本。 所以只能从 github 上下载最新的代码,手动编译安装。 升级方法 sudo apt install libevent-dev ncurses-dev build-essential bison pkg-config wget https://github.com/tmux/tmux/releases/download ...

阅读全文...

smug 一款用 go 实现的 tmux session manager

之前由 tmuxinator 叛变到了 tmuxp, 但是不想 tmuxp 的打开速度奇慢无比,一个 8 个 window 的配置文件, 打开需要 5 秒以上,慢的不可思议。 于是今天借新建项目的机会,我又尝试了一个用 golang 实现的 tmux session 管理工具 - smug smug 的中文意思是: adj. 自鸣得意的;自以为是的;整洁的 n. 书呆子;自命不凡的家伙 我觉得可能是 session manager using go 的缩写吧,这样容易记忆。 smug 的优势 启动速度相比 tmuxp 这个渣渣快 N 倍,几乎秒开 配置相对 tmuxp 简洁太多 规避了对 ...

阅读全文...

Makefile 中导入 .env 配置

例如我想在 Makefile 中定义 mysqldump, 然后读取 .env 中的参数配置。 .env 文件 DB_DATABASE=somedb DB_USERNAME=someuser DB_PASSWORD=password Makefile 直接 include 就可以 include .env .PHONY: mysqldump mysqldump: mysqldump -u$(DB_USERNAME) -p$(DB_PASSWORD) $(DB_DATABASE) > database/sql/data.sql make 执行 > make mysqldu ...

阅读全文...

线上服务器配置 systemd

目标 降低操作成本。能快速线上部署,更新代码 将线上一套没有配置 systemd 的服务,加上 systemd 配置 形成配置模板。避免每次都忘记具体命令,再就是代码更新,线上重启服务,形成脚本,节省时间 模板 systemd 配置形成 vim snippet。实际上是两个,一个是 systemd 的,一个是 makefile 的。 配置文件放到项目根目录的 config 目录下。集中存放 systemd,nginx 配置文件等 相关操作命令放到 Makefile 中。例如,systemctl enable start stop 等,scp 配置文件等。 TODO [X] vim s ...

阅读全文...

tmuxp 通过文件名加载配置,省略路径

通过文件路径加载 tmuxp 配置文件,太麻烦。 tmuxp load ~/work/config/tmuxp/daily.yml 我希望能达到 tmuxinator 那种后面直接输入名字就可以加载的效果。 查了一下,tmuxp 还真的支持这个功能: https://tmuxp.git-pull.com/cli.html#load-session # name of the config, assume $HOME/.tmuxp/myconfig.yaml tmuxp load myconfig 即把所有配置文件都放到 ~/.tmuxp 目录下即可。 创建软链接 这样我只需要把 .tm ...

阅读全文...

安装 tmuxp 替代 tmuxinator

为何要抛弃 tmuxinator tmuxinator 升级需要升级 ruby 升级 ruby 需要安装 rvm 安装 rvm 又需要更新 gpg 然而 gpg 更新永远连不上服务器 我对 ruby 升级的麻烦程度感到了无比的厌恶,而我电脑上唯一需要用到 ruby 的地方就是这个 tmuxinator。 $ sudo gem install tmuxinator Fetching: thor-1.2.1.gem (100%) Successfully installed thor-1.2.1 Fetching: xdg-2.2.5.gem (100%) Development of thi ...

阅读全文...

提升 Tmux 状态栏颜值

看了一段日本小哥的写代码视频,发现里面的 terminal 配置非常漂亮。 既然每天都要在 tmux 中工作,把界面美化一下还是有必要的,至少心情是愉悦的。 最终效果: 是时候更新一下配置了 现有的 .tmux.conf 文件是 10 年前配置的,之后就没怎么更新过了。 只有偶尔几次升级版本导致配置不兼容,才被动调整了几次。当前效果: .tmux 找到一个 star 16K 的 tmux 配置: https://github.com/gpakosz/.tmux 跟日本小哥的效果非常相似。 查看当前 tmux 版本 上面的 .tmux 配置有最低版本要求 tmux >= 2.3 (s ...

阅读全文...

Ubuntu Apt 在不安装三方包的情况下,查看版本号

例如,我想看看 Ubuntu Apt 中的 influxdb 版本是否是最新的 2.0 版本。 但是,我又不想先 apt install,仅仅想看看版本号。 可以使用 apt show: > apt show influxdb Package: influxdb Version: 1.6.4-1build1 Built-Using: golang-1.10 (= 1.10.4-2ubuntu1) ... ...

阅读全文...

WSL 1 升级 WSL 2 之后,Ubuntu 无法解析域名问题

将 WSL 1 升级到 WSL 2 之后,一直无法解析域名,例如 ssh 域名,报错: Could not resolve hostname 查看 resolv.conf 文件 ls -la /etc/resolv.conf /etc/resolv.conf -> ../run/resolvconf/resolv.conf 而 /run/resolvconf/resolv.conf 文件根本无法编辑。 解决方法 参考: https://github.com/microsoft/WSL/issues/5420 sudo rm /etc/resolv.conf sudo bash -c ...

阅读全文...

systemd 保存 golang 服务日志到指定文件

需求场景 我想将 golang 打印的日志保持到指定日志文件,方便需要的时候进行查看。例如: log.Println("some log") 而默认用 systemd 管理该服务的时候,是看不到日志输出的。 systemd 应用日志配置 每次重启都重置日志文件为空,重新写入: StandardOutput=file:/var/my.log StandardError=file:/var/my.log 保留所有日志历史,每次都 append: StandardOutput=append:/var/my.log StandardError=append:/var/my_er ...

阅读全文...

linux 用户组权限

以一个实际案例来体验一下 linux 用户组的权限查看及配置。 需求场景 测试环境:ubuntu 20.04。 我在服务器上新建的用户,希望能够不用 sudo 就可以查看 nginx 的 access.log 日志文件。 无法直接查看 access.log 的原因 $ ls -lah -rw-r----- 1 www-data adm 1.3M Nov 23 08:24 access.log 看第一个字段的其他用户权限,为 000。即连读取的权限都没有。 最简单的解决方案 把新用户加入 adm 用户组。 首先查看 adm 用户组有哪些用户: $ sudo groupmems -g a ...

阅读全文...