Linux
文章平均质量分 76
Linux是一个多用户、多任务、支持多线程和多CPU的操作系统,可以提加深我们对系统底层的了解
云疏不知数
一个人知道自己为了什么而活,他就能够忍受任何一种生活----尼采
展开
-
Linux学习目录
1.认识进程 定义 查看进程 进程状态 僵尸进程 孤儿进程 进程优先级 nice值2.进程控制 进程创建 fork vfork 进程等待 wait方法 waitpid方法 获取子进程status wait方式获取子进程status waitpid方式获取status 进程等待 waitpid进程的阻塞方式等待 waitpid进程的非阻塞等待方式 进程替换 Shell进程替换.原创 2021-04-25 21:32:34 · 1462 阅读 · 3 评论 -
11.IO2
基本概念同步通信1、异步通信2同步和异步关注的是消息通信机制同步通信所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了;换句话说,就是由调用者主动等待这个调用的结果;异步通信调用在发出之后,这个调用就直接返回了,所以没有返回结果;换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果;而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用.阻塞 vs 非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值).原创 2021-04-23 15:07:47 · 745 阅读 · 0 评论 -
10.IO1
基础知识文件描述符文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。每个进程用一个files_struct结构来记录文件描述符的使用情况,这个files_struct结构称为用户打开文件表,它是进程的私有数据files_struct struct files_struct { atomic_t count; /* 共享该表的进程数 */ rwlock.原创 2021-04-21 11:22:10 · 1537 阅读 · 0 评论 -
9.网络编程套接字
网络编程基础知识IP在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址。源IP地址指的就是发送数据包的那个电脑的IP地址;目的IP地址就是想要发送到的那个电脑的IP地址博客网络1中网络地址管理部分详细介绍了IP地址网络1–>IP端口号端口号(port)是传输层协议的内容端口号是一个2字节16bit的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;一个进程可以绑定多个端口号IP地址 + 端口号能够标识.原创 2021-04-19 18:08:19 · 686 阅读 · 0 评论 -
8.网络3
网络层IP协议主机: 配有IP地址, 但是不进行路由控制的设备;路由器: 即配有IP地址, 又能进行路由控制;节点: 主机和路由器的统称;协议头格式4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.8位服务类型(Type Of Service): 3位优.原创 2021-04-19 08:23:31 · 388 阅读 · 0 评论 -
7.网络2
应用层协议只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析HTTP1HTTP协议格式HTTP请求首行: [方法] + [url] + [版本]Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;HTTP响应首行: [版本号] + [状态.原创 2021-04-18 16:52:11 · 648 阅读 · 0 评论 -
6.网络1
网络协议计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式;这就是网络协议网络协议分层分层降低了各层次之间的影响,有利于排查错误统一标准,允许不同的应用开发公司同时开发OSI七层模型OSI七层模型功能对应的网络协议TCP/IP四层概念模型应用层文件传输,文件管理,电子邮件的信息处理HTTP、TFTP, FTP, NFS,WAIS、SMTP应用层.原创 2021-04-18 16:51:29 · 515 阅读 · 0 评论 -
5.多线程
线程概念线程定义线程是一个进程内部的控制序列,一切进程至少有一个线程;线程在进程内部运行,本质是在进程地址空间内运行;透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流linux下并没有真正意义上的线程存在,linux中使用进程来模拟实现线程,父进程创建子进程,子进程执行父进程的一部分代码,并且与父进程共享同一个地址空间。这些一个一个被创建出来的子进程可看到为线程,这种线程也称之为轻量级进程在Linux系统中,在CPU眼中,看到的PCB都要比传统的.原创 2021-04-18 16:50:54 · 1662 阅读 · 0 评论 -
4.进程信号量
linux中的信号用户在Linux命令行输入命令,在Shell下启动一个前台进程。用户按下Ctrl-C, 产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程前台进程因为收到信号,进而引起进程退出Ctrl-C特点Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个& 可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像Ctrl-C 这种控制键产生的信号。前台进.原创 2021-04-18 16:47:49 · 694 阅读 · 0 评论 -
3.进程间通信
进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程间通信发展管道->System V进程间通信->POSIX进程间通信通信方式1.管道匿名管道.原创 2021-04-18 16:36:02 · 463 阅读 · 0 评论 -
2.进程控制
进程创建fork#include <unistd.h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程id,出错返回-1fork之后,内核做了如下事:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的执行逻辑#include <stdio..原创 2021-04-18 16:14:09 · 972 阅读 · 0 评论 -
1.认识进程
进程定义一个动态的概念,正在执行的程序,程序的一个执行实例;担任系统资源分配的实体描述进程-PCB1Linux操作系统中描述进程的结构体PCB是tack_struct,task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。task_ struct包含的内容优先级: 相对于其他进程的优先级。状态: 任务状态,退出代码,退出信号等。上下文数据: 进程执行时处理器的寄存器中的数据。程序计数器: 程序中即将被执行的下一条指令的地址。标示符: .原创 2021-04-18 16:04:43 · 329 阅读 · 0 评论 -
linux signals
linux process signals原创 2022-05-05 12:48:54 · 1798 阅读 · 0 评论 -
struct pollfd中events和revents的取值
事件描述可否作为输入可否作为输出POLLIN数据1可读✔✔POLLRDNORM普通数据可读✔✔POLLRDBAND优先级带数据可读2✔✔POLLPRI高优先级数据可读,比如TCP带外数据✔✔ROLLOUT数据3可写✔✔POLLWRNORM普通数据可写✔✔POLLWRBAND优先级带数据可写✔✔POLLRDHUPTCP连接被对方关闭,或者对方关闭了写操作,它由GNU引入✔✔POLLERR错...原创 2021-04-23 14:43:45 · 1206 阅读 · 0 评论 -
查看、更改文件权限
命令ls -l10个字符的意义一共10个字符:第一个字符:-代表是普通文件,d代表是文件夹9个字符:权限一共分成3组,3个一组,分别是所有者u,所属组g,其他人o每组中读写执行权限依次使用三个字符表示rwx(有字符就表示有权限,没有权限使用-占位)权限的详解linux 里面对文件的读写执行和目录的读写执行是有区别的权限文件文件夹r 读查看文件内容列出文件夹内容w 写修改文件内容可以在文件夹创建删除文件内容x 执行执行文件可以进入文件夹.原创 2021-04-22 18:36:37 · 411 阅读 · 0 评论 -
IO标准库和系统调用接口
标准库接口fopen/fread/fwrite/fseek/fcloseFILE *fopen(const char *path, const char *mode);size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);int fseek(FILE *stream, long原创 2021-04-19 18:36:51 · 184 阅读 · 0 评论 -
不同block大小情况下,文件系统的最大容量计算
在操作系统中,文件系统都是针对分区而言的,一个磁盘必须先分区才能格式化文件系统(即使你将磁盘所有容量划分一个分区).格式文件系统后才能挂载使用,此时就必须知道一个文件系统到底支持多大的分区大小。在ext2、ext3文件系统中,采用32bit的块索引空间,且其采用int的无符号整型,因此当block为4K时,一个分区的最大空间为:2^32*4KByte=16TB当block为2K时,一个分区的最大空间为:2^32*2KByte=8TB当block为1K时,一个分区的最大空间为:2^32*1KByte=原创 2021-04-22 13:36:27 · 1748 阅读 · 0 评论 -
不同block大小情况下,单个文件的最大容量计算
对于一个inode来说,设计了12个直接指针索引,一个间接指针索引,一个双间接指针索引,以及一个三间接指针索引每个block号码为数字,需要占据4bytes。假设block的单位容量为1K,每个block能记录的block号码为1k/4=25612个直接容量 = 12 * 1k =12k单间接容量 = 256 * 1k = 256k双间接容量 = 256 * 256 * 1k = 65536k三间接容量 = 256 * 256 * 256 * 1k = 16777216k单文件最大总量 = 1原创 2021-04-22 11:35:12 · 1360 阅读 · 0 评论 -
区分KiB和KB
KB1是Kilo byte1KB = 1,000 Byte1MB = 1,000 KB1GB = 1,000,000 KB1TB = 1,000,000,000 KBKiB是kilo binary byte1KiB = 1,024Byte1MiB = 1,024KiB1GiB = 1,024MiB = 1,048,576 KiB1TiB = 1,024GiB = 1,073,741,824 KiBKB是windows系统惯常写法 ↩︎...原创 2021-04-22 14:59:50 · 671 阅读 · 0 评论 -
Bad magic number in super-block while trying to open dev,sda1
dumpe2fs查看Block 的大小出错原因tune2fs和dumpe2fs只能打开ext3/ext4等文件类型dumpe2fs - dump ext2/ext3/ext4 filesystem information tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems解决办法1.首先查看,此分区的文件类型blkid - locate/print block device att.原创 2021-04-22 10:12:36 · 6588 阅读 · 0 评论 -
xxx is not in the sudoers file. This incident will be reported
查看Block 的大小sudo dumpe2fs /dev/sda1 | grep "Block size:"的时候遇到如下错误:xxx is not in the sudoers file. This incident will be reported原因xxx是当前的用户名,原因是用户没有加入到sudo的配置文件里解决办法1.切换到root用户,运行visudo命令visudu2.在打开的配置文件中增加内容在root ALL=(ALL) ALL下面添加一行xxx AL.原创 2021-04-22 09:15:40 · 379 阅读 · 0 评论 -
进度条小程序
'\n’可以刷新缓冲区,也可fflush手动刷新缓冲区第一版 #include<stdio.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { char buf[4] = {'-', '\\', '-', '/'}; int i = 0; for(i; i <= 1.原创 2021-04-21 11:20:42 · 150 阅读 · 0 评论 -
TCP socket API&&发送和接收数据
TCP socket APIsocket API的函数都在sys/socket.hsocket()函数socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符;应用程序可以像读写文件一样用read/write在网络上收发数据;如果socket()调用出错则返回-1;原型及参数int socket(int af, int type, int protocol);af1 为地址族,也就是 IP 地址类型,常用的有 AF_INET(IPv4) 和 AF_INE.原创 2021-04-19 18:06:39 · 839 阅读 · 0 评论 -
套接字错误Linux
Error Code描述EACCESFor Unix domain sockets, which are identified by pathname: Write permission is denied on the socket file, or search permission is denied for one of the directories in the path prefix. (See also path_resolution(2).)EACCES, EP...原创 2021-04-19 17:40:54 · 571 阅读 · 1 评论 -
IO标准库和系统调用接口
标准库接口fopen/fread/fwrite/fseek/fcloseFILE *fopen(const char *path, const char *mode);size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);int fseek(FILE *stream, long原创 2021-04-19 08:24:04 · 203 阅读 · 0 评论 -
HTTP状态码列表
状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功请求并创建了新的资源202Accepted已接受。已经接受请求,但未处理完成203Non-Authoritative Information...原创 2021-04-19 08:14:43 · 126 阅读 · 0 评论 -
做一个简易的shell
分析shell运行机制的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为bash的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell创建一个子进程,然后在那个进程中运行ls程序并等待那个进程结束,子进程退出,回到父进程。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束…循环往复这个过程仅限于需要在子shell中运行的命令shell运行过程获取命令行解析命令行建立一个子进程(fork)替换子进程.原创 2021-04-18 16:12:22 · 271 阅读 · 0 评论 -
read命令
readread 是 Shell 内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。read 命令的用法read [-options] [variables]options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。options和variables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。Shell read 命令.原创 2021-04-18 16:10:02 · 6329 阅读 · 3 评论 -
父shell和子shell
得到当前shell的进程号执行echo $BASHPID或者echo $$如果该值和父bash进程的pid值不同,则表示进入了子shell。开启和关闭子shell首次进入bash记录shell tree形状和当前shell的进程号pstreeecho $$开启一个子bashbash记录开启一个子bash之后shell tree形状和当前shell的进程号退出当前bashexit记录退出一个子bash之后shell tree形状和当前shell的进程号.原创 2021-04-18 16:08:07 · 3185 阅读 · 0 评论 -
vim常用命令及缩写的含义加深记忆(Abbreviation for vim commands)
原创 2020-02-16 22:20:43 · 1332 阅读 · 2 评论 -
Linux Command(linux 命令行)
基本指令ls 命令ifconfig 查看当前主机上网卡信息 ls文件相关命令 匹配相关操作 具有功能选项ls -a 查看.开头及不是.开头的文件ls -l 列出文件的详细信息(Linux下一切皆文件)具有:文件类型 权限 链接数 可叠加 ls -a -l \ ls -lapwd 命令显示用户当前所在的目录(绝对路径) 第一个/是根目录swap 用于内存交换(...原创 2019-11-18 13:39:44 · 2648 阅读 · 0 评论 -
linux基本指令
进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.目录增,删w目录查r了解以下Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp/procproc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态...原创 2019-11-28 08:21:52 · 291 阅读 · 0 评论 -
linux命令练习
将之前所创建的目录和文件全部清理掉rm -r test //递归删除-r 递归删除目录下的所有文件及目录2. 在家目录下创建~/workspace/cmd 目录以及 ~/workspace/tmp/test 目录(什么是家目录?)mkdir -p ~/workspace/cmd //层层递归创建目录,没有的目录就自动创建mkdir -p ~/workspac...原创 2019-11-28 08:11:45 · 758 阅读 · 0 评论 -
xshell默认快捷键
原创 2019-12-15 10:11:00 · 257 阅读 · 0 评论