Linux系统教学-Lesson01_zhuofai_的博客-程序员宅基地

技术标签: 运维  linux  Linux教学  服务器  

认识Linux

本人长垣烹饪职业技术学院教师,从12月底开始看下学期教学课本,之前虽有相关经验,但水平有限难免存在疏漏与不妥之处,欢迎各位同学批评指正。

概述

认识Linux首先要解决几个问题

  1. Linux历史&&应用领域
  2. Linux的就业方向
  3. Linux的优势
  4. Linux学习的几个阶段

Linux历史&&应用领域

20世纪80年代,计算机硬件的性能不断提高,PC的市场不断扩大,当时可供计算机选用的操作系统主要有Unix、DOS和macOS这几种。Unix价格昂贵,不能运行于PC;DOS显得简陋,且源代码被软件厂商严格保密;MacOS是一种专门用于苹果计算机的操作系统。此时,计算机科学领域迫切需要一个更加完善、强大、廉价和完全开放的操作系统。由于供教学使用的典型操作系统很少,因此当时在荷兰当教授的美国人AndrewS.Tanenbaum编写了一个操作系统,名为MINIX,为了向学生讲述操作系统内部工作原理。MINIX虽然很好,但只是一个用于教学目的的简单操作系统,而不是一个强有力的实用操作系统,然而最大的好处就是公开源代码。全世界学计算机的学生都通过钻研MINIX源代码来了解电脑里运行的MINIX操作系统,芬兰赫尔辛基大学大学二年级的学生Linus
Torvalds就是其中一个,在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0,至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。

Linux的家族先大概有一个了解
不同Linux系统的不同需要大家自己去搜索一下这里就不赘述了

Linux操作系统主要有以下三大应用领域:

  1. Linux作为企业级服务器的应用

Linux系统可以为企业架构WWW服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS服务器、代理服务器、路由器等,不但使企业降低了运营成本,同时还获得了Linux系统带来的高稳定性和高可靠性,且无须考虑商业软件的版权问题。

  1. 嵌入式Linux系统应用领域

由于Linux系统开放源代码,功能强大、可靠、稳定性强、灵活而且具有极大的伸缩性,再加上它广泛支持大量的微处理体系结构、硬件设备、图形支持和通信协议,因此,在嵌入式应用的领域里,从因特网设备(路由器、交换机、防火墙,负载均衡器)到专用的控制系统(自动售货机,手机,PDA,各种家用电器),LINUX操作系统都有很广阔的应用市场。特别是经过这几年的发展,它已经成功地跻身于主流嵌入式开发平台。

  1. 个人桌面Linux应用领域(系统开发)

所谓个人桌面系统,其实就是我们在办公室使用的个人计算机系统,例如:Windows xp、windowsMac等。Linux系统在这方面的支持也已经非常好了,完全可以满足日常的办公及家长需求。
随着Linux在服务器领域的广泛应用,近几年来,该系统已经参透到电信、金融、政府、教育、银行、石油等各个行业,同时各大硬件厂商也相继支持Linux操作系统;同时,大型、超大型互联网企业都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前十的网站使用的几乎都是Linux系统,Linux已经逐步渗透到了各个领域。这一切表明,Linux在服务器市场前景光明。

Linux的就业方向

那么一般说的学Linux是要学什么呢?方向不同,要学习的内容也不同,可以大致分为这么几个方向:

  1. 运维,维护Linux服务器

  2. 应用开发,开发Linux应用程序

  3. 底层开发

运维Linux主要需要学会对服务器的基本部署,监控,配置,管理等等, 你可以认为,这些机器归你管了,7*24小时保障它能正常提供服务(删库跑路就别做了)

底层开发需要了解uboot,文件系统,内核等底层相关内容,主要工作可能涉及文件系统裁剪,驱动开发,内核模块定制(如内存管理,进程调度)等等。底层开发总体来说要求比较高。

