Shawn's Blog
13 分钟阅读

2024 年的自建 NAS 不专业不完全手册

0X00 你需要一台 NAS 吗 不知怎么的,在移动互联网疯狂发展的今天,反而慢慢开始兴起了自建网络服务这种复古风潮。最近这些年身边的朋友同事越来越多聊到 NAS 了,甚至 B 站上出现了一小撮 NAS 区 UP 主(没错,你知道我说的是谁)。就更不说现在淘宝咸鱼上大量的 NAS 专用机箱,甚至是 3D 打印的定制化版本了。 你真的需要一台 NAS 吗?NAS 说白了就是一块连着网的硬盘,速度比直接插电脑上还慢一些,如果你平日里需要访问数据的设备并不多,且拥有一个台式电脑,那不如先买两块硬盘插上去。通过文件共享功能将台式机转换成一个带有存储功能的兼职 NAS。 如果你家里的多个手机、平板、电脑、电视都需要访问存储,或者你没有台式机可以扩容,那确实可以考虑搞一台 NAS。 我自己的需求是这样的: * 平时喜欢摄影,每次拍摄回来的照片少则 10G 多则 50G,日积月累已经有大几百 G 了,需要备份 * 也喜欢拍一些视频,相机拍摄的码率都很高,随随便便 50G 100G 的,需要备份 * 患有仓鼠症,喜欢囤一些高清电影电视剧来看,总共搞了有差不多 8T 了 *…

1 分钟阅读

假数据制造机:Python 中的 Faker 库

0X00 来骗,来偷袭 这次来介绍一个来骗来偷袭的 Python 库:Faker。我们平时经常会跟数据库、跟 csv 这些东西打交道。尤其是当你设计一个数据库表的时候,开发和测试环境中只有空荡荡一个表,没有测试数据就很尴尬。 Faker 就是设计来解决这种问题的,它可以快速生成各种你需要的假数据。安装和使用都非常简单:pip install Faker 就可以完成安装。 这篇 mini 博客的目的是解决「不知道自己不知道」的问题,也就是说明有这么一个库可以做什么,然后介绍简单的用法;具体这个库的完整用法还是要去查看文档。 这里给出一个简单的使用实例: 简单示例 这里仅仅有两条需要注意的: 1. 实例化 faker 的时候记得标记语言,默认是英文信息; 2. 实例化的 faker 每次调用都会生成新的假数据,只需要实例化一次即可; Faker 支持生成非常非常非常多数据类型,这里就不也没必要一个个介绍出来。分享一个我自己的用法:可以用 dir(faker) 的方式看它究竟有多少假数据类型可用,也可以在 iPython 中实例化一个 faker 出来然后通过 faker. TAB…

4 分钟阅读

Linux 文本三剑客 grep/awk/sed 入门手册

0X00 前言 不知道为什么,当三个好用的工具在一起的时候就会被称作:三剑客;四个好用的工具在一起的时候就会被叫做四大天王 🤔。 算了,这不重要。 这篇文章的目的是带不了解这三个工具的朋友们简单上手使用它们,默认各位是掌握了 Linux 的基本用法的,其中也会出现有关正则的内容。如果你不懂正则的话建议跳过正则的部分,并且看完这篇文章马上就去学。另外,不要因为正则看起来有点像通配符就按通配符的操作进行下去。 0X01 grep 首先这三个工具中最常用的应该就是 grep 了,它用于从文件中搜索你感兴趣的内容。例如下面的例子就可以输出 /etc/passwd 文件中包含 root 的行 也可以接多个文件,这样输出的时候就会以文件名开头了 下面介绍几个参数: * -i 忽略大小写 * -v 显示不匹配的行(取反) * -n 增加行号显示 * -c 显示总共多少行,而非具体内容 * -r 递归查找所有文件 * -A 也就是 after,即显示匹配行和它后面的 n 行 * -B 也就是 before,显示匹配行和它后面的 n 行 * -C 相当于 -A 和…

13 分钟阅读

写给新手的 iptables 使用说明

