⑴ linux 用脚本 修改.conf文件,即时生效问题
init.d下的都抄是开机时启动的后台进程袭执行脚本,脚本配置里会有执行程序的定义,这个执行的程序就会去读取相关配置文件。比如你说的/etc/init.d/dnsmasq脚本里定义的dnsmasq程序运行后就会去读取/etc/dnsmasq.conf文件.
⑵ 有两台linux机器,如何通过脚本或程序从一台机器远程修改另一台机器的配置文件
在本地生成一份.sh文件,然后推送的远程机器上面在执行脚本。
⑶ 怎么通过shell脚本让系统对一个文件进行自动修改
1自动检测可以将脚本放在cretab中定时运行2如何确定文件被修改1采用stat命令将这个文件的最初状态保存到一个文件中resource.txt源文件2每次运行脚本时,也用stat命令查看文件状态,保存到result.txt中3将resource.txt和result.txt2个文件进行对比diff命令。如果有不同即表明文件被修改。
⑷ 启动所有配置文件shell脚本怎么写
key=value 文本格式配置而对于 linux shell,基本上很难使用前面提到的各种格式。所以在 unix 系统上,很多 shell 脚本的配置文件都是纯粹的 key=value 文本格式,例如绝大多数的开机服务启动脚本、网络配置文件等。例子 1:ntp 配置文件$ cat /etc/sysconfig/ntpd# Drop root to id 'ntp:ntp' by default.OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"# Set to 'yes' to sync hw clock after successful ntpdateSYNC_HWCLOCK=no# Additional options for ntpdateNTPDATE_OPTIONS=""例子 2:网络配置文件$ cat /etc/sysconfig/networkNETWORKING="yes"HOSTNAME="xx.com"而且,要注意得是,一般 key=value 的等号两边不应该有空格,因为大多数脚本都是直接 source 配置文件的(当然,也有部分脚本是会自己处理配置文件格式),使用起来很简单,基本上没有解析的操作:$ cat /etc/init.d/networkif [ ! -f /etc/sysconfig/network ]; then exit 0fi. /etc/sysconfig/network理所当然,这种格式无法满足更复杂的配置文件需求,比如 ini 格式的 section。那么,在 shell 中除了满世界去找一个解析库之外,能有什么方法可以实现呢?扩展 key=value 文本格式配置假设,我们管理着 n 个集群,每个集群配置项都是一样的,我们需要在 shell 脚本中,可以根据集群的名称来导入对应的配置。下面我们介绍一种最简单的方法,只需要针对第一种格式扩展下即可。我们创建一个配置文件目录 conf.d,在这个目录下存放各个集群的配置文件。每个集群对应一个配置文件,文件名为集群名称,例如:$ cat conf.d/CLUSTER_Ac_cluster_name="CLUSTER_A"c_cluster_type=1在脚本中,我们可以这样来导入相应集群的配置:function load_config(){ local cluster_name="$1" if [ -f "conf.d/$cluster_name" ]; then . conf.d/$cluster_name fi}load_config CLUSTER_A因为各个集群的配置文件相互独立,所以如果包含一些全局范围的配置项,需要在每个配置文件中都增加。或者,再增加一个入口的配置文件:# cat global.confg_conf_dir=conf.d # 配置文件目录g_version="0.1" # 全局配置脚本相应调整下:GLOBAL_CONF=/etc/xxx/global.confif [ -f "$GLOBAL_CONF" ]; then . $GLOBAL_CONFfiif [[ "$g_conf_dir" != /* ]]; then # 如果是相对路径 g_conf_dir="$(dirname $GLOBAL_CONF)/$g_conf_dir"fifunction load_config(){ local cluster_name="$1" if [ -f "$g_conf_dir/$cluster_name" ]; then . $g_conf_dir/$cluster_name fi}load_config CLUSTER_A类 ini 配置格式第二种方法,基本上已经可以解决我们之前假设中提出的需求,简单而且实现方便,不足的是配置文件比较零散,管理上可能不是很方便。如果,你仍然倾向于一种类似 ini 格式的配置,可以试试下面这种方法。在这种场景下,每个集群应该是一个独立的 section,所以转换成 ini 格式,配置文件应该是这样的:[DEFAULT]g_version="0.1" ; 全局配置[CLUSTER_A]c_cluster_name="CLUSTER_A"c_cluster_type=1但是,我们前面提到过,原生的 shell 是很难去解析 ini 格式的配置文件的,所以上面的形式还得变化下,我们用 shell 中的函数来模拟 section:$ cat cluster.conf# global configg_version="0.1" # 全局配置function section_cluster_a(){ c_cluster_name="CLUSTER_A" c_cluster_type=1}function section_cluster_b(){ c_cluster_name="CLUSTER_B" c_cluster_type=1}配套的配置文件解析库:$ cat config.sh#!/bin/echo Warnning, this library must only be sourced!if [ ! -f "cluster.conf" ]; then exit 0 # or print error before exitfi. cluster.conffunction load_config(){ local cluster_name=$(echo "$1" | tr A-Z.- a-z__) # 特殊符号转换 section_$cluster_name &>/dev/null # 执行函数,将集群的配置赋值给对应的全局变量}function option(){ local opt_name="$1" if [[ "$opt_name" != c_* ]]; then # no "c_" prefix opt_name="c_$opt_name" fi echo "${!opt_name}" # indirect reference by variable name}
⑸ 如何脚本方式批量修改交换机配置文件
如果真的想去使用好交换机配置文件,那么就因该在对交换机配置文件进行任何更改之前,进行备份工作,这样会使得交换机配置文件变得更完美,也避免一些问题的发生。想要有效地管理交换机配置文件,就是要在适当的时候、适当的地点及时运行命令。通过使用命令,IOS软件能够将配置文件从一个组件或者设备移动到其他需要的组件与设备上去。这个命令主要有两参数,第一个参数表示配置文件的源位置,即需要被复制的文件。第二个参数表示目标位置,即要将这个配置文件复制到哪个地方。如使用 running-config tftp命令,就可以将运行配置文件复制到网络上的TFTP服务器来进行配置。不过在复制的时候,需要注意,如果目标位置有相同的配置文件,则这个命令会将目标文件中相同名字的配置文件覆盖掉。不过这句话说其来容易,做起来可是比较难。具体来说,需要做到一下几点。首先,当RAM中的运行交换机配置文件进行更改之后,需要将最新的运行配置文件进行备份。这主要是因为RAM内存中的内容断电后会丢失。如果网络管理员希望在交换机运行过程中对其进行的更改,在交换机下次启动的时候仍然有效。那么就需要将这个更改的内容保存在启动配置文件中。如果要实现这个目的,可以通过使用命令 running-config startup-config。这个命令的含义就是将运行配置文件保存到启动交换机配置文件中。如此的话,就会将交换机的最近更新的内容保存了下来。其次需要注意的是,在将RAM中的运行配置文件复制到NVRAM中的时候,需要先确保当前配置的准确性。也就是说,当我们修改了RAM中的运行配置文件相关参数之后,一般不会急着将相关的内容复制到NVRAM中。而是需要先对其进行测试与追踪,以判断新设置的参数是否符合我们预计的需求。也就是要判断新参数是否起作用了,是否满足用户的需要。只有确保新配置的参数运行正常的情况下,才能够将这个更新保存到启动配置文件中。否则的话,万一这个参数设置有错误,那么在下次启动的时候就可能会出现问题。为了安全起见,最好在将运行配置文件复制到NVRAM中的时候,能够先对NVRAM中内容进行备份。这主要是因为在使用 running-config startup-config命令的时候,命令会自动覆盖目标位置的启动配置文件。此时如果运行配置文件有错误,那么连神仙也回天无力了。为此笔者建立网络管理员,在管理配置文件的时候,要小心又小心,宁可多走一步。如在保存更新之前,先将原先的启动配置文件在tftp服务器上备份一份。如此的话,即使最近的配置有问题,而网络管理员又保存了的话,也可以利用备份后的配置文件来启动交换机。要完成这个功能,网络管理员可以运行命令 start tftp(将启动配置文件保存到TFTP服务器上)。如果启动配置文件有问题的话,还可以使用 tftp start命令,将备份的配置文件复制到NVRAM中,让交换机使用这个配置文件来进行初始化。第三,除了在NVRAM与tftp服务器之间可以相互复制之外,在RAM与tftp服务器之间也可以进行相互的复制。如网络管理员更新了交换机配置文件的某个参数,如设置了虚拟局域网。此时可能在短时间内很难判断当前的配置是否准确。可能需要运行一个星期甚至更长的时间才能够做出判断。此时最好不要轻易的去更新启动配置文件中的内容。笔者建议的方法是先将RAM中的运行配置文件复制到tftp服务器中,实现一个暂时的过渡。当确定配置没有问题后,再将这个运行配置文件复制、替换掉启动配置文件,以保存最新的可用更新。要实现这个需求的话,可以使用命令 run tftp(将运行配置文件复制到tftp服务器上)或者使用命令 tftp run(将tftp服务器上的配置文件复制到ram中去)这两个命令来实现。笔者最好强调一遍,怎么配置运行配置文件或者初始参数文件涉及到很多内容,具有很大的难度。但是如果管理配置文件,则这个命令是核心。而使用好这个命令的关键,就是在对交换机配置文件进行任何更改之前,进行备份。并在确保更新内容可用之后,及时将其保存到断电后不易丢失的NVRAM中或者网络的tftp服务器上。
⑹ Linux shell 写一个自动修改系统配置文件的文件
sed's/enabled/disabled/'/etc/selinux/config
需要用到sed 替换命令,enabled前面是哪个参数可以一并加上
⑺ linux中想在脚本中实现修改一个ip地址参数的配置文件,用sed命令如何实现
sed -i 's/\(IP=\)\S\S*/\1102.117.2.23/' filename 注:1)将不变的部分放入带反斜杠的一对括号 \( \) 中并在替换时用 \1 引用。2)\S用于匹配除单个空格符之外的所有字符。 awk -F"=" '{if($1=="IP")print("IP=102.117.2.23")}' filename > filename.new 2>/dev/null
⑻ 在编写shell脚本时,用什么命令来修改配置文件,求解。越详细越好,谢啦!
完全脚本修改不现实啊!一般的做法是提前定义好配置文件的内容,替换掉默认内的,容然后使用sed -i ‘s/1/2/g’修改里面的ip,打个比方说,nginx的配置文件,我所有的配置文件都一样,然后用sed改掉里面的域名和ip,和网页根目录。