应用开发自然是需要学习如何开发在Linux上运行的应用程序,如何定位Linux应用程序问题等等。不光是要有应用开发的能力还要有部署的能力。
Linux的学习方向

Linux的优势(特性&&安全)

主要特性

基本思想
Linux的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现代电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux
2.4版内核已经能够完全支持Intel64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。 优点
1.Linux由众多微内核组成,其源代码完全开源;
2.Linux继承了Unix的特性,具有非常强大的网络功能,其支持所有的因特网协议,包括TCP/IPv4、TCP/IPv6和链路层拓扑程序等,且可以利用Unix的网络特性开发出新的协议栈;
3.Linux系统工具链完整,简单操作就可以配置出合适的开发环境,可以简化开发过程,减少开发中仿真工具的障碍,使系统具有较强的移植性;

安全

安全隐患及加固措施 用户账户以及登录安全
删除多余用户和用户组。Linux是多用户操作系统,存在很多种不一样的角色系统账号,当安装完成操作系统之后,系统会默认为未添加许用户组及用户,若是部分用户或是用户组不需要,应当立即删除它们,否则黑客很有可能利用这些账号,对服务器实施攻击。具体保留哪些账号,可以依据服务器的用途来决定。
关闭不需要的系统服务。操作系统安装完成之后,其会在安装的过程当中,会自主的启动各种类型的服务程序内容,对于长时间运行的服务器而言,其运行的服务程序越多,则系统的安全性就越低。所以,用户或是用户组就需要将一些应用不到的服务程序进行关闭,这对提升系统的安全性能,有着极大的帮助。
密码安全策略。在Linux之下,远程的登录系统具备两种认证的形式:即密钥与密码认证。其中,密钥认证的形式,主要是将公钥储存在远程的服务器之上,私钥存储在本地。当进行系统登陆的时候,再通过本地的私钥,以及远程的服务器公钥,进行配对认证的操作,若是认证的匹配度一致,则用户便能够畅通无阻的登录系统。此类认证的方式,并不会受到暴力破解的威胁。与此同时,只需要确保本地私钥的安全,使其不会被黑客所盗取即可,攻击者便不能够通过此类认证方式登陆到系统中。所以,推荐使用密钥方式进行系统登陆。
有效应用su、sudo命令。su命令的作用的是对用户进行切换。当管理员登录到系统之后,使用su命令切换到超级用户角色来执行一些需要超级权限的命令。但是由于超级用户的权限过大,同时,需要管理人员知道超级用户密码,因此su命令具有很严重的管理风险。
sudo命令允许系统赋予普通用户一些超级权限,并且不需普通用户切换到超级用户。因此,在管理上应当细化权限分配机制,使用sudo命令为每一位管理员服务其特定的管理权限。
远程访问及登陆认证安全
远程登录应用SSH登陆方式。telnet是一类存在安全隐患的登录认证服务,其在网络之上利用明文传输内容,黑客很容易通过截获telnet数据包,获得用户的登陆口令。并且telnet服务程序的安全验证方式存在较大的安全隐患,使其成为黑客攻击的目标。SSH服务则会将数据进行加密传输,能够防止DNS欺骗以及IP欺骗,并且传输的数据是经过压缩,在一定程度上保证了服务器远程连接的安全。
文件系统安全
加固系统重要文件。在Linux系统中,如果黑客取得超级权限,那么他在操作系统里面就不会再有任何的限制地做任何事情。在这种情况下,一个加固的文件系统将会是保护系统安全的最后一道防线。管理员可通过chattr命令锁定系统一些重要文件或目录。
文件权限检查与修改。如果操作系统当中的重要文件的权限设置不合理,则会对操作系统的安全性,产生最为直接的影响。所以,系统的运行维护人员需要及时的察觉到权限配置不合理的文件和目录,并及时修正,以防安全事件发生。
安全设定/tmp、/var/tmp、/dev/shm。在该操作系统当中,其用于存放临时文件的目录,主要有两个,分别为/tmp与/var/tmp。它们有个共同特点,就是所有的用户可读可写和执行,这样就对系统产生了安全隐患。针对这两个目录进行设置,不允许这两个目录下执行应用程序。
系统软件安全
绝大多数的服务器遭受攻击是因为系统软件或者应用程序有重大漏洞。黑客通过这些漏洞,可以轻松地侵入服务器。管理员应定期检查并修复漏洞。最常见的做法是升级软件,将软件保持在最新版本状态。这样就可以在一定程度上降低系统被入侵的可能性。

