導航:首頁 > 文件類型 > linux文件無法保存

linux文件無法保存

發布時間:2025-02-17 16:41:46

1. linux不保存退出編輯命令linux不保存

用紅帽Linux5的VI編輯器,退出後。保存不了?

VI編輯文檔無法保存大多由於許可權不夠導致。可以用下面命令強制保存退出::wq!強制保存文件,並退出vi其他保存退出命令如下::w保存文件但不退出vi:wfile將修改另外保存到file中,不退出vi:w!強制保存,不推出vi:wq保存文件並退出viq:不保存文件,退出vi:q!不保存文件,強制退出vi:e!放棄所有修改,從上次保存文件開始再編輯

linux系統怎麼保存文件?

答,linux系統保存文件的/方法如下

步驟一首先,連接相應linux主機,進入到linux命令行狀態下,等待輸入shell指令。推薦:《Linux教程

步驟2.

其次,用vi打開編輯到需要保存時,按ESC,輸入::w。

步驟3.

最後,按下回車鍵執行vi保存命令,此時會看到提示說已寫入文件成功。

linux終端模式怎麼保存?

Linux終端模式保存文件的方法

Linux使用vim進行編輯文檔

保存命令

1、:w:把編輯好的數據寫入到硬碟文件中。

2、:w!:當文件屬性為「只讀」時強制寫入該文件。具體能不能寫入還要看該文件的文件許可權。

3、:wq:保存後離開。

4、:wq!:強制保存後離開。

5、:w:將編輯的數據保存成以filename命名的文件,相當於另存為文件。

kalilinux的liveUSB怎麼才能保存配置?

你用的LiveUSB模式。這個模式是不能修改系統的。所以,就沒有辦法。或者,你考慮寫一個批處理腳本,放到持久化的空間中。每次啟動後,都運行一遍,這樣配置快速一點。有興趣,可以看看我們店裡的真正便攜U盤,可以保存各種設置,可以更新系統。

linux,如何保存只讀文件?

答,解決方法如下

需要准備的材料分別是:電腦、linux連接工具

1、首先連接上linux主機,進入等待輸入指令的linux命令行狀態。

2、通過cd指令進入到要設置文件的所在目錄,再通過ll指令獲取當前test文件的許可權狀態。

3、輸入:chmod444test.txt,再按回車。

4、最後輸入ll指令查看到test.txt的文件許可權已經變為了只讀。

2. 急:初學Linux遇到問題,在vim寫入東西不能保存怎麼回事如下圖。在線等

你的vim設置了swap文件的目錄為 /var/tmp,所以所有vim進程打開文件時都會把交換文件放到 /var/tmp下,你的專有一個vim進程已經打屬開了 /root/vim1.txt,在/vr/tmp下生成了 vim1.txt.swp交換文件,而你此時再次打開 其他目錄下的 同名文件(vim1.txt),就會出這個提示。

你可以看一下你當前的設置
:set directory?
應該是類似於
/var/tmp,xxx,xxx
的。最好改成
:set directory=.,/var/tmp,xxx,xxx
用文件當前所在目錄來存放交換文件。

把 set directory=.,/var/tmp,xxx,xxx (後面的xxx,xxx就是你在vim用 :set directory? 看到的東西) 加入到
~/.vimrc 里,就不用每次都要敲:set directory=.,/var/tmp,xxx,xxx了

3. linux下修改hosts文件不能保存,在root用戶下,用sudo都一樣的報錯,就大神解決!!!

你的/etc/hosts的屬性為只讀,不能寫入。
兩種方法:
1>
增加該文件寫的許可權,重新編輯保存
2>
不更改該文件的許可權,用vi編輯後,在你保存退出時,如使用w,使用x!即可

4. linux vi不能保存文件

Linux系統vi編輯只讀文檔無法保存的解決辦法,使用普通用戶編輯nginx.conf 等配置文件:

#查看是否保存成功:
$grepsudonginx.conf
#test:w!sudotee%

5. Linux環境下VIVIM編輯文件時無許可權保存的解決方法普通用戶

在Linux環境下,如果直接使用VI/VIM命令編輯沒有修改許可權的文件時,保存的時候就會提示用戶無法進行保存操作,一般的解決方法只能是關閉文件重新以sudo許可權打開該文件編輯後再保存(前提是用戶具有sudo許可權)。其實,在VI/VIM模式下通過一些簡單的命令,就能在不關閉當前文件的情況下達到保存文件的目的。

方法一

關於%! sudo tee % > /dev/null這條命令的說明如下

此命令是把當前文件(即%)作為stdin傳給sudo tee命令來執行。

方法二

在Linux上工作的朋友很可能遇到過這樣一種情況,當你用Vim編輯完一個文件時,運行:wq保存退出,突然蹦出一個錯誤:

E45: 'readonly' option is set (add ! to override)

這表明文件是只讀的,按照提示,加上!強制保存::w!,結果又一個錯誤出現:

"readonly-file-name" E212: Can't open file for writing

文件明明存在,為何提示無法打開?這錯誤又代表什麼呢?查看文檔:help E212:

