Linux 2 系统编程

Linux系统编程 2

1.压缩解压缩管理

(1).tar 将文件 或者文件夹进行归档

 tar [选项] 打包文件名 文件

tar -cvf 创建归档文件

tar -xvf 解除归档文件(还原)

tar -tvf 查看归档文件内容

 sudo tar -cvf test.tar file2 file4 file5
 
 ls
 file2  file4  file5  test.tar

(2).gzip 文件压缩工具 不支持文件夹

由于特性 故此经常先归档再压缩

 sudo gzip test.tar
 
 ls
 file2  file4  file5  test.tar.gz

 

tar指令 实现压缩加归档

 ls
 test.tar.gz
 
 sudo tar zxvf test.tar.gz // 解缩
 
  ls
 file2  file4  file5  test.tar.gz
 
 sudo rm test.tar.gz//删除归档
 
 ls
 file2  file4  file5
 
 sudo tar -vczf test.tar.gz file2 file4 file5//快捷归档压缩
 
 ls
 file2  file4  file5  test.tar.gz
(3).bzip2

令一种压缩方式

在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。

简单用法

 sudo bzip2 file2 压缩
 sudo bzip2 -d file2.bz2 解压
 

 

 压缩用法:tar jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)
     sudo tar jcvf mm.test.tar.bz2 file2
 
 解压用法:tar jxvf 压缩包包名 (tar jxvf bk.tar.bz2)
     sudo tar jxvf mm.test.tar.bz2
 

 

(4).1.zip和un zip

需要压缩的文件不需要指定压缩名字 压缩名字 zip -r 目标文件 源文件

解压文件 unzip -d 解压后目录文件 压缩文件

 sudo zip mya file2 file4 file5
 sudo unzip mya.zip
2.文件权限管理
(1).linux用户分类

所有者 创建文件的用户

用户组 某一类组

其他用户 公告用户权限

(2).访问权限说明

读 r 写 w 可执行 x

(3).chmod 修改文件权限

字母法修改权限

捕获

 sudo chmod o+wx rsyslogd.pid ///更改其他组为 读写 
 -rw-r--rwx  1 root  root     3 6月   7 09:02 rsyslogd.pid
 sudo chmod u-w rsyslogd.pid//撤销所有者写权限
 -r--r--rwx  1 root  root     3 6月   7 09:02 rsyslogd.pid
  sudo chmod g=x rsyslogd.pid//更改用户组为 读写
  -r----xrwx  1 root  root     3 6月   7 09:02 rsyslogd.pid  
 

数字法修改权限

QQ图片20230608172707

捕获

(4).chown 与chgrp 权限管理

chown 修改文件所属者

 -rw-rw-r--  1 root  utmp  1152 6月   7 09:03 utmp
 sudo chown utmp utmp//文件所属者
 -rw-rw-r-- 1 utmp utmp 1152 6月   7 09:03 utmp
 sudo chown :root utmp//文件所属组
 -rw-rw-r-- 1 utmp root 1152 6月   7 09:03 utmp
 
3.软件包安装

在线安装 卸载 ls

 sudo apt-get install sl
 sudo apt-get remove sl

软件包本地安装

tree软件安装

deng@itcast:~$ sudo dpkg -i tree_1.6.0-1_amd64.deb

tree软件卸载

deng@itcast:~$ sudo dpkg -r tree

4.重定向

比如ls显示到屏幕的数据重定向到文件中

重定向文件-屏幕输出到文件

 ls /etc/passwd  > file1 //文件重定向
 cat file1
 //内容->/etc/passwd
 sudo ls /etc/passwd >>file1 //文件内容重定向追加输入
 //内容->/etc/passwd   /etc/passwd
 //重定向标准错误输出
 wwww 2>> file1
 //重定向黑洞
 ls dafsd 2> /dev/null
5.其他命令
(1).tree

tree 以树状形式查看指定目录内容,使用该命令需要安装软件 tree:

sudo apt install tree

(2).ln

创建链接文件

软链接->快捷方式

