基础入门
操作系统
操作系统是计算机最基本的系统软件,它负责管理计算机硬件资源,提供基本操作接口,并负责管理和控制计算机的各种硬件和软件资源。操作系统是用户和计算机硬件之间的接口,它提供了许多基本的系统服务,如进程管理、内存管理、文件管理、设备管理等。此外,操作系统还提供了许多重要的功能,如并发性、虚拟化、容错性和安全性等,以确保计算机系统的稳定性和可靠性。不同的操作系统有不同的特点和功能,它们适用于不同的应用场景和需求。常见的操作系统包括Windows、Linux、macOS等。
Linux
Linux是一种开源的类Unix操作系统内核,最早由芬兰计算机科学家Linus Torvalds于1991年开发。Linux内核是构建在Unix操作系统设计原理的基础上,以开放源代码的方式发布,允许用户自由使用、修改和分发。
Linux操作系统具有以下特点
- 开源性:Linux操作系统的内核和大部分组件都是开源的,用户可以自由查看、修改和分发代码,促进了技术共享和协作。
- 多样性:由于Linux内核的开源性,许多不同的Linux发行版(如Ubuntu、Fedora、CentOS等)根据自己的需求和目标构建了自己的Linux操作系统,以适应各种应用场景。
- 稳定性和安全性:Linux操作系统在设计上注重稳定性和安全性,在服务器和嵌入式系统等关键领域广泛应用。开放的编程环境也促进了广大技术人员对Linux系统的安全性进行审核和测试,使其更加可靠。
- 高度可定制性:Linux操作系统允许用户根据自己的需求和偏好进行自定义和配置,从底层内核选项到用户界面都可以进行灵活调整。
- 大型开发社区:Linux拥有庞大的用户和开发者社区,用户可以从社区中获取技术支持和解决方案,分享和共享经验。
Linux已广泛应用于各个领域,包括服务器、嵌入式系统、移动设备、超级计算机等。它成为了世界上最流行的开源操作系统之一,并为许多人提供了无费且可定制的操作系统解决方案。
虚拟机
作为一名新人,我相信大家电脑肯定都是window系统,或者是苹果电脑的mac系统,应该很少有人使用Linux系统吧,如果给电脑安装Linux系统,那么大家日常使用电脑肯定受影响。所以有了虚拟机,可以在一台物理计算机上通过软件模拟出多台虚拟计算机,每台虚拟机都具有自己的操作系统、应用程序以及资源。虚拟机可以提供一种隔离的环境,在同一台物理计算机上运行多个操作系统和软件,实现虚拟化技术。
Linux入门
Linux的起源和发展历史
Linux是一种基于Unix的开源操作系统,由芬兰计算机科学家Linus Torvalds于1991年首次发布。
- 1969年:Unix操作系统由AT&T贝尔实验室的Ken Thompson和Dennis Ritchie开发。
- 1983年:Richard Stallman发起自由软件运动,并创建了GNU计划,旨在开发一个完全自由的操作系统。
- 1991年:Linus Torvalds发布了Linux内核的第一个版本,基于Unix的设计理念,并采用C语言编写。
- 1992年:Linux内核与GNU计划相结合,诞生了第一个完整的Linux操作系统。
- 1990年代中期:Linux开始在服务器领域得到广泛应用,同时也逐渐在个人电脑市场上崛起。
- 2000年代:Linux在服务器领域占据主导地位,并开始进入嵌入式设备、移动设备和超级计算机等领域。
- 2010年代:Linux成为了全球最受欢迎的操作系统之一,广泛应用于云计算、大数据、物联网等领域。
Linux的发展历程是一个不断演进的过程,从最初的Unix操作系统到GNU计划,再到Linus Torvalds发布Linux内核,经历了一系列的发展和改进,最终成为了今天全球最受欢迎的操作系统之一。
Linux基础指令
1. 文件操作指令:
- ls:列出目录中的文件和子目录。
- cd:更改当前目录。
- pwd:打印当前工作目录。
- mkdir:创建新目录。
- rmdir:删除空目录。
- rm:删除文件或目录。
- cp:复制文件或目录。
- mv:移动文件或目录。
- touch:创建文件。
2. 系统管理指令:
- shutdown:关闭系统。
- reboot:重启系统。
- logout:注销用户。
3. 文件查看指令:
- cat:查看文件内容。
- more:分屏查看文件内容。
- less:分屏查看文件内容。
- tail:查看文件尾部内容。
- grep:查找文件中包含指定字符串的行。
4. 压缩与解压缩指令:
- gzip:压缩文件。
- unzip:解压压缩文件。
- rar:压缩和解压文件。
- zip:压缩文件。
5. 网络操作指令:
- ifconfig:查看和配置网络接口。
- ping:测试网络连通性。
- traceroute:显示数据包在网络上的路径。
- netstat:查看网络状态信息。
6. 文件权限指令:
- chmod:修改文件或目录的权限。
- chown:修改文件或目录的所有者。
7. 用户管理指令:
- useradd:创建用户。
- userdel:删除用户。
- usermod:修改用户信息。
- passwd:修改用户密码。
8. 系统日志指令:
- dmesg:查看系统内核缓冲区的消息。
- tail:查看日志文件。
- grep:在日志文件中查找指定内容。
9. 文件查找指令:
- find:在指定目录下查找文件。
- locate:快速查找文件和目录。
- updatedb:维护数据库,用于加速locate命令的查询速度。
10. 文本处理指令:
- wc:统计文件的行数、词数和字节数。
- tail:查看文件尾部内容。
- head:查看文件头部内容。
- grep:查找文件中包含指定字符串的行。
- sed:流编辑器,用于对文本文件进行处理。
- AWK:文本分析工具,用于处理文本数据。
11. 系统性能测试指令:
- ping:测试网络连通性。
- df:查看磁盘空间使用情况。
- du:查看文件和目录占用的磁盘空间。
- vmstat:查看系统虚拟内存状态。
- iostat:查看系统磁盘I/O状态。
12. 软件包管理指令:
- rpm:RPM包管理器,用于安装、卸载和管理Linux软件包。
- yum:基于RPM的软件包管理器,用于安装、卸载和管理Linux软件包。
- apt:Debian和Ubuntu软件包管理器,用于安装、卸载和管理Linux软件包。
13. 系统安全指令:
- ssh:安全远程登录。
- scp:安全复制文件。
- sudo:以其他用户身份执行命令。
- chmod:修改文件和目录的权限。
14. 图形界面指令:
- startx:启动图形界面。
- startkde:启动KDE桌面环境。
- startxfce4:启动Xfce桌面环境。
有人可能看的云里雾里,但没事,我随机挑几个指令实验给大家看
大家看,我输入ls,终端就会列出目录中的文件和子目录。
那么为什么要指令呢,这个打开看看就知道有哪些文件了。注意!!!这是Ubuntu,可视化界面,如果是xshell呢!
这是一块米联客开发板,开机后只有终端,没有可视化界面。
普通的嵌入式系统是没用可视化界面的,我们不会指令,便寸步难行。
Linux操作系统的组成
Linux操作系统主要是由四大部分组成
- 内核
- shell
- 文件系统
- 应用程序
他们关系见上图,随便画画,将就看看吧奥,别挑剔了奥
我来解释一下啥叫内核
Linux内核是Linux操作系统最核心的部分,它负责管理系统的基本资源和提供用户接口。它是操作系统的核心,管理进程、内存、文件和设备等资源,并控制硬件和软件之间的交互。
我们用的是4.19版本的内核
通过编译,可以做成镜像
就是这个东西啦。
Linux内核源码
arch | 架构相关目录 |
block | 块设备相关目录 |
crypto | 加密相关目录 |
documentation | 文档目录 |
drivers | 驱动目录 |
firmeare | 固件目录 |
fs | 文件系统目录 |
include | 头文件相关目录 |
init | 初始化相关目录 |
kernel | 内核相关目录 |
重点讲一下arch和drivers文件,其他自己去看,实在不行有documentation文件供参考
arch文件夹存放了不同架构的相关代码和配置文件,随便打开一个
我打开了arm和loongarch架构,arm现在是市场主流架构,loongarch是国产架构。注意看,所有架构都包含,boot,config,kernel,lib,kconfig文件或目录。这些文件有什么作用,自己百度去,太多了,我讲不过来……
接下来我们看看drivers文件
Linux内核的drivers文件夹是用来存放不同硬件设备的驱动程序的文件夹。这个文件夹包含了多个子文件夹,每个子文件夹代表了一种类型的硬件设备或者设备驱动程序的框架。
例如,drivers/net子文件夹包含了网络设备的驱动程序,drivers/usb子文件夹包含了USB设备的驱动程序,drivers/gpio子文件夹包含了GPIO设备的驱动程序等等。
在每个子文件夹中,还可能存在多个子文件夹,用来区分不同的硬件品牌或者型号。比如,在drivers/net子文件夹中,可以找到ethernet子文件夹,再进入ethernet子文件夹,可以看到多个文件夹,每个文件夹代表了一种不同的以太网卡驱动程序。
此外,drivers文件夹中还有一些重要的文件如Makefile、Kconfig、Kbuild等,用于编译和配置驱动程序。
Linux内核的drivers文件夹是一个包含了各种硬件设备驱动程序的目录,用于支持不同类型的硬件设备的正常运行。这个很重要,为什么重要呢?因为我觉得!
Linux文件系统
Linux的文件系统层次结构定义了在Linux操作系统中,各个文件和目录的组织结构。这个层次结构是一个树形结构,从根目录开始,包含了多个目录和子目录,以及文件和链接等。
以下是Linux文件系统层次结构的主要目录:
- /:根目录,包含了整个文件系统的根。
- bin:二进制可执行文件,包含了常用的系统命令。
- boot:引导加载程序的配置文件和静态文件。
- dev:设备文件,包含了系统中的各种设备文件和设备驱动程序。
- etc:系统配置文件和目录,包含了系统的各种配置文件和子目录,如网络配置、用户配置等。
- home:用户主目录,包含了系统中每个用户的主目录。
- lib:共享库文件,包含了系统和应用程序所需的共享库文件。
- media:可移动媒体设备的挂载点,用于挂载光盘、USB驱动器等可移动设备。
- mnt:临时挂载点,用于临时挂载其他文件系统。
- opt:可选应用程序软件包的安装目录。
- proc:虚拟文件系统,提供了内核和进程的信息。
- root:超级用户(root用户)的主目录。
- sbin:系统二进制可执行文件,包含了系统管理员使用的命令。
- tmp:临时文件目录,包含了各种临时文件。
- usr:UNIX软件资源目录,包含了系统的共享文件、库文件、头文件以及应用程序。
- var:可变数据目录,包含了系统运行时生成的文件、日志文件等。
这些目录及其子目录的组织方式和内容是根据Linux标准文件系统层次结构(Filesystem Hierarchy Standard,FHS)来定义的,以保证不同的Linux发行版在文件系统组织上的一致性。
Linux软链接和硬链接
刚刚介绍了那么多文件,他们肯定要连接的,接下来我们介绍一下Linux连接
硬链接
在Linux中,硬链接(hard link)是一种特殊的文件连接方式,可以创建多个文件名指向同一个inode(索引节点),从而共享同一份数据和元数据。与软链接不同,硬链接不受原始文件的更改或删除的影响。
创建硬链接的命令是`ln`,使用`-l`选项。以下是创建硬链接的示例:
ln 原始文件 硬链接文件名
注意,原始文件和硬链接文件必须位于同一文件系统
我们删除了文件1时候,文件2不会受影响,同理文件2被删,文件1也不会受影响。
软链接
Linux软链接(symbolic link)是一种特殊类型的文件,也称为符号链接或软链接。它是一种指向另一个文件或目录的路径,允许用户通过软链接来访问和操作目标文件或目录。
软链接文件通常以符号链接的特殊文件扩展名(通常是`.lnk`或`~`)结尾。创建软链接的命令是`ln`。可以使用以下命令创建软链接:
ln -s 目标文件(或目录) 软链接文件名
其实文件2只是文件1的一个快捷方式,它指向的是文件1,所以显示的是 文件1 的内容,但其实文件2的inode与文件1并不相同。如果我们删除了 文件2的话,文件1是不会受影响的,但如果删除文件1的话,文件2就会变成死链接,因为指向的文件不见了。
Linux用户和权限管理
基本上分成两种用户,一种是普通用户,还有一种是超级用户,也就是root。废话不多说直接上图
我们在虚拟机打开一个终端
注意看Ubuntu前面名称,uisrc就是普通用户,当然也可以叫其他名字,除了root
如果更换成超级用户,指令前加sudo,或者登录上去
ps:登录前一定要记得注册哦!
makefile
makefile文件主要是调用make工具,编译文件,通常一个文件夹下就有几十个文件甚至是几十个文件夹,看下图,我只是打开其中一个,其实还有几千个文件夹,就问你多不多!
如果挨个对此进行编译,比如编译hello.c文件,我们就需要运行指令
gcc -c hello.c -o hello.o
全部编译成功再做成镜像,估计没个几十个小时,你出不来的。所以我们就用到了makefile文件,把需要编译的文件或者文件夹都放进去,就简单很多。
shell
shell介绍
shell是一种命令解释器,是用户与计算机操作系统进行交互的一种方式,它接受用户的命令,并将其转化为操作系统能够理解和执行的形式,shell命令和Linux指令是一样的东西。Shell也可以是一种脚本语言,允许用户编写一系列的命令和操作,以便自动化任务和批量任务。
shell脚本作用
镜像肯定要进行编译,编译肯定要有相应的步骤,如果一步一步运行,肯定耗时耗力,打个比方,我们编译内核,通常编译内核要编译内容
- * 内核源代码
- * 内核模块
- * 内核压缩文件(用于安装到目标设备)
这些内容编译步骤肯定不能一步到位,而且指令复杂,使用极不方便。
这时候如果我们拥有脚本,就可以很方便运行了。比如
只需要输入指令make_kernel.sh即可实现内核编译。当然,make_kernel.sh文件需要自己编写。
至于如何编写,自己去菜鸟教程学习,一天搞定。
Linux系统管理
Linux系统管理是指对Linux操作系统进行配置、维护、监控和优化的过程。它包括了对硬件、软件、网络和用户等方面进行管理。
以下是一些Linux系统管理任务:
1. 用户管理:创建、删除和管理用户账户,设置用户权限和所有权。
2. 软件包管理:安装、升级和删除软件包,管理软件库。
3. 系统配置:配置系统参数,如时区、网络设置、文件系统挂载点等。
4. 网络管理:配置和管理网络接口、路由、防火墙等。
5. 文件系统管理:管理磁盘空间创建和删除文件系统、挂载和卸载文件系统。
6. 性能监控:监控系统资源使用情况,如CPU、内存、磁盘和网络使用情况。
7. 安全管理:配置和监控系统安全,如防火墙、加密和访问控制等。
Linux系统管理可以通过命令行工具、图形化界面或第三方软件来实现。例如,使用`useradd`命令可以创建用户账户使用`yum`命令可以安装软件包,使用`/etc/init.d/services`可以管理服务,使用`top`命令可以监控系统性能,使用`ssh`命令可以远程连接到服务器等。
Linux系统管理对于维护Linux操作系统的稳定性和安全性非常重要。它可以让管理员更好地控制和监视系统,并及时发现和解决潜在的问题。