辰迅云帮助中心

帮助中心

小编给大家分享一下GO语言ini配置文件的读取操作示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go适合做什么go是golang的简称,而golang可以做服务器端开发,且golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于web应用、API应用等领域。iniconf描述使用iniconf更简单的读取go的ini配置文件以及根据特定格式的各种配置文件。安装方法go get github.com/clod-moon/goconf使用方法ini配置文件格式样列[database]username = rootpassword = passwordhostname = localhost[admin]username = rootpassword = password[nihao]username = rootpassword = password初始化conf := goini.InitConfig("./conf/conf.ini")  //iniconf.InitConfig(filepath) 其中filepath是你ini 配置文件的所在位置获取单个配置信息username := conf.GetValue("database", "username") //database是你的[section],username是你要获取值的key名称fmt.Println(username) //root删除一个配置信息conf.DeleteValue("database", "username") //username 是你删除的keyusername = conf.GetValue("database", "username")if len(username) == 0 {  fmt.Println("username is not exists")   //this stdout username is not exists}添加一个配置信息conf.SetValue("database", "username", "chun") username = conf.GetValue("database", "username") fmt.Println(username) //chun 添加配置信息如果存在[section]则添加或者修改对应的值,如果不存在则添加section获取所有配置信息conf.GetAllSetion() //返回map[string]map[string]string的格式 即setion=>key->valueiniconfAbout使用iniconf更简单的读取go的ini配置文件以及根据特定格式的各种配置文件。examplefunc main() {  conf := iniconf.InitConfig("./config.ini")  for key,value :=range conf.Conflist {   fmt.Println(key)   for k,v := range value{    fmt.Println(k,":",v)   }  }  fmt.Println(conf.GetValue("esinfo","addr"))  conf.SetValue("esinfo","addr","127.100.100.100")  fmt.Println(conf.GetValue("esinfo","addr")) }outputesinfoaddr : 127.0.0.1port : 9200index : casetype : case127.0.0.1127.100.100.100Process finished with exit code 0补充:GoLang 使用goconfig读取配置文件(.ini、.json、.yaml)一、goconfig读取.ini类型配置文件1、配置文件(config.ini)如下:[RabbitMQ]MQUrl        = amqp://trkj:trkj@192.168.5.62:5672/testExchange     = EX.WALLDATAExchangeType = fanoutRoutingKey   = RK.WALLDATA  [Base]messageFrequency = 52、解析配置文件:package main import (  "fmt" "github.com/hyahm/goconfig")  type RabbitMQ struct {  MQUrl string Exchange string ExchangeType string RoutingKey string}  type BaseConfig struct {  MsgFrequency int64 // 消息发送频率 RabbitMQ // MQ信息}  func ReadBaseConfig(bconfig *BaseConfig, confFile string) {  goconfig.InitConf(confFile, goconfig.INI)  bconfig.MsgFrequency = goconfig.ReadInt64("Base.messageFrequency", 3)  bconfig.RabbitMQ.MQUrl = goconfig.ReadString("RabbitMQ.MQUrl", "")  bconfig.RabbitMQ.Exchange = goconfig.ReadString("RabbitMQ.Exchange", "")  bconfig.RabbitMQ.ExchangeType = goconfig.ReadString("RabbitMQ.ExchangeType", "")  bconfig.RabbitMQ.RoutingKey = goconfig.ReadString("RabbitMQ.RoutingKey", "") }  func main() {  baseConfig := BaseConfig{}  ReadBaseConfig(&baseConfig, "./Config.ini")  fmt.Printf("mq.MQUrl = %s \t mq.Exchange = %s \t mq.ExchangeType = %s \t mq.RoutingKey = %s\n", baseConfig.RabbitMQ.MQUrl, baseConfig.RabbitMQ.Exchange, baseConfig.RabbitMQ.ExchangeType, baseConfig.RabbitMQ.RoutingKey)  fmt.Printf("msgFrequency = %d\n", baseConfig.MsgFrequency)   }以上是“GO语言ini配置文件的读取操作示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...

