1、操作系统基础概念

1.1、Windows与linux的关系

当前主流的操作系统:windows、、android、iOS、symbian、linux/unix

  • Windows:傻瓜式、哪里不会点哪里。纵使该操作系统从技术角度并不是最好的操作系统,但其设计理念:“让所有人都会用电脑”,让微软获得了巨大的成功。
  • Linux:认为每一个用户都是专业人士,操作麻烦,学习比较难。但其系统免费、开源、性能好、可移植性好,它几乎支持所有的 CPU 平台,这使得它便于裁剪和定制。我们可以把 Linux 放在 U 盘、光盘等存储介质中,在嵌入式领域得到广泛的应用。
  • Android:是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。
  • iOS:是一款非常优秀的操作系统,其系统底层框架与Android有巨大区别,使得其系统运行十分安全流畅,广受果粉们的喜爱。

system.jpg

说到Windows和linux的区别就不得不提到linux的优点:

  1. 首先就是他的开源,任何人都是可以查看他的源代码的,这使得他特别的安全,而windows则不开源,所以你要经常的打补丁,修补漏洞之类的。
  2. 其次,linux内核优化的好,没有哪个linux需要右键的刷新键(红旗linux是为了国人的使用习惯加的),而windows则不同,微软的系统非常的复杂,而且运先行效率相对linux要低很多。
  3. 虽然linux在桌面市场没有优势(只占1%多一点的占有率),但他在服务器行业的地位那是无敌的(20%多)。
  4. linux占用系统资源特别少,早期的linux,64M内存就能跑的很流畅,这也是他的优势

之前嵌入式操作系统用的最多的是linux和WinCE,随着时间的推进,linux已经开始抢占WinCE的市场占领主导地位了。Android和linux分别占领了消费电子领域(手机),和工业领域(安防,航空航天……)

1.2、多机开发:双系统与虚拟机

开发嵌入式程序,需要linux环境。但是因为:windows中有许多很好用的软件,如notepad++
SourceInsight,所以也需要windows。单纯的用linux去做所有的事情是浪费时间也是没有必要的,所以我们既需要windows,又需要linux。所以多机开发就显得尤为重要。
多机开发有多种方式:

  • 第一种:双系统——系统切换不方便
  • 第二种:虚拟机——系统切换方便。虽损失性能,但与真机微小差异
  • 第三种:两台电脑——成本高且文件同步不方便

在现实中,个人开发者推荐使用虚拟机进行多机开发;而大公司往往会购置一台性能非常优秀的服务器装linux系统,职员用性能一般的笔记本开发后通过客户端上传到服务器进行linux测试,一方面降低开销,提高效率,另一方面为公司的信息安全提供了保障。

1.3、搭建开发环境

涉及到两个东西:虚拟机软件+linux系统
虚拟机软件:就是一个单纯的在windows中运行的软件,跟word、360没有本质区别。现在主流的虚拟机软件有VMWare和VirtualBox,这里推荐使用VMWare

vmware.jpg

虚拟机软件在windows系统中运行,运行后它会模拟出来一个电脑,所以叫虚拟机。然后我们可以在该虚拟机中安装别的操作系统。

网上有许多教程,非常简单,这里给出一个教程:

2、linux基础知识与技能

2.1、linux内核、发行版

linux本身指的是一个操作系统内核,只有内核是无法直接使用的。我们需要的,可以使用的操作系统是一个包含了内核和一批有用的应用程序的一个集合体,这个就叫linux发行版。ubuntu、redhat就是linux的不同的发行版。
linux内核、发行版

1.内核版本

内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。例如,程序本身不需要了解用户的主板芯片集或磁盘控制器的细节就能在高层次上读写磁盘。

内核的开发和规范一直是由Linus领导的开发小组控制着,版本也是惟一的。开发小组每隔一段时间公布新的版本或其修订版,从1991年10月Linus向世界公开发布的内核0.0.2版本(0.0.1版本功能相当简陋所以没有公开发布)到目前最新的内核2.6.22版本,Linux的功能越来越强大。

Linux内核的版本号命名是有一定规则的,版本号的格式通常为“主版本号.次版本号.修正号”。主版本号和次版本号标志着重要的功能变动,修正号表示较小的功能变更。以2.6.22版本为例,2代表主版本号,6代表次版本号,22代表修正号。其中次版本还有特定的意义:如果是偶数数字,就表示该内核是一个可以放心使用的稳定版;如果是奇数数字,则表示该内核加入了某些测试的新功能,是一个内部可能存在着BUG测试版。如2.5.74表示是一个测试版的内核,2.6.22表示是一个稳定版的内核。读者可以到Linux内核官方网站下载最新的内核代码

linux.png

2.发行版本

仅有内核而没有应用软件的操作系统是无法使用的,所以许多公司或社团将内核、源代码及相关的应用程序组织构成一个完整的操作系统,让一般的用户可以简便地安装和使用Linux,这就是所谓的发行版本(distribution),一般谈论的Linux系统便是针对这些发行版本的。目前估计各种发行版本有数十种,它们的发行版本号各不相同,使用的内核版本号也可能不一样,下面就为读者介绍目前比较著名的几个发行版本。

