分类: Linux

Unix 哲学实战案例小分享:无需工具即可挂载裸磁盘

笔者最近使用 DosBox 安装了 Windows 98,以便运行一些只兼容 Win9x 环境的软件,但在尝试拷贝文件到 Windows 98 时,却遇到了一个难题:如何才能挂载虚拟磁盘文件呢?按照 Windows 的使用习惯,自然是需要寻找一款专用的磁盘挂载软件,或者使用 DiskGenius 等磁盘分区软件读取磁盘内容。但好在我们有 Unix 哲学指引下的 Linux,无需任何第三方软件就可以挂载磁盘!

继续阅读 Unix 哲学实战案例小分享:无需工具即可挂载裸磁盘

配置 ZRAM,实现 Linux 下的内存压缩,零成本低开销获得成倍内存扩增

由于项目需求,笔者最近在一台 Linux 服务器上部署了 ElasticSearch 集群,却发现运行过程中经常出现查询速度突然降低的问题,登录服务器后发现是物理内存不足,导致机器频繁发生页面交换。由于只是临时内存需求,没有提升配置的必要,而 ElasticSearch 中存储的数据主要是文本数据,因此笔者想到了使用 ZRAM 对内存进行压缩,以避免磁盘 IO 导致性能波动,效果明显。介于互联网上关于 Linux 配置 ZRAM 的文章少之又少,本文将为读者介绍在 Linux 中配置与使用 ZRAM 的过程,并借此机会介绍 ZRAM 以及 Linux 内存部分的运作机制。

继续阅读 配置 ZRAM,实现 Linux 下的内存压缩,零成本低开销获得成倍内存扩增

[笔记分享] iptables 15 分钟入门 & 常用命令速查表

iptables 是 Linux 中非常经典的防火墙工具,但由于结构复杂,官方文档冗长,参数较多,且配置方式别扭(默认不支持持久化,命令添加即生效等),配置存在风险(一不小心就和服务器失联)等问题,导致学习曲线极高,对 Linux 新手或记忆力欠佳的人(笔者的记忆力就很差)极为不友好。本文旨在让 iptables 新手在 15 分钟内掌握 iptables 常用操作,并能根据需要快速查询想要的命令。

继续阅读 [笔记分享] iptables 15 分钟入门 & 常用命令速查表

在ARM64架构的Ubuntu Linux机器上编译安装Seafile-GUI客户端及其依赖

Seafile作为一款开源的文件同步套件,为各种主流平台提供了预编译的客户端,但由于近年其对开源热情的逐渐消退(参见我的这篇文章),Seafile-GUI在Ubuntu官方仓库的最新版本只支持到7.x,而官网提供支持最新版本8.x的仓库地址却只有AMD64的预编译版本,不巧笔者需要在ARM64平台(NanoPi NEO3)上使用Seafile-GUI,安装官方仓库里的预编译版本却无法正常使用,于是只能自己动手,尝试编译安装。本文将以Ubuntu 18.04 LTS为例,为读者介绍在ARM64架构下编译Seafile及其依赖的过程。

继续阅读 在ARM64架构的Ubuntu Linux机器上编译安装Seafile-GUI客户端及其依赖

[小技巧] 巧用yum三板斧,巧解软件源重复导致的软件包冲突

在使用yum的过程中,我们经常会遇到冲突的情况。有时冲突来源于同时安装了多个版本/架构的软件包,但更多时候冲突来源于当前安装的软件与依赖的软件来自不同软件源。由于yum基于rpm,而rpm包名的规则为包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名,这就造成了不同软件源中包名上的差别会直接导致冲突。本文将以一个简单的小例子,来为读者讲解如何解决软件源重复导致的yum冲突。

继续阅读 [小技巧] 巧用yum三板斧,巧解软件源重复导致的软件包冲突

浅谈motd的历史,并在Linux下使用多种方法实现动态motd消息显示

motd,全称Message Of The Day,是Linux中发送问候消息的功能。其消息内容通常存储在/etc/motd中,在用户登录时显示于终端提示符的上方。静态的motd可以用来显示的内容通常有限,但如果我们想要显示一些更加灵活的消息(例如系统负载、内存使用情况、磁盘使用量等),静态的motd文件无法满足我们的需求。本文将为读者介绍motd的实现原理,并使用多种方法实现动态的motd消息显示。

继续阅读 浅谈motd的历史,并在Linux下使用多种方法实现动态motd消息显示

CentOS/Fedora/RHEL下使用versionlock插件避免特定软件被更新

为了保证Linux的安全性和稳定性,我们经常需要对安装的软件进行更新。但如果某些更新与当前环境存在兼容性问题(最典型的例子是内核更新与虚拟机Hypervisor的兼容性),我们应该怎么做呢?在CentOS/Fedora/RHEL中(后文以CentOS为例),大部分用户可能会直接修改仓库配置文件,或者执行yum update --exclude=xxx,但这两种方法都不够直观,操作也比较繁琐。本文将为读者介绍一种使用yum/dnf的versionlock插件避免特定软件被更新的方法。

继续阅读 CentOS/Fedora/RHEL下使用versionlock插件避免特定软件被更新

为CentOS/RHEL等发行版中的systemd服务配置ulimit限制

近年来,几乎所有现代Linux发行版都将service替换成了systemd以实现更完善的服务管理,而随之变化的是相关用户策略的变化。可能不少读者都遇到过systemd服务提示打开文件数过多,但设置ulimit无效的问题,尤其是对于数据库这种并发数较大的业务。本文将为读者讲解如何正确地为systemd的服务配置ulimit限制。

继续阅读 为CentOS/RHEL等发行版中的systemd服务配置ulimit限制

巧解国内网络环境下部分yum源下载速度过慢的问题

众所周知,CentOS下的大部分软件源服务器都在海外,因此使用这些软件源下载软件速度会非常慢,甚至完全下载不了。对于官方源我们可以使用Tuna等国内镜像加快速度,但对于DockerMySQLRemi等非官方源则无能为力。本文将介绍一个巧妙解决这一问题的方法,以便加快非官方源安装速度。

继续阅读 巧解国内网络环境下部分yum源下载速度过慢的问题

进程间信号简述及使用Python响应进程间信号

在软件开发,尤其是命令行软件开发过程中,我们经常会遇到需要响应用户中止热键的情况:如Ctrl+C(中止程序)、Ctrl+Z(Shell下发送SIGTSTP信号)等,这些热键最终会以进程间信号的方式通过操作系统传递给进程。一个完善的软件应该能通过合适的方式处理各种信号,并执行用户所需的任务,以Python为例,它提供了signal模块便于我们捕获、处理信号,本文将为读者介绍常见的进程间信号与Python下使用signal响应进程间信号的方法。

继续阅读 进程间信号简述及使用Python响应进程间信号