
Linux基本使用
主要是给刚刚接触linux的爱好者借鉴的。
KingOfMyHeart
会好起来的.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
docker查看运行时容器的IP地址
查看容器的ip地址原创 2022-09-07 22:17:08 · 1144 阅读 · 1 评论 -
ubuntu创建.deb安装文件,亲测可行
创建比如说,作为C/C++程序员的我给用户提供了一些功能,我可以把头文件和动态库打包成一个deb文件交给用户使用。假设,我给用户的包名叫libmytools,首先第一步,先创建一个文件夹,叫libmytools,并且创建两个子目录,一个叫DEBIAN,一个叫usr/local。其中local中又包含include和lib两个目录,分别存放要给用户的头文件和动态库:然后,在DEBIAN目录下创建一个control文件,该文件记录的该deb的主要信息,我在这里举一个简单使用例子来说明该文件:Pac原创 2022-05-07 16:10:20 · 655 阅读 · 0 评论 -
ubuntu20.04 settings选项消失不见
问题背景昨天在配置工作机环境时,把系统升级了一下,今天启动一个带界面docker容器时发现无法启动,以为是扩展显示器的问题,准备去设置中将扩展显示器先关掉,然后发现没有setting选项。解决方案sudo apt-get install gnome-control-centersudo reboot now机器重启后,发现setting选项出来了,容器启动也正常了,就很…神奇?...原创 2021-08-18 17:05:55 · 6140 阅读 · 0 评论 -
ubuntu安装docker容器
下载安装:curl -fsSL get.docker.com -o get-docker.shsudo sh get-docker.sh --mirror Aliyun**```启动服务:**```bashsystemctl {status,start,stop,restart} docker 检查是否成功:docker info设置开机自启:systemctl enable docker解决执行docker权限问题:docker: Got permission denied原创 2021-08-14 13:39:36 · 259 阅读 · 0 评论 -
Linux上使用cmake构建工程时用ccache来加速编译
安装sudo apt-get install ccache使用 ccache_path=`command -v ccache` if [ -n "$ccache_path" ];then export CXX="$ccache_path g++" export CC="$ccache_path gcc" fi原创 2021-05-17 22:04:51 · 2090 阅读 · 0 评论 -
linux上如何分辨一个二进制可执行文件是debug还是release的
假设,我们可执行文件是a.out:readelf -S a.out | grep debug如果,该文件是debug的,则会打印出类似这样的信息: [29] .debug_aranges PROGBITS 0000000000000000 00003042 [30] .debug_info PROGBITS 0000000000000000 000030d2 [31] .debug_abbrev PROGBITS原创 2021-05-15 20:52:46 · 2717 阅读 · 0 评论 -
gdb使用list查看源码不显示的问题
debug版本的可执行文件中保存的是源码文件的路径,当我们将可执行文件移动到其他环境的话,就无法根据该路径查看对应的源码文件了,所以看不到。原创 2021-05-15 20:46:48 · 1213 阅读 · 0 评论 -
Linux网络编程之端口复用 Address already in use
为什么需要端口复用我们直到,TCP连接在进行4次挥手断开连接时,为了确保最后一次ACK到达对端,保证对端正确关闭资源,以防止对傻傻等待浪费网络和计算机资源,要求等待2MSL时常,那么对于我们需要立即重启程序的情况不友好,有过经验的朋友都知道,我们关闭一个链接,然后立马重启这个连接,一般会报bind失败:虽然这个图是客户端主动断开连接,实际服务端主动断开也是一样的过程bind error: Address already in use表示端口号正在被占用,因为前一次的链接还没有被完全释放,通过指令可原创 2021-05-10 07:41:20 · 369 阅读 · 0 评论 -
IO多路转接epoll函数解析复习
函数原型:open an epoll file descriptor: 打开一个epoll文件系统#include <sys/epoll.h>int epoll_create(int size);参数:在内核中开辟一块内存,创建一个epoll文件系统(也叫内核事件表、是一棵红黑树),参数size是对内核的一个建议,但是一定要比0大,不一定起作用,表示监听的文件描述符个数,也就是基础红黑树的建议大小。返回值:ret > 0 返回一个可用,合法的文件描述符,表示创建的epo原创 2021-05-09 17:38:38 · 176 阅读 · 0 评论 -
IO多路转接之poll函数解析
函数原型:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);返回值:ret > 0 ,表示有事件发生的文件描述符的个数,可以去遍历fds,看哪个fd发生事件,并且根据对应的revent做下一步处理ret == 0,表示超时,且还没有事件发生ret<0,表示失败,可以根据全局变量errno来判断下一步的动作参数解析:struct pollfd *fds:是一个数组,将所有原创 2021-05-09 14:33:27 · 453 阅读 · 0 评论 -
复习补充一点系统调用实例
内核中的数据不能随意调用,不能随意jmp,毕竟操作系统是帮我们管理资源的,要不然我们还要操作系统做甚。//用户态int main(){ open(/* ..... */); //库函数 return 0;}----------------------------------------//内核态sys_open(/* ...... */){ //do something}如何做到不让用户随意访问内核数据或函数:依赖硬件设计主要原因是将内存大概分割为用户态和内核态。CPL DPL原创 2021-04-26 21:49:16 · 662 阅读 · 0 评论 -
shell命令执行原理
大概原理:int main(){ while(1){ scanf("%s",cmd); if(!fork()){ //如果是子进程,就执行cmd。不和父进程执行一样的指令 exec(cmd); } wait(); }}原创 2021-04-24 19:51:21 · 247 阅读 · 0 评论 -
环境变量LD_LIBRARY_PATH的含义和使用
主要作用:主要用于指定查找动态库时除了默认路径(如 /lib和/usr/lib等)之外的其他路径。使用场景:比如我们自己工程中的会有很多.so文件,对工程进行部署时,正常情况下我们是不会把这些库install到系统文件夹(/lib等)下面,这不通用,可能会影响其他用户对机器的使用,而且需要root权限,并不是所有的开发都会有root权限的。但是我们工程要跑起来需要用到这些库的符号,默认情况下,是不会加载没放在/lib 或者 /usr/lib中库,要想去指定加载我们工程目录中的库,需要设置LD_LIB原创 2021-04-20 21:48:28 · 5617 阅读 · 0 评论 -
docker:Error response from daemon:Unknown runtime specified nvidia
启动docker遇到这样的问题,做了一下操作后,可以正常启动:安装nvidia-docker:sudo apt-get install -y nvidia-docker2sudo apt-get install -y nvidia-docker查看是否安装完成:sudo docker run --runtime=nvidia --rm nvidia/cuda:10.0-base nvidia-smi具体看你机器上cuda的版本,我用的是10.0重启docker:sudo systemct原创 2021-04-14 16:09:00 · 1057 阅读 · 0 评论 -
ubuntu16.04安装显卡驱动nvidia-410
今天leader找我让我安装一下nvidia px2的编译环境,是被做成一个docker的,下载完成后启动,报错:requirement error:unsatisfied condition:cuda>=9.2然后通过nvidia-smi查看,发现自己机器cuda版本低于9.2,所以决定将机器上的显卡驱动升级.整个过程如下:卸载nvidia低版本显卡驱动:sudo apt-get purge nvidia*把显卡驱动加入PPA:sudo add-apt-repository ppa:原创 2021-04-14 15:31:21 · 470 阅读 · 0 评论 -
ubuntu18.04开机后突然只显示本地环回,不能正常连接网络,之前一直都正常
#暂停网络服务sudo service network-manager stop#删除旧有的网络配置,重新让networkmanager自动配置文件sudo rm -rf /var/lib/NetworkManager/NetworkManager.state#重新启动network服务sudo service network-manager start原创 2020-06-27 19:14:07 · 934 阅读 · 1 评论 -
Linux下利用dlopen()+dlsym()实现单元测试中系统调用的mock(2)
还有一种情况,一些系统调用所在的库并不在默认的路径或者调用定义不在默认的库中,此时需要我们指定库的查找路径和库名称,比如mock rt库中的系统调用,具体查看以下代码:#include <dlfcn.h>#include <time.h>const std::string rt_path = "/usr/lib/x86_64-linux-gnu/librt.so";void *create_handler = NULL;// mock timer_createtyped原创 2020-06-24 15:47:36 · 442 阅读 · 0 评论 -
使用dlsym()来mock已经完成code的单元测试中的系统调用------链接期垫片(link seam)
最近,在给公司的一些模块添加单元测试,金主们要求项目中分支的覆盖率达到80%,经过一段时间的工作,添加了很多的测试用例,但是分支覆盖率还是不理想,主要原因主要是:单元中涉及好多的分支都是对一些系统调用不用返回值的处理,比如下面的几个例子.我们知道这些系统调用正常来说很少会,也比较困难出现异常,在写test cases时就比较困难;int ready = epoll_wait(...);i...原创 2020-05-07 18:26:45 · 444 阅读 · 0 评论 -
linux杂谈(1)
1. Linux:仅仅是一个内核,不包含其他应用程序。GNU/Linux:通常以源码方式提供,包含提供的开源应用程序,这样给使用者使用方式的更多的选择,区别于windows,我们将windows系统安装在裸机上,几乎所有功能接口都是被锁定的,但是Linux与之相反。2. Linux发行版本:Debian:衍生版:Ubuntu,KnopixSlackware:衍生版:S.u.S.ER...原创 2020-03-08 17:40:32 · 264 阅读 · 0 评论