linux各种发行版

(1)Red Hat

Red Hat是最成功的Linux发行版本之一,它的特点是安装和使用简单。Red Hat可以让用户很快享受到Linux的强大功能而免去繁琐的安装与设置工作。Red Hat是全球最流行的Linux,Red Hat已经成为Linux的代名词,许多人一提到Linux就会毫不犹豫地想到Red Hat。它曾被权威计算机杂志InfoWorld评为最佳Linux。
官方网站:http://www.redhat.com/

redhat.jpg

(2)Slackware

Slackware是历史最悠久的Linux发行版,它的特点是由于尽量采用原版的软件包而不进行任何修改,因此软件制造新BUG的几率便低了很多。在其他主流发行版强调易用性的时候,Slackware依然固执地追求最原始的效率——所有的配置均要通过配置文件来进行。
官方网站:http://www.slackware.com/

Slackware.jpg

(3)Mandriva

Mandriva的原名是Mandrake,它的特点是集成了轻松愉快的图形化桌面环境以及自行研制的图形化配置工具,Mandrake在易用性方面的确是下了不少功夫,从而迅速成为设置易用实用的代名词。Red Hat默认采用GNOME桌面系统,而Mandriva将之改为KDE。
官方网站:http://www.mandrivalinux.com/

Mandriva.jpg

(4)Debian

Debian可以算是迄今为止最遵循GNU规范的Linux系统,它的特点是使用了Debian系列特有的软件包管理工具dpkg,使得安装、升级、删除和管理软件变得非常简单。Debian是完全由网络上的Linux爱好者负责维护的发行套件。这些志愿者的目的是制作一个可以同商业操作系统相媲美的免费操作系统。并且其所有的组成部分都是自由软件。一般来说Debian作为适合于服务器的操作系统,它比Ubuntu要稳定得多。可以说稳定得无与伦比了。debian整个系统,只要应用层面不出现逻辑缺陷,基本上固若金汤,是个常年不需要重启的系统(当然,这是夸张了点,但并没有夸大其稳定性)。debian整个系统基础核心非常小,不仅稳定,而且占用硬盘空间小,占用内存小。128M的VPS即可以流畅运行Debian,而CentOS则会略显吃力。但是由于Debian的发展路线,使它的帮助文档相对于CentOS略少,技术资料也少一些。 由于其优秀的表现与稳定性,Debian非常受VPS用户的欢迎。
官方网站:http://www.debian.org/

Debian.jpg

(5)SuSE

SuSE是德国最著名的Linux发行版,在全世界范围中也享有较高的声誉,它的特点是使用了自主开发的软件包管理系统YaST。2003年11月,Novell收购了SuSE,使SuSE成为Red Hat的一个强大的竞争对手。同时还为Novell正在与微软进行的竞争提供了一个新的方向。
官方网站:http://www.novell.com/linux/suse/

SuSE.jpg

(6)Ubuntu

Ubuntu近些年的粉丝越来越多,Ubuntu有着漂亮的用户界面,完善的包管理系统,强大的软件源支持,丰富的技术社区,Ubuntu还对大多数硬件有着良好的兼容性,包括最新的图形显卡等等。这一切让Ubuntu越来越向大众化方向发展。但别忘了:你所需要的只是一个简约、稳定、易用的服务器系统而已! Ubuntu的图形界面固然漂亮,但这也决定了它最佳的应用领域是桌面操作系统而非服务器操作系统。如何你希望在学习Linux的过程中有个沉浸式的环境,那么Ubuntu的确不错:仅仅安装在自己的电脑中而非服务器中。从这一点来讲,Ubuntu并没有在VPS安装的操作系统选择之列,相信你也不会为了那数百M的驱动与宝贵的内存买单。
官方网站:https://ubuntu.com/download

Ubuntu.jpg

(6)CentOS

CentOS 你会发现非常多的商业公司部署在生产环境上的服务器都是使用的CentOS系统,CentOS是从RHEL源代码编译的社区重新发布版。CentOS简约,命令行下的人性化做得比较好,稳定,有着强大的英文文档与开发社区的支持。与Redhat有着相同的渊源。虽然不单独提供商业支持,但往往可以从Redhat中找到一丝线索。相对debian来说,CentOS略显体积大一点。是一个非常成熟的Linux发行版。对于初学者,我们建议采用CentOS或Debian,这两种系统都能在配置较低的VPS上流畅运行。但是如果VPS配置太低(OPENVZ内存在128M以下,或者XEN架构内存在192M以下),建议采用Debian;否则建议采用CentOS,以获取更多的在线帮助与支持,让自己入门更轻松。
官方网站:https://www.centos.org/

CentOS.jpg

