基本结构
硬件
硬件只有在操作系统的控制下才能完成工作
组成:
- CPU
- 内存 RAM
- 磁盘
- 主板
- 输入设备 鼠标 键盘 摄像头 麦克风
- 输出设备 屏幕 影响
操作系统
操作系统是管理计算机硬件与软件资源的计算机程序。
常用命令
帮助文档
man <cmd>
<cmd> -h
用户和密码
用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同用户。
useradd xxx -u <uid> -p <password>
相关文件
-
/etc/passwd 用户列表
每行记录的格式为
<account>:<password=x>:<uid>:<gid>:<name>:<home>:<shell>
-
/etc/group 组id
- /home/xxx 用户目录
- /etc/shadow 用户密码 只有root能看到
浏览文件
# 列出文件
ls -l
# 输出为 drwxr-xr-x 6 root root 4096 Oct 20 2020 apt
# 文件模式+权限位 硬链接数目 所属用户 所属组 文件大小 最近被修改日期 文件名
# 修改权限
chmod <mode> <file>
# 修改所属用户
chown <user> <file>
# 修改所属组
chgrp <group> <file>
文件权限
支持指令 | 文件 | 文件夹 |
---|---|---|
x 可执行 | ./FILE | cd DIR |
w 可写 | cat FILE + S | midir/touch DIR |
r 可读 | cat FILE | ls DIR |
安装软件
- 包管理工具
-
rpm CentOS体系
# 基础方式 (Redhat Package Manager) rpm -i xxx.rpm # 安装 rpm -qa # list rpm -e xxx # 卸载 # 软件管理包 (Yellow dog Updater,Modifier) yum search xxx # 查找版本 yum install xxx # 安装 yum list # list yum remove xxx # 卸载 yum update xxx # 更新
下载地址配置文件 /etc/yum.repos.d/CentOS-Base.repo
[base] name=CentOS-$releasever - Base - 163.com baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
-
deb Ubuntu体系
# 基础方式(Debian PacKaGe) dpkg -i xxx.deb # 安装 dpkg -l # list dpkg -r xxx.debg # 卸载 dpkg -r --purge xxx.deb #连同配置文件一起卸载 # 软件管理包(Advance Packaging Tool) apt-get install xxx # 安装 apt-get update # 更新 apt-get remove # 卸载 apt-get list #列出
下载地址配置文件 /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
-
- 下载解压缩
- .bashrc
- 环境变量 export
安装目录
一般规范
功能 | 目录 |
---|---|
主执行文件 | /usr/bin 或者 /usr/sbin |
其他的库文件 | /var |
配置文件 | /etc |
运行程序
-
前台运行
cd <dir> ./<filename>
设置PATH变量以后可以直接
<filename>
-
后台运行(no hang up)
# nohup 表示不挂掉 即使命令行退出 进程也还是保留 # & 表示在后台运行 nohup <command> &
关闭程序
# xargs 用户将前面的输出结果 作为参数传给后续命令 # kill -9 表示强制杀死该进程 9是linux信号量SIGKILL 不传 9 默认是 SIGTERM 15 ps -ef | grep <key> | awk '{print $2}'| xargs kill -9
-
以服务的方式运行 service systemd
service命令其实是去/etc/init.d目录下,去执行相关程序。
而systemctl 实际上将service 和chkconfig 这两个命令组合到一起。systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
# service命令其实是去/etc/init.d目录下,去执行相关程序 service httpd start # 启动 service httpd stop # 终止 service httpd restart # 重启 service httpd status # 查看状态 # systemctl命令 systemctl start httpd.service # 启动 systemctl stop httpd.service # 终止 systemctl restart httpd.service # 重启 systemctl status httpd.service # 查看状态 systemctl enable httpd.service # 使某服务自动启动
编辑文本
- vi/vim
- i(insert)
- q(quit)
- q!(quit without save)
- esc w
- gedit
系统调用
进程管理
概念
-
父进程
除了pid=0的交换进程以外,所有进程都是由pid=1的初始进程fork出来的(systemd/initd)
-
子进程
系统调用
-
fork 复制进程
当父进程调用 fork 创建进程的时候,子进程将各个子系统为父进程创建的数据结构也全部拷贝了一份,甚至连程序代码也是拷贝过来的。对于 fork 系统调用的返回值,如果当前进程是子进程,就返回 0;如果当前进程是父进程,就返回子进程的进程号。
- execve 执行另一个程序
- waitpid 暂时停止目前进程的执行,直到有信号来到或子进程结束。
内存管理
概念
-
独立进程空间
操作系统中,每个进程都有自己的内存,互相之间不干扰。最大大小和CPU位数相关,32位操作系统为Math.pow(2,32) = 4G
-
代码段
进程的内存空间中存放程序代码的这部分
-
数据段
进程的内存空间中存放进程运行中产生数据的这部分
-
堆
动态分配的,会较长时间保存,指明才销毁的数据段
系统调用
- brk 直接修改有效访问范围的末尾地址实现分配与回收。适合少量内存分配。
- mmap 在进程的虚拟地址空间中找一块空闲的虚拟内存。适合大量内存分配。
文件管理
Linux 里有一个特点,那就是一切皆文件。程序是二进制文件,配置是文本文件,控制台是stdout文件,管道也是文件,socket也是文件,设备也是文件,文件夹也是文件,进程号pid也是文件。
每个文件,Linux 都会分配一个文件描述符,作为系统调用的参数
概念
- 介质
- 格式
系统调用
- open 打开存在的文件
- close 关闭存在的文件
- creat 新建不存在的文件
- lseek 调到文件某个位置
- read 读
- write 写
信号处理
概念
当出现异常时,会产生信号通知等待进程。
系统调用
- sigaction 注册一个信号处理函数
进程间通信
-
消息队列 在内核里 消息比较短
- msgget 创建一个新的队列
- msgsnd 将消息发送到消息队列
- msgrcv 从队列中取消息
-
共享内存 不需要拷贝
- shmget 创建一个共享内存块
- shmat 将共享内存映射到自己的内存空间
-
信号量 Semaphore 处理竞争问题
-
sem_wait 占用这个信号量 操作系统的 P 操作
信号量大于零,就给它减1;信号量为零,就挂起该进程的执行
-
sem_pos 释放信号量
如果有其他进程因等待信号量而被挂起,就让它恢复运行,如果没有0,就给它加1
-
-
信号
-
管道
-
套接字 socket