For some reason the file you are writing to cannot be created or overwritten.
The reason could be that you do not have permission to write in the directory
or the file name is not valid.

原來是可能沒有許可權造成的。此時你才想起,這個文件需要root許可權才能編輯,而當前登陸的只是普通用戶,在編輯之前你忘了使用sudo來啟動Vim,所以才保存失敗。於是為了防止修改丟失,你只好先把它保存為另外一個臨時文件temp-file-name,然後退出Vim,再運行sudo mv temp-file-name readonly-file-name覆蓋原文件。

但這樣操作過於繁瑣。而且如果只是想暫存此文件,還需要接著修改,則希望保留Vim的工作狀態,比如編輯歷史,buffer狀態等等,該怎麼辦?能不能在不退出Vim的情況下獲得root許可權來保存這個文件?

解決方案

答案是可以,執行這樣一條命令即可:

:w !sudo tee %

接下來我們來分析這個命令為什麼可以工作。首先查看文檔:help :w,向下滾動一點可以看到:

*:w_c* *:write_c*:[range]w[rite] [++opt] !{cmd}Execute {cmd} with [range] lines as standard input(note the space in front of the '!'). {cmd} isexecuted like with ":!{cmd}", any '!' is replaced withthe previous command |:!|.The default [range] for the ":w" command is the whole buffer (1,$)

把這個使用方法對應前面的命令,如下所示:

: w !sudo tee %| | | |:[range]w[rite] [++opt] !{cmd}

我們並未指定range,參見幫助文檔最下面一行,當range未指定時,默認情況下是整個文件。此外,這里也沒有指定opt。

Vim中執行外部命令

接下來是一個嘆號!,它表示其後面部分是外部命令,即sudo tee %。文檔中說的很清楚,這和直接執行:!{cmd}是一樣的效果。後者的作用是打開shell執行一個命令,比如,運行:!ls,會顯示當前工作目錄下的所有文件,這非常有用,任何可以在shell中執行的命令都可以在不退出Vim的情況下運行,並且可以將結果讀入到Vim中來。試想,如果你要在Vim中插入當前工作路徑或者當前工作路徑下的所有文件名,你可以運行:

:r !pwd或:r !ls

此時所有的內容便被讀入至Vim,而不需要退出Vim,執行命令,然後拷貝粘貼至Vim中。有了它,Vim可以自由的操作shell而無需退出。

命令的另一種表示形式

再看前面的文檔:

Execute {cmd} with [range] lines as standard input

所以實際上這個:w並未真的保存當前文件,就像執行:w new-file-name時,它將當前文件的內容保存到另外一個new-file-name的文件中,在這里它相當於一個另存為,而不是保存。它將當前文檔的內容寫到後面cmd的標准輸入中,再來執行cmd,所以整個命令可以轉換為一個具有相同功能的普通shell命令:

$ cat readonly-file-name | sudo tee %

這樣看起來」正常」些了。其中sudo很好理解,意為切換至root執行後面的命令,tee和%是什麼呢?

%的意義

我們先來看%,執行:help cmdline-special可以看到:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning. These can also be used in the expression
function expand() |expand()|.
% Is replaced with the current file name. *:_%* *c_%*

在執行外部命令時,%會擴展成當前文件名,所以上述的cmd也就成了sudo tee readonly-file-name。此時整個命令即:

$ cat readonly-file-name | sudo tee readonly-file-name

注意:在另外一個地方我們也經常用到%,沒錯,替換。但是那裡%的作用不一樣,執行:help :%查看文檔:

Line numbers may be specified with: *:range* *E14* *{address}*
{number} an absolute line number
...
% equal to 1,$ (the entire file) *:%*

在替換中,%的意義是代表整個文件,而不是文件名。所以對於命令:%s/old/new/g,它表示的是替換整篇文檔中的old為new,而不是把文件名中的old換成new。

tee的作用

現在只剩一個難點: tee。它究竟有何用?維基網路上對其有一個詳細的解釋,你也可以查看man page。下面這幅圖很形象的展示了tee是如何工作的:

ls -l的輸出經過管道傳給了tee,後者做了兩件事,首先拷貝一份數據到文件file.txt,同時再拷貝一份到其標准輸出。數據再次經過管道傳給less的標准輸入,所以它在不影響原有管道的基礎上對數據作了一份拷貝並保存到文件中。看上圖中間部分,它很像大寫的字母T,給數據流動增加了一個分支,tee的名字也由此而來。

現在上面的命令就容易理解了,tee將其標准輸入中的內容寫到了readonly-file-name中,從而達到了更新只讀文件的目的。當然這里其實還有另外一半數據:tee的標准輸出,但因為後面沒有跟其它的命令,所以這份輸出相當於被拋棄。當然也可以在後面補上>/dev/null,以顯式的丟棄標准輸出,但是這對整個操作沒有影響,而且會增加輸入的字元數,因此只需上述命令即可。

命令執行之後

運行完上述命令後,會出現下面的提示:

W12: Warning: File "readonly-file-name" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:

