GNU/Linux使用基础本博客无意做一个大而全的教程,这里只是记录一下这几天做一个小项目用到/回忆的基础知识,方便上手迅速地。文中的注释是为了理解内容,文末是一些不错的学习资料的链接。[TOC]作为普通用户,PC端常见的操作系统有:Windows、MacOS、类Unix系统(GNU/Linux)。1.服务器选择GNU/Linux|Fedora系列:CentOS、RedHat、Fedora个人开发|Debian系列:Ubuntu、Debian(RaspberryPi-Raspbian)喜欢折腾|用于嵌入式的ArchLinux|Linux嵌入式设备OS的自裁(可能的学习顺序):Baremetaldevelopment->uCOS-II->uClinux->LinuxKernel->Roadmap其他:RT-Thread,FreeRTOS,VxWorks,WindowsCE2。一般教程都省略了系统安装部分,这里简单介绍一下。2.1系统安装方案是自己制定的,我选择的系统是Ubuntu。一般有两个主流版本,18.04和16.04。Linux的版本号是有讲究的,这里就不多说了。我使用Ubuntu18.04作为我的深度学习平台环境,Ubuntu16.04是我安装SynopsysEDATools的环境。系统安装一般有三种选择:买台新电脑,折腾不现实。但是还有一个选择:买一个RaspberryPi,配置Raspbian,学习Basic操作。自己的电脑装双系统是没有问题的,但是最好有一定的电脑折腾经验,不然操作不好可能会丢失原有的操作系??统文件。推荐使用VMware等软件创建GNU/Linux虚拟机。其他方案:云服务器,新手不推荐。2.2系统安装参考如果选择方案一:自己买PC:(因为你是有钱玩家->)直接找卖电脑的人帮你安装/朋友圈50元求树莓派帮助:树莓派的购买和系统安装请参考视频,或者自行google。如果选择方案二:我的主机是联想拯救者Y7000,安装Windows和Ubuntu18.04双系统的参考链接,亲测可行的磁盘分配过程,如果遇到“Windows系统可以压缩卷,可以压缩.空间比实际剩余空间小很多”供参考。我的电脑配置是:8G+8GDDR4,100G+375GDisk。双系统主要是训练深度学习模型。一共分配了100G给Ubuntusystem,子项为:/20G;//主分区,包括系统和软件,应为Swap20G;/*类似于Windows虚拟内存,当物理内存为512Mb-2G时,swap设置为物理内存的2倍;当物理内存为2G-4G时,swap设置为物理内存的1.5倍;当物理内存为4G-8G时,swap设置等于物理内存;当物理内存为较大,设置为0.75倍;*/boot512M;//引导分区,包括操作系统内核和启动程序,200M-1G/Home59.5G;//逻辑分区,类似Windows我的文档,大到可能,是虚拟机方案,参考链接3,输入密码基本不会显示GNU/Linux。输入的时候,不要以为没有打字。只需输入并按Enter。默认阅读器已完成系统安装步骤用户和密码设置,成功进入图形界面(此处指桌面)。GNU/Linux系统提供了两种交互方式:GUI,图形用户界面系统为用户提供图形界面,用户可以通过点击鼠标和输入键盘来完成操作。CLI,命令行界面系统,为用户提供操作的shell,用户通过输入命令完成操作。GUI的操作方式与Windows和MacOS几乎相同,用于解决一些常见的任务(文档、聊天、视频、游戏……)。而CLI操作是GNU/Linux系统的学习重点。要学习,只需打开终端并直接面对CLI。这里我们假设读者有一些简单的需求,然后想使用CLI来实现。3.1工作环境观察终端光标闪烁所在行的概念Your_User_Name@Host_N我~$。其中,~代表当前工作环境。为了了解这个工作环境,我们可以进行一个简单的实验。首先我们知道有两个命令:ls代表list,列出当前工作环境Allfilescd代表convertto,即切换当前工作环境,所以我们先输入cdDesktop,回车.可以看到光标闪烁那一行的~变成了~/Desktop,说明我们来到了~下的Desktop,这里的Desktop就相当于我们的桌面。然后我们输入ls回车。您可以看到没有返回任何内容。这是因为我们的桌面目前是空的。所以我们最小化我们的Terminal程序,然后在桌面上右击,新建一个文件夹,并命名。然后打开终端程序,输入ls回车。此时我们可以看到它返回了我们桌面上新建的文件名。因此,我们可以知道,工作环境的概念是指我们当前所在的文件夹。3.2基本命令结构终端中输入的命令主要由三部分组成,比如文件复制命令cp:cp-r中命令Desktop/testDesktop/test2,cp代表copy,指的是一个应用程序,-r是指定程序的参数,用于指定文件夹中的文件,下面的Desktop/test和Desktop/test2可以看作是应用程序的运行对象。该语句的意思是将桌面test中的所有文件夹复制到桌面test2文件夹中。大家可以在桌面上新建两个文件夹自己测试一下。总之,基本的命令结构是:应用程序-程序参数,一个或多个操作对象。因此,接下来的学习可以是学习更多的命令,了解它们的参数,成为Linux高手,但这毕竟是枯燥的。是的,因为没有任务驱动程序。因此,我们接下来要做的就是为自己找点东西,比如在Linux下尝试使用C/C++工具链(GCC、G++、GDB);又如配置Play深度学习环境(Anaconda+Python+OpenCV+Pytorch+TensorFlow-GPU);比如基于LAMP(Linux,Apache,MySQL,PHP)搭建一个简单的个人小网站,...当你在折腾的时候,基本上要做的就是,找一个长得像的人靠谱的教程,然后跟着键盘一行一行的来。可能很多命令不知道是怎么回事,但是这个打字过程可以先纠正很多习惯性的错别字……4.稍微系统地学习一下GNU/Linux使用前的折腾就是跟着别人的教程,多动手实践练习,并强迫自己查找一些基本命令。反正几次之后,常见的ls,mv,cd,rm,mkdir,nano,su...这些大家应该都有这样的印象,就是接到了一个简单的任务,可以找相关的帖子独立解决。继续学习其使用的动机可能在于任务变得复杂;或者自己的需求比较特殊,网上没有现成的;或者,当你开始涉足某个领域时,那个领域的人的分享都是假设你会使用GNU/Linux。这时候推荐的书籍是:鸟哥的Linux私房菜。(建议购买最新版。)推荐的网上学习资料有:Linux从头到尾学习的时候,有看不懂的情况是很正常的。原因是,这是真正开始学习操作系统的时候了。(之前用Windows和MacOS的时候,都是用别人在操作系统上搭建的应用系统!)如果你真的对这块感兴趣,可以自己深入阅读了解计算机系统书籍,进行计算机基础知识.如果你比较专业,可以走这条路:计算机组成原理->操作系统原理->计算机网络->(并行)计算机体系结构。GNU/Linux的命令查询URL可以是:Query这个阶段的学习重点可以是:文件系统、文本编辑器、权限管理、Git+GitHub,也可以学习几个远程访问工具。5.脚本语言可以说。在学习了4中的基础知识后,读者已经可以熟练使用GNU/Linux进行日常工作,但这并不能体现出使用CLI的优势。这时候,你应该学习一种叫做脚本语言的东西。它的主要功能是帮助用户快速完成一系列繁琐的操作。说到脚本语言,最受欢迎的一定是Python。主要的脚本语言有:PythonCshBashMakefilePerlTCL对于普通用户来说,学习Python和Csh就够了。对于运维或者嵌入式前端可以多学习Bash和Makefile。那么如果你做数字IC设计,你可能就得做完了。6.深入了解这个其中一节不属于本博客标题“GNU/Linux基础”的范围。毕竟GNU/Linux只是一个操作系统,所以我们可以从这几个方面来考虑:往下看:GNU/Linux的移植和驱动开发对于嵌入式软件工程师来说,他们的一部分工作就是基于操作系统开发应用程序;另一部分是裁剪和移植GNU/Linux系统的内核,或Device开发驱动程序。前者需要对开发平台的软硬件有较高的了解,后者则需要对Linux内核的源代码有深入的了解,熟悉操作系统所依托的硬件系统。查找:网络应用、服务器和运维如果我们不是嵌入式场景,而是大型服务器集群场景,也就是我们成为一家互联网公司的运维工程师,那么我们需要考虑的是这次是如何搭建一个更好的网络通信和开发平台,让我们后端/前端的同学们大显身手。这种场景需要非常熟练的服务器架构和扎实的网络基础。当然Linux内核的源码也是Maggi的,可以借鉴别人的写法。
