linux运维工程师都是干什么啊 有发展吗

linux运维工程师都是干什么啊 有发展吗,第1张

昨天,在知乎上有小伙伴向小青咨询关于:“Linux运维工程师的发展方向?赚高薪的运维人员都具备哪些常用技术?”的问题。今天,小编就简单聊聊这些两个话题,希望能够帮助到迷茫的你!

一起康康Linux运维工程师的发展方向:

1、运维工程师

运维工程师平均薪资146K/月。

我认为运维工程师是基础的运维岗位,不负责写代码,只负责基础的系统维护,包括应用环境搭建,基础的业务运营过程中的故障排查;这个职位大部分是面向刚毕业的大学生或经验尚浅的工作者。

2、运维开发工程师

运维开发工程师平均薪资240K/月。

这个岗位是建立在纯运维工程师之上的,除了具备基础的排除故障能力,还应当对业务和各种应用服务有深刻的理解,了解业务问题和通点,能够在基础的维护工作之外,增加优化系统的思路;不仅应当具备基础的Linux知识之外,还应当具备一定的开发能力,比如shell脚本开发能力,或perl、python、java、go等一种高级语言,能够针对现有的系统弊端,开发一些脚本程序或工具,增加系统的自动化处理和恢复能力;这个岗位的发展目标是系统架构师。

3、运维平台研发工程师/架构师

运维架构师平均薪资344k/月。

负责研发适合公司业务系统的通用基础平台或组件,对研发能力有较高要求,需要具备产品线的运维经验和丰富的系统架构知识;例如现在热门的自动化运维方向,就需要开发适合自己公司需要的自动化平台,比如自动安装平台,自动应用服务维护平台,自动更新配置平台等。这个岗位和系统架构师没有明显的界限,通常好的运维平台研发工程师也能适应架构师的工作。

下面将运维中需求学习或能让你运维作业加分的技能稍做介绍。(这两个技能,我认为真真真真挺好的)

1、编程开发

关于Linux平台下的运维人员,仍是引荐Shell加Perl的组合,究竟那么多年过来了。这个组合一直在为各大网站的工程师们稳定的作业着。另外,Python也是一个十分值得引荐利器。这种言语具有十分简捷而明晰的语法特色,适合完结各种高层任务,简直能够在所有的 *** 作体系中运转。现在,依据这种言语的相关技能正在飞速的开展,用户数量急剧扩展,相关的资源十分多。

现阶段,掌握一门开发语言已经成为高级运维工程师的必备技能。运维学开发,Python势必是你不二之选。PYTHON被称为胶水语言, 能满足绝大部分自动化运维的需求,又能做后端 C/S 架构,又能用 WEB 框架快速开发出高大上的 WEB 界面,还能做机器学习。

2、网络设备

了解网络根底知识、网络通信协议和常见的网络设备是有必要的。建议把思科和华为这两家的产品摸熟。

假如是在稍微大一点的公司作业或者哥们你就是在IDC混,那还得学会对企业局域网和广域网进行规划、完成和查看排错,VLAN是有必要的。其他就是视频、语音之类的网络效劳了。根底的都搞理解了之后还想进步自己朋友能够去学一下CCNP或者H3CNE的课程。

以上就是小编今天为大家分享的关于“Linux运维工程师的发展方向?赚高薪的运维人员都具备哪些常用技术?”的文章。同时,小青还想说一句:“各个方向上的工程师发展到一定阶段后,没有明确的界限,需要同时具备较强的运维、架构、编程、算法等能力,是一个要求很高的职业。但职业发展道路,必须循序渐进,一个好的运维工程师,肯定应当具备较强的开发能力,希望大家在发展过程中,具备了基础的Linux知识之后,一定要学习一些开发技能,比如必备的shell编程能力,另外还要掌握一门高级语言,比如热门的python语言,是一个不错的选择。”

免责声明:部分及文字信息部分由小编整理自网络,旨在分享提供阅读,如有侵权请联系我们进行删除。

