linux基础指令2.0

目录

可视模式:

zip/unzip

tar

压缩文件传递

查询日志

bc计算器

ll

[r w x权限](#r w x权限)

权限管理

chmod (change mode"模式 权限")

chown (change owner)

chgrp (change group)

umask

gcc/g++的链接

Makefile

makefile/Makefile调用

Ⅰ.make

句前"@"

[\^与@与\<的含义](#^与@与<的含义)

Ⅱ.执行与清理


可视模式:

可视模式:默认模式下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

R -> 递归修改⽬录文件的权限

chmod (change mode"模式 权限")

修改文件权限 root、文件所有者(wzb)

chmod u/g/o+/-一个或多个权限 文件名 #多个权限间无需加空格

u->拥有者

g->所属组

o->其他用户

也可以使用三位8进制数字 //较麻烦
chmod 764 txt.c #设置rwx rw- -w-权限

chown (change owner)

修改文件的拥有者
chown user1 f1
chown -R user1 filegroup1

chgrp (change group)

修改文件/目录的所属组

chgrp -R/无 用户组名 文件名
chgrp nwgrp /abc/f2

umask

查看/修改文件掩码


实际创建出的文件的权限值 = 新建文件默认权限(不是创建出来后的权限) & ~umask值(图示0002)
超级⽤⼾默认掩码值为0022,普通⽤⼾默认为0002。

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:也可仅指定一个/多个(以空格隔开) )

形成"目标"的原则

css 复制代码
# 这是一个简单的 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)

3.".PHONY"的理解

css 复制代码
.PHONY: all clean

前言:phony/phoney .adj /ˈfoʊni/("佛尼")假的,虚伪的 ;

性质:解决外部使用makefile的指令冲突

设计目的:解决外部"make"或"make clean"时,出现"文件名为all 、clean"而导致无法正常make 、clean的问题。

所以我们在设计makefile时在最后常加.PHONY来消弭冲突问题。

为什么外部使用"make"就会找到文件makefile去调用内部的指令?

make 命令被设计为自动查找 名为 makefileMakefile 的文件,这是它的内置默认行为,不需要你额外指定。

makefile/Makefile调用

css 复制代码
  1 BIN=proc.exe #最终形成的可执行文件名
  2 CC=gcc
  3 #SRC=$(shell ls *.c) #以shell命令列出所有.c文件
  4 SRC=$(wildcard *.c)#自动匹配当前目录下所有.c文件
  5 OBJ=$(SRC:.c=.o) #将所有.c后缀改为.o后缀
  6 LFLAGS=-o
  7 FLAGS=-c
  8 RM=rm -f
  9 
 10 $(BIN):$(OBJ)
 11     @$(CC) $^ $(LFLAGS) $@  #这啥呀?
 12     @echo "compling ...... $< to $@" #编译                                                                      
 13 .PHONY: clean
 14 clean:
 15     $(RM) $(OBJ) $(BIN)
 16 .PHONY:test
 17 test:
 18     @echo $(SRC) #输出当前识别到的所有.c文件
 19     @echo $(OBJ) #输出所有.o文件
//   make 编译全部  make test 调试查看  ./proc.exe运行程序  make clean 清理
Ⅰ.make

特定定义:

句前"@"

@(CC) ^ (LFLAGS) @ 需要加@

(RM) (OBJ) $(BIN) 为什么这个语句不需要加@?

@ 是可选的 ,加不加取决于你是否想让用户看到这条命令

  • @:静默执行,不显示命令本身

  • 不加 @:显示命令,然后再执行

\^与@与$<的含义

$@是proc.exe的原因:

$^是当前规则的依赖列表

$<是当前依赖规则的第一个

css 复制代码
%.o: %.c

当前规则的目标 = "proc.exe"
当前规则的依赖列表 = ["txt.o", ......]

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

新增gdb

相关推荐
Yang96111 分钟前
一站式网络检测 鼎讯信通网络综合测试仪科普
运维·服务器·网络·能源
ylscode4 分钟前
Apache CXF LDAP注入漏洞允许攻击者获取任意证书
apache
越强越不秃34 分钟前
大模型驱动的PoC脚本自动化生成:从挑战到实践
运维·自动化·安全工程师
sulikey42 分钟前
个人Linux操作系统学习笔记4 - makefile
linux·makefile·make·构建
_童年的回忆_1 小时前
【php】在linux下PHP安装amqp扩展
linux·开发语言·php
sxlishaobin1 小时前
linux 自动清除日志 脚本
linux·服务器·前端
杰克逊的日记1 小时前
K8s+GPU+大模型运维主要技术点
运维·容器·kubernetes
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
nginx部署教程
运维·网络·nginx
胡图图不糊涂^_^1 小时前
测试用例篇——设计测试用例的方法
笔记·学习·测试用例·判定表法·正交法生成用例测试·等价类·边界值
b***25111 小时前
电池组PACK自动化生产线:从电芯到成品的精密制造之路
运维·自动化·制造