启动程序查找共享库失败,解决方法:
- sudo vi /etc/ld.so.conf,添加对应的共享库路径;
- sudo ldconfig,生效;
查找应用程序失败,解决方法:
- vi ~/.bashrc,添加:export PATH=/usr/local/bin/your_bin/:$PATH;仅对当前用户的bash生效;
- 如是用zsh,则对应修改~/.zshrc;
- 如是全局生效,则对应修改/etc/profile
- 如果是sudo启动的,则修改/etc/sudoers文件,找到“secure_path”一行,添加对应的路径;
去除'^M’
- "^M"在Linux下的输入方法 ctrl v + ctrl m
- find -type f | xargs sed -i 's/^M//g' 其中:^M 可以用 ’ ‘或‘ 15'代替;
查看未挂载的设备的文件类型
- 安装parted工具
- 执行:parted /dev/sdx
- 进入了parted的命令行,执行:print list
- 注意:如果是fat32,mount的时候使用vfat 类型即可
gcc warning: 提示函数没有声明或函数类型冲突之类的
- 在使用的地方添加声明
- 否则有可能出现返回值不符合预期;
修改默认挂载
- vi /etc/fstab/
cp参数:cp -rfvdp, d: 保存链接,p:保存权限
sshd启动:sudo service sshd start / sudo systemctl ....
添加用户到sudo:sudo vim /etc/sudoers 拷贝一行root,然后替换用户名
readelf -s exe | grep symbol,可确认是否将新函数/全局变量之类的编进去
addr2line -e exe addr
useradd 和 adduser 区别??
分析coredump
- 看到前三个堆栈是对的,第四个堆栈显示是0xffffffffffffffff,再往下就显示“Backtrace stopped: previous frame identical to this frame (corrupt stack?)”
- 更新了动态库之后,就可以bt看到所有堆栈了,挂死在assert()里面,而且所有的堆栈都出来了
- 这是个好奇怪的问题??
追加写与非追加写
- 非追加写,多个线程一起写,则文件会错乱,因为每个线程的写入流程如下:
- 锁住inode
- 找到自己的f_ops
- 从f_ops的地方开始写数据
- 解锁inode
- 追加写,多个线程一起写,文件也不会错乱,因为每个线程的写入都是如下流程
- 锁住inode
- 获取i_size
- 从i_size的位置开始写数据
- 解锁inode
PS:
- libevent安装方式:./autogen.sh && ./configure && make && sudo make install. 注意:当系统时间老于文件时间时,会使得make一直在循环;
- zlog安装方式:make && sudo make install.
- protobuf安装:同libevent;