Linux系统编程(1)

Section1

  • shell :命令解释器,解析命令,执行同名的解析文件;内嵌在终端中
  • cat /etc/shells:查看支持的shell
  • echo $SHELL:查看当前正在使用的shell
  • sudo su:切换账户(默认不写切换root)
    在这里插入图片描述
    • history:历史命令
    • ctrl+a/ctrl+e:行首、行尾
    • ctrl+u:清除命令
类Unix系统目录
  • date和./date:区别
    • date是交个命令解释器解析后执行的
    • ./date是自己直接执行命令文件
  • bin:二进制mingl
  • boot:开机加载的程序
  • dev:设备文件(所见皆文件)
  • etc:用户配置信息
    • 比如passwd中的信息:用户名,用户id,组id,家目录地址,所使用的shell
  • home:用户目录,如:python
  • 对于root来说家目录是/root根目录
  • 对于其他用户家目录在/home下
  • media/mnt:挂载磁盘的,可以手动指定mnt,默认是media
  • opt/proc:进程相关
  • usr(unix software resource):用户的,比如c的头文件
目录和文件操作(温习)
  • mkdir
  • touch
  • ~
  • -a 隐藏文件
  • -l 查看目录
  • -a 人性化显示大小
  • 权限
    • 文件类型:
      在这里插入图片描述

    • 分别是:所有者,所有组,其他人的权限
      在这里插入图片描述
      在这里插入图片描述

    • which date:查看date命令的位置

    • vi .bashrc 中设置命令行路径提示取消 加上:PS1=$

    • ls -R :递归每一层

    • ll :详细显示文件夹

    • rm -r/-R

    • rm -f:强制删除,不提示

    • cp:拷贝目录的时候要加 -a(会把文件的创建时间等信息一起拷贝) 或者-r
      在这里插入图片描述

    • cat /tac(倒着显示);
      在这里插入图片描述

  • more、less、head(显示前几行),tail(显示后几行)
  • tree:这个命令不是自带的,是要安装的
软连接和硬链接
  • 软连接:相当于快捷方式 在这里插入图片描述
    在这里插入图片描述

  • 硬链接(普通文件):
    在这里插入图片描述

    • 对任意的硬链接修改,其他的硬链接都会同步修改
    • 原理:文件是有一个同一的inode,删除的时候硬链接计数会-1
      在这里插入图片描述
创建修改用户和用户组
  • whoami
  • sudo -su
  • chmod:rwx 421 自己 组 他人
  • 添加用户
    在这里插入图片描述
  • 中间的两个数字分别是用户编号,用户组编号(给计算机看的):
    在这里插入图片描述
  • 修改文件所有者:sudo chown 新用户名 待修改的文件
    • 新用户可以到/home文件夹下查看 在这里插入图片描述
  • 创建用户组
    在这里插入图片描述
  • 修改文件的用户组:chgrp
    在这里插入图片描述
    在这里插入图片描述
  • 一次性修改文件用户和用户组
    在这里插入图片描述
  • 删除用户 和 删除 用户组
    在这里插入图片描述
find命令
  • 查找某文件类型的文件
    -按类型查找 在这里插入图片描述
    • 按名字查找 在这里插入图片描述
      在这里插入图片描述
    • 按大小查找
      • man find:查找find命令的手册
      • 块的大小:512b 在这里插入图片描述
    • atime、mtime、ctime
      在这里插入图片描述
  • 命令分析 在这里插入图片描述
    在这里插入图片描述
grep和xargs 找文件内容(find是找文件)
- grep

在这里插入图片描述

  • ps -aux
  • find 的结果集交个管道grep没有用,可以用xargs,原因是结果集太大了。但是xargs可以把结果集分片; 在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • xargs 默认吧结果集按照“ ”空格拆分,如果文件名本身带了空格会出错,可以用print0处理
软件包安装
在线安装
  • 命令解释:sudo apt-get install tree:(安装工具apt-get,理解就是一个安装源;同理pip是python相关软件的安装源)
  • 更新 :sudo apt-get update
  • 软件是来自于ubuntu的服务器,比如14.04版本是14年的,支持5年,那么19年前可以在ubuntu的服务器上下载到所有的软件
  • 卸载:sudo apt-get remove
    在这里插入图片描述
离线安装
  • centos属于redhat;ubuntu属于debian所有安装包是以.deb结尾 - 在这里插入图片描述
  • 还有源码安装
压缩命令gzip和bzip2(本身命令只能针对单个文件压缩,还不支持文件夹类型,所以用tar)
  • tar -zcvf

    • z :gzip压缩
    • c:创建
    • f:指定文件名
    • v:显示进度
  • tar -jcvf

    • z :bzip2压缩
  • tar -zxvf :x表示解压

  • tar -jxvf

