1. 程式人生 > >sed -i修改連結檔案注意問題

sed -i修改連結檔案注意問題

因為sed -i /etc/sysconfig/selinux(selinux檔案是/etc/selinux/config的軟連結)配置檔案重啟SELINUX沒有關閉,才發現原來sed -i是不能直接修改軟連結檔案的,如下我修改之後的後果:

[[email protected] ~]# ll /etc/sysconfig/selinux 
lrwxrwxrwx. 1 root root 19 2月  20 20:34 /etc/sysconfig/selinux -> /etc/selinux/config
[[email protected] ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
[
[email protected]
~]# ll /etc/sysconfig/selinux -rw-r--r-- 1 root root 457 2月 20 22:50 /etc/sysconfig/selinux [[email protected] ~]#

我們發現連結檔案不再是連結檔案了,後來檢視sed man選項時發現如下選項說明

--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.

以上說明就不作過多解釋了,說的很明顯,看下面例項

[[email protected] ~]# echo "test" >>test
[[email protected] ~]# ln -s ~/test ~/test_soft
[[email protected] ~]# ln ~/test ~/test_hard
[[email protected] ~]# ll -i test*
271653 -rw-r--r-- 2 root root  5 2月  20 23:04 test
271653 -rw-r--r-- 2 root root  5 2月  20 23:04 test_hard
271655 lrwxrwxrwx 1 root root 10 2月  20 23:04 test_soft -> /root/test
[[email protected] ~]# sed -i "s/test/hard/g" test_hard 
[[email protected] ~]# sed -i "s/test/soft/g" test_soft 
[[email protected] ~]# ll -i test*
271653 -rw-r--r-- 1 root root 5 2月  20 23:04 test
271656 -rw-r--r-- 1 root root 5 2月  20 23:05 test_hard
271657 -rw-r--r-- 1 root root 5 2月  20 23:06 test_soft
[[email protected] ~]# 
很明顯如man中所說-i選項對軟連結和硬連結都會使受到破壞
[[email protected] ~]# rm -rf test*
[[email protected] ~]# echo "test" >>test
[[email protected] ~]# ln -s ~/test ~/test_soft
[[email protected] ~]# ln ~/test ~/test_hard
[[email protected] ~]# ll -i test*
271653 -rw-r--r-- 2 root root  5 2月  20 23:08 test
271653 -rw-r--r-- 2 root root  5 2月  20 23:08 test_hard
271655 lrwxrwxrwx 1 root root 10 2月  20 23:08 test_soft -> /root/test
[[email protected] ~]# sed -i -c  "s/test/soft/g" test_soft 
[[email protected] ~]# sed -i -c  "s/test/soft/g" test_hard 
[[email protected] ~]# ll -i test*
271653 -rw-r--r-- 2 root root  5 2月  20 23:11 test
271653 -rw-r--r-- 2 root root  5 2月  20 23:11 test_hard
271655 lrwxrwxrwx 1 root root 10 2月  20 23:08 test_soft -> /root/test
--follow-symlinks選項只對軟連結有效,硬連結還是會被破壞,建議使用-c選項,這裡就不舉例了

後來朋友在RHEL5上執行相同的操作居然沒有出現類似的現象,執行結果如下:

$ echo "test" >> test
$ ln -s ~/test ~/test1
$ ll ~/test1
lrwxrwxrwx 1 sxkj sxkj 15 02-21 13:26 /home/sxkj/test1 -> /home/sxkj/test
$ sed -i "s/test/test1/g" ~/test1
$ ll ~/test1
lrwxrwxrwx 1 sxkj sxkj 15 02-21 13:26 /home/sxkj/test1 -> /home/sxkj/test
經查是sed的版本不同造成的影響,RHEL5系列的還是使用老版本的sed,沒有--follow-symlinks類似的選項,筆者之前實驗的版本是RHEL6.3,所以出現之前的一系列問題了

相關推薦

sed -i修改連結檔案注意問題

因為sed -i /etc/sysconfig/selinux(selinux檔案是/etc/selinux/config的軟連結)配置檔案重啟SELINUX沒有關閉,才發現原來sed -i是不能直接修改軟連結檔案的,如下我修改之後的後果: [[email pr

關於sed -i 修改selinux的問題

原文連結:http://blog.51cto.com/nightmoon/1383651 問題描述: 近日,在測試優化指令碼的時候遇到一個問題。指令碼命令如下 # close selinux setenforce 0 && sed -i 's/SELINUX=en

shell檔案編輯工具,sed -i與ed的區別

著無聊,繼續答題問題:GNU sed 提供了-i選項,為什麼有人說sed -i 並不象 ed 一樣真正的編輯檔案?(提示:觀察檔案改變前後的inode)注意審題的話,這題是二個檔案編輯器的比較,也有可能是提示的誤導,這題大都知道答-i 是用臨時檔案的機制,但這道題如果不通過說

使用sed修改配置檔案中配置項的值

大致思路如下:     sed修改某一個檔案的配置項的值         1.找到行號 ,比如得到的行號是9                    sed -n '/aaa/=' config.ini         2.刪除這一行,再新增你想加的內容,          

使用 sed 修改配置檔案

最近寫一些Debian包安裝指令碼。由於希望安裝時能提示使用者輸入一些初始配置引數,用sed倒來倒去,終於弄出來。 sed功能強大,但引數繁多,一天不用就忘。還是找個地方記下來,一來給大家分享,二來這裡比記在本子上強。 一個典型的例子是,在配置檔案中修改一個子網IP。在這

shell指令碼採用sed批量修改檔案

轉載自:http://www.furion.info/81.html 週末看《sed 與 awk 第二版》的時候,看到書上有個很好的shell指令碼-runsed,用來批量修改檔案,當然是通過呼叫sed來修改。 原指令碼程式碼如下: # !/bin/bash f

sed 批量修改Makefile文件

sed 批量修改makefile文件Makefile文件太多 [[email protected]/* */ DarwinStreamingSrvr6.0.3-Source]# find -name Makefile.POSIX ./APIModules/QTSSDemoAuthorizatio

[轉][JS]修改連結中的引數

轉自:https://blog.csdn.net/weixin_40845192/article/details/81561644 /** * url地址修改 * @param url 待修改url * @param arg 修改的引數名 * @param arg_val 修改的具體值 *

mybatis寫mapper檔案注意事項

xml中某些特殊符號作為內容資訊時需要做轉義,否則會對檔案的合法性和使用造成影響 Html程式碼   &lt; <    &gt;&n

修改host檔案

Hosts是一個沒有副檔名的系統檔案,其作用就是將一些常用的網址域名與其對應的IP地址建立一個關聯“資料庫”,當用戶在瀏覽器中輸入一個需要登入的網址時,系統會首先自動從Hosts檔案中尋找對應的IP地址,一旦找到,系統會立即開啟對應網頁,如果沒有找到,則系統再會將網址提交DNS域名解析伺服器進行

批量修改文字檔案的編碼格式

1.使用EditPlus開啟要修改編碼格式的檔案所屬目錄 2.按shift,選中左下角列表中需要轉換編碼格式的文字,右擊選擇“開啟”,開啟的效果如下: 3.依次選擇選單欄中的“文件”->“文字編碼”->“批量更改文字編碼”,按shift選擇要更改編碼格式的文字,然後單擊“

java下載檔案注意

前臺: 不建議使用ajax,可以使用window.location.href   後臺: 三個引數--> response path filename--filename如果要防止亂碼,可以用String str = URLEncoder.encode("中國","utf-8")

批量修改xml檔案節點資訊

今天來說說xml那些事兒.如何批量修改指定資料夾下的xml檔案的指定屬性.分三步走,首先,我們先看看如何讀寫單個 的xml檔案;第二步,來看看如何遍歷指定資料夾下的所有檔案,獲取到所有檔案的檔名;第三步,我們來看看一二之間 該如何銜接.好,lets d

linux ---遠端登陸設定,密碼修改檔案傳輸,打包壓縮

<1>.ssh的安全設定(配置) vim /etc/ssh/sshd_config ---> sshd配置檔案的設定 PasswordAuthentication yes ---> 是否允許使用者通過密碼做sshd認證 PermitRootLogi

PDF編輯工具如何修改PDF檔案內容

工作中,使用PDF檔案居多,PDF檔案的修改需要使用到PDF編輯器,那麼,PDF編輯工具如何修改PDF檔案內容呢,不會的以及想要了解的小夥伴可以跟著小編一起看看哦。 開啟編輯器,比如迅捷PDF編輯器,在編輯器中開啟需要修改的PDF檔案。 檔案開啟後,在編輯器最上面的選單

ln 軟體連結目錄時,當連結檔案已經存在時,結果非預期

建立軟體連結的語法如下: link -s  target  linkName   例項: ln -s ssh_connect_home link1   但是當我們想把此連結指向第二個檔案時,結果卻不如意料那般: &nbs

python修改配置檔案某個欄位

思路:要修改的檔案filepath 將修改後的檔案寫入f2,刪除filepath,將f2名字改為filepath,從而達到修改 imort os tag=“name=” midifyInfo=“name=lilei” f1=filepath f2=application.applicatio

linux---修改.bashrc檔案導致終端命令不能使用

其實解決問題的方法很簡單:把你在bashrc檔案中寫錯的東西註釋掉或者改寫正確即可。 可是此時圖形介面登陸不了,vim用不了。怎麼改? 解決方案:      步驟1:輸入命令export PATH=/bin:/usr/local/sbin:

python修改txt檔案中的某一項

在做task中,需要將TXT文字中的某一項註釋修改,但是python對txt文字只有寫入和讀取兩種操作。 我採用的方法是: 1.讀取txt檔案,將每一行資料,加入新建立的list中。 2.在list中修改資料 3.再新建一個txt檔案,按行存入資料。記得新增 ‘/n’ 分行 例項

idea使用jetty啟動專案無法修改JS檔案

使用mvn jetty:run web開發時,經常會遇到無法修改js檔案問題,一修改就會報錯: 詳細介紹參考:參考文件 jetty 預設開啟了 useFileMappedBuffer,在 jetty 執行期間,頁面所使用的靜態檔案(如 css 檔案等)不允許修改。如果你嘗試去修改它 們,儲存