Linux初学者必备:全面掌握核心命令

简介: Linux命令是操作系统的核心组成部分,用于管理和操作文件系统、网络、硬件资源以及执行各种任务。下面列出了一些常用的Linux命令及其基本用途,

 目录

Linux:

Linux的特点

查看系统版本信息

查看Ubuntu版本

查看内核版本

其他uname命令选项

Linux的分层结构

系统控制命令

Linux 软件包安装与管理

2.1 软件包的安装管理

2.1.1 不同Linux发行版的软件包管理机制

2.1.2 软件包分类

2.1.3 软件管理工具概览

2.2 dpkg工具详解

2.3 apt工具详解

2.4 yum工具详解

1. 更新软件包

2. 安装软件包

3. 删除软件包

4. 搜索软件包

5. 列出可用的软件包

6. 清理缓存

7. 检查更新

8. 信息查询

9. 配置YUM源

10. 安装YUM插件

Shell基础知识

3.1.1 概念

3.1.2 命令执行流程

3.1.3 Shell分类

3.2 历史记录命令

3.3 别名命令

3.4 Linux特殊字符

3.4.1 通配符

3.4.2 管道符 |

3.4.3 输入输出重定向

3.4.4 命令替换

3.5 echo命令

3.6 date命令

系统维护与用户管理命令

4.1 man 命令

4.2 su 命令

4.3 sudo 命令

4.4 df 命令

4.5 mount 命令

用户管理命令

6.1 ps 命令

6.2 top 命令

6.3 调整进程优先级

编辑

6.4 文本搜索命令 grep

6.5 kill 命令

6.6 前后台进程切换

7.1 网络命令

特殊情况处理

7.2 Ubuntu网络配置

7.2.1 桥接模式

7.2.2 NAT 模式

设置步骤:

文件系统命令

8.1 文件系统分类

8.2 根文件系统结构

8.3 显示文件内容

8.4 连接文件

8.5 文件压缩解压

数据类型与分文件编程概览

10.1 存储类型

10.1.1 extern

10.1.2 register

10.1.3 static

10.1.4 auto

10.2 数据类型总结

11. 分文件编程

11.1 头文件(.h)

11.2 源文件(.c)

示例

12.1 GCC 编译工具

12.2 GDB 调试工具

12.3 make 编译工具

12.3.1 定义

12.3.2 Makefile 格式

12.3.3 用 make 管理多个文件

12.3.4 Makefile 变量

条件编译


Linux:

Linux是一种免费且开源的类Unix操作系统,由Linus Torvalds于1991年首次发布。Linux操作系统的核心部分被称为“内核”,它是操作系统的主要组件,负责管理硬件资源和提供基本服务,如内存管理、进程调度、文件系统管理和网络功能等。除了内核之外,Linux系统还包括各种工具、库、应用程序和服务,这些通常由GNU项目和其他开源软件项目提供,共同构成了完整的Linux操作系统环境。

Linux的特点

  1. 开源性:Linux的源代码是开放的,任何人都可以查看、修改和分发其源代码,这使得Linux能够得到全球开发者的持续改进和优化。
  2. 稳定性与安全性:Linux以其高稳定性和安全性著称,这使得它在服务器市场中占据主导地位,尤其是在Web服务器、数据库服务器和超级计算机等领域。
  3. 灵活性:Linux支持多种硬件架构,从嵌入式设备到大型机,几乎可以在任何类型的硬件上运行。此外,用户可以根据需要定制自己的Linux系统。
  4. 丰富的软件生态系统:由于其开源特性,Linux拥有庞大的软件生态系统,包括办公软件、图形界面、游戏、编程工具等各种应用,许多软件都是免费提供的。
  5. 社区支持:Linux有一个庞大的社区,包括开发者、用户和技术支持人员,他们共同维护和改进Linux系统,为用户提供技术支持和解决方案。

查看系统版本信息

查看Ubuntu版本

  1. 使用  lsb_release -a 命令来查看详细的Ubuntu版本信息。
  2. 使用  cat /etc/issue 命令也可以查看Ubuntu版本信息,这是系统启动时显示的发行版信息。

查看内核版本

  1. 使用  uname -r 命令查看当前正在运行的内核版本。
  2. 使用  cat /proc/version 命令可以获取更详细的内核版本信息。

其他uname命令选项

  • uname -a 显示系统的所有信息,包括系统名称、节点名、内核版本、操作系统版本、体系结构等。
  • uname -v 显示内核编译器的版本信息。