目前主流和常用的Linux版本主要有:
1、Redhat 版本55和60最新;培训、学习、应用、知名度最高的Linux发行版本,对硬件兼容性来说也比较不错,版本更新很快,对新硬件和新技术支持较好。
2、Debian 版本50和60最新;社区版的Linux来说是较好的,文档和资料较多,尤其是英文的。但在国内的占有率有一定的局限性。关键是上手难,但在所有的Linux发行版本中,这个版本应该说是最自由的。
3、SuSe 版本11和114最新;最华丽的Linux发行版,很多人都这样说,X windows和程序应用方面做得确实不错。尤其与Microsoft的合作关系,应该是在所有的Linux发行版本中最亲密的。
4、Ubuntu 版本9和10最新;最近几年出来的,主要指Server版本,强项就是其desktop版,应用实在太广泛了。
5、Centos 版本54和60最新;这个发行版主要是Redhat企业版的社区版,基本上跟redhat是兼容的,相对来说局限性教少。很多人都喜欢使用。

在学习之前一直对驱动开发非常的陌生,感觉有点神秘。不知道驱动开发和普通的程序开发究竟有什么不同;它的基本框架又是什么样的;他的开发环境有什么特殊的地方;以及怎么写编写一个简单的字符设备驱动前编译加载,下面我就对这些问题一个一个的介绍。

一、驱动的基本框架

1.  那么究竟什么是驱动程序,它有什么用呢:

l     驱动是硬件设备与应用程序之间的一个中间软件层

l 它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节

l     用户通过一组与具体设备无关的标准化的调用来完成相应的 *** 作

l 驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定 *** 作上

l     驱动程序是内核的一部分,可以使用中断、DMA等 *** 作

l     驱动程序在用户态和内核态之间传递数据

2.  Linux驱动的基本框架

3.  Linux下设备驱动程序的一般可以分为以下三类

1)        字符设备

a)         所有能够象字节流一样访问的设备都通过字符设备来实现

b)        它们被映射为文件系统中的节点,通常在/dev/目录下面

c)        一般要包含open read write close等系统调用的实现

2)        块设备

d)        通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。

e)         块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同

f)         它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。

3)        网络接口设备

g)        通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。

h)        它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。

二、怎么搭建一个驱动的开发环境

因为驱动是要编译进内核,在启动内核时就会驱动此硬件设备;或者编译生成一个o文件, 当应用程序需要时再动态加载进内核空间运行。因此编译任何一个驱动程序都要链接到内核的源码树。所以搭建环境的第一步当然是建内核源码树

1       怎么建内核源码树

a) 首先看你的系统有没有源码树,在你的/lib/ modules目录下会有内核信息,比如我当前的系统里有两个版本:

#ls /lib/ modules

2615-rc7  2621-13194fc7

查看其源码位置:

## ll /lib/modules/2615-rc7/build

lrwxrwxrwx 1 root root 27 2008-04-28 19:19 /lib/modules/2615-rc7/build -> /root/xkli/linux-2615-rc7

发现build是一个链接文件,其所对应的目录就是源码树的目录。但现在这里目标目录已经是无效的了。所以得自己重新下载

b)下载并编译源码树

有很多网站上可以下载,但官方网址是:

>

下载完后当然就是解压编译了

# tar –xzvf linux-261654targz

#cd linux-261654

## make menuconfig (配置内核各选项,如果没有配置就无法下一步编译,这里可以不要改任何东西)

#make

如果编译没有出错。那么恭喜你。你的开发环境已经搭建好了

三、了解驱动的基本知识

1         设备号

1)        什么是设备号呢?我们进系统根据现有的设备来讲解就清楚了:

#ls -l /dev/

crwxrwxrwx 1 root root     1,   3 2009-05-11 16:36 null

crw------- 1 root root     4,   0 2009-05-11 16:35 systty

crw-rw-rw- 1 root tty      5,   0 2009-05-11 16:36 tty

crw-rw---- 1 root tty      4,   0 2009-05-11 16:35 tty0

在日期前面的两个数(如第一列就是1,3)就是表示的设备号,第一个是主设备号,第二个是从设备号

2)        设备号有什么用呢?

l 传统上, 主编号标识设备相连的驱动 例如, /dev/null 和 /dev/zero 都由驱动 1 来管理, 而虚拟控制台和串口终端都由驱动 4 管理

l 次编号被内核用来决定引用哪个设备 依据你的驱动是如何编写的自己区别

3)        设备号结构类型以及申请方式

l   在内核中, dev_t 类型(在 中定义)用来持有设备编号, 对于 260 内核, dev_t 是 32 位的量, 12 位用作主编号, 20 位用作次编号

