网友通过本文主要向大家介绍了sed替换文件内容,sed 替换,linux sed替换,sed 替换字符串,shell sed替换等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
sed 替换、修改链接文件注意问题
- sed 替换、修改链接文件注意问题
- #系统与版本
- [root@localhost ~]# cat /etc/redhat-release
- CentOS release 6.8 (Final)
- [root@localhost ~]# sed --version
- GNU sed version 4.2.1
- Copyright (C) 2009 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
- to the extent permitted by law.
- 因为sed -i /etc/sysconfig/selinux(selinux文件是/etc/selinux/config的软链接)配置文件重启SELINUX没有关闭,才发现原来sed -i是不能直接修改软链接文件的,如下我修改之后的后果:
- [root@localhost ~]# ll /etc/sysconfig/selinux
- lrwxrwxrwx. 1 root root 17 Dec 20 11:31 /etc/sysconfig/selinux -> ../selinux/config
- [root@localhost ~]# ll /etc/selinux/config
- -rw-r--r--. 1 root root 458 Dec 20 11:31 /etc/selinux/config
- [root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
- [root@localhost ~]# ll /etc/sysconfig/selinux
- -rw-r--r--. 1 root root 457 Dec 22 19:18 /etc/sysconfig/selinux
- 我们发现链接文件不再是链接文件了,后来查看sed --help选项时发现如下选项说明
- --follow-symlinks
- follow symlinks when processing in place; hard links will still be broken.
- -i[SUFFIX], --in-place[=SUFFIX]
- edit files in place (makes backup if extension supplied). The default operation mode is to
- break symbolic and hard links. This can be changed with --follow-symlinks and --copy.
- -c, --copy
- use copy instead of rename when shuffling files in -i mode. While this will avoid breaking
- links (symbolic or hard), the resulting editing operation is not atomic. This is rarely the
- desired mode; --follow-symlinks is usually enough, and it is both faster and more secure.
-
-
- #测试
- [root@localhost ~]# echo "test" >>test
- [root@localhost ~]# ln -s test test-zsq
- [root@localhost ~]# ll -i test-zsq #链接文件
- 260727 lrwxrwxrwx. 1 root root 4 Dec 22 19:21 test-zsq -> test
- [root@localhost ~]# cat test-zsq
- test
- #如果直接-i删除,链接文件将失效
- [root@localhost ~]# sed -i "s/test//g" test-zsq
- [root@localhost ~]# ll -i test-zsq
- 260726 -rw-r--r--. 1 root root 1 Dec 22 19:29 test-zsq
- #重新添加再测试,加上-c选项
- [root@localhost ~]# rm -rf test-zsq
- [root@localhost ~]# ln -s test test-zsq
- [root@localhost ~]# ll -i test-zsq
- 260726 lrwxrwxrwx. 1 root root 4 Dec 22 19:33 test-zsq -> test
- [root@localhost ~]# echo "test" >>test
- [root@localhost ~]# sed -i -c '/test/d' test-zsq
- [root@localhost ~]# ll -i test-zsq
- 260726 lrwxrwxrwx. 1 root root 4 Dec 22 19:33 test-zsq -> test
- #--follow-symlinks选项
- [root@localhost ~]# rm -rf test-zsq
- [root@localhost ~]# ln -s test test-zsq
- [root@localhost ~]# echo "test" >> test
- [root@localhost ~]# cat test
- test
- [root@localhost ~]# sed -i --follow-symlinks '/test/d' test
- [root@localhost ~]# ls -l test-zsq
- lrwxrwxrwx. 1 root root 4 Dec 22 19:50 test-zsq -> test
- [root@localhost ~]# cat test
- --follow-symlinks比-c选项更快更安全
- -c, --copy
- use copy instead of rename when shuffling files in -i mode.
- While this will avoid breaking links (symbolic or hard), the
- resulting editing operation is not atomic. This is rarely
- the desired mode; --follow-symlinks is usually enough, and
- it is both faster and more secure.
- 链接文件/etc/rc.local也是/etc/rc.d/rc.local的软连接,用sed添加删除启动服务要特别注意
- 有可能配置的链接文件失效而导致服务起不来
- 在centos 5.x系列中运行相同的操作没有出现类似的现象
- 经查是sed的版本不同造成的影响,centos 5系列的还是使用老版本的sed,没有--follow-symlinks类似的选项
- [root@DNS ~]# sed --version
- GNU sed version 4.1.5
- Copyright (C) 2003 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
- to the extent permitted by law.
- [root@DNS ~]# sed --help
- Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
- -n, --quiet, --silent
- suppress automatic printing of pattern space
- -e script, --expression=script
- add the script to the commands to be executed
- -f script-file, --file=script-file
- add the contents of script-file to the commands to be executed
- -i[SUFFIX], --in-place[=SUFFIX]
- edit files in place (makes backup if extension supplied)
- -c, --copy
- use copy instead of rename when shuffling files in -i mode
- (avoids change of input file ownership)
- -l N, --line-length=N
- specify the desired line-wrap length for the `l' command
- --posix
- disable all GNU extensions.
- -r, --regexp-extended
- use extended regular expressions in the script.
- -s, --separate
- consider files as separate rather than as a single continuous
- long stream.
- -u, --unbuffered
- load minimal amounts of data from the input files and flush
- the output buffers more often
- --help display this help and exit
- --version output version information and exit