Linux的分层结构

Linux系统大致可以分为以下几层:

  1. 应用层:包括各种应用程序和命令,用户直接与之交互。
  2. 内核层:这是操作系统的核心,负责协调硬件和软件资源,主要功能包括:
  • 进程管理:处理进程的创建、调度和终止。
  • 设备管理:管理硬件设备,如I/O设备。
  • 内存管理:管理物理内存和虚拟内存。
  • 网络管理:处理网络通信。
  • 文件系统管理:管理文件和目录。
  1. 驱动层:包含对硬件设备的直接访问接口,如字符设备驱动、块设备驱动和网络设备驱动。
  2. 硬件层:包括所有物理设备,如CPU、内存、硬盘、键盘、鼠标等。

系统控制命令

  1. 关机
  • sudo shutdown -h now :立即关机。
  • sudo shutdown -h 时间 "提示语句":定义关机时间,并显示提示语句。
  1. 重启
  • sudo shutdown -r now :立即重启。
  • sudo reboot :这也是立即重启的命令。
  • sudo shutdown -r 时间 "提示语句":定义重启时间,并显示提示语句。
  1. 取消定时操作
  • sudo shutdown -c :取消正在进行的定时关机或重启操作。

Linux 软件包安装与管理

2.1 软件包的安装管理

2.1.1 不同Linux发行版的软件包管理机制

  • Debian系列: 使用.deb软件包格式,管理工具为dpkgapt
  • Red Hat系列: 使用rpm软件包管理机制(Red Hat Package Manager)。
  • CentOs系列: 使用rpm软件包管理机制(Red Hat Package Manager),管理工具为yum。

2.1.2 软件包分类

  • 二进制软件包:通常为.deb.rpm格式,可以直接安装而无需编译。
  • 源码包:包含源代码,需要编译后才能安装,文件扩展名可能为.dsc.tar.gz等。

2.1.3 软件管理工具概览

在Debian系的Linux发行版中,主要使用dpkgapt两种工具进行软件包管理。

  • dpkg: 主要用于离线安装本地软件包,不检查依赖关系。
  • apt: 在线安装工具,可以从远程仓库下载软件包,自动解决依赖关系。
  • yum: 在线安装工具,类似于apt。

2.2 dpkg工具详解

  • 安装软件:
    Bash
1sudo dpkg -i 软件包全名.deb
  • image.gif
  • 显示软件安装状态:
    Bash
1sudo dpkg -s 软件包名
  • image.gif
  • 显示软件安装路径:
    Bash
1sudo dpkg -L 软件包名
  • image.gif
  • 卸载软件:
    Bash
1sudo dpkg -r 软件包名
  • image.gif
  • 完全卸载软件(包括配置文件):
    Bash
1sudo dpkg --purge 软件包名
  • image.gif

2.3 apt工具详解

  • 安装软件:
    Bash
1sudo apt-get install 软件包名
  • image.gif
  • 卸载软件:
    Bash
1sudo apt-get remove 软件包名
  • image.gif
  • 更新软件包列表:
    Bash
1sudo apt-get update
  • image.gif
  • 升级已安装的软件包:
    Bash
1sudo apt-get upgrade
  • image.gif
  • 列出可用的软件仓库:
    Bash
1cat /etc/apt/sources.list
  • image.gif
  • 默认下载包的存放路径: /var/cache/apt/archives/

2.4 yum工具详解

1. 更新软件包

  • 更新所有已安装的软件包:
    Bash
sudo yum update
  • image.gif
  • 更新特定的软件包:
    Bash
sudo yum update package-name
  • image.gif

2. 安装软件包

  • 安装软件包:
    Bash
sudo yum install package-name
  • image.gif

3. 删除软件包

  • 删除软件包:
    Bash
sudo yum remove package-name
  • image.gif

4. 搜索软件包

  • 搜索软件包:
    Bash
sudo yum search keyword
  • image.gif

5. 列出可用的软件包

  • 列出所有可用的软件包:
    Bash
sudo yum list available
  • image.gif
  • 列出已安装的软件包:
    Bash
sudo yum list installed
  • image.gif

6. 清理缓存

  • 清理yum缓存:
    Bash
sudo yum clean all
  • image.gif

7. 检查更新

  • 检查是否有软件包更新:
    Bash
sudo yum check-update
  • image.gif

