Linux基础第一章 概述
第一章 概述
1.1 前言
本章讨论系统的概念,从硬件、操作系统角度更加深刻的理解计算机系统,并快速浏览Linux系统提供的服务。
1.2 系统组成

1.3 操作系统和应用程序
操作系统这个词语有二意性,有时候指内核,有时候指内核和系统工具软件的组合。

操作系统是管理系统硬件的软件。操作系统是直接运行在裸机之上。其他应用软件运行在操作系统之上。
操作系统本身提供操作接口,支持用户通过该接口来操作 系统,但是系统本身提供的功能,不足于完成用户需求时,则需要开发应用程序来拓展系统功能。
发行版:
不同的公司使用Linux内核,加上自己开发的系统工具软件,一起发布的Linux操作系统版本。
1.4 启动和登陆
配置文件:
/etc/profile:系统启动时被执行
~/.bashrc:用户登陆时会调用
1.5 文件
文件是一个重要的概念,一般定义为信息的集合。计算机做为信息处理的机器,文件是计算机处理的对象。
在Unix和Linux系统中,泛化了文件的概念,设备也被抽象成文件对象来进行操作。
数据的集合叫做文件。
IT行业处理信息:转换,传输,存储
1.6 程序、进程

1.7 错误处理
系统调用在一般情况下返回整数,并且0表示成功,小于0表示失败。当系统调用返回失败时,可以通过errno获得错误嘛,通过strerror获取错误解释,或者直接通过perror在标准错误文件中,输出错误信息。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
// 通过open返回的整数,在linux中有个特别的名字
// 叫文件描述符 file description 简称fd
int fd = open("a.txt", O_WRONLY|O_CREAT|O_EXCL, 0777);
if(fd < 0)//表示文件打开失败
{
perror("open");
return 0;
}
// 把指针放到文件开头
lseek(fd, 0, SEEK_SET);
// 对文件进行操作
write(fd, "hello", 5);
// 关闭文件,如果不关闭,内存会泄漏
// 当进程退出时,未关闭的文件会自动关闭
close(fd);
}
1.8 用户、组、文件权限
Linux是多用户系统,支持多个用户同时登陆系统。
为了安全起见,需要对系统的权限加于规范。
1.9 信号
信号是进程通信的一种手段,某个进程收到信号,该信号可能来自内核、来自其它进程或者来自用户操作。例如:当用户按下ctrl+c时,其实是给前台进程发送了一个信号。
1.10 系统调用和库函数
学习Linux系统开发接口时,程序员也需要学习一般常用的第三方库,来拓展程序员的编程能力。
User Space和Kernel Space是操作系统编程中常用的概念,表示当前的代码在用户空间还是内核空间运行,对于不同的运行空间,CPU对内存的处理方式稍有不同,在讲进程虚拟地址空间时再涉及该概念。
系统调用指操作系统内核提供的功能,它提供了接口给用户空间代码调用。比如open/read/write/close等,都是属于Linux系统操作接口,而fopen/fread/fwrite/fclose是属于C标准提供的接口,在Linux下,fopen其实底层调用了open。
配置文件:
/etc/profile:系统启动时被执行
~/.bashrc:用户登陆时会调用
文件操作
头文件:sys/types.h sys/stat.h fcntl.h 例:int fd=open(“文件路径”,mode); mode决定了对文件的操作方式 第三个参数可有可无,对文件权限进行处理, 因umask存在,创建文件权限要与上000 000 010的反,导致用户权限开始不能有写的权限
mode选项 |
解释 |
O_RDONLY |
读方式打开(与后面俩个互斥) |
O_WRONLY |
写方式打开 |
O_RDWR |
读写方式打开 |
O_CREAT |
创建文件,如果文件存在,直接打开 |
O_TRUNC |
截断 |
O_APPEND |
追加 |
O_EXCL |
和O_CREAT一起用,如果文件存在则失败 |
函数:
perror:对某种错误信息进行打印
open/creat:打开文件/创建文件
read:读文件
write:写文件
close:关闭文件
lseek:定位文件读写位置
fcntl:修改文件属性
sysconf:读取系统配置
dup/dup2:复制文件描述符
sync/fsync/fsyncdata:同步文件数据
mmap/munmap:文件映射
mkstemp:得到临时文件路径
命令
touch:修改文件的访问时间,创建文件
cat:访问文件内容
vim:编辑
ulimit:显示一些限制信息(文件描述符最大值、栈的空间尺寸)
umask:文件创建的权限掩码
getconf:对应sysconf
dd:可以拷贝块设备,但是要sudo权限 例 dd if=位置 of=文件名 bs=一次多少k cout=拷贝次数
Wc:计算文件的行数 单词个数 字节数
unlink:删除软链接
信号
是控制进程通信的一种方式,效率高,成本低
信号处理方式:掩盖、忽略、默认处理
掩码:延迟信号的处理 运用信号集合
掩盖不可靠信号,多次发送,只处理一次 掩盖:可靠信号 处理多次
进程
fork()创建
线程
鼠标键盘都是只读的字符文件夹设备,所以可以运用函数进行监控 一般在/dev/input/mic 文件下面 注意权限问题 鼠标键盘读取数据,是俩个进程,注意进程的阻塞问题 可以运用字进程和父进程进行处理
线程的创建
pthread_created(1,2,3,4) //1:线程的id 2:线程的的属性 3:新线程的函数名字, 4:新线程的属性 要链接 -lpthread 库
注意子线程是依附主线程的,主线程结束,子线程无法运行 这个 pthread_exit(0)主线程结束,子线程没有退出例外
运用pthread_equal 判断线程是否相等,先等返回0 不相等返回非零值
pthread_jion(1,&ret) 阻塞调用 1:线程id ret:线程返回值
pthread_t tid = pthread_self() 得到当前运行进程的id
进程和线程的区别:
进程:分配资源的单位 线程:调度的单位 多线程可以共享全局变量
锁
避免俩个线程同时操作全局变量,第一个线程运用了锁,后面的线程在外面等,等待解锁后,后面的线程在进来
死锁
连续俩次加锁,加锁后,没有解锁,又继续加锁,会导致死锁。 运用循环锁,可以重复加锁 通过定义锁的属性,变为循环锁 例:pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);pthread_mutex_init(&mutex,&attr)
加锁后,忘记解锁,也会出现死锁 C++中运用析构函数,可以避免忘记解锁,定义一个类
读写锁
pthread_rwlock_t mutex;
pthread_rwlock_init(&mutex, NULL);
读/写锁定pthread_rwlock_rd/wrlock(&mutex);
解锁:pthread_rwlock_unlock(&mutex);
守护进程
守护进程不和终端关联,注意此进程只能有一个,创建文件记录,判断此程序是否开启
编程规则:
设umask=0;
调用fork,让父进程退出。 让父进程变为init, 如果父进程不退出,用俩次fork()
调用setuid创建新会话 setsid
重设当前目录/根目录 chdir
关闭不需要的文件描述符 运用循环关闭所有文件描述符
高级IO
一个进程就是一段指令
IO复用技术
select的运用
运用文件描述符集合 运用fd_set创建文件描述符集合 文件接口相对较小,跨平台运用
FD_SET(1,2) 将文件描述符放入文件描述符集合 1:文件描述符 2:集合名字
epoll的运用
epollfd 创建文件描述符集合
epol_ctl将文件描述加入集合中
非阻塞IO
管道
一边读,一边写
匿名管道 pipe()创建管道
mmap 可以实现有亲子关系进程的文件共享 效率低,数据写入内存,在从内存中读取数据 运用shm_open实现文件共享也可以
文件内存共享,无法进行通信
通过锁,让进程共享内存进行通信 pthread_mutex_init 需要将锁放在共享内存中
fork + exec 让进程有不同的功能
Linux基础第一章 概述的更多相关文章
- 【译文连载】 理解Istio服务网格(第一章 概述)
书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr ...
- (linux shell)第一章--小试牛刀(上)
来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...
- perl5 第一章 概述
第一章 概述 by flamephoenix 一.Perl是什么?二.Perl在哪里?三.运行四.注释 一.Perl是什么? Perl是Practical Extraction and Re ...
- 计算机网络课程优秀备考PPT之第一章概述(一)
为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 以上,是<计算机网络>课程的第一章概述.
- TCP/IP详解 卷1 第一章概述
第一章概述 1.2 分层 网络编程通常分不同层次进行开发,每一层负责不同的通信功能. 一个协议族比如TCP/IP,通常是一组不同层次上多个协议的组合.一般可以认为是是四层协议系统: 链路层:有时也称作 ...
- (linux shell)第一章--小试牛刀(下)
文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...
- 20190804-Python基础 第一章
学习爬虫的同时,补充学习更多Python的基础知识,才能让所学更加扎实. 至今,所学的很多东西,基础都不牢固,导致这些所学都是浅尝则止的皮毛,不能真正上战场,故借速成之心,踏实打牢基础,举一反三,以求 ...
- Camel In Action 阅读笔记 第一部分概述 + 第一章概述 认识Camel
第一部分: 最开始的一小步 Apache Camel 是一个开源集成框架,其目的是让系统集成变得更加简便,在本书的第一章中,我们会为您介绍它并向您展示它是如何在大型企业应用中做好集成工作.您也会了解到 ...
- [Wolfgang Mauerer] 深入linux 内核架构 第一章 概述
作为Linux开发爱好者,从事linux 开发有两年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分 ...
- 【菜鸟学习Linux】-第一章-Linux环境搭建-安装VMware虚拟机
本人菜鸟一个,刚毕业才上班2个月,现在用到Linux部署项目,这才开始学习Linux,以下是我在安装Linxu系统是遇到的一些问题,希望能给广大菜鸟们在学习的道路上提供帮助和指导,废话不多说!开工! ...
随机推荐
- 用golang开发系统软件的一些细节
用golang开发系统软件的一些细节 作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 (本文的pdf版本) ...
- [题解] Codeforces 1720 E Misha and Paintings 结论
题目 算是诈骗题? 令一开始就存在的颜色数为cnt.k>=cnt的情况,显然每次找一个出现不止一次的颜色,然后把这个颜色的恰好一个方块替换成一种没有出现过的颜色就可以了,\(k-cnt\)次解决 ...
- 关于AWS-IAM-certificate-证书的说明
AWS提供了证书管理的服务,可以使用IAM和ACM(位于Security & Identity IAM下的Certificate Manager)进行管理 在CloudFront和ALB中都可 ...
- PTA 520钻石争霸赛 2021
7-1 自动编程 签到题 #include<bits/stdc++.h> typedef long long ll; const int maxm = 1e5 + 5; const int ...
- CentOS 7.9 安装 rabbitmq-3.10.2
一.CentOS 7.9 安装 rabbitmq-3.10.2.tar.gz 地址 https://www.rabbitmq.com https://github.com/rabbitmq/rabbi ...
- Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
插槽Vue.js官网介绍:https://vuejs.org/guide/components/slots.html 会牵涉到template的用法.占位.实际不渲染到页面中 1.默认插槽: 1.1 ...
- AI带你省钱旅游!精准预测民宿房源价格!
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...
- Intel GPU Gen 9 架构
* 参考spec:the-compute-architecture-of-intel-processor-graphics-gen9-v1d0.pdf SOC 架构 Gen9 架构是早期用在igpu ...
- Kubernetes集群YAML文件详解
Kubernetes集群YAML文件详解 概述 k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种 ...