linux
文章平均质量分 75
linux
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
Linux进程之调度器
在 Linux 中,用户可以使用nice和renice命令来改变程序的优先级。这些命令主要改变程序的nice值,nice值范围从 -20 到 19。-20 是最高优先级,19 是最低优先级。默认情况下,进程的nice值是 0。在启动程序时设置nice值:这将以nice值 10 运行command。改变正在运行的进程的nice值:这将把具有进程 ID[PID]的进程的nice值增加 5。请注意,nice值通常只能由 root 用户或进程的所有者更改。如果是普通用户的话,他们只能增加他们自己进程的。原创 2023-08-13 01:53:38 · 418 阅读 · 0 评论 -
linux之命名空间
PID命名空间(PID Namespaces)是Linux命名空间中的一种类型,用于隔离进程ID空间。这意味着在各个PID命名空间中,进程ID是唯一且独立的。每个新的PID命名空间都有自己的PID为1的进程,该进程是命名空间内的所有其他进程的祖先。当我们创建新的PID命名空间(例如在创建新的容器时),这实际上会生成一个新的进程ID空间,其中的进程将为其当前命名空间分配一个新的、唯一的PID。同样一个进程在其父命名空间中也有一个唯一的PID。这样就允许在单系统中并行运行多个相同PID的进程,原创 2023-08-12 16:29:46 · 880 阅读 · 0 评论 -
linux之缓存技术(TLB、伙伴系统、Slab缓存)
Linux中的伙伴系统(Buddy System)是一种内存分配策略,该策略主要用于满足内存分配请求并减少内存碎片。在伙伴系统中,内存被分为多个连续的区块(例如,2^N个连续的页框),这些区块被称为“区”。每次内存分配请求到来时,系统会选择一个最小且符合大小需求的区来满足该请求,并且这个区的大小总是2的幂。如果选中区的大小超过了请求的内存大小,那么这个区将被分割为两个大小相等的子区,这对子区被称为“伙伴”。其中一块将被用于满足内存请求,另一块则保留以供未来使用。原创 2023-08-12 13:40:26 · 278 阅读 · 0 评论 -
linux操作系统概念:内核态
"处于内核态"通常意味着。在现代计算系统中,CPU 运行模式通常有两种:用户态(User Mode)和内核态(Kernel Mode)。:当 CPU 处于用户态时,运行的程序只能访问一部分受限制的资源和指令。如果一个程序需要访问更多的资源或执行特权级操作(例如,直接控制硬件),它需要请求操作系统,通过一种称为“系统调用”的方式将执行上下文切换到内核态。:当 CPU 处于内核态时,操作系统内核或设备驱动程序等可以访问所有硬件资源及内存,执行所有指令。原创 2023-08-12 13:05:05 · 278 阅读 · 0 评论 -
linux命令
1. 文件和目录cp -r dir1 dir2将目录 dir1拷贝到dir2如果目标文件夹存在,则将源文件夹拷贝到目标文件夹中如果目标文件夹不存在,则创建目标文件夹,将源文件夹中的内容拷贝的目标文件夹中ln /home/a.txt a1.txt给文件创建硬连接ln -s /home home目录只能创建软连接du -sh /home查看文件或目录大小s:仅显示目录总大小h:humansudo find / -name docker*根据名称查找s原创 2022-01-10 14:06:44 · 325 阅读 · 0 评论 -
gdb调试
1. 前提条件如果需要gdb调试,在编译时必须加上-g参数gcc -g hello.c -o hello启动gdb: gdb program启动后类似进入一个shell终端窗口2. 启动gdb启动gdb:gdb ./app设置运行参数:set args hello world I am here查看运行参数:show args启动程序:run程序向下执行一行:start3. 显示源代码list 10:打印第十行代码的上下文内容list main:打印函数名为main原创 2021-12-24 16:51:20 · 170 阅读 · 0 评论 -
linux命令
linux命令文件与目录操作cpcp -r dir1 dir2将dir1里面的内容拷贝到dir2中lnln /home/a.txt a1.txt只有文件才可以创建硬链接ln -s /home homedudu -sh /home查看文件或目录大小s:仅显示目录总大小h:humanwhich查看自己所在目录findsudo find / -name docker*在根目录下按名称查找sudo find / -type原创 2021-11-05 12:21:49 · 137 阅读 · 0 评论 -
linux系统调用函数之select、poll、epoll
1. select函数1.1 相关函数说明int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);返回值: nfds:监控的文件描述符集里的最大文件描述符+1,此参数告诉内核监测前多少个文件描述符的状态 readfds:传入传出参数,位图 传入时:代表要监听的哪些文件描述符的可读事件 传出时:代表哪些文件描述符实际发生了可读事件原创 2021-10-02 14:29:35 · 178 阅读 · 0 评论 -
linux之socket网络编程
1. 一些基本知识1.1 大端存储和小端存储大端:低地址存高位数据,高地址存低位数据 小端:低地址存低位数据,高地址存高位数据 目前,计算机本地存储一般都采用小端法,而网络流数据采用大端法。相关函数uint32_t htonl(uint32_t hostlong); // 将32位的小端字节序转换为大端字节数uint16_t htons(uint16_t hostshort); // 将16为的小端字节序转换为大端字节序uint32_t ntohl(uin原创 2021-10-01 20:17:52 · 156 阅读 · 0 评论 -
linux系统调用之fcntl函数
1. 作用根据文件描述符来操作文件的属性1.1 函数原型int fcntl(int fd,int cmd);int fcntl(int fd,int cmd,long arg);int fcntl(int fd,int cmd,struct flock *lock);fd:文件描述符 cmd:命令选项,常见的有以下可选值 F_DUPFD:复制一个现有的描述符 F_GETFL:获得文件状态标记 F_SETFL:设置文件状态标记 F_GETOWN:获取异步I/O所有权原创 2021-10-01 15:26:58 · 171 阅读 · 0 评论 -
linux之多线程
1. linux中的线程在linux中,无论是创建进程的fork,还是创建线程的pthread_create,底层实现都是调用同一个内核函数clone 如果复制对方的地址空间,那么就创建出一个进程,如果共享对方的地址空间,那么就产生一个线程。 因此:linux内核是不区分进程和线程的。只是在用户层面上进行区分。 线程所有的操作函数是库函数(第三方库),而非系统调用。1.1 线程之间共享的资源文件描述符表 每种信号的处理方式 当前的工作目录 用户ID和组ID 内存地址空间1.2 线程原创 2021-10-01 14:08:04 · 90 阅读 · 0 评论 -
linux之系统调用
1. 系统调用的分类慢系统调用: 可能会使进程永久阻塞的一类。如果在阻塞期间收到一个信号,该系统调用就被中断,去执行信号的处理动作,执行完信号的处理动作后不再回来继续执行(早期)该系统调用; 也可以设定该系统调用是否重启(重新执行系统调用命令)。 常见的慢系统调用如,read(读伪文件),write,pause,wait 其他系统调用: 调用后不会阻塞,执行完了就离开返回。 getpid,getppid,fork ...原创 2021-09-30 22:23:14 · 86 阅读 · 0 评论 -
Linux之信号机制
1. 什么是信号1.1 信号的特点简单 不能携带大量信息 满足某个特设条件才会给进程发送信号 信号是通过软件方法实现的(时钟中断是通过硬件实现的),其实现手段导致信号有很强的延时性,但对用户来说很难感知(软中断) 所有进程收到的信号,都是由内核负责发送的,也由内核处理。 进程A给进程B发信号其实本质是进程A驱使内核给进程B发信号。补充:软中断不如硬中断靠谱与及时,硬中断能精确控制中断的时间,但是软中断可能会有延时。因为软件运行时间有随机性1.2 与信号相关的事件和状态产生信号的事原创 2021-09-30 13:30:02 · 138 阅读 · 0 评论 -
linux之进程间通信(IPC)
1. 进程间通信方式管道(使用最简单) 信号(开销最小) 共享内存(无血缘关系进程通信) 本地套接字(最稳定)2. 管道之pipe2.1 管道的原理管道的本质是一个伪文件(实际上是内核缓冲区) 它有两个文件描述符引用,一个表示读端,一个表示写端。规定数据从管道的写段流入管道,从读端流出。 管道实际上是内核使用环形队列机制(先进先出),借助内核缓冲区(默认4k,可以通过命令ulimit -a可查看)实现补充:什么是伪文件- 文件 d 目录 l 符号连接 s 套接字 b 块原创 2021-09-29 23:38:15 · 108 阅读 · 0 评论 -
孤儿进程和僵尸进程
1. 孤儿进程父进程先于子进程结束,则子进程成为孤儿进程。子进程的父进程会变为init进程,称为init进程领养孤儿进程2. 僵尸进程子进程终止后,父进程尚未对其进行回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程 僵尸进程是不能用kill命令清楚的。因为kill命令只能终止进程,而僵尸进程已经终止。3. 如何回收僵尸进程父进程通过调用wait函数或者waitpid函数来进行回收。...原创 2021-09-29 20:59:32 · 52 阅读 · 0 评论 -
linux之常见的系统函数
1. 文件管理1.1 open函数:打开文件fd=open(filename,flags,mode)fd:open成功返回文件描述符,失败返回-1 filename:要打开的文件名 flags:打开的方式 mode:若以创建的方式打开,用mode设置文件的权限1.2 close函数:关闭文件flag=close(fd)flag:0代表关闭成功,-1产生错误 fd:文件描述符1.3 read函数:从文件中读取size=read(fd,buffer,count)si原创 2021-09-29 16:16:46 · 380 阅读 · 0 评论 -
linux之gcc
1. C文件变为可执行文件的过程1.1 预处理器处理头文件展开,宏替换,注释去掉gcc -E hello.c -o hello.i1.2 编译器处理C文件变为汇编文件gcc -S hello.i -o hello.s1.3 汇编器处理将汇编文件变为二进制文件gcc -c hello.s -o hello.o1.4 连接器将库函数中的相应代码组合到目标文件中gcc hello.o -o hello2. gcc相关命令2.1 编译时指定头文件目录原创 2021-09-28 21:13:16 · 65 阅读 · 0 评论 -
linux之网络相关的命令
1. curl访问指定地址并将结果显示到终端curl www.baidu.com# 输出到指定文件curl -o baidu.html www.baidu.com2. telnet客户端向服务端发起tcp连接telnet 192.168.12.36 803. ss socket statistics:显示socket的状态 # -l:显示正在监听(listening)的socket# -n:不解析服务名称# -t:只显示tcp socketss -lnt原创 2021-09-27 22:17:59 · 152 阅读 · 0 评论 -
linux之网络相关的配置
1. curlcurl www.baidu.com# 输出到指定文件curl -o baidu.html www.baidu.com2. telnet客户端向服务端发起tcp连接telnet 192.168.12.36 80原创 2021-09-27 13:38:59 · 80 阅读 · 0 评论 -
网络之iptables
1. 一些相关的概念1. 链的概念原创 2021-09-27 02:05:03 · 219 阅读 · 0 评论 -
tcpdump使用详解
1. tcpdump的语法格式tcpdump [option] [proto] [dirction] [type] option:可选参数 proto:协议过滤器,可识别的关键词有 http,tcp,udp,icmp,ip,ip6,arp,rarp type:类型过滤器。可识别的关键词 host,net,port,portrange。这些词后面还需要再接参数 directiron:数据流向过滤器,可识别的关键字 src,dst,src or dst 2. 抓包结果原创 2021-09-26 20:42:22 · 4743 阅读 · 0 评论 -
shell操作
1. 相关命令1.1 source读取脚本文件,执行文件里的代码source first_shell.sh2. 变量2.1 临时变量的定义name=zhangsan# 有空格需要加""A="hello world"#交互式定义变量read -p "请输入姓名:" name# -s:不显示用户输入的内容read -p "请输入你的密码:" -s password2.2 环境变量# 当前shell窗口有效export name=zhangsan#原创 2021-09-25 02:46:29 · 75 阅读 · 0 评论 -
linux之vim编辑器
1. 命令模式下1. 移动光标# 光标移动到文件开头gg# 光标移动到文件末尾G# 光标移动到行首0# 光标移动到行尾$# 移动到123行123G2. 删除与撤销# 删除光标所在的行dd# 删除光标位置起的三行数据3dd# 撤销u# 反撤销Ctrl+r3. 复制与粘贴# 复制当前行yy# 复制三行,从光标处开始3yy# 粘贴:粘贴在下一行p4. 查找# 从光标处查找hello; 然后按n查找下一个原创 2021-08-09 18:16:55 · 61 阅读 · 0 评论 -
linux基础命令
1. 基本操作命令1. echo :有点类似于println,控制台打印# $PATH 是系统环境变量,打印出PATH变量的值echo $PATH# 查看当前系统使用的是哪一种shellecho $SHELL2. pwd: 查看当前所在目录pwd3. which : 查看命令所在的路径which ls4. whoami:查看当前登录用户whoami2. 文件与目录相关操作1. 文件和目录的创建与删除# 创建目录mkdir dir1# 创原创 2021-08-09 17:53:00 · 111 阅读 · 0 评论