rar压缩和zip压缩
  • 要安装rar,unrar 在这里插入图片描述
其他命令
  • who:带进程在这里插入图片描述
  • whoami
  • jobs:查看当前用户的作业(ps查的是整个系统)
  • echo :回显到屏幕
    • echo $SHELL :“ $ ”表示取出环境变量,取出环境变量SHELL,显示到屏幕
  • env:查看所有环境变量
  • top:文字版进程管理器
  • sudo passwd 用户名 :设置密码
  • su 用户名 :切换用户 在这里插入图片描述
  • man man(手册)
    在这里插入图片描述
  • alias :比如ls被alias起过别名,痴心结果和直接执行文件./ls不一样(同样还有ll) 在这里插入图片描述
  • umask:指定掩码:操作系统会自动去除执行权限
  • 快捷键:ctrl+alt+t/ctrl+shift+t:呼出终端
vim
  • 三种模式:
    • 命令
    • 文本
    • 末行 在这里插入图片描述
      在这里插入图片描述
删除

在这里插入图片描述

复制粘贴

在这里插入图片描述

查找替换

在这里插入图片描述

其他

在这里插入图片描述

配置思路
gcc编译4步骤

在这里插入图片描述
在这里插入图片描述

动态库和静态库理论比对

在这里插入图片描述

静态库制作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

静态库使用及头文件对应
  • 报警分析:
    • 有行号表名是编译阶段出问题(逐行扫描);
    • collect(链接器):表名是链接问题
  • 如果函数使用前没有看见定义,可以看见声明;如果声明和定义都没有,编译器会默认隐式声明,但是声明只针对int类型
    在这里插入图片描述
  • 所以要为静态库制作头文件,然后要在原码中导入头文件
    在这里插入图片描述
动态库制作-生成与位置无关代码

在这里插入图片描述

  • 静态的库函数,就是相当于写在代码里,都写死了地址(相对于main函数的),随时调用,比如下面的sub
    在这里插入图片描述
  • -fPIC:生成位置无关的地址(相对于main函数的地址)
    在这里插入图片描述
  • LD :链接器
  • 动态链接器需要的动态库路径写入环境变量,但是命令下export的环境变量是属于进程的,当终端的进程关闭在打开,读取的是shell里面的默认的值,所以应该写进shell的配置文件.bashrc里。写完后要运行一下:如下图:
    .bashrc
  • 错误出现的原因和方法
  • 链接器:完成数据合并,地址回填(根据main函数的实际地址回填内部函数的地址)
  • 动态链接器:加载动态库(就是上面的@plt,等待动态时候获得真正的地址)
    在这里插入图片描述
  • 动态库加载查询
    在这里插入图片描述
数据段合并
  • 磁盘最新单位512kb
  • 内存最小单位4kb
  • 内存分区
    在这里插入图片描述
gdb调试
  • 基本指令
    在这里插入图片描述

  • 其他指令
    在这里插入图片描述
    在这里插入图片描述

  • 需要注意的是:正常运行的文件,和调试用的文件,内容不一样,调试用的文件编译的时候加了选项 -g ,文件里有调试表;

  • makefile管理
  • 相当于shell脚本,把命令放在脚本里执行;

  • makefile:每次编译都只会处理源文件被修改的部分,其他没有修改的不动,只是最后统一做一下链接,然后生成可执行程序;当中省去拉大量的编译时间提高了效率;原理是看的修改时间(检查目标是否需要更新)

  • 其中* 和 %的区别是 都是通配符,但是%出现在同一行必须一样(有锁定的作用,前一个%提取的字符,后一个必须一样)

  • 两个重要的函数:wildcard,patsubst

  • makefile脚本文件
    在这里插入图片描述

  • Makefile 项目管理总结
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181102124602732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1a
    291NjMzNTQ5MA==,size_16,color_FFFFFF,t_70)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

系统编程

  • 印象
    在这里插入图片描述

Section2

open函数(系统函数)
  • 区别fopen(库函数),open是系统函数
  • 返回一个整数的文件描述符
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • read和write
    在这里插入图片描述
    在这里插入图片描述

  • copy操作
    在这里插入图片描述

  • Makefile重申 其中* 和 %的区别是 都是通配符,但是%出现在同一行必须一样(有锁定的作用,前一个%提取的字符,后一个必须一样)
    在这里插入图片描述

  • 系统调用和库函数比较—预读入缓输出
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 文件描述符
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 阻塞和非阻塞
    在这里插入图片描述

    • 在读取设备文件和 网络文件的时候,不应该采用轮询的模式,而应该采用epoll这种响应的模式
      在这里插入图片描述
  • fcntl改文件属性
    在这里插入图片描述
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值