CentOS、Ubuntu、Debian三个linux都是非常优秀的系统,开源的系统,也分付费的商业版和free免费版本,下面简单比较这三种系统。 CentOS系统 很多网站站长一般都选择centOS系统,CentOS是从redhat源代码编译重新发布版。CentOS去除很多与服务器功能无关的应用,系统简单但非常稳定,命令行操作可以方便管理系统和应用,并且有帮助文档和社区的支持。 Ubuntu系统 Ubuntu有亮丽的用户界面,完善的包管理系统,强大的软件源支持,丰富的技术社区,并且Ubuntu对计算机硬件的支持好于centos和debian,兼容性强,Ubuntu应用非常多,但对于服务器系统来说,个人感觉并不需要太多的各种应用程序,需要的是稳定,操作方便,维护简单的系统。如果你需要在服务器端使用图形界面,ubuntu是一个不错的选择,你需要注意的是,图形界面占用的内存非常大,而内存越大的vps价格也越高。 Debian系统 Debian也非常适合做服务器操作系统,与Ubuntu比较,它没有太多的花哨,稳定压倒一切,对于服务器系统来说是一条不变的真理,debian这个linux系统,底层非常稳定,内核和内存的占用都非常小,在小内存的VPS就可以流畅运行Debian,比如128m的内存,但debian的帮助文档和技术资料比较少。对于小内存,首选debian,对于非常熟悉linux系统的vps高手,首选debian。 在系统的选择上,属于新手,首选CentOS,并不是centos比Debian和ubuntu好,而是centos是初学者安装vps的首选,它既稳定,占用资源又少,在网络上能方便搜索到安装配置的文档,自身的帮助文档也非常强大;如果你是linux高手,高手的境界一般都选择debian,因为高手能在低配的vps上稳定运行系统;而ubuntu,系统虽然免费,但它适合有钱人玩,它占用的资源是比前面两种系统更高,而vps基本就是卖内存,内存越高,价格越贵。

2.2、GUI(图形用户界面)和cmdline(命令行)

人机交互:人和机器(计算机)进行交互用户与操作系统的界面有多种方式。这里,讨论两种基本方案:

  1. 提供命令行界面或命令解释程序(command interpreter),允许用户直接输入命令,以供操作系统执行。
  2. 允许用户通过图形用户界面(GUI)与操作系统交互。

Windows下既有GUI,又有命令行。linux中也是既有GUI,又有命令行。

但是,在linux中我们常用命令行,在Windows中常用GUI

命令解释程序

cmdline:command line,命令行。

有的操作系统内核包括命令解释程序。其他操作系统,如 Windows 和 UNIX,将命令解释程序当作一个特殊程序,当一个任务开始或用户首次登录时(交互系统),该程序就会运行。对于具有多个可选命令解释程序的系统,解释程序称为外壳(shell)。

例如,UNIX 和 Linux 系统有多种不同外壳可供用户选择,包括 Bourne shell、C shell、Bourne-Again shell、Korn shell 等。也有第三方的外壳和用户自己编写的免费外壳。大多数外壳都提供相似功能,用户外壳的选择通常基于个人偏好。

命令解释程序的主要功能是,获取并执行用户指定的下一条命令。这层提供了许多命令来操作文件:创建、删除、列出、打印、复制、执行等。MS-DOS 和 UNIX 的外壳就是这么工作的。这些命令的实现有两种常用方法。

  • 一种方法是,命令解释程序本身包含代码以执行这些命令。例如,删除文件的命令可让命令解释程序跳转到相应的代码段,以设置参数并执行相应系统调用。对于这种方法,所能提供命令的数量决定命令解释程序的大小,因为每个命令都要有实现代码。
  • 另一种方法是,通过系统程序实现大多数的命令,常用于许多操作系统,如 UNIX。这样,命令解释程序不必理解命令,而只要通过命令确定一个文件,以加载到内存并执行。因此,UNIX 删除文件的命令rm fuke txt会查找名为 rm 的文件,将该文件加载到内存,并用参数 file.txt 来执行。与 rm 命令相关的功能是完全由文件 rm 的代码决定的。这样,程序员可以通过创建合适名称的新文件,轻松地向系统增加新命令。这种命令解释程序可能很小,而且在增加新命令时无需修改。

cmd.png

图形用户界面

GUI:grahics user interface,图形用户界面。

与操作系统交互的第二种方法是,采用用户友好的图形用户界面(GUI)。因此,用户不是通过命令行界面直接输入命令,而是利用桌面(desktop)概念,即采用基于鼠标的视窗和菜单系统。用户移动鼠标,定位指针到屏幕(桌面)上的图标(icon),而这些图标代表程序、文件、目录和系统功能。根据鼠标指针的位置,按下鼠标按钮可以调用程序,选择文件和目录(也称为文件夹(folder)),或打开菜单命令。

