精华内容
下载资源
问答
  • 使用sed修改配置文件

    千次阅读 2011-05-29 21:09:00
    问题:在接口up的时候,向一个配置文件中加入一些配置项,down的时候,将这些配置项从配置文件中删除。 radvd.temp.conf 保存接口相关的配置项,radvd.conf是最终配置文件。$REALDEVICE是接口名称。 up.sh sed -e "s...

    问题:在接口up的时候,向一个配置文件中加入一些配置项,down的时候,将这些配置项从配置文件中删除。
    radvd.temp.conf 保存接口相关的配置项,radvd.conf是最终配置文件。$REALDEVICE是接口名称。

    up.sh
    sed -e "s/ppp0/$REALDEVICE/" radvd.temp.conf >> radvd.conf

    down.sh
    CFGNUM=`wc -l radvd.temp.conf | sed 's/[[:space:]].*$//g'`
    #如果grep找不到,那么会导致脚本阻塞
    ARGNUM_B=`grep -n ${REALDEVICE} radvd.conf | sed 's/:.*$//g'`
    ARGNUM_E=`expr $CFGNUM + $ARGNUM_B - 1`
    sed -i "$ARGNUM_B, $ARGNUM_E"d radvd.conf 

    命令说明:

    expr  算数计算(加减乘除)、逻辑运算(与或)、数值比较(大于小于等等)、字符串计算(match/index/substr/length)。

    sed 单行文本处理工具  sed [option] [[address]action] input_file
    option:
        -n  静默方式,不打印sed执行过程
        -f   从外部文件读取sed脚本
        -e  指定命令。单条命令时会自动加上,多条命令需要指定。
        -i  直接修改文件,而不是在屏幕上输出。
        -r  使用扩展型正则表达式。
    address:
        修改文件的位置。比如指定行。
        num1,num2  从第num1行到num2行。num1可以为0,表示第一行。num2为$,表示最后一行。
        /expr/,可以匹配expr的行。
        num1,+N,从第num1行之后的N行。
    action:
         a  新增。a后面可以接字符串。将该字符串添加到指定行。如果没有指定address,则对所有行执行该操作。  如:sed "3a abc" radvd.conf
         i   插入。i后面接字符串。在指定行前面插入字符串   
         c  取代。c后面接字符串。用这个字符串替换address中指定的行。
         d  删除。后面不接字符串的。  如:sed "/$REALDEVICE/"d radvdconf。$REALDEVICE是一个shell变量。删除所有匹配该变量的行。
         s  修改。按照正则表示,修改某一行文本。   如:sed -e "s/ppp0/$REALDEVICE" radvd.temp.conf >> radvd.conf 。将radvd.temp.conf中的ppp0修改为$REALDEVICE,然后附加到radvd.conf
         q 退出。比如sed 2q radvd.conf,找到文件的前两行后退出。
         p 打印

    注意:
    1. 如果要在sed中使用$1这样的变量,需要使用双引号来把命令括起来。否则单双引号都可以用的。
    2. s命令,一般使用"/"作为分隔符,但其实可以其他字符如":"作为分隔符的。这样在对文件路径进行操作时会很方便,否则要进行转义。

    展开全文
  • 增量变更配置的几种类型新增[section]修改配置项删除配置项新增配置项混合变更配置shell实现config配置文件的增量变更。 通常在项目中会使用config文件作为项目的配置文件,config文件一般由[section]和name=value...

    前言

    通常在项目中会使用config文件作为项目的配置文件,config文件一般由[section]name=value组成。当然分隔符=或者:是可以根据自己来定的。
    文件的格式通常如下:

    [DEFAULT]
    service_phone=18888888888
    # 资源路径
    resource_dir=/xxx/xxx/xxx/
    # 服务端口
    server_port=xxx
    
    #WEB配置
    [HTTP-SERVER]
    host=0.0.0.0
    http_port=xxx
    

    对于该格式文件的解析,Python3有专门的库处理:configparser,通过导入import configparser就可以解析使用了。

    为什么采用增量配置conf文件?

    回到主题,既然config文件是用来保存项目配置的,那么什么时候会合并A配置文件到B配置文件呢?比如:发布项目的时候,项目release_1.0.0的版本已经发布,项目上的配置文件已经存在,在发布release_2.0.0的版本的时候,为了防止原配置文件的配置会被覆盖,导致原配置丢失,所以使用增量配置的方式来更改配置文件。
    比如:
    release_1.0.0版本的文件app.conf文件如下:

    [SYS_CONFIG]
    # 服务端口
    server_port=8888
    # 资源路径
    resource_dir=/home/zhangsan/resource/
    
    [USER_INFO]
    # 姓名
    name=张三
    # 电话
    phone=18888888888
    # 住址
    address=马栏山马栏坡马栏屯123号
    

    然后该项目需要发布release_2.0.0版本,并且配置文件如下:

    [SYS_CONFIG]
    # 服务端口
    server_port=8080
    # 资源路径
    resource_dir=/home/zhangsan/resource2/
    

    由于发布版本时,开发人员可能只是想更改[SYS_CONFIG]部分的配置,但是不小心把[USER_INFO]部分的配置删除了,导致发布2.0版本之后线上配置文件被直接覆盖删除,导致出现问题。为了让每次发布只需要关心配置文件需要更改的部分,而不关心未更改的配置,解决配置文件轻易被覆盖删除的问题,那么采用增量配置的方式更加的稳妥。
    比如接着上面的例子,发布2.0版本的配置文件只会关心发布更改的配置文件项,由于只列出了[SYS_CONFIG]的配置,所以只会更改线上原配置文件中的[SYS_CONFIG]中的配置,原配置文件的[USER_INFO]的配置依然存在不变。

    增量变更配置的几种类型

    分几种变更场景

    新增[section]

    A.conf

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    

    B.conf

    [SECTION_B]
    opentionB_1=valueB
    opentionB_2=valueB
    

    合并B.conf到A.conf之后的内容:

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    [SECTION_B]
    opentionB_1=valueB
    opentionB_2=valueB
    

    修改配置项

    A.conf

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    

    B.conf

    [SECTION_A]
    opentionA_1=被修改了
    

    合并B.conf到A.conf之后的内容:

    [SECTION_A]
    opentionA_1=被修改了
    opentionA_2=valueA
    

    删除配置项

    删除配置项为了稳妥起见,采用将value值去除变为空值的方式,起到删除的作用。
    A.conf

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    

    B.conf

    [SECTION_A]
    opentionA_1=
    

    合并B.conf到A.conf之后的内容:

    [SECTION_A]
    opentionA_1=
    opentionA_2=valueA
    

    新增配置项

    A.conf

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    

    B.conf

    [SECTION_A]
    opentionA_3=新增配置项3
    

    合并B.conf到A.conf之后的内容:

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    opentionA_3=新增配置项3
    

    混合变更配置

    A.conf

    [SECTION_A]
    opentionA_1=valueA
    opentionA_2=valueA
    

    B.conf

    [SECTION_A]
    opentionA_3=新增配置项3
    opentionA_1=被修改了
    opentionA_2=
    
    [SECTION_B]
    opentionB_1=valueB
    opentionB_2=valueB
    

    合并B.conf到A.conf之后的内容:

    [SECTION_A]
    opentionA_1=被修改了
    opentionA_2=
    opentionA_3=新增配置项3
    
    [SECTION_B]
    opentionB_1=valueB
    opentionB_2=valueB
    

    shell实现config配置文件的增量变更

    shell实现的核心是使用awk命令读取分析A文件和B文件的内容,并确定B文件的每个配置项分别变更了A文件的哪一行配置或者在哪一行后面新增配置。然后将变更信息生成sed脚本,最后直接用sed命令替换配置内容。最后的sed命令采用流式编辑文件,因此非常的高效。

    mconf.sh

    #!/bin/bash
    
    fcf_path=$1    # 配置文件路径
    to_mcf_path=$2 # 合并目标文件
    sed_script=$3  # sed脚本
    
    #awk 分别读取两个配置文件
    #比较文件,找出每项配置合并到mcf的增删改并写入到sed文件
    #使用sed将mcf文件变更
    
    # 遇到section插入
    
    if [ ! -f "$fcf_path" ]; then
      echo "配置文件不存在:${fcf_path}"
      exit 1
    fi
    if [ ! -f "$to_mcf_path" ]; then
      echo "目标配置文件不存在:${to_mcf_path}"
      exit 1
    fi
    
    # linux环境中去除Windows中的\r符号
    sed -i 's/\r//g' "$fcf_path"
    sed -i 's/\r//g' "$to_mcf_path"
    
    cat /dev/null >"$sed_script" # 清空sed脚本文件
    
    function cf_append() {
      # 附加插入  格式: 行号a\换行 附加内容
      local row_num=$1 #行号
      local content=$2 #附加内容
      {
        echo "${row_num}a\\"
        echo "${content}"
        echo "" #还需要一个空行,否则附加内容之后的内容会在一行
      } >>"$sed_script"
    }
    
    function cf_change() {
      # 更新配置   格式: 行号s/模式匹配/替换内容/g  模式匹配最好采用整行匹配xx=.*
      local row_num=$1 #行号
      local pattern=$2 #匹配字符串
      local content=$3 #替换内容
      if [[ $content == */* ]]; then
        {
          echo "${row_num}s!${pattern}!${content}!g" >>"$sed_script"
        }
      else
        {
          echo "${row_num}s/${pattern}/${content}/g" >>"$sed_script"
        }
      fi
    
    }
    
    function act_sed() {
      # 触发sed操作
      if [ ! -s "$to_mcf_path" ]; then
        echo -n "#head" >>"$to_mcf_path" # 如果文件为空,则需要添加一个头部内容才能用sed命令,否则sed命令无效
      fi
      sed -i -f "$sed_script" "$to_mcf_path"
    }
    
    function match_tconf() {
      # 匹配目标项的配置,如果有多个相同配置则去最后的配置
      local key=$1
      local IFS_OLD=$IFS
      match_rows=$(awk -F= '{if ($1 == key) print NR,$1,$2}' key="$key" "$to_mcf_path")
      if [ -z "$match_rows" ]; then #如果没有匹配项
        echo ""
        return
      fi
      IFS=$'\n'
      amatch_rows=($match_rows)
      local last_row=${amatch_rows[((${#amatch_rows[*]})) - 1]} #获取最后一行
      echo "$last_row"
      IFS=$IFS_OLD
    }
    
    function compare_conf() {
      #比较配置文件,并生成sed脚本
      f_rows=$(awk -F= '{print $0}' "$fcf_path")
      IFS_OLD=$IFS
      IFS=$'\n'
    
      last_section_num=0 #最近一次的section行号,$为最后一行。因为流式处理配置文件,所以所有项一定是按序处理
      for frow in $f_rows; do
        if [ -z "$frow" ]; then
          continue
        fi
        IFS=$'='
        fcolumns=($frow)
        local key=${fcolumns[0]}
        local fvalue=${fcolumns[1]}
    
        match_row=$(match_tconf "$key") #匹配目标配置文件中的内容
        IFS=$' '
        amatch_column=($match_row) #行号 key value
        if ((${#amatch_column[*]} == 2)); then
          amatch_column=($amatch_column "")
        fi
        if [[ $key == [* ]]; then #如果是section
          if [ -z "$match_row" ]; then #如果section未在目标配置中找到,则表示为新增section
            cf_append '$' ""
            cf_append '$' "$key"
            last_section_num='$'
          else
            local lnum=${amatch_column[0]} #section处在目标配置中的行号
            last_section_num=$lnum
          fi
          continue #继续循环
        fi
    
        if [ -z "$match_row" ]; then # 如果没有找到匹配项
          # 新增
          if [[ $frow != *=* ]]; then #如果非配置项
            if [[ $frow != [* ]]; then
              continue
            fi
            cf_append "$last_section_num" "$key"
          else
            cf_append "$last_section_num" "$key=$fvalue"
          fi
        elif [ "${amatch_column[((${#amatch_column[*]})) - 1]}" != "$fvalue" ]; then
          # 修改
          local lnum=${amatch_column[0]} #目标文件匹配的行号
          cf_change "$lnum" "$key=.*" "$key=$fvalue"
        fi
      done
      IFS=$IFS_OLD
    }
    
    compare_conf
    act_sed
    
    

    脚本执行:
    ./mconf.sh ./b.conf ./a.conf ./m.sed
    最终会生成会将b.conf文件合并到a.conf文件,并且生成m.sed文件,m.sed文件会作为sed命令的-f参数传入并执行。

    注意如果你是macOS,那么sed命令后面需要带上-i ‘’ ,因为mac系统强制需要你传入备份文件名。

    脚本中读取配置文件采用的分隔符分隔的方式,可以使用while-read的方式会更好。

    展开全文
  • Springboot引用外部配置文件

    万次阅读 热门讨论 2017-08-25 17:24:22
    现在的项目越来越多的都是打包成jar运行尤其是springboot项目,这时候配置文件如果一直放在项目中,每次进行简单的修改时总会有些不方便,这里我们看下打包成jar之后,从外部配置文件中读取配置信息。首先想到的是...

    现在的项目越来越多的都是打包成jar运行尤其是springboot项目,这时候配置文件如果一直放在项目中,每次进行简单的修改时总会有些不方便,这里我们看下打包成jar之后,从外部配置文件中读取配置信息。

    首先想到的是通过java代码读取外边某个路径下的文件,但是开始做之后发现好多问题。后来又找其它解决方案,正好搜到一种简单的解决方式:

    java -jar demo.jar --Dspring.config.location=myapplication.properties

    这样就可以通过@value注解读取myapplication.properties中的配置信息了。(上边的大写D好像可以不写的)

    后来想着直接把spring.config.location写到application.properties配置文件中,然后指定一个固定的外部配置文件来获取信息,这样启动的时候就可以不用加最后一行了。

    spring.config.location=C:\\Users\\Administrator\\git\\Display\\host.properties

    可是这种方式是行不通的,比如我配置文件中有下面信息:

    myname=hellopangkunkun

    代码:

        @Value("${myname}")
        private String name;

    我在启动的时候直接报这个地方的错误,说是无法找到myname,导致整个项目出异常。

    后来搜了下文章,对比官网文档,又得到了一些信息:

    24.3 Application property files
    SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:
    
    A /config subdirectory of the current directory.
    The current directory
    A classpath /config package
    The classpath root
    The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).

    这里说了四种方式可以把配置文件放到外部的。
    第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下;
    第二种是直接把配置文件放到jar包的同级目录;
    第三种在classpath下建一个config文件夹,然后把配置文件放进去;
    第四种是在classpath下直接放配置文件。

    这四种方式的优先级是从一到四一次降低的。

    注: 一二两种方案其实不是jar包的同级目录,而是(执行启动指令的)同级目录。为了便于理解我把上面的当前目录说成jar包的同级目录,这种说法并不对。如果是刚开始接触或者调试这块,还是在jar包同级目录方便。

    由于我们是要从外部读取文件,所以直接说前两种。

    看下文件目录结构:
    这里写图片描述

    这里的application.properties是我们的配置文件,config是创建的另外一个目录,放的也是application.properties。

    Display-1.0-SNAPSHOT.jar中可以包含application.properties配置文件也可以不包含。

    为了验证可以在config中设置myname=name1,jar同级目录中设置myname=name2,如果jar中包含配置文件,将其中设置成myname=name3。

    直接使用指令启动:

    java -jar Display-1.0-SNAPSHOT.jar

    之后验证可得知,我们通过@Value(“${myname}”)获取到的myname的值是name1,把config下的配置文件删除后获取的结果是name2,都删除后才会获取jar包中配置文件的数据name3。

    另外如果我们想要想配置测试、开发、生产环境一样使用另外一个配置文件怎么来实现呢?

    下面继续,我把application.properties的信息修改如下:

    spring.profiles.active=dev,host

    配置文件目录结构:
    这里写图片描述
    我又新增了一个名为application-host.properties的配置文件,同理也可以把这个文件考出来放到jar包外面,同级目录或者config下。

    这样项目启动之后dev配置文件和host配置文件都会生效。
    这里写图片描述
    这里为了突出其他的配置文件我只把host的拷出来了,dev的还是在jar包里,application.properties配置文件放在jar中也一样,我们需要的主要是host的配置文件。

    这样每次修改的时候只需要修改配置文件信息,然后重启项目就好,不需要重新打包。

    如果想要只修改配置文件,不重启项目就能生效,可以考虑用java来读取配置文件中的数据,把它当作一个普通文件来读取,或者写到其他数据库中也行。上面这些方案已经能够满足我的需求了,所以其他的不在做了。

    最后提个问题,也是我没弄明白的,希望知道的各位能够给个答案:

    我把spring.config.location这个配置写到配置文件中为什么没有生效?

    展开全文
  • python之ini配置文件(configparser)

    万次阅读 多人点赞 2018-04-20 21:49:28
    使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser configParser解析的配置文件的格式比较象ini的...

    前言

    使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser

    configParser解析的配置文件的格式比较象ini的配置文件格式,就是文件中由多个section构成,每个section下又有多个配置项

    ini

    1.ini配置文件格式如下:

    
    [section0]
    
    key0 = value0
    key1 = value1
    
    [section1]
    
    key2 = value2
    key3 = value3

    2.section不能重复,里面数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释用英文分号(;)

    configparser

    1.python3里面自带configparser模块来读取ini文件

    # python3
    import configParser

    敲黑板:python2的版本是Configparser

    # python2
    import ConfigParser

    2.在pycharm里面,新建一个ini文件:右键New->File, 输入框直接写一个.ini后缀文件就行了,然后写数据

    3.注释里面有中文的话,这里代码跟python2是有点区别的,python2里面直接conf.read(cfgpath)就可以了,python3需要加个参数:encoding=”utf-8”

    敲黑板:如果ini文件里面写的是数字,读出来默认是字符串

    # coding:utf-8
    # 作者:上海-悠悠
    # QQ群:588402570
    
    import configparser
    import os
    curpath = os.path.dirname(os.path.realpath(__file__))
    cfgpath = os.path.join(curpath, "cfg.ini")
    print(cfgpath)  # cfg.ini的路径
    
    # 创建管理对象
    conf = configparser.ConfigParser()
    
    # 读ini文件
    conf.read(cfgpath, encoding="utf-8")  # python3
    
    # conf.read(cfgpath)  # python2
    
    # 获取所有的section
    sections = conf.sections()
    
    print(sections)  # 返回list
    
    items = conf.items('email_163')
    print(items)  # list里面对象是元祖

    运行结果:

    D:\debug_p3\cfg\cfg.ini
    ['email_qq', 'email_163']
    [('sender', 'yoyo@163.com'), 
    ('psw', '123456'),
    ('port', '465'), 
    ('smtp_server', 'smtp.163.com'), 
    ('receiver', 'xxx@qq.com')]

    remove

    1.如果想删除section中的一项,比如我想删除[email_163]下的port 这一行

    # 删除一个 section中的一个 item(以键值KEY为标识)
    conf.remove_option('email_163', "port")

    2.删除整个section这一项

    conf.remove_section('email_163')

    3.参考代码:

    # coding:utf-8
    import configparser
    import os
    # 作者:上海-悠悠
    # QQ群:588402570
    
    curpath = os.path.dirname(os.path.realpath(__file__))
    cfgpath = os.path.join(curpath, "cfg.ini")
    print(cfgpath)  # cfg.ini的路径
    
    # 创建管理对象
    conf = configparser.ConfigParser()
    
    # 删除一个 section中的一个 item(以键值KEY为标识)
    conf.remove_option('email_163', "port")
    
    items = conf.items('email_163')
    print(items)  # list里面对象是元祖
    
    # 删除一个 section
    conf.remove_section('email_163')
    sects = conf.sections()
    print(sects)  # list里面对象是元祖

    运行结果:

    D:\debug_p3\cfg\cfg.ini
    [('sender', 'yoyo@163.com'),
     ('psw', '123456'), 
     ('smtp_server', 'smtp.163.com'),
     ('receiver', 'xxx@qq.com')]
    ['email_qq']

    add

    1.新增一个section

    # 添加一个select
    conf.add_section("emali_tel")
    print(conf.sections())

    2.section里面新增key和value

    # 往select添加key和value
    conf.set("emali_tel", "sender", "yoyo1@tel.com")
    conf.set("emali_tel", "port", "265")

    write写入

    1.write写入有两种方式,一种是删除原文件内容,重新写入:w

    conf.write(open(cfgpath, “w”))  # 删除原文件重新写入

    另外一种是在原文件基础上继续写入内容,追加模式写入:a

    conf.write(open(cfgpath, “a”))  # 追加模式写入

    2.前面讲的remove和set方法并没有真正的修改ini文件内容,只有当执行conf.write()方法的时候,才会修改ini文件内容,举个例子:在ini文件上追加写入一项section内容

    # coding:utf-8
    import configparser
    import os
    curpath = os.path.dirname(os.path.realpath(__file__))
    cfgpath = os.path.join(curpath, "cfg.ini")
    print(cfgpath)  # cfg.ini的路径
    
    # 创建管理对象
    conf = configparser.ConfigParser()
    
    # 添加一个select
    conf.add_section("emali_tel")
    print(conf.sections())
    
    # 往select添加key和value
    conf.set("emali_tel", "sender", "yoyo1@tel.com")
    conf.set("emali_tel", "port", "265")
    items = conf.items('emali_tel')
    print(items)  # list里面对象是元祖
    
    conf.write(open(cfgpath, "a"))  # 追加模式写入

    运行后会发现ini文件最后新增了写入的内容了

     

    set修改ini文件

    1.比如我想把前面ini文件里面的[email_163]下的port改成”中文”
    敲黑板:这里写入中文的话,需要加上写入的编码格式:encoding=”utf-8”

    # coding:utf-8
    import configparser
    import os
    
    # 作者:上海-悠悠
    # QQ群:588402570
    
    curpath = os.path.dirname(os.path.realpath(__file__))
    cfgpath = os.path.join(curpath, "cfg.ini")
    
    # 创建管理对象
    conf = configparser.ConfigParser()
    
    # 先读出来
    conf.read(cfgpath, encoding="utf-8")
    
    # 修改section里面的值
    conf.set("email_163", "port", "中文")  # 写入中文
    
    conf.write(open(cfgpath, "r+", encoding="utf-8"))  # r+模式

     

    展开全文
  • 1. 在修改(新增)配置文件的时候可以通过抓包分析出请求后端的地址是 nacos/v1/cs/configs ,对应着 com.alibaba.nacos.config.server.controller.ConfigController.publishConfig() 方法。 我们来看看 ...
  • 对于MyBatis,最核心的全局配置文件就是SqlMapConfig.xml(mybatis-config.xml),其中不仅包含了数据库连接信息,同时还包含了Mapper映射文件的加载路径、全局参数以及类别别名等一系列MyBatis的核心配置信息。...
  • redis配置文件详解

    万次阅读 2019-10-12 14:12:25
    redis史上最全最详细的配置文件解读,想要学习的同学速来围观,快过来看,不看会后悔啊。 redis启动的时候除了可以不带参数启动之外,对于其他灵活配置 也提供了其他配置选项,如是否开启持久化、日志级别等。由于...
  • vsftpd配置文件详解

    千次阅读 2016-02-26 11:11:42
    我们要修改配置文件是/etc/vsftpd/vsftpd.conf文件。  我们在修改配置文件之前一定要记得做备份,这是一个非常好习惯。在/etc/vsftpd 目录下执行cp vsftpd.conf vsftpdold.conf命令,将配置文件进行备份。  
  • FTP配置文件参数详解

    万次阅读 2017-05-26 13:29:34
    ...匿名用户不能离开匿名??用户家目录/var/ftp,且只能下载不能上传。 ...本地用户可以在自己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的...写在文件/etc/vsftpd.ftpusers
  • emacs配置文件

    万次阅读 2012-04-05 14:38:23
    .emacs 指的是emacs的配置文件。在UNIX下为“.emacs”。它在用户的HOME目录下。  你可以自己写一个全新的.emacs。但一般都是从别人那(或网上)复制一个过来,再根据自己的需要修改。  Windows下Emacs配置文件...
  • 纯c读写ini配置文件

    千次下载 热门讨论 2015-10-14 11:40:56
    纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种...
  • 1、下载Nginx,进入Nginx下载地址:http://nginx.org/ 点击nginx-1.8.0,进入:http://nginx.org/en/download.html,下载文件: 2 下载pcre,这个是一个正则表达式的库,Nginx做...
  • Linux系统下FTP服务配置文件参数详解

    千次阅读 2019-06-17 17:53:39
    vsftpd配置文件采用“#”作为注释符,以“#”开头的和空白在解析时将被忽略,其余的被视为配置命令,每个配置命令的“=”两边不要留有空格。对于每个配置命令,在配置文件中还列出了相关的配置说明,利用vi...
  • 一、引言在项目过程中,难免会需要一个方便的配置文件读写类,它可以像游戏的存档文件一样,记录着我们当前项目的配置信息,以至于方便我们每次初始化运行的时候可以从这个配置文件读取上一次的配置信息,当然也可以...
  • linux 增加用户 useradd 用法小结及配置文件说明
  • Apache 配置文件管理

    万次阅读 2012-02-17 11:44:22
    (2) 配置指令:在配置文件 httpd.conf .htaccess 里面的任意一都是一个配置指令 (3) 配置信息的保存和读取:配置信息配置完成后会在Apache里面按照一定的数据结构进行保存,在Apache的运行过程中,任何需要配置...
  • linux中ftp配置文件详解

    千次阅读 2016-06-28 16:10:14
    vsftpd配置文件采用“#”作为注释符,以“#”开头的和空白在解析时将被忽略,其余的被视为配置命令,每个配置命令的“=”两边不要留有空格。对于每个配置命令,在配置文件中还列出了相关的配置说明,利用vi...
  • samba配置文件注释

    千次阅读 2015-02-06 18:15:11
    1、主配置文件smb.conf。 在配置参数昌有以下几个共性。 (1)参数配置基本采用“参数” = “值”的方式,如果参数有多个值时,多个参数之间用空格分隔。 (2)当使用用户和组作为参数时,值为组时需在组名前加...
  • 在介绍完配置文件中的入口和出口基本操作流程后,接下来我们介绍loader的基本使用,本文主要介绍url-loader的使用流程。 loader 用于对模块的源代码进行转换。loader 可以使你在import或"加载"模块时预处理文件。...
  • 纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种...
  • kickstart 配置文件说明

    千次阅读 2018-05-23 21:35:58
    使用kickstart,系统管理员可以创建一个文件,这个文件包含了在典型的安装过程中所遇到的问题的答案. Kickstart文件可以存放于单一的服务器上,在安装过程中被独立的机器所读取.这个安装方法可以支持使用单一...
  • 介绍使用python的xml.etree.ElementTree模块对xml文件的标签进行新增修改和删除等常用操作
  • application1、SpringBoot bootstrap配置文件不生效问题2、bootstrap/ application 的区别3、bootstrap/ application 的应用场景4、高级使用场景4.1 启动上下文4.2 应用上下文层次结构4.3 修改bootstrap属性配置...
  • Linux中vsftpd配置文件vsftpd.conf详解

    万次阅读 2018-05-24 16:12:11
    vsftpd配置文件采用“#”作为注释符,以“#”开头的和空白在解析时将被忽略,其余的被视为配置命令,每个配置命令的“=”两边不要留有空格。对于每个配置命令,在配置文件中还列出了相关的配置说明,利用vi...
  • vi配置文件

    万次阅读 2011-10-11 13:13:19
    在用vi编程时, 如果不配置,会感觉会不舒服。tab键的格数,背景色, 这样会让看起来舒服些, ...这里转发一个vi的配置文件, 可以复制到.vimrc文件,如果是usr放到/home/username/.vimrc 如果是root则放到/etc/v
  • SVN权限配置文件详细说明

    千次阅读 2014-02-21 09:56:36
    本章将详细介绍前一章所涉及的配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。除此之外的其他配置、安装等内容,不是本文重点,读者若有什么疑问,请参考后面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,653
精华内容 39,461
关键字:

修改配置文件新增两行