您的足迹: 初级linux教学课程

初级linux教学课程

初级linux教学课程

给我儿子设计的Linux教学课程,适用于高中生且无基础水平,入坑需谨慎,仅供参考8-)

课程目标和大纲

设计一个基于Linux的教学课程,以帮助学生掌握 →

  • Linux操作系统、系统管理、网络基础
  • Vim极客编辑器、Shell常用命令
  • Shell(bash)、Sed、AWK 基本用法
  • Python的编程基础、常用第三方库

课程分为8个模块,每个模块包括实践活动和课后作业。

Linux的历史和发展

三大派生版本

  • UNIX System V (IBM→AIX, HP→UX, Sun→Solaris)
  • BSD UNIX (FreeBSD, OpenBSD, NetBSD, MacOS)
  • UNIX Like( Linux , Minix, QNX)

Unix,BSD,Linux
Unix,BSD

Linux发行版介绍

二进制是计算机基石

网络基础常识

常见Linux版本和选择

多种方式安装Linux

Linux基本概念和命令

Linux文件系统结构FHS

Linux入门指令

Linux如何配置网络

Linux用户和权限管理

用户和用户组管理

掌握程序:【熟练】

  • useradd / usermod / userdel
  • groupadd / groupdel
  • chown / chgrp / chmod
  • sudo / su

Linux下软件包管理

掌握程序:【熟练】

rpm/apt包管理

  • dnf search
  • dnf install
  • dnf remove
  • dnf update
  • dnf upgrade

debian包管理

  • dpkg -i / -r / -l / -c / -S / -L

实用监控类软件

  • df -h / du -sm
  • top / htop / nmon
  • free -h -s1 -c3
  • iostat -dxm 5
  • vmstat 3 3

文件和文本编辑

文件权限和所有权

find查找文件

掌握程序:【熟练】

  • grep -i不区分大小写 -w匹配单词 -E多项匹配 -r递归匹配 -l只显示匹配的文件名
  • 按名字匹配 find . -iname “test*”
  • 按时间匹配 find . -type f -ctime +5 -ctime -10
  • 按类型匹配 find . -type d|l|f
  • 按大小匹配 find . -type f -size +100M -size -500M
  • 按用户匹配 find . -type f -user shaohy
  • 对结果再做处理 find . -iname “test*” | xargs -i ls -al {}

vim文本编辑器

掌握程序:【熟练】

  • 前后左右 (hjkl, w, b)
  • 行首行尾 (0,$)
  • 开头结尾 (gg, G)
  • 插入编辑 (o, O, i, a, s)
  • 搜索替换 (/, ?)
  • 回撤重做 (u, ctrl+r)
  • 复制粘贴删除 (y, p, d, c, x, yy, dd, cc, yw, cw, dw)
  • 上翻下翻 (c+f, c+b, c+e, c+y)
  • 保存退出 (esc, :wq, ZZ)

自动化文本处理

掌握程序:【了解】

regex正则表达式

shell编程

awk的列式处理和统计

sed的增删改查

#!/bin/sh
while read line;do
        name=$(echo $line | awk -F, '{print $1}')
        xinbie=$(echo $line | awk -F, '{print $2}')
        if [ $xinbie == "男" ];then
                xinbie="先生"
        else
                xinbie="女士"
        fi
 
        sed -r -n "s@name@$name@g; s@sex@$xinbie@g; p" 邀请.txt
done < 会议名单.csv

系统管理与维护

掌握程序:【熟练】

系统日志

  • journalctl -xef
  • journalctl -xeu openstack-nova-api -f
  • journalctl -S “5 min ago” -xeu

备份与恢复

  • tar zvfc 压缩
  • tar zvfx 解压
  • tar zvft 查看

定时任务

  • crontab -e
  • crontab -l

安装和配置服务

systemd是一个系统和服务管理器,它提供了一系列工具的集合,用于管理后台服务、状态查询、日志归档、设备管理、电源管理和定时任务等许多职责。

实战项目一:系统管理

系统配置

  • 将系统的 root 账号密码设置为 upyun.com
  • 配置系统的主机名: server0.upyun.com

用户和组管理

  • 创建一个 study 学习组和 test 测试组
  • 创建三个用户 user1,user2, user3
  • 设置 user1 密码为 111, user2 密码为222, user3 密码为333
  • user1 属于 study组,user2 属于 test组, user3属于study和test组

