linux学习day02

  1. cd的使用: .  当前目录  ..  上一层目录  ~  当前用户家目录   -前一个工作目录(前一级)
  2. 路径
    1. 相对路径:相对于自己的目标文件的位置,而建立出的目录路径,当所处位置不同时,相对路径就会发生变化。
    2. 绝对路径:文件在硬盘上真正存在的路径,任何人引用时所有的路径都是一样的
  3. 用户组概念:用户组提供了一种简单方法供一组用户互相共享文件,用户组允许系统管理员更加有效的管理用户权限,管理员可以直接把权限分配给用户组而不是逐一分配给每个用户。
  4. 文件管理:一些需要熟悉的命令
    1. chmod  777 文件名 || chmod u=rw,og=x 文件名  ( rwx(421位权) 读写执行,ugoa各种不同用户)改变文件夹下所有的文件权限 ——R
    2. chgrp(修改目录所属群组) chgrp -v (显示执行过程) 群组  文件名
    3. chown(root,变更文件关联组)
    4. diff(比较文件差异)
    5. cat(文件打印标准输出设备上)cat -n/b 文件名(n显示空行的行号,b不显示空行的行号)  cat -n 文件名1  >>文件名2(1的内容加上行号输入到2的文档)可配合管道符一起使用 more less tac head tail
    6. more 类似于cat,不过会以一页一页的形式显示 +20 从20页开始显示
    7. less less可以随意浏览文件,支持翻页和搜索,
    8. head  用于看文件的开头部分的内容,有一个常用的参数 -n 显示几行,默认十行
    9. file(辨识文件类型)file -b(不显示文件名)/L(显示连接所指向文件类别) 文件名
    10. find(在指定目录查找文件)find 路径 -name /type 文件名  (文件名支持通配符*?:“*.c”)
    11. mv(改名或者将文件移入其他位置)mv 文件名1 文件名2(把文件名改成2)mv 目录1 目录2
    12. rm(删除)rm -i/f/r(询问/直接删除/递归删除)文件名
    13. touch(创建文件)
    14. mkdir(创建目录)
    15. cp(复制文件)-r(递归)test/*  newtest(将test下所有文件复制到新目录newtest)
    16. which(在环境变量里查找文件)which bash
    17. whereis(查找文件)-b/m(二进制/说明文件)bash
    18. cmp(比较两个文件是否有差异,无差异则不会显示任何东西)
    19. pwd:显示工作路径
    20. ls:查看目录中的文件
    21. grep:分析一行信息,若有需要就显示出来,配合管道符使用,对一些命令的输出进行筛选加工等。grep 所需文件 目录
    22. sort:排序两个文件的内容
    23. comm:-1 比较两个文件只删除文件1的内容,-2只删除文件2的内容;-3删除文件共有内容
    24. tar:tar -cvzf加压 -xvzf解压 -cjvf加压 -jxvf解压
    25. 系统和关机:shutdown -h now ;init 0 ;telinit 0; shutdown -h hours:monutes;shutdown -c;shutdown -r now;reboot; logout;time(测算一个命令的执行时间)
    26. ps:将某个时间点的进程运行情况选取下来并输出。
    27. kill:杀死进程
    28. (命令信息具体可以查看http://www.tuohang.net/article/240846.html)
  5. vim的使用
    1. 三种模式切换:命令行模式-》编辑模式(输入a、i);编辑模式-》命令行模式(esc);命令行模式-》底行模式(shift+:,wq!强制保存退出)
    2. 命令行模式功能键(主要yy dd p u ;查找/?+字符串 ;替换:行号或者% s/old/new/gc %s/sum/result/g;编辑多个文件:vim 文件名1 文件名2;跳转:n 文件名 ;文件保存:w r ;sp+文件名多文件编写  )
      1. yy:复制当前光标所在行
      2. nyy:复制当前光标开始的n行
      3. p:黏贴复制的到所在光标行
      4. dd:删除当前光标所在行
      5. ndd:删除当前光标所在开始的n行
      6. /name:查找光标之后名为name的字符串
      7. G光标移动到文件尾
      8. u:取消前一个动作
      9. 具体

         

  6. gcc的使用
    1. 交叉编译:在宿主机下编程出在目标机下运行的代码的过程(在当前cpu平台下编译出在其他cpu平台运行的代码过程,不同的处理器有不同的汇编)
    2. gcc:GUN计划提供的编译器
    3. 了解程序从编写到运行的过程
        1.   编译前预处理:头文件展开,宏替换,条件编译;生成.i文件,GCC可以通过选项E使程序在预处理结束后就停止编译, gcc -E -o hello.i hello.c
        2.        编译:检查语法,转成汇编,生成汇编代码。可以通过选项S使GCC在进行完编译后停止,生成.s的汇编程序。gcc -S -o hello.s hello.c
        3.          汇编:编译汇编文件,生成目标文件,保存为.o的目标文件。可以通过-c选项生成目标文件。gcc -c -o hello.o hello.c
        4.           链接:链接所有目标文件,生成符号表,生成可执行文件。gcc -o hello hello.c
    4. GCC相关选项
      1. -c:进行汇编阶段,.c->.o
      2. -o:确定可执行文件的名称(elf格式:可执行和可链接格式用于可执行文件、目标代码、共享库和核心存储的标准文件格式)
      3. -E:只进行预处理
      4. -C:保留注释
      5. -S:进行编译阶段
      6. -g:产生调试工具GDB所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。
      7. -O:对程序进行优化,可执行文件的执行效率可以提高。O2 O3 O0 O1
      8. -l:头文件指定路径?
      9. -L:库存放的路径
      10. -lname:在连接时装载名字为libname.a的函数库,改函数库位于系统预设的目录或者由-L选项确定的目录下。
      11. -static:静态链接库文件
      12. -w:关闭所有警告
      13. -Wall:打开所有警告
      14. -D:定义宏
    5. 程序库:包涵了一些通用函数的数据和二进制可执行机器码的文件,单独不能运行,与其他可执行程序结合起来可以运行。库文件:保存函数和变量,里面的函数和变量只能使用,但是看不到实现。
      1.   库文件的存放路径:系统运行所需的库文件:/lib 第三方软件和工具所需要的的库:/usr/lib;在编译时,编译器会自动到这两个目录里找所需要链接的库文件
      2.   静态库:.a,保存的函数和变量,在编译阶段加载到可执行文件中。
      3.   制作静态库
        1.   将目标源文件编译成目标文件;gcc -c 目标文件(gcc -c add.c)
        2.   使用ar工具制作静态:ar -rcs(库不存在就创建,存在就更新) 所要生成库文件的名字(lib+库名+后缀.a) 目标文件 ar -rcs libadd.a add.o  (ar -t 库名(查看当前库里所有文件.o) ar -d 库名  .o 删除库里的.o 文件)
        3. 使用静态库:-l 指定加载哪个静态库,-L指定加载的库文件指定目录 gcc demo.c -ladd -L./lib
      4.        动态库:.so保存的函数和变量,在执行阶段加载到执行文件中。
      5.   制作动态库
        1.   gcc -shared-fPIC -o 库名.so 源文件.c
        2.   gcc 源文件.c./库名.so -o 可执行文件名(尽量要编译的程序.c往前放,有一定的顺序问题;另外,动态库也可以用lL也调用,并且动态库静态库同名时,默认调用的是动态库)
      6. 区别:
        1.   使用静态库编译出来的可执行文件大小>使用动态库编译出来的可执行文件大小 --》内存的开销
        2.   使用静态库编译出来的可执行文件执行速度<使用动态库编译出来的可执行文件执行速度
        3.   使用静态库编译出来的可执行文件升级<使用动态库编译出来的可执行文件升级
        4.   使用静态库编译出来的可执行文件程序部署<使用动态库编译出来的可执行文件程序部署
posted @ 2023-05-13 13:31  风中凌乱的猪头  阅读(24)  评论(0)    收藏  举报