Linux使用技巧

01|使用逻辑卷使存储空间可扩展

前排提示

小白在使用Linux虚拟机时,常在开始分配较小的硬盘空间,在后续使用中常出现硬盘空间不足的问题,轻则无法安装软件,重则无法更新。本文推荐使用逻辑卷方式安装操作系统,便于后续磁盘扩充。

在逻辑卷上创建文件系统流程:

层次(命令):|物理磁盘| (-fdisk-> |物理分区|) -pvcreate-> |物理卷| -vgcreate-> |卷组| -lvcreate-> |逻辑卷|-mkfs-> |文件系统|

释义(功能):|致钛SC001| (-建表-> |sda1、hdc2|) -物理卷-> |sdb1| -合并为组-> |(L)VG| -建逻辑卷-> |可建FS| -创建文件系统-> |EXT4|

使用命令在逻辑卷上创建文件系统(Ubuntu)

# 使用硬盘分区或直接使用硬盘均可建立物理卷,区别在于,使用硬盘分区前需要先将分区类型(Id)修改为“Linux LVM(8e)”。使用fdisk disk_partation命令,具体步骤此处不述。
fdisk -l physic_disk #查看可以创建物理卷的目标
pvcreate pvtarget #将目标创建为物理卷
pvdisplay #查看物理卷信息

# 创建逻辑卷组,可以将多个逻辑卷创建为一个卷组
vgcreate vg_name pv1...pvn
vgdisplay #查看逻辑卷组信息

# 在一个逻辑卷组上创建一个逻辑卷
lvcrate -L lv_size lv_name vg_name
lvdisplay #查看逻辑卷信息

# 在某一逻辑卷上创建文件系统即可使用
mkfs -t fs_type lv_name

# 后续维护:扩充逻辑卷组、扩容逻辑卷是增加容量的两种方式(当然物理硬盘要够大)。
# 1.逻辑卷组中还有空间可以添加给逻辑卷
lvextend -L +size lv_name #+添加,-移除/压缩
resize2fs lv_name #刷新lv的大小
# 2.给逻辑卷组添加新的物理卷
vgextend vg_name pv1...pvn

02|修的内核bug如何推进

发patch

  1. 克隆最新代码,确定问题还存在

  2. 新建本地分支,修改要修改的部分

    git  add 修改的文件
    git commit -s commit-log
    《标题》:修改的大类:简短的patch主要描述
    《空行》
    《详细描述》
    git format-patch -1(可以在三小短线下写点东西)
    
  3. 使用get-maintainer获取当前文件的维护者,发给子系统(可以使用git自带的send-mail命令)

dpkg损坏修复

03|安全机制(SELinux/AppArmor)

selinux is disable error

  1. 修改 /etc/selinux/config文件,将disable修改为permissive或者enforcing
  2. 在家目录下创建 .autorelabel文件,重启

04|编译相关

Msys跨平台编译ffmpeg

配置环境

  1. 安装Msys2,修改安装目录下的/etc/pacman.d/文件夹下的mirrorlist文件,切换为中科大源。
  2. 打开Msys2的MinGW64终端,执行 pacman -Syu更新软件包
  3. 使用 pacman -S gcc yasm make安装编译所需的依赖。

编译流程

编译x264库

从videolan官网下载x264代码的压缩包,使用如下参数配置编译,并安装。

./configure --prefix=out --enable-static --enable-shared
make -j8
make install

编译mp3lame库

从MP3代码存储库下载3.100代码包。使用如下参数配置编译,并安装。

./configure --prefix=out --enable-static --enable-shared
make -j8
make install

编译ffmpeg本体

  1. 从ffmpeg官网下载相应版本的release压缩包,这里使用5.1.3。
  2. 使用Msys2运行编译配置脚本configure,参数如下。
./configure --prefix=Out --enable-x86asm --enable-network --enable-protocol=https --enable-optimizations --enable-gpl --enable-libx264 --enable-libmp3lame --enable-small --enable-static --disable-shared --disable-ffprobe --disable-doc --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib

cl(VS ToolChain)编译ffmpeg

lame: ./configure --enable-shared --prefix=/mnt/Mp3/Out/ --host=x86_64-pc-windows CC=cl.exe
ffmpeg: ./configure --prefix=Out --toolchain=msvc --enable-w32threads --enable-x86asm --disable-doc --disable-ffprobe --enable-small --disable-runtime-cpudetect --disable-network --disable-debug

x264: ./configure --enable-static --enable-shared
lame: ./configure --prefix=/usr/local --enable-static --enable-shared
ffmpeg: ./configure --prefix=Out --enable-x86asm --enable-network --enable-protocol=https --enable-optimizations --enable-gpl --enable-libx264 --enable-libmp3lame --enable-small --enable-static --disable-shared --disable-ffprobe --disable-doc --extra-cflags=/usr/local/include --extra-ldflags=/usr/local/lib

05|堆腐败问题

堆内存内容由于编程行为被修改,超出原始编程意图

内存腐败的根源和表现形式很难联系起来,难以持续产生错误

内存腐败产生原因

  • 使用未初始化内存
  • 使用非自有内存:通常出现在使用指针时,空指针、悬挂指针(野指针)或指向堆外内存,导致崩溃
  • 使用分配内存以外的内存(缓冲区溢出):循环中使用数组,且终止条件不正确
  • 堆内存错误管理:内存释放或者泄露错误

可能的表现和引起

  • 程序试图释放内存
  • 程序被释放后试图分配内存
  • 堆在分配内存前损坏
  • 故障发生在随后的内存上
  • 使用连续内存块
  • 多线程进程交错请求内存
  • 内存分配策略改变

C++中具体原因

  • 缓冲区溢出
  • 未初始化的指针
  • 强制类型转换
  • 错误使用. & ->
  • delete new不配套
  • 缺少或者不完整的拷贝构造
  • 指向已回收的内存
  • 重复delete
  • 多重继承但没有虚析构函数

表现形式

STATUS_HEAP_CORRUPTION

EXPECTION_RECORD:

ExceptionCode:c0000374

ExceptionCode:00000001

NumberParameters:1

Parameter[0]: 导致此异常的最终函数

0xC0000374

07|查看系统版本

lrb_release -a

cat /etc/issue

cat /proc/version

uname -a

08|段错误

  1. free()函数使用不当容易吐核(段错误),产生原因主要有:
    解引用空指针
    访问不可访问的内存空间(如内核空间)
    访问不存在的内存地址
    试图写一个只读内存空间(如代码段)
    栈溢出(函数递归调用)
    使用未初始化的指针(定义时没有初始化或者已经回收)
  2. C语言异常退出代码:
    3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存
    3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的
    3221225620 (0xC0000094): 除0错误,一般发生在整型数据除了0的时候
  3. 关于指针:加减操作针对相对应长度(下一个),必须赋值变量才能取地址
  4. 按值传递地址,彻底改变;复制传递,临时改变
  5. 什么是段错误(吐核):
    系统发送SIGSEGV信号(异常),系统默认处理是终止并转储内存回硬盘,保护数据,原因是访问到了不能访问的内存,用户态没有权限
    常见场景:输入缺少取地址运算符、访问不存在的内存地址、堆栈溢出、指针问题(使用未初始化的指针,解引用空指针)
    随意吐核(coredump)会过于占用存储
posted @ 2025-01-06 15:33  Kyana  阅读(79)  评论(0)    收藏  举报