8. 信息查询

  • 显示软件包的详细信息:
    Bash
sudo yum info package-name
  • image.gif

9. 配置YUM源

  • 编辑YUM源配置文件:
    Bash
vi /etc/yum.repos.d/CentOS-Base.repo
  • image.gif 在这里可以添加或修改仓库的URL,以指向不同的软件包镜像站点。

10. 安装YUM插件

  • 安装YUM插件:
    Bash
sudo yum install yum-plugin-*
  • image.gif

image.gif 编辑


Shell基础知识

3.1.1 概念

Shell,字面意思是“壳”,在Linux中扮演着关键的桥梁角色。它作为用户与操作系统之间的交互界面,负责解释用户输入的命令,并将其转化为操作系统可以理解的形式,再将执行结果呈现给用户。形象地说,Shell就像一道墙,保护着系统的核心部分不受用户误操作的影响,同时提供友好的命令行界面供用户使用。

image.gif 编辑

3.1.2 命令执行流程

当用户在命令行输入指令时,Shell接收并解析该命令,将其转换为操作系统(内核)能够识别的指令,传递给硬件执行。硬件的响应结果再次通过Shell转换,最终以用户可理解的形式展示出来。

image.gif 编辑

3.1.3 Shell分类

  1. Bourne Shell(sh)
    开发者:S.R. Bourne
    特点:Unix的第一个Shell,行业标准,但作业控制功能较弱,不支持别名和历史记录,常作为应急Shell使用。
  2. C Shell(csh)
    开发机构:加州大学伯克利分校
    特点:改进Bourne Shell的不足,编程风格类似C语言,受C程序员欢迎,但健壮性不及Bourne Shell。
  3. Korn Shell(ksh)
    开发者:David Korn
    特点:解决Bourne Shell的用户交互问题,避免C Shell的脚本编程缺陷,需许可证,应用范围受限。
  4. Bourne Again Shell(bash)
    开发机构:AT&T贝尔实验室
    特点:Bourne Shell的增强版,融合了Bourne Shell、Korn Shell的功能,并引入C Shell的部分特性,具备环境变量配置、历史记录、内置算术运算、通配符支持等功能,是最流行的Shell之一。

3.2 历史记录命令

  • .bash_history:位于用户主目录下的隐藏文件,存储用户的历史命令记录,默认最多保存2000条。
  • .bashrc:包含环境变量和函数定义的脚本,其中包括HISTSIZE(默认显示历史记录数量)和HISTFILESIZE.bash_history文件的最大记录数量)的设置。
  • history:显示历史命令,默认显示数量由HISTSIZE决定。
  • history n:显示最近的n条历史记录。
  • 修改历史记录设置
  • HISTSIZE=500:临时改变显示历史记录的数量。
  • 修改.bashrc文件中的HISTSIZEHISTFILESIZE值,然后退出并重新登录终端,实现永久更改。
  • echo $HISTSIZE:显示当前HISTSIZE的值。

3.3 别名命令

  • alias:查看已定义的命令别名。
  • 设置别名
  • alias 新名='原命令':为命令创建别名。
  • 取消别名
  • unalias 新名:移除命令的别名。

3.4 Linux特殊字符

3.4.1 通配符

  • *:匹配任意数量的任意字符。
  • ?:匹配单个任意字符。
  • [...]:匹配括号内任何一个字符。
  • [-]:匹配括号内指定范围内的字符。
  • [^]:匹配除括号内字符以外的任何字符。

3.4.2 管道符 |

  • 格式command1 | command2
  • 功能:将前一个命令的输出作为后一个命令的输入。

3.4.3 输入输出重定向

  • >:覆盖模式输出到文件。
  • >>:追加模式输出到文件。
  • 2>:仅重定向错误输出到文件。
  • &>:重定向所有输出(包括错误)到文件。
  • <:从文件读取输入。

3.4.4 命令替换

  • 格式command1 $(command2)command1 \command2``
  • 功能:将command2的输出结果替换到command1中。

3.5 echo命令

  • 功能:向终端输出指定内容。
  • 选项
  • -n:输出时不自动换行。
  • 使用双引号"保持原样输出。

3.6 date命令

  • 功能:显示或修改系统日期和时间。
  • 格式
  • date:显示当前日期和时间。
  • sudo date -s 'YYYY-MM-DD':设置日期。
  • sudo date -s 'HH:MM:SS':设置时间。

系统维护与用户管理命令