硬链接->两个文件名同时指向一块磁盘区域(硬链接】 不受位置影响

无s是硬链接 有-s软链接

 软链接:ln -s file1 testfile2
 硬链接:ln file1 testfile1

 


6. geit编辑器
(1).vim编译器的三种模式

clip_image002

命令模式 -> [i] 编辑模式 ->esc ->命令模式

命令模式-> [:] 末行模式 ->回车

保存文件 shift zz

7.1 命令模式下的操作

(省)

as.pdf

7.GCC编译器
(1).gcc简介

linux 官方编译器 能编译多门语言

格式 gcc [ 可选选项] file

man gcc

c->预处理->编译->汇编.S->链接生成可执行文件

(2).GCC 工作流程和使用

c->i->s->o

clip_image002

clip_image002-1527509458588

分步生成可执行文件

 gcc -E test.c  -o testm.i.//生成预处理
  gcc -S testm.i -o tstemm.s//汇编文件
  gcc -c tstemm.s -o testtt.o//二进制文件
 gcc testtt.o -o mmm//可执行文件
  ./mmm
 

一步到位

 gcc test.c -o kzxwj

 

(3).gcc常用选项

gcc常用选项

选项作用
-o file 指定生成的输出文件名为file
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
-v / --version 查看gcc版本号
-g 包含调试信息
-On n=0~3 编译优化,n越大优化得越多
-Wall 提示更多警告信息
-D 编译时定义宏

显示所有的警告信息

gcc -Wall test.c

将警告信息当做错误处理

gcc -Wall -Werror test.c

(4).静态链接和动态链接

1.静态链接

由链接器在链接时将库内容加入可执行文件

2.动态链接

在链接时 将所需库函数建立关系

依赖动态库

3.静态 动态 编译对比

1.动态编译

 gcc test.c -o testshare

2.静态编译

 gcc -static test.c -o teststatic

大小对比

 ls -ln testshare teststatic
 -rwxrwxr-x 1 1000 1000   8304 6月   9 08:18 testshare
 -rwxrwxr-x 1 1000 1000 845272 6月   9 08:18 teststatic
 

 

(5).静态库 与动态库
(1)静态库的制作

环境 生成 4个.c h 文件 分别有 加减乘除

写一个主文件 包含四个头文件

多文件编译

名字: 前 libxxx.a 后

将打包好的.o文件生成静态库

 sudo gcc -c mul.c -o mul.o

ar- [r c s] 名字 静态库

 ar -rcs libtest.a mul.o sub.o add.o
    r更新
    c创建
    s建立索引
(2).静态库的使用
 gcc mun.c -L./ -I./ -ltest -o test
    -L:表示要连接的库所在目录
    -I./: I(大写i) 表示指定头文件的目录为当前目录
    -l(小写L):指定链接时需要的库,去掉前缀和后缀

 

(3).动态库的制作

name: libxxx.so

三步

 //生成目标文件(与地址无关的编译程序)
 gcc -fPIC -c add.c
 //生成共享库
 gcc -shared add.o sub.o mul.o -o libqtest.so
 //nm查看对应函数
 nm libtest.so | grep add

命令选项参数与空格分隔

(4).动态库使用

三种方法

1.生成法

 gcc mun.c -L. -I. -ltest
     当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径。此时就需要系统动态载入器(dynamic linker/loader)。
    对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的 DT_RPATH段 — 环境变量LD_LIBRARY_PATH — /etc/ld.so.cache文件列表 — /lib/, /usr/lib目录找到库文件后将其载入内存。
 //1.临时设置路径
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:libqtest.so
 //2.永久设置
 //永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到~/.bashrc或者 /etc/profile文件中
 
      vim ~/.bashrc
 
    最后一行添加如下内容:
 
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径
     
    使环境变量生效
 source ~/.bashrc
 //3.使用符号链接, 但是一定要使用绝对路径
 sudo ln -s /home/as/文档/test/as/libqtest.so /lib/libqtest.so//将lib文件创建一个到ls中
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/as/文档/test/as/libqtest.so

 

8.GDB调试器

GDB主要帮忙你完成下面四个方面的功能:

  1. 启动程序,可以按照你的自定义的要求随心所欲的运行程序。

  2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

  3. 当程序被停住时,可以检查此时你的程序中所发生的事。

  4. 动态的改变你程序的执行环境。

包含调试信息

 cc -g test.c -o fori
(1).简单调试

启动GDB

 gdb program

设置运行参数

 set args

启动程序

 run //执行完毕 或断点处  start 向下执行一行

显示源代码

 用list命令来打印程序的源代码。默认打印10行。
 
 Ø list linenum: 打印第linenm行的上下文内容.
 
 Ø list function: 显示函数名为function的函数的源程序。
 
 Ø list: 显示当前行后面的源程序。
 
 Ø list -: 显示当前行前面的源程序。
 
 一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。
 
 Ø set listsize count:设置一次显示源代码的行数。
 
 Ø show listsize: 查看当前listsize的设置。

 

(2).断点操作

break 设置断点 简写为b

b+行数/函数名/类名/类函数......

显示断点 info b

 

多文件设置断点
 C++中可以使用class::function或function(type,type)格式来指定函数名。
 
 如果有名称空间,可以使用namespace::class::function或者function(type,type)格式来指定函数名。
 
 Ø break filename:linenum -- 在源文件filename的linenum行处停住
 
 Ø break filename:function -- 在源文件filename的function函数的入口处停住
 
 Ø break class::function或function(type,type) -- 在类class的function函数的入口处停住
 
 Ø break namespace::class::function -- 在名称空间为namespace的类class的function函数的入口处停住
条件断点

if(i==5) 断下

continue 执行到第一个断点处

 b test.c:8 if Value == 5
维护断点

1.删除断点

 delete [range...]

2.暂挺断点生效

  disable [range...] 使指定断点无效

3.恢复断点生效

 enable [range...] 

d 简写

调试代码
  • run 运行程序,可简写为r

  • next 单步跟踪,函数调用当作一条简单语句执行,可简写为n

  • step 单步跟踪,函数调进入被调用函数体内,可简写为s

  • finish 退出进入的函数

  • until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u。

  • continue 继续运行程序,停在下一个断点的位置,可简写为c

  • quit 退出gdb,可简写为q

数据查看

p+变量

自动显示

设置自动显示的变量

display B

单步跟踪 挺住时 自动显示

显示自动变量 并删除

info display

显示所有的显示自动变量

delt te dispylay 2

disable 禁用

enable 启用

查看修改变量值

查看变量的类型

 ptype i(变量)

查看变量值

 p 变量

设置变量值

 set var i=9




posted @ 2023-06-06 14:49  大橘|博客  阅读(15)  评论(0)    收藏  举报