图形用户界面首次出现于 20 世纪 70 年代,部分源于 Xerox PARC 研究中心的研发工作。首个 GUI 于 1973 年出现在 Xerox Alto 计算机上。不过,直到 20 世纪 80 年代,随着 Apple Macintosh 计算机的出现,图形界面才更为普及。多年来,Macintosh 操作系统(Mac OS)的用户界面经历了很多变化,最重要的是 Mac OS X 采纳了 Aqua 界面。微软公司的首个 Windows 版本,即版本 1.0,为 MS-DOS 操作系统提供了 GUI。后来版本的 Windows 改进了 GUI 外观,并增强了许多功能。

由于鼠标不适用于大多数的移动系统,因此智能手机和手持平板电脑通常采用触摸屏界面。这样,用户交互就是在触摸屏上做手势(gesture),例如,在触摸屏上用手指点击和滑动等。虽说早期智能手机有键盘,但现在大多数智能手机只有触摸屏的模拟键盘。

GUI.png

2.3、隐藏文件与非隐藏文件

Windows中:文件隐藏与不隐藏通过设置文件属性实现的,可以点击文件,右键属性,选择勾选隐藏选项来设置文件为隐藏文件。
在Windows中查看隐藏文件方法:菜单栏 工具->文件夹选项->查看->显示所有文件和文件夹。

windows_yincang.png

Linux中:linux中隐藏文件特点是文件名以.开头,跟文件属性无关。在linux中查看隐藏文件用全部显示命令:ls -a(普通显示:ls

linux_yincang.png

2.4、相对路径与绝对路径

路径是用来标识一个文件在操作系统的文件系统中存储位置的。
pathname=路径path+文件名name

举例:

  • D:winshareenum.c    全路径   pathname
  • D:winshare        路径    path
  • enum.c         文件名   name

路径分为绝对路径和相对路径:

绝对路径:路径是从绝对位置开始的。譬如Windows中从某一个盘符开始(C:),linux中从根目录/开始。

相对路径:指明路径的时候,是从当前所在的位置开始的。

举例:

  • D:我的文档123456456.txt
  • D:我的文档abcabc.txt
    Windows下,当前在123.txt,但是要去abc.txt

方式1:采用绝对路径:D:\我的文档\abc\abc.txt
方式2:采用相对路径:..\..\abc\abc.txt
从当前路径开始,往上走一层,再往下走一层(abc)就到了

linux下相对路径

.  表示用户所处的当前目录
..  表示上级目录
_  表示前一个工作目录
~  表示当前用户自己的根目录

windows下相对路径

.   表示用户所处的当前目录
..  表示上级目录

举例

/abc/123/def.txt  是linux绝对路径
abc/123/def.txt   是linux相对路径
F:abc123def.txt  是windows绝对路径
abc123def.txt   是windows相对路径

2.5、硬链接和软链接

在linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)
查看linux系统中哪些是链接文件。
soft_hard_link.jpg

硬链接

硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号号(Inode Index)或者Inode,它是文件或者目录在一个文件系统中的唯一标识,文件的实际数据放置在数据区域(data block),它存储着文件重要参数信息,也就是元数据 (metadata),比如创建时间、修改时间、文件大小、属主、归属的用户组、读写权限、数据所在block号等。
在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接》。不过硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。之所以文件建立了硬链接就会防止数据误删,是因为文件系统的原理是,只要文件的索引节点还有一个以上的链接(仅删除了该文件的指向),只删除其中一个链接并不影响索引节点本身和其他的链接(数据的实体并未删除),只有当最后一个链接被删除后,此时如果有新数据要存储到磁盘上,被删除的文件的数据块及目录的链接才会被释放,空间被新数据暂用覆盖。

软链接

软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建。

软链接作用:

  • 便于文件的管理,比如把一个复杂路径下的文件链接到一个简单路径下方便用户访问。
  • 节省空间解决空间不足问题,某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。


软连接和硬链接的特点:

软链接:

  1. 软链接是存放另一个文件的路径的形式存在。
  2. 软链接可以 跨文件系统 ,硬链接不可以。
  3. 软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。
  4. 软链接可以对目录进行链接。

硬链接:

  1. 硬链接,以文件副本的形式存在。但不占用实际空间。
  2. 不允许给目录创建硬链接。
  3. 硬链接只有在同一个文件系统中才能创建。
  4. 删除其中一个硬链接文件并不影响其他有相同 inode 号的文件。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

2.4、linux常用命令:

(1) ls(list,列表)

作用:使用列表把当前文件夹下所有文件显示出来

语法:

ls -a           #显示所有文件,包括隐藏文件
ls -l           #以详细信息显示
ls -a -l        #显示所有文件及详细信息
ls -l -a        #同上
ls -la          #同上
ls -al          #同上    

ls命令.png

(2) cd(change directory,更改目录)

作用:用来切换目录
涉及到相对路径和绝对路径

语法:

cd [相对路径]||[绝对路径]   #切换目录
  • ..代表上一层目录
  • .代表当前目录

注意,下图中的/Downloads不是绝对路径,因此在非root用户下面,想使用绝对路径需要在路径前加~

cd命令.png

