Linux概述

Posted by Run-dream Blog on December 3, 2020

基本结构

硬件

硬件只有在操作系统的控制下才能完成工作

组成:

  • 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

安装软件

  1. 包管理工具
    • 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
      
  2. 下载解压缩
    • .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 注册一个信号处理函数

进程间通信

  1. 消息队列 在内核里 消息比较短

    • msgget 创建一个新的队列
    • msgsnd 将消息发送到消息队列
    • msgrcv 从队列中取消息
  2. 共享内存 不需要拷贝

    • shmget 创建一个共享内存块
    • shmat 将共享内存映射到自己的内存空间
  3. 信号量 Semaphore 处理竞争问题

    • sem_wait 占用这个信号量 操作系统的 P 操作

      信号量大于零,就给它减1;信号量为零,就挂起该进程的执行

    • sem_pos 释放信号量

      如果有其他进程因等待信号量而被挂起,就让它恢复运行,如果没有0,就给它加1

  4. 信号

  5. 管道

  6. 套接字 socket