0X00 基础知识 常用 Linux 的各位估计都知道 iptables、firewalld 和 ufw 这三个工具吧,或者还知道 netfilter 这个内核组件。但是他们究竟是什么关系呢?从关系上来讲,可以将他们分成三层:最底层是 Linux 的安全框架 netfilter,上面是用来操作 netfilter 的 iptables,再上层是 firewalld 和 ufw。 其中 firewalld 一般会默认安装在 RHEL 和 CentOS 中,ufw 会默认安装在 Debian 和 Ubuntu 中。不过由于很多人还是习惯直接操作 iptables 所以这次的重点就是它了。很多人会说 iptables 是防火墙,这其实并不严谨,它的标准定义应该叫做 Packet Filter 也就是包过滤工具。而且事实上也是如此,它不仅能够实现防火墙的限制流量功能,还能提供 NAT 转发的能力。 iptables 内部总共拥有 4 张表(table),又有多个链(chain),如下图所示。 既然是「写给新手的 iptables 使用说明」,自然是挑选最重要的一部分来介绍的,也就是 nat…

6 分钟阅读

究竟什么是加密

0X00 什么不是加密 首先要先明确一个问题:我们日常使用非常多的 md5、SHA-1、SHA-256 这些 通通都不是加密 ,这些叫做摘要算法 。一串明文经过加密算法加密之后,是可以再次解密成明文的,但是摘要算法就不行了。 拿最常见的摘要算法 md5 举例:针对任何一个合法输入,md5 都会给出一个固定长度为 128 bit(32 byte)的输出,例如 md5("hello, world") -> e4d7f1b4ed2e42d15898f4b27b019da4。准确来说你是不能通过后面这串摘要值来反推之前的原文是什么的。因为严格来说这一串摘要值可以对应无限个不同的原文。那么摘要算法一般是拿来做什么用的呢?比较常见的是用来校验数据一致性,比如鸡太美同学编写了一个程序放到网上给大家下载使用,但是我们都知道文件传输过程中理论上可能会出错,所以他在上传之前就计算了程序的 md5 并且在传到服务器上之后再次计算…

5 分钟阅读

Python 标准库之 collections

0X00 Header 相信各位肯定都对 Python 中的基础、常见数据类型和数据结构比较熟悉了吧,不管是 int、float、string、bool 还是 list、tuple、set 用起来应该也都是手到擒来了吧。下面我们就来简单了解一下相对高级一些的 Python 内置数据结构,这些数据结构全都在 collections 的标准库中。 掌握这些数据结构虽然并不能让你「精通 Python」,但起码可以让你的代码更加 Pythonic,也能让你少写几行冗余的代码。 0X01 ChainMap 首先是 ChainMap,光是看名字大概都能猜到这东西的用途了:把 Map 组装为 Chain 嘛。在 Python 中最常见的也就是字典了,所以这个数据结构的主要功能就是将多个字典加在一起。 如果你手上有 100 个字典,现在你需要将他们加在一起,在没有 ChainMap 的时候大概率会写出这样的代码:先整一个 result 作为最终结果的容器,然后遍历这 100 个字典,一遍遍 update 现在有了 ChainMap 之后可以写成这样:将所有的 dict 都作为 ChainMap…

34 分钟阅读

2023 年度总结

片头胡诌 要说 2023 年跟前几年比起来有什么最大的变化,那应该就是防疫了吧。连续了三年的疫情或者说防疫,终于在 2023 年到来的时候结束了。本以为到了新的一年能报复性娱乐 一把,但是低头看了看兜里的钱,抬头看了看当前的经济形势,一怒之下就...在床上翻了个身 😮‍💨 不过话虽这么说,毕竟防控还是没有了,今年出行便利程度直接拉满(其实只是回到了应该有的样子而已)。不然按照之前的操作,根本不敢想今年这几次出行得有多费劲。 去年定下的「2023 年度计划」也在这篇博客完成之际到了 Deadline,怎么说呢,俩字形容基本就是「稀碎 」,具体的就打散了放在这个年度总结里说一说吧。离谱的是往前看了两年的总结,好像每年都挺稀碎的,所以这次 2024 年的计划我打算换个形式来设计,争取一年后再次总结的时候不这么稀碎。 那么圆规正转,直接就开始吧 🎉 生活变化 今年生活上的一些变化很多都涉及到了个人隐私,确实不太方便写出来,简单来说就是又有了一个里程碑式的前进吧。硬要选一个来说的话可能就是今年八月份回了一趟家,说起来已经五年没有感受过唐山的八月了,更是已经快要十年没有感受过北方的春天了。…

