歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux——文件操作

Making A File

創建文件的方式有好幾種,其中touch就是一種。touch命令將會創建一個空文件,比如touch file.txt會在當前目錄下創建一個空的file文本文件。之後我們可以對這個文件進行編輯。
[code]~$ touch test.txt

Standard Streams

我們可以通過echo命令來打印文本信息,比如輸入echo “Dataquest is awesome”,將會打印Dataquest is awesome。這個文本將會打印到一個名為標准輸出(standard output或者stdout)的流中。從標准輸入(standard input (stdin))流中獲取輸入信息,當程序運行出錯時,將會把錯誤信息寫入到標准差流(standard error (stderr))中。通常stdout和stderr會被顯示在顯示屏中,而標准輸入將會從鍵盤輸入。在這個例子中,echo是從stdin(鍵盤)中獲取一個字符串,然後將其打印到stdout中,默認情況下,我們會看到這個stdout流,因為它被顯示在顯示屏上。整個交互的過程如下:

使用stdout,stderr,stdin這三個標准流的原因是這可以使得接口抽象化。一個程序不用關心它是從文件,鍵盤,或者其他什麼地方獲取輸入,也不用關心它的輸出將會被顯示,或者被存儲在文件,或者其他什麼地方。

[code]~$ echo "All bears should juggle"                                       
All bears should juggle

Redirection

前面提到程序不用關心標准流去向何處,但是我們可以重定向(redirect )標准流以將它們連接到不同的來源。比如上面那個輸出流,我們可以將其連接到一個文件,他就不會打印到屏幕上,而會存儲在一個文件中。

我們利用 > 這個符號進行重定向,比如echo “Dataquest is awesome” > dataquest.txt這條語句首先將Dataquest is awesome寫到stdout中,然後重定向stdout到dataquest.txt中,最後的結果就是Dataquest is awesome這條語句將會被寫入到dataquest.txt文件中。

[code]~$ echo "All bears should juggle" > test.txt
上面這條語句將All bears should juggle寫入到我們前面創建的空文件test.txt中。

Editing A File

當然我們也可以直接在終端中編輯一個文件,而不用使用重定向。最簡單的編輯命令是nano。nano test.txt將會打開test.txt進行編輯。輸入ctrl+x將會停止編輯,當你停止時,系統會提示你是否保存,如果保存就輸入Y,按entet就可以保存你的修改了。
[code]~$ nano test.txt
# 然後就是在文件中做修改

File Permissions

在Unix中,每個文件和文件夾都有相關的權限。這些權限有三個范圍:owner – the user who created the file or folder.

group – users in the owner’s group. Users on unix systems can be placed into groups.everyone – all other users on the system who aren’t the user or in

the user’s group.

每個范圍可以有三種權限:

read(r) – The ability to see what’s in a file. If defined on a folder, the ability to see what files are in a folder.write(w) – The ability to modify a file. If a folder, the ability to delete, modify, and rename files in the folder.

execute(e) – The ability to run a file. Some files are executable, and need this permission to be run.你可以通過ls -l命令來查看文件和文件夾的權限。比如:

[code] ~$ ls -l                                                          
total 4                                                           
-rw-r--r-- 1 dq dq 1 May  4 08:16 test.txt  
'''
# 這幾個rw的對應關系如下:
-         rw-   r--    r--
Ignore    User  Group  Everyone
'''

Octal Notation

對於權限可以用八進制表示法(Octal Notation):

— ——no permissions, corresponds to 0.

–x —— execute only permission, corresponds to 1.

-w- —— write only permissions, corresponds to 2.

-wx —— write and execute permissions, corresponds to 3.

r– —— read only permissions, corresponds to 4.

r-x —— read and execute permissions, corresponds to 5.

rw- —— read and write permissions, corresponds to 6.

rwx —— grants read, write, and execute permissions, corresponds to 7.

