Linux基礎介紹【第四篇】

来源:http://www.cnblogs.com/yinshoucheng-golden/archive/2016/12/13/6172001.html
-Advertisement-
Play Games

Linux文件和目錄的屬性及許可權 命令: [root@oldboy ~]# ls -lhi total 40K 24973 -rw-------. 1 root root 1.1K Dec 10 16:02 anaconda-ks.cfg 15 -rw-r--r--. 1 root root 22K... ...


Linux文件和目錄的屬性及許可權

命令:

  1. [root@oldboy ~]# ls -lhi
  2. total 40K
  3. 24973 -rw-------. 1 root root 1.1K Dec 10 16:02 anaconda-ks.cfg
  4.    15 -rw-r--r--. 1 root root 22K Dec 10 16:02 install.log
  5.    17 -rw-r--r--. 1 root root 5.8K Dec 10 16:00 install.log.syslog

第一列:inode(index node)索引節點編號,文件或目錄在磁碟里的唯一標識,linux讀取文件首先要讀取到這個文件的索引節點(類似書的目錄)。

第二列:

第1個字元:文件類型,-普通文件,d目錄。(windows擴展名.jpg,.avi)

第2—10個字元rw-r—r--:文件許可權(r(read)讀取許可權、w(write)寫許可權,x(execute)執行許可權,-無許可權)

第11個字元.:SELINUX相關。

第三列:文件硬鏈接數。文件硬鏈接是文件的又一個入口。硬鏈接inode一樣。

第四列:文件的屬主或用戶。

第五列:文件對應的屬組或用戶組(團體)。

許可權對應關係圖:

第六列:文件或目錄的大小。

第七八九列:文件最近修改時間。

第十列:文件或目錄名。

索引節點inode

inode概述

硬碟要分區,然後格式化,創建文件系統。

inode,索引節點(index node)。在每個linux存儲設備或存儲設備的分區(存儲設備可以是硬碟、軟盤、U盤等)被格式化為ext4文件系統後,一般都有兩部分:第一部分是inode(很多個),第二部分是block(很多個)。

block是用來存儲實際數據用的,例如:照片、視頻等普通文件數據。inode就是用來存儲這些數據屬性信息的(也就是ls -l的結果),inode包含的屬性信息包括文件大小、宿主、歸屬的用戶組、讀寫許可權、文件類型,修改時間,還包含指向文件實體的指針的功能(inode節點—block的對應關係等),但是,inode唯獨不包含文件名。

inode除了記錄文件屬性的信息外,還會為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,即可通過inode的值最快的找到相對應的文件實體。文件,inode、block之間的關係見下圖:

查看inode大小:

  1. #根分區
  2. [root@oldboy ~]# dumpe2fs /dev/sda3|grep -i "Inode size"
  3. dumpe2fs 1.41.12 (17-May-2010)
  4. Inode size: 256
  5. #boot分區
  6. [root@oldboy ~]# dumpe2fs /dev/sda1|grep -i "Inode size"
  7. dumpe2fs 1.41.12 (17-May-2010)
  8. Inode size: 128

查看inode大小:

  1. #boot分區
  2. [root@oldboy ~]# dumpe2fs /dev/sda1|grep -i "block size"
  3. dumpe2fs 1.41.12 (17-May-2010)
  4. Block size: 1024
  5. #根分區
  6. [root@oldboy ~]# dumpe2fs /dev/sda3|grep -i "block size"
  7. dumpe2fs 1.41.12 (17-May-2010)
  8. Block size: 4096

查看掛載的磁碟inode使用情況:

  1. [root@oldboy ~]# df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/sda3 479552 54520 425032 12% /
  4. tmpfs 127032 1 127031 1% /dev/shm
  5. /dev/sda1 51200 38 51162 1% /boot