4 分钟阅读

写给 git 新手的 6 个小技巧

0X00 header 首先,git 是没有 header 这个命令的:) 平时经常会用到一些 git 的用法,也有遇到过别人来问怎么实现某某操作,但是都太零散了并不成体系,所以这里就简单整理一下不做分类了。希望对不小心通过 Google 搜到该文章的你有所帮助(不会的有人能搜到吧🤣) 0X01 pull 与 pull --rebase 首先是搞清楚 git pull 和 git pull --rebase 的区别,我们学 git 第一天肯定就学了 git push 是推代码,git pull 是拉代码,那么这个 git pull --rebase 又是个什么东西呢? git pull 本质上是 git fetch 加上 git merge 的功能,也就是说把代码拉到本地来再和本地代码进行一次 merge。这就意味着,如果出现冲突的话 git 会创建一个 Merge commit 来解决这个问题。 git pull --rebase 则是 git fetch 和 git rebase 的组合。使用的时候会先将本地比远端多出来的 commit…

5 分钟阅读

Shell 中的文本处理【简】

0X00 前言 在这里介绍 Shell 脚本编程和日常的命令行操作中最常用的 9 个命令,希望对读到这篇文章的你有所帮助~ 这是一篇基础得不能再基础的内容,如果你看完还能有两三个收获的话,那就一起来恶补 Linux 知识吧🤣 0X01 cat cat 命令应该是学习 Linux 命令时候最早接触到的命令之一了,自然不用多说什么,这里只提一个用法:如何 cat 命令创建一个文件。例如在脚本中我们需要创建一个配置文件,当然可以把配置文件跟脚本文件放一起,然后 cp 过去,但是如果你想用一个文件搞定的话(这样在看脚本的时候就知道配置文件是什么内容了,看着舒服改起来也方便)就可以这么操作 这段命令写在 shell 脚本中就意味着会把两个 EOF 中间行的内容作为文件 cat 一下,再接上后面的重定向,就把它写入到 xxx.conf 中了。不仅可以在脚本中,直接写在命令行中也是可以的。当然也可以不带重定向使用。 这里有一篇阮一峰的文章在相对详细的介绍什么是 EOF。 需要注意的是 EOF 只是我们约定俗成的 Enf Of File 的缩写,你非要用别的表示也是可以的(比如你的文本中包含…

5 分钟阅读

关于 sudo 命令也许你需要知道的

0X00 介绍 不管对 sudo 的了解具体有多少,至少应该都用过 sudo 命令来临时将自己的非 root 用户提权至 root 了吧。不过 sudo 当然不只是将用户变成 root 的这么一个简单工具了,虽然它确实是将用户临时变更为 root ,但是页还是有不少其他更加细致的配置与选项。 sudo 是 Linux 中的一个命令,用于以管理员身份执行命令。它允许普通用户在不切换到 root 用户的情况下执行需要特权的操作,从而提高了系统的安全性和可管理性。sudo 可以通过配置文件进行自定义,以控制哪些用户可以以何种方式执行哪些命令。同时,sudo 还可以记录用户的操作日志,以便系统管理员进行审计和监控。 还有一个需要注意的就是,sudo 本质上是一个应用,并非最基础系统的一部分,它比 Unix 晚诞生了有近 10 年。这也就意味着并不是所有的 Linux 发行版本都会自带这个程序(比如 minimal 模式安装的 Ubuntu Server 就是没有的),如果遇到这种情况还是需要自己手动安装一下,不过这种多人共用的操作系统中没有 sudo 的情况还是很罕见的。 0X01 修改配置…