Linux 学习笔记(七)—— Linux 工具 2

一、root白名单

sudo指令可以对一条指令进行提权,但是这个需要一个前置条件,即对应用户要在root的白名单中(sudoers名单);

sudoers名单只能是root用户添加,权限:r--r-----

地址:/etc/sudoers

指令:vim /etc/sudoers

在“root ALL=(ALL) ALL”后面添加“普通用户名 ALL=(ALL)ALL”

二、gcc/g++

c语言推荐用gcc,c++推荐用g++;gcc和g++的选项一模一样,因此一起介绍;

指令:gcc 文件名.c /  g++ 文件名.cpp

功能:编译该文件,如果没有bug会生成可执行文件,如a.out;如果有bug会报错;

注意:gcc只能编译c语言,因此要求文件名的后缀为“.c”;g++可以编译c语言也可以编译C++,因此文件名后缀可以是“.c”也可以是“.cpp”;

背景(文本类源代码——>可执行程序):

1、预处理:宏替换、头文件展开、条件编译的处理、去注释

2、编译(生成汇编)

3、汇编(生成机器可识别的二进制代码)

4、链接(生成可执行文件或库文件)

选项:

  • 无选项:默认执行到最后,得到可执行文件;
  • -o [自定义文件名]:gcc / g++ 执行得到文件的自定义命名;
  • -E 文件名.c/.cpp:只进行预处理,该选项后面如果没带 “-o” 那么预处理结果会打印出来,带了“-o”会将预处理结果保存在文件中,预处理后文件的标准形式为 “文件名.i”;
  • -S 文件名.c/.cpp/.i:进行到第二步编译结束,如果是“.c/.cpp”就从头开始,如果是“.i”那就只进行编译工作,该语句之后也需带“-o”将结果保存在文件中,生成文件标准形式为“文件名.s”;
  • -c 文件名.c/.cpp/.i/.s:进行到汇编,生成文件的标准形式为“文件名.o”,该文件vim查看会是乱码,因为vim是以文本的方式读内容,而该文件存储的是二进制(可重定位目标二进制文件,简称:目标文件;windows下是“文件名.obj”),虽然目标文件已经是机器语言了,但它不可以独立运行;

链接主要是和所调用库文件进行链接:

  • Linux :.so(动态库)、.a(静态库) ——   库有自己的命名规则:libname.so.版本
  • Windows :.dll(动态库)、.lib(静态库)

指令:ldd [可执行程序]

功能:查看一个可执行程序所依赖的动态库

机器上默认只安装了动态库,没有安装静态库;Linux中编译程序形成的可执行程序也默认采用动态链接;如果要使用静态链接需要 “gcc name.c -o rename -static” 使用这个需要提前安装静态库 “yum -y install glibc-static” “yum -y install libstdc++-static” (不同版本百度即可)

动态库:

需要的时候调用,只需要一个,多个程序共享,在可执行程序外部;

静态库:

将库中内容拷贝到目标程序中,之后程序运行独立不依赖可执行程序外部的库;

扩展:

  1. 没有静态库可以进行-static吗?答:不行;
  2. 没有动态库但有静态库可以进行编译吗?答:可以;说明:gcc默认优先动态链接,-static的本质就是改变链接的优先级
  3. 一个可执行程序不一定是纯动态链接或者静态链接,有很大概率是混合的,对不同的库调用的方式不一样;“-static”选项是将所有的链接都变成静态链接;
  4. 指令:file 文件名,查看文件详细属性,包括库的链接方式;

动态库 VS  静态库

  • 动态库可以有效的节省资源(形成的可执行程序小,保存节省磁盘的空间,运行节省内存空间,传输的时候节省网络空间)
  • 动态库一旦缺失会导致一大片程序无法运行;
  • 静态库不依赖外部库,可以独立运行;
  • 静态库体积大,比较消耗资源;

debug VS release

  • gcc编译代码的时候生成的可执行文件默认是release版本的,如果要生成debug版本需要在后面加上“-g”选项;
  • debug版本会比release版本多一些debug信息,可以通过“readelf(读取可执行程序的二进制构成) -S code_debug | grep -i debug”查看;

扩展:可执行程序形成的时候,并不是无序的二进制,它有自己的格式,Linux采用的是ELF格式; ——  《程序员的自我修养》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值