Linux 的应用场景非常广泛,以下是一些主要的应用场景:
服务器:Linux 在服务器领域的应用非常普遍,由于其稳定性、安全性和可定制性,许多企业和组织都选择使用 Linux 作为服务器操作系统。
超级计算机:Linux 也是超级计算机中常见的操作系统,由于其出色的性能和可扩展性,许多高性能计算任务都在 Linux 上完成。
嵌入式设备:Linux 可以用于许多嵌入式设备,如智能手机、智能手表、智能家居设备等。由于其轻量级和可定制性,Linux 成为嵌入式设备操作系统的首选。
科学研究:Linux 在科学研究领域也得到广泛应用,包括天文学、地球物理学、生物医学等。许多科学研究都需要处理大量的数据和进行复杂的计算,而
Linux 提供了强大的工具和环境来支持这些任务。
软件开发:由于 Linux 提供了丰富的开发工具和环境,因此它也成为软件开发人员的首选操作系统。在 Linux 上编写代码可以使用流行的开发工具,如
GCC、Python 等。
总之,Linux 的应用场景非常广泛,无论是企业服务器、超级计算机还是嵌入式设备、科学研究等领域,都可以看到 Linux 的身影。
Linux 在机器人上的应用非常广泛,以下是一些主要的应用场景:
机器人操作系统:Linux 可以作为机器人操作系统的基础,提供硬件抽象、设备驱动、库、可视化工具、消息传递机制等功能,帮助机器人开发者更快速地开发、调试和部署机器人应用程序。
机器人控制:Linux 可以通过控制机器人的硬件接口,实现对机器人运动的控制,包括电机控制、传感器数据采集和处理等。
机器视觉:Linux 可以搭载机器视觉库和开源的计算机视觉框架,如 OpenCV,帮助机器人实现图像处理和识别,从而进行目标跟踪、环境感知等任务。
人工智能:Linux 可以支持各种人工智能算法和框架,如 TensorFlow、PyTorch 等,使得机器人可以具备更高级的智能和自主决策能力。
总之,Linux 在机器人领域的应用非常广泛,可以帮助机器人实现更高效、更智能的功能。
Linux 的职业方向非常广泛,以下是一些主要的职业方向:
Linux 系统管理员:负责维护和管理 Linux 系统的正常运行,包括安装、配置、监控和故障排除等。
Linux 运维工程师:负责 Linux 系统的运维工作,包括自动化脚本编写、监控、数据备份和恢复等。
Linux 内核开发工程师:负责 Linux 内核的开发和维护工作,需要对内核源代码有深入的了解。
Linux 应用开发工程师:负责在 Linux 系统上进行应用程序的开发和维护工作,需要熟练掌握 C/C++等编程语言。
云计算工程师:负责基于 Linux 系统的云计算平台的搭建、管理和维护工作。
Linux 系统由 Linus Torvalds (林纳斯·托瓦兹)于 1991 年发布在新闻组的内核发展而来, 由于它在发布之初就免费和自由传播,支持多用户、多任务及多线程,且兼容
POSIX 标准, 使得它支持运行当时主流系统 Unix 的一些工具软件,吸引了众多的使用者和开发者,逐渐发展壮大至今。
当我们说 Linux 系统时,其含义往往是指采用 Linux 内核的操作系统。Linux 内核负责控制硬件、
管理文件系统、进程管理、网络通讯等,但它本身并没有给用户提供必要的工具和应用软件。
由于 Linux 内核本身是开源的,所以一些人和厂商在其规则之下, 基于 Linux 内核搭配各种各样系统管理软件或应用工具软件,从而组成一套完整可用的操作系统,见下图。
我们称这样的系统为 Linux 发行版(distribution)。完整的 Linux 系统就如同汽车, Linux 内核构成了最为关键的引擎,不同的发行版就类似使用相同引擎的不同车型。
人们制作发行版通常用于特定的用途,构建哲学不一,侧重点有所不同,因而 Linux 发行版可谓百花齐放。 其中以 Debian、Suse 及 Fedora
派系的发行版最为常见。对于基础用户来说,常常会困惑于安装某些软件时, 软件的安装帮助会针对不同派系的 Linux 给出不同的安装指令,
这实际是由于不同 Linux 派系之间使用不同的包管理软件(可理解为使用不同的软件商店),这无伤大雅。 常见的 Linux 发行版关系见下图。
Debian 派系
Debian 派系下主要包含 Debian、Ubuntu 等发行版。
Debian 的特色在于其海量的软件支持和 apt-get 软件包管理系统,而且其支持的硬件平台非常全面, 包括 x86、AMD、MIPS、ARM、POWERPC
等。
Ubuntu 衍生自 Debian,由于其易用性,可以说是最成功的 Linux 桌面版, 且它的成功已经开始漫延至其服务器版本,目前还推出了
Ubuntu Core 版本针对物联网等小型设备领域, 非常有发展前景。本书将采用 Ubuntu 作为开发主机的系统环境。
Debian 和 Ubuntu 官网有非常丰富的使用教程,而且中文支持也很好, 推荐初学者多多浏览其中的内容,尤其是 Debian。
Debian 官网:https://www.debian.org
Ubuntu 官网:https://ubuntu.com
Fedora 派系
Fedora 派系下包含 Fedora、Red Hat Linux、Red Hat Enterprise(RHEL)、CentOS 等发行版。
Red Hat Linux 是由 Red Hat(红帽)发行的个人版本 Linux,现已停止开发, 他们转而开发主要应用于服务器领域的 Red Hat
EnterpriseLinux(RHEL), 即红帽企业版 Linux。使用 RHEL 的好处是获得安全稳定的技术支持以及企业级的保证,
这正是众多服务器应用场景的核心需求,红帽公司也正是依靠提供这些服务成为了最赚钱的 Linux 公司。 现红帽公司已被 IBM 收购。
Fedora 发行版是由社区基于 RHEL 构建的,由 Red Hat 公司赞助,它大胆采用和验证最新的技术, 部分经验证的技术会被加入至 RHEL。因而
Fedora 与 RHEL 是互惠互利关系。 从另一个角度看,Fedora 也被认为是 RHEL 的小白鼠版本。
CentOS 全名为 Community Enterprise Operation System, 即社区企业操作系统,它由红帽遵循开源协议公开的 RHEL 源代码构建而成,
它们的区别在于 CentOS 提供免费的长期升级和更新服务,使用 CentOS 相当于使用 RHEL 而不寻求红帽的技术支持, CentOS
在我国的小型服务器领域应用非常广泛。
Open SUSE 派系
SUSE 派系下包含 SUSE、SUSE Linux Enterprise Server(SLES)、openSUSE 等发行版, 它们的关系类似于 Fedora, Red Hat Enterprise
Linux(RHEL) 和 CentOS 的关系。 相对 RedHat 专长 x86 架构的计算机来说,SUSE 在诞生之初就瞄准大型机,所以 SUSE
在大型服务器领域占有一席之地。
麒麟
由于军政系统对信息安全要求严格,我国基于 Linux 内核构建了中标麒麟、优麒麟、银河麒麟等发行版, 其特色主要在于自主、风险可控。
Linux 文件系统是一个用于管理和组织计算机文件和目录的软件系统。它采用树形结构,从根目录开始,用户可以创建、删除、移动、复制和重命名文件或目录。Linux
支持多种文件系统,如 ext、ext2、ext3、ext4、ReiserFS、NTFS 等,并通过虚拟文件系统的形式屏蔽各种文件系统的差异,提供统一的接口和操作方式。在
Linux 文件系统中,每个文件都包含属性信息和数据,属性信息包括文件的权限、所有者、大小、创建时间等。
ext 是 Linux 系统上的文件系统,具有多种版本,如 ext2、ext3、ext4 等。它是 Linux 操作系统的默认文件系统,为 Linux
提供了强大的文件系统支持。ext 文件系统支持访问控制列表(ACL)和日志记录等高级功能,并具有强大的文件系统恢复能力。
NTFS(New Technology File System)是由微软开发的一种高性能的文件系统,主要用于 Windows 操作系统。NTFS
支持文件和目录的权限控制,可以设置不同用户对文件的访问权限,保护数据的安全性。它还支持文件加密和压缩,可以对文件进行加密,防止未经授权的访问。同时,NTFS
还具有容错性,可以通过磁盘镜像和日志功能来保护数据的完整性。
Linux 文件系统的基本结构是树状结构,只有一个根目录,其中含有下级子目录或文件的信息。子目录中又可以包含更多的子目录或者文件的信息,这样一层一层地延伸下去,构成一棵倒置的树。Linux
文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录或文件。Linux
文件系统通过这种层级结构来组织和管理文件和目录,使得用户可以方便地定位和访问系统中的任何文件或目录。
Linux 系统根目录:
上图中这些文件或文件夹都位于“/”目录下, 而它们的路径分别为“/bin、/boot、/cdrom、/initrd.img”等。
除了根目录,对开发者而言最重要的就是用户目录了
Ubuntu 和 Win10 希望用户使用时个人的内容都存放在个人目录,主要是为了与系统核心文件区分开来,
因为他们通常不希望普通用户修改系统相关的内容,而且个人目录分开也便于系统升级。
不过按照大多数人使用 Windows 的习惯,通常会另外新建磁盘来专门存储不同的内容, 如 D、E、F、G 编号分别为软件盘、工作资料盘、游戏盘、视频盘等。
而当我们希望在 Ubuntu 下尝试复制这种习惯时,发现它并没有列出众多的磁盘, 它所有的内容都位于根目录下。
如下所示是 Linux 个人目录
Linux 用户目录通常指的是在文件系统中用于存储特定用户数据的目录。在 Linux
系统中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,路径为/home/用户名。这个目录用于存储用户的个人文件和配置文件,例如文档、图片、音乐、邮件等。用户可以在其用户目录下创建、删除、修改文件,并且可以设置文件的访问权限以保护个人隐私。
在早期的 Windows 操作系统,如 Windows 95 和 Windows XP,都是单用户操作系统。 所谓的单用户操作系统,就是说在同一时间,只能由一个用户独自享用系统的全部硬件和软件资源。
我们现在所使用的 win7、win8 以及 win10 都是多用户操作系统,与单用户操作系统恰恰相反, 它支持多个用户能够同时访问和使用同一台计算机的全部硬件和软件资源,
在众多用户中,其中的一个用户 administrator 具有管理其他用户账号和计算机的全部资源的权限。
我们在安装软件的时候,经常会看到“要以管理员身份运行该软件”,又或者是如下图, 实际上就是要求我们给予程序一些管理员的权限。
Linux 操作系统,同样也是多用户操作系统,其中具有管理其他用户和计算机的全部资源的用户, 称为 root。前面提及过安卓系统,实质上也是基于
Linux,安卓手机上常常提到的 root 权限, 也就是获取最高的权限,就跟电脑获取超级管理员的权限是一样的。
在 Linux 中,每个用户都有一个特定的编号——UID,用于标识一个系统用户。Linux 将标号 0 分配给 root 用户的 uid,
它可以分配给每个用户不同的权限,因此每个用户可进行的操作也不同。
我们可以通过 id 命令来查看当前用户的 UID 值:
Linux 的用户组是用于管理用户权限的一种方式,可以将具有相同权限的用户归类到一个组中,方便进行权限管理和控制。每个用户都可以属于一个或多个用户组,而每个文件或目录也可以设置一个或多个用户组作为其属组。Linux
系统通过用户组来实现文件访问权限的控制,不同用户组的成员具有不同的文件访问权限。同时,用户组也可以用于系统资源的分配和管理,提高系统的安全性和稳定性。
不同的用户组相当于公司的不同职级,对于不同的文件拥有不同的访问权限,这里就引出了文件权限的概念。
Linux 文件权限是指不同用户或用户组对文件或目录的访问权限。Linux 系统中的每个文件和目录都具有一组权限,这些权限决定了哪些用户可以访问文件或目录,以及可以执行哪些操作。
Linux 文件权限可以分为四类:可读、可写、可执行和没有权限。分别用字符
r、w、x、-表示。对于每个文件或目录,都可以设置所有者、所属组织成员和其他用户的权限。通过修改文件权限,可以控制不同用户对文件或目录的访问和操作,保护系统的安全性和稳定性。
在 Linux 系统中,可以使用命令如chmod来修改文件或目录的权限和所有权。
chmod命令是 Linux 系统中用于修改文件或目录权限的命令。通过chmod命令,可以更改文件或目录的读取、写入和执行权限,以及设置特殊权限如
setuid、setgid 和 sticky 位。
chmod命令的语法如下:
chmod <权限模式> <文件或目录>
其中,<权限模式>表示要设置的权限,可以使用数字表示(例如 755)或符号表示(例如
u+rwx,g+rx,o+rx)。数字表示中,每个数字代表一组权限,依次表示所有者、所属组和其他用户的权限。符号表示中,u、g、o
分别代表所有者、所属组和其他用户,a 代表所有用户,+、-、=分别表示添加、删除和设置权限。
例如,要将文件example.txt设置为所有者具有读写权限,所属组和其他用户具有读权限,可以使用以下命令:
chmod u=rw,g=r,o=r example.txt
这将把文件example.txt的权限设置为-rw-r–r–。
使用桌面 Ubuntu 的一大好处是它对用户很友好,日常的基础应用都可以通过它的图形界面完成,
但界面做得再完善,还是有很多操作无法通过界面完成的,因为绝大部分程序本身根本就不提供界面,
或者界面只提供一小部分常用操作。但是几乎所有的程序都能通过命令行来调用运行, 并且通过命令行提供丰富的操作选项。
在早期的 Unix 系统与用户就是通过 Shell 进行交互的,如下图所示,Shell 对外接受用户输入的命令, 对内通过“系统调用”传递给内核,内核执行操作后把输出通过
Shell 呈现给用户,也就是说, Shell 就是一个中间人。而 Shell 的英文原意为“壳”,也是为了把它与内核区分开来。
在平时的交流中,有时我们会说打开 Shell、终端(Terminal)或控制台(Console), 严格来说它们实际上不是同样的东西,但只要明白,当我们说打开
Shell、终端或控制台的时候, 通常就是为了使用命令行控制系统。它们的严格区分如下,了解下即可:
Shell:指命令行解释器,常见的解释器有 bash,sh,在 Ubuntu 系统默认用的是 bash 解释器, 所以有时说 bash 也是指命令行。
终端(Terminal):通常指用来运行 Shell 的程序,视场景的不同有不一样的名称, 如 Ubuntu 系统自带的叫本地终端,嵌入式开发板常常提供串口进行输入输出的串口终端,
通过网络访问的 ssh 终端。
控制台(Console):特指某些终端,通常是指它的物理形态,如带键盘和显示器的物理设备。
在 Linux 系统中,可以通过多种方式打开终端,以下是几种常见的方法:
使用快捷键:通常默认的终端快捷键是 Ctrl + Alt + T,按下这个组合键可以快速打开一个新的终端窗口。
使用应用程序菜单:不同的 Linux 发行版可能有不同的桌面环境和应用程序菜单,但通常可以在应用程序菜单中找到“终端”或“终端模拟器”选项来打开终端应用程序。
使用启动器或搜索功能:有些桌面环境提供了启动器或搜索功能,在其中输入“终端”或相关关键词,然后选择相应的终端应用程序来打开终端。
如上所示,左边的我们称为命令行提示符,终端命令行提示符是 Linux
系统中用于表示当前登录用户和当前工作目录的特殊符号。通常,命令行提示符包含用户名、主机名、当前工作目录和一些其他信息。在
Linux 系统中,可以通过修改环境变量来定制命令行提示符的显示方式。默认情况下,命令行提示符是以“$”符号结尾,表示当前用户是普通用户;如果当前用户是
root 用户,则以“#”符号结尾。
Linux 常用的命令行指令有很多,以下是一些常见的指令:
输入上述命令,演示结果如下:
Linux 命令行的格式通常遵循以下结构:command [options] [arguments]
。其中,command表示要执行的命令名称,options表示命令的选项,用于修改命令的行为或指定一些参数设置,而arguments表示命令操作的对象或者需要处理的数据,例如文件名、目录名等。选项通常以短横线(-)或双短横线(–)作为前缀,不同的命令可能支持不同的选项和参数。在实际使用过程中,需要熟练掌握各种命令及其选项和参数的用法,并注意遵守系统安全规则和最佳实践。
Linux 下系统本身就支持数不清的命令,不同的命令又带不同的选项, 输入的参数往往又有不同的意义,除了丢下一句“用多了就会记住”这不负责任的说法外,
使用命令其实还是有一些门道的。
每个命令都会带有一个“-h” 或者“–help”的参数,可以用来打印一些帮助说明。
Linux 命令自动补全是一种方便的功能,可以在输入命令时自动补全命令或参数,减少输入错误和提高效率。在大多数 Linux
发行版中,命令行界面默认支持自动补全功能。
使用自动补全功能时,只需输入命令或参数的前几个字符,然后按下 Tab 键,系统会自动列出与输入字符匹配的所有命令或参数,可以选择其中一个进行补全。如果有多个匹配项,可以多次按下
Tab 键切换不同的匹配项。
需要注意的是,自动补全功能可能受到当前环境变量和配置文件的影响,因此不同的系统或用户可能会有不同的自动补全行为。
在 windows 操作系统中,我们要想安装某个软件的时候,只要点开相应的 exe 文件,一直按“下一步”,
最后点“完成”,这样就可以在我们电脑上使用这个软件了。前面我们也提到过,Ubuntu 提供了一个软件商店,
虽然它也可以提供软件的下载,并且能够自动安装,但是有些软件并不一定能够在里面搜索得到, 那只能以源码的方式来安装软件。采用源码的安装方式,
都需要检测当前的系统环境,设置编译的参数,如加入/剔除某个模块等,这样的安装方式就显得非常繁琐。
目前,大多数类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件, 软件开发者先在固定的硬件平台上将需要安装或升级的软件编译好,
然后再将软件的所有相关的文件打包存放在公开的服务器中。用户想要安装某个软件时,通过包的形式进行分发,
包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档,当用户需要时, 可以运行特定的指令来安装。负责这部分工作内容的工具被称为包管理工具,
包管理工具除了安装软件外,它还负责更新已经安装的包。
在 Linux 操作系统中,最常见的两种包分别是 deb 和 rpm。
deb:
deb 是 Debian 软件包的文件格式,常用于 Ubuntu、Debian 以及基于这两者的其他 Linux 发行版。deb 文件包含了软件的安装文件、配置文件和依赖关系等信息。
安装 deb 文件的方法有多种,以下是几种常见的安装方法:
使用 dpkg 命令:dpkg 是 Debian 的软件包管理工具,可以从命令行安装 deb 文件。首先,打开终端,然后导航到 deb
文件所在的目录,使用以下命令进行安装:sudo dpkg -i package_name.deb,其中 package_name.deb 是你要安装的 deb 文件的名称。
使用 apt 工具:在新版的 Debian 或 Ubuntu 系统中,apt 工具支持直接安装 deb 包,同时也会自动处理依赖关系。你可以使用以下命令:sudo
apt install ./package_name.deb,注意文件名前的./,表示该文件在当前目录下。
使用 GDebi 工具:GDebi 是一个简单的工具,为 deb 文件提供了图形界面安装方式,同时也会处理依赖关系。你可以使用以下命令安装
GDebi:sudo apt-get install gdebi。安装完成后,右键点击你要安装的 deb 文件,选择使用 GDebi 安装。
dpkg 是一个底层的包管理工具,主要用于对已下载到本地和已经安装的软件包进行管理。 在它之上的 apt(Advanced Package
Tool)包管理工具,其功能则更加丰富和方便使用, 使用 apt 能够自动从互联网的软件仓库中搜索、安装、升级、卸载软件,它会咨询软件仓库,
并能安装软件时的模块及依赖问题。
如果是使用 apt 工具安装某个软件,直接使用如下命令即可,它会自动下载并安装软件:
sudo apt-get install 软件名
概括起来可以这么理解,deb 是软件包,dpkg 是手动安装工具,apt 是自动安装工具。
rpm:
在 RedHat,Fedora,Centos 等派系的 Linux 发行版中, 通常使用 rpm(RedHat Package Manager)形式的软件包
如果是使用 apt 工具安装某个软件,直接使用如下命令即可,它会自动下载并安装软件:
rpm -ivh xxxx.rpm
概括起来可以这么理解,deb 是软件包,dpkg 是手动安装工具,apt 是自动安装工具。
类似地,在 RedHat,Fedora,Centos 等派系的 Linux 发行版中, 通常使用 rpm(RedHat Package Manager)形式的软件包,若下载了 rpm
软件包,可使用如下命令进行安装,其中 xxxx.rpm 为要安装的软件包的名字:
rpm -ivh xxxx.rpm
命令中的 rpm 与 dpkg 的功能类似,同样是主要用于对已下载到本地和已经安装的软件包进行管理。 在它之上的 yum(Yellow dog
Updater, Modified)包管理工具,功能与 apt 工具类似, 它会咨询软件仓库,并能安装软件时的模块及依赖问题。使用 yum
安装软件的命令如下,同样地,它会自动下载并完成安装:
yum install 软件名
APT(Advanced Packaging Tool)是一个用于管理 Debian 和 Ubuntu
系统中软件包的工具。它提供了一套命令行工具,使系统管理员能够轻松地安装、升级和删除软件包,同时还能够解决依赖关系和处理软件包的存储库。以下是
apt 工具的一些常见用法:
apt 工具是 Linux 系统中管理软件包的重要工具,能够帮助用户更方便、更快捷地管理软件包和依赖关系。
使用 apt-get install 安装软件时,可注意到它是从 Ubuntu 官方源地址下载的, 但 Ubuntu
默认官方的软件仓库都设置在国外,这种情况下经常出现安装更新缓慢甚至下载超时等异常。
实际上,国内有许多第三方软件仓库镜像源,可以从这些国内仓库安装软件工具,加快下载速度。
常用的国内镜像源有:
清华大学镜像源: https://mirrors.tuna.tsinghua.edu.cn
中国科技大学镜像源: https://mirrors.ustc.edu.cn
阿里云镜像源: https://opsx.alibaba.com/mirror