# 主题十一:提问&回答

  • MIT 6.828 操作系统

  • 现代操作系统

  • Rust 写操作系统

  • 多去使用键盘,少使用鼠标。这一目标可以通过多加利用快捷键,更换界面等来实现。

  • 学好编辑器。作为程序员你大部分时间都是在编辑文件,因此值得学好这些技能。

  • 学习怎样去自动化或简化工作流程中的重复任务。因为这会节省大量的时间。

  • 学习像 Git 之类的版本控制工具并且知道如何与 GitHub 结合,以便在现代的软件项目中协同工作。

如果你发现某种语言实现了你所需要的特定功能库,最好的方式就是直接去使用那种语言。

可以根据 PATH 来查找软件和工具的存储位置。可以使用 which 或 type 命令去查找 shell 在哪里发现了特定的程序。

常见的目录结构:

  • /bin - 基本命令二进制文件
  • /sbin - 基本的系统二进制文件,通常是root运行的
  • /dev - 设备文件,通常是硬件设备接口文件
  • /etc - 主机特定的系统配置文件
  • /home - 系统用户的家目录
  • /lib - 系统软件通用库
  • /opt - 可选的应用软件
  • /sys - 包含系统的信息和配置(第一堂课介绍的)
  • /tmp - 临时文件( /var/tmp ) 通常在重启之间删除
  • /usr/ - 只读的用户数据
  • /usr/bin - 非必须的命令二进制文件
  • /usr/sbin - 非必须的系统二进制文件,通常是由root运行的
  • /usr/local/bin - 用户编译程序的二进制文件
  • /var -变量文件 像日志或缓存?

特定的语言包比系统的程序报管理器中有更多最新版本的程序包。

建议使用虚拟环境来配置软件包。使用隔离的环境(例如 Python 的 virtualenv)以避免影响全局环境。

Docker 和虚拟机,Docker 采用的是容器技术,容器的开销小于虚拟机。因为容器是和主机共享内核避免运行其他内核,但虚拟机会运行整个 OS 栈,包括内核。带来的问题则是容器的隔离性差。

Arch Linux 采用了滚动更新的策略,用了最前沿的软件包,但可能不稳定。

Debin,Ubuntu 和 CentOS 则保守稳定。但是牺牲了新功能。