希望你开心,希望你健康,希望你幸福,希望你点赞!
最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!
喵喵喵,你对我真的很重要!
内建命令
Linux 内建命令是指那些直接由操作系统核心提供,无需额外安装就可以在 Linux 环境下运行的基本命令。它们通常与 Linux 的系统管理、文件操作、网络管理等核心功能相关,例如
ls
,cd
,pwd
,cat
,mkdir
等。这些命令是 Bash 或其他 shell 环境默认支持的,不需要额外配置或第三方软件包就能使用。内建命令通常执行效率较高,因为它们是直接集成在内核或shell环境中的。
echo $?
在Linux系统中,
echo $?
是一个常用的命令行操作,它用于检查上一条命令的退出状态码(Return Code)。当你运行一个命令后,如果该命令成功执行,那么 $? 将显示0;如果命令执行失败, $? 就会显示相应的错误码,这个值通常是非零的。例如,如果你尝试运行一个不存在的命令,echo $?
将返回一个非零值,表示命令执行出错。通过这种方式,你可以判断前一条命令是否成功完成。
进程僵尸
进程僵尸(Zombie Process),在计算机科学特别是操作系统中,是指那些已经结束但其父进程尚未通过wait()或waitpid()系统调用收集其退出状态的子进程。当一个子进程正常结束,它会产生一个退出状态,这个状态通常包含一些关于子进程结束原因的信息。如果父进程没有及时接收到这个信息并清除子进程的描述符,子进程就会变成僵尸进程。
僵尸进程不会占用额外的内存或CPU资源,但它会累积在系统中,增加系统资源管理的复杂性,因为每个僵尸进程都需要保留一份记录。此外,过多的僵尸进程可能会导致系统资源统计错误,因为它们虽然没有活动,但在计数上还是存在的。
正确的做法是,父进程应该定期检查是否有僵尸进程,一旦发现就调用wait()或waitpid()清理它们,以维护系统的健康和性能。
export
在Linux环境下,
export
是一个命令行工具,主要用于设置环境变量,并使其在当前shell会话以及所有由此启动的子shell中有效。当你在一个脚本中设置了某个环境变量,然后希望在后续的命令中也能访问到这个变量,可以使用export
关键字。例如,如果你在bash shell中运行:
Bash
export MY_VAR="some value"
那么,无论你在终端中执行多少次
source
那个脚本,或者是直接打开一个新的shell窗口,MY_VAR
这个环境变量都会存在,并显示为"some value"。如果没有export
,则默认该变量只在当前会话可见,新启动的shell将不会继承它的值。另外,
export
还可用于导出函数或路径别名给其他用户,如:Bash
export -f my_function export PATH=$PATH:/path/to/my/script
这样其他用户就可以直接使用
my_function
,并且他们的PATH
也会包含你的自定义路径。
substr()
在C++中,
substr()
是一个标准库函数,它属于std::string
类,用于提取字符串中的子串。这个函数的基本语法如下:Cpp
std::string substr(size_type pos, size_type len = npos)
其中:
pos
:起始位置(包含),从0开始计数,如果设置为npos
,默认取字符串开头。len
:子串长度(可选)。如果不指定,表示一直提取到字符串的结尾。例如,假设有一个字符串
s
,你可以这样获取它的前5个字符作为子串:Cpp
std::string s = "Hello, World!"; std::string sub = s.substr(0, 5); // 子串为 "Hello"
如果省略第二个参数,
substr
会截取从给定位置到最后的全部字符:Cpp
std::string tail = s.substr(7); // 子串为 "World!"
值得注意的是,如果起始位置超过字符串长度,或者长度大于剩余字符数,
substr()
将不会抛出异常,而是返回空字符串。
cd
cd
是Linux命令行中的一个常用操作符,全称为"change directory",即"改变目录"。当你在终端中输入cd
后,通常需要跟上一个路径,它可以是你当前工作目录的一个相对路径,也可以是绝对路径。例如:
- 如果你想移动到当前目录下的某个子目录,如
cd Documents
,这会使你进入名为"Documents"的目录。- 若要直接跳转到根目录,可以输入
cd /
。- 如果你知道文件或目录的确切完整路径,比如
/home/user/Documents
,则可以直接输入cd /home/user/Documents
。通过
cd
命令,用户可以在Linux文件系统中导航并访问不同的目录。如果你不确定当前所在目录,可以使用pwd
(print working directory)命令查看。
pwd
"pwd"是Linux和Unix系统中的一个命令,全称是"print working directory",即打印工作目录或当前路径。当你在终端中输入"pwd"并回车后,它会显示你当前所在的文件夹路径,帮助用户了解他们正在操作的位置。这个命令非常实用,特别是在需要切换目录或者执行特定操作前确认位置的时候。
ll
在Linux系统中,"ll" 是 "ls -l" 的简写命令,它是一个用于查看文件和目录详细信息的命令行工具。"ls" 是列出(list)的基本命令,加上选项 "-l" 后,会显示出每个文件和目录的长格式列表,包括文件的权限、所有者、所属组、大小、修改时间、以及名称。这个长格式列表对于了解文件属性非常有用。
具体的信息展示如下:
- 第一列:文件类型,比如
-d
表示目录,-
表示普通文件等。- 第二到第三列:用户和用户组的所有权。
- 第四列:文件的权限,采用三位数字表示,每一位对应 rwx 权限。
- 第五列:文件大小。
- 第六列:月份和日期,再加上小时、分钟和秒,表明最后的修改时间。
- 第七列:文件的名称或链接。
使用 "ll" 命令可以帮助用户更好地管理他们的文件系统,尤其是当需要查看文件属性时。
cat
"cat"是Linux系统中的一个命令行工具,全称是"concatenate",意思是合并。它主要用于将两个或更多的文本文件内容连接在一起,并将其输出到标准输出(通常是终端),也可以用于查看单个文件的内容。当你在命令行输入
cat filename.txt
时,就相当于打开了并显示该文件的全部文本。如果省略文件名,则会从标准输入读取内容。
mkdir
mkdir
是 Linux 和 Unix 系统下的一个命令,全称为 "make directory" 或 "create directory",主要用于创建新的目录。当你想要在文件系统中建立一个新的路径以便存储文件或组织文件夹时,就可以使用mkdir
命令。例如,如果你想在一个特定的位置创建一个名为 "my_folder" 的新目录,你可以输入mkdir my_folder
。如果你需要指定权限或者递归创建多级目录,还可以添加相应的选项。
Makefile
Makefile是用于管理项目构建过程的工具,它定义了规则和指令,以实现编译、链接等步骤的自动化,从而大大简化了开发者的工作。以下是对Makefile的详细介绍:
一、基本概念
- 目标(Target):需要生成的文件,例如可执行文件。
- 依赖(Dependencies):生成目标所依赖的文件或目标。
- 命令(Commands):构建目标时需要执行的命令。
Makefile是make命令所读取的配置文件,包含了构建项目的规则。其主要作用是检查项目文件的依赖关系,自动执行必要的命令,从而更新目标文件。
二、基本语法
Makefile的基本语法由规则(rule)组成,基本格式如下:
makefile复制代码
|---|-------------------------|
| | target: dependencies
|
| | command
|
- target:目标文件,可以是一个目标文件或一个动作名称(例如:all,clean)。
- dependencies:生成目标所依赖的文件或其他目标。
- command:构建目标的命令,必须以Tab键开头。
示例:
makefile复制代码
|---|-----------------------------|
| | main.o: main.cpp
|
| | g++ -c main.cpp -o main.o
|
上述规则表示,当main.o文件不存在或main.cpp被修改后,执行命令g++ -c main.cpp -o main.o
来生成main.o。
三、工作原理
make会根据Makefile中的规则,依次检查目标文件的时间戳和依赖文件的时间戳。如果依赖文件的时间戳比目标文件新,或者目标文件不存在,make就会执行对应的命令来更新目标文件。make会递归检查依赖关系,直到所有目标都更新完成。
四、变量
Makefile支持定义变量,可以简化重复的命令。变量的定义格式为:VARIABLE_NAME = value
。在引用变量时使用$(VARIABLE_NAME)
。
示例:
makefile复制代码
|---|-----------------------------------------|
| | CC = g++
|
| | CFLAGS = -Wall -g
|
| | main.o: main.cpp
|
| | $(CC) $(CFLAGS) -c main.cpp -o main.o
|
在上述例子中,使用变量$(CC)
和$(CFLAGS)
来替代具体的编译器(g++)和编译选项(-Wall -g)。
五、自动化变量
Makefile还提供了一组自动化变量,这些变量在执行规则时会自动被设置为相应的值,从而方便引用当前规则相关的文件名、目录名等信息。
- $@:代表当前规则的目标文件名。
- $<:代表当前规则的第一个依赖文件名。
- $^:代表当前规则的所有依赖文件的列表(去重)。
- $+:代表当前规则的所有依赖文件的列表(保留重复文件)。
- $*:代表当前规则的目标文件名去除后缀。
六、伪目标
伪目标(phony targets)并不是文件,而是一种命令名称,可以用于执行一些常见的操作,如清理构建文件。它们通常定义为:
makefile复制代码
|---|------------------|
| | .PHONY: clean
|
| | clean:
|
| | rm -f *.o main
|
在上述例子中,clean是一个伪目标,用于删除中间文件和可执行文件。
七、函数
Makefile函数是Makefile文件中的一种特殊语法,用于在构建过程中执行一些命令,并根据命令执行结果返回相应的值。Makefile函数可以用来定义变量、执行命令和进行条件判断等操作。Makefile函数有两种形式:内置函数和自定义函数。内置函数是由Make工具提供的一些预定义函数,如shell函数、subst函数、patsubst函数等。
八、应用案例
假设有如下文件:add.c、div.c、multi.c、sub.c和main.c,每个文件分别实现加法、除法、乘法、减法以及主程序。项目目录结构如下:
复制代码
|---|---------------------|
| | project/
|
| | ├── Makefile
|
| | ├── add.c
|
| | ├── div.c
|
| | ├── sub.c
|
| | ├── operations.h
|
| | └── main.c
|
Makefile文件内容可以如下编写:
makefile复制代码
|---|------------------------------------------------|
| | app: add.o div.o multi.o sub.o main.o
|
| | gcc add.o div.o multi.o sub.o main.o -o app
|
| | |
| | add.o: add.c
|
| | gcc -c add.c -o add.o
|
| | |
| | div.o: div.c
|
| | gcc -c div.c -o div.o
|
| | |
| | multi.o: multi.c
|
| | gcc -c multi.c -o multi.o
|
| | |
| | sub.o: sub.c
|
| | gcc -c sub.c -o sub.o
|
| | |
| | main.o: main.c
|
| | gcc -c main.c -o main.o
|
运行指令make
后,将依次编译各个源文件并链接生成可执行文件app。
希望你开心,希望你健康,希望你幸福,希望你点赞!
最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!
喵喵喵,你对我真的很重要!