UCB的Linux System Admin Decal是一门Linux系统使用的入门课程,介绍了一些最基本的Linux使用知识,从Shell脚本到操作系统和计算机网络,再到版本控制和虚拟化。总的来说可以作为了解性的课程粗略地学习一下

Shell Script

一些比较神奇的shell指令

  • !!表示重新显示上一条执行的命令
    • !:1这样的用法可以从上一条命令中获取对应位置的参数
  • !表示pipeline,可以连续执行命令,并且上一条的输出结果作为下一条的输入
  • > <表示输入输出的重定向

Bash编程的基本规则

  • Bash脚本中用定义好了变量之后可以用$变量名的方式来引入变量,比如我们定义a="ls",然后下一行输入$a,那么这一行的输出就是ls的执行结果,我们要以文本的形式查看变量里的内容需要用echo来输出,否则会被当成命令来执行
  • Bash脚本中的变量没有类型,比如我定义a=1,那么$a+1得到的结果不是2而是字符串1+1,我们可以用expr命令来实现表达式的计算,expr $a+1的结果就是2
  • 在Bash脚本的条件判断中,0表示true而1表示false,并且用中括号来表示一个条件判断,if语句的形式是if-then-elif-else-fi
  • Bash中循环有for和while两种,用do--done来表示每次循环中执行的语句
  • 总的来说这部分内容要靠练习而不是看PPT

Package Management

  • 这一部分好像在讲如何在Linux环境下安装各种软件,最麻烦的是从源代码开始编译然后安装,也可以用apt-get命令之类的工具进行安装
  • Advanced课程中还介绍了如何从零开始安装并配置一台Linux机器,包括下面这些步骤:
    • Booting the Installation Media
    • Initial Setup
    • Partitioning
    • Setting up Filesystems
    • Encrypting your Filesystem
    • Mounting your Filesystems
    • Installation (pacstrap)
    • Configuring the System

这些我们就不去深究了。

Networking

这一部分简单介绍了计算机网络中最基本的知识,让我们可以对计算机网络以及Linux系统上常用的网络指令有一定的了解,主要内容有:

  • Media access control 即MAC地址,是计算机的物理地址,长度是48bits,用来作为计算机接入网络的唯一标识符,但是MAC地址一般只在局域网内有用,全局的网络通信需要IP地址
  • IP地址是互联网中每台主机所具有的唯一标识符,IPv4地址的长度是32bit,但是32bit能表示的主机数量已经无法满足当今时代的需求,所以新一代的IPv6标准的地址长度是128bit,NAT(Network Address Translation)是另一种解决IP冲突的方法。
  • 有了IP地址,互联网中的主机就可以互相进行访问,这个过程需要各种路由算法来实现
  • Transmission Control Protocol ,即TCP协议,在IP层的基础上提供了可信的端到端传输
  • Domain Name System,即DNS域名系统,可以实现IP地址和“网址”(实际上是人类可读的域名)之前的转换,处于应用层,是非常重要的互联网基础设施

Linux中常用的网络相关指令有这样一些:

  • hostname: 获取主机名
  • host: 获取主机信息
  • ping: 查看能否某台主机
  • trace route: 查看路由的过程
  • arp: 匹配IP和MAC
  • dig: 检查DNS记录
  • curl/wget: 通过HTTP/FTP进行文件的下载

进程与服务

  • 进程部分主要就介绍了一下最基本的那些概念,内容相当于操作系统讲进程的第一节课的前半部分内容
  • 服务(Service)是程序提供对外交互的一种方式,可以长时间运行,并且可以被多个用户共享,并且用户可以定义自己的服务,当然这不是服务的确切定义。
    • 之后介绍了一些Linux系统里的经典案例,比如Systemd提供了Linux系统中管理服务和进程的功能,systemctl指令可以控制服务的启动、停止和状态检查,journalctl可以查看systemd的日志
    • 后面介绍了一个用配置文件启动Nginx服务的具体例子

安全基础

这一节主要讲了使用Linux系统过程中如何保证信息安全。首先,信息的安全可以分成以下几个部分:

  • 保密性Confidentiality:确保只有获得批准的人可以读取数据
    • 注意信息的加密
  • 完整性Integrity:确保数据没有被篡改过
    • 用哈希算法来检测数据是否被篡改
  • 验证性Authentication:证明数据的作者/来源
  • 可用性Availability:确保服务的正常运行时间

然后介绍了Linux系统中所有权的概念,Linux中的身份分成User、Group和Other三种,每种身份对应文件的3种权限:读、写、执行。可以用chmod和chown指令来改变文件的权限

版本控制和备份

第一部分介绍版本控制系统(Version Control Systems, VCS),其实主要就是git,并介绍了git的一些特性,git是一个分布式的版本控制系统,它把一个项目的变化过程用有向无环图来表示,并且git的总体运行逻辑如下:

git的运行逻辑

但git使用的真正难点在于多个branch的协作开发以及代码合并,git branch用于创建一个新的分支,git checkout用于分支之间的切换,git merge用于分支的合并,这些东西还是要靠实践才能掌握。

  • 当合并的过程中有冲突的时候,冲突部分的代码不会被merge到最新的结果中,需要通过进一步操作来完成冲突代码的检查和合并
  • git中的remote表示不在本地的仓库备份,默认的名字是origin,我们可以用git fetch来获取远程的新增内容并更新到本地的仓库中(注意不是工作目录)

这节课的另一部分内容是备份,介绍了数据备份的3-2-1法则,即:

  • 3代表数据至少要存储3份
  • 2代表数据至少要存储在2台以上的设备中
  • 1代表至少有1份数据存储在离线环境下

后面还介绍了一下备份用的各种指令。

云、容器和配置管理

虚拟机是一种运行在电脑上的电脑,它是对物理硬件的软件仿真,可以将自己和宿主机的物理环境隔离开来,这个过程也被称为虚拟化,虚拟机具有较好的安全性。

而容器通过和宿主机共享硬件和库函数来实现更轻量级的虚拟化,相比于虚拟机,它可以更快地启动。

  • 然后简单地介绍了一下docker
  • 配置管理是什么我也不知道