Linux-全志随记
前言
Linux-全志学习过程中,遇到的第一次见的东西和一些命令的解释
一、一些命令的解释
1.ps aux | grep a.out
是一个在Unix/Linux系统中常用的命令组合,用于查找包含"a.out"关键字的进程信息。这里ps aux命令用于显示当前系统中所有运行中的进程,grep a.out则是用于过滤出包含"a.out"的行。
序号 | 参数 | 通俗解释 |
---|---|---|
1 | USER | 进程的拥有者,即哪个用户启动了该进程。 |
2 | PID | 进程的ID,每个进程都有一个唯一的ID。 |
3 | %CPU | 进程占用的CPU使用率,表示该进程使用了多少CPU资源。 |
4 | %MEM | 进程占用的内存使用率,表示进程使用了多少物理内存。 |
5 | VSZ | 进程的虚拟内存大小,表示进程可以使用的最大内存量。 |
6 | RSS | 进程的常驻内存大小,表示进程实际占用的物理内存量。 |
7 | TTY | 终端的次要装置号码,如果进程与终端相关,这里会显示终端的编号。 |
8 | STAT | 进程的状态,如R表示正在运行,S表示休眠,D表示不可中断的休眠状态等。 |
9 | START | 进程被启动的时间。 |
10 | TIME | 进程执行的总时间。 |
11 | COMMAND | 命令的名称和参数,告诉我们进程正在执行的任务或程序。 |
2. /etc
在Linux系统中,/etc路径是指系统级的配置文件存放的目录,其中包含了系统的各种配置文件。
每个字符全称是:
/:根目录
e:表达意思是"et cetera"(拉丁语),意为“其它的事情”
t:表示"tree",意为“树”
c:表示“configuration”,意为“配置”
因此,/etc路径的全称是根目录下的“其它配置文件树”。
3.Linux verbosity
“Linux verbosity"的全称是"Linux terminal verbosity”,意为:“详细级别”。
意思是指在Linux终端中输出的详细程度或详细程度的控制。通常可以通过在命令行中添加参数来控制输出的详细程度,例如使用"-v"参数来增加详细程度,或使用"-q"参数来减少详细程度。增加verbosity通常可以帮助用户了解程序的内部运行情况,减少verbosity则可以简化输出,提高可读性。
例如,在某些命令中,通过设置不同的verbosity级别,用户可以选择接收详细的调试信息、警告信息、错误信息等,从而更好地了解命令的执行过程和可能遇到的问题。
具体到Linux命令中,verbosity的常见选项包括:-h 或 --help:显示帮助信息并退出-v 或 --verbose:显示调试信息并输出更多信息-q 或 --quiet:只显示警告和错误信息,不显示进度-v 或 --version:显示应用程序版本
4.sudo apt-get install adb
通俗解释:上述命令的意思是以超级用户权限,在Ubuntu/Debian系统中使用apt-get命令下载并安装Android Debug Bridge(ADB)工具。就好比安装了一个可以让你通过电脑控制和管理手机的工具,比如你可以通过ADB工具安装应用程序、传输文件,还能够更方便地进行应用程序的调试和测试。
sudo",表示以超级用户权限执行命令
apt-get
apt-get:“Advanced Package Tool”,高级软件包工具,是Ubuntu/Debian中用于包管理的命令行工具,用于下载、安装和卸载软件包
adb
adb:“Android Debug Bridge”,ADB工具的作用是在开发和调试Android应用程序时与Android设备进行通信。它可以用于安装应用程序、复制文件、调试应用程序等操作。
5.find 、find -name
find命令可以根据需要组合不同的选项来完成各种不同的搜索任务。
格式:
find [搜索起始路径] [选项]
解释:
find 命令从指定的目录(搜索起始路径)开始递归地搜索文件系统。
[搜索起始路径] 可以是一个或多个目录,如果省略,则默认为当前目录。
[选项] 是用来指定如何搜索以及匹配哪些文件的标准。
例如:
find /home -name "example.txt" 这个命令的意思是从 /home 目录开始递归地搜索所有名字为 example.txt 的文件。
find:是命令的名字。
/home:是搜索的起点,即从这个目录及其子目录开始查找。
-name:是一个选项,告诉 find 按照文件名来匹配。
"example.txt":是要查找的文件名。
二、一些第一次见的概念
1、linux一切皆是文件,每个硬件设备“对应”一个文件,由驱动程序提供映射。
2、UDEV是什么?(面试)
3、回调函数?
4、守护进程
控制终端是与会话关联的终端设备,它是用户输入和输出的通道。
进程通常通过它的控制终端与用户交互,接收输入和向用户显示输出。
但是对于守护进程来说,它必须从任何控制终端中脱离出来,确保其独立于任何用户会话在后台运行,这样才能保证守护进程它的稳定性和安全性,不受用户直接控制和会话结束等事件的影响。用户对它执行各种各样的命令,也产生不了任何影响,就算是用户直接把守护进程kill掉,它也会自己重启。
5、Shell是什么意思?
Shell是操作系统的一个接口,提供了一个命令行界面,允许用户通过文本命令与系统交互。简单来说,Shell就像是一个桥梁,连接着用户与操作系统内核,让用户可以通过输入命令来操作和管理系统。Shell不仅可以用来启动程序、管理文件,还可以作为编程环境,支持编写复杂的shell脚本。在Unix/Linux系统中,常见的Shell有bash、zsh、fish等1。
Shell进程是什么意思?
Shell进程是指运行Shell程序的进程。当用户打开一个终端窗口或者通过SSH登录到系统时,系统会启动一个Shell进程。这个Shell进程负责接收用户在终端输入的命令,解析这些命令,并调用相应的程序或命令来执行。执行的结果再由Shell进程返回给用户,并显示在终端上。Shell进程就像是终端(用户)和操作系统之间的媒介,它使得用户能够方便地与系统进行交互1。
通俗解释
Shell:你可以把Shell想象成一个超级强大的文本命令解释器,它就像一个智能的助手,能够听懂你输入的命令,并帮你完成复杂的任务。无论是管理文件、运行程序,还是编写自动化脚本,Shell都能轻松搞定。
Shell进程:当你打开一个终端窗口,准备开始你的“命令行之旅”时,系统就会悄悄地启动一个Shell进程。这个进程就像是一个服务员,时刻准备着接收你的命令,并为你服务。你输入的每一个命令,都会被这个Shell进程接收、解析和执行,然后返回结果给你。你可以把它看作是你与操作系统(内核)之间沟通的桥梁和翻译官。
6、进程组id、会话id、终端TTY
PPID是父进程ID,PPID为0是没有父进程,因为PID为1的进程它自己就是祖先进程,linux内核启动时,它会启动一个进程,这个就是祖先进程,这个祖先进程再不断的创建fork()子进程。
PID是进程ID
PGID是进程组ID
SID是会话ID
TTY是终端,在Linux系统中,TTY是用户与系统进行交互的界面
可以把会话id想成会长,进程组id想成组长。一个公会有很多个组长,会长比组长大。,
会话是一个或多个进程组的集合。
7、会话
8、TTY
TTY是"Teletype"的缩写,最初指的是电传打字机(Teletypewriter),它曾是早期计算机通信中用于接收和发送数据的终端设备
随着计算机技术的发展,TTY逐渐演变为了一个代表终端设备的概念,它包括了物理终端、虚拟控制台和伪终端等多种形式。
在Linux系统中,TTY是用户与系统进行交互的界面,用户可以通过TTY输入命令、查看输出结果,并与程序进行交互。
通俗:
TTY允许用户通过命令行与Linux系统进行交互。用户可以在TTY中输入命令,这些命令将被发送到系统执行,然后返回结果给用户。TTY提供了用户与操作系统进行交互的界面,使得用户可以在不需要图形界面的情况下执行各种操作。在Linux服务器上,TTY是管理员进行远程管理的常用方式之一,通过SSH等工具连接到服务器的TTY,管理员可以在终端中执行命令、查看日志、管理进程等操作。
在Linux系统中,每个TTY都有一个对应的设备文件,通常位于/dev目录下,例如/dev/tty1、/dev/tty2等,这些设备文件代表了不同的虚拟控制台。用户可以通过Ctrl+Alt+F1~F6等组合键来切换不同的虚拟控制台,并在每个虚拟控制台中执行独立的登录会话。
总之,TTY是Linux系统中用户与系统进行交互的重要界面,它提供了命令行交互的能力,使得用户可以在没有图形界面的情况下执行各种系统管理任务。
三、Linux系统架构的学习
Linux系统架构
在图中看到最内层的是硬件,看到最外层的是用户常用的应用,例如firefox浏览器,evolution查看邮件,一个计算流体模型等等。
系统的硬件是物质基础,而应用简单来说就是提供服务,但是在这个两者之间还是需要一定的周折才可以。
在Linux的启动过程中,Linux它首先启动内核(kernel),所谓的内核它是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。可能你不知道,现在所有的计算机操作它都要通过内核传递给硬件。
为了方便调用内核,Linux将内核的功能接口制作成系统调用(systemcall)。系统调用看起来就像C语言的函数。用户也是可以在程序中直接调用。需要了解清楚的是Linux系统有两百多个这样的系统调用。
作为一个普通的系统用户来说,你并不需要去了解内核的复杂结构,也可以去使用内核。系统的调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。实际上一个系统调用函数就像是汉字的一个笔画。任何一个汉字都要由基本的笔画(点、横、撇等等)构成,这也就对用户有一定的规划限制。
在Linux中的命令行中输入 $man2syscalls 你就可以去查看所有的系统调用。你也可以通过 $man2read 来查看系统调用read()的说明。在这两个命令中的2这些都是表示我们要在2类(系统调用类)中查询(具体各个类是什么,我们是可以通过 $manman 看到)。
在系统中的调用提供的功能是非常的基础,因此它使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux它是定义了一些库函数(libraryroutine)来将系统调用组合成某些常用的功能。
上面的分配内存的操作,可以定义成一个库函数(像malloc()这样的函数)。比如在读取文件的时候,系统调用要求我们设置好所需要的缓冲。
用户也是可以使用StandardIO库中的读取函数。这个读取函数既负责设置缓冲,又是负责使用读取的系统调用函数。使用库函数对机器来说,它是没有太大的一个效率,但是可以把程序员从细节中解救出来。
所谓的库函数就像是汉字的偏旁部首,它由笔画组成,但使用偏旁部首更容易组成字,比如"铁"。在实际上用户也是可以不去使用库函数,而是直接调用系统函数,就像“人”字一样,它并不用偏旁部首也就可以使用。
(其实在实际上,一个操作系统要称得上是UNIX系统,它必须要拥有一些库函数,比如ISOC标准库,POSIX标准等基本的库函数)