Linux操作系统
文章平均质量分 86
小何才露尖尖角
任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界的真实变化而随机修正,我对世界永远保持开放的态度--Thomas Bayes
展开
-
Shell脚本快速入门
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。原创 2023-05-09 14:12:26 · 447 阅读 · 0 评论 -
关于容器(Docker)的形象比喻
容器是一种特殊的进程。普通的进程 + namespace(一重枷锁,能看到什么进程) + cgroup(二重枷锁,能用多少资源,内存/磁盘。cpu等) + chroot(三重枷锁,能看到什么文件)= 特殊的进程 = 容器原创 2023-04-24 22:40:09 · 634 阅读 · 0 评论 -
centos 7 DVD版设置基础软件仓库出错(error setting up base repository)
这篇博文解决了自己的问题,因为担心原文被删,所以转载到此处,原文地址:https://www.cnblogs.com/Lovelorn-Zhang/p/13356511.html首先感叹下互联网带来大量信息、知识的同时也带来了不少垃圾信息。百度一下出来一样的回答,没有自己想要的,修改了好几次搜索词才从大量无用信息中找到自己想要的。希望我能给和我有一样问题的人能带来一点帮助一开始我是用ultraISO将centos7镜像刻录到U盘,安装系统。前面和虚拟机安装一样,没什么问题,但安装源那边一直没有检测镜像转载 2020-12-13 00:33:52 · 4296 阅读 · 3 评论 -
Linux 操作系统:信号
1 信号在 Linux 操作系统中,为了响应各种各样得事件,定义了非常多得信号。可以通过命令 kill -l, 查看所有得信号。# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2原创 2020-06-29 10:31:00 · 321 阅读 · 1 评论 -
Linux 操作系统:物理内存管理
物理内存管理摘要1 物理内存的组织方式1.1 节点1.2 区域1.3 页2 内存的分配2.1 页的分配2.2 页的分配总结2.3 小内存的分配3 页面换出4 总结摘要-物理内存组织方式-每个物理页由 struct page 表示-物理页连续,page 放入一个数组中,称为平坦内存模型-SMP 对称对处理器:多个 CPU 通过总线访问内存,采用平坦内存模型,总线成为瓶颈-NUMA 非一致内存访问:每个 CPU 都有本地内存,访问内存不用经过总线-本地内存称为 NUMA 节点,本地内存不足可以原创 2020-06-09 19:17:03 · 338 阅读 · 0 评论 -
Linux 操作系统:进程空间管理
进程空间管理摘要1 用户态和内核态的划分1.1 用户态布局1.2 内核态的布局1.2.1 32 位内核态布局1.2.2 64 位内核态布局2 总结摘要-内存管理信息在 task_struct 中-task_size 指定用户态虚拟地址大小-32 位系统:3G 用户态, 1G 内核态-64 位系统(只利用 48 bit 地址):128T 用户态;128T 内核态-用户态地址空间布局和管理-mm_sturct 中有映射页的统计信息(总页数,锁定页数,数据/代码/内存映射等)以及各区域地原创 2020-06-07 18:09:26 · 1191 阅读 · 0 评论 -
Linux 操纵系统:内存管理
计算机中的“计算”两个字,其实说的就是两方面,第一,进程和线程对于 CPU 的使用; 第二,对于内存的管理。1 独享内存空间的原理内存被分成了一块一块的,并且每一块都变好了号,称为地址。通过这个地址我们就能定位到物理内存的位置。但是对于进程来说,用的并不是内存的实际物理地址,因为如果多个进程都选择相同物理地址的话就会引起冲突。于是就使用一种封闭开发的手段,每个项目的物理地址对于进程不可见,谁也不能直接访问这个物理地址。操作系统会给进程分配一个虚拟地址。所有进程看到的这个地址是一样的,里面的内存是从原创 2020-06-06 14:44:27 · 216 阅读 · 0 评论 -
Linux 操作系统:线程的创建
创建一个线程调用的是 pthread_create用户态创建线程无论进程还是线程,在内核里面都是任务,那怎么在内核里加以区分呢?其实,线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用,是 Glibc 库的一个函数,所以还是需要去 Glibc 里面找线索。在 nptl/pthread_create.c 里面有这个函数。int __pthread_create_2_1 (pthread_t *newthread, const pthrea原创 2020-05-31 16:59:23 · 1032 阅读 · 0 评论 -
Linux操作系统:进程的创建
创建进程使用 forkfork 是一个系统调用,根据系统调用的流程,流程的最后会在 sys_call_table 中找到相应的系统调用 sys_fork。根据 SYSCALL_DEFINE0 这个宏的定义 ,下面代码就定义了 sys_forkSYSCALL_DEFINE0(fork){...... return _do_fork(SIGCHLD, 0, 0, NULL, NULL, 0);}sys_fork 会调用 _do_forklong _do_fork(unsigned lon原创 2020-05-30 21:19:32 · 572 阅读 · 0 评论 -
Linux 操作系统:调度
1 调度策略与调度类在 Linux 里面,进程大概可以分为两种一种称为实时进程,也就是需要尽快返回结果的那种。另一种是普通进程,大部分的进程其实就是这种。在 task_struct中,有一个成员变量,我们叫做调度策略unsigned int policy;它有以下几个定义:#define SCHED_NORMAL 0#define SCHED_FIFO 1#define SCHED_RR 2#define SCHED_BATCH 3#define SCHED原创 2020-05-29 18:40:32 · 1194 阅读 · 1 评论 -
Linux 操作系统:用户态与内核态函数调用
文章目录1 用户态函数栈2 内核态函数栈3 通过 task_struct 找内核栈4 通过内核栈找 task_struct5 总结在编译程序时,编译器会将程序编译为如下结构加载到内存中执行。 过程参考进程:代码段:保存程序文本,指令指针 EIP 就是指向代码段,可读可执行不可写数据段:保存初始化的全局变量和静态变量,可读可写不可执行BSS:未初始化的全局变量和静态变量堆(Heap):动态分配内存,向地址增大的方向增长,可读可写可执行栈(Stack):存放局部变量,函数参数,当前状态,函数调用信原创 2020-05-21 21:30:00 · 2790 阅读 · 0 评论 -
Linux 操作系统:进程数据结构(task_struct)
在 Linux 中,无论进程还是线程,到了内核里面,我们统一都叫作任务(Task), 由一个统一的结构 task_struct 进行管理。 Linux 将所有的 task_struct 用链表串起来进行管理。struct list_head tasks;task_struct 的结构如图所示:任务ID任务号用于操作系统进行排期,下发任务等。在内核中,虽然进程和线程都是任务,但是还是应该加以区分,因为任务下发和展示是区分进程级和线程级的,所以 task_struct 中有两个任务号, pid 是原创 2020-05-20 13:51:33 · 2883 阅读 · 1 评论 -
Linux 操作系统:进程
编译CPU 只能执行二进制命令,写好的程序需要编译为二进制,才能被执行。在 Linux 系统中, 二进制的程序是有格式要求的,这个格式我们称为 ELF(Executeable and Linkable Format, 可执行与可链接格式)。这个格式可以根据编译结果的不同,分为不同格式。执行命令 gcc -c -fPIC 文件名.c 进行编译,在编译的时候,先做预处理工作,例如将头文件嵌入到正文中,将定义的宏展开,然后就是真正的编译过程,最终编译为 .o 文件,这就是 ELF 的第一种类型, 可重定位文原创 2020-05-17 01:32:44 · 518 阅读 · 2 评论 -
Linux 操作系统: Vim 的使用
Linux 中一切皆文件操作文件中,有以下的常见命令:cat 将文本内容显示到终端head 查看文件开头tail 查看文件结尾常用常数 -f 文件内容更新后,显示信息同步更新wc 统计文件内容信息打包与压缩: tar czf 备份文件名.tar.gz 文件名解压:tar zxf 解压文件 -C 另存文件 Vim 的四种模式正常模式(Normal-mode): $vim 之后开始进入的模式插入模式(Insert-mode)命令模式(Command-mode原创 2020-05-13 18:08:18 · 172 阅读 · 1 评论 -
Linux操作系统:常见命令
用户与密码passwd 修改密码。useradd 添加新用户。useradd monroe 添加 monroe 用户,利用命令 passwd monroe 设置密码。创建的用户,放置在文件 /etc/passwd 中,可以通过 cat /etc/passwd 打开查看,用户组的信息在 /etc/group 中。x:表示密码,后两位数字表示 ID 和 组ID在 root 用户中 /root 是 root 用户的主目录, /home/monroe 是 monroe 用户的主目录。/bin/bash原创 2020-05-09 17:50:26 · 312 阅读 · 5 评论