Linux学习的几个阶段

  1. 基本使用

  2. 开发调试

  3. 系统认识

这三个阶段对知识积累的要求不一样,但总体来说并没有严格的先后之分。

类于windows,当年你学习windows的时候学了什么?

开关机?

安装卸载软件?如安装视频播放器,音乐播放器(为啥要安这玩意?)。

如何打开安装的软件?如打开浏览器上网,打开编辑器写文档

如何存放自己的资料?移动,创建,删除等等

如何使用office 办公软件

……

是不是想想好像也没有特意地去学习?

那么对于学习Linux来说也是类似的,就是学会这些最普通的使用,

如何开关机

如何上网

如何打开命令行

如何使用命令行安装卸载软件

如何编辑文本

如何创建,移动,删除文件

如何查看文件内容,解压缩文件

……

这个阶段最难的就是从图形界面到命令行的转换。

那么第二阶段呢,就需要学会:

如何编写Linux应用程序

如何编译或者构建你的程序

如何运行你的程序

如何定位程序bug

而第三阶段,则是一个需要漫长的学习过程,但都是为开发服务,包括:

理解并践行一切皆文件

ELF文件,Linux主要可执行文件格式

Linux各大机制的基本原理,如进程调度,内存管理,虚拟内存,文件系统等,既然要写Linux应用程序,怎么能不了解它所在平台的主要机制呢?

越是疑难问题,越需要这些最基本的知识。

怎么学? 来到了大家最关心的问题了,同样的,每个人的情况不太一样,这里只给出我的个人建议。

关于第一阶段,你可以先定个小目标,例如一段时间内学会在Linux下进行你的日常活动(玩游戏就算了),例如编写文档,看视频等等。同时建议:

选择主流的发行版,如ubuntu,centos等,遇到问题时比较容易解决

在window下安装虚拟机,这样Linux环境就随你折腾了

在这期间,你可能需要了解

使用apt-get或者yum安装或卸载软件

使用tar,unzip,zip,gz等解压缩命令安装包

了解运行环境,学会如何执行命令

这里的学习你可以通过网上搜索资料或者购买相关书籍进行操练。如果你不想安装虚拟机或者docker,你可以通过一些在线的Linux来体验。

第二阶段也是主要的阶段,这一阶段要学习的东西非常多,多是命令的学习,这里同样可以参考《鸟哥的Linux私房菜》。不过初期阶段建议抱着一个目的去学习,就是如何在Linux写一个完整的程序,为了达到这个目的你需要学习

cd touch cp mv rm ls,find,切换目录,创建,复制,移动,删除,查看,查找等等

vi/vim 编写代码,这里有一个在线练习网站 https://www.openvim.com/s

gcc编译代码,后期可能需要学习makefile,cmake等构建工具

版本管理,git也是当前必备的一个工具了,学习资料推荐pro git或者官方git教程

gdb调试,可以参考《GDB调试指南》

问题定位,除了观察最基本的打印之外,还需要知道,如何查看进程信息(ps),如何查看网络连接信息(ss,netstat),如何强制停止进程(kill
-9)如何查看进程文件打开情况(lsof),如何多种姿势查看文本文件(cat,tail,more,less)等等。

