free 订阅
free,英文单词,主要用作动词、形容词、副词,作及物动词时意思是“使自由,解放;释放”,作形容词时意思是“免费的;自由的,不受约束的;[化学] 游离的”,作副词时意思是“自由地;免费”。 展开全文
free,英文单词,主要用作动词、形容词、副词,作及物动词时意思是“使自由,解放;释放”,作形容词时意思是“免费的;自由的,不受约束的;[化学] 游离的”,作副词时意思是“自由地;免费”。
信息
英式读音
[friː]
美式读音
[friː]
词    性
动词、形容词、副词
外文名
free
free短语搭配
free software自由软件 ; 自由软体 ; 免费软件 ; 自在软件free fall自由落体 ; 自由下坠 ;[力]自由下落 ; 自由下降Free Trade[贸易]自由贸易 ; 自由交易 ; 贸易自由化 ; 自由商业 [1] 
收起全文
精华内容
下载资源
问答
  • FreeCAD 手册 是另一种更线性的方式,来呈现FreeCAD帮助信息。它做成了一本书的形式,也会善意地引导您进入FreeCAD世界。
  • free mybatis plugins

    2018-11-29 15:37:31
    free mybatis plugins 免费版下载 内附说明 解压可用
  • FreeCAD 0.17 使用教程

    2019-01-15 21:00:00
    FreeCAD 0.17 版使用教程,根据工作台划分,每个工作台有单独的文档配有截图描述操作方法
  • FreeRadius Beginner's Guide非常全面的一本FreeRadius入门指南书。
  • freemodbus v1.6最新版本

    2018-12-27 15:11:51
    FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了...
  • Xshell Free for Home & School 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络...
  • 免费的C-Free4.0标准版

    2016-04-17 13:25:42
    C-Free是一款C/C++集成开发环境(IDE)。它集成了C/C++代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。它提供了对目前业界主流C/C++编译器的支持,你可以在C-Free中轻松切换编译器。可定制的...
  • freebase的实体id到真实实体的映射 数据集
  • stm32 freemodbus 两个从机 测试ok
  • bugfree3.0.4 windows安装包与安装说明,比bugfree3.0.2稳定。rar
  • FreeRADIUS 3.0 安装与配置

    热门讨论 2015-01-07 12:14:10
    根据个人的实战经验,描述了FreeRADIUS的安装配置过程。CentOS 7.0 + FreeRADIUS 3.0 + MariaDB(mysql)。网上介绍FreeRADIUS安装配置的资料都比较旧,大部分是基于2.x版本的。本文档中涉及到的软件,都是比较新的...
  • freemodbus中文注释版

    热门讨论 2012-05-26 12:49:48
    毕业设计使用了freeModbus做AVR的从机,那代码写得挺高端的,用了几组状态机。我经验不足,当时研读了一个星期才读完。 阅读代码时我添加了很多中文注释。现在我把注释版发上来。 这些注释只是我对代码的理解,里面...
  • FreeRADIUS for windows

    2014-03-25 15:17:38
    FreeRADIUS-server for windows
  • STM32F407 LWIP FREERTOS FREEMODBUS

    热门讨论 2015-08-01 16:36:41
    STM32F407 LWIP FREERTOS FREEMODBUS MII模式
  • 用python 开发FreeCad 入门

    千次阅读 2021-03-01 05:01:20
    python 编程是 freecad 强大功能之一。不用编译freecad,只要安装好freecad 就可以。我学习了https://wiki.freecadweb.org/Python_scripting_tutorial 立马就感觉自己掌握了python 开发freecad,特整理此文。所有对...

    python 编程是 freecad 强大功能之一。不用编译freecad,只要安装好freecad 就可以。我学习了https://wiki.freecadweb.org/Python_scripting_tutorial 立马就感觉自己掌握了python 开发freecad,特整理此文。所有对freecad 的操作都可以用python 实现。Macro 中还有一个记录操作的工具,保存到文件中,下次调用就可以重复操作,当然你可编辑让他完成更复杂的操作。

    准备工作:

    启动freecad。

    在开始python编程前,需要设置界面:

    Edit → Preferences → General → Output window 勾选:

    Redirect internal Python output to report view.

    Redirect internal Python errors to report view.

    然后菜单: View → Panels   勾选 Report view.

    写python代码

    有2种方式写python 代码:

    View → Panels → Python console

    Macro → Macros...

    下面是第一种方式

    开始试一试代码

    doc = FreeCAD.newDocument()

    回车,其效果就是新建文档,菜单:file->New, 或者工具条 的新建,或者按键 Ctrl + N

    box = doc.addObject("Part::Box", "myBox")

    什么都没发生。 为什么? 因为FreeCAD是为大局而生的。 有一天,它将处理数百个复杂的对象,它们彼此依赖。 在某处进行小的更改可能会产生很大的影响,可能需要很长时间。 因此,几乎没有命令会自动更新场景。 必须手动执行。话虽这么说,在这里还是可以看到:

    doc.recompute()

    这样,在图形界面可以看到了。

    box.Height

    显示高度

    box.Height=5

    更改高度为5

    可以看到图形变了。

    矢量和位置

    体验下矢量和他的运算

    myvec = FreeCAD.Vector(2, 0, 0)
    myvec.x
    myvec.y
    othervec = FreeCAD.Vector(0, 3, 0)
    sumvec = myvec.add(othervec)

    然后看看位置:

    box.Placement
    box.Placement.Base
    box.Placement.Base = sumvec
     
    otherpla = FreeCAD.Placement()
    box.Placement = otherpla

    App and Gui

    FreeCAD的设计使其可以在没有用户界面的情况下用作命令行应用程序。 因此,FreeCAD中的几乎每个对象都由两部分组成:一个对象(其“几何”组件)和一个ViewObject(其“可视”组件)。 在命令行模式下工作时,存在几何图形部分,但可视部分被禁用。

    为了说明这个概念,让我们看一下我们的多维数据集对象。 多维数据集的几何属性(例如其尺寸,位置等)存储在对象中。 而其视觉属性(例如其颜色,线条粗细等)存储在ViewObject中。 这对应于“属性”编辑器中的“数据 Data”和“视图View”选项卡。 对象的视图对象的访问方式如下:

    vo = box.ViewObject

    现在可以改变View 的属性:

    vo.Transparency = 80
    vo.hide()
    vo.show()
    

    模块 Module

    FreeCAD的真正强大在于模块。 FreeCAD基本应用程序只是一个空容器。 没有它的模块,它只能执行创建新的空文档的工作。 每个模块不仅向界面添加了新的工作台,而且还增加了新的Python命令和新的对象类型。几种不同甚至完全不兼容的对象类型可以共存于同一文档中。 这里介绍FreeCAD中最重要的模块:零件,网格,草绘器和工程图。

    “草绘器”和“草稿”都使用“零件”模块来创建和处理其几何图形。 而网格是完全独立的,并处理自己的对象。 下文提供了更多信息。

    可以像这样检查当前文档的所有可用基础对象类型:

    doc.supportedTypes()
    

    模块并不自动导入python 控制台,需要的时候,你要自己导入,这样避免启动太慢。比如导入Part

    import Part

    导入后,可以

    Part. 就有很多功能提示。这里P是大写。

    网格 Mesh

    网格是一种非常简单的3D对象,例如Sketchup,Blender和3D Studio Max都使用网格。它们由3个元素组成:点(也称为顶点),线(也称为边缘)和面。在许多应用程序中(包括FreeCAD),面只能有3个顶点。当然,可以由多个共面三角形组成的更大的面。

    网格很简单,正因为简单,在一个文档中很容易拥有数百万个网格。在FreeCAD中,用得不多,大多数情况下都是从其他应用程序以网格格式(.stl,.obj)导入对象。

    网格对象和FreeCAD对象是不同的东西。可以将FreeCAD对象看作是Mesh对象的容器(对于Part对象也是如此)。为了将网格对象添加到FreeCAD中,必须首先创建一个FreeCAD对象和一个Mesh对象,然后将Mesh对象添加到FreeCAD对象中:

    import Mesh
    mymesh = Mesh.createSphere()
    mymesh.Facets
    mymesh.Points
     
    meshobj = doc.addObject("Mesh::Feature", "MyMesh")
    meshobj.Mesh = mymesh
    doc.recompute()

    这段代码的解说是:导入Mesh,建立一个Mesh(mymesh) ,查看面和点, doc 中添加mesh 对象,赋值mymesh, 显示计算。

    零件 Part

    零件模块是整个FreeCAD中最主要的模块。 它允许您创建和操作BRep对象。 BRep代表“边界表示”。与网格不同,BRep对象可以具有从平面到非常复杂的NURBS曲面的多种组件。

    零件模块基于强大的OpenCasCade库,该库允许对这些对象执行各种复杂的操作,例如布尔操作,圆角,放样等。

    “零件”模块的工作方式与“网格”模块相同:创建一个FreeCAD对象,一个“零件”对象,然后将“零件”对象添加到FreeCAD对象中:

    import Part
    myshape = Part.makeSphere(10)
    myshape.Volume
    myshape.Area
    
    shapeobj = doc.addObject("Part::Feature", "MyShape")
    shapeobj.Shape = myshape
    doc.recompute()

    其实后面代码也可简化为:

     Part.show(myshape)

    网格也一样。

    草图 Draft

    FreeCAD有更多的模块,例如Sketcher和Draft,它们也可以创建零件对象。 这些模块为创建的对象添加了附加参数,甚至实现了一种全新的方式来处理其中的零件几何图形。 上面的box例子是参数对象的一个示例。 定义box所需要做的只是指定参数高度,宽度和长度。 基于这些,对象将自动计算其零件形状。

    Draft 模块添加了诸如线和圆之类的2D参数化对象类型(全部为零件对象),并且还提供了一些通用功能,这些功能适用于Draft 对象,而且适用于任何Part对象。 执行以下操作练练手:

    import Draft
    rec = Draft.makeRectangle(5, 2)
    mvec = FreeCAD.Vector(4, 4, 0)
    Draft.move(rec, mvec)
    Draft.move(box, mvec)

    界面 Interface

    FreeCAD用户界面由功能强大的图形界面系统Qt组成,它负责绘制和处理3D视图周围的所有控件,菜单,工具栏和按钮。 Qt提供了一个PySide模块,该模块允许Python访问和修改Qt接口,例如FreeCAD。 下面用Qt界面产生一个简单的对话框:

    from PySide import QtGui
    QtGui.QMessageBox.information(None, "Apollo program", "Houston, we have a problem")

    注意,出现的对话框的工具栏中有FreeCAD图标,这意味着Qt知道Order是从FreeCAD应用程序内部发出的。 可以操纵FreeCAD界面的任何部分。

    Qt是一个非常强大的界面系统,可执行非常复杂的事情。 它还具有一些易于使用的工具,例如Qt Designer,可以使用该工具以图形方式设计对话框,然后使用几行Python代码将其添加到FreeCAD界面中。

    宏 Macros

    现在,已经对基础知识有了很好的了解,我们将在哪里保留Python脚本,以及如何在FreeCAD中启动它们? 有一种简单的机制称为宏。 宏是可以添加到工具栏并通过单击鼠标启动的Python脚本。 FreeCAD为您提供了一个简单的文本编辑器(宏→宏...→创建),您可以在其中编写或粘贴脚本。 脚本完成后,使用工具→自定义...→宏为其定义按钮,该按钮可以添加到工具栏。

    现在,可以进行更深入的FreeCAD脚本编写了。 因此,请访问高级用户中心

    更多内容

    学完了,开始看https://wiki.freecadweb.org/Power_users_hub 这个像是目录或链接分支说明。

    接口个性化,就是改变toolbar 和快捷键:https://wiki.freecadweb.org/Interface_Customization

    Tools->Customize

    Macros  (宏)

    https://wiki.freecadweb.org/Macros

    所有操作都可以用python 命令完成,一系列操作可以记录为python 文件,以后用一个宏再做同样的工作。

    https://wiki.freecadweb.org/Macros_recipes

    自动安装宏:

    addon manager: Tools → Addon manager 

    手动安装:

    menu:Macro → Macros

    create 按钮,给个名字,复制python 代码,save 保存, 然后再打开 选择你的宏,Excute

    新加宏到工具条,tool->ccustomize, 选择 Macro 

    https://wiki.freecadweb.org/Customize_Toolbars

    安装workbenches

    https://wiki.freecadweb.org/Installing_more_workbenches

    Talk:Developer hub

    https://wiki.freecadweb.org/Developer_hub

    介绍到此。

     

     

     

     

    展开全文
  • Freeradius配置wifi认证

    2013-07-12 11:38:47
    使用开源软件Freeradius配置Wifi认证的说明文档
  • EAP认证需要使用一个RADIUS服务端,而在Openwrt端较为理想的RADIUS服务端是freeradius。对于大多数内存达到128MB的路由器来说,直接在路由器本地运行freeradius是可行的(笔者使用的是Xiaomi AC2100路由器,21.02...

        WPA2/WPA3协议支持基于EAP(可扩展身份验证协议)的认证。相较于使用PSK(预共享密钥)的认证而言,其安全性高出许多。EAP认证需要使用一个RADIUS服务端,而在Openwrt端较为理想的RADIUS服务端是freeradius。对于大多数内存达到128MB的路由器来说,直接在路由器本地运行freeradius是可行的(笔者使用的是Xiaomi AC2100路由器,21.02版本)。本文大致讲述在Openwrt上配置freeradius及其EAP-TLS认证协议的方法。

    1.安装必要软件包

        Openwrt有两种安装软件的方式。其一是在编译Openwrt固件时包含该软件包(推荐)。由于Openwrt官方固件中默认包含的是不支持EAP认证的wpad-mini或者wpad-basic-wolfssl,此处需要将其更换为支持EAP认证的wpad(支持WPA2)或者wpad-openssl(支持WPA2和WPA3)。

        构建编译环境的具体过程请参阅Openwrt Wiki:

    [OpenWrt Wiki] Build system usage

    此处略过,在构建好编译环境之后最后运行make defconfig,再make以检查是否存在缺陷。

    一般情况下在使用全新的编译设定时,不要忘了加上luci。

    $>make menuconfig

        在Network目录内,选择FreeRADIUS (version 3)子目录,并包含freeradius3, freeradius3-common, freeradius3-default, freeradius3-utils即可。假如需要节省空间(真的吗?)可以不选择freeradius3-default而手动选择需要的模块。此时就需要选择always, attr-filter, detail, digest, eap及需要的eap方法, exec, expiration, logintime, preprocess, radutmp, realm。

        返回上一级,在WirelessAPD子目录内,包含eapol-test-openssl, 移除wpad-mini和wpad-basic-wolfssl, 包含wpad或者wpad-openssl。

        返回主界面进入Utilities目录,向下找到openssl-util并包含。

        随后make download和make即可。

        其二是使用Openwrt的软件包管理器opkg。不推荐使用本方法的原因是,由于Openwrt使用的是只读文件系统squashfs,从已编译好的固件中删除文件是理论不可行的,利用opkg卸载软件包并不能释放空间。

    opkg update
    opkg remove wpad-mini wpad-basic-wolfssl
    opkg install freeradius3 freeradius3-default freeradius3-utils

        或者只安装需要的模块

    opkg install freeradius3 freeradius3-common freeradius3-democerts freeradius3-mod-always freeradius3-mod-attr-filter freeradius3-mod-chap freeradius3-mod-detail freeradius3-mod-digest freeradius3-mod-eap freeradius3-mod-eap-gtc freeradius3-mod-eap-leap freeradius3-mod-eap-md5 freeradius3-mod-eap-mschapv2 freeradius3-mod-eap-peap freeradius3-mod-eap-tls freeradius3-mod-eap-ttls freeradius3-mod-exec freeradius3-mod-expiration freeradius3-mod-expr freeradius3-mod-files freeradius3-mod-ldap freeradius3-mod-logintime freeradius3-mod-mschap freeradius3-mod-pap freeradius3-mod-passwd freeradius3-mod-preprocess freeradius3-mod-radutmp freeradius3-mod-realm freeradius3-mod-unix freeradius3-utils

        再安装其他工具

    opkg install openssl-util eapol-test-openssl

    2.配置EAP-TLS的PKI证书结构

        选择一个目录存放相关证书。由于Openwrt一般情况下不作为多用户系统使用,PKI所在的目录的位置和权限并无严格要求,此处以存放在/etc/certs为例:

    mkdir /etc/certs
    cd /etc/certs
    mkdir ca server clients #用于存放相应证书
    touch index.txt
    echo 01>serial
    vim openssl.cnf

        在openssl.cnf里写入如下内容

    [ ca ]
    default_ca = radius                
     
    [ radius ]
    dir = .
    database = $dir/index.txt
    new_certs_dir = $dir
    certificate = $dir/ca/ca_cert.pem
    serial = $dir/serial
    private_key = $dir/ca/ca_key.pem 
    RANDFILE = $dir/.rand
     
    default_bits = 4096
    default_days = 365                    
    default_crl_days = 365                    
    default_md = sha512                    
    unique_subject = no                     
                                            
    policy = policy_anything            
     
    [ policy_anything ]
    countryName = optional
    stateOrProvinceName = optional
    localityName = optional
    organizationName = supplied
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional

        其中default_ca处可根据自己需要修改。

        default_days和default_crl_days指定证书和证书吊销列表的有效期,该时间最好不要超过365天。部分系统会默认不信任有效期过长的证书。

        创建CA证书。

    openssl req -x509 -nodes -newkey rsa:4096 -keyout ca/ca_key.pem -out ca/ca_cert.pem -new -sha512 -subj "/O=EAP-TLS/CN=Certificate Authority/"

        此处的-subj后是自定义字段。O选项为组织名,所有证书应保持一致。CN选项为证书的通用名,对于CA证书可以自行指定,而对于用户证书则需要与实际用户名保持一致,CN不可重复。

        导出x509格式的CA证书,对于Windows客户端而言,连接到受EAP-TLS保护的网络需要将对应的CA证书放入“受信任的根证书列表”存储区。

    openssl x509 -outform der -in ca/ca_cert.pem -out ca/CA.crt

        签发服务器证书。

    openssl req -nodes -new -newkey rsa:4096 -keyout server/server_key.pem -out server/server_csr.pem -subj "/O=EAP-TLS/CN=Radius Server/" && \
    openssl ca -in server/server_csr.pem -out server/server_cert.pem -config openssl.cnf && rm -rf server_csr.pem

        签发客户端证书,并指定导出密码。用户名处换成实际用户名。

    openssl req -nodes -new -newkey rsa:4096 -keyout clients/user_<用户名>_key.pem -out clients/user_<用户名>_csr.pem -subj "/O=EAP-TLS/CN=<用户名>/" && \
    openssl ca -in clients/user_<用户名>_csr.pem -out clients/user_<用户名>_cert.pem -config openssl.cnf && \
    rm -rf clients/user_<用户名>_csr.pem && \
    openssl pkcs12 -export -out clients/<用户名>.p12 -inkey clients/user_<用户名>_key.pem -in clients/user_<用户名>_cert.pem -certfile ca_cert.pem

        创建证书吊销列表。

    openssl ca -gencrl -keyfile ca/ca_key.pem -cert ca/ca_cert.pem -out ca/crl.pem -config openssl.cnf && \
    cat ca/ca_cert.pem ca/crl.pem > ca/ca_cert+crl.pem

        生成DH文件

    openssl dhparam -out dh 2048

        到此,EAP-TLS所需的证书PKI就已经配置完毕了。

    3.配置freeradius

        打开/etc/freeradius3/clients.conf,由于我们的RADIUS服务端和客户端位于同一设备上,所以只需修改secret即可。

    secret = <此处自行指定RADIUS服务器密码>

        编辑/etc/freeradius3/mods-enabled/eap.conf

    #使用EAP-TLS认证
    default_eap_type = tls
    tls-config tls-common {
    #此处如果在生成服务器证书时使用-nodes选项则留空,否则输入服务器私钥的密码 
    		private_key_password =
    #此处指定服务器私钥位置
    		private_key_file = /etc/certs/server/server_key.pem
    #此处指定服务器证书位置
    		certificate_file = /etc/certs/server/server_cert.pem
    #此处指定CA证书位置
    		ca_file = /etc/certs/ca/ca_cert+crl.pem
    #此处指定dh文件位置
    		dh_file = /etc/certs/dh
    #此处指定随机文件,对于Openwrt而言此处应该为random而不是urandom
    		random_file = /dev/random
    #此处指定CA目录
    		ca_path = /etc/certs/ca
    #选择加密方式
    		cipher_list = "HIGH"
    #设置tls版本为1.2
    		tls_min_version = "1.2"
    		tls_max_version = "1.2"
    verify {
    #跳过额外检查
    			skip_if_ocsp_ok = yes
    #注释此行以关闭检查
    			#client = "/usr/bin/openssl verify -CApath ${..ca_path} %{TLS-Client-Cert-Filename}"
    }
    }

        其余内容则保持默认即可。

    编辑/etc/freeradius3/sites-enabled/deault

    authorize {
    	preprocess
    #	files
    #	-sql
    }
    authenticate {
    #	Auth-Type PAP {
    #		pap
    #	}
    #	Auth-Type CHAP {
    #		chap
    #	}
    #	Auth-Type MS-CHAP {
    #		mschap
    #	}
    #	mschap
    #	digest
    }
    

        其余内容则保持默认即可。

        然后进行测试。准备一个测试文件test_tls.conf,写入以下内容

    server={
        eap=TLS
        eapol_flags=0
        key_mgmt=IEEE8021X
        identity="<你的用户名>"
    
        ca_cert="/etc/certs/ca/ca_cert.pem"
        client_cert="/etc/certs/clients/user_<你的用户名>_cert.pem"
        private_key="/etc/certs/clients/user_<你的用户名>_key.pem"
        private_key_passwd="<私钥密码>"
    }

        新开一个shell窗口,执行

    service radiusd stop
    radiusd -XX

        观察输出结果显示Ready to process requests即为正常运行,否则freeradius会指出具体问题。

        freeradius正常运行后,在原来的窗口中执行

    eapol_test -c test_tls -a 127.0.0.1 -s <你的RADIUS服务器密码>

        观看两个窗口的输出结果,如果eapol_test返回success,即为配置完成。

        用Ctrl+C停止freeradius,然后执行

    service freeradius start

    4.配置wpad

        打开luci-Network-Wireless,选择需要配置的网络,在Wireless Security中选择WPA2-EAP或者WPA3-EAP/WPA2-EAP,填入RADIUS服务器地址127.0.0.1,端口1812,保存应用即可。

    配置客户端

    1.Windows客户端(以Windows10 1809为例)

    使用SCP工具下载ca证书/etc/certs/ca/CA.crt,以及客户端证书/etc/certs/clients/<你的用户名>.p12。

    双击CA.crt打开证书,选择安装证书,安装到本地计算机

     选择将所有的类型证书放入下列存储,然后选择受信任的根证书颁发机构

    完成即可。

    然后打开用户证书,使用同样的步骤,但是放入受信任的发布者。

    在设置——网络和Internet中打开网络和共享中心,点击设置新的连接和网络,选择手动连接到无线网络。

     输入网络的SSID,在安全类型中选择WPA2-企业,下一步更改连接设置。

    在安全选项卡里选择网络身份验证方法为Microsoft:智能卡或其他证书,点击设置。

    当连接时选择在此计算机上使用证书和简单证书选择,点击高级,勾选证书颁发者,从中勾选CA证书签发时的CN名,然后勾选扩展密钥用法,确定。

    勾选通过验证证书来验证服务器的身份,从中勾选CA证书签发时的CN名,确定。

    然后即可在任务栏中连接到对应的WLAN网络。

    2.Android客户端(以Vivo手机Android 11为例)

    将客户端证书发送到手机,打开设置——安全——更多安全设置——从存储卡中安装证书。选择Wifi证书,依照提示安装。

    连接对应WLAN网络,选择EAP-TLS,然后在CA证书和用户证书处选择安装好的证书,再输入用户名,即可连接。

    3.iOS客户端

    通过邮件将客户端证书发送到手机,打开后在设置中安装。

    连接对应网络,模式选择EAP-TLS,输入用户名,身份选择对应证书,即可连接。

    参考:https://zhuanlan.zhihu.com/p/28927420

    展开全文
  • 【Linux学习】Linux free 命令学习

    千次阅读 2018-11-20 15:23:43
    一、学习这个命令的...但是一开始并没有很清楚的明白free命令的每一个数据到底代表的什么意思,导致一直以为优化没有效果。后面认真学习了下free命令,先看看 操作系统版本是 Ubuntu 14.04 linux的内核版本号...

    一、学习这个命令的背景

    因为最近Gitlab服务器占用内存很多,也在下面的这篇博客里面写了怎么减少Gitlab占用的内存问题。
    +【Git学习】解决GitLab内存消耗大的问题

    但是一开始并没有很清楚的明白free命令的每一个数据到底代表的什么意思,导致一直以为优化没有效果。后面认真学习了下free命令,先看看

    操作系统版本是 Ubuntu 14.04
    linux的内核版本号是 3.13.0-24-generic

    在这里插入图片描述

    root@ubuntu116:~# uname -r 
    3.13.0-24-generic
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# uname -a
    Linux ubuntu116 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# cat /proc/version 
    Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
    root@ubuntu116:~#  lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 14.04 LTS
    Release:	14.04
    Codename:	trusty
    root@ubuntu116:~# 
    
    

    二、free命令使用

    首先是要 free --help命令,来查看下free命令的用法。
    在这里插入图片描述

    root@ubuntu116:~# free --help
    
    Usage:
     free [options]
    
    Options:
     -b, --bytes         show output in bytes
     -k, --kilo          show output in kilobytes
     -m, --mega          show output in megabytes
     -g, --giga          show output in gigabytes
         --tera          show output in terabytes
     -h, --human         show human-readable output
         --si            use powers of 1000 not 1024
     -l, --lohi          show detailed low and high memory statistics
     -o, --old           use old format (without -/+buffers/cache line)
     -t, --total         show total for RAM + swap
     -s N, --seconds N   repeat printing every N seconds
     -c N, --count N     repeat printing N times, then exit
    
         --help     display this help and exit
     -V, --version  output version information and exit
    
    For more details see free(1).
    
    

    下面我们来测试下几个常用的options

    2.1 free -b

    在这里插入图片描述

    root@ubuntu116:~# free -b
                 total       used       free     shared    buffers     cached
    Mem:    67529682944 64533520384 2996162560  213880832  351289344 58317025280
    -/+ buffers/cache: 5865205760 61664477184
    Swap:   68690112512    7532544 68682579968
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# 
    
    

    2.2 free -k

    在这里插入图片描述

    root@ubuntu116:~# free -k
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63518300    2428656     208900     343148   56952900
    -/+ buffers/cache:    6222252   59724704
    Swap:     67080188       7356   67072832
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# 
    
    

    2.3 free -m

    在这里插入图片描述

    root@ubuntu116:~# free -m
                 total       used       free     shared    buffers     cached
    Mem:         64401      62458       1942        204        335      55618
    -/+ buffers/cache:       6505      57895
    Swap:        65507          7      65500
    root@ubuntu116:~# 
    
    

    2.4 free -g

    在这里插入图片描述

    root@ubuntu116:~# free -g
                 total       used       free     shared    buffers     cached
    Mem:            62         60          1          0          0         54
    -/+ buffers/cache:          6         56
    Swap:           63          0         63
    root@ubuntu116:~# 
    
    

    2.5 free -h

    在这里插入图片描述

    root@ubuntu116:~# free -h
                 total       used       free     shared    buffers     cached
    Mem:           62G        60G       2.2G       204M       336M        54G
    -/+ buffers/cache:       6.1G        56G
    Swap:          63G       7.2M        63G
    root@ubuntu116:~# 
    
    

    2.6 free -l

    显示详细的低内存和高内存统计信息
    在这里插入图片描述

    root@ubuntu116:~# free -l 
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63396736    2550220     209228     344632   56953528
    Low:      65946956   63396736    2550220
    High:            0          0          0
    -/+ buffers/cache:    6098576   59848380
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.7 free -o

    使用旧格式(没有 -/+buffers/cache 这一行)

    在这里插入图片描述

    root@ubuntu116:~# free -o
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64045184    1901772     209256     344760   56969912
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.8 free -t

    展示RAM和swap的合计
    在这里插入图片描述

    root@ubuntu116:~# free -t
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64118724    1828232     209616     345348   56973588
    -/+ buffers/cache:    6799788   59147168
    Swap:     67080188       7356   67072832
    Total:   133027144   64126080   68901064
    root@ubuntu116:~# 
    
    

    2.9 free -s N

    每相隔N秒重复打印一次内存信息,直到你按下 Ctrl + c

    在这里插入图片描述

    root@ubuntu116:~# free -s 3
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64138880    1808076     209708     345616   56957708
    -/+ buffers/cache:    6835556   59111400
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64073124    1873832     209716     345616   56957720
    -/+ buffers/cache:    6769788   59177168
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64167628    1779328     209720     345616   56957732
    -/+ buffers/cache:    6864280   59082676
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64159796    1787160     209720     345620   56957728
    -/+ buffers/cache:    6856448   59090508
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64166776    1780180     209724     345628   56957740
    -/+ buffers/cache:    6863408   59083548
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63093948    2853008     209724     345632   56957756
    -/+ buffers/cache:    5790560   60156396
    Swap:     67080188       7356   67072832
    
    

    2.10 free -c N

    重复打印N次内存信息,然后退出

    在这里插入图片描述

    root@ubuntu116:~# free -c 3
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64199120    1747836     209780     345744   56974404
    -/+ buffers/cache:    6878972   59067984
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63949560    1997396     209780     345744   56974404
    -/+ buffers/cache:    6629412   59317544
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64093104    1853852     209780     345744   56974408
    -/+ buffers/cache:    6772952   59174004
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.11 free -V

    显示版本号信息

    在这里插入图片描述

    root@ubuntu116:~# free -V
    free from procps-ng 3.3.9
    root@ubuntu116:~# 
    
    

    三、free命令输出内容名词解释

    在这里插入图片描述

    root@ubuntu116:~# free
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64255040    1691916     213840     356892   56805760
    -/+ buffers/cache:    7092388   58854568
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    3.1 Mem,-/+ buffers/cache,Swap 解释

    我们看到free命令有三行内容:Mem,-/+ buffers/cache,Swap,代表的内容如下:

    名称代表的内容
    Mem内存的使用情况
    -/+ buffers/cache表示物理内存已用多少,可用多少
    Swap交换空间的使用情况

    3.2 total,used,free,shared,buffers,cached 解释

    列的内容是total,used,free,shared,buffers,cached,代表的内容如下:

    名称代表的内容
    total总量
    used已使用的
    free空闲的
    shared共享的,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份
    buffers缓存,可回收
    cached缓存,可回收
    • 关于buffers和cached的区别
      这里有个地方要注意,关于buffers和cached的区别。
      关于free命令里面的cached、buffers的区别,下面一幅图可以表达:
      (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
      在这里插入图片描述

    cached和buffers都可以读写,它们唯一的区别就是:buffers以裸设备或分区为背景,cached以文件系统里的文件为背景。

    比如 cat /dev/sda1 > /dev/null,那**/dev/sda1的内容进入buffers**,
    如果cat /opt/test.py > /dev/null,则**/opt/test.py的内容进入cached**。

    在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

    • A buffer is something that has yet to be “written” to disk.
    • A cache is something that has been “read” from the disk and stored for later use.
      也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

    Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么Mem这一行cached 比较大,而Mem这一行free 比较小的原因。

    四、free命令输出内容计算公司

    下面我们来计算一下free命令各个参数是怎么计算出来的,参考下面的图片
    (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
    在这里插入图片描述

    4.1 关于Mem这一行的total的计算公式

    计算公式为 : total = used + free

    在这里插入图片描述

    total (65946956) = used (64255040) + free (1691916)

    比如本例中,Mem的used是64255040,free是1691916,加起来刚好是total的65946956.

    4.2 关于 -/+ buffers/cache这一行的used的计算公式

    free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

    -/+ buffers/cache这一行的used,即 -buffers/cache ,表示一个应用程序认为系统被用掉多少内存,实实在在吃掉的内存

    计算公式为: -/+ buffers/cache的used = Mem这一行的used - Mem这一行的buffers - Mem这一行的cached

    在这里插入图片描述

    `-/+ buffers/cache的used (7092388) = Mem这一行的used (64255040) - Mem这一行的buffers (356892)- 去Mem这一行的cached (56805760)

    比如本例中,-/+ buffers/cache的used是7092388,这个值是由Mem这一行的used 64255040,减去Mem这一行的buffers 356892,再减去Mem这一行的cached 56805760。

    4.3 关于 -/+ buffers/cache这一行的free的计算公式

    -/+ buffers/cache这一行的free,即 +buffers/cache ,表示一个应用程序认为系统还有多少内存,可以挪用的内存总数

    计算公式为: -/+ buffers/cache的free = Mem这一行的free + Mem这一行的buffers + Mem这一行的cached

    在这里插入图片描述

    -/+ buffers/cache的free (58854568) = Mem这一行的free (1691916) + Mem这一行的buffers (356892) + Mem这一行的cached (56805760)

    比如本例中,-/+ buffers/cache的free 是58854568,这个值是由Mem这一行的free 1691916,加上Mem这一行的buffers 356892,再加上Mem这一行的cached 56805760

    因为被系统cache和buffer占用的内存可以被快速回收,所以通常**-/+ buffers/cache这一行的free会比Mem这一行的free**大很多。

    4.4 关于Swap这一行的total的计算公式

    计算公式为 : total = used + free

    在这里插入图片描述

    total (67080188) = used (7356) + free (67072832)

    比如本例中,Swap的used是7356,free是67072832,加起来刚好是total的67080188.

    4.5 关于估算空闲的物理内存

    估算空闲的物理内存时可参考-/+ buffers/cache的free的值,但实际的可用内存要小于这个值,因为不能所有的buffers和cached都释放。

    我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关usedfree为什么这么奇怪?

    其实我们可以从二个方面来解释.

    操作系统来讲是Mem这一行的buffers/cached 都是属于被使用,所以它认为free只有1691916

    应用程序来讲是**-/+ buffers/cach。 buffers/cached 是等同可用的**,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

    五 关于 buffer和cache

    5.1 什么是buffer/cache?

    buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义。

    在 Linux 的内存管理中,这里的 buffer 指 Linux 内存的: Buffer cache 。这里的 cache 指 Linux 内存中的: Page cache 。翻译成中文可以叫做缓冲区缓存页面缓存
    在历史上,它们一个( buffer )被用来当成对 io 设备写的缓存,而另一个( cache )被用来当作对 io 设备的读缓存,这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。
    但是现在,它们的意义已经不一样了。
    在当前的内核中, page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。
    当然,不是所有的内存都是以页( page )进行管理的,也有很多是针对块( block )进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。(从这个角度出发,是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有块( block )都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在 X86 上无论是 32 位还是 64 位都是 4k 。

    明白了这两套缓存系统的区别,就可以理解它们究竟都可以用来做什么了。

    5.2 什么是 page cache

    Page cache 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read / write 操作的时候。如果你仔细想想的话,作为可以映射文件到内存的系统调用: mmap 是不是很自然的也应该用到 page cache ?在当前的系统实现里, page cache 也被作为其它文件类型的缓存设备来用,所以事实上 page cache 也负责了大部分的块设备文件的缓存工作。

    5.3 什么是 buffer cache

    Buffer cache 则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。这意味着某些对块的操作会使用 buffer cache 进行缓存,比如我们在格式化文件系统的时候。一般情况下两个缓存系统是一起配合使用的,比如当我们对一个文件进行写操作的时候, page cache 的内容会被改变,而 buffer cache 则可以用来将 page 标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写( writeback )时,就不用将整个 page 写回,而只需要写回修改的部分即可。

    5.4 如何回收 cache ?

    Linux 内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对 buffer / cache 的释放。尤其是被使用更多的 cache 空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放 cache ,作为 free 空间分给相关进程使用。所以一般情况下,我们认为 buffer/cache 空间可以被释放,这个理解是正确的。

    但是这种清缓存的工作也并不是没有成本。理解 cache 是干什么的就可以明白清缓存必须保证 cache 中的数据跟对应文件中的数据一致,才能对 cache 进行释放。所以伴随着 cache 清除的行为的,一般都是系统 IO 飙高。因为内核要对比 cache 中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。

    • 人工触发缓存清除

    在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的操作:

    [root@tencent64 ~]# cat /proc/sys/vm/drop_caches
    

    方法是:

    echo 1 > /proc/sys/vm/drop_caches
    

    当然,这个文件可以设置的值分别为 1 、 2 、 3 。它们所表示的含义为:

    echo 1 > /proc/sys/vm/drop_caches

    表示清除 pagecache 。

    echo 2 > /proc/sys/vm/drop_caches

    表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。 slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 pagecache 。

    echo 3 > /proc/sys/vm/drop_caches
    表示清除 pagecache 和 slab 分配器中的缓存对象。

    六、参考链接


    作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
    转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/84292776
    如果本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行打赏。

    展开全文
  • free5gc总结

    千次阅读 2020-06-11 00:25:38
    # free5gc总结 ## 一、编译 准备系统环境,建议内核在 5.0.0-23-generic以上 >OS: Ubuntu 18.04 >gcc 7.3.0 >Go 1.12.9 linux/amd64 >kernel version 5.0.0-23-generic (MUST for UPF) **本机为Ubuntu ...

    # free5gc总结
    ## 一、编译
    准备系统环境,建议内核在 5.0.0-23-generic以上
    >OS: Ubuntu 18.04
    >gcc 7.3.0
    >Go 1.12.9 linux/amd64
    >kernel version 5.0.0-23-generic (MUST for UPF)

    **本机为Ubuntu 20.04,kernel为 5.4.0**
    ```bash
    renzt@free5gc:~/go/src/go.mongodb.org$ uname -a
    Linux free5gc 5.4.0-33-generic #37-Ubuntu SMP Thu May 21 12:53:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    ```
    按照github提示进行操作,但有些代码问题,需要自行处理。
    ### 1、提前准备mongodb驱动
    在$GOPATH/go.mongo.org/目录下执行 **(注意不要使用官网mongo驱动,不兼容)** :
    ```bash
    mkdir -p $GOPATH/go.mongo.org
    git clone https://gitee.com/qiuyuyang/mongo-go-driver.git
    ```
    将目录mongo-go-driver复制为mongo-driver:
    ```bash
    cd $GOPATH/go.mongo.org/
    cp mongo-go-driver mongo-driver
    ```
    ### 2、准备缺失go库
    因下载受限,需要设置代理
    ```bash
    export GOPROXY=https://goproxy.io
    ```
    默认缺少crypto库,需要自行准备:
    ```bash
    renzt@free5gc:~/go/src/golang.org/x$ git clone https://github.com/golang/crypto.git
    ```
    ### 3、代码bug
    /home/renzt/go/src/free5gc/lib/ngap/ngapSctp/sctp.go
    代码bug:失败时也会正常返回,导致panic。
    不过全部调试通过后,程序走不到这块逻辑,也不影响测试结果,可忽略。
    ```golang
        ln, err := sctp.ListenSCTPExt("sctp", addr,
            sctp.InitMsg{NumOstreams: 3, MaxInstreams: 5, MaxAttempts: 4, MaxInitTimeout: 8})
        if err != nil {
            logger.NgapLog.Errorf("failed to listen: %v", err)
        }
        logger.NgapLog.Infof("Listen on %s", ln.Addr())
        return ln
    ```
    **第二个bug,需要改代码**
    ```bash
    ../lib/MongoDBLibrary/api_mongoDB.go:25:57: cannot use options.ClientOptions literal (type options.ClientOptions) as type *options.ClientOptions in argument to mongo.Connect
    #client, err := mongo.Connect(ctx, options.Client().ApplyURI(url)) ->
    client, err := mongo.Connect(ctx, &options.Client().ApplyURI(url))
    ```
    ### 4、步骤修改
    github中Network Setting
    ```bash
    sudo sysctl -w net.ipv4.ip_forward=1
    #sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE,dn_interface替换为真实网卡,如eth0
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    sudo systemctl stop ufw
    ```
    ### 5、运行和测试
    独立运行没有问题,但测试时不能是运行状态,测试脚本中会用go自动运行程序。
    (github和视频都没有说明此问题,我摸索了两天才搞定)
    但ipsec需要提前设置(需要学习下ipsec知识....)
    ```bash
    #sudo ip link add ipsec0 type vti local <IKEBindAddress> remote 0.0.0.0 key <IPSecInterfaceMark> ->
    sudo ip link add ipsec0 type vti local 192.168.11.1 remote 0.0.0.0 key 6
    #sudo ip address add <IPSecInterfaceAddress/CIDRPrefix> dev ipsec0
    sudo ip address add 192.168.11.1 dev ipsec0
    sudo ip link set dev ipsec0 up
    ```
    ## 二、开始测试
    日志较多,为方便查看,只截取最后的日志。
    **需要注意,执行完最后一个测试会自动清理ipsec,导致再次测试结果异常。需要再次执行如下命令**
    ```bash
    #sudo ip link add ipsec0 type vti local <IKEBindAddress> remote 0.0.0.0 key <IPSecInterfaceMark> ->
    sudo ip link add ipsec0 type vti local 192.168.11.1 remote 0.0.0.0 key 6
    #sudo ip address add <IPSecInterfaceAddress/CIDRPrefix> dev ipsec0
    sudo ip address add 192.168.11.1 dev ipsec0
    sudo ip link set dev ipsec0 up
    #检查网卡设置
    renzt@free5gc:~/go/src/free5gc$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet 60.60.0.1/32 scope global lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:09:e4:11 brd ff:ff:ff:ff:ff:ff
        inet 192.168.162.19/28 brd 192.168.162.31 scope global dynamic eth0
           valid_lft 86302sec preferred_lft 86302sec
        inet6 fe80::215:5dff:fe09:e411/64 scope link 
           valid_lft forever preferred_lft forever
    20: ip_vti0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
        link/ipip 0.0.0.0 brd 0.0.0.0
    64: veth0@if63: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 16:e1:e4:5e:85:f7 brd ff:ff:ff:ff:ff:ff link-netns UPFns
        inet 10.200.200.1/24 scope global veth0
           valid_lft forever preferred_lft forever
        inet 10.200.200.2/24 scope global secondary veth0
           valid_lft forever preferred_lft forever
        inet6 fe80::14e1:e4ff:fe5e:85f7/64 scope link 
           valid_lft forever preferred_lft forever
    65: ipsec0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
        link/ipip 192.168.11.1 brd 0.0.0.0
        inet 192.168.11.1/32 scope global ipsec0
           valid_lft forever preferred_lft forever
        inet6 fe80::5efe:c0a8:b01/64 scope link 
           valid_lft forever preferred_lft forever
    ```
    **这样就解决了视频中51CTO老师的困惑:只能暂停、不能退出,否侧再次测试就不对了。**
    ### 1、测试注册
    ```bash
    INFO[2020-06-10T15:55:14Z]/home/renzt/go/src/free5gc/src/amf/ngap/handler.go:50 free5gc/src/amf/ngap.HandleNGSetupRequest() [AMF] NG Setup request                        AMF=NGAP
    INFO[2020-06-10T15:55:14Z]/home/renzt/go/src/free5gc/src/amf/ngap/message/send.go:79 free5gc/src/amf/ngap/message.SendNGSetupResponse() [AMF] Send NG-Setup response                  AMF=NGAP

    ```
    ### 2、测试服务请求
    ```bash
    ./test.sh TestServiceRequest
    INFO[2020-06-10T15:53:07Z]/home/renzt/go/src/free5gc/src/amf/ngap/handler.go:50 free5gc/src/amf/ngap.HandleNGSetupRequest() [AMF] NG Setup request                        AMF=NGAP
    INFO[2020-06-10T15:53:07Z]/home/renzt/go/src/free5gc/src/amf/ngap/message/send.go:79 free5gc/src/amf/ngap/message.SendNGSetupResponse() [AMF] Send NG-Setup response                  AMF=NGAP
    === RUN   TestRegistration
    INFO[2020-06-10T15:55:14Z]/home/renzt/go/src/free5gc/src/amf/ngap/sctp/sctp.go:42 free5gc/src/amf/ngap/sctp.Server.func1() [AMF] NGAP SCTP Accept from: 127.0.0.1:9487   AMF=NGAP
    INFO[2020-06-10T15:55:14Z]/home/renzt/go/src/free5gc/src/amf/ngap/handler.go:50 free5gc/src/amf/ngap.HandleNGSetupRequest() [AMF] NG Setup request                        AMF=NGAP
    INFO[2020-06-10T15:55:14Z]/home/renzt/go/src/free5gc/src/amf/ngap/message/send.go:79 free5gc/src/amf/ngap/message.SendNGSetupResponse() [AMF] Send NG-Setup response                  AMF=NGAP
    INFO[2020-06-10T15:56:42Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:42Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:43Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:43Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:43Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:43Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    INFO[2020-06-10T15:56:44Z]/home/renzt/go/src/free5gc/src/nrf/management/api_management.go:697 free5gc/src/nrf/management.setLocationHeader() urilist create                                NRF=ManagementLog
    ^Csignal: interrupt
    FAIL    free5gc/src/test    241.727s
    ```
    **其余命令顺序做就可以,不再贴执行结果了**
    ### 3、测试Xn切换
    ```bash
    ./test.sh TestXnHandover

    ```
    ### 4、测试取消登记
    ```bash
    ./test.sh TestDeregistration

    ```
    ### 5、测试释放请求
    ```bash
    ./test.sh TestPDUSessionReleaseRequest

    ```
    ### 6、测试呼叫
    ```bash
    ./test.sh TestPaging

    ```
    ### 7、测试切换
    ```bash
    ./test.sh TestN2Handover

    ```
    ### 8、测试非3GPP网络
    ```bash
    ./test.sh TestNon3GPP

    ```
    ### 9、测试登记
    ```bash
    ./test_ulcl.sh -om 3 TestRegistration
    #此测试脚本写的不完善,退出时没有正确处理清理动作,导致提示失败:
    Cannot find device "br-veth02",

    ```

    展开全文
  • free3of9 39条码字体

    热门讨论 2011-03-30 18:35:40
    Font: Free 3 of 9 Barcode Created By: Matthew Welch E-Mail: matt@squaregear.net Web Address: http://www.squaregear.net/fonts/ My fonts are all free. You can use them for personal or commercial ...
  • 1、移植并修改了 FreeModbus1.5 及 RT-Thread1.2.2 至 STM32 ,新增主机功能 2、开发平台支持Eclipse、Keil、IAR 4、支持 Modbus RTU 5、Modbus主机 支持所有常用功能(寄存器、线圈、离散输入) 6、目前的Modbus...
  • FreeCAD编译、安装、开发环境

    千次阅读 热门讨论 2020-05-17 12:12:41
    搭建FreeCAD开发环境 **济南友泉软件有限公司** ** ** 目录 一、 获取源码… 1 1.1 Git 1 1.2 创建FreeCAD私人仓库… 1 1.3 新建工作目录… 2 1.4 下载代码… 2 1.5 创建本地FreeCAD分支… 3 二、 构建项目… 4 ...
  • allegro free viewer 16.6

    热门讨论 2013-09-21 11:38:21
    allegro 2013.9.21下载的最新版本,很好用,16.6的。
  • Fastbin Double Free

    千次阅读 2019-01-19 17:56:00
    fastbin attack 是一类漏洞的利用方法,是指所有基于 fastbin 机制的漏洞利用方法,而fastbin_double_free就是其中的一种,这类漏洞利用的前提是: 存在堆溢出、use-after-free等能控制chunk内容的漏洞 漏洞发生于...
  • freemodbus RTU移植stm32过程代码

    热门讨论 2013-05-20 14:37:49
    该程序我已测试通过.详细代码分析请到http://blog.csdn.net/skill_cheng/article/details/8950319查看.
  • TreeSize Free

    千次阅读 2020-06-15 20:00:26
    TreeSize Free是一款硬盘空间管理工具,用树形描述出来,能够显示文件大小和实际占用空间数及浪费的空间等信息 官网下载:https://www.jam-software.com/treesize_free
  • 旷世首发,新一代 Anchor-free 目标检测框架!
  • Use After Free

    千次阅读 2019-01-11 22:05:07
    use_after_free就是其字面所表达的意思,当一个内存块被释放之后再次被使用。但是其实这里有以下几种情况: 内存块被释放后,其对应的指针被设置为 NULL , 然后再次使用,自然程序会崩溃。 内存块被释放后,其对应...
  • 其他线程又依赖这个锁,整个线程没有做有用的事情,因此有锁一定不是lock-free,更不可能是wait-free。   7、纠正悖论 使用lock-free或者wait-free并不一定会使性能加快,但是能保证一件事情总能在确定的...
  • The best collection offree bootstrap admin templatesfor developers, these themes are time saver in your workflow, explore thesefree admin template for web applicationsto get more details. These p...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,078,835
精华内容 431,534
关键字:

free