(3) pwd(print work directory,打印工作目录)

作用:打印出当前的绝对路径

没有语法,直接使用

pwd命令.png

(4) mkdir(make directory,创建文件夹)

作用:创建空文件夹

语法:

mkdir [文件夹名字]                 #创建单个文件夹
mkdir -p [文件夹1]/[文件夹2]/……    #创建级联文件夹

mkdir命令.png

(5) mv(move,移动)

作用:在目录间移动文件或文件夹,重命名文件或文件夹

语法:

mv [源文件pathname] [目的文件pathname]   #复制文件或文件夹

mv命令.png

(6) touch

作用:创建空文件
语法:

touch [pathname]

touch命令.png

(7) cp(copy,复制)

作用:复制文件或文件夹,重命名文件或文件夹
语法:

cp [源文件pathname] [目标文件pathname]        #复制文件
cp -r [源文件pathname] [目标文件pathname]     #复制文件夹
cp -f [源文件pathname] [目标文件pathname]     #强制复制文件
cp -rf [源文件pathname] [目标文件pathname]    #强制复制文件夹

如果目标目录已存在同名文件或文件夹,需要用cp -f强制复制文件。

复制文件时,会把文件夹下的所有文件及文件夹一并复制过去。

cp命令.png

(8) rm(remove,去除,删除)

作用:用来删除文件,文件夹

语法:

rm [文件pathname]         #删除文件
rm -r [文件夹pathname]    #删除文件夹
rm -f [文件pathname]      #强制删除文件
rm -rf [文件夹pathname]   #强制删除文件夹

删除不存在的文件时,需要用rm -f,否则会出现错误提示。在脚本程序中避免错误提示时会用到。

删除正在打开的文件时,只删除硬盘中的文件,保存文件时,内存中的文件内容会重新保存在硬盘中。

rm命令.png

(9) cat

作用:直接在命令行下显示文件内容,也可以用来向文件输入。

语法:

cat [文件pathname]    #查看文件内容

cat命令适合查看比较短的文件内容,若文件内容较多,推荐使用vi命令查看

cat命令.png

(10)rmdir(remove directory,删除文件夹)

作用:删除空文件夹

语法:

rmdir [文件夹pathname]

rmdir只能删除空文件夹,而rm -r可以删除空文件夹和非空文件夹

rmdir命令.png

(11) ln(link,连接文件)

作用:创建硬链接/软链接

ln [参数] [源文件或目录] [目标文件或目录]

主要参数

  • -i 交互模式,文件存在则提示用户是否覆盖。
  • -s 软链接(符号链接)。
  • -d 允许超级用户制作目录的硬链接。
  • -b 删除,覆盖以前建立的链接

soft_hard_link2.jpg

(12) man

作用:查询man手册,获得帮助信息

man 1 ls         #1表示查询的是linux命令
man 2 xxx        #2表示查询的是linux api
man 3 xxx        #3表示查询的是C库函数

在man手册中查询时,帮助按H键位(help),退出按Q键(quit)

man查询ls命令.png

(12) apt-get(Advanced Package Tool,应用程序管理器)

作用:在Ubuntu系统中,经常要用到apt-get install指令来安装软件,由于常常需要root权限来操作,所以搭配sudo食用口感更佳,apt-get指令对于安装、卸载、升级软件提供一条龙服务,对比于源码安装,实在是业界良心。

apt-get install vim              #安装vim工具
apt-get remove vim               #卸载vim工具
sudo apt-get install vim         #获取root权限安装vim工具

安装和卸载都是在线的,也就是说ubuntu必须能上网才能使用apt-get

apt-get 安装软件的原理和必要性:

linux操作系统的发行版,内核版本,定制性,造成了linux中软件的不兼容性。在linux中安装软件是一件困难的事情,装了软件不一定能用。ubuntu解决了这个问题,ubuntu就适合某个发行版(ubuntu10.04)的所有软件做了一个列表,然后用户通过apt-get install的方式安装软件,就会实时连接到ubuntu服务器,服务器会根据你的ubuntu版本,给你下载合适的软件来安装。这样确保了软件的兼容性。

Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。然而,由于每位用户所处的网络环境不同,不可能随意地访问各镜像站点。为了能够有选择地访问,在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址。

apt-get的更新过程:

  • 执行apt-get update
  • 程序分析/etc/apt/sources.list
  • 自动连网寻找list中对应的Packages/Sources/Release列表文件,如果有更新则下载之,存入/var/lib/apt/lists/目录
  • apt-get install 相应的包 ,下载并安装。
    即使这样,软件源配置文件只是告知Ubuntu系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。

apt-get install下载的软件存放到 /var/cache/apt/archives/下。

同时,APT能够检查Ubuntu Linux系统中的软件包依赖关系,大大简化了Ubuntu用户安装和卸载软件包的过程。

APT获取vim应用

2.5、linux使用技巧:

使用shell的Tab键自动补全