这篇文章给大家分享的是有关android studio如何打包自动生成版本号与日期的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。一. 打开项目选择如图示1 (build.gradle 项目位置)二. 1. build.gradle 文件添加内容如下。gradle是【com.android.tools.build:gradle:3.0.0 以下版本】android{     defaultConfig {...}     自动追加版本号和版本名称   android.applicationVariants.all {     variant->variant.outputs.each {       output-> output.outputFile = new File(output.outputFile.parent,"app_device_v"+defaultConfig.versionName+"_"+new Date().format("yyyy-MM-dd")+"_"+buildType.name+".apk")     }   } }output.outputFile.parent 可以指定输出到指定文件夹2. build.gradle 文件添加内容如下。 gradle是【com.android.tools.build:gradle:3.0.0及其以上版本】android{     defaultConfig {...}     //release版本输出包名自动追加版本号和版本名称  applicationVariants.all {     variant ->       variant.outputs.all {         //只处理生产版本        if (buildType.name == 'release') {           def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))            // app包名称          outputFileName = "app_v" + defaultConfig.versionName + "_" + createTime + "_" + buildType.name + ".apk"          ////指定release输出到指定文件夹          variant.getPackageApplication().outputDirectory = new File(config.appReleaseDir + "/${createTime}")         }       }   } }三. 打包查看结果:图示3(直接点击assembleRelease即可)补充知识:Android编译gradle 动态修改版本号在构建代码的时候不想每次都修改版本号,需能够增加一个功能在特定的条件下动态的修改版本号在manifest里面加入占位符号<manifest xmlns:android="http://schemas.android.com/apk/res/android"    android:versionCode="${versioncode}"    android:versionName="${versionname}">修改build.gradleimport com.google.gson.Gsonclass Version {   int versionCode   String versionName } def versionJsonFile = file('./version.json')//这个文件最好放一个所有项目人员都能够访问的地方  def versionJsonObject = new Gson().fromJson(versionJsonFile.text, Version.class)   android.applicationVariants.all {     variant ->       println("variants name : " + variant.name)   //只有满足特定条件的情况下才会版本自增一,这个可以看看各个项目的特定配置      if (variant.name.toLowerCase().contains("ceshirelease") ) {         println("variants name : versionCode " + versionJsonObject.versionCode + "versionname: " + versionJsonObject.versionName)         versionJsonObject.versionCode = versionJsonObject.versionCode + 1        int lastIndexPoint = versionJsonObject.versionName.lastIndexOf(".")         String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint)         println("newStr" + newStr)         versionJsonObject.versionName = newStr + "." + versionJsonObject.versionCode         println("versonJsonStr.versionName " +  versionJsonObject.versionName)       }   //这句是核心,可以调整版本号和版本明,修改了这个会影响到BuildConfig.class里面的属性      variant.mergedFlavor.versionCode = versionJsonObject.versionCode       variant.mergedFlavor.versionName = versionJsonObject.versionName   //如果没有加下面这句,当应用安装后会出现应用信息没有版本号的问题,这个必须有      variant.mergedFlavor.manifestPlaceholders.put("versioncode", versionJsonObject.versionCode)       variant.mergedFlavor.manifestPlaceholders.put("versionname", versionJsonObject.versionName)   }    //为了记住最新的版本号,是需要进行文件的回写的,什么时候回写会好一点 //个人认为只有当打包apk的动作执行成功后 回写文件记录的版本号最优  afterEvaluate {     project ->       gradle.taskGraph.afterTask {         task, taskState ->     //这里如果assembleceshirelease 就具体的打包的变种项目,各个应用肯定不一样,需要调整下          if (task.name.toLowerCase().contains("assembleceshirelease") && taskState.getFailure() == null) {             println("try assemble ceshi release" )    //回写文件操作            versionJsonFile.withPrintWriter { out ->                 out.println(new Gson().toJson(versionJsonObject))             }           }       }   }给apk重新命名也是同样的道理  variant.getOutputs().all {         File file = it.outputFile;         println(" file property file.canRead() " + file.canRead() + " file.canWrite " + file.canWrite())         String pathString = file.getPath();         println(" path String : " + pathString + " File.pathSeparator: " + File.separator)    //指定最终输出的文件的目录和名字        pathString = file.getParent() + File.separator + "test.apk";         println(" path pathString : " + pathString)         file.renameTo(pathString)       }感谢各位的阅读!关于“android studio如何打包自动生成版本号与日期”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!...

这篇文章主要介绍Android Gradle依赖管理、去除重复依赖、忽略的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。常用依赖 //1.直接依赖第三方开源库,一般是托管在 jitpack 或者 jcenter implementation 'com.google.code.gson:gson:2.2.4' implementation 'com.android.support:cardview-v7:25.0.0' implementation 'com.android.support:design:25.0.0' //2.直接依赖本地的aar文件,一般是在libs目录下 implementation(name: 'LiteAVSDK_Professional_5.1.5293', ext: 'aar')  //3.直接依赖本地的jar文件 implementation files('libs/bdasr_V3_20170801_60da871.jar')  //4.依赖本地的model implementation project(':wavelibrary')  implementation project(':android-ffmpeg')库工程依赖传递问题1、依赖常用的基本类型有:provided和compile,provided 只在编译生效不会打包到 apk 或 aar 中;compile 是会打包到 apk或 aar 中的(如果是库工程的话有特殊情况,参考下面3).2、app 工程的当前(compile+) 的依赖都会打包到 app 中3、库工程中:1) jar 包:远程依赖不会打包到 aar 中;本地依赖会;2) aar:远程和本地都不不会打包到 aar中.3) 如果你要提供你的库工程的 aar 给他人,你需要同时告诉他这个库工程依赖的其他aar 和远程 jar包(因为他们没有打包到 aar 中)4) 如果通过工程依赖(即compile project(':lib')的方式), 依赖是可以传递的,所以不需要在声明一次依赖.去掉重复依赖1.第三方库中同样使用了implementation或者compile依赖相同的库  implementation('com.allenliu.versionchecklib:library:2.0.5') {     exclude group: 'com.android.support', module: 'appcompat-v7'    exclude group: 'com.android.support.constraint', module: 'constraint-layout'    exclude group: 'org.greenrobot', module: 'eventbus'    exclude group: 'com.squareup.okhttp3', module: 'okhttp'  }2.在不同的库中出现相同的so文件pickFirst只会打包第一个遇到的冲突的so,merge(碰到冲突会合并)和exclude(直接排除匹配到的文件,不建议使用) packagingOptions {       pickFirst 'lib/arm64-v8a/libgnustl_shared.so'      pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'    }遇到这种错误可以通过上面方法尝试解决Error:Execution failed for task ‘:app:transformNativeLibsWithMergeJniLibsForDebug'. > More than one补充知识:Gradle依赖的统一管理,解决依赖冲突看见别人在用implementation rootProject.ext.dependencies["xxxx"]不知道是什么意思,上网查了一下,原来是为了解决或者说预防gradle依赖冲突的问题。在项目开发中我们会经常引入多个Module,然而每个Module中又包含了V4、V7,为了升级新版本依赖包只用更改一次,我们决定采用Gradle依赖的统一管理,避免重复繁琐的劳动。记录get到的新知识,用法如下:1.在Project目录下新建config.gradle文件,文件名可自定义具体内容如下:ext {   android = [       compileSdkVersion    : 27,       buildToolsVersion    : "27.0.0",       minSdkVersion      : 21,       targetSdkVersion    : 27,       versionCode       : 6,       versionName       : "1.2.2",       renderscriptTargetApi  : 21  ]   version = [       supportLibraryVersion  : "26.1.1",       okhttpVersion      : "3.9.0",       retrofitVersion     : "2.3.0",       glideVersion      : "4.0.0",       butterknifeVersion   : "8.8.1",       fragmentationVersion  : "1.1.9",   ]   dependencies = [       //base      "appcompat-v7"           : "com.android.support:appcompat-v7:${version["supportLibraryVersion"]}",       "cardview-v7"            : "com.android.support:cardview-v7:${version["supportLibraryVersion"]}",       "design"              : "com.android.support:design:${version["supportLibraryVersion"]}",       "constraint-layout"         : "com.android.support.constraint:constraint-layout:1.0.2",       //net      "gson"               : "com.google.code.gson:gson:2.8.2",       "okhttp"              : "com.squareup.okhttp3:okhttp:${version["okhttpVersion"]}",       "logging-interceptor"        : "com.squareup.okhttp3:logging-interceptor:${version["okhttpVersion"]}",       "retrofit"             : "com.squareup.retrofit2:retrofit:${version["retrofitVersion"]}",       "converter-gson"          : "com.squareup.retrofit2:converter-gson:${version["retrofitVersion"]}",       "adapter-rxjava2"          : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitVersion"]}",       //dao      "greendao"             : "org.greenrobot:greendao:3.2.2",       //rx      "rxjava"              : "io.reactivex.rxjava2:rxjava:2.1.5",       "rxandroid"             : "io.reactivex.rxjava2:rxandroid:2.0.1",       "rxbinding"             : "com.jakewharton.rxbinding2:rxbinding:2.1.0",       "rxpermissions"           : "com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar",       //di      "javax_annotation"         : "org.glassfish:javax.annotation:10.0-b28",       "butterknife"            : "com.jakewharton:butterknife:${version["butterknifeVersion"]}",       "butterknife-compiler"       : "com.jakewharton:butterknife-compiler:${version["butterknifeVersion"]}",       //multidex      "multidex"             : "com.android.support:multidex:1.0.3",       //kotlin      "kotlin-stdlib"           : "org.jetbrains.kotlin:kotlin-stdlib:1.2.10",       //ui test      "espresso-core"           : "com.android.support.test.espresso:espresso-core:3.0.2",       "espresso-idling-resource"     : "com.android.support.test.espresso:espresso-idling-resource:3.0.2",       //unit test , 为了整合mockito和PowerMockito,mockito暂时最高只支持2.8.9      "junit"               : "junit:junit:4.12",       "mockito"              : "org.mockito:mockito-core:2.8.9",       "powermock-module-junit4"      : "org.powermock:powermock-module-junit4:1.7.4"  ] }2.在Project的build.gradle中添加apply from: "config.gradle"3.在modle的build.gradle中添加引用apply plugin: 'com.android.application'android {   compileSdkVersion rootProject.ext.android["compileSdkVersion"]   buildToolsVersion rootProject.ext.android["buildToolsVersion"]   defaultConfig {     applicationId "json.chao.com.wanandroid"    minSdkVersion rootProject.ext.android["minSdkVersion"]     targetSdkVersion rootProject.ext.android["targetSdkVersion"]     versionCode rootProject.ext.android["versionCode"]     versionName rootProject.ext.android["versionName"]     //AndroidJunitRunner必须要显示指定在defaultConfig中,使用Gradle依赖管理无法使其生效    testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'    renderscriptTargetApi rootProject.ext.android["renderscriptTargetApi"]     renderscriptSupportModeEnabled true  // Enable RS support    multiDexEnabled true    vectorDrawables.useSupportLibrary = true  } }   dependencies {     implementation fileTree(include: ['*.jar'], dir: 'libs')     //base    implementation rootProject.ext.dependencies["appcompat-v7"]     implementation rootProject.ext.dependencies["cardview-v7"]     implementation rootProject.ext.dependencies["design"]     implementation rootProject.ext.dependencies["constraint-layout"]     //net    implementation rootProject.ext.dependencies["gson"]     implementation rootProject.ext.dependencies["okhttp"]     implementation rootProject.ext.dependencies["retrofit"]     implementation rootProject.ext.dependencies["converter-gson"]     implementation rootProject.ext.dependencies["adapter-rxjava2"]     //dao    implementation rootProject.ext.dependencies["greendao"]     //rx    implementation rootProject.ext.dependencies["rxjava"]     implementation rootProject.ext.dependencies["rxandroid"]     implementation rootProject.ext.dependencies["rxbinding"]     implementation rootProject.ext.dependencies["rxpermissions"]     //UI测试    androidTestImplementation (rootProject.ext.dependencies["espresso-core"]) {       exclude group: 'com.android.support', module: 'support-annotations'    }     implementation (rootProject.ext.dependencies["espresso-idling-resource"]) {       exclude module: 'support-annotations'    } }以上是“Android Gradle依赖管理、去除重复依赖、忽略的方式有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注辰讯云资讯频道!...

小编给大家分享一下Linux如何使用ss命令查看系统的socket状态,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。  Linux系统中,ss命令可用于查看系统的socket的状态,而socket作为系统的进程通信机制,了解其状态是很有必要的,下面小编就给大家介绍下Linux如何使用ss命令查看socket的状态。  ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)  1.命令格式:  ss [参数]  ss [参数] [过滤]  2.命令功能:  ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。  3.命令参数:  -h, --help 帮助信息  -V, --version 程序版本信息  -n, --numeric 不解析服务名称  -r, --resolve 解析主机名  -a, --all 显示所有套接字(sockets)  -l, --listening 显示监听状态的套接字(sockets)  -o, --options 显示计时器信息  -e, --extended 显示详细的套接字(sockets)信息  -m, --memory 显示套接字(socket)的内存使用情况  -p, --processes 显示使用套接字(socket)的进程  -i, --info 显示 TCP内部信息  -s, --summary 显示套接字(socket)使用概况  -4, --ipv4 仅显示IPv4的套接字(sockets)  -6, --ipv6 仅显示IPv6的套接字(sockets)  -0, --packet 显示 PACKET 套接字(socket)  -t, --tcp 仅显示 TCP套接字(sockets)  -u, --udp 仅显示 UCP套接字(sockets)  -d, --dccp 仅显示 DCCP套接字(sockets)  -w, --raw 仅显示 RAW套接字(sockets)  -x, --unix 仅显示 Unix套接字(sockets)  -f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink  -A, --query=QUERY, --socket=QUERY  QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]  -D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件  -F, --filter=FILE 从文件中都去过滤器信息  FILTER := [ state TCP-STATE ] [ EXPRESSION ]  4.使用实例:  实例1:显示TCP连接  命令:ss -t -a  输出:  代码如下:  [root@localhost ~]# ss -t -a  State Recv-Q Send-Q Local Address:Port Peer Address:Port  LISTEN 0 0 127.0.0.1:smux *:*  LISTEN 0 0 *:3690 *:*  LISTEN 0 0 *:ssh *:*  ESTAB 0 0 192.168.120.204:ssh 10.2.0.68:49368  [root@localhost ~]#  实例2:显示 Sockets 摘要  命令:ss -s  输出:   代码如下:  [root@localhost ~]# ss -s  Total: 34 (kernel 48)  TCP: 4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3《/p》 《p》Transport Total IP IPv6  * 48 - -  RAW 0 0 0  UDP 5 5 0  TCP 4 4 0  INET 9 9 0  FRAG 0 0 0  [root@localhost ~]#  说明:列出当前的established, closed, orphaned and waiting TCP sockets  实例3:列出所有打开的网络连接端口  命令:ss -l  输出:  代码如下:  [root@localhost ~]# ss -l  Recv-Q Send-Q Local Address:Port Peer Address:Port  0 0 127.0.0.1:smux *:*  0 0 *:3690 *:*  0 0 *:ssh *:*  [root@localhost ~]#  实例4:查看进程使用的socket  命令:ss -pl  输出:  代码如下:  [root@localhost ~]# ss -pl  Recv-Q Send-Q Local Address:Port Peer Address:Port  0 0 127.0.0.1:smux *:* users:((“snmpd”,2716,8))  0 0 *:3690 *:* users:((“svnserve”,3590,3))  0 0 *:ssh *:* users:((“sshd”,2735,3))  [root@localhost ~]#  实例5:找出打开套接字/端口应用程序  命令:ss -lp | grep 3306  输出:  代码如下:  [root@localhost ~]# ss -lp|grep 1935  0 0 *:1935 *:* users:((“fmsedge”,2913,18))  0 0 127.0.0.1:19350 *:* users:((“fmsedge”,2913,17))  [root@localhost ~]# ss -lp|grep 3306  0 0 *:3306 *:* users:((“mysqld”,2871,10))  [root@localhost ~]#  实例6:显示所有UDP Sockets  命令:ss -u -a  输出:  代码如下:  [root@localhost ~]# ss -u -a  State Recv-Q Send-Q Local Address:Port Peer Address:Port  UNCONN 0 0 127.0.0.1:syslog *:*  UNCONN 0 0 *:snmp *:*  ESTAB 0 0 192.168.120.203:39641 10.58.119.119:domain  [root@localhost ~]#  实例7:显示所有状态为established的SMTP连接  命令:ss -o state established &lsquo;( dport = :smtp or sport = :smtp )&rsquo;  输出:  代码如下:  [root@localhost ~]# ss -o state established &lsquo;( dport = :smtp or sport = :smtp )&rsquo;  Recv-Q Send-Q Local Address:Port Peer Address:Port  [root@localhost ~]#  实例8:显示所有状态为Established的HTTP连接  命令:ss -o state established &lsquo;( dport = :http or sport = :http )&rsquo;  输出:  代码如下:  [root@localhost ~]# ss -o state established &lsquo;( dport = :http or sport = :http )&rsquo;  Recv-Q Send-Q Local Address:Port Peer Address:Port  0 0 75.126.153.214:2164 192.168.10.42:http  [root@localhost ~]#   实例9:列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字  命令:ss -o state fin-wait-1 &lsquo;( sport = :http or sport = :https )&rsquo; dst 193.233.7/24  实例10:用TCP 状态过滤Sockets:  命令:  代码如下:  ss -4 state FILTER-NAME-HERE  ss -6 state FILTER-NAME-HERE  输出:  代码如下:  [root@localhost ~]#ss -4 state closing  Recv-Q Send-Q Local Address:Port Peer Address:Port  1 11094 75.126.153.214:http 192.168.10.42:4669  说明:  FILTER-NAME-HERE 可以代表以下任何一个:  代码如下:  established  syn-sent  syn-recv  fin-wait-1  fin-wait-2  time-wait  closed  close-wait  last-ack  listen  closing  all : 所有以上状态  connected : 除了listen and closed的所有状态  synchronized :所有已连接的状态除了syn-sent  bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.  big : 和bucket相反。  实例11:匹配远程地址和端口号  命令:  代码如下:  ss dst ADDRESS_PATTERN  ss dst 192.168.1.5  ss dst 192.168.119.113:http  ss dst 192.168.119.113:smtp  ss dst 192.168.119.113:443  输出:  代码如下:  [root@localhost ~]# ss dst 192.168.119.113  State Recv-Q Send-Q Local Address:Port Peer Address:Port  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:20229  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61056  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:61623  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:60924  ESTAB 0 0 192.168.119.103:16050 192.168.119.113:43701  ESTAB 0 0 192.168.119.103:16073 192.168.119.113:32930  ESTAB 0 0 192.168.119.103:16073 192.168.119.113:49318  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844  [root@localhost ~]# ss dst 192.168.119.113:http  State Recv-Q Send-Q Local Address:Port Peer Address:Port  [root@localhost ~]# ss dst 192.168.119.113:3844  State Recv-Q Send-Q Local Address:Port Peer Address:Port  ESTAB 0 0 192.168.119.103:16014 192.168.119.113:3844  [root@localhost ~]#  实例12:匹配本地地址和端口号  命令:  代码如下:  ss src ADDRESS_PATTERN  ss src 192.168.119.103  ss src 192.168.119.103:http  ss src 192.168.119.103:80  ss src 192.168.119.103:smtp  ss src 192.168.119.103:25  输出:  代码如下:  [root@localhost ~]# ss src 192.168.119.103:16021  State Recv-Q Send-Q Local Address:Port Peer Address:Port  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63054  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:62894  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:63055  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:2274  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44784  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:7233  ESTAB 0 0 192.168.119.103:16021 192.168.119.103:58660  ESTAB 0 0 192.168.119.103:16021 192.168.119.201:44822  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56737  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:57487  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56736  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64652  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56586  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:64653  ESTAB 0 0 192.168.119.103:16021 10.2.1.206:56587  [root@localhost ~]#  实例13:将本地或者远程端口和一个数比较  命令:  代码如下:  ss dport OP PORT  ss sport OP PORT  输出:  代码如下:  [root@localhost ~]# ss sport = :http  [root@localhost ~]# ss dport = :http  [root@localhost ~]# ss dport \》 :1024  [root@localhost ~]# ss sport \》 :1024  [root@localhost ~]# ss sport \《 :32000  [root@localhost ~]# ss sport eq :22  [root@localhost ~]# ss dport != :22  [root@localhost ~]# ss state connected sport = :http  [root@localhost ~]# ss \( sport = :http or sport = :https \)  [root@localhost ~]# ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24  说明:  ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。  OP 可以代表以下任意一个:  《= or le : 小于或等于端口号  》= or ge : 大于或等于端口号  == or eq : 等于端口号  != or ne : 不等于端口号  《 or gt : 小于端口号  》 or lt : 大于端口号  实例14:ss 和 netstat 效率对比  命令:  代码如下:  time netstat -at  time ss  输出:  代码如下:  [root@localhost ~]# time ss  real 0m0.739s  user 0m0.019s  sys 0m0.013s  [root@localhost ~]#  [root@localhost ~]# time netstat -at  real 2m45.907s  user 0m0.063s  sys 0m0.067s  [root@localhost ~]#  说明:  用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。以上是“Linux如何使用ss命令查看系统的socket状态”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...