其實就是x=1,w=2,r=4通過stat命令可以將-rw-r–r–轉為0644

[code]~$ stat test.txt                                                  
  File: ‘test.txt’                                                
  Size: 1               Blocks: 8          IO Block: 4096   regular file                                                            
Device: 100003h/1048579d        Inode: 2929        Links: 1       
Access: (0644/-rw-r--r--)  Uid: ( 1000/      dq)   Gid: ( 1000/dq)                                                            
Access: 2016-05-04 08:16:47.656025719 +0000                       
Modify: 2016-05-04 08:16:45.256025719 +0000                       
Change: 2016-05-04 08:16:45.256025719 +0000                       
 Birth: -
上面結果中從Acess中可以看到0644

Modifying File Permissions

現在知道上面是文件權限了,繼續學習如何修改文件的權限。我們可以使用chmod命令來實現這個功能。比如chmod 0664 test.txt意味著給owner用戶讀和寫的權限。
[code]~$ chmod 0760 test.txt

上面這段代碼給予owner讀寫執行的權限,給予group讀寫的權限,不給everyone任何權限。

Moving Files

通過mv這個命令可以將文件移動到其他目錄下。比如輸入mv test.txt /dq將會把test.txt移動到/dq目錄下。這樣做的前提是test.txt在當前目錄下,否則要使用絕對路徑。
[code]~$ mkdir test                                                     
~$ mv test.txt test

上面這段代碼在用戶主目錄下創建了一個test子目錄,而test.txt是在用戶主目錄下的,因此可以直接mv過去。

Copying Files

除了移動文件,我們還需要復制文件,我們利用cp命令可以復制文件。比如cp test.txt test2.txt的意思是將test.txt復制了一個副本名為test2.txt。
[code]~$ cd test                                                        
~/test$ cp test.txt test2.txt

File Extensions

Windows系統中不同的文件用擴展名區別,而Linux中不同的文件用媒體類型(media types)來區別,也叫MIME types。比如說MIME types是application/pdf表示該文件是pdf,MIME type 是image/png表示該文件是png圖片。MIME type 字符串的前一部分(application, image)是類型,後一部分(pdf, png)是子類型。MIME types存儲在文件的metadata中,是作為文件的一部分存儲的。因此linux系統才可以以合適的方式打開文件,當然你可以重命名文件或者移除文件的擴展名,並且你會經常看到沒有擴展名的文件,比如test.

[code]~$ ls                                                             
test                                                              
~$ cd test                                                        
~/test$ ls                                                        
test2.txt  test.txt                                               
~/test$ cd                                                        
~$ mv test/test.txt test/test_no_extension                        
~$ cd test                                                        
~/test$ ls                                                        
test2.txt  test_no_extension
上面這段代碼將test.txt文件移動到另一個文件中去,並且這個新的文件沒有擴展名。與前面mv不同的是這次的第二個參數是文件而前面是文件夾,在這裡移動後,源文件沒有了,新文件的內容和源文件相同,名稱是第二個參數的名稱。這也可以表明在Linux中文件是可以沒有擴展名的。

Deleting A File

在前面提到可以用rmdir刪除一個目錄,此處用rm可以刪除一個文件。
[code]~$ rm /home/dq/test/test2.txt

The Root User

Linux系統有一個特殊的用戶叫做root用戶,你可以用sudo來執行root命令,將sudo添加到你要執行的命令前面即可。比如sudo rm test.txt這個命令將會切換為root用戶然後進行刪除。通常在當前用戶沒有刪除這個文件的權限的時候切換到root用戶進行這個操作,因為root用戶默認對所有的文件都有權限。當然你切換到root用戶是需要密碼的,不然設置root用戶也沒有意義。

[code]~$ sudo mkdir tt                                                  
sudo: unable to change to root gid: Operation not permitted
上面這段代碼顯示當前linux不允許執行sudo指令

Copyright © Linux教程網 All Rights Reserved