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文件和目錄的屬性及許可權
命令:
- [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 Dec 10 16:02 install.log
- 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大小:
- #根分區
- [root@oldboy ~]# dumpe2fs /dev/sda3|grep -i "Inode size"
- dumpe2fs 1.41.12 (17-May-2010)
- Inode size: 256
- #boot分區
- [root@oldboy ~]# dumpe2fs /dev/sda1|grep -i "Inode size"
- dumpe2fs 1.41.12 (17-May-2010)
- Inode size: 128
查看inode大小:
- #boot分區
- [root@oldboy ~]# dumpe2fs /dev/sda1|grep -i "block size"
- dumpe2fs 1.41.12 (17-May-2010)
- Block size: 1024
- #根分區
- [root@oldboy ~]# dumpe2fs /dev/sda3|grep -i "block size"
- dumpe2fs 1.41.12 (17-May-2010)
- Block size: 4096
查看掛載的磁碟inode使用情況:
- [root@oldboy ~]# df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda3 479552 54520 425032 12% /
- tmpfs 127032 1 127031 1% /dev/shm
- /dev/sda1 51200 38 51162 1% /boot
查看掛載的磁碟block使用情況:
- [root@oldboy ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 7.1G 1.4G 5.4G 21% /
- tmpfs 497M 0 497M 0% /dev/shm
- /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大小和總量查看。
- [root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i "block size|Inode size"
- dumpe2fs 1.41.12 (17-May-2010)
- Block size: 4096
- Inode size: 256
- [root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i "block count|Inode count"
- dumpe2fs 1.41.12 (17-May-2010)
- Inode count: 479552
- Block count: 1914624
- 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結果的第三列)。
- [root@oldboy tmp]# mkdir /tmp/oldboy -p
- [root@oldboy tmp]# cd oldboy/
- [root@oldboy oldboy]# touch oldboyfile
- [root@oldboy oldboy]# echo "I am oldboy linux" >> oldboyfile
- [root@oldboy oldboy]# cat oldboyfile
- I am oldboy linux
- #inode鏈接數為1
- [root@oldboy oldboy]# ls -l oldboyfile
- -rw-r--r-- 1 root root 18 Dec 12 11:04 oldboyfile
- [root@oldboy oldboy]# ln oldboyfile oldboyfile_hard_link
- #inode鏈接數變為2
- [root@oldboy oldboy]# ls -l oldboyfile
- -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile
- #硬鏈接inode號一樣
- [root@oldboy oldboy]# ls -lhi oldboyfile*
- 3209 -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile
- 3209 -rw-r--r-- 2 root root 18 Dec 12 11:04 oldboyfile_hard_link
- #文件內容一樣
- [root@oldboy oldboy]# cat oldboyfile
- I am oldboy linux
- [root@oldboy oldboy]# cat oldboyfile_hard_link
- I am oldboy linux
- #刪除源文件
- [root@oldboy oldboy]# rm -f oldboyfile
- [root@oldboy oldboy]# cat oldboyfile_hard_link
- 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命令。
目錄創建軟鏈接:
- [root@oldboy oldboy]# mkdir oldboydir
- [root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link
- [root@oldboy oldboy]# ls -l
- total 8
- drwxr-xr-x 2 root root 4096 Dec 12 14:45 oldboydir
- 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耗盡。
查看新增的磁碟:
- #查看新增的磁碟
- [root@oldboy ~]# fdisk -l
- Disk /dev/sda: 8589 MB, 8589934592 bytes
- 255 heads, 63 sectors/track, 1044 cylinders
- Units = cylinders of 16065 * 512 = 8225280 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x00037eb4
- Device Boot Start End Blocks Id System
- /dev/sda1 * 1 26 204800 83 Linux
- Partition 1 does not end on cylinder boundary.
- /dev/sda2 26 91 524288 82 Linux swap / Solaris
- Partition 2 does not end on cylinder boundary.
- /dev/sda3 91 1045 7658496 83 Linux
- Disk /dev/sdb: 106 MB, 106954752 bytes #新增的磁碟
- 64 heads, 32 sectors/track, 102 cylinders
- Units = cylinders of 2048 * 512 = 1048576 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x00000000
格式化:
- [root@oldboy ~]# mkfs -t ext4 /dev/sdb
- mke2fs 1.41.12 (17-May-2010)
- /dev/sdb is entire device, not just one partition!
- Proceed anyway? (y,n) y
- Filesystem label=
- OS type: Linux
- Block size=1024 (log=0)
- Fragment size=1024 (log=0)
- Stride=0 blocks, Stripe width=0 blocks
- 26208 inodes, 104448 blocks
- 5222 blocks (5.00%) reserved for the super user
- First data block=1
- Maximum filesystem blocks=67371008
- 13 block groups
- 8192 blocks per group, 8192 fragments per group
- 2016 inodes per group
- Superblock backups stored on blocks:
- 8193, 24577, 40961, 57345, 73729
- Writing inode tables: done
- Creating journal (4096 blocks): done
- Writing superblocks and filesystem accounting information: done
- This filesystem will be automatically checked every 39 mounts or
- 180 days, whichever comes first. Use tune2fs -c or -i to override.
取消自動檢查:
- [root@oldboy ~]# tune2fs -c -1 /dev/sdb
- tune2fs 1.41.12 (17-May-2010)
- Setting maximal mount count to -1
掛載:
- [root@oldboy ~]# mount -t ext4 -o defaults /dev/sdb /tmp/app/log
- [root@oldboy ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 7.1G 1.4G 5.4G 21% /
- tmpfs 497M 0 497M 0% /dev/shm
- /dev/sda1 190M 27M 153M 16% /boot
- /dev/sdb 95M 1.6M 89M 2% /tmp/app/log
查看inode:
- [root@oldboy ~]# cd /tmp/app/log/
- [root@oldboy log]# df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda3 479552 54527 425025 12% /
- tmpfs 127032 1 127031 1% /dev/shm
- /dev/sda1 51200 38 51162 1% /boot
- /dev/sdb 26208 11 26197 1% /tmp/app/log
創建26220個文件:
- [root@oldboy log]# for n in `seq 26220`;do touch stu$n;done
- touch: cannot touch `stu26198': No space left on device
- touch: cannot touch `stu26199': No space left on device
- touch: cannot touch `stu26200': No space left on device
- touch: cannot touch `stu26201': No space left on device
- touch: cannot touch `stu26202': No space left on device
- touch: cannot touch `stu26203': No space left on device
- touch: cannot touch `stu26204': No space left on device
- touch: cannot touch `stu26205': No space left on device
- touch: cannot touch `stu26206': No space left on device
- touch: cannot touch `stu26207': No space left on device
- touch: cannot touch `stu26208': No space left on device
- touch: cannot touch `stu26209': No space left on device
- touch: cannot touch `stu26210': No space left on device
- touch: cannot touch `stu26211': No space left on device
- touch: cannot touch `stu26212': No space left on device
- touch: cannot touch `stu26213': No space left on device
- touch: cannot touch `stu26214': No space left on device
- touch: cannot touch `stu26215': No space left on device
- touch: cannot touch `stu26216': No space left on device
- touch: cannot touch `stu26217': No space left on device
- touch: cannot touch `stu26218': No space left on device
- touch: cannot touch `stu26219': No space left on device
- touch: cannot touch `stu26220': No space left on device
上述可以看出inode耗盡,不能繼續創建文件。
磁碟空間未滿:
- [root@oldboy log]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 7.1G 1.4G 5.4G 21% /
- tmpfs 497M 0 497M 0% /dev/shm
- /dev/sda1 190M 27M 153M 16% /boot
- /dev/sdb 95M 2.1M 88M 3% /tmp/app/log
inode耗盡:
- [root@oldboy log]# df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda3 479552 54527 425025 12% /
- tmpfs 127032 1 127031 1% /dev/shm
- /dev/sda1 51200 38 51162 1% /boot
- /dev/sdb 26208 26208 0 100% /tmp/app/log
刪除:
- [root@oldboy log]# find ./ -type f|xargs rm -f
- 或
- [root@oldboy log]# ls|xargs rm -f
查看inode:
- [root@oldboy log]# df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda3 479552 54527 425025 12% /
- tmpfs 127032 1 127031 1% /dev/shm
- /dev/sda1 51200 38 51162 1% /boot
- /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文件中一行的各個欄位簡述
- [root@oldboy tmp]# cat /etc/passwd
- 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:顯示的時間是修改時間。
- [root@oldboy tmp]# ls -l --time-style=long-iso
- total 16
- drwxr-xr-x 3 root root 4096 2016-12-12 13:18 app
- drwxr-xr-x 3 root root 4096 2016-12-12 15:52 application
- drwxr-xr-x 2 root root 4096 2016-12-12 15:49 oldboy
- -rw-r--r-- 1 root root 18 2016-12-12 11:04 oldboyfile_hard_link2
- -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、()找出"用戶組"字元串。
設置別名過濾的內容顯示顏色:
- [root@oldboy tmp]# alias grep='grep --color=auto'
過濾以m開頭
- [root@oldboy tmp]# grep ^m oldboy.log
過濾以m結尾
- [root@oldboy tmp]# grep "m$" oldboy.log
過濾空行顯示
- [root@oldboy tmp]# grep -v "^$" oldboy.log
過濾空行顯示行號
- [root@oldboy tmp]# grep -vn "^$" oldboy.log
匹配以.結尾
- [root@oldboy tmp]# grep "\.$" oldboy.log
精確匹配-o
- [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地址:
方法一:
- [root@oldboy ~]# ifconfig eth0|sed -n '2p'
- inet addr:192.168.93.128 Bcast:192.168.93.255 Mask:255.255.255.0
- [root@oldboy ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*addr:(.*) Bcast:.*$#\1#g'
- 192.168.93.128
方法二:
- [root@oldboy ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*) Bcast:.*$#\1#gp'
- 192.168.93.128
取出HWaddr:
方法一:
- [root@oldboy ~]# ifconfig eth0|sed -n '1p'|sed -r 's#^.*net (.*) 00:.*$#\1#g'
- HWaddr
方法二:
- [root@oldboy ~]# ifconfig eth0|sed -nr '1s#^.*net (.*) 00:.*$#\1#gp'
- HWaddr
stat /etc/hosts中取出0644:
- [root@oldboy ~]# stat /etc/hosts|sed -nr '4s#^.*ess: \((.*)/-.*$#\1#gp'
- 0644