11.09-11.25学习笔记

学习shell时学习了广为人知的fork炸弹

fork炸弹

GNU parallel官方文档

命令

find /usr/bin -type f -mtime +1 | xargs ls -alh | awk '{print $9}'

假如我们想要删除光标后的内容可以使用:CTRL + K,恢复的话使用CTRL + Y,如果想删除光标前的内容使用CTRL + U,CTRL+W删除光标前的一个单词直到遇到下一个空格。

使用上面的find命令可以测试上述快捷键。

CPU测试工具的使用:

Unixbench

awk入门教程

git官方文档

Linux top命......

GNU parallel

安装GNU parallel报错

因公司项目编译由串行修改为并行,因此学习GNU parallel知识,使用GNU parallel进行并行编译。

在下载了GNU parallel安装包,解压之后执行

./configure

make&&make install

结果提示如下错误:

[root@centos-linux-10 parallel-20171222]# make

CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /root/parallel-20171222/missing a......

使用addr2line定位程序崩溃位置

dmesg介绍

在介绍addr2line前需要学习下dmesg:

dmesg命令用于打印Linux系统开机启动信息,kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看(print or control the kernel ring buffer)。开机信息亦保存在/var/log/dmesg的文件里。

常用参数

格式:dmesg

查看开机信息。

格式:dmesg -c

清除开机信息,但/var/log/dmesg文件中仍然有这些信息。

实例一

dmesg消息重定向

dmesg >boot.me......

Linux内核模块

cat /proc/modules

第一列: 模块的名字

第二列: 模块的内存大小,单位是bytes

第三列: 被load的次数,0以为着没有被load过

第四列: 是否依赖第三方moudle,列出这些module,不依赖第三方moudle使用-代替

第五列: 模块的状态,有Live, Loading, Unloading三种状态

第六列: 模块当前的内核内存偏移位置。这些信息,debug的时候会非常有用。例如一些诊断工具 oprofile。

[root@centos7-10 ~]# cat /proc/modules

xt_CHECKSUM 12549 1 - Live ......

Linux网络安全技术与实现

本文记录Linux网络技术与实现读书笔记,这是一本已经停产了的书,在豆瓣上评分颇高,此书为第二版,第一版书名为-更安全的Linux网络。笔记记录的形式不会采取面面俱到的方式,精选一些比较重要的内容,如果你没有接触过这方面的内容,阅读本文可能会有强烈的不适感。

TCP UDP及Socket的关系端口的分类

公认的端口:0-1023

注册的端口:1024-49151

动态端口:49152-65535

端口的作用

假设我们在服务器端主机运行了Web SSH及DNS三项服务。在TCP/IP的网络规范中,当一个网络应用运行起来时,都会占用一个端口,如服务器端的Web服务器启动时,即会占用......

linux Command Line Cookbook

在gitbook上看到一本不错的书,适合在碎片时间比如地铁上阅读,而且是英文版,格调比较高。

Command Line Cookbook

书中首先讲的是重定向相关的内容,书中讲了一个例子,比如执行两条命令,在第一条命令执行失败时才执行第二条命令,可以用如下方法:

ls file &> /dev/null || echo "File not exist"

假如当前目录下不存在file这个文件,才会打印 File not exist,而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同,都等价于

>file ......

深入理解Linux /proc/pid/maps

man手册中内容

stackoverflow

Linux进程的几种状态

1、TASK_RUNNING:(R)

进程当前正在运行,或者正在运行队列中等待调度。只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于可执行状态。

2、TASK_INTERRUPTIBLE:(S)

进程处于睡眠状态,处于这个状态的进程因为等待某事件的发生(比如等待socket连接、等待信号量),而被挂起。当这些事件发生时,对应的等待队列中的一个或多个进程将被唤醒。一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态。进程可以被信号中断。接收到信号或被显式的唤醒呼叫唤醒之后,进程将转变为 TASK_RUNNING 状态。

3、......

Linux中录制回放终端会话

利用script和scriptreplay命令,我们可以录制命令的次序以及时序,将相关数据记录在文本文件中。利用这些文件,其他人可以在终端上回放并查看命令的输出。

我们在ubuntu终端中输入如下命令:

script -t 2> timing.log -a output.session

然后接着输入一系列命令操作,等操作演示完之后输入exit,将timing.log 和output.session发送到另一台centos中,可以通过scriptreplay timing.log output.session来回放录制的演示操作。

最终效果:在左侧ubuntu中我们使用scr......

gdb调试进程线程

本文是学习100gdb-tips的总结内容,部分代码与原文不同,补充相关调试程序中遇到的问题与解决方法。

调试已运行的程序

thread.c

#include <stdio.h>

#include <unistd.h>

#include <pthread.h>

void *thread_func(void *p_arg)

{

while (1)

{

printf("%s\n", (char*)p_arg);

sleep(10);

}

}

int main(void)

{

pthread_t t1, t2;

pthread_c......