先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
正文
图片来自网络,侵联删
Linux进程基本操作
1.进程基本概念
在Linux中进程信息被保存在task_struct(PCB)
2.查看进程的方法
ps
ps aux | greap myproc
ls /proc
3.创建进程
fork():创建一个子进程
#include<iostream>
#include<unistd.h>
using namespace std;
int main()
{
fork();
while(1)
{
printf("hehe\n");
}
return 0;
}
fork之前的代码,被父进程执行,fork之后的代码,父子都可以执行
fork之后,父子进程代码共享
fork之后,父子进行那个先运行不确定,取决于操作系统调度算法
fork函数会有两次返回值,给父进程返回子进程pid,给子进程返回0
6 pid_t id=fork();
7 if(id==0)
8 {
9 while(1)
10 {
11 printf("我是子进程\n");
12 sleep(1);
13 }
14 }
15 else if(id>0)
16 {
17 while(1)
18 {
19 printf("父进程\n");
20 sleep(2);
21 }
22 }
23 else
24 {
25 printf("进程创建失败\n");
26 }
27 return 0
结果:父子进程同时执行
4.进程的状态
进程状态------>数据化-------->进程数据被保存到tack_struct中
进程主要有以下几种状态:
R状态:
可以同时存在多个R状态的进程
R状态的进程不一定是正在运行的,表示随时可以调用该进程
系统中所有处于R状态的进程都会被连接起来形成调度队列(run_queue)
S状态:休眠状态(浅度睡眠)通常用来等待某种事件发生,随时可以被唤醒,也可以被杀掉
//休眠状态
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("I am Running\n");
sleep(10000000);
printf("Ending\n");
return 0;
}
D状态:深度睡眠状态,D状态没有办法模拟,表示该进程不会被杀掉,即便是操作系统,除非重启杀掉,或者主动醒来
T状态:将进程进行暂停
如上图所示,摁下19sigstop即可暂停进程
X状态:死亡进程
Z状态:僵尸状态
进程退出,在操作系统层面,曾经申请的资源,并不是被立即释放,而是要暂存一段事件,供OS(父进程)进行读取,,而父进程没有读取,叫做僵尸状态
为什么要有僵尸进程:
进程创建的目的:完成某种工作
当任务完成的时候,调用方应该指导任务完成得怎么样
(除非不关心)
sjw@iZ2zedu4njy79sqivntvprZ test_9_11]$ cat test.c
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("I am Running\n");
sleep(10000000);
printf("Ending\n");
return 20;
}
[sjw@iZ2zedu4njy79sqivntvprZ test_9_11]$ echo $?//查看进程码,查看最近一次进程退出时得进程码(如返回值return 0等)
//进程退出时,进程信息(退出码)是会被暂时保存起来的,相关信息被保存到task\_struct,此时,该task\_struct相关数据不应该被释放掉 Z
当有进程来读取信息时,task_struct被释放
如何读取信息:进程wait
进程退出的信息(退出码)会被暂时保存起来
保存在task_struct中,如果没有人读取,此时,task_struct相关数据不应该被释放
模拟僵尸状态:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t id=fork();
if(id==0)
{
int count=5;
while(count)
{
printf("I am child, pid:%d, ppid:%d, count:%d\n",getpid(),getppid(),count--);
sleep(1);
}
printf("child exit......\n");
exit(-1);
}
else if(id>0)
{
while(1)
{
printf("I am father,pid:%d, ppid:%d\n",getpid(),getppid());
sleep(1);
}
}
else
{
printf("fork fail\n");
}
return 0;
}
[sjw@iZ2zedu4njy79sqivntvprZ test_9_11]$ make clean
rm -rf *.o myproc
[sjw@iZ2zedu4njy79sqivntvprZ test_9_11]$ make
gcc -c test.c -o test.o
gcc -o myproc test.o
[sjw@iZ2zedu4njy79sqivntvprZ test_9_11]$ ./myproc
I am father,pid:9259, ppid:308
I am child, pid:9260, ppid:9259, count:5
I am father,pid:9259, ppid:308
I am child, pid:9260, ppid:9259, count:4
I am father,pid:9259, ppid:308
I am child, pid:9260, ppid:9259, count:3
I am father,pid:9259, ppid:308
I am child, pid:9260, ppid:9259, count:2
I am father,pid:9259, ppid:308
I am child, pid:9260, ppid:9259, count:1
I am father,pid:9259, ppid:308
child exit......
I am father,pid:9259, ppid:308
I am father,pid:9259, ppid:308
I am father,pid:9259, ppid:308
I am father,pid:9259, ppid:308
I am father,pid:9259, ppid:308
^Z
然后在另外一个窗口输入以下监控脚本:
while :; do ps aux | head -1 && ps aux | grep myproc|grep -v grep;echo "#############################"; sleep 1; done
刚开始运行时,二者都是S状态,到子进程运行完毕退出进行时,子进程编程僵尸进程
僵尸进程的危害:
造成内存浪费
造成内存泄漏
孤儿进程
Linux中,进程关系,主要是父子关系,
孤儿进程:父进程退出,子进程还在运行
孤儿进行会立即被系统领养(操作系统:1号进程Init)
监控脚本:
while :; do ps axj | head -1 && ps axj | grep myproc|grep -v grep;echo "#############################"; sleep 1; done
#include<stdio.h>
#include<stdlib.h>
#include<unstd.h>
int main()
{
pid_t id=fork();
if(id==0)
{
while(1)
{
printf("I am child,pid:%d,ppid:%d\n",getpid(),getppid());
sleep(1);
}
}
else if(id>0)
{
int count=5;
while(count)
{
printf("I am father,pid:%d,ppid:%d,count:%d\n",getpid(),getppid(),count--);
}
exit(-1);
}
return 0;
}
查看进程:
ps aux |grep Mytest
进程是能够知道自己当前所处的工作目录的
5.进程的优先级
cpu分配资源的先后顺序,即是进程的优先级,优先级越高说明进程被执行的越早
在Linux下输入:
ps -l
出现如上图所示的结果,有几个内容需要我们关注一下:
UID:代表执行者的身份
PID:当前进程的代号
PPID:父进程的代号
PRI:代表进程的优先级,该数字越低,代表进程的优先级越高,被执行的越早(默认该值为80)
NI:代表进程的nice值
NI与PRI的关系:
PRI用来表示进程的优先级,该值越低,代表进程的优先级越高,被执行的越早,该值默认为80,而NI用来改变进程的优先级,NI的取值范围为-2019,PRI(new)=PRI(old)+NI,也就是说我们通过修改NI的值来改变进程的优先级,那么被修改后的进程优先级PRI的取值范围为6099,60代表优先级最高的,99代表优先级最低(ps:每次修改PRI后再次修改时PRI默认为80,在80的基础上进行修改)
修改进程优先级的方法:
top命令--->输入r--->输入想要修改的进程的pid--->输入NI值--->q保存退出
如上图所示我们将上面的进程NI修改为20,而PRI变为60,即最高优先级
其它概念:
独立性:多个进程独自运行,独自享受各种资源,多个进程之间互不干扰
并行:多个进程在多个CPU上分别,同时进行运行
并发:多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程得以推进,称为并发
6.环境变量
环境变量一般使之操作系统中用来指定运行环境得一些参数
如:编写c/c++代码时,在连接的时候,从来不知道我们所连接的动态静态库在哪里,但是照样链接得动,就是相关环境变量帮助环境变量进行查找
常见环境变量
PATH:指定当前搜索路径
HOME:指定用户的主工作目录(即用户登录到LInux系统中时,默认的目录)
SHELL:当前Shell,它的值通常为/bin/bash
查看环境变量的方法
echo $NAME//NAME:你的环境变量名称
我们执行mpproc时前面必须加./,而执行ls之类的却不用加,就是因为ls进行了环境变量的配置,我们也可以进行配置,使之向ls一样直接执行
sudo cp -f mpproc /usr/bin
//直接将我们的可执行程序mpproc复制到/usr/bin目录下,但是这种方法不推荐,因为以后如果同名的或者该目录下文件过多可能会造成误删
这样我们就可以像ls一样执行mpproc,除了这种方式之外还有一个更推荐的方法
首先我们先删除这次的配置:
sudo rm -rf /usr/bin/mpproc
//注意不要直接把bin目录直接给删了
最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
TO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-mq5EeUYC-1713480256689)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!