脚本学习,学习Linux,就不得不学习shell脚本了,它在很多时候能毫无抱怨地帮你做事,前提是你会调教。《Linux命令行与shell脚本编程大全》也是调教教程之一。这里也有一些《必备的shell知识》

这个过程涉及到的命令非常多,但是不建议每一个都去细学,首先知道有这么一个命令即可,然后需要的时候能够快速找到用法,如通过man命令查看手册。总之,记住你的目标就是流畅地进行开发调试,而在达成这个目标地过程中,你自己自然会慢慢接触很多东西。

但是有必要说明的是,开发Linux应用程序并不一定要在Linux下编写代码,你可以选择利用samba等工具在windows和linux之间共享文件,然后再在windows下熟悉的工具中或者你认为比较强大合适的工具中编写代码,在Linux下进行编译调试即可。当然你也可以选择Linux下的IDE,或者将vim调教一下也是可以的。

第三阶段要求是比较高的,这个时候你应该学习过操作系统的相关课程(如,《现代操作系统》,《操作系统原理》等),然后你可以通过诸如《Linux内核设计与实现》,《深入Linux内核架构》,《深入理解Linux内核》等书籍进行相关概念学习,也可以通过阅读源码进行深入学习,最终,你需要了解堆和栈,内存管理,进程调度,虚拟内存,文件系统等相关知识。
当然相关命令学习也必不可少,例如readelf,nm,ipcs,iostat,objdump,free,chrt,pmap,uptime,top,pidstat等。
最后,建议实践再实践。

————————————————
版权声明:本文为CSDN博主「守望之名」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hyb612/article/details/101561520

两种安装Linux方式

  1. 采用虚拟机进行安装
  2. 重新装系统或者安装双系统(windows和Linux),比较困难,我找了几个教程,但是都是 差强人意。
  3. 只安装一个系统(Linux学习推荐CentOS8系统安装)个人建议,这样容易创造一个学习的环境,界面更加干净。

虚拟机安装方式

 参照此链接教程[最新超详细 VMware 的下载与安装](https://seriouszyx.com/archives/9/)老师主要采用的是VMware进行教学。

单系统Linux安装教程

参照此链接教程直接在笔记本装入Linux操作系统教程
在笔记本中安装要解决的一个问题就是挂载问题,请直接选择默认分盘。
假如你是单系统安装那就和老师的一样,为了方便后续的使用我推荐几个软件安装。

  1. 单系统安装WPS(自己寻求安装办法,安装教程)
  2. 单系统安装chrome浏览器
  3. 单系统安装CODE(visual studio),shell编程、C语言编程都可以很方便,Linux适配性非常好。

双系统安装教程

参照此链接教程安装Linux与Windows双系统教程
不推荐。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhuofai_/article/details/121961118

智能推荐

预备篇:一.元器件选型及飞控电路设计_mpu6500-程序员宅基地

[深入浅出多旋翼飞控开发]预备篇][一][元器件选型及飞控电路设计]作者:BlueSkyQQ : 352707983Github因论坛关闭,迁移该文章至博客。要让飞控程序跑起来,首先我们得要有一个硬件实体,也就是我们的飞控板。说实话,飞控电路可以很简单,单纯由几个简单的元器件组成,即使是刚学会画PCB的大学生,也能像模像样地设计一款飞控出来。接下来的这个飞控板,暂且命名为天穹V3,也..._mpu6500

JAVA对字符串进行压缩编码_gzipinputstream 编码-程序员宅基地

package com.fei;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;import java.util.zip.GZIPInputStream;import java.util.zip.GZI_gzipinputstream 编码

TCP和UDP报文分片的区别-程序员宅基地

搞了三年网络,今天才知道这个细节,汗,总结下:MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层进完成的。

RNA-seq常用命令(无参)-程序员宅基地

0.前期准备先在工作目录下创建以下几个目录:01.raw_data #用于存放原始数据02.fastq #用于存放fastq格式数据03.fastqc #用于存放QC结果04.trinity_result #用于存放trinity结果数据处理的..._@$sn[_$rn]/$ri什么意思

