linux基础指令2.0
目录
可视模式:
可视模式:默认模式下Ctrl+v
批量注释/取消注释

zip/unzip
zip 压缩文件名.zip 压缩目录/文件
-r 递归处理
解压:
unzip 解压文件名.zip -d [解压到的目标位置]
tar
tar czf 【压缩包名字】.tgz 【压缩目标】 #tar压缩
tar xzf 【压缩包名字】.tgz 无/【-C 【指定路径】】 #tar解压 默认解压到当前位置/解压到指定位置
显示压包/解包过程"cvzf/xvzf" 加以"v"
压缩文件传递
sz [压缩包] #Linux传递到Win
rz #选中Win下传递到Linux #也可以直接拖拽
查询日志
less /var/log/messages #支持上下键翻动查看 使用"/"日志中包含的信息
例如:使用 /remove


bc计算器
bc #进入计算器

ll 指令
显示当前目录下文件与目录 及其详细内容

d rwx rwx r-x
│ └┬┘ └┬┘ └┬┘
│ │ │ └── 其他用户权限(读+执行)
│ │ └─────── 组权限(读+写+执行)
│ └──────────── 所有者权限(读+执行)
└──────────────── 文件类型("d" = 目录,"-" = 文件)
| 字段 | 值 | 说明 |
|---|---|---|
| 文件类型和权限 | drwxrwxr-x | d=目录,后面9位是权限 |
| 硬链接数 | 4 | 该目录有4个子目录/链接 |
| 所有者 | wzb | 文件属于用户 wzb |
| 所属组 | wzb | 文件属于组 wzb |
| 大小 | 4096 | 目录大小 4KB(目录默认大小) |
| 修改时间 | May 4 21:21 | 最后修改时间 |
| 文件名 | giths | 目录名称 |
r w x权限
r:决定了能否查看内容。
w:决定了能否修改(增删)内容。
x:决定能否运行脚本/运行可执行文件/进入目录。
冲突:
# 有执行权限:可以进入目录
cd directory/ # ✅ 成功进入
ls -l directory/ # ✅ 可以访问目录内文件(需结合读权限)
# 无执行权限:无法进入目录
cd directory/ # ❌ bash: cd: directory: Permission denied
ls directory/ # ❌ 也无法访问(即使有读权限也不行)
权限管理
-rw-rw-r-- 1 wzb jack 316 May 5 19:32 txt.c
chmod (change mode"模式 权限")
修改文件权限 root、文件所有者(wzb)
chmod [u/g/o]+/-[一个或多个权限] 文件名 #多个权限间无需加空格
u->拥有者
g->所属组
o->其他用户
也可以使用三位8进制数字 //较麻烦
chown (change owner)
修改文件的拥有者
chgrp (change group)
修改文件/目录的所属组
chgrp [-R/无] 用户组名 文件名
umask
查看/修改文件掩码

gcc/g++的链接
.i 预处理-E形成的临时文件
.s 编译-S形成的汇编文件 //我们可读
.o 汇编-c形成的目标文件 //二进制机器语言
"链接"选项-o输出可执行文件:
gcc f1.c f2.i f3.s f4.o …… -o program #链接生成可执行文件
Makefile
简介:简洁批量处理所拥有文件,是一个自动化编译配置文件,告诉make命令如何编译与链接。
1.变量定义
x=y #意味着定义变量x,代表y例如:
CC = gcc #"CC"就代表gcc编译器
1.1变量的使用
$(TARGET) | 引用变量,获取变量的值 | 替换为 hello |
TARGET | 普通文本,就是这个单词本身 | 保持为 TARGET |
$(x)就代表获取变量的值y
$(CC) #替换为gcc 用于"依赖"关系的确认
1.2为什么使用"定义变量"?
就像你在写代码时的定义变量一样,便于统一更改与替换。
2."依赖"的理解
2.1"依赖"的解释
"依赖"指一个对象依赖于另一个对象产生,依赖发生时不一定要求另一个对象已经存在。
已经存在:直接根据代码实现目的。
不存在:先将此依赖关系存入"特殊空间",再向下执行。
特殊空间,完全类似于"数据结构"中的"栈"形结构,先入后出。等到栈顶可执行直接出栈。
2.2"依赖"的语法逻辑
目标:依赖对象(可什么都不写 像clean:也可仅指定一个/多个(以空格隔开) )
形成"目标"的原则
# 这是一个简单的 Makefile 示例
CC = gcc
CFLAGS = -Wall -g
TARGET = hello
SOURCES = main.c
OBJECTS = main.o
all: $(TARGET) //all仅仅是一个名字无其他含义,此句表示all依赖TARGET
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -o $(TARGET)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@ //$@与$<稍后解释
clean:
rm -f $(OBJECTS) $(TARGET)
| 方面 | %.o: %.c | $(OBJ): $(SRC) |
|---|---|---|
| 类型 | 模式规则 | 静态规则(错误写法) |
| 匹配方式 | 通配符匹配 | 完全展开 |
| 灵活性 | 自动适配任意文件 | 固定文件列表 |
| 正确性 | ✅ 正确 | ❌ 错误 |

第九行:
# 第9行展开为:
main.o utils.o: main.c utils.c
$(CC) $(CFLAGS) -c $< -o $@
3.".PHONY"的理解
.PHONY: all clean
前言:phony/phoney .adj /ˈfoʊni/("佛尼")假的,虚伪的 ;
性质:解决外部使用makefile的指令冲突
设计目的:解决外部"make"或"make clean"时,出现"文件名为all 、clean"而导致无法正常make 、clean的问题。
所以我们在设计makefile时在最后常加.PHONY来消弭冲突问题。
为什么外部使用"make"就会找到文件makefile去调用内部的指令?
make 命令被设计为自动查找名为 makefile 或 Makefile 的文件,这是它的内置默认行为,不需要你额外指定。
makefile/Makefile调用
//makefile
CC=g++
LFLAGS=-c
FLAGS=-o
SRC=$(wildcard *.cc)
OBJ=$(SRC:.cc=.o)
RM=rm -f
all:$(OBJ)
$(CC) $^ $(FLAGS) pc
%.o:%.cc
$(CC) $(LFLAGS) $< $(FLAGS) $@ //此处可不加“$(FLAGS) $@ ”
.PHONY: clean
clean:
$(RM) pc $(OBJ)
Ⅰ.make

特定定义:
句前"@"
@$(CC) $^ $(LFLAGS) $@ 需要加@
$(RM) $(OBJ) $(BIN) 为什么这个语句不需要加@?
@ 是可选的,加不加取决于你是否想让用户看到这条命令。
-
加
@:静默执行,不显示命令本身 -
不加
@:显示命令,然后再执行
$^与$@与$<的含义
$@是proc.exe的原因:

$^是当前规则的依赖列表
$<是当前依赖规则的第一个
%.o: %.c
当前规则的目标 = "proc.exe"
当前规则的依赖列表 = ["txt.o", ……]
$@ = 当前规则的目标 // "$@" = "proc.exe"
$^ = 当前规则的依赖列表 // "$^" = ""txt.o", ……"
$< = 依赖列表的第一个 // "$<" = "txt.o"
Ⅱ.执行与清理

新增gdb

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)