这篇文章给大家分享的是有关linux如何使用cat命令查看文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。Linux系统中查看文件内容时,可以使用cat命令来查看,但是cat命令一般只适合查看文件内容较少的文件。1、cat命令的语法格式为:cat [参数] [文件]对于一般的查看,可以直接使用cat 文件名的方式,比如说查看yum.conf文件。命令为:cat yum.conf2、如果需要显示文件内容的行数,可以使用参数-n命令为:cat -n yum.conf3、-n参数会对文件的每行内容都编制一个编号,及时是空行。如果需要多个空行算为一个编号,可以使用-s参数命令为:cat -s yum.conf4、如果显示文件内容要求不对空行编号,可以使用命令-b命令为:cat -b yum.conf5、有的时候为了区分每行的结束部分,可以使用命令-E,在每行结束出显示$符号命令为:cat -E yum.conf6、在特殊情况下,需要将TAB字符显示为 ^I符号,可以使用参数-T命令为:cat -T yum.conf7、如果需要查看cat的具体用法,可以使用命令&ndash;help显示帮助信息命令为:cat --help或者cat  --h8、可以使用参数-version查看版本信息命令为:cat version感谢各位的阅读!关于“linux如何使用cat命令查看文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!...

本篇文章给大家分享的是有关利用java怎么编写一个超市管理系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现功能使用选择结构,循环结构,数组的知识实现一个超市管理系统运行结果:货物清单:添加商品功能:删除商品功能:修改商品:商品货物实体类import java.util.Arrays;public class Goods {  private int id;  private double price;  private String name;  public Goods(int id, double price, String name) {   this.id = id;   this.price = price;   this.name = name;  }  public int getId() {   return id;  }  public void setId(int id) {   this.id = id;  }  public double getPrice() {   return price;  }  public void setPrice(double price) {   this.price = price;  }  public String getName() {   return name;  }  public void setName(String name) {   this.name = name;  }  public Goods() {  }  //增加商品 public Goods[] add(Goods[]goods,Goods newGood){   goods= Arrays.copyOf(goods,goods.length+1);   goods[goods.length-1]=newGood;   return goods;  }  //删除商品 public static Goods[] del(Goods[]goods,int id){   int i=0;   while(true){    if(goods[i].getId()==id){     goods[i]=null;     return goods;    }    i++;    if(i>=goods.length){     return goods;    }   }  }  //添加商品 public static Goods[] change(Goods[]goods,int id,int newId,double newPrice,String newName){   int i=0;   while (true){    if(goods[i].getId()==id){    goods[i].setId(newId);    goods[i].setPrice(newPrice);    goods[i].setName(newName);    return goods;   }    i++;    if(i>=goods.length){     return goods;    }   }  } }超市管理系统类import java.util.Scanner;public class marketManager {  public static void main(String[] args) {   Scanner sc = new Scanner(System.in);   Goods g1=new Goods(1000,10,"笔记本");   Goods g2=new Goods(1001,2,"西红柿");   Goods g3=new Goods(1002,5,"辣条");   Goods []goods={g1,g2,g3};   while (true) {    System.out.println("========超市管理系统=======");    System.out.println("1.货物清单 2.增加商品 3.删除商品 4.修改商品 5.退出");    System.out.println("请输入你要操作的编号:");    int i = sc.nextInt();    switch (i){     case 1:      System.out.println("=======商品清单=======");      System.out.println("商品编号"+"\t\t"+"商品单价"+"\t\t"+"商品名称");      for (Goods a:goods) {       if(a==null){        continue;       }       System.out.println(a.getId()+"\t\t"+a.getPrice()+"\t\t"+a.getName());      }      continue;     case 2:      System.out.println("你选择的是增加商品的功能");      System.out.println("请输入你要添加的编号:");      int Id = sc.nextInt();      System.out.println("请输入你要添加的商品价格:");      double price = sc.nextDouble();      System.out.println("请输入你要添加的商品名称");      String name = sc.next();      Goods good=new Goods(Id,price,name);      goods = good.add(goods, good);      System.out.println("添加成功!");      continue;     case 3:      System.err.println("你选择的是删除商品功能");      System.out.println("请输入你要操作的编号:");      Id = sc.nextInt();      goods=Goods.del(goods,Id);      System.out.println("删除成功!");      continue;     case 4:      System.out.println("你选择的是修改商品功能");      System.out.println("请输入你要操作的编号:");      Id=sc.nextInt();      System.out.println("请输入修改后的编号:");      int newId = sc.nextInt();      System.out.println("请输入修改后的价格:");      double newPrice = sc.nextDouble();      System.out.println("请输入修改后的商品名称:");      String newName=sc.next();      goods=Goods.change(goods,Id,newId,newPrice,newName);      continue;     case 5:      return;    }   }  } }以上就是利用java怎么编写一个超市管理系统,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注辰讯云资讯频道。...

小编给大家分享一下Java基础中注释方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!本教程操作环境:windows7系统、java10版,DELL G3电脑。1.单行注释对程序的某一行代码进行解释例://这是一个简单的注释2.多行注释注释的内容可以为多行以/*开头,以*/结尾,表示这区间的代码是注释.例1:/* *  这还是一个 *  多行注释  */3.文档注释:/**注释内容*/对一段代码的解释说明,可以通过javadoc命令将文档注释提取出来生成帮助文档/**这是我们第一次学习javadoc  * @author ChenJiaYi  * @version jdk11.0  */ /* 单行注释和多行注释的作用:     ①对缩写的程序进行解释说明,增强可读性     ②调试所写的代码 */public class DocNote {     /*     如下的main方法是程序的入口,     main的格式是固定的     */      /**如下的方式是main(),作用:程序的入口      * @param args 输出HelloWorld      */    public static void main(String[] args) {         //单行注释:如下语句表示输入到控制台        System.out.println("HelloWorld");       } }我们在java中使用注释,是为了方便在大家在能够更容易理解代码,和python中的注释有相同之处。java中的注释有单行注释、多行注释、文档注释三种类型。以上是“Java基础中注释方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...

小编给大家分享一下java如何从键盘输入一个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.Shiro,Apache Shiro是Java的一个安全框架。3.Mybatis,MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。4.Dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。键盘输入可以让用户在程序运行过程中向程序输入数据,达到人机交互的效果,提高用户体验。1、键盘输入过程(1)导包(importjava.util.Scanner)告诉程序这个工具在哪里。(2)创建对象(Scannersc=newScanner(http://System.in)。(3)获取数据(intnum=sc.nextInt();)使用工具。2、实例import java.util.Scanner;  public class Test{  public static void main(String[] args){   Scanner sc = new Scanner(http://System.in);  System.out.println("请输入您的年龄:");  int age = sc.nextInt();  if(age<18){ System.out.println("毛头小子");   }else{ System.out.println("成年人了");   }   }   }以上是“java如何从键盘输入一个数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...

这篇文章给大家分享的是有关JavaScript中jquery框架的写法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript是被广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。什么是jQuery?jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。利用CSS选择器,来操作DOM对象进行一系列操作,并且具有强大的插件机制。下载http://jquery.com/ 下载jQuery框架特点轻量级框架:占用资源少,运行速度快;免费开源,提供了强大的功能函数;解决浏览器兼容性问题,实现丰富的 UI 和插件;纠正错误的脚本知识。jQuery 添加到网页中<head><script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script></head>感谢各位的阅读!关于“JavaScript中jquery框架的写法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!...

这篇文章主要介绍deepin系统安装成功后网速很慢怎么办?,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!deepin是基于Linux系统开发的,在网络这方面还是会存在不兼容而导致网速过慢,具体方法如下:1、首选点击启动器,然后打开deepin的终端,终端的位置和mac os系统有些类似,与windows稍微有一些不同。2、打开终端之后,在终端中输入下面的代码:sudo deepin-editor /etc/modprobe.d/iwlwifi.conf3、点击enter运行上述代码,这时候系统会需要我们输入用户密码,输入密码之后点击enter。tips:基于linux的系统在输入密码时是不显示内容的这是个正常现象。4、将“options iwlwifi 11n_disable=1 bt_coex_active=0 power_save=0 swcrypto=1”中的“11n_disable=1”修改为“11n_disable=0”5、然后保存修改后的代码关闭编辑器,重启一下电脑,然后重新体验一下,看一下网速是否得到了提升。6、如果网速没有变化的话也可以将:“options iwlwifi 11n_disable=1 bt_coex_active=0 power_save=0 swcrypto=1”中的“11n_disable=1”修改为“11n_disable=8”以上是“deepin系统安装成功后网速很慢怎么办?”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注辰讯云资讯频道!...