linux文件,目录结构,权限相关知识

liunx目录结构

linux文件目录权限

我们可以通过ls -l来查看当前目录下的文件和目录权限情况

请输入图片地址

linux文件权限以分组划分,组下面有用户,用户和组对应关系是多对多

第一个字段 从左到右一串字母分别代表

第二个字段 硬链接数目 第三个字段 所属用户 第四个字段 所属组 第五个字段 文件大小 第六个字段 文件修改日期 第五个字段 文件名

更改文件权限

xyz:代表owner,group,ohters的权限, 数字赋权:权限rwx对应数字权限分别是4,2,1 例: chmod 777 testfile

常用文件操作(增删改)指令

查看文件

文件编辑

文件对比,识别,查找,创建,统计

文件备份,恢复

程序运行

磁盘相关

软件包安装

wget :下载工具

下载的tar,zip包要配置path路径才能使用

CentOS 安装rpm安装包:rpm -i xxx.rpm rpm -qa |grep 查看是否存在安装 rpm -e:删除软件包 yum check-update 查看可更新软件列表 yum list 检索包含name的列表 yum install 安装指定软件命令 yum update 更新指定软件 yum remove 删除软件包命令

下载服务端配置文件:/etc/yum.repos.d/CentOS-Base.repo

Ubuntu deb安装包:dpkg -i xxx.deb dpkg -l:查看安装软件列表 dpkg-r:删除软件包 apt-get install 安装指定软件命令

下载服务端配置文件:/etc/apt/sources.list

网络相关

防火墙设置

停止防火墙 systemctl stop firewalld

锁定防火墙 systemctl mask firewalld

安装iptables-services: yum install iptables-services

设置开机启动 systemctl enable iptables

重启 systemctl restart iptables

/etc/sysconfig/iptables添加端口开放设置 -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT

保存设置 service iptables save

系统相关

系统信息查看

用户信息查看

小心使用

linux插件

lrzsz是一款在linux里可代替ftp上传和下载的程序: yum install lrzsz -y

配置相关

进程

创建进程的系统调用叫fork,父进程创建子进程。对应fork调用返回值,如果当前进程是子进程,返回0,父进程返回子进程号。通过if语句判断,若是子进程调用execve系统调用来执行另一个程序。父进程通过waitpid系统调用,查看子进程运行情况

进程内存空间

brk和mmap 分配堆内内存

程序运行起来,会在/proc下面有对应进程号,一系列文件

sigaction系统调用,注册一个信号处理函数

msgget创建一个新队列,msgsnd将消息发送到消息队列,接收方使用msgrcv从队列中取消息;通信信息比较大时,使用shmget创建共享内存块方式。通过shmat将共享内存映射到自己内存空间。当共享内存产生竞争时,通过sem_wait获取信号量,sem_post释放信号

Glibc:提供丰富的API,除了字符串处理,数学运算等用户态服务,封装了操作系统提供系统服务。

线程的数据

Mutex锁:pthread_mutex_init初始化mutex锁,pthread_mutex_lock获取锁,pthread_mutex_unlock释放锁

进程数据结构

Linux内核通过一个链表将所有task_struct串起来

task_struct

任务ID

pid_t pid; // process id
pid_t tgid;// thread group ID
struct task_struct *group_leader; 

信号处理

定义哪些信号阻塞不处理,哪些信号等待处理,哪些通过信号处理函数进行处理

任务状态

volatile long state;    // -1 unrunnable, 0 runnable, >0 stopped
int exit_state;
unsigned int flags;

进程调度

调度实体,优先级,调度器类,调度策略,可使用CPU,是否运行队列

实时进程比普通进程优先级高

调度实体

struct sched_entity se;
struct sched_rt_entity rt;
struct sched_dl_entity dl;

进程根据自己是实时的,还是普通的类型,通过调度实体变量将自己挂载某数据结构里。如:普通进程,通过sched_entity(包含了vruntime和权重load_weight等参数)挂载红黑树。

每个CPU都有自己的 struct rq 结构,包括一个实时进程队列rt_rq和一个CFS运行队列**cfs_rq,CFS的队列是一棵红黑树,树的每一个节点都是一个sched_entity,每个sched_entity都属于一个task_struct,task_struct里面有指针指向这个进程属于哪个调度类

主动调度的过程,也即一个运行中的进程主动调用__schedule让出CPU。在__schedule里面会做两件事情,第一是选取下一个进程,第二是进行上下文切换。而上下文切换又分用户态进程空间的切换和内核态的切换。

抢占式调度和主动式调度

运行统计信息

utime,stime,nvcsw,nivcsw,start_time,real_start_time

进程亲缘关系

parent,children,sibling(当前进程插入到兄弟链表中)

进程权限

Objective和Subjective:谁能操纵我,我能操纵谁

内存管理

struct mm_struct   *mm;
struct mm_struct   *active_mm;

文件与文件系统

/* Filesystem information: */
struct fs_struct                *fs;
/* Open file information: */
struct files_struct             *files;

内核栈和进程运行紧密相关。

fork创建进程,

先copy_process,复制结构。

copy_creds权限赋值

copy_process重新设置进程运行的统计量

然后copy_process开始设置调度相关的变量

唤醒新进程

线程的创建

用户态创建线程

Glibc库的一个函数 pthread_create进程线程创建

内核态创建任务

内存管理

分段机制、分页机制以及从虚拟地址到物理地址的映射方式

物理内存组织方式

DMA:CPU只需向DMA控制器下达指令,让DMA控制器来处理外设和内存之间数据的传送,数据传送完毕再把信息反馈给CPU