配置文件权限

  • 创建一个共用目录/var/xxx/test, 属组为 study
  • 拷贝文件/etc/issue.net 到上述组目录下,更名为 issue.test
  • 配置此文件对任何人都可以执行权限
  • 用户 user1 能够对文件 issue.test 执行读和写操作
  • 用户 user2 对文件 issue.test 既不能读,也不能写
  • 所有其他用户都能够对文件 issue.test 进行读操作

配置cron计划任务获取接口

  • 为用户 user1 配置一个定时任务,每隔5分钟获取接口内容
  • 用curl获取名人名句,生成在/var/xxx/test/sentences.txt

tar解压缩归档

  • 创建一个名为 /home/user1/backup.tgz 的归档文件,其中包含 /var/xxx/test 目录中的内容,tar 归档必须使用 bzip2 进行压缩

使用dnf安装软件

  • 安装nmon和netcat监控软件

实战项目二:网络管理

用nmcli配置系统网络配置

ipv4.method

 Device: enps0p1        (ifname)
 IP address:172.25.0.11 (ip4)
 Netmask:255.255.255.0  (ip4)
 Gateway:172.25.0.254   (gw4)
 Name server:172.25.254.254 (ipv4.dns)

用python快速部署站点

python -m SimpleHTTPServer 8000

用systemd部署后台服务

[Unit]
Description=LVS and VRRP High Availability Monitor
After=neutron-l3-agent
Wants=network-online.target
 
[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStartPre=/bin/sleep 3
ExecStartPre=-/etc/keepalived/check_vip.sh config
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

项目展示和评估

课程结束后,学生将掌握Linux的基本操作和概念,为进一步学习Linux相关技能打下坚实的基础。

高级进阶版学习课程

Python的编程基础🏆(可选)

语法、数据结构、对象

文本操作

from random  import choice
from datetime import datetime, timedelta
debug = True
 
class Person():
  def __init__(self):
    nick = self.GetList("/Users/shaohy/Desktop/nick.txt", 0)
    name = self.GetList("/Users/shaohy/Desktop/name.txt", 0)
    province = self.GetList("/Users/shaohy/Desktop/sheng.txt", 4)
 
    self.fullname = f"{choice(nick)}{choice(name)}"
    self.sex = choice(["男", "女"])
    self.prov = choice(province) 
 
  def GetName(self):
    return f"{self.fullname}"
 
  def GetSex(self):
    return f"{self.sex}"
 
  def GetProv(self):
    return f"{self.prov}"
 
  def GetList(self, filename, length):
    with open(filename, "r", encoding="utf-8") as f:
      result = [ line.strip().split(":")[0] for line in f  if len(line) > length ]
    return result
 
def make_invite(name, sex):
  invite_txt='''
尊敬的 name (sex):
	 欢迎参加我们的会议!!
 
		敬礼
'''
#  today_date = time.strftime(('%Y%m%d_%H%M%S'), time.localtime()) #time.localtime()用于生成当前时间
  today_date = datetime.strftime(datetime.now() + timedelta(days=7), "%Y-%m-%d")
  invite_txt2 = invite_txt.replace("name", name).replace("sex", "先生" if sex == "男" else " 女士")
  with open(f"/Users/shaohy/Desktop/invite_{name}_{today_date}.txt", "w+") as f:
    f.write(invite_txt2)
  print(f"{name}的邀请已经完成。")
 
try:
  with open("/Users/shaohy/Desktop/会议名单.csv", "w+") as f:
    for i in range(100):
      person = Person()
      fullname = f"{person.GetName()}, {person.GetSex()}, {person.GetProv()}"
      f.write(fullname + "\r\n")
      make_invite(person.GetName(), person.GetSex())
except Exception as e:
  print(e)
finally:
  print("啥事也没有")

Office常用套件

xlwings+docx生成邀请函

import xlwings as xw
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt,RGBColor
def write_invite(name, sex):
    document = Document()
    document.styles['Normal'].font.name = u'宋体'
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
    document.styles['Normal'].font.size = Pt(10.5)
    document.styles['Normal'].font.color.rgb = RGBColor(0,0,0)
 
    Head = document.add_heading('', level=0)  # 插入标题
    run  = Head.add_run("邀请函")
    run.font.name=u'微软雅黑'
    run.font.color.rgb = RGBColor(255,0,0)
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'Cambria')
 
    paragraph = document.add_paragraph('尊敬的 ')  # 插入段落
    paragraph.add_run(name).bold = True  # 正文
    paragraph.add_run(f" ({sex})").italic = True
 
    document.add_heading('\t\t欢迎参加狂欢节!', level=1)  # 插入标题 1
    '''
    document.add_paragraph('Intense quote', style='Intense Quote')  # 插入段落,明显引用
    document.add_paragraph('first item in unordered list', style='List Bullet')  # 插入段落,无序列表
    document.add_paragraph('first item in ordered list', style='List Number')  # 插入段落,有序列表
    records = (
        (3, '101', 'Spam'),
        (7, '422', 'Eggs'),
        (4, '631', 'Spam, spam, eggs, and spam')
    )
 
    table = document.add_table(rows=1, cols=3)  # 插入表格
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = 'Qty'
    hdr_cells[1].text = 'Id'
    hdr_cells[2].text = 'Desc'
    for qty, id, desc in records:
        row_cells = table.add_row().cells
        row_cells[0].text = str(qty)
        row_cells[1].text = id
        row_cells[2].text = desc
    '''
 
    document.add_page_break()  # 插入分页
    document.save(f"invite_{name}.docx")  # 保存
 
