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
-
克隆最新代码,确定问题还存在
-
新建本地分支,修改要修改的部分
git add 修改的文件 git commit -s commit-log 《标题》:修改的大类:简短的patch主要描述 《空行》 《详细描述》 git format-patch -1(可以在三小短线下写点东西) -
使用get-maintainer获取当前文件的维护者,发给子系统(可以使用git自带的send-mail命令)
03|安全机制(SELinux/AppArmor)
selinux is disable error
- 修改
/etc/selinux/config文件,将disable修改为permissive或者enforcing - 在家目录下创建
.autorelabel文件,重启
04|编译相关
Msys跨平台编译ffmpeg
配置环境
- 安装Msys2,修改安装目录下的
/etc/pacman.d/文件夹下的mirrorlist文件,切换为中科大源。 - 打开Msys2的MinGW64终端,执行
pacman -Syu更新软件包 - 使用
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本体
./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|段错误
- free()函数使用不当容易吐核(段错误),产生原因主要有:
解引用空指针
访问不可访问的内存空间(如内核空间)
访问不存在的内存地址
试图写一个只读内存空间(如代码段)
栈溢出(函数递归调用)
使用未初始化的指针(定义时没有初始化或者已经回收) - C语言异常退出代码:
3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存
3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的
3221225620 (0xC0000094): 除0错误,一般发生在整型数据除了0的时候 - 关于指针:加减操作针对相对应长度(下一个),必须赋值变量才能取地址
- 按值传递地址,彻底改变;复制传递,临时改变
- 什么是段错误(吐核):
系统发送SIGSEGV信号(异常),系统默认处理是终止并转储内存回硬盘,保护数据,原因是访问到了不能访问的内存,用户态没有权限
常见场景:输入缺少取地址运算符、访问不存在的内存地址、堆栈溢出、指针问题(使用未初始化的指针,解引用空指针)
随意吐核(coredump)会过于占用存储

浙公网安备 33010602011771号