linux
文章平均质量分 64
樱满无门
这个作者很懒,什么都没留下…
展开
-
diff命令实现
diff命令实现diff是类UNIX系统下的一个重要的系统工具,用于比较两个文本文件的差异。它有三种输出格式先给大家看看两个用于比对的文件原文file1:aebaghbggfile2:bcdgegjh格式一,普通格式:$ diff file1 file21,6d0< a< e< b< a< g< h7a2,3> c> d8a5> e9a7,8> j> h格式原创 2021-09-20 21:43:24 · 1163 阅读 · 0 评论 -
使用ptrace统计指令数【没有什么用的程序】
使用ptrace统计指令数【没有什么用的程序】最近在学习动态分析的时候注意到了ptrace这个系统调用这个系统调用的功能很强大,它不仅能观察对应的进程的执行,甚至能更改对应进程的内存和寄存器的值大名鼎鼎的GDB就是基于ptrace实现的著名的strace也是基于ptrace实现的使用man可以查看ptrace的描述它的原型:long ptrace(enum __ptrace_request request, pid_t pid, void *adddr, void *data);第一个参数原创 2021-07-16 17:15:25 · 363 阅读 · 0 评论 -
CS162_HW2: Shell
CS162_HW2: Shell作业要求:实现cd、pwd指令运行Program Execution解析路径输入输出重定向Optional:管道信号处理和停止控制前台、后台切换Get Started作业提供了Shell的骨架代码,包括一个分词工具tokenizer.c和shell的初始化、一个最简单的exit内建命令tokenizer.c的用法:/* A struct that represents a list of words. */struct tokens;/原创 2021-07-10 18:20:28 · 1167 阅读 · 0 评论 -
GLIBC源码——putchar
GLIBC源码——putcharGLIBC源码——从我认为最简单的putchar开始putchar放在putchar.c中,而putchar.c放在libio文件夹里加上注释,一共只有36行#include "libioP.h"#include "stdio.h"#undef putcharintputchar (int c){ int result; _IO_acquire_lock (stdout); result = _IO_putc_unlocked (c, std原创 2021-06-07 12:00:56 · 1303 阅读 · 1 评论 -
mtrace的使用
mtrace的使用mtrace是Linux下自带的内存泄露检测工具使用方法:在代码中包含#include <mcheck.h>头文件在开始检测的地方写上mtrace()在检测结束的地方协商muntrace()在GCC编译的时候加上-no-pie参数和-g参数在环境变量中设置MALLOC_TRACE,例如export MALLOC_TRACE=./mtrace.log运行程序,程序运行结束后,会生成一个log文件使用mtrace ./a.out ./log查看为什么使用-原创 2021-06-06 22:09:50 · 432 阅读 · 0 评论 -
动态链接库、GOT、PLT
动态链接库什么是动态链接库以下均为本人自己的理解,不一定正确,但是大致应当是差不多的在很久之前,没有库的概念,每一次写代码都是在从头造轮子后来,人们发现某一些功能是大部分程序里面都要用到的、共通的,且和具体程序没有该关系,例如向控制台打印一个字符等。于是,为了减少写代码的成本,人们把这些实现共通功能的代码汇聚起来,每一次需要使用的时候就用include或者import之类的方法去引用它。再后来,这类代码的量越来越大。这导致了两个问题:1,每一次编译的消耗越来越多;2,实际上并不会用到所有的代码,多原创 2021-06-03 10:36:38 · 500 阅读 · 0 评论 -
进程间通信——管道
进程间通信——管道最早的UNIX IPC方式使用是最简单的,局限也是最大的管道是半双工的两端进程必须是父子关系或者有共同祖先使用方式:一个进程使用系统调用pipe(int fd[2])创建管道,fd[0]为读端、fd[1]为管道的写端接下来,调用fork调用创建一个新的子进程。父子进程共享文件描述符,因此,fd也可以被子进程使用。这种使用会带来问题:同时进行读写,最终谁读到数据由进程调度决定。因此,为了达到数据通信的目的,在子进程写的时候,关闭父进程的写描述符、关闭子进程的读描述符,形成原创 2021-05-29 10:05:12 · 75 阅读 · 0 评论 -
Linux下简单Shell的实现
Linux下简单Shell的实现参考自《操作系统概念》第七版第三章进程下的项目UNIX Shell和历史特点首先梳理一下Shell的工作原理Shell进程读入用户命令行的输入,然后建立一个子进程来完成这个命令,等待,当子进程完成后,父进程继续读入用户新的命令使用fork()命令新建一个子进程后,该子进程将会是父进程的复制品——唯一区别在于fork()的返回参数不同,fork是唯一一个调用一次返回两次的函数,对于父进程,它返回子进程的PID号,对子进程,它返回0要让子进程执行对应的程序,应当使用e原创 2021-05-06 19:11:46 · 1361 阅读 · 0 评论 -
一天一个linux指令(一)——touch
touchtouch 命令用于修改文件或者目录的时间属性若文件不存在,将建立一个新的文件语法touch [-acfm][-d 时间][-r 参考档案][-t 时间][--help][--version][文件/目录]a: 改变档案的读取时间(attach time)m: 修改时间(modified time)c: --no-create,若目的档案不存在,不会建立新的档案r: 使用参考档案的时间记录NAME touch - change file timestamps原创 2021-02-22 17:08:12 · 98 阅读 · 0 评论 -
getopt源码寻找尝试
getopt源码寻找尝试getopt函数的作用是简单的参数分析,例如gcc -o main main.c其中,-o称之为option,main称之为optstring,main.c称之为parameterC语言在头文件unistd.h中定义了getopt函数unistd.h是C语言中提供对POSIX操作系统API访问功能的头文件的名称。使用$ vim /usr/include/unistd.h对其进行访问其中有这么一句话:#ifdef __USE_POSIX2/* Get def原创 2021-01-14 12:12:09 · 849 阅读 · 0 评论 -
Ubuntu下GTK+的下载、安装
Ubuntu下GTK+的下载与安装准备材料:Ubuntu 20.04 LTS(任意Debian系发行版即可)GCC步骤:安装使用sudo apt install libgtk-3-dev进行安装。使用pkg-config --list-all | grep gtk检测是否已经安装得到如下结果:gtk+-broadway-3.0 GTK+ - GTK+ Graphical UI Librarygtk+-x11-3.0原创 2020-12-31 00:10:10 · 2703 阅读 · 0 评论 -
Ubuntu下将rm命令替换为trash命令
Ubuntu下将rm命令替换为trash命令rm命令是一个很可怕的命令,因为它不会给你后悔的机会,删了就是删了,再也找不回来了(据说能在lost+found里面恢复,但是操作难度好像很大,反正新手是不适合使用的)。如果删的是个人文件还好,起码损失不大。如果以后到了公司不小心把重要文件删除了,那就没了。如果一个不小心把系统的重要配置删除了又不知道怎么恢复,那就惨了,只好重装系统了。重装系统意味着以前配置的所有环境、做的所有桌面美化全部付之一炬。为了更加安全地使用rm命令,有必要做一些改善。通过locat原创 2020-12-23 11:11:27 · 959 阅读 · 1 评论 -
Ubuntu 20.04 设置 动态壁纸
Ubuntu 20.04动态壁纸默认你已经下好gnome的主题编辑器tweaks了。如果没有下载,使用sudo apt install gnome-tweaks进行下载打开/usr/share/backgrounds/contest/,有一个focal.xml,里面存放的就是动态壁纸的信息。将这个xml文件复制一份,然后进行编辑,例如<background> <starttime> <year>2020</year> <原创 2020-12-23 02:44:55 · 3747 阅读 · 0 评论 -
ubuntu下firefox使用HTML 5播放器看B站
ubuntu下FireFox使用HTML 5播放器看B站firefox使用flash是真的难顶,一直闪白。发现bilibili其实可以使用html 5播放器。使用sudo apt install ubuntu-restricted-extras然后重启浏览器就行了,不用再花时间下载flash了而且flash是不是马上就不被支持了?果然还是firefox好用。...原创 2020-12-23 02:36:30 · 14058 阅读 · 1 评论 -
Ubuntu 20.04使用Firefox缺少Flash的解决方案
Firefox使用Flash的解决方案在做作业的时候想听B站直播,但是新装的Firefox并没有flash,只好手动进行安装。经过测试,无法使用flash官网下载的压缩包,原因不详。可能是因为我参考的博客都是好几年前的了。现在再使用下载压缩包->解压->放置到火狐目录下的方法,要么检测不到,要么报错。我的系统:$ uname -aLinux yingmanwumen 5.4.0-58-generic #64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020原创 2020-12-21 00:23:23 · 1028 阅读 · 0 评论 -
Linux下安装virtualenv与virtualenvwrapper
Linux下安装virtualenv与virtualenvwrapper事实上我已经忘记了当初在windows下的时候自己是怎么安装的virtual和virtualenvwrapper了。那还是很遥远的回忆,关于windows,关于python,关于pycharm。不过不管是windows还是linux,果然还是都要用pip来下载安装virtualenv使用pip3 install virtualenv基本上就没问题了傻子操作安装virtualenvwrapper这个就有点难度了首先第原创 2020-12-19 16:25:21 · 122 阅读 · 1 评论 -
Ubuntu 18.04 无法自动检测耳机解决方法
Ubuntu 18.04 无法自动检测耳机解决方法如果最开始接触的是Windows,恐怕会对windows的多媒体控制中心印象深刻,鼠标点一下就可以进行各种音效设置。但是在linux上,这一方面还不是很方便。因为linux主要还是用在服务器上比较多,与windows这种老牌的私人桌面系统相比,在个人电脑的使用体验上会差很多,例如颜色不够鲜艳(也有可能是我的电脑配置太低。因为它很便宜)、触摸屏经常会失灵(也有可能是我的电脑太便宜)、偶尔卡死(因为使用了桌面软件,linux下的桌面应用还不成熟。不过也有可能原创 2020-12-17 00:20:15 · 2339 阅读 · 2 评论 -
Ubuntu之时区修改
Ubuntu的时区设置至今用过一点点Linux版本,例如简单易上手的Ubuntu、在我看来有点臃肿的centOs、小巧的Fedora…在这些版本中我最喜欢的还是Ubuntu(因为方便)在新建一个Ubuntu虚拟机之后,一般的时间初始设置都是UTC时间而不是我们惯用的东八区时间本篇笔记主要讲述如何在Ubuntu上查看时间以及如何在Linux上设置时区查看时间输入指令date查看本机目前的时间~$ dateWed Sep 30 09:29:47 CST 2020可以看到,现在出现的是CST时间原创 2020-12-16 00:10:18 · 605 阅读 · 0 评论 -
Git教程——介绍、创建repository、版本回退
git教程git 是由我的偶像Linus用C语言花了两周时间写的分布式内容管理系统。此处放一句Linus的名言:See, you not only have to be a good coder tocreate a system like Linux, you have to be a sneaky bastard too.要想能够创造Linux这样得操作系统不只是需要良好的程序员,还得需要一批心理阴暗的混蛋为什么这么说呢?直到2002年,Linux的管理还是靠社区上传代码给Linu.原创 2020-12-15 13:39:04 · 225 阅读 · 0 评论 -
基于linux系统的简单malloc模型
在linux系统上的malloc的简单实现本片文章介绍 malloc 在linux系统上的简单实现,仅仅介绍有关原理,不涉及使用mmap等进行大块内存分配有关的部分。背景知识CSAPP第一章中对虚拟内存做了简洁的介绍。为了使进程感觉自己在独占处理器,使用虚拟内存,避免内存冲突。因此我们在下面所讨论的都是虚拟内存而非实际物理内存。linux中的内存分为两部分,一部分是内核空间,分布空间在0xFFFF800000000000 0xFFFFFFFFFFFFFFFF中,另一个部分为用户空间,分布在0x000原创 2020-12-15 13:33:28 · 145 阅读 · 1 评论 -
C语言内存泄漏检测——valgrind-memcheck
Valgrind什么是valgrindValgrind是一套linux下GPL(开源)调试工具集合。包括以下工具:memcheckcallgrindcachegrindhelgrindmassifmemcheck内存检查器主要检查:use of uninitialised memoryreading/writing memory after it has been freedreading/writing off the end of malloced blocksrea原创 2020-12-14 15:17:54 · 706 阅读 · 0 评论 -
如何在linux中实现简单翻译器
如何在linux中实现简单翻译器我本来只是有个单词不会想查找,然后想在linux里面找一些简单的命令行翻译器,结果百度到的几款翻译器都很拉垮。这让我萌生了自己写一个简单的翻译器的念头。大致想法翻译器这个东西肯定不是十分钟就能写出来的,我肯定要使用接口来获取翻译的结果,或者使用爬虫获取翻译网站的信息。最开始我想到的是使用百度翻译的接口。介绍以下curl命令,它能获取网页的源代码。通过观察,我发现百度翻译的网站要翻译的词语直接放在了url里面然后我通过查看网页的资源获取了显示翻译结果文本的html原创 2020-12-14 15:10:53 · 906 阅读 · 2 评论 -
Linux小知识之grep与&、&&、|、||
grep的用法使用grep --help查看帮助信息用百度机翻一下大概是这个画风Usage: grep [OPTION]... PATTERN [FILE]...Search for PATTERN in each FILE.Example: grep -i 'hello world' menu.h main.c模式选择和解释:-E、 --extended regexp PATTERN是一个扩展正则表达式-F、 --固定字符串模式是一组换行分隔的字符串-G、 --基本regexp模式是一原创 2020-12-14 15:03:37 · 1812 阅读 · 0 评论