摘要:
更安全的rm命令,保护重要数据 网上流传的安全的rm,几乎都是提供一个rm的"垃圾"回收站,在服务器环境上来说,这实非良方。 我想,提供一个安全的rm去保护一些重要的文件或目录不被删除,避免出现重要数据误删的悲剧,或许才是更佳方案。 我写了一个脚本:https://github.com/malong 阅读全文
摘要:
精通awk系列文章 我录制了两个awk相关的视频教程: Awk经典实战案例精讲 精通awk精品课程:awk从入门到精通 awk入门速通 一篇文章玩透awk 18个awk的经典实战案例 阅读全文
摘要:
这些是我之前写在51cto专栏的Ansible文章,是从0到1玩透性质的,循序渐进且非常系统性,大概39W字,转成pdf有430多页,现已请求下架,所有内容完全免费发布在本博客。 各位读者,请您:由于Ansible使用Jinja2模板,它的模板语法{% raw %} {{}} {% endraw % 阅读全文
摘要:
# Shell脚本基础入门 ## Bash注释 Bash只支持单行注释,使用`#`开头的都被当作注释语句: ```shell # 整行注释 echo hello world # 行尾注释 ``` 通过Bash的一些特性,可以取巧实现多行注释: ```shell : ' 注释1 注释2 ' : /pr 阅读全文
摘要:
这些是我录制的视频课程,可 "点我加QQ群921383787" 或在评论中找我拿优惠券噢。 1.Shell精品进阶教程:理解Shell的方方面面 "Shell精品进阶教程:理解Shell的方方面面" 课程目标 : 系统性的掌握shell相关知识,进阶shell脚本能力,对shell各方面了然于心 适 阅读全文
摘要:
修改命令提示符颜色 修改命令提示符的话,只需修改PS1环境变量即可。 效果如图: 修改命令输入的颜色 修改命令输入的颜色,思路是不关闭PS1的颜色,然后在每次敲下回车键执行命令的时候自动插入颜色终止符。这需要借助trap捕获DEBUG信号来实现。 如果要写入shell配置文件,建议写到 ,而不要写入 阅读全文
摘要:
这是正则表达式从入门学习到深入掌握各种技巧的教程系列,使用了不同语言描述,但对于正则理念来说是完全通用的。最后还差一篇正则性能优化的文章,有机会再补上。 我已经录了正则表达式的两门课程:参见 "视频教程汇总" 1. "基础正则表达式" 2. "Perl正则表达式超详细教程" 3. "递归正则表达式详 阅读全文
摘要:
想要管理多种具体的东西,那么需要遵守每种东西的规范。如果想要提供一种通用模式来对这些具体的东西统一管理,需要使用一种古老的技术:抽象。 抽象是将多种具体的东西(管理时需要遵守的规范)的共同点抽取出来,放入到更高一层的抽象层。在抽象层不定义或少量定义具体的规范细则,而是让下层更具体的东西遵守抽象出来的 阅读全文
摘要:
一般来说,递归的正则表达式用来匹配任意嵌套层次的结构或左右对称的结构。例如匹配: 递归正则在正则表达式里算是比较灵活的部分,换句话说就是可能会比较难。下面这个正则表达式是在网上流传的非常广泛的递归正则的示例,它用来匹配嵌套任意次数的括号,括号内可以有其它字符,比如可以匹配 、`(abc(bc(def 阅读全文
摘要:
单机上的系统总线 1. 总线(bus)是一种 通信系统 ,用于携带各种类型的数据, 在各组件之间传递数据 (可以理解为快递员。按照bus的字面意思理解更好,公共汽车,公共的携带数据的交通工具)。 2. 在大概念上分三种总线:系统总线(前端总线)、内部总线和外部总线。 系统总线:计算机内部主要设备之间 阅读全文
摘要:
理解并发、并行的例子 先举例子来理解这2个概念的区别。 老师让两个同学去办公室谈话。如果这两同学(进程)是并列跨过办公室门(CPU)的,那么就是并行。如果同学A先进同学B后进入(或者先B后A),或者两人并列同时进入,但是在办公室外的路人甲(用户)看来,同学A和同学B同时都在办公室内,这是并发。 其实 阅读全文
摘要:
关于CPU和程序的执行 CPU是计算机的大脑。 1. 程序的运行过程,实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程 。 当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单的理解为CPU要知道这是什么指令),然后执行该指令。再然后取下一个指令 阅读全文
摘要:
生成指定长度是随机数 bash 8位纯数字的随机数 tr cd '0 9' 阅读全文
摘要:
Ruby基础 安装Ruby和Rails Ruby语法杂项 Ruby字面量、引号、%符号和heredoc相关 Ruby变量和变量赋值 Ruby变量作用域规则详解 Ruby数值类型 Ruby字符串类型 Ruby中的Symbol类型 Ruby中的各种比较运算 Ruby条件判断表达式 Ruby循环语句 Ru 阅读全文
摘要:
引自我在知乎上的回答: "进程 线程 协程 例程 过程 的区别是什么? 骏马金龙的回答 知乎" 首先解释下程序、进程、上下文切换和线程。然后再解释协程、例程、过程。 程序 程序 :源代码堆起来的东西。相当于一个一动不动没有生命的机器人。 虽然是没有生命的机器人,但是它被设计后就表示有了硬件,它的硬件 阅读全文
摘要:
定义好了一个可以输出带颜色行号以及行数据的函数print_with_line_num,f()是测试函数。在f()函数中,读取文件并输出读取的每一行数据,但根据参数选项决定是普通输出行还是同时输出带颜色行号的行数据。 这可以当作是偏函数、闭包、作用域的一个用法示例。 脚本内容如下: 下面是测试效果: 阅读全文
摘要:
在此处只给出find的基本用法示例,都是平时我个人非常常用的搜索功能。如果有不理解的部分,则看后面的 "find运行机制详解" 对于理论的说明,也建议在看完这些基本示例后阅读一遍理论说明,它是本人翻译自find的man文档并加上了个人的理解。另外,在该理论说明结束后,还有find深入用法示例和分析。 阅读全文
摘要:
MariaDB官方手册 翻译:create database语句(已提交到MariaDB官方手册) 翻译:rename table语句(已提交到MariaDB官方手册) 翻译:alter table语句(已提交到MariaDB官方手册) 翻译:标识限定符(已提交到MariaDB官方手册) 翻译:标识 阅读全文
摘要:
1.C中数组和指针的关系 对于任意类型的数组arr,对于同类型的指针类型parr(确切一点,可以假设类型为int,即 )。它们之间有如下"内幕": 1. 数组的名称arr本身就是一个指针,这个指针指向数组的第一个元素 2.因为名称arr本身是指针,所以可以直接赋值给同类型的指针parr: ,这使得 阅读全文
摘要:
概念 僵尸进程 :当子进程退出时,父进程还没有(使用wait或waitpid)接收其退出状态时,子进程就成了僵尸进程 孤儿进程 :当子进程还在运行时,父进程先退出了,子进程就会成为孤儿进程被pid=1的init/systemd进程收养 需要说明的是,僵尸进程的父进程死掉后,僵尸进程也会被pid=1的 阅读全文
摘要:
# 在当前目录下,生成50W个大小0-8K的随机txt文件 time perl -E ' $n=shift; $max_size=1024 * shift; for(1..$n){ open $f, ">", "$_.txt" or die "open failed: $!"; print {$f} 阅读全文
摘要:
获取主机名、用户、组、网络信息相关函数 首先是获取主机名的方式,Perl提供了 模块,可以查询当前的主机名: Perl中提供了下面一大堆的内置函数用来获取用户、组、网络相关的信息。这些perl函数在C中也都有对应的函数。 从动作上分为3类: getXXX:获取信息操作 setXXX:设置操作 end 阅读全文
摘要:
SSH系列文章 : "SSH基础:SSH和SSH服务" "SSH转发代理:ssh agent用法详解" "SSH隧道:端口转发功能详解" 使用ssh agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如ssh命令、xshell等)连接远端主机sshd时需要输入对方用户密码的问题。 但如果 阅读全文
摘要:
SSH系列文章 : "SSH基础:SSH和SSH服务" "SSH转发代理:ssh agent用法详解" "SSH隧道:端口转发功能详解" 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host1、host2都同互相通信,但是host1和host2之间不能通信,如何从host1连 阅读全文
摘要:
入门推荐书籍1:《计算机的心智:操作系统之哲学原理》(建议看第一版)。要阅读这本书,除了几个概念(比较常见的是"中断"),完全不需要任何基础(没错,不需要C和任何语言的知识),看故事一样就可以将操作系统的进程、线程、内存、IO、多核全部有个了解。当然,这本书只能浅层次、全面地了解操作系统,适合入门操 阅读全文
摘要:
sysopen() open()和sysopen()都打开文件句柄,open()是比较高层次的打开文件句柄,sysopen()相对要底层一点。但 它们打开的文件句柄并没有区别 ,只不过sysopen()有一些自己的特性:可以使用几个open()没有的flag,可以指定文件被创建时的权限等。 一定要注 阅读全文
摘要:
文件句柄和文件描述符的关系 文件描述符是操作系统的资源,对于实体文件来说,每打开一次文件,操作系统都会为该进程分配一个文件描述符来关联(指向)这个文件,以后操作文件数据都根据这个文件描述符来操作,而不是文件名。就像对文件句柄的操作一样。 实际上,文件句柄、文件描述符和实体文件的关系存在层次上的关系。 阅读全文
摘要:
文件锁 当多个进程或多个程序都想要修同一个文件的时候,如果不加控制,多进程或多程序将可能导致文件更新的丢失。 例如进程1和进程2都要写入数据到a.txt中,进程1获取到了文件句柄,进程2也获取到了文件句柄,然后进程1写入一段数据,进程2写入一段数据,进程1关闭文件句柄,会将数据flush到文件中,进 阅读全文
摘要:
随机读写 如果一个文件句柄是指向一个实体文件的,那么就可以对它进行随机数据的访问(包括随机读、写),随机访问表示可以读取文件中的任何一部分数据或者向文件中的任何一个位置处写入数据。 实现这种随机读写的功能依赖于一个文件读写位置指针(file pointer) 。 当一个文件句柄关联到了一个实体文件后 阅读全文
摘要:
read()函数 read()函数用于从文件句柄中读取指定字节数的数据并写入到一个标量中。如果文件句柄是以Unicode方式打开的,则表示读取指定字符数而非字节数。 有两种read方式: 三参数的read表示从FH文件句柄中读取len字节长度的数据放进标量变量 中。四参数的read稍后解释。 例如: 阅读全文
摘要:
三篇Perl IO基础类文章: "Perl的IO操作(1):文件句柄" "Perl的IO操作(2):更多文件句柄的模式" "Perl文件句柄相关的常见变量" IO对象和IO\:\:Module家族模块 无论是哪种高级编程语言,都提供了较底层的操作系统层IO能力,也提供了更高层次的封装来实现语言级别的 阅读全文
摘要:
在Linux系统下,有七类文件类型: 普通文件( ) 目录(d) 软链接(字符链接L) 套接字文件(S) 字符设备(S) 块设备(B) 管道文件(命名管道P) 普通文件、目录、软链接无需多解释。 管道文件 管道分为 匿名管道和命名管道 。管道都是一端写入、另一端读取,它们是单方向数据传输的,它们的数 阅读全文
摘要:
`Thread::Pool`模块提供了Perl解释器线程的线程池,手册:https://metacpan.org/pod/Thread::Pool。 阅读全文
摘要:
线程数据共享 在介绍Perl解释器线程的时候一直强调, Perl解释器线程在被创建出来的时候,将从父线程中拷贝数据到子线程中,使得数据是线程私有的,并且数据是线程隔离的。如果真的想要在线程间共享数据,需要显式使用 模块来扩展threads模块的功能 。这个模块必须在先导入了threads模块的情况下 阅读全文
摘要:
(Thread\:\:Queue)队列数据结构(FIFO)是线程安全的 ,它保证了某些线程从一端写入数据,另一些线程从另一端读取数据。只要队列已经满了,写入操作就自动被阻塞直到有空间支持写操作,只要队列空了,读取操作就会自动阻塞直到队列中有数据可读。这种模式自身就保证了线程安全性。 创建队列 new 阅读全文
摘要:
线程简介 线程(thread)是轻量级进程,和进程一样,都能独立、并行运行,也由父线程创建,并由父线程所拥有,线程也有线程ID作为线程的唯一标识符,也需要等待线程执行完毕后收集它们的退出状态(比如使用 收尸),就像waitpid对待子进程一样。 线程运行在进程内部,每个进程都至少有一个线程,即mai 阅读全文
摘要:
本文介绍的Perl进程间数据共享内容主体来自于《Pro Perl》的第21章。 IPC简介 通过fork创建多个子进程时,进程间的数据共享是个大问题,要么建立一个进程间通信的通道,要么找到一个两进程都引用的共享变量。本文将介绍Unix IPC的近亲System V IPC:message queue 阅读全文
摘要:
不同进程之间的通信或进程间通信(InterProcess Communication, IPC),是一个涉及多个方面的主题。Perl提供了多种进程间通信的方式,本文将逐一介绍。本文的内容主体来自于《Pro Perl》的第21章。 单向管道(unidirectional pipe) 管道是两个文件描述 阅读全文
摘要:
本文关于处理子进程退出状态码的内容主体来自于《Pro Perl》的第21章。 子进程退出状态码 每个子进程在退出时,操作系统都会保留它们的退出状态码,并在内核维护的进程表中保留子进程项。对于进程的退出状态码,只有在父进程读走之后或者收走(reap)之后才会被清除 。注意这里的一个词语“ 收走(rea 阅读全文
摘要:
本文关于Perl进程的内容主体来自于《Pro Perl》的第21章。 创建新进程 Perl中可以使用 函数来创建新的进程,它会调用操作系统的fork系统调用来创建新进程。 fork是Unix系统中的函数,在Windows中不原生支持fork。但从Perl 5.8开始,Perl提供了一个模拟的fork 阅读全文