4.1 man 命令

  • 功能:查看命令的手册页。
  • 使用示例
  • man man:查看man命令的帮助文档。
  • 手册页分类
  • 1:可执行程序或shell命令。
  • 2:系统调用(内核提供的函数)。
  • 3:库函数(程序库中的函数)。

4.2 su 命令

  • 功能:切换用户身份。
  • 使用示例
  • sudo su root:切换到root用户。
  • sudo su 用户名:切换到指定的普通用户。
  • 退出:使用exit命令退出当前用户回到原用户。

4.3 sudo 命令

  • 功能:以管理员权限执行命令,需要输入密码。

4.4 df 命令

  • 功能:查看磁盘分区的使用情况。
  • 使用示例
  • df -Th:以人类易读的格式显示磁盘使用情况,包括文件系统类型。

4.5 mount 命令

  • 功能:挂载文件系统。
  • 使用示例
  • sudo mount -t 设备类型 设备名称 挂载点:挂载设备。
  • sudo umount 挂载点:卸载设备。
  • 注意事项:卸载时应确保挂载点无正在运行的进程依赖。

用户管理命令

  • 增加/删除用户
  • sudo adduser 用户名:创建新用户。
  • sudo deluser --remove-home 用户名:删除用户及其家目录。

6.1 ps 命令

  • ps aux:显示系统中所有进程的详细信息。
  • ps ef:显示系统中所有进程的信息,包括父进程ID(PPID)。

进程状态代码

  • D:不可中断的睡眠状态(通常为I/O操作)。
  • R:运行或可运行状态(在运行队列中)。
  • S:可中断的睡眠状态(等待事件完成)。
  • T:被作业控制信号停止。
  • t:因调试而暂停。
  • X:已死状态(不应出现)。
  • Z:僵尸状态,进程已终止但未被父进程回收。
  • <:高优先级(对其他用户不友好)。
  • N:低优先级(对其他用户友好)。
  • L:有页面锁定在内存中(实时或自定义I/O)。
  • s:会话领导者。
  • l:多线程(使用CLONE_THREAD,如NPTL线程)。
  • +:在前台进程组中。

6.2 top 命令

  • 功能:实时显示系统中各个进程的资源占用状况。
  • 快捷键
  • Shift + >:向下翻页。
  • Shift + <:向上翻页。
  • 列说明
  • PR:进程优先级。
  • VIRT:虚拟内存大小。
  • SHR:共享内存大小。

image.gif 编辑

6.3 调整进程优先级

  • renice:改变正在运行的进程的优先级。
  • sudo renice NI PID:调整指定进程的优先级。
  • nice:以指定优先级运行新进程。
  • sudo nice -n NI值 进程:以指定的优先级运行进程。

image.gif 编辑

image.gif 编辑

6.4 文本搜索命令 grep

  • 基本用法
  • grep "查找的字符串" 文件名:在文件中搜索字符串。
  • grep "\<要查找的字符串\>" 文件名:精确匹配整个单词。
  • grep -r "查找的字符串" 路径/目录:递归搜索目录下的文件。
  • 文件查找
  • find 路径 -name "文件名":查找路径下符合条件的文件。

image.gif 编辑

6.5 kill 命令

  • 功能:向进程发送信号。
  • 查看信号列表
  • kill -l:列出系统定义的所有信号。
  • 常用信号
  • 2:SIGINT(Ctrl+C),终止进程。
  • 3:SIGQUIT(Ctrl+\),终止进程。
  • 9:SIGKILL,强制杀死进程。
  • 15:SIGTERM(默认信号),请求进程终止。
  • 18:SIGCONT,继续暂停的进程。
  • 20:SIGTSTP(Ctrl+Z),暂停进程。
  • 发送信号
  • kill -num PID:向PID指定的进程发送信号。

image.gif 编辑

6.6 前后台进程切换

  • 步骤
  • 运行进程。
  • Ctrl + Z:将进程暂停并送入后台。
  • bg 编号:将暂停的进程置于后台继续执行。
  • jobs:查看当前终端中后台运行的进程。
  • fg 编号:将后台进程切换到前台继续执行。

image.gif 编辑

7.1 网络命令

  • ifconfig:在Linux系统中用于查看网络接口的IP地址和配置信息。
  • ipconfig:在Windows系统中用于查看网络配置信息,包括IP地址。
  • Ping测试
  • ping 域名/IP地址:测试与远程主机的网络连通性。
  • Windows下,ping -n 包数 域名/IP地址:发送指定数量的数据包进行测试。