查看掛載的磁碟block使用情況:

  1. [root@oldboy ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 7.1G 1.4G 5.4G 21% /
  4. tmpfs 497M 0 497M 0% /dev/shm
  5. /dev/sda1 190M 27M 153M 16% /boot

有關inode的小結:

1、磁碟分區格式化ext4文件系統後會生成一定數量的inode和block。

2、inode的索引節點,作用是存放文件的屬性信息以及作為文件的索引(指向文件的實體)。

3、ext3/ext4文件系統的block存放的是文件的實際內容。

4、inode是一塊存儲空間,c6非啟動分區inode預設大小256位元組,c5是128位元組。

5、inode是一串數字,不同的文件對應的inode(一串數字)在文件系統里是唯一的。

6、inode號相同的文件,互為硬鏈接文件(文件的又一個入口)。

7、一個文件被創建後至少要占用一個inode和一個block。

8、block的大小一般有1k、2k、4k幾種,其中引導分區等為1k,其他普通分區為4k(c6)。

9、如果一個文件很大,可能占多個block。

10、如果文件很小,至少占一個,並且剩餘空間不能被其它文件使用。

11、inode大小和總量查看。

  1. [root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i "block size|Inode size"
  2. dumpe2fs 1.41.12 (17-May-2010)
  3. Block size: 4096
  4. Inode size: 256
  5.  
  6. [root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i "block count|Inode count"
  7. dumpe2fs 1.41.12 (17-May-2010)
  8. Inode count: 479552
  9. Block count: 1914624
  10. Reserved block count: 95731

12、查看inode的總量和使用量命令df -i。

13、生成及指定inode大小mkfs.ext4 -b 2048 -I 256 /dev/sdb1。

block的知識:

1、磁碟讀取數據是按block為單位讀取的。

2、一個文件可能占用多個block。每讀取一個block就會消耗一次磁碟I/O。

3、如果要提升磁碟I/O性能,那麼就要儘可能一次性讀取數據儘量的多。

4、一個block只能存放一個文件的內容,無論內容有多小。如果block 4k,那麼存放1k的文件,剩餘3k就浪費了。

5、block並非越大越好。block太大對於小文件存放就會浪費磁碟空間。例如:1000k的文件,block為4k,占用250個block,block為1k,占用1000個block。消耗I/O分別為250次和1000次。

6、大文件(大於16k)一般設置block大一點,小文件(小於1k)一般設置block小一點。

7、block太大例如4k,文件都是0.1k的,大量浪費磁碟空間。

8、block的設置也是格式化分區的時候,mkfs.ext4 -b 2048 -l 256 /dev/sdb。

9、文件較大時,block設置大一些會提升磁碟訪問效率。

10、ext3/ext4文件一般設置為4k。

當前的生產環境一般設置為4k。特殊的業務,如視頻可以加大block大小。

linux的文件類型和擴展名

linux中的文件類型

在linux系統中,可以說一切皆文件。文件類型包含有普通文件、目錄、字元設備文件、塊設備文件、符號鏈接文件等。

普通文件(regular file):第一個屬性為"-",按照文件內容,又大略可分為如下三種:

1、純文本文件(ascii):文件內容可以直接讀到數據,例如:字母、數字等。可以用cat命令讀出文件內容。

2、二進位文件(binary):linux當中可執行文件(命令)就是屬於這種格式。例如cat這個執行文件就是一個二進位文件。

3、數據格式文件(data):有些程式在運行的過程中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件。例如:linux在用戶登錄時,都會將登錄的數據記錄在/var/log/wtmp那個文件內,該文件是一個數據文件。通過last命令讀出來。cat命令會讀出亂碼。因為它屬於一種特殊格式的文件。

文件類型小結:

1、- regular file普通文件

純文本、二進位文件、數據文件。

2、d directory目錄。

3、l link符號鏈接或者軟鏈接文件。

快捷方式,指向文件的實體。

4、字元文件,塊設備文件

c character串口設備、貓

b block硬碟、光碟機。

5、.sock進程之間通信

s sock

6、管道文件

p

linux下擴展名的作用

1、源碼.tar、tar.gz、.tgz、.zip、.tar.bz表示壓縮文件,創建命令tar、gzip、zip等。

2、.sh表示shell腳本文件,通過shell語言開發的程式。

3、.pl表示perl語言文件,通過perl語言開發的程式。

4、.py表示python語言文件,通過python語言開發的程式。

5、.html、.htm、.php、.jsp、.do表示網頁語言的文件。

6、.conf表示系統服務的配置文件。

7、.rpm表示rpm安裝包文件。

linux系統硬鏈接和軟鏈接

在linux系統中,鏈接可分為兩種,一種是硬鏈接(Hard Link),另一種為軟鏈接或符號鏈接(Symbolic Link or Soft link)。

創建硬鏈接:ln 源文件 目標文件

創建軟鏈接:ln -s 源文件 目標文件(目標文件不能事先存在)

硬鏈接

硬鏈接是指通過索引節點(Inode)來進行鏈接。在linux(ex2、ex3、ex4)文件系統中,保存在磁碟分區中的文件不管是什麼類型都會給它分配一個編號,這個編號被稱為索引節點編號(index inode)簡稱inode,即在系統中文件的編號。

在linux文件系統中,多個文件名指向同一個索引節點(inode)是正常且允許的。這種情況的文件就稱為硬鏈接。提示:硬鏈接文件就相當於文件的另外一個入口。硬鏈接的作用之一是允許一個文件擁有多個有效路徑名(多個入口),這樣用戶存儲中的快照功能就應用了這個原理,增加一個快照就多了一個硬鏈接。

為什麼一個文件建立了硬鏈接就會防止數據誤刪呢?

因為文件系統(ex2)的原理是,只要文件的索引節點(inode index)還有一個以上的硬鏈接。只刪除其中一個硬鏈接(即僅僅刪除了該文件的鏈接指向)並不影響索引節點本身和其它的鏈接(即數據文件實體並未被刪除),只有當文件的最後一個鏈接被刪除後,此時如果有新數據要存儲到硬碟上時或者系統通過類似fsck做磁碟檢查的時候。被刪除文件的數據塊及目錄的鏈接才會被釋放,空間被新數據占用並覆蓋。此時,數據就再也無法找回了。也就是說,在linux系統中,刪除靜態文件(沒有進程調用)(目錄也是文件)的條件是與之相關的所有硬鏈接文件均被刪除。

硬鏈接原理圖:

硬鏈接示意圖:

硬鏈接小結:

1、具有相同inode節點號的多個文件是互為硬鏈接文件。

2、刪除硬鏈接文件或者刪除源文件任意之一,文件實體並未被刪除。

3、只有刪除了源文件及所有對應的硬鏈接文件,文件實體才會被刪除。

4、當所有的硬鏈接文件及源文件被刪除後,再存放新的數據會占用這個文件的空間,或者磁碟fsck檢查的時候,刪除的數據也會被系統回收。

5、硬鏈接文件就是文件的又一個入口(相當於超市的前門、後門一樣)。

6、可以通過給文件設置硬鏈接文件,來防止重要文件被誤刪。

7、通過執行命令"ln 源文件 硬鏈接文件",即可完成創建硬鏈接。

8、硬鏈接文件可以用rm命令刪除。

9、對於靜態文件(沒有進程正在調用的文件)來講,當對應硬鏈接數為0(i_link),文件就被刪除。i_link的查看方法(ls -l結果的第三列)。

  1. [root@oldboy tmp]# mkdir /tmp/oldboy -p
  2. [root@oldboy tmp]# cd oldboy/
  3. [root@oldboy oldboy]# touch oldboyfile
  4. [root@oldboy oldboy]# echo "I am oldboy linux" >> oldboyfile
  5. [root@oldboy oldboy]# cat oldboyfile
  6. I am oldboy linux
  7. #inode鏈接數為1
  8. [root@oldboy oldboy]# ls -l oldboyfile
  9. -rw-r--r-- 1 root root 18 Dec 12 11:04 oldboyfile
  10. [root@oldboy oldboy]# ln oldboyfile oldboyfile_hard_link
  11. #inode鏈接數變為2
  12. [root@oldboy oldboy]# ls -l oldboyfile
  13. -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile
  14. #硬鏈接inode號一樣
  15. [root@oldboy oldboy]# ls -lhi oldboyfile*
  16. 3209 -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile
  17. 3209 -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile_hard_link
  18. #文件內容一樣
  19. [root@oldboy oldboy]# cat oldboyfile
  20. I am oldboy linux
  21. [root@oldboy oldboy]# cat oldboyfile_hard_link
  22. I am oldboy linux
  23. #刪除源文件
  24. [root@oldboy oldboy]# rm -f oldboyfile
  25. [root@oldboy oldboy]# cat oldboyfile_hard_link
  26. I am oldboy linux

軟鏈接

軟鏈接(Soft Link)也稱為符號鏈接(Symbolic Link)。linux里的軟鏈接文件就類似於windows系統中的快捷方式。linux里的軟鏈接文件實際上是一個特殊的文件,文件類型是i。軟鏈接文件實際上可以理解為一個文本文件,這個文件中包含有軟鏈接指向另一個源文件的位置信息內容,因此,通過訪問這個"快捷方式"就可以迅速定位到軟鏈接所指向的源文件實體。

軟鏈接原理圖:

註意:創建軟鏈接文件是需要存在的,要創建的軟鏈接文件是不能存在的,要用ln命令創建。

軟鏈接小結:

1、軟鏈接類似windows的快捷方式(可以通過readlink查看其指向)。

2、軟鏈接類似一個文本文件,裡面存放的是源文件的路徑,指向源文件實體。

3、刪除源文件,軟鏈接文件依然存在,但是無法訪問指向的源文件路徑內容了。

4、失效的時候一般是白字紅底閃爍提示。

5、執行命令"ln -s 源文件 軟鏈接文件",即可完成創建軟鏈接(目標不能存在)。

6、軟鏈接和源文件是不同類型的文件,也是不同的文件,inode號不同。

7、刪除軟鏈接文件可以用rm命令。

目錄創建軟鏈接:

  1. [root@oldboy oldboy]# mkdir oldboydir
  2. [root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link
  3. [root@oldboy oldboy]# ls -l
  4. total 8
  5. drwxr-xr-x 2 root root 4096 Dec 12 14:45 oldboydir
  6. lrwxrwxrwx 1 root root 9 Dec 12 14:46 oldboydir_soft_link -> oldboydir

總結:當刪除原始文件oldboyfile後,其硬鏈接文件oldboyfile_hard_link不受影響,對應的數據依然存在,但是其對應的軟鏈接文件oldboyfile_soft_link失效了,找不到源文件了,此時,可以刪除軟鏈接文件重建,或者創建一個oldboyfile_hard_link的硬鏈接文件oldboyfile。

企業生產軟鏈接作用:

1、編譯軟體時指定版本號(/application/apache2.2.23),訪問時希望去掉版本號(/application/apache),可以設置軟鏈接到編譯的路徑。所有程式都訪問軟鏈接文件(/application/apache),當軟體升級高版本後,只需刪除鏈接文件重建到高版本路徑的軟鏈接即可(/application/apache)。

2、企業代碼發佈時(php程式),需要把所有代碼傳到一個新發佈的臨時目錄或者新的站點目錄。發佈時要麼使用mv,也可以重建軟鏈接指向到這個新的臨時目錄或者新的站點目錄。

3、不方便目錄移動,使用ln -s。

有關文件的鏈接小結

1、刪除軟鏈接oldboyfile_soft_link,對oldboyfile、oldboyfile_hard_link無影響;

全局結論:刪除軟鏈接文件對源文件及硬鏈接文件無任何影響。

2、刪除硬鏈接oldboyfile_hard_link,對oldboyfile、oldboyfile_soft_link都無影響;

全局結論:刪除硬鏈接文件對源文件及軟鏈接文件無任何影響。

3、刪除源文件oldboyfile,對硬鏈接oldboyfile_hard_link沒有影響,但是會導致軟鏈接oldboyfile_soft_link失效;

全局結論:刪除源文件,對硬鏈接文件沒有影響,但是會導致軟鏈接文件失效,呈現紅底白字閃爍。

4、同時刪除源文件oldboyfile,硬鏈接文件oldboyfile_hard_link,整個文件會真正的被刪除。

5、很多硬體設備中的快照功能,就是利用了硬鏈接的原理。

6、源文件和硬鏈接文件具有相同的索引節點號,可以認為是同一個文件或一個文件的多個入口。

7、源文件和軟鏈接文件的索引節點號不同,是不同的文件,軟鏈接相當於源文件的快捷方式,含有源文件的位置指向。

有關目錄鏈接小結:

1、對於目錄,不可以創建硬鏈接,但可以創建軟鏈接。

2、對於目錄的軟鏈接是生產場景運維中常用的技巧。

3、目錄的硬鏈接不能跨文件系統(從硬鏈接原理可以理解)。

4、每個目錄下麵都有一個硬鏈接"."號,和對應上級目錄的硬鏈接".."。

5、在父目錄里創建一個子目錄,父目錄的連接數加1(子目錄里都有..來指向父目錄)。但是在父目錄里創建文件,父目錄的鏈接數不會增加。

linux下文件刪除原理

刪除原理描述

linux的文件名是存在父目錄的block裡面,並指向這個文件的inode節點,這個文件的inode節點再標記指向存放這個文件的block的數據塊。我們刪除一個文件,實際上並不是清楚inode節點和block的數據。只是在這個文件的父目錄裡面的block中,刪除這個文件的名字,從而使這個文件名消失,並且無法指向這個文件的inode節點,當沒有文件名指向這個inode節點的時候,會同時釋放inode節點和存放這個文件的數據塊,並更新inode MAP和block MAP今後讓這些位置可以用於放置其他文件數據。

linux下文件刪除的原理

文件刪除控制的變數:

i_link:文件硬鏈接數量

i_count:引用計數(有一個程式使用i_count加1)

文件刪除的條件:

i_link=0 and i_count=0

說明:以上圖形i_link=2和i_count=1。

linux是通過link的數量來控制文件刪除的,只有當一個文件不存在任何link的時候,這個文件才會被刪除。一般來說,每個文件都有2個link計數器i_link和i_count。

i_count的意義是當前文件使用者(或被調用)的數量,i_link是磁碟的引用計數器。當一個文件被某一個進程引用時,對應i_count數就會增加;當創建文件的硬鏈接的時候,對應i_link數就會增加。

對於刪除命令rm而言,實際就是減少磁碟引用計數i_link。這裡就會有一個問題,如果一個文件正在被某個進程調用,而用戶卻執行rm操作把文件刪除了,那麼會出現什麼結果呢?

當用戶執行rm操作刪除文件後,再執行ls或者其他文件管理命令,無法再找到這個文件了,但是調用這個刪除的文件的進程卻在繼續正常執行,依然能夠從文件中正確的讀取及寫入內容。這又是為什麼呢?
這是因為rm操作只是將文件的i_link減少了,如果沒有其它的鏈接i_link就為0了;但由於該文件依然被進程引用。因此,此文件對應的i_count並不為0,所以即使執行rm操作,但系統並沒有真正刪除這個文件,當只有i_link和i_count都為0的時候,這個文件才會真正被刪除。也就是說,還需要解除該進程對該文件的調用才行。

i_link及i_count是文件刪除的真實條件,但是當文件沒有被調用時,執行了rm操作刪除文件後是否還可以找回被刪除的文件呢?

rm操作只是將文件的i_link減少了,或者說置0了,實際就是將文件名到inode的鏈接刪除了,此時,並沒有刪除文件的實體即(block數據塊),此時,如果及時停止機器工作,數據是可以找回的,如果此時繼續寫入數據,那麼新數據就可能被分配到被刪除的數據的block數據塊,此時,文件就會真正的回收了。

實驗:inode耗盡。

查看新增的磁碟:

  1. #查看新增的磁碟
  2. [root@oldboy ~]# fdisk -l
  3.  
  4. Disk /dev/sda: 8589 MB, 8589934592 bytes
  5. 255 heads, 63 sectors/track, 1044 cylinders
  6. Units = cylinders of 16065 * 512 = 8225280 bytes
  7. Sector size (logical/physical): 512 bytes / 512 bytes
  8. I/O size (minimum/optimal): 512 bytes / 512 bytes
  9. Disk identifier: 0x00037eb4
  10.  
  11.    Device Boot Start End Blocks Id System
  12. /dev/sda1 * 1 26 204800 83 Linux
  13. Partition 1 does not end on cylinder boundary.
  14. /dev/sda2 26 91 524288 82 Linux swap / Solaris
  15. Partition 2 does not end on cylinder boundary.
  16. /dev/sda3 91 1045 7658496 83 Linux
  17.  
  18. Disk /dev/sdb: 106 MB, 106954752 bytes #新增的磁碟
  19. 64 heads, 32 sectors/track, 102 cylinders
  20. Units = cylinders of 2048 * 512 = 1048576 bytes
  21. Sector size (logical/physical): 512 bytes / 512 bytes
  22. I/O size (minimum/optimal): 512 bytes / 512 bytes
  23. Disk identifier: 0x00000000

格式化:

  1. [root@oldboy ~]# mkfs -t ext4 /dev/sdb
  2. mke2fs 1.41.12 (17-May-2010)
  3. /dev/sdb is entire device, not just one partition!
  4. Proceed anyway? (y,n) y
  5. Filesystem label=
  6. OS type: Linux
  7. Block size=1024 (log=0)
  8. Fragment size=1024 (log=0)
  9. Stride=0 blocks, Stripe width=0 blocks
  10. 26208 inodes, 104448 blocks
  11. 5222 blocks (5.00%) reserved for the super user
  12. First data block=1
  13. Maximum filesystem blocks=67371008
  14. 13 block groups
  15. 8192 blocks per group, 8192 fragments per group
  16. 2016 inodes per group
  17. Superblock backups stored on blocks:
  18.         8193, 24577, 40961, 57345, 73729
  19.  
  20. Writing inode tables: done
  21. Creating journal (4096 blocks): done
  22. Writing superblocks and filesystem accounting information: done
  23.  
  24. This filesystem will be automatically checked every 39 mounts or
  25. 180 days, whichever comes first. Use tune2fs -c or -i to override.

取消自動檢查:

  1. [root@oldboy ~]# tune2fs -c -1 /dev/sdb
  2. tune2fs 1.41.12 (17-May-2010)
  3. Setting maximal mount count to -1

掛載:

  1. [root@oldboy ~]# mount -t ext4 -o defaults /dev/sdb /tmp/app/log
  2. [root@oldboy ~]# df -h
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/sda3 7.1G 1.4G 5.4G 21% /
  5. tmpfs 497M 0 497M 0% /dev/shm
  6. /dev/sda1 190M 27M 153M 16% /boot
  7. /dev/sdb 95M 1.6M 89M 2% /tmp/app/log

查看inode:

  1. [root@oldboy ~]# cd /tmp/app/log/
  2. [root@oldboy log]# df -i
  3. Filesystem Inodes IUsed IFree IUse% Mounted on
  4. /dev/sda3 479552 54527 425025 12% /
  5. tmpfs 127032 1 127031 1% /dev/shm
  6. /dev/sda1 51200 38 51162 1% /boot
  7. /dev/sdb 26208 11 26197 1% /tmp/app/log

創建26220個文件:

  1. [root@oldboy log]# for n in `seq 26220`;do touch stu$n;done
  2. touch: cannot touch `stu26198': No space left on device
  3. touch: cannot touch `stu26199': No space left on device
  4. touch: cannot touch `stu26200': No space left on device
  5. touch: cannot touch `stu26201': No space left on device
  6. touch: cannot touch `stu26202': No space left on device
  7. touch: cannot touch `stu26203': No space left on device
  8. touch: cannot touch `stu26204': No space left on device
  9. touch: cannot touch `stu26205': No space left on device
  10. touch: cannot touch `stu26206': No space left on device
  11. touch: cannot touch `stu26207': No space left on device
  12. touch: cannot touch `stu26208': No space left on device
  13. touch: cannot touch `stu26209': No space left on device
  14. touch: cannot touch `stu26210': No space left on device
  15. touch: cannot touch `stu26211': No space left on device
  16. touch: cannot touch `stu26212': No space left on device
  17. touch: cannot touch `stu26213': No space left on device
  18. touch: cannot touch `stu26214': No space left on device
  19. touch: cannot touch `stu26215': No space left on device
  20. touch: cannot touch `stu26216': No space left on device
  21. touch: cannot touch `stu26217': No space left on device
  22. touch: cannot touch `stu26218': No space left on device
  23. touch: cannot touch `stu26219': No space left on device
  24. touch: cannot touch `stu26220': No space left on device

上述可以看出inode耗盡,不能繼續創建文件。

磁碟空間未滿:

  1. [root@oldboy log]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 7.1G 1.4G 5.4G 21% /
  4. tmpfs 497M 0 497M 0% /dev/shm
  5. /dev/sda1 190M 27M 153M 16% /boot
  6. /dev/sdb 95M 2.1M 88M 3% /tmp/app/log

inode耗盡:

  1. [root@oldboy log]# df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/sda3 479552 54527 425025 12% /
  4. tmpfs 127032 1 127031 1% /dev/shm
  5. /dev/sda1 51200 38 51162 1% /boot
  6. /dev/sdb 26208 26208 0 100% /tmp/app/log

刪除:

  1. [root@oldboy log]# find ./ -type f|xargs rm -f
  2. [root@oldboy log]# ls|xargs rm -f

查看inode:

  1. [root@oldboy log]# df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/sda3 479552 54527 425025 12% /
  4. tmpfs 127032 1 127031 1% /dev/shm
  5. /dev/sda1 51200 38 51162 1% /boot
  6. /dev/sdb 26208 11 26197 1% /tmp/app/log

總結:ln命令不能對目錄創建硬鏈接,但可以對目錄創建軟鏈接,對於目錄的軟鏈接也是生產場景運維中常用的功能。

linux系統用戶和用戶組

linux用戶劃分:

1、超級用戶

root uid=0 gid=0。

2、虛擬用戶

存在linux中沒有實際意義,滿足文件或者程式運行的需要而創建的。不能登錄,不能使用,UID、GID範圍1——499 。在/etc/passwd中末尾以nologin結尾。

3、普通用戶

管理員root創建的用戶,UID、GID從500開始。

linux系統下的賬戶文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow文件

passwd文件中一行的各個欄位簡述

  1. [root@oldboy tmp]# cat /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash

賬號名稱:賬號密碼:賬號UID:賬號組GID:用戶說明:用戶家目錄:shell解釋器

shadow文件中一行的各個欄位詳細說明

欄位名稱

註釋說明

賬號名稱

用戶的賬號名稱

賬號密碼

用戶密碼,這是加密過的口令

最近更改密碼的時間

從1970年1月1日起,到用戶最近一次更改口令的天數

禁止修改密碼的天數

從1970年1月1日起,到用戶可以更改密碼的天數

用戶必須更改口令的天數

從1970年1月1日起,到用戶必須更改密碼的天數

警告更改密碼的期限

在用戶密碼過期前多少天提醒用戶更改密碼

不活動時間

在用戶密碼過期之後到禁用賬號的天數

失效時間

從1970年1月1日起,到用戶被禁用的天數(useradd -f)

標誌

保留

 

ls -l:顯示的時間是修改時間。

  1. [root@oldboy tmp]# ls -l --time-style=long-iso
  2. total 16
  3. drwxr-xr-x 3 root root 4096 2016-12-12 13:18 app
  4. drwxr-xr-x 3 root root 4096 2016-12-12 15:52 application
  5. drwxr-xr-x 2 root root 4096 2016-12-12 15:49 oldboy
  6. -rw-r--r-- 1 root root 18 2016-12-12 11:04 oldboyfile_hard_link2
  7. -rw-------. 1 root root 0 2016-12-10 15:53 yum.log

文件的時間:

Access: 2016-12-11 20:05:12.647999994 +0800(訪問時間)find -atime

Modify: 2016-12-10 16:02:10.162999297 +0800(修改時間,內容發生變化)find -mtime

Change: 2016-12-10 16:02:10.162999297 +0800(變化時間,包含Modify、許可權、屬主、用戶組)find -ctime

stat命令查看時間等的屬性

linux正則表達式

使用正則表達式註意事項:

1、linux正則一般以行為單位匹配處理的。

2、註意字元集,export LC_ALL=C。

基礎正則表達式:元字元意義BRE(basic regular expression)。

1、^word搜索以word開頭的。vi ^一行的開頭。

2、word$搜索以word結尾的。vi $一行的結尾。

3、^$表示空行。

4、.代表且只能代表任意一個字元。

5、\例如\.只代表點本身,轉義符號,讓有著特殊身份意義的字元脫掉馬甲還原原型。

6、*例如o*重覆0個或多個前面的一個字元。

7、.*匹配所有字元。^.*以任意多個字元開頭。

8、[abc]匹配字元集合內的任意一個字元[a-zA-Z],[0-9]。

9、[^abc]匹配不包含^後的任意一個字元。

10、a\{n,m\}重覆n到m次前面一個重覆的字元。如果用egrep、grep -E或sed -r可以去掉斜線。

\{n,\}重覆至少n次前面一個重覆的字元。

\{,m\}無效

\{n\}重覆n次前面一個重覆的字元。

擴展的正則表達式:

1、+重覆一個或一個以上前面的字元。

2、?重覆0或一個0前面的字元。

3、|用或的方式查找多個符合的字元串。

4、()找出"用戶組"字元串。

設置別名過濾的內容顯示顏色:

  1. [root@oldboy tmp]# alias grep='grep --color=auto'

過濾以m開頭

  1. [root@oldboy tmp]# grep ^m oldboy.log

過濾以m結尾

  1. [root@oldboy tmp]# grep "m$" oldboy.log

過濾空行顯示

  1. [root@oldboy tmp]# grep -v "^$" oldboy.log

過濾空行顯示行號

  1. [root@oldboy tmp]# grep -vn "^$" oldboy.log

匹配以.結尾

  1. [root@oldboy tmp]# grep "\.$" oldboy.log

精確匹配-o

  1. [root@oldboy tmp]# grep -o "0*" oldboy.log

grep一般常用參數:

-a:在二進位文件中以文本文件的方式搜索數據。

-c:計算找到"搜索字元串"的次數。

-o:僅顯示出匹配regexp的內容(用於統計出現在文中的次數)。

-i:忽略大小寫的不同,所有大小寫視為相同。

-n:在行首顯示行號。

-v:反向選擇,即顯示沒有"搜索字元串"的內容的那一行。

-E:擴展的grep,及egrep。

--color=auto:以特定顏色高亮顯示匹配關鍵字。

-A:After的意思,顯示匹配字元串及其後n行的數據。

-B:Before的意思,顯示匹配字元串及其前n行的數據。

-C:顯示匹配字元串及其前後各num行。

取出ip地址:

方法一:

  1. [root@oldboy ~]# ifconfig eth0|sed -n '2p'
  2.           inet addr:192.168.93.128 Bcast:192.168.93.255 Mask:255.255.255.0
  3. [root@oldboy ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*addr:(.*) Bcast:.*$#\1#g'
  4. 192.168.93.128

方法二:

  1. [root@oldboy ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*) Bcast:.*$#\1#gp'
  2. 192.168.93.128

取出HWaddr:

方法一:

  1. [root@oldboy ~]# ifconfig eth0|sed -n '1p'|sed -r 's#^.*net (.*) 00:.*$#\1#g'
  2.  HWaddr

方法二:

  1. [root@oldboy ~]# ifconfig eth0|sed -nr '1s#^.*net (.*) 00:.*$#\1#gp'
  2.  HWaddr

stat /etc/hosts中取出0644:

  1. [root@oldboy ~]# stat /etc/hosts|sed -nr '4s#^.*ess: \((.*)/-.*$#\1#gp'
  2. 0644

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天搞定了一個十萬火急的issue,客戶抱怨產品升級後系統會變慢和CPU使用率相當高,客戶脾氣很大,聲稱不儘快解決這個問題就退貨,弄得我們 R&D壓力很大,解決這個issue的任務分給了我,客戶是南非的一個公司,由於時差問題,我只好在家遠程解決問題,晚上8點半用 gotomeeting遠程到客戶電腦 ...
  • 本文地址 分享提綱: 1.查看是否啟動 2. 設置自動啟動 1.【查看是否啟動】 啟動SSH服務 “/etc/init.d/sshd start”。然後用netstat -antulp | grep ssh看是否能看到相關信息就可以了。 2.【設置自動啟動】 如何設置把ssh等一些服務隨系統開機自動 ...
  • nginx代理https站點(親測) 首先,我相信大家已經搞定了nginx正常代理http站點的方法,下麵重點介紹代理https站點的配置方法,以及註意事項,因為目前大部分站點有轉換https的需要所以學習這個方法也是很重要的,我就不啰嗦了 直奔主題了……………… 測試環境 nginx版本 ngin ...
  • 在安裝好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zip安裝包解壓後執行install命令,選擇路徑進行安裝即可 環境變數設置:setenv LD_LIB ...
  • 最新發佈的開源 Zephyr Project™(Zephyr 項目)是一款小型且可伸縮的實時操作系統,尤其適用於資源受限的系統,可支持多種架構;該系統高度開源,對於開發人員社區完全開放,開發人員可根據需要對該系統進行剪裁,以支持最新硬體、工具和設備驅動程式;該系統高度模塊化平臺,可輕鬆集成任何架構的 ...
  • PS:在伺服器硬體資源額定有限的情況下,最大的壓榨伺服器的性能,提高伺服器的併發處理能力,是很多運維技術人員思考的問題。要提高Linux系統下的負載能力,可以使用nginx等原生併發處理能力就很強的web伺服器,如果使用Apache的可以啟用其Worker模式,來提高其併發處理能力。除此之外,在考慮 ...
  • 1 刪除Mysql yum remove mysql mysql-server mysql-libs mysql-server; find / -name mysql 將找到的相關東西delete掉; rpm -qa|grep mysql(查詢出來的東東yum remove掉) 2 安裝Mysql ...
  • 在Arduino中,可以使用AnalogWrite來使用硬體產生490Hz/980Hz的pwm波,並可根據參數來設定占空比。不瞭解這個的同學可以去 "AnalogWrite" 學習下, "SecretsOfArduinoPWM" 也是講了Arduino在avr的定時/計數器上做的封裝,我們這裡並不講 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...