Tab在linux命令行输入中可以自动完成。在linux
命令行中使用Tab会极大提高输入效率

使用shell的历史记录

shell会记录用户执行命令的历史记录,而我们一般使用命令都会在短时间内集中反复使用,因此当你需要使用一条刚才还使用过的命令时,不需再次花时间输入,只要按下键盘上箭头按键,就可实现上下翻页,翻出刚才用过的命令,直接回车执行。就好像电话机的通话记录和快速回拨一样。

2.6、linux命令行中一些符号的含义:

  • . 代表当前目录
  • .. 代表上一层目录,当前目录的父目录
  • - 代表前一个目录,我刚才从哪个目录cd过来
  • ~ 代表当前用户的宿主目录
  • / 代表根目录
  • $ 普通用户的命令行提示符
  • # root用户的命令行提示符
  • * 万能匹配符

    宿主目录:所谓宿主目录,就是操作系统为当前用户所设计的用来存放文件、工作的默认目录。如Windows中的“我的文档”目录,就是Windows为我们设计的宿主目录。

Linux中每个用户都有自己的宿主目录,这个目录对于普通用户来说,在/home/username/,而对于root用户来说,在/root。

2.7、linux进阶命令

(13) find

功能:在linux文件系统中,用来查找一个文件或文件夹放在哪里了。

语法:

find [路径] -name "[文件名/文件夹名]"
  • 当你知道你要找的文件名或文件夹名,但是你忘记了它被放在哪个目录下,要找到该文件或文件夹时,用find

find命令查找文件或文件夹

(14) grep

功能:在一个文本文件中,查找某个词。

语法:

$ grep "[被查找的字符串]" [当前路径的文件名/路径]     #从文件内容查找匹配指定字符串的行

目录相关:

  • 明确要求搜索子目录:grep -r/grep -d recurse
  • 忽略子目录:grep -d skip

其他参数:

  • -E :开启扩展(Extend)的正则表达式。
  • -i :忽略大小写(ignore case)。
  • -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
  • -n :显示行号
  • -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
  • -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
  • -o :只显示被模式匹配到的字符串。
  • --color :将匹配到的内容以颜色高亮显示。
  • -A n :显示匹配到的字符串所在的行及其后n行,after
  • -B n :显示匹配到的字符串所在的行及其前n行,before
  • -C n :显示匹配到的字符串所在的行及其前后各n行,context

grep命令

(15) which和whereis

功能:查找一个应用程序(二进制文件)在哪里
举例:which ls whereis ls
区别:

  • which只显示二进制文件的路径
  • whereis显示二进制文件的路径,和其源码或man手册位置

which和whereis命令

(16) uname

功能:查看系统信息
举例:uname -a
相关参数:

  • -a--all  显示全部的信息。
  • -m--machine  显示电脑类型。
  • -n--nodename  显示在网络上的主机名称。
  • -r--release  显示操作系统的发行编号。
  • -s--sysname  显示操作系统名称。
  • -v  显示操作系统的版本。
  • --help  显示帮助。
  • --version  显示版本信息。

uname命令

(17) 开机和关机

shutdown -h now           #立即关机
shutdown –h 12:00         #在12:00关机
shutdown +5 “System will shutdown after 5 minutes” 
#5分钟够关机并显示警告信息
shutdown -r now           #立即重启

init 0                    #关机
reboot                    #重启

shutdown命令参数:

  • -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
  • -r : 关机后重新开机。
  • -h : 关机后停机。
  • -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
  • -c : 取消目前已经进行中的关机动作。
  • -f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。
  • -F : 关机时,强迫进行 fsck 动作。

init命令参数:

  • 0:停机或者关机
  • 1:单用户模式,只root用户进行维护
  • 2:多用户模式,不能使用NFS(Net File System)
  • 3:完全多用户模式(标准的运行级别)
  • 4:安全模式
  • 5:图形化(即图形界面)
  • 6:重启

(18) tree/lstree

功能:显示文件和目录由根目录开始的树形结构

tree命令

(19) mount/umount

功能:用来挂载磁盘到文件系统中
举例:

  • mount -t nfs -o nolock 192.168.1.141:/root/rootfs /mnt——挂载
  • umount /mnt——卸载

(20) 磁盘空间相关

df -h    显示已挂载的分区列表
du -h    列出文件或文件夹的大小

du -h [文件名]可以列出这个文件有多大,列出方式是以人比较好看懂的方式。不像 ls -l列出的都是以字节为单位。

df与du命令

(21) 用户管理

useradd user1    添加一个名为user1的用户
userdel    user1    删除一个名为user1的用户
passwd user1    为名为user的用户设置密码
adduser user1    添加一个名为user1的用户,同时创建宿主目录,用户shell等。

adduser和useradd的区别:

  • adduser是一个脚本,而useradd是一个二进制应用程序。
  • adduser创建用户时比较麻烦,但是一次设定完所有的信息;而useradd设置时简单,但是需要额外的设置宿主目录,密码那些信息。

(22) 权限管理

