共计 3818 个字符,预计需要花费 10 分钟才能阅读完成。
GNU/ Linux 应用根底
这篇博客没有任何用意成为一个大而全的应用教程, 在这里只是记录一下这几天做个小我的项目所用到 / 回顾到的基础知识, 不便疾速入门. 文中的正文为理解内容, 文末为一些好的学习材料链接.
[TOC]
作为普通用户, PC 端常见的操作系统有: Windows, Mac OS, 及类 Unix 零碎(GNU/Linux).
1. GNU/ Linux 选用
- 作服务器 | Fedora 系列: CentOS, RedHat, Fedora
- 集体开发 | Debian 系列: Ubuntu, Debian (树莓派 -Raspbian)
- 喜爱折腾 | Arch Linux
- 搞嵌入式 | 自行裁剪 Linux
嵌入式设施的 OS(可能的学习程序): 裸机开发 -> uCOS-II -> uClinux -> Linux 内核 -> Roadmap
其它: RT-Thread, Free RTOS, VxWorks, Windows CE
2. 零碎装置
这一节是个别教程间接略去的中央, 我这里简述.
2.1 零碎装置计划
集体开发, 我选用的零碎为 Ubuntu. 当初个别有两种支流的版本, 18.04 和 16.04. Linux 的版本号是有考究的, 这里不赘述. 我应用的是 Ubuntu 18.04 作为我开发深度学习的环境, 而 Ubuntu16.04 作为我装置 Synopsys EDA Tools 的环境. 零碎装置, 个别有三种计划:
-
新买一台电脑, 折腾
不事实.
然而能够有另外一个计划: 买一个树莓派, 配置 Raspbian, 学习基本操作.
-
给本人电脑装置双系统
没问题, 然而最好有肯定的电脑折腾教训, 否则操作不好可能会失落原操作系统文件.
-
应用 VMware 一类的软件创立一个 GNU/ Linux 虚拟机应用
举荐.
- 其它计划: 云服务器, 老手不举荐.
2.2 零碎装置参考
如果选用计划 1 :
- 自购 PC: (因为是土豪玩家 ->)间接叫卖电脑的帮你装好 / 朋友圈 50 块大洋求助
- 树莓派: 参考视频进行树莓派的选购与零碎装置, 或自行谷歌
如果选用计划 2 :
- 我的主力机是联想援救者 Y7000, 装置 Windows 和 Ubuntu 18.04 双系统的参考链接, 亲测可行
磁盘调配过程中, 如果碰到 ”Windows 零碎压缩卷时可压缩空间远小于理论残余空间 ” 状况参考.
我的电脑配置为: 8G + 8G DDR4, 100G + 375G Disk. 双系统次要是为了训练深度学习模型. 总共划分了 100G 给 Ubuntu 零碎, 子项为:
/ 20G; // 主分区, 蕴含零碎和软件, 尽量大 Swap 20G; /* 相似 Windows 虚拟内存, 物理内存为 512Mb-2G 时, swap 设置为物理内存的 2 倍; 物理内存为 2G-4G 时, swap 设置为物理内存的 1.5 倍; 物理内存在 4G-8G 时, swap 设置等同物理内存; 物理内存更大时, 设立为 0.75 倍; */ boot 512M; // 启动分区, 蕴含操作系统内核和启动的程序, 200M - 1G /Home 59.5G; // 逻辑分区, 相似于 Windows 我的文档, 尽量大
如果选用计划 3 :
- 能够网上找相干教程自行下载 VMware 装置
- 我装置 Synopsys EDA Tools 的环境是 Ubuntu 16.04, 应用的是虚拟机计划, 参考链接
3. 根本应用
GNU/ Linux 在输出明码时是不会显示的, 输出时不要认为字没有打上去. 简略输完回车即可.
默认读者在零碎装置步骤中曾经实现了用户, 明码的设置, 并且胜利进入了图形界面(这里指桌面).
GNU/ Linux 零碎提供两种交互方式:
-
GUI, 图形用户界面
零碎向用户提供图形的界面, 用户能够通过鼠标点击和键盘输入实现操作.
-
CLI, 命令行界面
零碎向用户提供用于操作的 Shell, 用户通过输出命令实现操作.
GUI 的操作形式与 Windows 和 Mac OS 简直统一, 用于解决一些通用的工作(文档, 聊天, 视频, 游戏 …). 而 CLI 操作才是 GNU/ Linux 零碎的学习重点, 学习的话, 关上终端, 直面 CLI 即可.
这里又假如读者有一些简略的需要, 而后想应用 CLI 实现.
3.1 工作环境的概念
察看终端光标闪动的那一行, 结尾为 Your_User_Name@Host_Name ~$
. 其中, ~
代表的是以后的工作环境. 为了了解这个工作环境, 咱们能够进行一个简略的小试验.
首先咱们晓得有两个命令:
ls
代表 list, 即列出当前工作环境下的所有文件cd
代表 convert to, 即切换以后的工作环境
于是咱们首先输出
cd Desktop
而后回车. 能够看到闪动光标的那一行的 ~
曾经变成了 ~/Desktop
, 阐明咱们曾经来到了~
下的 Desktop
里了.
这里这个 Desktop
等价于咱们的桌面. 而后咱们输出
ls
而后回车. 能够看到, 什么都没有返回. 这是因为咱们的桌面目前还什么货色都没有. 于是咱们先最小化咱们的终端程序, 而后在桌面鼠标右键, 新建一个文件夹, 取上一个本人的名字. 而后再关上终端程序, 再输出
ls
而后回车. 此时咱们就能够看到它返回了咱们桌面新建的文件的名字.
于是, 咱们能够晓得, 工作环境这个概念, 其中就是指, 咱们以后处于那个文件夹内.
3.2 根本命令构造
终端里的输出的指令次要由三局部形成, 比方文件复制命令cp
:
cp -r Desktop/test Desktop/test2
这个命令中, cp
代表 copy, 指的是一个应用程序,
-r
是对程序进行指定的参数, 这里用于指定文件夹内的文件,
前面的 Desktop/test
与Desktop/test2
能够看作是应用程序的操作对象.
这个语句代表的意思是, 将桌面的 test
内的所有文件夹复制到桌面 test2
文件夹里.
这个能够本人先在桌面创立两个文件夹本人测试一下.
Anyway, 根本的命令构造为:
应用程序 - 程序参数 一个或者多个操作对象
于是, 接下来的学习, 就能够是, 学习更多的命令, 意识它们的参数, 成为 Linux 达人, 然而这样究竟是无聊的, 因为没有工作驱动.
所以, 咱们下一步应该做的, 其实是给本人找个什么货色折腾一下,
- 比方尝试一下用 Linux 下的 C /C++ 工具链(GCC, G++, GDB);
- 又比方配置个深度学习环境玩玩(Anaconda+Python+OpenCV+Pytorch+TensorFlow-GPU);
- 比方搭建一个简略的基于 LAMP(Linux, Apache, MySQL, PHP)的集体小网站, …
折腾的时候, 基本上做的就是, 找个看起来靠谱的教程, 而后一行一行地跟着敲键盘.
可能很多命令都不晓得怎么回事, 然而这个敲的过程, 首先就能纠正很多习惯性的 Typo…
4. 略微零碎一点学习 GNU/ Linux 的应用
之前的折腾都是跟着他人的教程始终敲, 多上手练习手感, 也强制本人去查一些根本的指令. 反正整多几次后, 常见的比如说ls
, mv
, cd
, rm
, mkdir
, nano
, su
… 这些应该都差不多有的印象了, 即收到某个简略的工作, 可能本人独立查找相干的帖子解决了.
而持续学习它的应用, 动机可能在于, 工作变得复杂了; 或者本人的需要比拟特地, 网上没有现成的; 再或者, 开始踏入某个具体的畛域, 那个畛域里的人的分享, 都是默认你会应用 GNU/ Linux 的.
这个时候, 举荐的书籍为: 鸟哥的 Linux 私房菜. (倡议买当下最新版本)
举荐的网络学习材料为: Linux 不入门到入门
这个阶段学习的时候, 如果呈现看不懂的状况, 那是非常失常的, 起因在于, 这时候才是真正地开始学习一个操作系统. (之前应用 Windows 和 Mac OS 时都是应用的他人建设在操作系统上的利用零碎 !)
如果真的对这块产生趣味了, 能够自行翻阅 深刻了解计算机系统 书籍, 进行计算机根底的扫盲.
再业余一点, 能够走这条路: 计算机组成原理 -> 操作系统原理 -> 计算机网络 -> (并行) 计算机体系结构
GNU/ Linux 的命令查问网址能够为: 查问
这个阶段学习重点能够是: 文件系统, 文本编辑器, 权限治理, Git+GitHub, 还能够再去理解几个近程拜访工具.
5. 脚本语言
能够说, 学习完 4 中的根底后, 读者曾经能够熟练地应用 GNU/ Linux 进行日常的工作了, 然而这并没有体现出应用 CLI 的劣势. 此时应该再学习一种叫做脚本语言的货色, 它的次要作用在于, 可能疾速地帮忙用户疾速地实现一系列繁琐的操作. 说到脚本语言, 最风行的, 肯定非 Python 莫属. 次要的脚本语言有:
- Python
- Csh
- Bash
- Makefile
- Perl
- TCL
对于普通用户, 学完 Python 和 Csh 足够. 而做运维或者嵌入式前端可能得多学个 Bash 和 Makefile. 而后做数字 IC 设计的话, 可能得学完.
6. 深刻
到这一大节, 就不属于这篇博客题目 ”GNU/ Linux 应用根底 ” 所可能涵盖的范畴了.
说到底, GNU/ Linux 也只是一个操作系统而已, 所以咱们能够从这些方面思考:
-
向下看: GNU/ Linux 的移植与驱动开发
对于嵌入式软件工程师, 一部分工作是, 基于操作系统进行利用的开发; 而另一部分的工作是, 对 GNU/ Linux 这个零碎的内核进行裁剪和移植, 或者是为某种设施开发驱动. 前者须要对开发平台的软硬件都具备相当高的了解, 后者更是须要, 粗浅地了解 Linux 内核的源码, 以及对操作系统所基于的硬件零碎的相熟.
-
向上看: 网络应用, 服务器与运行保护
如果咱们不是嵌入式场景, 而换成大规模服务器集群的场景, 即成为了互联网公司的运维工程师, 则此时咱们须要思考的事件是, 怎么搭建一个更好的网络通信与开发平台, 供咱们的后端 / 前端同学大展身手. 这种场景一方面须要对服务器架构非常纯熟, 也须要很扎实的网络根底.
当然, Linux 内核的源码也是美极, 能够学习他人的写代码的形式.