Vim提示文件更新,詢問是確認還是重新載入文件。建議直接輸入O,因為這樣可以保留Vim的工作狀態,比如編輯歷史,buffer等,撤消等操作仍然可以繼續。而如果選擇L,文件會以全新的文件打開,所有的工作狀態便丟失了,此時無法執行撤消,buffer中的內容也被清空。

更簡單的方案:映射

上述方式非常完美的解決了文章開始提出的問題,但畢竟命令還是有些長,為了避免每次輸入一長串的命令,可以將它映射為一個簡單的命令加到.vimrc中:

" Allow saving of files as sudo when I forgot to start vim using sudo.

cmap w!! w !sudo tee > /dev/null %

這樣,簡單的運行:w!!即可。命令後半部分> /dev/null在前面已經解釋過,作用為顯式的丟掉標准輸出的內容。

另一種思路

至此,一個比較完美但很tricky的方案已經完成。你可能會問,為什麼不用下面這樣更常見的命令呢?這不是更容易理解,更簡單一些么?

:w !sudo cat > %

重定向的問題

我們來分析一遍,像前面一樣,它可以被轉換為相同功能的shell命令:

$ cat readonly-file-name | sudo cat > %

這條命令看起來一點問題沒有,可一旦運行,又會出現另外一個錯誤:

/bin/sh: readonly-file-name: Permission denied

shell returned 1

這是怎麼回事?不是明明加了sudo么,為什麼還提示說沒有許可權?稍安勿躁,原因在於重定向,它是由shell執行的,在一切命令開始之前,shell便會執行重定向操作,所以重定向並未受sudo影響,而當前的shell本身也是以普通用戶身份啟動,也沒有許可權寫此文件,因此便有了上面的錯誤。

重定向方案

這里介紹了幾種解決重定向無許可權錯誤的方法,當然除了tee方案以外,還有一種比較方便的方案:以sudo打開一個shell,然後在該具有root許可權的shell中執行含重定向的命令,如:

:w !sudo sh -c 'cat > %'

可是這樣執行時,由於單引號的存在,所以在Vim中%並不會展開,它被原封不動的傳給了shell,而在shell中,一個單獨的%相當於nil,所以文件被重定向到了nil,所有內容丟失,保存文件失敗。

既然是由於%沒有展開導致的錯誤,那麼試著將單引號'換成雙引號"再試一次:

:w !sudo sh -c "cat > %"

成功!這是因為在將命令傳到shell去之前,%已經被擴展為當前的文件名。有關單引號和雙引號的區別可以參考這里,簡單的說就是單引號會將其內部的內容原封不動的傳給命令,但是雙引號會展開一些內容,比如變數,轉義字元等。

當然,也可以像前面一樣將它映射為一個簡單的命令並添加到.vimrc中:

" Allow saving of files as sudo when I forgot to start vim using sudo.

cmap w!! w !sudo sh -c "cat > %"

注意:這里不再需要把輸出重定向到/dev/null中。

寫在結尾

至此,藉助Vim強大的靈活性,實現了兩種方案,可以在以普通用戶啟動的Vim中保存需root許可權的文件。兩者的原理類似,都是利用了Vim可以執行外部命令這一特性,區別在於使用不同的shell命令。如果你還有其它的方案,歡迎給我留言。

(全文完)

feihu

2014.07.30 於 Shenzhen


6. Kail Linux系統,U盤版,配置文件保存不了,求解決方法。

保存不了是因為沒有許可權進行修改文件。
方法一:使用root用戶修改配置文件
方法二:使用chmod 777 FILENAME命令修改許可權(7:擁有所有許可權)

7. Linux中無法保存profile文件

樓主只給了普通來用戶修改這個源文件的許可權。
可是一般的應用程序在修改文件時通常會創建一個備份文件。
而/etc/目錄普通用戶是無寫入權的。
所以出現了上面的提示。
解決方法:1,用有root許可權的用戶修改。

2,(建議僅用於測試)將/etc目錄的寫許可權付給普通用戶。

閱讀全文

與linux文件無法保存相關的資料

熱點內容
飛常準的數據來自哪裡 瀏覽:844
ug100如何編程畫線 瀏覽:870
文件夾999找不到 瀏覽:145
win1014393最新版本號 瀏覽:100
java基本類型大小 瀏覽:516
word2007不能插入頁碼 瀏覽:968
vb讀取文件並判斷 瀏覽:6
php圖片和程序分離 瀏覽:412
安卓面試非計算機專業 瀏覽:228
u盤的光碟文件怎麼驅動 瀏覽:34
如何鎖定c盤不下文件 瀏覽:359
浙江推廣網站建設怎麼做 瀏覽:478
word文件只有10頁怎麼增加 瀏覽:921
itunes下載的系統在哪個文件夾 瀏覽:605
個性化linux全名要求 瀏覽:40
數據表格制圖小紅點如何去掉 瀏覽:244
查詢iphone版本信息失敗怎麼辦 瀏覽:978
電腦版微信下載的文件保存在哪裡 瀏覽:367
linuxsocket轉發 瀏覽:32
迷你兔數據恢復軟體可免費恢復多少 瀏覽:139

友情鏈接