zoukankan      html  css  js  c++  java
  • Linux系统编程

    ------------恢复内容开始------------

    ~代表 根目录,每个用户根不同。

     系统根目录

    bin:存放可执行文件。

    boot:系统开机启动的进程

    dev:设备文件

    etc:用户的配置文件

    passwd:用户信息

    home:用户的目录

    lib:库目录

    root:root权限用户目录

    usr:unix software resource目录

     Linux系统文件类型:

       普通文件:-

       目录文件:d

       字符设备文件:c

       块设备文件:b

      软连接:l

      管道文件:p

      套接字:s

      未知文件:u

     软连接:

      为保证软连接可以任意搬移,创建时务必对源文件使用绝对路径

     硬链接:

      操作系统给每一个文件富裕唯一的inode,当有相同的inode的文件存在时,彼此同步。

      删除的时候,只将硬连接计数-1.当计数为0 inode文件被释放。

    inode 和 block 概述

    文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block

    文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block

    Linux检查与检索

    find 命令

    -type 按文件类型搜索

    -name 按文件名搜索

    -

    find ./  -name '*.jpg'

    find ./ -type 'l'

    find ./ -size +20m -size -50m

    find ./ -size +20k -size -50k(只能小k) 单位:k、M、G

    find ./ -name -maxdepth 1 '*.jpg* 

    find /usr/ -name '*tmp*' -exec ls -ld {}

    find -exec:讲find结果集执行某一指定的命令


    sudo find ./ ctime 1 一天内修改

    grep 根据内容检索

    grep -r 'hello' ./

    -xargs 当结果集数量过大的时候,可以分片进行处理

    ps 命令 监控后台进程的工作情况

    ps aux|grep 只有一条结果 说明系统没有该进程。

    至少两条。

    ps aux | grep '' ---通过管道,检索进程结果集

    源码安装

    1、解压缩源代码包

    2、cd dir

    3、./configure

    检测文件是否缺失,创建Makefile,检测编译环境

    4、make

    编译源码,生成库和可执行程序

    5、sudo make install

    把库和可主席那个程序,安装到系统路径下

    6、sudo make distclean

    删除和卸载文件

    软件安装:

    1、联网

    2、更新软件资源列表到本地sudo apt-get update

    3、安装sudo apt-get install 软件名

    4、卸载sudo apt-get remove 软件名

    5、使用软件包.deb 安装: sudo dpkg -i 安装包名

    压缩:

    1、tar -zcvf 要生成的压缩包名  压缩材料。

      tar zcvv test.tar.gz file1 dir2

      tar zcvf 要生成的压缩包名 压缩材料

      gzip gunzip 只能解压或压缩一个文件

     tar zcvf test.tar.gz file1 dir2 使用gzip方式压缩

    tar jcvf test.tar.gz file1 dir2 使用bzip2方式压缩

    解压 

      将压缩命令中c-->x

     tar zcvf test.tar.gz 使用gzip方式压缩

     tar jcvf test.tar.gz 使用bzip2方式压缩

     rar

    打包:把dir压缩成newdir.rar

    rar a -r new dir dir

    解包:把newdir.rar解压缩到当前目录

    unrar x newdir.rar

    zip压缩:

       zip -r 压缩包名(带.zip后缀)压缩材料

        zip -r testzip.zip dir stdio.h test2.mp3

    zip 解压

      unzip -r 

    cat  &  (&让进程后台运行)

    jobs 查看用户后台进程

    fg 前后台切换

    top 任务管理器

    程序运行过程

    gcc -c是小写。

     gcc编译 

    步骤:

    1、编译

    -I:指定头文件所在目录位置

    -c:只做预处理、编译、汇编。得到二进制文件

    -g:编译时添加调试语句。主要支持gdb调试

    -Wall:显示所有警告信息

    -D:显示所有的宏。动态增加。

     

    静态库和共享库

    静态库制作步骤:

    1、将.c生成.o文件

       gcc -c add.c -o add.o

    2、使用ar工具制作静态库

      ar rcs lib库名.a  add.o sub.o

    3、编译静态库到可执行的文件中:

    gcc test.c libmymath.a -o test

    把.c和静态库一起编译。

    头文件守卫:防止头文件被重复包含

    #ifndef _HEAD_H_

    #define _HEAD_H_

    .....

    #endif

    动态库制作及使用

    1、将.c生成.o文件(生成与位置无关的代码 -fPIC)

    gcc -c add.c -o add.o -fPIC

    2、使用gcc -shared 制作动态库

      gcc -shared lib库名.so add.o sub.o div.o

    3、使用动态库

      编译可执行程序,指定所使用的动态库。-l -L

    -l:指定库名 -L:指定库的路径

     gcc test.c -o a.out -l lib库名 -L:指定库路径。

     gcc test.c -o a.out -lmymath -L./lib

    gcc testStatic.c -o test -lmath -L./lib -I ./inc

    4、运行可执行程序./a.out (出错!!!!)

    原因:

        链接器:工作于链接阶段,工作的时候需要 -l 和 -L

             动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。

    通过环境变量:export LD_LIBRARY_PATH=动态库路径

    ./a.out 成功!

    永久生效:写入终端配置。.bashrc  建议使用绝对路径

    1) vi ~/.bashrc

    2) 写入export LD_LIBRARY_PATH

    3). .bashrc/ source .bashrc /重启 终端 ---->让修改后的.bashrc生效

    4) ./a.out 成功!!!

    新方法:拷贝自定义动态库 到 /lib (标准C库所在目录位置)

    配置文件法:

      1): sudo vi  /etc/ld.so.conf

      2):写入 动态库绝对路径 保存

      3):sudo ldconfig -v

      4):./a.out 成功   

    ------------恢复内容结束------------

    ------------恢复内容开始------------

    ------------恢复内容开始------------

    ~代表 根目录,每个用户根不同。

     系统根目录

    bin:存放可执行文件。

    boot:系统开机启动的进程

    dev:设备文件

    etc:用户的配置文件

    passwd:用户信息

    home:用户的目录

    lib:库目录

    root:root权限用户目录

    usr:unix software resource目录

     Linux系统文件类型:

       普通文件:-

       目录文件:d

       字符设备文件:c

       块设备文件:b

      软连接:l

      管道文件:p

      套接字:s

      未知文件:u

     软连接:

      为保证软连接可以任意搬移,创建时务必对源文件使用绝对路径

     硬链接:

      操作系统给每一个文件富裕唯一的inode,当有相同的inode的文件存在时,彼此同步。

      删除的时候,只将硬连接计数-1.当计数为0 inode文件被释放。

    inode 和 block 概述

    文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block

    文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block

    Linux检查与检索

    find 命令

    -type 按文件类型搜索

    -name 按文件名搜索

    -

    find ./  -name '*.jpg'

    find ./ -type 'l'

    find ./ -size +20m -size -50m

    find ./ -size +20k -size -50k(只能小k) 单位:k、M、G

    find ./ -name -maxdepth 1 '*.jpg* 

    find /usr/ -name '*tmp*' -exec ls -ld {}

    find -exec:讲find结果集执行某一指定的命令


    sudo find ./ ctime 1 一天内修改

    grep 根据内容检索

    grep -r 'hello' ./

    -xargs 当结果集数量过大的时候,可以分片进行处理

    ps 命令 监控后台进程的工作情况

    ps aux|grep 只有一条结果 说明系统没有该进程。

    至少两条。

    ps aux | grep '' ---通过管道,检索进程结果集

    源码安装

    1、解压缩源代码包

    2、cd dir

    3、./configure

    检测文件是否缺失,创建Makefile,检测编译环境

    4、make

    编译源码,生成库和可执行程序

    5、sudo make install

    把库和可主席那个程序,安装到系统路径下

    6、sudo make distclean

    删除和卸载文件

    软件安装:

    1、联网

    2、更新软件资源列表到本地sudo apt-get update

    3、安装sudo apt-get install 软件名

    4、卸载sudo apt-get remove 软件名

    5、使用软件包.deb 安装: sudo dpkg -i 安装包名

    压缩:

    1、tar -zcvf 要生成的压缩包名  压缩材料。

      tar zcvv test.tar.gz file1 dir2

      tar zcvf 要生成的压缩包名 压缩材料

      gzip gunzip 只能解压或压缩一个文件

     tar zcvf test.tar.gz file1 dir2 使用gzip方式压缩

    tar jcvf test.tar.gz file1 dir2 使用bzip2方式压缩

    解压 

      将压缩命令中c-->x

     tar zcvf test.tar.gz 使用gzip方式压缩

     tar jcvf test.tar.gz 使用bzip2方式压缩

     rar

    打包:把dir压缩成newdir.rar

    rar a -r new dir dir

    解包:把newdir.rar解压缩到当前目录

    unrar x newdir.rar

    zip压缩:

       zip -r 压缩包名(带.zip后缀)压缩材料

        zip -r testzip.zip dir stdio.h test2.mp3

    zip 解压

      unzip -r 

    cat  &  (&让进程后台运行)

    jobs 查看用户后台进程

    fg 前后台切换

    top 任务管理器

    程序运行过程

    gcc -c是小写。

     gcc编译 

    步骤:

    1、编译

    -I:指定头文件所在目录位置

    -c:只做预处理、编译、汇编。得到二进制文件

    -g:编译时添加调试语句。主要支持gdb调试

    -Wall:显示所有警告信息

    -D:显示所有的宏。动态增加。

     

    静态库和共享库

    静态库制作步骤:

    1、将.c生成.o文件

       gcc -c add.c -o add.o

    2、使用ar工具制作静态库

      ar rcs lib库名.a  add.o sub.o

    3、编译静态库到可执行的文件中:

    gcc test.c libmymath.a -o test

    把.c和静态库一起编译。

    头文件守卫:防止头文件被重复包含

    #ifndef _HEAD_H_

    #define _HEAD_H_

    .....

    #endif

    动态库制作及使用

    1、将.c生成.o文件(生成与位置无关的代码 -fPIC)

    gcc -c add.c -o add.o -fPIC

    2、使用gcc -shared 制作动态库

      gcc -shared lib库名.so add.o sub.o div.o

    3、使用动态库

      编译可执行程序,指定所使用的动态库。-l -L

    -l:指定库名 -L:指定库的路径

     gcc test.c -o a.out -l lib库名 -L:指定库路径。

     gcc test.c -o a.out -lmymath -L./lib

    gcc testStatic.c -o test -lmath -L./lib -I ./inc

    4、运行可执行程序./a.out (出错!!!!)

    原因:

        链接器:工作于链接阶段,工作的时候需要 -l 和 -L

             动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。

    通过环境变量:export LD_LIBRARY_PATH=动态库路径

    ./a.out 成功!

    永久生效:写入终端配置。.bashrc  建议使用绝对路径

    1) vi ~/.bashrc

    2) 写入export LD_LIBRARY_PATH

    3). .bashrc/ source .bashrc /重启 终端 ---->让修改后的.bashrc生效

    4) ./a.out 成功!!!

    新方法:拷贝自定义动态库 到 /lib (标准C库所在目录位置)

    配置文件法:

      1): sudo vi  /etc/ld.so.conf

      2):写入 动态库绝对路径 保存

      3):sudo ldconfig -v

      4):./a.out 成功   

    gdb调试

    gcc -g main.c -o main

    使用-g 编译可执行文件。

    (目的:得到调试表)

    gdb a.out  

    list 1列出源码,根据源码指定,行号,设置断点。

    b: b 20 在20行位置设置断点。  

    run /r :  运行程序

    n/next:下一条指令。会越过函数

     s/step:下一条指令,不会越过函数,会进入函数

    p/print:查看变量的值。

    continue:继续执行断点后续指令。

    quit:退出当前调试gdb

    栈帧:随着函数调用而在stack上开辟的一片内存空间。用于存放函数调用时产生的局部变量和临时值。调用一个函数,就多一个栈帧。(形参、局部变量)

    Makefile 项目管理

     用途:

    1、项目代码编译管理

    2、节省编译项目时间

    3、一次编写终生受益

    4、操作示例文件:add.c sub.c mul.c div.c main.c

    makefile :

    基本原理:若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件。

      检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任一个被更新,则目标必须更新。

      目标的时间必须要晚于依赖的时间,否则,更新目录

      依赖的条件不存在,找寻新的规则去产生依赖。

    1个规则:

      命名:makefile  Makefile (两种)

      目标:依赖条件

        (一个tab缩进)命令。

    ALL:指定makefile的终极目录。 

    2个函数:

        src=$(wildcard ./*.c):匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src。

          obj=$(patsubst % .c,%.o,$(src)):将参数3种,包含参数1的部分,替换为参数2。  

    clean:没有依赖

    -rm -rf $(obj) a.out "-":作用是不存在文件时,不报错。顺序执行结束。

    3个自动变量:

      $@:在规则的命令中,表示目标

      $<:在规则的命令中,表示所有依赖条件

      $^:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖一次去除,套用模式规则。

    模式规则:

       %.o:%.c

      gcc -c %< -o %@

    静态模式规则:

       $(obj):%.o %.c

        gcc -c $< -o %@

    伪目标:

      .PHONY clean ALL

    参数:

      -n:模拟执行make、make clean 命令

      -f:指定文件执行make命令

     open函数

      int open(char *pathname,int flags)    #include <unistd.h>

    pathname:欲打开的文件路径名

    flags:文件打开方式:ORDONLY|O_WRONLY|O_RDWR O_CREAT|OAPPEND|O_APPEND|O_TRUNC   #include <fcntl.h>

    返回值:

      成功:打开文件所得到对应的 文件描述符(整数)

      失败:-1,设置errno

      int open(char *pathname,int flags,mode_t mode)

      参数:

        pathname:欲打开的文件路径名

        flags:文件打开方式:ORDONLY|O_WRONLY|O_RDWR O_CREAT|OAPPEND|O_APPEND|O_TRUNC  #include <fcntl.h>

        mode:参数3使用的前提是,参数2指定了O_CREAT。取值8进制数,用来描述文件的 访问权限。rwx 0664

          创建文件最终权限=mode&~umask。

      返回值:

        成功:打开文件所得到对应的  文件描述符(整数)

        失败:-1,设置errno

    close函数:

      int close(int fd);

    错误处理函数:   与errno相关。

      printf("xxx error:%d ",errno);

      char *strerror();

      void perror(const char *s);

        perror("open error");使用

       printf("xxx error:%s ",strerror(errno));

    read函数:

      ssize_t read(int fd,void *buf,size_t count);

      参数:1、fd文件描述符

         2、buf存数据的缓冲区

         3、count缓冲区的大小

        返回值:

         成功:读到的字节数。

         失败:-1,设置errno

    write函数:

      ssize_t write(int fd,const void *buf,size_t count);

      参数:1、fd文件描述符

         2、buf存数据的缓冲区

         3、count缓冲区的大小

        返回值:

         0:读到文件末尾

         成功:写入的字节数。

         失败:-1,设置errno

    提醒:只有系统函数才能访问内核,库函数只能通过调用库函数才能调用内核,不能直接操作内核。

    预读入缓输出:

    ------------恢复内容结束------------

    ------------恢复内容结束------------

    ------------恢复内容开始------------

    ------------恢复内容开始------------

    ~代表 根目录,每个用户根不同。

     系统根目录

    bin:存放可执行文件。

    boot:系统开机启动的进程

    dev:设备文件

    etc:用户的配置文件

    passwd:用户信息

    home:用户的目录

    lib:库目录

    root:root权限用户目录

    usr:unix software resource目录

     Linux系统文件类型:

       普通文件:-

       目录文件:d

       字符设备文件:c

       块设备文件:b

      软连接:l

      管道文件:p

      套接字:s

      未知文件:u

     软连接:

      为保证软连接可以任意搬移,创建时务必对源文件使用绝对路径

     硬链接:

      操作系统给每一个文件富裕唯一的inode,当有相同的inode的文件存在时,彼此同步。

      删除的时候,只将硬连接计数-1.当计数为0 inode文件被释放。

    inode 和 block 概述

    文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block

    文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block

    Linux检查与检索

    find 命令

    -type 按文件类型搜索

    -name 按文件名搜索

    -

    find ./  -name '*.jpg'

    find ./ -type 'l'

    find ./ -size +20m -size -50m

    find ./ -size +20k -size -50k(只能小k) 单位:k、M、G

    find ./ -name -maxdepth 1 '*.jpg* 

    find /usr/ -name '*tmp*' -exec ls -ld {}

    find -exec:讲find结果集执行某一指定的命令


    sudo find ./ ctime 1 一天内修改

    grep 根据内容检索

    grep -r 'hello' ./

    -xargs 当结果集数量过大的时候,可以分片进行处理

    ps 命令 监控后台进程的工作情况

    ps aux|grep 只有一条结果 说明系统没有该进程。

    至少两条。

    ps aux | grep '' ---通过管道,检索进程结果集

    源码安装

    1、解压缩源代码包

    2、cd dir

    3、./configure

    检测文件是否缺失,创建Makefile,检测编译环境

    4、make

    编译源码,生成库和可执行程序

    5、sudo make install

    把库和可主席那个程序,安装到系统路径下

    6、sudo make distclean

    删除和卸载文件

    软件安装:

    1、联网

    2、更新软件资源列表到本地sudo apt-get update

    3、安装sudo apt-get install 软件名

    4、卸载sudo apt-get remove 软件名

    5、使用软件包.deb 安装: sudo dpkg -i 安装包名

    压缩:

    1、tar -zcvf 要生成的压缩包名  压缩材料。

      tar zcvv test.tar.gz file1 dir2

      tar zcvf 要生成的压缩包名 压缩材料

      gzip gunzip 只能解压或压缩一个文件

     tar zcvf test.tar.gz file1 dir2 使用gzip方式压缩

    tar jcvf test.tar.gz file1 dir2 使用bzip2方式压缩

    解压 

      将压缩命令中c-->x

     tar zcvf test.tar.gz 使用gzip方式压缩

     tar jcvf test.tar.gz 使用bzip2方式压缩

     rar

    打包:把dir压缩成newdir.rar

    rar a -r new dir dir

    解包:把newdir.rar解压缩到当前目录

    unrar x newdir.rar

    zip压缩:

       zip -r 压缩包名(带.zip后缀)压缩材料

        zip -r testzip.zip dir stdio.h test2.mp3

    zip 解压

      unzip -r 

    cat  &  (&让进程后台运行)

    jobs 查看用户后台进程

    fg 前后台切换

    top 任务管理器

    程序运行过程

    gcc -c是小写。

     gcc编译 

    步骤:

    1、编译

    -I:指定头文件所在目录位置

    -c:只做预处理、编译、汇编。得到二进制文件

    -g:编译时添加调试语句。主要支持gdb调试

    -Wall:显示所有警告信息

    -D:显示所有的宏。动态增加。

     

    静态库和共享库

    静态库制作步骤:

    1、将.c生成.o文件

       gcc -c add.c -o add.o

    2、使用ar工具制作静态库

      ar rcs lib库名.a  add.o sub.o

    3、编译静态库到可执行的文件中:

    gcc test.c libmymath.a -o test

    把.c和静态库一起编译。

    头文件守卫:防止头文件被重复包含

    #ifndef _HEAD_H_

    #define _HEAD_H_

    .....

    #endif

    动态库制作及使用

    1、将.c生成.o文件(生成与位置无关的代码 -fPIC)

    gcc -c add.c -o add.o -fPIC

    2、使用gcc -shared 制作动态库

      gcc -shared lib库名.so add.o sub.o div.o

    3、使用动态库

      编译可执行程序,指定所使用的动态库。-l -L

    -l:指定库名 -L:指定库的路径

     gcc test.c -o a.out -l lib库名 -L:指定库路径。

     gcc test.c -o a.out -lmymath -L./lib

    gcc testStatic.c -o test -lmath -L./lib -I ./inc

    4、运行可执行程序./a.out (出错!!!!)

    原因:

        链接器:工作于链接阶段,工作的时候需要 -l 和 -L

             动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。

    通过环境变量:export LD_LIBRARY_PATH=动态库路径

    ./a.out 成功!

    永久生效:写入终端配置。.bashrc  建议使用绝对路径

    1) vi ~/.bashrc

    2) 写入export LD_LIBRARY_PATH

    3). .bashrc/ source .bashrc /重启 终端 ---->让修改后的.bashrc生效

    4) ./a.out 成功!!!

    新方法:拷贝自定义动态库 到 /lib (标准C库所在目录位置)

    配置文件法:

      1): sudo vi  /etc/ld.so.conf

      2):写入 动态库绝对路径 保存

      3):sudo ldconfig -v

      4):./a.out 成功   

    ------------恢复内容结束------------

    ------------恢复内容开始------------

    ------------恢复内容开始------------

    ~代表 根目录,每个用户根不同。

     系统根目录

    bin:存放可执行文件。

    boot:系统开机启动的进程

    dev:设备文件

    etc:用户的配置文件

    passwd:用户信息

    home:用户的目录

    lib:库目录

    root:root权限用户目录

    usr:unix software resource目录

     Linux系统文件类型:

       普通文件:-

       目录文件:d

       字符设备文件:c

       块设备文件:b

      软连接:l

      管道文件:p

      套接字:s

      未知文件:u

     软连接:

      为保证软连接可以任意搬移,创建时务必对源文件使用绝对路径

     硬链接:

      操作系统给每一个文件富裕唯一的inode,当有相同的inode的文件存在时,彼此同步。

      删除的时候,只将硬连接计数-1.当计数为0 inode文件被释放。

    inode 和 block 概述

    文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block

    文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block

    Linux检查与检索

    find 命令

    -type 按文件类型搜索

    -name 按文件名搜索

    -

    find ./  -name '*.jpg'

    find ./ -type 'l'

    find ./ -size +20m -size -50m

    find ./ -size +20k -size -50k(只能小k) 单位:k、M、G

    find ./ -name -maxdepth 1 '*.jpg* 

    find /usr/ -name '*tmp*' -exec ls -ld {}

    find -exec:讲find结果集执行某一指定的命令


    sudo find ./ ctime 1 一天内修改

    grep 根据内容检索

    grep -r 'hello' ./

    -xargs 当结果集数量过大的时候,可以分片进行处理

    ps 命令 监控后台进程的工作情况

    ps aux|grep 只有一条结果 说明系统没有该进程。

    至少两条。

    ps aux | grep '' ---通过管道,检索进程结果集

    源码安装

    1、解压缩源代码包

    2、cd dir

    3、./configure

    检测文件是否缺失,创建Makefile,检测编译环境

    4、make

    编译源码,生成库和可执行程序

    5、sudo make install

    把库和可主席那个程序,安装到系统路径下

    6、sudo make distclean

    删除和卸载文件

    软件安装:

    1、联网

    2、更新软件资源列表到本地sudo apt-get update

    3、安装sudo apt-get install 软件名

    4、卸载sudo apt-get remove 软件名

    5、使用软件包.deb 安装: sudo dpkg -i 安装包名

    压缩:

    1、tar -zcvf 要生成的压缩包名  压缩材料。

      tar zcvv test.tar.gz file1 dir2

      tar zcvf 要生成的压缩包名 压缩材料

      gzip gunzip 只能解压或压缩一个文件

     tar zcvf test.tar.gz file1 dir2 使用gzip方式压缩

    tar jcvf test.tar.gz file1 dir2 使用bzip2方式压缩

    解压 

      将压缩命令中c-->x

     tar zcvf test.tar.gz 使用gzip方式压缩

     tar jcvf test.tar.gz 使用bzip2方式压缩

     rar

    打包:把dir压缩成newdir.rar

    rar a -r new dir dir

    解包:把newdir.rar解压缩到当前目录

    unrar x newdir.rar

    zip压缩:

       zip -r 压缩包名(带.zip后缀)压缩材料

        zip -r testzip.zip dir stdio.h test2.mp3

    zip 解压

      unzip -r 

    cat  &  (&让进程后台运行)

    jobs 查看用户后台进程

    fg 前后台切换

    top 任务管理器

    程序运行过程

    gcc -c是小写。

     gcc编译 

    步骤:

    1、编译

    -I:指定头文件所在目录位置

    -c:只做预处理、编译、汇编。得到二进制文件

    -g:编译时添加调试语句。主要支持gdb调试

    -Wall:显示所有警告信息

    -D:显示所有的宏。动态增加。

     

    静态库和共享库

    静态库制作步骤:

    1、将.c生成.o文件

       gcc -c add.c -o add.o

    2、使用ar工具制作静态库

      ar rcs lib库名.a  add.o sub.o

    3、编译静态库到可执行的文件中:

    gcc test.c libmymath.a -o test

    把.c和静态库一起编译。

    头文件守卫:防止头文件被重复包含

    #ifndef _HEAD_H_

    #define _HEAD_H_

    .....

    #endif

    动态库制作及使用

    1、将.c生成.o文件(生成与位置无关的代码 -fPIC)

    gcc -c add.c -o add.o -fPIC

    2、使用gcc -shared 制作动态库

      gcc -shared lib库名.so add.o sub.o div.o

    3、使用动态库

      编译可执行程序,指定所使用的动态库。-l -L

    -l:指定库名 -L:指定库的路径

     gcc test.c -o a.out -l lib库名 -L:指定库路径。

     gcc test.c -o a.out -lmymath -L./lib

    gcc testStatic.c -o test -lmath -L./lib -I ./inc

    4、运行可执行程序./a.out (出错!!!!)

    原因:

        链接器:工作于链接阶段,工作的时候需要 -l 和 -L

             动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。

    通过环境变量:export LD_LIBRARY_PATH=动态库路径

    ./a.out 成功!

    永久生效:写入终端配置。.bashrc  建议使用绝对路径

    1) vi ~/.bashrc

    2) 写入export LD_LIBRARY_PATH

    3). .bashrc/ source .bashrc /重启 终端 ---->让修改后的.bashrc生效

    4) ./a.out 成功!!!

    新方法:拷贝自定义动态库 到 /lib (标准C库所在目录位置)

    配置文件法:

      1): sudo vi  /etc/ld.so.conf

      2):写入 动态库绝对路径 保存

      3):sudo ldconfig -v

      4):./a.out 成功   

    gdb调试

    gcc -g main.c -o main

    使用-g 编译可执行文件。

    (目的:得到调试表)

    gdb a.out  

    list 1列出源码,根据源码指定,行号,设置断点。

    b: b 20 在20行位置设置断点。  

    run /r :  运行程序

    n/next:下一条指令。会越过函数

     s/step:下一条指令,不会越过函数,会进入函数

    p/print:查看变量的值。

    continue:继续执行断点后续指令。

    quit:退出当前调试gdb

    栈帧:随着函数调用而在stack上开辟的一片内存空间。用于存放函数调用时产生的局部变量和临时值。调用一个函数,就多一个栈帧。(形参、局部变量)

    Makefile 项目管理

     用途:

    1、项目代码编译管理

    2、节省编译项目时间

    3、一次编写终生受益

    4、操作示例文件:add.c sub.c mul.c div.c main.c

    makefile :

    基本原理:若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件。

      检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任一个被更新,则目标必须更新。

      目标的时间必须要晚于依赖的时间,否则,更新目录

      依赖的条件不存在,找寻新的规则去产生依赖。

    1个规则:

      命名:makefile  Makefile (两种)

      目标:依赖条件

        (一个tab缩进)命令。

    ALL:指定makefile的终极目录。 

    2个函数:

        src=$(wildcard ./*.c):匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src。

          obj=$(patsubst % .c,%.o,$(src)):将参数3种,包含参数1的部分,替换为参数2。  

    clean:没有依赖

    -rm -rf $(obj) a.out "-":作用是不存在文件时,不报错。顺序执行结束。

    3个自动变量:

      $@:在规则的命令中,表示目标

      $<:在规则的命令中,表示所有依赖条件

      $^:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖一次去除,套用模式规则。

    模式规则:

       %.o:%.c

      gcc -c %< -o %@

    静态模式规则:

       $(obj):%.o %.c

        gcc -c $< -o %@

    伪目标:

      .PHONY clean ALL

    参数:

      -n:模拟执行make、make clean 命令

      -f:指定文件执行make命令

     open函数

      int open(char *pathname,int flags)    #include <unistd.h>

    pathname:欲打开的文件路径名

    flags:文件打开方式:ORDONLY|O_WRONLY|O_RDWR O_CREAT|OAPPEND|O_APPEND|O_TRUNC   #include <fcntl.h>

    返回值:

      成功:打开文件所得到对应的 文件描述符(整数)

      失败:-1,设置errno

      int open(char *pathname,int flags,mode_t mode)

      参数:

        pathname:欲打开的文件路径名

        flags:文件打开方式:ORDONLY|O_WRONLY|O_RDWR O_CREAT|OAPPEND|O_APPEND|O_TRUNC  #include <fcntl.h>

        mode:参数3使用的前提是,参数2指定了O_CREAT。取值8进制数,用来描述文件的 访问权限。rwx 0664

          创建文件最终权限=mode&~umask。

      返回值:

        成功:打开文件所得到对应的  文件描述符(整数)

        失败:-1,设置errno

    close函数:

      int close(int fd);

    错误处理函数:   与errno相关。

      printf("xxx error:%d ",errno);

      char *strerror();

      void perror(const char *s);

        perror("open error");使用

       printf("xxx error:%s ",strerror(errno));

    read函数:

      ssize_t read(int fd,void *buf,size_t count);

      参数:1、fd文件描述符

         2、buf存数据的缓冲区

         3、count缓冲区的大小

        返回值:

         成功:读到的字节数。

         失败:-1,设置errno

    write函数:

      ssize_t write(int fd,const void *buf,size_t count);

      参数:1、fd文件描述符

         2、buf存数据的缓冲区

         3、count缓冲区的大小

        返回值:

         0:读到文件末尾

         成功:写入的字节数。

         失败:-1,设置errno

    提醒:只有系统函数才能访问内核,库函数只能通过调用库函数才能调用内核,不能直接操作内核。

    预读入缓输出:

     leesk函数

    off_t lseek(int fd,off_t offset,int whence);

    参数:

      fd:文件描述符

      whence:起始偏移位置:SEEK_SET/SEEK_CUR/SEEK_END

    返回值:

      成功:较起始位置偏移量

      失败:-1 errno

    常见应用:

      1、文件的读、写使用同一偏移位置

      2、使用lseek获取、拓展文件大小。

      3、使用lseek拓展文件大小(要想文件大小真正的拓展,必须引起IO操作)

        使用truncate函数,直接拓展文件。

    传入参数:

    1.指针作为函数参数

    2.通常有const关键字修饰

    3.指针指向有效区域,在函数内部做读操作

    传出参数:

    1.指针作为函数参数

    2.在函数调用之前,指针指向的空间可以无意义,但是必须有效

    3.在函数内部,做写操作。

    4.函数调用结束以后,充当函数的返回值。

    传入传出参数:

    1.指针作为函数参数

    2.在函数调用之前,指针指向的空间要有实际意义

    3.在函数内部,先做读操作,后做写操作

    4.函数结束后,充当返回值。

     

    文件系统

     inode

    dentry

    stat函数(cosnt char **path,struct stat *buf)

    参数:

       path:文件路径

       buf:传出参数  存放文件属性

    返回值:成功0

        失败1 errno

    而获取文件大小:buf.st_size

    获取文件类型:buf.st_mode

    获取文件权限:buf.st_mode

    符号传统:stat会传统,lstat不会穿透

    PCB是一个结构体的成员变量(指针)指向文件描述符表(下标文件描述符)

    文件目录权限

    注意:目录文件也是“文件”,其文件内容是该目录下所有子文件的目录项dentry。用vim打开

     目录操作函数:

      DIR *opendir(char *name);

      int closedir(DIR *dp);

      struct dirent *readdir(DIR *dp);

      struct dirent{

      inode

      char dname[256];

      }

    递归遍历目录

      查询指定目录,递归列出目录中的文件,同时显示文件大小

      

    ------------恢复内容结束------------

    ------------恢复内容结束------------

    ------------恢复内容结束------------

  • 相关阅读:
    BZOJ2337 [HNOI2011]XOR和路径
    「学习笔记」3.31代码学习
    uva live 12846 A Daisy Puzzle Game
    Cannot use ImageField because Pillow is not installed
    Android点击Button水波纹效果
    hdu 1241 Oil Deposits
    c++ 字符输入读取
    clutter recoder
    C/C++获取数组长度
    vector array and normal stanard array
  • 原文地址:https://www.cnblogs.com/Alei777/p/15412155.html
Copyright © 2011-2022 走看看