0%

02linux_04day

=================================
2022-7-14
=================================

一.温故知新

    1.编辑器
        vim
            命令模式
                光标的定位
                    h j k l gg G 3G /string(n N)
                文本的编辑
                    yy p P dd u ctrl+r r x D
                模式的切换
                    iIoOaA
                    :
                    v
                    V
                    ctrl + v
            编辑模式
                文本的补齐
                    ctrl + p
            命令行模式
                w q wq q! wqa 
                3,6 s/srcname/destname/
                g %
            可视模式
                代码格式的调整
            可视行模式
            可视块模式
                块插入
                块删除
                块替换
            替换模式
    2.编译器
        gcc->cc
        a.out
        gcc hello.c -o hello
        gcc -Wall
    3.用户管理
        sudo useradd 用户名
        sudo passwd 用户名
        sudo userdel 用户名
            -r
    4.权限管理
        基本权限和特殊权限
符号	数字	含义		对于普通文件的影响			对于目录文件的影响
r	4	可读		是否可以读取文件内容		是否可以列出子文件
w	2	可写		是否可以修改文件内容		是否可以创建或删除子文件
x	1	可执行	是否可以执行文件内容		是否可以访问该目录

二.文件的特殊权限

    无论是suid sgid 还是 sticky,影响的都是可执行的权限
    所以加入特殊的权限将来会出现在 x 的位置
    suid	u+s		4
        sudo chmod u+s 文件名
        如果文件本身的user权限中有x权限,那么u+s之后,s是小写的
        如果文件本身的user权限中没有x权限,那么u+s之后,S是大写的
        一般来说只会在可执行命令中加入u+s的权限
        特性 : 拥有suid权限的命令,任何用户在使用这个命令时,
            都会拥有这个命令的所有者的权限来执行
        (简单来说就是在执行命令时,以命令所有者的权限来运行)
    sgid	g+s		2
        sudo chmod g+s 文件名
        如果文件本身的group权限中有x权限,那么g+s之后,s是小写的
        如果文件本身的group权限中没有x权限,那么g+s之后,S是大写的
        一般来说只会在目录文件中加入g+s的权限
        特性 : 拥有sgid权限的目录,任何用户在该目录下创建的文件
            都会继承该目录的属组
        (无论是普通用户还是超级用户,在g+s的目录下创建文件都会修改属组)
    sticky	o+t		1
        sudo chmod o+t 文件名
        如果文件本身的other权限中有x权限,那么o+t之后,t是小写的
        如果文件本身的other权限中没有x权限,那么o+t之后,T是大写的
        一般来说只会在目录文件中加入o+t的权限
        特性 : 拥有sticky权限的目录,当其他用户想要删除文件时,
            只能删除自己创建的文件
        (当超级用户进入到o+t权限的目录中,可以删除所有文件)
    没有特殊权限		0

三.削减权限umask

    当创建文件时,本身文件的权限过大,需要通过umask的值削减文件的权限
    在终端中录入 umask 可以查看当前umask值
    也可以修改umask数值 : umask 0022
    修改的umask的数值越大,创建的文件的权限越小
    在Linux系统中,默认创建的普通文件的权限是0666,
        0666 - 0002 = 0664(rw-rw-r--)
    在Linux系统中,默认创建的目录文件的权限是0777,
        0777 - 0002 = 0775(rwxrwxr-x)

四.进程的简介

    其实用户在操作系统中做的任何的操作都需要有进程的支持
    进程 : 其实是一个程序运行时的一个过程
    一个进程可以创建出多个子进程的
    主进程 : 父进程
    创建出的进程 : 子进程
    可以调用函数 : fork()
    僵尸进程 : 当父进程创建出子进程,子进程去工作,当子进程做完任务之后
            父进程没有给子进程收尸,子进程会变成僵尸进程
    孤儿进程 : 当父进程创建出子进程,子进程去工作,如果父进程提前结束了
            没有人管理子进程,子进程会变成孤儿进程

程序运行----->主进程----->父进程-->等待子进程结束-收尸->程序结束
                    |						|
                    fork()					|
                    |						|
                    子进程---->做工作----->结束(仆街)

    ps		//可以查看进程
    ps -aux	//查看所有进程信息
    当系统启动之后首先会创建一个进程PID为1叫做初始进程(init)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
        USER		运行该进程的用户
        PID			进程ID号
        %CPU		CPU的占用百分比
        %MEM		内存的占用百分比
        VSZ			占用虚拟内存
        RSS			占用实际内存
        TTY			进程运行的终端
        STAT		进程的状态
            R		运行状态
            s		进程组,下面会有子进程
            S		睡眠状态(可以中断)
            D		睡眠状态(不可中断)
            Z		僵尸状态
            X		死掉的进程
            ...
        START		启动的时间
        TIME		占用CPU的时间
        COMMAND		进程名
    
============================================
./a.out

int max(int a, int b)
{
    return a > b ? a : b;
}

int add(int a, int b)
{
    return a + b;
}

int main(void)
{
    add(13, 7);
    max(13, 7);

    return 0;
}

    return 0;	函数正常运行
    > 0			函数有异常
    < 0			函数有错误

一个进程会有虚拟内存4Gb,实际上只占用了实际内存的4Kb
----------------------------
面试题
    1.C语言的程序会把内存分为几个区?
        5大区
        (栈区 堆区 常量区 全局区 代码区)
                    char *p = "Hello World!";
                    static
----------------------------

    1Gb		Kernel(内核)
    ----------------------
    3Gb		环境变量/命令行参数
            栈区(从上往下分配)
                空白空间
            堆区(从下往上分配)
            常量区(.RO<只读>)
            全局区(.bss .data)
            代码区(.text)
================================