- 博客(8)
- 收藏
- 关注
原创 Linux由默认语言导致的uniq命令重复计数错误
背景今天遇到一件比较奇怪的事,同一个文件在统计重复行时出现了不同的结果,手动执行时去重后有2.5w+,放到crontab中执行,去重后居然有2.9w+。分析查看文件内容,发现文件中有一些特殊字符,猜想和系统设置的语言相关,于是测试了一下,[root@localhost ~]# export LC_ALL=""[root@localhost ~]# cat /tmp/myfile | so...
2018-12-29 16:50:52 616
原创 Linux系统调用流程——open函数从用户态接口到内核
注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4,glibc版本为glibc-2.17-196.el7_4.21、关于系统调用linux内核其实可以看做是一个大型应用,其提供的接口就称之为系统调用。而我们平时经常用的open、close、read、write等函数,其实并不是linux提供的系统调用,而是glibc提供的接口,它封装了linux的相关系统调用,以一个...
2018-12-29 10:37:48 4013 1
原创 gcc编译报错: /usr/bin/ld: cannot find -lc
背景在64位机器上编译32位可执行程序,出现以下报错,[root@CentOS-7-4 /home/syscall]# gcc -g -static -m32 open.c -o open32/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status解决方案这其实是因为缺少32位相关编译环境,需要安装g...
2018-12-27 21:01:48 1784
原创 Linux X86架构参数传递规则
背景突然好奇x86架构下函数参数怎么传递的,之前只是听别人说过通过寄存器,但是怎么传,什么顺序都没有仔细研究过,也没有实际测试过,因此就想着用实践来检验一下咯。传参顺序在32位和64位机器上,寄存器名称不同,64位机器为rxx,32位机器为exx。传参顺序如下,64位系统有16个寄存器,32位系统只有8个。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r...
2018-12-27 16:18:01 8325
原创 fatal error: gnu/stubs-32.h: No such file or directory
背景在64位系统上编译32位可执行程序时出现报错,[root@CentOS-7-2 /home/register]# gcc -g -m32 test.c -o testIn file included from /usr/include/features.h:399:0, from /usr/include/stdio.h:27, ...
2018-12-27 15:53:27 8449 2
原创 Linux使用snoopy记录命令执行日志
注:本文基于CentOS 6.5编写1、关于snoopysnoopy是一个开源的轻量级lib库, 可以记录系统中所有执行过的命令和参数。它是以预加载(preload)的方式实现历史命令的记录。 通过封装execv()和execve()系统调用,在发生这两个系统调用的时候记录下所需要的信息。2、安装在CentOS 6.5系统上可以直接通过yum方式安装,如果没有对应的rpm包也可以直接用源码...
2018-12-18 18:05:22 2946 1
原创 Linux使用PROMPT_COMMAND环境变量记录用户操作日志
注:本文基于CentOS 6.5 编写1、关于PROMPT_COMMAND环境变量Bash在显示PS1之前先执行PROMPT_COMMAND定义的内容,而PS1也就是linux的命令提示符,关于PS1详细设置可参考:Linux 提示符后面显示全路径。我们可以先感受一下PROMPT_COMMAND的功能效果,如果要显示命令执行的时间,可以如下操作。[root@CentOS-6-5 /]# e...
2018-12-18 16:14:45 12322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人