![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux/UNIX
9号信箱
这个作者很懒,什么都没留下…
展开
-
malloc()和free()的原理及实现
在C语言中只能通过malloc()和其派生的函数进行动态的申请内存,而实现的根本是通过系统调用实现的(在linux下是通过sbrk()系统调用实现)。malloc()到底从哪里得到了内存空间?答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。malloc()在运行期动态分配分配内存,free转载 2020-11-25 15:55:14 · 587 阅读 · 0 评论 -
epoll详解
文章转载自http://blog.chinaunix.net/uid-24517549-id-4051156.html什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),...转载 2018-07-26 16:50:55 · 164 阅读 · 0 评论 -
CentOS 7环境下socket编程出现connection refuse的情况及解决办法
不知道大家有没有在centos7的环境下编写socket程序的时候出现connection refuse这种情况?以下是出现这个情况的一种原因和解决办法:问题产生的原因首先,Connection refused信息是通过strerror(errno)输出的,strerror()在<string.h>中,errno在<errno.h>中。对于服务端:服务端中,...原创 2018-07-31 17:44:35 · 5685 阅读 · 2 评论 -
elf格式分析
原文地址:https://blog.csdn.net/hhhbbb/article/details/6855004最近研究了一下elf文件格式,发现好多资料写的都比较繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描述能够简洁一些。一、基础知识 elf是一种文件格式,用于存储Linux程序. 它内部都有一些什么信息呢?大概包括编制好的计算机指令,数据,计...转载 2018-07-27 18:03:36 · 190 阅读 · 1 评论 -
Linux下进度条代码
#include <unistd.h>#include <string.h>#include <stdio.h>int main(){ int i = 0; char bar[102]; memset(bar, 0 ,sizeof(bar)); const char *lable="|/-\\"; while(i <= 100 ){ ...原创 2018-10-12 17:50:39 · 166 阅读 · 0 评论 -
linux内核版本和头文件版本不一致的解决办法
查看内核版本:uname -r查看内核头文件版本:apt-cache search linux-headers通常的解决办法是执行以下命令:apt-get cleanapt-get updateapt-get upgradeapt-get dist-upgrade 前面几条命令都没有解决问题,在执行apt-get dist-upgrade后重启正常,注意要...原创 2019-02-21 16:15:45 · 9797 阅读 · 0 评论 -
kali 执行apt-get upgrade后,终端无法打开的解决办法
在kali执行apt-get upgrade命令后,发现进入终端无法开启解决办法:1 、Alt+Ctrl +F6进入tty命令行界面2 、在命令行界面执行以下指令apt-get install --reinstall locales完了之后,运行下面三条指令将语言集设置成英文export LANGUAGE="en_US.UTF-8"echo 'LANGUAGE="e...原创 2019-02-20 19:32:13 · 2898 阅读 · 3 评论 -
kali执行apt-get update指令,提示:下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
这种情况一般都是key过期了,执行一下命令即可:wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add再次更新,一般就成功了apt update原创 2019-02-20 19:36:25 · 4416 阅读 · 8 评论 -
Linux中的软链接和硬链接
在linux系统中,硬链接(hard link)和软链接(symbolic link)是两个非常重要的概念,而很多朋友在学习的时候,通常不容易区分这两个概念,所以在这里做一些记录,大家共同进步。在正式开始说明前,先讲一些不算是题外话的题外话。对于linux有一定了解的朋友都知道linux里面有一个重要的概念叫做i结点,即inode。如果有人问你,一个系统里面可以存放多少文件?你会怎么回...原创 2019-03-22 19:37:10 · 21670 阅读 · 12 评论 -
linux中的挂载与挂载点
挂载即把一个分区或磁盘放在一个目录里。挂载点就是一个特定的目录。挂载的本质就是为设备提供一个访问入口,例如将光盘挂载到/mnt/cdrom的话,就可以通过访问/mnt/cdrom这个目录来访问光盘.Windows其实也需要挂载,只不过它是把分区或磁盘挂载到A:B:C:……Z:这样开头的特定文件夹里。Linux用目录名挂载分区或目录的好处是:一、便于操作,你可以把分区或磁盘挂载到任何你...原创 2019-03-22 20:55:03 · 3518 阅读 · 0 评论 -
linux磁盘分区
进行linux磁盘分区操作,我们得先对磁盘有一些相关的简单了解,在这里不做多余说明,本文主要介绍linux分区的实际操作。注意:给linux进行磁盘分区需要在root用户下去执行。首先,我们查看一下根目录/所在的磁盘文件名:由上图可以知道,我的磁盘文件名为“/dev/sda”,注意:不要加后面的数字。在进行实际的分区之前,我们需要了解一下磁盘的状态,使用fdisk /dev/...原创 2019-03-24 16:13:04 · 291 阅读 · 0 评论 -
linux中查看用户密码及密码破解(加密方式)详解(/etc/shadow文件)
我们知道linux是一个多用户的操作系统,也就是说在linux系统中存储着很多不同用户的用户名及密码。那么如果某一个用户的密码忘记了怎么办呢?首先我们得知道,在linux系统中,用户名被存放在了/etc/passwd这个文件中;密码存放在/etc/shadow中。知道这两条重要的信息,那么后面的事情就简单很多了。如果我们要查看某个用户的密码,我们得先登陆为超级用户才可查看:su ro...原创 2019-04-12 11:44:32 · 105541 阅读 · 14 评论 -
linux中的login shell和non-login shell重点解析
我们使用linux的时候会发现,当我们进入系统一进入 bash,就有一堆变量可以使用,这些东西都是从哪来的呢?这就要归功于linux系统里面的配置文件了。当我们的系统启动之后,它们就会开始读取我们的配置文件让我们后续可以正常的使用。接下来,我们需要介绍两个重要概念,一个叫login shell,一个叫non-login shell。1、login shell: login she...原创 2019-04-15 17:52:35 · 7737 阅读 · 1 评论 -
Linux shell脚本编程时bad substitution解决办法
首先,我们要理解bad substitution的字面意思,它的字面意思是“替换错误”的意思。这种错误的原因呢,通常是我们编写脚本时“{}”和“()”错误使用导致的。比如应该用“()”时,我们用成了“{}”;应该用“()”时,用成了“{}”。那么如何区分什么时候用什么类型的括号呢?${}中,大括号里放的是变量;$(commamd)里是执行command(即我们的命令或者一些运...原创 2019-04-03 20:41:41 · 19810 阅读 · 0 评论 -
linux使用Quota配额之须配额目录为非独立文件系统并无可分配分区解决办法
首先,介绍一下现在的环境,我们需要为/home目录进行配额,但是呢,/home目录并非独立文件系统,而使用Quota进行配额需要在独立文件系统上进行。问题环境:须配额目录为非独立文件系统并且磁盘无可分配分区的情况。解决方案:增加磁盘容量因为我这里使用的虚拟机,所以我可以通过虚拟机增加一块磁盘空间。这里就不赘述关于虚拟机增加磁盘空间的方式了。使用“fdisk -l”命令查看磁盘状...原创 2019-04-20 17:46:05 · 1703 阅读 · 0 评论 -
linux中特殊 shell——/sbin/nologin案例解析
我们都知道,在linux系统中有很多的shell,查看shell可以使用“chsh -l”或者“cat /etc/shells”。在这些shell里面,有一个shell——/sbin/nologin却比较特殊,那么它到底有什么特殊,又有什么用呢?我们以实际的案例来解释一下。在我们的系统中有apache这个账号管理着www服务器,lp管理着打印服务等。还有类似很多的这样的系统服务,他们运...原创 2019-04-16 23:32:43 · 17115 阅读 · 2 评论 -
linux中pam认证解析
首先了解一下,什么是linux的pam认证呢?pam认证机制:简单来说就是linux系统采取的这一种对不同用户以及系统中的不同服务进行的安全认证机制。认证流程:linux系统首先确定所需认证的服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。举个例子,我们登陆的时候,会向 PAM 发出验证要求的通知...原创 2019-04-17 16:44:59 · 5724 阅读 · 0 评论 -
linux系统文件系统层次结构标准(Filesystem Hierarchy Standard)英文版
Filesystem Hierarchy StandardFilesystem Hierarchy Standard GroupEdited byRusty RussellDaniel QuinlanChristopher YeohCopyright ?1994-2004 Daniel QuinlanCopyright ?2001-2004 Paul 'Rusty' R...翻译 2018-07-29 17:08:59 · 3887 阅读 · 0 评论 -
CentOS安装Python3详细步骤,亲测(命令行安装)
本人使用的是centos6.6,该系统已经自带了python2,但是由于python3和python2在很多使用上还存在着较大区别,并且本着学习的态度决定尝试安装一次。由于一开始忘了截图,所以本文只有所有的安装命令,命令完全正确,亲测可以使用,所以在此发文记录一下。说明:python2和python3各有特点,目前很多库支持较多的还是python2,站在学习的角度,建议大家两个版本都保留着...原创 2018-07-29 16:48:41 · 5865 阅读 · 0 评论 -
send和recv的执行过程
每个套接字都有自己的发送缓冲区和接收缓冲区(区别于自己定义的缓冲区)。 int send(SOCKET s, const char *buf, int len, int flags); 参数描述:SOCKET s 发送端套接字描述符const char *buf 应用程序要发送的数据的缓冲区(想要发送的数据)int len原创 2016-09-21 09:31:05 · 696 阅读 · 0 评论 -
粘包问题
在陈述粘包之前先说说TCP和UDP的传输特点:TCP是流模式,想象河流中的水流,它是持续的,没有边界的;再说UDP,UDP是数据报模式,想象你的收发快递的包裹,它就是你要传输的数据。它的数据传输有边界,它是按照一包一包来发送和接收的。那么接下来,我们要说的是一下三个问题:问题1:什么是粘包?粘包就是在接收端看来两个或者多个数据包粘成了一包,包与包之间首尾相连。通过介绍TCP和UDP原创 2016-09-21 11:14:51 · 792 阅读 · 0 评论 -
socketpair理解
原文地址:http://liulixiaoyao.blog.51cto.com/1361095/533469今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以转载 2016-10-04 14:56:42 · 214 阅读 · 0 评论 -
记录一个chmod更改权限时遇到的问题
我在运行生成的.a.out文件的时候遇到了一个奇怪的事情,系统提示没有权限。这让我很是郁闷,之前也没有遇到过这样的情况。在想到用chmod更改权限的时候,居然没有能够更改掉。弄了好长时间,最终发现原因竟然是因为我在Linux系统下操作的是windos下的目录。当我换回Linux的目录,发现一切都正常了。因此,如果其他小伙伴遇到类系的情况,也可能是类似的原因,当然个人状况不一样。...原创 2018-04-08 11:55:21 · 3060 阅读 · 0 评论 -
实际用户ID 有效用户ID 设置用户ID辨析
实际用户ID :确定“我是谁”,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的实际ID;有效用户ID:通常情况下和实际用户ID一致,它限定了用户对资源的访问权限,在某个文件设置了设置用户ID位后,有效用户ID为文件所有者ID;设置用户ID:用于提升其它用户对资源的访问权限。 当有了设置用户ID位之后,文件的有效用户ID就是文件的拥有者ID。一个UNIX上最常见的例子就我们...原创 2018-04-09 14:08:46 · 738 阅读 · 0 评论 -
LInux线程条件变量的使用
/* *生产者消费者问题 * */#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#define MAX_STOCK 20//仓库容量char g_storage[MAX_STOCK];size_t g_st...原创 2018-04-09 14:10:00 · 1716 阅读 · 0 评论 -
vmware workstation安装镜像的时候出现 不可恢复错误:(vcpu-0)解决办法
如果你在安装虚拟机镜像时出现这样的问题:VMware Workstation 不可恢复错误: (vcpu-0)vcpu-0:VERIFY vmcore/vmm/main/cpuid.c:382 bugNr=1036521日志文件位于“E:\虚拟机\#Ubuntu\vmware.log”中。 您可以请求支持。 要收集数据提交给 VMware 技术支持,请选择“帮助”菜单中的“收集支持...原创 2018-04-26 22:34:36 · 15954 阅读 · 1 评论 -
linux环境gdb调试出现“No symbol table is loaded. Use the "file" command.”的问题
在linux环境下使用gdb调试的时候,出现了“No symbol table is loaded. Use the “file” command.”这样的提示,于是心生疑惑,这是为什么呢?原来,在调试二进制文件的时候,我们需要在二进制文件中加入调试信息,而调试信息是怎么添加的呢?它是在编译的时候,通过-g选项添加的,即类似于gcc -g test.c -o test这样的命令。因此,通...原创 2018-05-25 23:16:03 · 5367 阅读 · 0 评论 -
VMware虚拟机使用VMwareTools完成物理机与虚拟机之间的文件传输与内容复制、粘贴功能
为了达到虚拟机和物理机文件互传,以及某一端复制的内容能够在另一端粘贴,我们需要安装VMwareTools。本文以CentO为例讲解VMwareTools的安装过程,Ubantu等其它Linux系统安装类似。1.开启虚拟机CentOS;2.Vmware的菜单栏选择“虚拟机”-&amp;gt;“安装VMwareTools”(这一步结束后,桌面会显示一个光盘图标);打开光盘文件,文件夹中有名字...原创 2018-05-27 13:43:02 · 23467 阅读 · 6 评论 -
VMwareTools选项显示灰色的解决办法
解决办法: 直接先打开某虚拟机(例如CentOS),然后在VMware菜单栏里找到安装VMwareTools选项就可以了,你会发现此时它已经变成可选状态。具体的VMwareTools安装流程,请看这里: https://blog.csdn.net/lws123253/article/details/80468840...原创 2018-05-27 13:55:09 · 24450 阅读 · 1 评论 -
linux中的“xxx is not in the sudoers file. This incident will be reported.”提示解决方案
有时候,我们在以普通用户执行一些操作的时候,为了提升自己的权限,我们会以管理员身份执行我们的指令,于是我们会敲出类似于sudo……这样的代码。但是不巧的是,当我们敲除了这样的代码之后,我们得到了“xxx is not in the sudoers file. This incident will be reported.”这样的提示信息,这个时候我们该怎么做呢?解决这个问题的办法是:直接...原创 2018-05-27 18:39:08 · 30910 阅读 · 0 评论 -
linux中的不可中断睡眠和可中断睡眠简述
Linux 中的进程睡眠状态有两种:一种是可中断的睡眠状态,其状态标志位为TASK_INTERRUPTIBLE;另一种是不可中断的睡眠状态,其状态标志位为TASK_UNINTERRUPTIBLE。可中断的睡眠状态的进程会睡眠直到某个条件变为真,如产生一个硬件中断、释放进程正在等待的系统资源或是传递一个信号都可以是唤醒进程的条件。不可中断睡眠状态与可中断睡眠状态类似,但是它有一个例外,那就是...原创 2018-05-27 21:23:48 · 8745 阅读 · 0 评论 -
Linux进程间通信之消息队列
消息队列的结构0.消息队列、消息缓存块和通道在学习“进程之间是如何使用消息队列进行通信”之前,先要知道: 什么消息队列 什么是消息缓存块 什么是通道 ①消息队列:一种数据结构,即队列,其详细内容暂不讨论 ②消息缓冲块:一种数据结构,用于存储具体的信息,进程之间通信的方法之一,代码结构如下: struct msgbuf{ long channel;//频道号或...原创 2018-06-05 22:37:46 · 223 阅读 · 0 评论 -
CentOS安装SL
1、检查网络可以ping通,说明网络连接ok 2、更新yum源 更新完成: 3、安装Sl3.1报错1使用yum命令安装sl插件时给出提示未发现sl这个包, 或: 3.2报错1解析执行yum命令时会去centos镜像查找sl包,但是镜像中没有sl包,所以要安装额外包,需要安装epel-release-6-8.noarch.rpm3.3安装Wget命令为wget http://dl.fedorapro...原创 2018-06-06 22:28:38 · 5653 阅读 · 3 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥:在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程...转载 2018-05-31 11:19:32 · 1047 阅读 · 0 评论 -
xsell连接虚拟机
最后,那为什么要用xshell连接虚拟机?虚拟机自己也有终端啊?xshell只是做的比较好的一个远程连接工具,相比虚拟机来说,它占用的系统资源少(CPU、内存,特别是内存),而且还能够并发远程连接N台服务器,虚拟机的管理工具它做不到,只能一台一台去看, 还吃资源,台式机一下子就卡死了。1)分页环境Xshell标签可以脱离原来的窗口并重新创建一个新窗口或重新连接一个完全不同的窗口。另外,单个的窗口可...原创 2018-06-08 17:46:49 · 1621 阅读 · 0 评论 -
Linux下创建和使用静态库、共享库的方法总结
例:有calc.c(数学功能的实现)和show.c(结果显示)、main.c(对前两个函数里功能的调用)一、静态库1、静态库的创建 (1)编辑源程序(.h/.c) (2)编译成目标文件:gcc -c xxx.c (3)打包成静态库文件:ar -r libxxx.a xxx.o命令行:gcc -c calc.cgcc -c show.ca原创 2016-07-31 16:13:28 · 394 阅读 · 0 评论