//linux体系
//分为 内存空间 用户空间
//对整体进行层次划分 4层
// 硬件层 内核层 系统调用层 用户空间层
//内核层 (类比前台) 进程管理 内存管理 设备驱动等(传输命令)
//Linux 目录结构
//只有一个根目录的倒状树结构
// linux 是文件系统的操作系统 所有的内容均以文件的形式出现,所以目录是目录文件
// 指令:
// 输入形式 指令 选项 参数
// cd .. 指令加参数 ..(表示上级文件)
// ls+ -a 可以显示当前目录下的所有的目录和文件包括隐藏文件 (-a是选项)
//目录说明
// /bin 存放常用命令(即二进制可执行程序)
// /etc 存放系统配置文件
// /home 所有普通用户的家目录
// /root 管理员用户的家目录 / 1oot
// /usr 存放系统应用程序及文档 / usr
// /proc 虚拟文件系统目录,以进程为单位存储内存的映射
// /dev 存放设备文件
// /mnt 临时挂载点
// /lib存放库文件 / lib
// /boot 系统内核及启动有关的文件
// /tmp 存放各种临时文件,是所有用户均可访问的地点
// /var 存放系统运行中常改变的文件,如系统日志
//绝对路径 cd /home/bai/2414
//相对路径 cd home cd bai cd 2414
//文件类型
//普通文件 '-'
//目录文件 'd'
//管道文件 'p'
//链接文件 'l'
//设备文件 (块文件'b' 字符文件 '')
//套接字文件 's'
//输入ls -l时会出现多行类似情况
//-rwxrwxr-x 1 zyg zyg 16968 11月 5 02:26 1(命令行)
//第一个字符表示该文件的类型 上述命令行的文件类型为普通文件
//从第二个字符开始表示该文件的权限信息 rwx rwx rwx(满权限)
//分为三组 创建者权限 组员权限 其他人权限 r 可读 w 可写 x 可执行 -表示该位置无权限
//rwx 111 111 111 101 775 满权限 777
//1 如果是文件 该数字表示包含几个链接文件 如果是目录 表示有几个子目录
//zyg zyg 分别表示创建者名称和当前文件在哪个组中
//16968 当前文件的大小
//11月 5 02:26 创建文件的时间
//1 文件名称
//命令
//cd 跳转 cd+.. 表示返回上一层目录(可以返回到根目录)
//cd 返回当前的用户目录
//ls 显示当前目录下的文件和目录
//~可以代指当前的用户目录 表示当前处于用户目录下
// 输入cd可以直接跳到用户目录下
//sudo su 该命令为临时进入管理员权限
// //home==/home;
//ls -l 可以显示当前文件目录下的详细信息
//当光标没有挑到正常输入区 可以输入ctrl+c强制提出
// ctrl+shift+c 复制 shift + v 黏贴
//mkdir+目录名 可以创建目录名
//mkdir -p 该选项可以连续的在目录中创建目录 必须加参数 such 4/5/6/7
//方向键可以改变你光标的位置 (翻找历史指令)
//mkdir -m+权限(8进制)目录名
//rmdir 删除空目录
//rm -r/-f 文件名 删除有内容的目录 (可以写成rm -rf:强制删除文件且不询问)
//rm -rf * (删库跑路文件)
//pwd 显示当前以绝对路径的方式显示当前路径
//man +指令 可以打开系统自带的指令帮助手册来查看指令的用法
//ls -r 按照文件名称逆序排列显示
// -R 递归的方式,将子目录中的所有文件显示
//clear 清屏
//touch 文件名(可以多个) 创建普通文件 若文件已经存在 则无法创建(创建的文件权限默认664)
//vi 文件名 创建并进入文件 若文件已经存在 则直接进去;
//使用vi编辑器的方式
//实现使用指令vi+文件名的方式进入 然后处于第一个模式 命令模式 该模式无法输入文本
// 按下a,i,o,A,I,O可以进入插入模式
// a,在光标之后插入内容 i,在光标之前插入内容 o,在当前行的下一行插入内容
// A在当前行的行尾插入内容 I ,在当前行的行首插入内容 O,在当前行的上一行插入内容
// 进入了编辑模式后 想回命令模式 按下ESC即可,如果想保存内容并提出文件,则按下shift+: 进入低行命令模式
// 在低行命令模式下 输入wq即可保存并提出 w-保存 q-提出 q!-强制提出
// 在命令模式下 快说指令 yy 复制光标所在行 p-黏贴 nyy(表示数字) 表示复制n行
// np 表示粘贴n次 dd 删除光标所在行 ndd 删除n行 u 撤回 ctrl+r 恢复撤回操作
// 低行命令模式 set number 设置行号 set nonumber 取消行号
// 当编辑文本时 没有正确的保存并退出 会产生交换文件(后缀是.swp) 直接在编译器中删掉即可 eg, rm -rf .test.swp
// cp 拷贝文件 cp 原文件 拷贝文件 将原文件的内存拷贝到拷贝文件中 若拷贝文件没有就创建一个
// cp -r 目录名1 目录名2 将目录名1中的内容拷贝到目录2中 目录2不存在则创建 如果存在 将目录1的内容拷贝到目录2中
//mv +文件名 +目录名 将文件移动到对应的目录中
// mv +文件1+文件2 若文件1存在 将文件1中的内容放在文件2中 并且文件1删除 若文件2不存在 则创建一个并且将文件1中的内容复制进去,并·删除文件1 (也叫文件重命名)
// mv +目录1 +目录2 若目录2中有内容,则移动失败,如果目录2中没内容 则把目录1放到目录2中
// find + 路径 + -name + 文件名/目录名 查找逻辑下的名称为文件名/目录名的文件或目录
// grep +"字符串"+文件名 可以筛选出文件中对应的字符串的那一行
//grep + 字符+ 关键字 可以筛选出含有字符的名字带有关键字的文件或目录
//|:管道 可以将俩个指令进行链接,将前一个指令的输出结果给到后一个指令的输出前提
// cat +文件名 可以将文件的内容打印出来
// cat +文件名+文件名2 按文件名出现的先后顺序 输出文件的内容
// cat +文件名1>文件名2 将文件1的内容覆盖到文件2中(等价于cp)
//cat+文件1>>文件2 将文件1的内容追加到文件2中
//cat > 文件名 将屏幕上输入的内容覆盖到文件中,以crtl C结束
//cat >> 文件名 将屏幕上输入的内容追加到文件中,以crtl C结束
//wc 统计 单词个数(+ -w)字符个数(+ -c) 行数(+ -l)
//sudo su 暂时将权限切换成管理员权限
//通配符 ?:代表任意字符但仅仅只有一位
//* 代表任意字符但代表多位
//[abc] 表示从字符abc任取一个只代表一位
//[a-c] 表示从字符a到c任取一个
//[^abc] 表示除了abc外任取一个
//删除以a开头 第二个字符不为bcd的指令
//rm [a][^bcd]*
//shutdown -h now 立刻关机 halt 关机 init 0 关机
//shutdown -r now 立刻重启 reboot 重启 init 6 重启
//runlevel 查看系统运行级别 可以用int动态切换0^6共7个级别
//0 关机 1 单用户模式 2多用户无网络服务 3完全的多用户 文本结界
//tail + -n 文件名 表示查看该文件后N行的内容
//tar -cvf +包名.tar+打包的文件名 将文件打包到包中 文件不压缩
//tar -tvf +包名.tar 查看打包内容
//tar -xvf +包名.tar-C +目标地址 将包中内容解包到目标地址
//tar -rvf +包名.tar+文件名 可以将文件追加到包中
//tar -zcvf+包名.tar+打包的文件名 将文件打包到包中 压缩
//tar -zxvf +包名.tar-C +目标地址 将包中内容解包到目标地址
// ps 打印当前终端中的进程信息
// PID 表示进程号 TTY 表示终端号 CMD表示进程名称
// bash 命令行解释器
//ps -e 默认显示与当前系统有关的进程信息
//ps -f (UID用户ID) 打印当前终端中进程的详细信息
//ps -ef 打印当前系统中进程的详细信息
//执行文件的代码 gcc 文件名+.c -o 文件名2
// ./文件名2
//操作系统 uabntu 来管理进程
//生成进程 给进程分配pid号 int 0~上限
//进程控制块 struct mask_struct;
// {
// name="ps""bash"
// pid=341
// ppid
// }
//进程号一定连续 如果俩个进程号不连续 那么之间差的进程号被释放了
//父进程和子进程是相对的关系,并不是绝对的
//sleep + 数子 表示休眠多少秒
//kill+进程号 杀死进程(无论前台还是后台) 但是ctrl+z之后 进程处于暂停状态 无法杀死 必须加上-9(强制杀死);
//ps -ef | grep sleep 查看sleep进程的信息
//ctrl+C 结束在终端中在前台运行的进程
//前台和后台
//sleep 300 运行在前台
//sleeo 300& 运行在后台
//jobs 查看后台的任务
//ctrl+z 可以暂停进程的运行
//bg fg 可以切换前后台
//bg %暂停进程时的序号(任务号) 切换后台
//fg %暂停进程时的序号(任务号)切换前台
//放置一个长时间运行的指令,查看他的状态并将其切换到前台运行
//拓展 while true;do date;sleep 2; done & shell命令(之中没有{},用do(开头) done(结束))
//运行在后台的进程在命令行输入指令时 无论后台的任务显示如何 只有命令行未提交,都可以算作正在输入指令
//总线分为 地址总线 数据总线 控制总线
//内存和硬盘的关联(考点)
//写一个main.c文件保存在硬盘中 运行可执行文件时,是装载并运行在内存上
//只有运行某个程序的时候,对应的执行程序才会被装载内存上
//汇编语言 低级编程语言(直接对应机器语言(二进制指令)),但是使用了一些助记符来帮助人类记忆(考点)
//特点
//1 与硬件强关联 不同CPU架构下(X86,ARM),汇编指令集差异大
//2 可以直接操作硬件,直接访问寄存器,内存地址,cpu标志位
//机器指令 汇编助记符 高级语言
//0101 add a+b;
//gcc编译器
//Linux系统上可执行程序的格式为ELF
//Windows系统上可执行程序的格式为PE
//分布编译程序(重点)
//1 预编译阶段
// gcc -E main.c -o main.i .i 预处理文件
//2 编译阶段
//gcc -S main.i -o main.s .s 汇编文件
//3 汇编阶段
//gcc -c mian.s -o main.o .o 二进制文件
//4 链接阶段
//gcc main.o -o main .exe 可执行文件(windows下) 无固定后缀 (Linux下)
//多文件的编译过程(练习)
//多文件编译核心,将对应文件的.o文件集中编译即可生成可执行文件
//makefile 用于自动化构建过程的配置文件 用于定义如何编译代码,连接程序,清理中间文件的操作
//用于多文件,大模块的大型项目编译
//all : 生成文件名
//
//main : add.o max.o main.o
// gcc -o main add.o max.o main.o
//
//add.o : add.c
// gcc -c add.c
//
//max.o : max.c
// gcc -c max.c
//
//main.o : main.c
// gcc -c main.c
//
//clean(没有限制,写啥都行):
// rm -rf * .o
//用make可以运行makefile文件 生成一个最终的使用文件
//如何想要删除多余文件 输入 make clean即可