image.gif 编辑

image.gif 编辑

特殊情况处理

  • 如果虚拟机无法ping通宿主机(Windows),尝试反向ping(宿主机ping虚拟机),若成功,则可能是虚拟机的防火墙设置问题,需要检查并可能禁用防火墙。
  • 解决虚拟机网络配置问题的步骤:
  1. 卸载虚拟机软件。
  2. 安装系统清理工具,如CCleaner,清理注册表。
  3. 关闭防火墙和杀毒软件。
  4. 以管理员身份重新安装虚拟机软件(如VMware)。

7.2 Ubuntu网络配置

7.2.1 桥接模式

  • 设置步骤
  1. 打开虚拟机软件,进入虚拟网络编辑器。
  2. 选择vmnet0网络适配器。
  3. 更改为桥接模式。
  4. 选择桥接到宿主机的网络适配器(通常是物理网络接口)。

image.gif 编辑 image.gif 编辑 image.gif 编辑 image.gif 编辑

image.gif 编辑 image.gif 编辑

7.2.2 NAT 模式

设置步骤:

  1. 打开虚拟机软件,进入“虚拟网络编辑器”。
  • 选择vmnet8网络适配器。
  • 更改为NAT模式。
  • 点击“确定”完成设置。
  1. 进入虚拟机设置。
  • 选择“网络适配器”。
  • 设置模式为NAT

image.gif 编辑 image.gif 编辑

文件系统命令

8.1 文件系统分类

  • 磁盘文件系统:本地主机上可访问的文件系统,如硬盘、CD-ROM、USB存储器等。
  • 格式:Ext2, Ext3, Ext4, VFAT等。
  • 网络文件系统:允许远程访问的文件系统。
  • 格式:NFS, Samba (SMB/CIFS)等。
  • 专有/虚拟文件系统:非磁盘驻留的文件系统。
  • 格式:TMPFS, PROCFS, LOOPBACKFS等。

8.2 根文件系统结构

目录 含义
/bin 最常用命令的二进制文件
/sbin 系统管理和目录查询的二进制文件
/boot 内核和系统启动文件
/opt 非系统相关应用的安装目录
/etc 系统配置文件
/dev 设备文件
/lib 共享库文件
/mnt 文件系统的挂载点
/proc 进程和系统信息
/usr 用户相关的文件和目录

8.3 显示文件内容

  • cat 文件:显示文件内容。
  • head -n 文件名:显示前n行。
  • tail -n 文件名:显示后n行。

8.4 连接文件

  • 硬链接:基于inode的链接。
  • 软链接:基于路径的链接。

命令:

  • ln 源文件 链接文件名:创建硬链接。
  • ln -s 源文件 链接文件名:创建软链接。

8.5 文件压缩解压

  • zip: 压缩多个文件至单个压缩文件。
  • unzip: 解压.zip文件。
  • gzip: 单文件压缩,后缀.gz。
  • gunzip: 解压.gz文件。
  • bzip2: 类似gzip,后缀.bz2。

选项:

  • -x: 解压。
  • -c: 压缩。
  • -v: 显示过程信息。
  • -f: 强制。
  • -j: 生成.bz2压缩文件。
  • -z: 生成.gz压缩文件。

组合命令:

  • tar -cjf: bz2格式压缩。
  • tar -czf: gz格式压缩。
  • tar -xvf: 解压压缩包。

image.gif 编辑

image.gif 编辑

数据类型与分文件编程概览

10.1 存储类型

10.1.1 extern
  • 用途:声明外部定义的函数或变量,表明其定义位于其他源文件中。
10.1.2 register
  • 描述:建议编译器将变量存储在寄存器中以优化访问速度。但实际效果取决于编译器优化。
10.1.3 static
  • 作用域
  • 函数内部:局部作用域,但生存期贯穿整个程序。
  • 全局变量:限于当前源文件。
  • 存储位置:全局区(静态区)。
  • 初始化:默认初始化为0,初始化状态保存于.data区,未初始化的存于.bss区。
10.1.4 auto
  • 默认类型:局部变量默认类型,位于栈区。

10.2 数据类型总结

  • 基本数据类型:不可分解的类型,如char, int, float等。
  • 构造数据类型:通过基本类型构造而成,包括struct, union, enum和数组。
  • 指针类型:存储变量地址的特殊类型。
  • 空类型void:用于定义无类型指针和无返回值的函数。