try:
    wb = xw.Book(r"/Users/shaohy/Desktop/会议名单.xls")
    sheet = wb.sheets[0] # 选择第0个表单
 
    for i in range(1,10):
        name = sheet.range(i,1).value.strip()
        sex = sheet.range(i, 2).value.strip()
        sex = "先生" if sex == "男" else "女士"
        write_invite(name, sex)
except Exception as e:
    raise(e)

游戏和爬虫

pygame

Beautiful Soup

Beautiful Soup是一个功能强大的解析库,可以用于从HTML或XML文件中提取数据。它提供了灵活的API,可以用于搜索、修改和遍历文档树结构。

import re
from bs4 import BeautifulSoup
import urllib.request as urllib2
 
url = "http://www.baidu.com"
response1 = urllib2.urlopen(url)
html_doc = response1.read()
 
#创建一个BeautifulSoup解析对象
soup = BeautifulSoup(html_doc,"html.parser",from_encoding="utf-8")
 
#获取所有的链接
links = soup.find_all('a')
for link in links:
    if link.get('href', None) != None:
        print(f"{link['href']}")

lxml

lxml是基于C编写的库,速度较快。它使用了libxml2和libxslt库作为底层,支持XPath和CSS选择器,可以高效地解析和处理XML和HTML文档。

html.parser

html.parser是Python标准库中内置的解析库,用于解析和处理HTML文档。它虽然功能相对较弱,但是由于是内置库,使用起来非常方便。

web服务器

  • python最简单的SimpleHTTPServer

micropython单片机编程

from machine import Pin
from time import sleep, sleep_ms
from umqtt.simple import MQTTClient
 
 
ssid = "总有刁民想连朕的热点"
passwd = "13870143008"
client_id = "esp32-chenfc"
mqtt_server = "devops.upyun.com"
mqtt_user = "shaohy"
mqtt_pass = "upyun.com"
topic_sub = "online/#"
topic_pub = "online/chenfc"
last_message = 0
message_interval = 30
 
def wifi_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    while not wlan.isconnected():
        print("正在努力连接 wifi 热点。。。。")
        wlan.connect(ssid, passwd)
        sleep(3)
 
    print("WiFi Network Info: ", wlan.ifconfig())
    do_ledon(100)
 
 
def do_ledon(step=15):
    import neopixel
    np = neopixel.NeoPixel(Pin(8), 8, bpp=3)
 
    for r in range(0, 256, step):
        for g in range(0, 256, step):
            for b in range(0, 256, step):
                np[0] = (r, g, b)
                np.write()
                sleep_ms(10)
 
def sub_cb(topic, msg):
    msgarray = msg.split()
    if msgarray[0] == b"online":
        if len(msgarray) > 1:
            do_ledon(int(msgarray[1]))
        else:
            do_ledon()
 
def connect_and_subscribe():
    global client_id, mqtt_server, topic_sub
    wifi_connect()
 
    client = MQTTClient(client_id, mqtt_server, user=mqtt_user, password=mqtt_pass)
    client.set_callback(sub_cb)
    client.connect()
    client.subscribe(topic_sub)
    print('Connected to %s MQTT broker, subscribed to %s topic' % (mqtt_server, topic_sub))
    return client
 
 
if __name__ ==  '__main__':
    try:
        client  = connect_and_subscribe()
        while True:
            client.check_msg()
            if (time() - last_message) > message_interval:
                msg = b'online'
                client.publish(topic_pub, msg)
                do_ledon(50)
                last_message = time()
    except Exception as e:
        print(e)
wiki/public/linux/初级linux教学课程.txt · 最后更改: 2025/12/04 08:04