l   能获得一个 dev_t 的主或者次编号方式:

MAJOR(dev_t dev); //主要

MINOR(dev_t dev);//次要

l   但是如果你有主次编号, 需要将其转换为一个 dev_t, 使用: MKDEV(int major, int minor);

4)        怎么在程序中分配和释放设备号

在建立一个字符驱动时需要做的第一件事是获取一个或多个设备编号来使用 可以达到此功能的函数有两个:

l       一个是你自己事先知道设备号的

register_chrdev_region, 在 中声明:

int register_chrdev_region(dev_t first, unsigned int count, char name);

first 是你要分配的起始设备编号 first 的次编号部分常常是 0,count 是你请求的连续设备编号的总数 name 是应当连接到这个编号范围的设备的名子; 它会出现在 /proc/devices 和 sysfs 中

l       第二个是动态动态分配设备编号

int alloc_chrdev_region(dev_t dev, unsigned int firstminor, unsigned int count, char name);

使用这个函数, dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数 fisetminor 应当是请求的第一个要用的次编号; 它常常是 0 count 和 name 参数如同给 request_chrdev_region 的一样

5)        设备编号的释放使用

不管你是采用哪些方式分配的设备号。使用之后肯定是要释放的,其方式如下:

void unregister_chrdev_region(dev_t first, unsigned int count);

6)

2         驱动程序的二个最重要数据结构

1)         file_operation

倒如字符设备scull的一般定义如下:
struct file_operations scull_fops = {
owner =  THIS_MODULE, 
 llseek =  scull_llseek, 
 read =  scull_read, 
 write =  scull_write, 
 ioctl =  scull_ioctl, 
 open =  scull_open, 
 release =  scull_release,  
};

file_operation也称为设备驱动程序接口

定义在 , 是一个函数指针的集合 每个打开文件(内部用一个 file 结构来代表)与它自身的函数集合相关连( 通过包含一个称为 f_op 的成员, 它指向一个 file_operations 结构) 这些 *** 作大部分负责实现系统调用, 因此, 命名为 open, read, 等等

2)         File

定义位于include/fsh

struct file结构与驱动相关的成员

l         mode_t f_mode      标识文件的读写权限

l         loff_t f_pos           当前读写位置

l         unsigned int_f_flag 文件标志,主要进行阻塞/非阻塞型 *** 作时检查

l         struct file_operation f_op  文件 *** 作的结构指针

l         void private_data 驱动程序一般将它指向已经分配的数据

l         struct dentry f_dentry  文件对应的目录项结构

3         字符设备注册

1)        内核在内部使用类型 struct cdev 的结构来代表字符设备 在内核调用你的设备 *** 作前, 必须编写分配并注册一个或几个这些结构 有 2 种方法来分配和初始化一个这些结构

l             如果你想在运行时获得一个独立的 cdev 结构,可以这样使用:

struct cdev my_cdev = cdev_alloc();

my_cdev->ops = &my_fops;

l             如果想将 cdev 结构嵌入一个你自己的设备特定的结构; 你应当初始化你已经分配的结构, 使用:

void cdev_init(struct cdev cdev, struct file_operations fops);

2)        一旦 cdev 结构建立, 最后的步骤是把它告诉内核, 调用:

int cdev_add(struct cdev dev, dev_t num, unsigned int count);

说明:dev 是 cdev 结构, num 是这个设备响应的第一个设备号, count 是应当关联到设备的设备号的数目 常常 count 是 1, 但是有多个设备号对应于一个特定的设备的情形

3)        为从系统去除一个字符设备, 调用:

void cdev_del(struct cdev dev);

4         open 和 release

计算机专业类包括计算机科学与技术、软件工程、网络工程、信息安全等七八个专业。
计算机专业学习的课程主要有大数据技术导论、数据采集与处理实践(Python)、Web前/后端开发、统计与数据分析、机器学习、高级数据库系统、数据可视化、云计算技术、人工智能、自然语言处理、
媒体大数据案例分析、网络空间安全、计算机网络、数据结构、软件工程、 *** 作系统等,以及大数据方向系列实验,并完成程序设计、数据分析、机器学习、数据可视化、大数据综合应用实践、专业实训和毕业设计等多种实践环节。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12904118.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-28
下一篇2025-08-28

发表评论

登录后才能评论

评论列表(0条)

    保存