11. 分文件编程

11.1 头文件(.h
  • 内容:宏定义、typedef、结构体、联合体、枚举和函数声明。
  • 避免:通常不直接定义全局变量。
11.2 源文件(.c
  • 包含main函数和子函数的定义。
示例
  1. 创建头文件 head.h,用于声明函数。
  2. 编写函数源文件 add.c,定义函数。
  3. 编写主源文件 main.c,引入头文件并调用函数。
  4. 编译:将多个.c文件编译链接成可执行文件。

image.gif 编辑

特别注意:记住需要同时编译两个文件!!!

12.1 GCC 编译工具

GCC(GNU Compiler Collection)是广泛使用的开源编译器集合,用于C、C++等多种语言的编译工作。GCC的编译过程分为四个主要阶段:

  1. 预处理 (gcc -E):
  • 展开所有#include指令,合并头文件内容。
  • 替换所有的宏定义。
  • 删除所有的注释。
  • 预处理器不进行语法检查,输出文件扩展名为.i
  1. 编译 (gcc -S):
  • 进行语法和词法检查,将预处理后的文件转换为汇编代码。
  • 输出文件扩展名为.s
  1. 汇编 (gcc -c):
  • 将汇编代码转换为机器码,生成目标文件。
  • 输出文件扩展名为.o
  1. 链接 (gcc):
  • 链接库文件,将多个目标文件组合成可执行文件。
  • 默认输出文件名为a.out,可以通过-o指定其他名称。

12.2 GDB 调试工具

GDB(GNU Debugger)是功能强大的调试工具,用于动态调试GCC编译的程序。

  • 启动调试:
  • 使用gcc -g编译源代码,生成包含调试信息的可执行文件。
  • 运行gdb a.out启动GDB调试器,加载可执行文件。
  • 常用命令:
  • r: 运行程序直到遇到断点或正常结束。
  • l: 查看源代码。
  • b 行号或函数名: 设置断点。
  • info b: 显示所有断点信息。
  • d 断点编号: 删除指定断点。
  • p 变量名: 打印变量的当前值。
  • s: 单步进入函数内部执行。
  • n: 单步执行,但不会进入函数调用。
  • help: 显示帮助信息。
  • q: 退出GDB。

注意: 当遇到printf等函数时,使用s命令可能被嵌入到系统库的内部实现中,此时使用n命令可以避免进入库函数内部。

image.gif 编辑

12.3 make 编译工具

12.3.1 定义

make 是一个自动化构建工具,用于管理项目中多个文件的编译与链接。通过解析 Makefile 文件,make 能够追踪文件的修改时间,仅对更新的源文件进行重新编译,从而节省时间和资源。

12.3.2 Makefile 格式

基本结构遵循以下模式:

Make

1目标 : 依赖
2    命令

image.gif

  • 目标:通常指的是需要构建的对象,如可执行文件。
  • 依赖:目标构建所必需的文件,通常是源代码文件或其他目标文件。
  • 命令:用于构建目标的具体指令。

12.3.3 用 make 管理多个文件

示例:

Make

1main: main.o fun.o
2    gcc main.o fun.o -o main
3
4main.o: main.c
5    gcc -c main.c -o main.o
6
7fun.o: fun.c
8    gcc -c fun.c -o fun.o
9
10.PHONY: clean
11clean:
12    rm -rf *.o main

image.gif

  • PHONY 目标clean 是一个伪目标,它不会产生任何文件,仅用于执行清理操作。

12.3.4 Makefile 变量

  • 自定义变量:用户可以定义变量,通过 $() 来引用它们。
  • =:递归展开变量。
  • :=:直接赋值。
  • +=:追加新值。
  • ?=:如果未定义,则赋值。

示例:

Make

1VAR = hello
2SUM := $(VAR) world
3
4all:
5    echo $(VAR)
6    echo $(SUM)
7
8SUM += 456
9SUM ?= 789

image.gif

条件编译

Makefile 中,条件编译基于宏的定义与否:

Make

1ifdef MACRO_NAME
2    # 如果宏已定义,则执行此段代码
3else
4    # 否则,执行此段代码
5endif

image.gif

此外,条件编译也用于防止头文件的重复包含:

Cpp

1#ifndef __HEAD_H__
2#define __HEAD_H__
3
4// 头文件内容
5
6#endif // __HEAD_H__

image.gif

image.gif 编辑


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
1天前
|
Linux 网络安全 开发工具
linux 常用命令【编程必备】
linux 常用命令【编程必备】
13 4
|
1天前
|
存储 Linux
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
|
1天前
|
安全 Linux 测试技术
Linux命令setpriv详解
`setpriv` 是Linux下的命令行工具,用于调整进程权限以增强安全性,尤其适用于自动化和非交互式权限切换。它不使用PAM,支持管理能力集、GID/UID及SELinux上下文。例如,`setpriv --reuid=1000 script.sh` 可以以低权限用户运行脚本,而`--selinux-label`可设定SELinux标签。在使用时,应最小化权限、充分测试、保持与其他安全机制的兼容性,并定期审核权限设置。
|
1天前
|
Linux 数据安全/隐私保护
Linux命令setfacl详解
`setfacl`是Linux中用于设置文件访问控制列表的命令,提供比传统权限更细粒度的控制。它允许为特定用户或组添加、修改或删除权限,适用于多用户环境和复杂场景。常用参数包括`-m`(修改规则)、`-x`(删除规则)、`-R`(递归设置)和`-d`(设置默认ACL)。例如,`setfacl -m u:user1:rw- file.txt`给用户`user1`赋予文件`file.txt`的读写权限。记得在使用前确认文件系统支持ACL,并谨慎规划和审查权限设置。
|
1天前
|
Linux 数据处理
Linux命令setarch深度解析与实际应用
`setarch`是Linux下用于调整程序执行环境的命令,它允许在不同CPU架构间运行二进制文件,模拟架构并设置CPU功能标志。通过指定`-a`参数切换架构,如`-a i386`,用`-R`参数启用或禁用如SSE2的功能。在测试兼容性、调试和优化时非常有用。注意正确设置参数,避免滥用,确保程序正常运行。查阅文档、逐步测试和考虑兼容性是最佳实践。
|
1天前
|
Linux Shell 数据处理
Linux命令seq的深入解析与应用
`seq`命令在Linux中用于生成数字序列,适用于数据处理和脚本编写。它支持自定义起始值、步长和结束值,可生成整数或浮点数。通过选项如`-f`(格式化输出)、`-s`(设置分隔符)、`-w`(宽度对齐)和`-r`(逆序)调整输出。在实践中,`seq`常与for循环结合,用于测试数据、文件命名等。注意增量为零会导致无限循环,格式和宽度选项不能同时使用。善用`seq`能提升命令行效率。
|
1天前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed &#39;s/apple/orange/g&#39; example.txt`替换文本,`/error/d`删除包含&quot;error&quot;的行,`a\---`在每行后加&quot;---&quot;。使用时注意备份、测试命令和理解正则表达式。
|
1天前
|
Linux Perl
Linux命令sdiff详解:并排比较与差异显示
`sdiff`是Linux下的命令行工具,用于并排比较两个文件的差异。它直观地显示不同之处,用`&gt;`和`&lt;`标记差异。主要特点包括并排显示、灵活性和交互性。参数如`-s`仅显示差异行,`-i`忽略大小写,`-o FILE`将结果输出到文件。示例:`sdiff file1.txt file2.txt`。最佳实践包括根据需要调整输出宽度,结合其他命令使用,和利用交互功能。注意用于文本文件比较,大文件可能消耗资源。
|
1天前
|
Linux 数据处理
Linux命令scriptreplay的深入解析
`scriptreplay`是Linux工具,用于根据`script`命令记录的终端会话及时间戳重现实时操作。它精确重现用户输入,支持跨机器播放、速度调整,并可用于教学、回顾。通过`-t`指定时间日志,`-s`指定会话日志,`-d`调整播放速度。注意环境差异可能影响重放效果,最好在类似环境下使用。
|
1天前
|
JavaScript Linux Shell
探索Linux中的`script`命令:记录你的终端会话
`script`命令在Linux中记录终端会话,用于重现交互、教学和调试。它启动新shell,捕获所有输入输出到文件,默认文件为`typescript`。主要选项包括追加输出 `-a`,执行单个命令 `-c`,实时写入 `-f`,静默模式 `-q` 和添加时间戳 `-t`。示例用法:记录脚本执行`script -a log.sh script.sh`,或带时间戳记录`script -t timestamps.log`。注意文件权限、磁盘空间和敏感信息处理。

热门文章

最新文章