ls -l 列出的属性
-rwxr-xr-x
一共10个字符,第1个表示文件属性,剩下的9个分成三组表示文件权限。每组中三个分别表示r可读w可写x可执行。如果是字母表示有这个权限,如果是-表示没这个权限。三组分别表示:第一组表示文件属主的权限,第二组表示属主所在的组用户的权限,第三组表示其他用户的权限。

ls -l显示的详细信息中:

-rw-r--r--
drwxr-xr-x

第一个字符——文件类型:

  • - 表示普通文件。普通文件指文本文件和二进制
  • d 表示文件夹,d是directory的缩写
  • l 表示符号连接文件,后面会用->打印出它指向的文件
  • s 表示socket文件
  • p 表示管道文件 pipe
  • b 表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • c 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

linux文件基本属性

后九个字符——文件权限:

权限还有另一种表示方法,用数字来表示。
编码规则如下:

  • r——可读——4
  • w——可写——2
  • x——可执行——1
  • -——无权限——0

有了这个编码规则,则 rwxr-xr-x 编码后为755

修改权限命令

chmod (change mode)修改文件权限,比较常用,要记得
chown (change owner,修改属主)
chgrp (change group,修改文件的组)

第一种修改权限的方法:
要把权限改成 rwxr--r-- 则对应的编码值为744
修改命令为:chmod 744 文件名

第二种修改权限的方法:
在原来的权限基础上进行修改,即增加或减少某权限。
三个组用户的编码依次为: 属主u 属主所在的组g 其他用户o
比如:

  • 要属主增加可执行权限 chmod u+x 文件名
  • 其他用户增加可写权限 chmod o+w 文件名
  • 属主所在组用户去掉可执行权限 chmod g-x 文件名

(23) 文件打包压缩与解压缩

tar -czvf dir.tar.gz dir/        将dir目录打包成dir.tar.gz
tar -cjvf dir.tar.bz2 dir/        将dir目录打包成dir.tar.bz2
tar -zxvf dir.tar.gz             解压缩dir.tar.gz
tar -jxvf dir.tar.bz2            解压缩dir.tar.bz2

(24) sed和awk

正则表达式。匹配加替换。

(25) 格式化文件系统

mkfs    /dev/hd1
mkfs -t vfat 32 -F /dev/hd1        创建一个FAT32文件系统

(26) 网络配置命令

ifconfig eth0 192.168.1.13        设置IP地址
ifconfig eth0 up                启动网卡
ifconfig eth0 down                禁用网卡
ifup eth0                        启动网卡
ifdown eth0                        禁用网卡
ifconfig eth0 192.168.1.1 netmask 255.255.255.0    同时设置IP和子网掩码

3、编辑器vi的使用(vi和vim的联系)

什么是编辑器?
编辑器就是一款软件,它的主要作用就是用来编辑。譬如编写文件,编写代码。

Windows中的常用编辑器,如自带的notepad。比较好用的notepad++,UltraEditor,SlickEditor

Linux中常用编辑器,自带的最古老的vi。比较好用的vim,gedit。
注:vi和vim的关系:vim是vi的升级版,推荐使用vim。

我们在后面提到vi时,其实都是指vim。

3.1、vi基础使用

使用vi来打开/创建一个文件,vi pathname

vi的两种模式:

命令模式:当vi打开时默认为命令模式,要转入输入模式,需要按a或者i键。在命令模式下,此时键盘上输入的所有东西都被vi当作命令来对待。在命令模式下,最好不要乱输入。此时应该输入相应的命令,来让vi做相应的事。

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

在底线命令模式下如何保存:

  • :wq——保存并且退出
  • :w——只保存不推出
  • :q——不保存退出
  • :q!——不保存强制退出
  • :wq!——保存并强制退出

vim键盘图

输入模式:输入模式用来向文件输入内容。可以从命令模式中按a或者i进入输入模式。进入输入模式后,就可以随意按键盘进行输入了。输入完成后如果要保存,要先退回到命令模式(因为保存也是一种命令)。在输入模式下按ESC键退回到命令模式。

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

vi的两种模式

注意看屏幕左下角,当命令模式时无提示信息或者提示文件名等信息,等处于输入模式时,提示 -- INSERT --

3.2、vi的高级使用

查找

  • 在命令模式下,输入/xxx,就可以查找到xxx
    查找时按N查找上一个,n查找下一个

行号

  • 快速切换行——在命令模式下,输入:num,就可以快速切换到num
  • 设置显示行号——在命令模式下,输入:set nu,就可以显示行号
  • 设置不显示行号,命令模式输入:set nonu
  • 设置永久显示行号,需要修改vi的配置文件。打开vi的配置文件~/.vimrc,在其中输入set nu即可。

set nu显示行号

行删除

  • 命令模式下,先将光标移动到要删除的行,然后输入dd
    如果要删除连续多行,譬如要删除连续的3行,使用3dd