二进制文件修改器AXMLEditor改进-程序员宅基地

一、 背景介绍AXMLEditor是尼古拉斯·赵四开源的的AndroidManifest ARSC二进制文件修改器,可直接修改APK资源文件,非常方便。源码链接是:源码下载地址,且工具使用介绍地址文章详细介绍其用法和原理。但是,文末提到一个待改进的地方,即不支持添加引用资源类型的属性。工作过程中,我刚好需要添加应用资源类型的属性,于是在此记录我的解决过程。“当然这里还是有些操作不支持的,比..._axmleditor

2021上系统集成项目管理工程师报考条件、报考时间、考试安排_湖南系统集成项目管理师报考时间-程序员宅基地

系统集成项目管理工程师属于软考三个级别中的“中级”。系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。报考条件:凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术应用能力的人员,均可报名系统集成项目管理工程师,考试不限制考生的专业、学历、工作经历等也不需要一级一级从初级开始考,考生如果已经具备中级或高级的相应知识是可以直接从中级或高_湖南系统集成项目管理师报考时间

随便推点

android中夸进程通讯的四中方法-程序员宅基地

由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨进程调用其他应用程序的Activity;Content P

vuer-router详解_router.beforeeach((to, from_ZHAO______的博客-程序员宅基地

简单使用<div id="app"> <p> <!-- 使用 router-link 组件来导航 --> <!-- 通过传入 `to` 属性指定链接 --> <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 --> <router-link to="/foo">Go to Foo</router-link> <router-_router.beforeeach((to, from

监控白名单WMIC执行payload行为_wmic xsl payload-程序员宅基地

来自ATT&CK的描述WMI(Windows Management Instrumentation)是Windows管理功能,它为本地和远程访问windows系统组件提供了统一的环境。它依赖WMI服务来进行本地和远程访问,以及SMB(服务器消息块)和RPCS(远程过程调用服务)来进行远程访问。RPCS通过端口135运行。攻击者可能会使用WMI与本地和远程系统交互,也可能使用WMI来将执..._wmic xsl payload

Java怎样在饼状图上标注数字_饼状图 - java_jun - 博客园-程序员宅基地

带热点提示的饼状图(即鼠标放在图型上可以看到当前数据项)pagecontentType="text/html;charset=UTF-8"%>pageimport="org.jfree.data.general.DefaultPieDataset"%>pageimport="org.jfree.chart.*"%>pageimport="org.jfree.chart.plot...._java 饼图 输出数字

网站被服务器禁,又一次腾讯云服务器网站被封禁 设备存在违规信息被限制访问 - 小俊学习网...-程序员宅基地

前天收到腾讯云的短信,您的设备存在违规信息,已被限制访问,请尽快处理。好吧,记得之前又一次也是文章涉及到内容违规,是fanqiang一词。今天又是同样的原因。腾讯云后台的通知。由于接到用户举报,您名下的设备(139.199.183.162)存在违规信息,涉嫌违反相关法律法规和政策,该设备已限制访问。该设备详细信息如下:uin:910856122,appid:1252347900,地区:gz。请您尽..._您使用的腾讯云服务存在违规信息,已被限制访问

CSS字体属性-字体系列(font-family)-字体大小(font-size)-字体粗细(font-weight)-文字样式(font-style)-字体复合属性(font)_镜子的分享的博客-程序员宅基地

CSS Fonts(字体)属性用于定义字体系列、大小、粗细、和文字样式(如斜体)。字体系列:CSS 使用font-family属性定义文本的字体系列。p { font-family: "微软雅黑"; }div { font-family: Arial, "Microsoft Yahei", 微软雅黑; }多个字体时 各个字体用英文逗号分开遇见多个单词组成的有空格的 用引号进行包含 单双引号都可以尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示最常见的几个字体:body

推荐文章

热门文章

相关标签