行复制粘贴

  • 复制:命令模式下,nyy,如3yy是复制三行
  • 粘贴:命令模式下,p

复制时要把光标放在多行的第一行,粘贴时实际
粘贴到当前光标所在行的下一行。

3.3、linux中权限表示&管理

普通用户与特权用户 su命令切换用户

Windows中有普通用户和特权用户,特权用户是Administrator,普通用户可以有很多个。
特权用户是系统的管理员,对系统内所有文件具有操作权限。每个普通用户只能处理自己的文件,不能访问其他用户的文件,更不能随意处理操作系统的文件。
Linux中也有普通用户和特权用户的区别。特权用户就是root用户。普通用户权限受到限制,譬如说普通用户不能cd /root,普通用户不能使用apt-get install 来装软件。

可以使用su [用户名]来在不同用户间切换。
譬如要从普通用户切换到root,可以su root,然后输入root的密码即可转入root用户。
从root要切换到普通用户gec,则su gec即可。

sudo passwd root可以为root用户设置密码

rwx与权限表示

ls -l显示详细信息
drwxr-xr-x 10个字符,第一个表示文件类型。剩下的9
个分成3组,表示文件权限。
前三个表示此文件的属主对文件的权限
中间三个表示此文件属主所在的组对文件的权限
最后三个表示其他用户对文件的权限

rwx怎么解析:r代表可读,w代表可写,x代表可执行

  • rwx:可读,可写,可执行
  • r-x: 可读,不可写,可执行
  • r--: 可读,不可写,不可执行

使用sudo暂时获取root权限

这是ubuntu的一个特点,在ubuntu中可以使用sudo命令让普通用户暂时获取root用户的权限,而不必进行用户切换。

补充内容:

1、虚拟机linux上网问题

1.1、VMware中虚拟机网络的三种设置

  • 第一种:桥接(bridged)
  • 第二种:NAT
  • 第三种:Host only 。该模式下仅主机可以上网,虚拟机不能上网。

特点

  • Bridged(桥接模式) 将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络。简而言之,这就好像在局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问。桥接模式网络连接支持有线和无线主机网络适配器。如果想把虚拟机当做一台完全独立的计算机看待,并且允许它和其他终端一样的进行网络通信,那么桥接模式通常是虚拟机访问网络的最简单途径。
    桥接模式
  • NAT(网络地址转换模式) 使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据”包裹”,都会交由NAT网络适配器加上”特殊标记”并以主机的名义转发出去,外部网络返回的响应数据”包裹”,也是先由主机接收,然后交由NAT网络适配器根据”特殊标记”进行识别并转发给对应的虚拟机,因此,虚拟机在外部网络中不必具有自己的IP地址。从外部网络来看,虚拟机和主机在共享一个IP地址,默认情况下,外部网络终端也无法访问到虚拟机。此外,在一台主机上只允许有一个NAT模式的虚拟网络。因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的。
    NAT模式
  • Host-Only(仅主机模式) 仅主机模式,是一种比NAT模式更加封闭的的网络连接模式,它将创建完全包含在主机中的专用网络。仅主机模式的虚拟网络适配器仅对主机可见,并在虚拟机和主机系统之间提供网络连接。相对于NAT模式而言,仅主机模式不具备NAT功能,因此在默认情况下,使用仅主机模式网络连接的虚拟机无法连接到Internet(在主机上安装合适的路由或代理软件,或者在Windows系统的主机上使用Internet连接共享功能,仍然可以让虚拟机连接到Internet或其他网络)。在同一台主机上可以创建多个仅主机模式的虚拟网络,如果多个虚拟机处于同一个仅主机模式网络中,那么它们之间是可以相互通信的;如果它们处于不同的仅主机模式网络,则默认情况下无法进行相互通信(可通过在它们之间设置路由器来实现相互通信)。

1.2、虚拟机上网方式1:NAT方式

设置步骤:

  • 第一步:在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择NAT模式
  • 第二步: vi /etc/network/interfaces,打开该文件,将内容编辑成为:
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    address 192.168.1.141
    netmask 255.255.255.0
    gateway 192.168.1.1
  • 第三步:执行/etc/init.d/networking restart 重启网卡

1.3、虚拟机上网方式2:桥接方式

  • 第一步:桥接。在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择桥接模式。
  • 第二步:桥接到可以上网的网卡。在菜单栏 编辑 -> 虚拟网络编辑器,选择桥接到自己Windows中可以上网的网卡上(一般就是Wifi网络或者有线网络)
  • 第三步:设置dhcp并重启网卡。vi /etc/network/interfaces,打开该文件,将内容编辑成为:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1
  • 保存退出。然后命令行执行/etc/init.d/networking restart 重启网卡

1.4、总结

第一,NAT方式设置上网比较简单,但是不能用在嵌入式开发中。
第二,桥接方式设置上网较繁琐,但是在嵌入式开发中比较有用。

Last modification:January 12th, 2020 at 03:40 pm
如果觉得我的写的还有点意思,欢迎看官赞赏