1.Linux文件
#概述
#1.linux里一切皆為文件 #2.Linux系統中的文件或目錄的屬性主要包括:inode(索引節點)、文件類型、權限屬性、鏈接數、所屬用戶和用戶組、最近修改時間等內容
#例如:執行ls -lhi ,會出現10列內容
[root@cots3 ~]# ls -lhi total 28K 33865597 -rw-r--r-- 1 root root 104 Feb 29 09:43 1.txt 33865598 -rw-r--r-- 1 root root 13 Feb 29 09:44 2.txt 33619589 -rwxr-xr-x 1 root root 187 Mar 2 23:44 3.sh
#10列內容講解
第一列:inode索引節點編號(唯一的,像人的身份證)
第二列:文件類型及權限(共10個字符,第一字符為類型,后9個為文件權限)
第三列:硬鏈接數
第四列:文件或目錄所屬的用戶
第五列:文件或目錄所屬的組
第六列:文件或目錄的大小
第七、八、九列:時間戳
第十列:實際的文件或目錄名
#上圖
2.文件屬性詳細講解
2.1索引節點:inode
#概述
#1.indoe,中文意思是索引節點(index node)。在每個Linux存儲設置或存儲設備的分區被格式化為ext4文件系統之后,一般會生成兩個部分,第一部分時inode,第二部分時block
#2.block是真正用來存儲實際數據的,例照片,視頻等普通文件數據 inode是用來存儲這些數據的屬性信息(也就是ls -l的結果),inode屬性信息包括不限於文件大小、屬主(用戶)、歸屬的用戶組、文件權限、文件類型、修改時間,但是inode里面不包含文件名
#3.inode除了記錄文件屬性的信息外,還會為每個文件信息索引,操作系統就會根據inode的值最快的找到相對應的文件實體
#讀文件的過程
文件名>inode>block
#讀文件的時候首先找到文件名,然后找到文件的inode,文件許可后就可以看block數據了
#例子:
# 比如一本書,整本書就相當於一塊磁盤或分區,書的前幾頁目錄就相當於inode。每一頁的文字、圖片相當於一個block
#擴展:Linux組成
#Linux文件系統由三分部組成:文件名,inode,block(真正存數據)
#使用stat命令查看inode信息
#stat:顯示文件和文件系統狀態
[root@cots3 ~]# stat /etc/passwd File: ‘/etc/passwd’ Size: 1032 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 17042355 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-03-04 03:37:21.549000201 -0500 Modify: 2020-02-29 20:50:57.126146678 -0500 Change: 2020-02-29 20:50:57.126146678 -0500 Birth: -
#查看目錄的inode號
[root@cots3 ~]# ls -di /etc/
16777281 /etc/
#inode的大小
#inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域
一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息
#查看磁盤空間是否滿了,由inode是否滿了和block是否滿了決定的,任何一個滿了,都無法存放東西
#磁盤滿的特征(no space on device left)
#查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令
[root@cots3 ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/centos-root 8910848 33678 8877170 1% / devtmpfs 230105 396 229709 1% /dev tmpfs 233163 1 233162 1% /dev/shm tmpfs 233163 723 232440 1% /run tmpfs 233163 16 233147 1% /sys/fs/cgroup /dev/sda1 524288 327 523961 1% /boot tmpfs 233163 1 233162 1% /run/user/0
#查看磁盤的使用量
[root@cots3 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 2.2G 15G 13% / devtmpfs 899M 0 899M 0% /dev tmpfs 911M 0 911M 0% /dev/shm tmpfs 911M 9.5M 902M 2% /run tmpfs 911M 0 911M 0% /sys/fs/cgroup /dev/sda1 1014M 142M 873M 14% /boot tmpfs 183M 0 183M 0% /run/user/0
#擴展:linux中ctime,mtime,atime的區別
ctime: 改變時間(change time) mtime:修改時間(modification time) 改變和修改之間的區別在於是改文件的屬性還是更改它的內容。chmod a-w myfile,那么這是一個改變 echo foo >> myfile,那么這是一個修改 改變是文件的索引節點發生了改變;修改是文本本身的內容發生了變化 atime: 訪問時間(access time) 訪問時間是文件最后一次被讀取的時間。因此閱讀一個文件會更新它的訪問時間,但是它的改變時間和修改時間並沒有變 ls -lc filename 列出文件的ctime ls -lu filename 列出文件atime ls -l fimename 列出文件的mtime
#inode和block的小結

有關inode的小結 1、磁盤被分區並格式化為ext4文件系統后會生成一定數量的inode和block 2、inode稱為索引節點,它的作用是存放文件的屬性信息以及作為文件的索引(指向文件的實體) 3、ext3/ext4文件系統的block存放的是文件的是實際內容 4、inode是磁盤上的一塊存儲空間,非啟動分區inode默認大小256字節 5、inode的表現是形式一串數字,不同的文件對應的inode(一串數字)在文件系統里是唯一的 6、inode節點號相同的文件,互為硬鏈接文件,可以認為是一個文件的不同入口 7、ext3/ext4文件系統下,一個文件被創建后至少要占用一個inode和一個block 8、ext3/ext4文件系統下,正常一個文件占用且只能占用一個inode(相當於人和身份證) 9、block是用來存儲實際數據的,每個block的大小一般有1K、2K、4K幾種,其中引導分區等為1K,其他普通分區多為4K 10、查看inode的大小和總量: 11、查看inode的總量和使用量命令 df -i 12、查看文件的inode信息方法 13、如何生成及指定inode大小 格式化命令:mkfs.ext4 -b 2048 -l 256 /dev/sdb 有關block的知識小結 1、磁盤讀取數據是按block為單位讀取的 2、一個文件可能占用多個block,但是每讀取一個block就會消耗一次磁盤I/O 3、如果要提升磁盤IO性能,那么就要盡可能一次性讀取數據盡量的多 4、一個block只能存放一個文件的內容,無論內容有多小,如果block默認是4K大小,那么存放一個1K的文件,剩余3K就不能存放別的文件,只能浪費了 5、block並非越大越好,block太大對於存放小文件就會浪費磁盤空間,例如:1000K的文件,block大小為4K,占用250個Block,如果block默認為1K,則需要占1000個block,訪問效率誰更高? 當然是4K那個。消耗IO分別為250和1000次 6、根據業務需求,確定默認的block大小,如果是大文件(大於16K) 一般設置block大一點,小文件(小於1K)一般設置block小一點 7、block太大,例如4K,文件都是0.1K的,太浪費磁盤空間,但是訪問性能高 8、block太小,例如1K,文件都是1000K的,消耗大量磁盤IO 9、block大小設置也是格式化分區時候確定的,命令mkfs.ext4 -b 2048 -l 256 /dev/sdb (-b 是block大小,-i是inode大小) 10、一般企業里文件都會比較大,(一般大於4K).block設置大一些會提升磁盤訪問效率 11、ext3/ext4文件系統,一般設置為4K
2.2.文件類型
#概述: 在linux系統中,可以說一切(包括目錄、普通文件、設備文件等)皆為文件。文件類型包含有普通文件、目錄、字符設備文件、塊設備文件、符號鏈接文件、管道文件等等
#在ls -l 顯示文件屬性內容后,第一列的第一個字符就是用來區分文件類型的
#類型種類
d(directory) : #表示一個目錄 -(regular file): #表示一個普通文件 l(link): #表示一個符合鏈接文件 b(block): #表示塊設備和其他外圍設備,是特殊類型的文件 c(character): #表示字符設備文件 s(socket): #表示socket文件 p(name pipe): #表示管道文件
#查找文件類型參數命令 find /-type b/p/c
#例子:
#查找管道文件 [root@cots3 ~]# find / -type p /run/dmeventd-client /run/dmeventd-server /run/systemd/inhibit/1.ref /run/systemd/sessions/1.ref /run/systemd/initctl/fifo #查找塊設備文件 [root@cots3 ~]# find / -type b /dev/dm-1 /dev/dm-0 /dev/sr0 /dev/sda2 /dev/sda1 /dev/sda
#普通文件(regular file)
[root@cots3 ~]# ls -l 1.txt -rw-r--r-- 1 root root 104 Feb 29 09:43 1.txt
#可以通過ls -l來查看hosts的屬性,可以看到第一列內容-rw-r--r--,值得注意的是第一個符號是-(英文字符減號),在linux中,以這樣的字符開頭的文件就表示普通文件
這些文件一般都是用相關的應用程序或系統命令創建。比如touch、cp、tar、echo、cat、>、>> 等工具命令。普通文件的刪除方式可以使用rm命令
#普通文件(regular file):第一個屬性為“-”, 按照文件內容,又大略可以分為 :
1、純文本文件(asell ):文件內容可以直接讀到數據,例如:字母、數字等,可以用cat命令讀文件,比如配置文件幾乎都是這種類型的 2、二進制文件(binary):linux中的命令程序就是屬於這種格式。例如cat命令就是一個二進制文件 3、數據格式文件(data):有些程序在運行的過程中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件
#數據格式的例子:
例如linux在用戶登錄時,都會將登陸的數據記錄在/var/log/wtmp(last命令的數據庫文件)那個文件內,該文件是一個數據文件,通過last命令讀出來(last 查看用戶登錄信息)。cat命令會讀出亂碼,因為他屬於一種特殊格式的文件。lastlog(/var/log/lastlog)
#兩圖命令講解
last:查看用戶登錄信息 。 /var/log/wtmp 數據文件
lastlog:顯示最近登陸的用戶信息。 /var/log/lsatlog數控文件
#字符設備或塊設備文件
#如果進入/dev/目錄,列一下文件。會看到類似如下的內容:
[root@cots3 ~]# ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 Mar 4 22:07 /dev/tty
可以看到/dev/tty的屬性是crw-rw-rw-。注意前面第一個字符是c,這表示字符設備文件。字符設備就是串行端口的接口設備
#再看下面這個
[root@cots3 ~]# ls -la /dev/sda brw-rw---- 1 root disk 8, 0 Mar 4 22:07 /dev/sda
可以看到/dev/sda的屬性brw-rw-----,注意前面的第一個字符是b。這表示塊設備,塊設備就是存儲數據供系統及程序訪問的接口設備。如硬盤、光驅等都屬於塊設備
創建一個字符設備
mknod oldbiy c 5 1
c 指字符設備
5 是該設備在majorh中定義的標記
1 表示第一個子設備
#鏈接文件
find /etc/ -type l | xargs ls -l 查看/etc下的鏈接文件
2.3.鏈接數
在linux系統中,鏈接可分為兩種:
一種為硬鏈接(hard link),另一種為軟鏈接或符號鏈接(symblic link or soft link)。
ln這個命令就是創建鏈接文件的,在默認不帶參數的情況下,執行ln命令創建的是硬鏈接。
如果使用ln -s創建鏈接則為軟鏈接
#創建的格式
硬鏈接:ln 源文件 目標文件
軟鏈接:ln -s 源文件 目標文件 (目標文件不能事先存在)
#硬鏈接
定義: 1、 硬鏈接是指通過索引節點(inode)來進行鏈接。 2、在linux文件系統中,多個文件名指向同一個索引節點(inode)是正常且允許的。這種情況的文件就稱為硬鏈接。 提示:硬鏈接文件就相當於文件的另一個入口,另一個通道。 3、硬鏈接的作用之一: 是允許一個文件擁有多個有效路徑名(多個入口),這樣用戶就可以建立硬鏈接到重要的文件,以防止“誤刪”源數據)。 4、為什么一個文件建立了硬鏈接就會防止數據誤刪呢? 因為文件系統(ext2)的原理是, 只要文件的索引節點(index inode)還有一個以上的硬鏈接,只刪除其中一個硬鏈接(即僅僅刪除了該文件的鏈接指向)。並不影響索引節點本身和其它的鏈接(即數據文件實體並未被刪除), 只有當文件的最后一個鏈接被刪除后,那個文件才是被刪掉了
#硬鏈接的創建
[root@cots3 ~]# ln 1.txt 11.txt [root@cots3 ~]# ls -lhi 1.txt 11.txt 33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 11.txt 33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 1.txt
#硬鏈接知識總結

1、具有相同inode節點號的多個文件是互為硬鏈接文件 2、刪除硬鏈接文件或者源文件任意之一,文件實體並未被刪除 3、只有刪除了源文件及所有對應的硬鏈接文件,文件實體才會被刪除 4、當所有的硬鏈接文件及源文件被刪除后,在存放新的數據會占用這個文件的空間,或者磁盤fsck檢查的時候,刪除的數據也會被系統回收 5、硬鏈接文件就是文件的另一個入口,另一個通道(相當於教室的前門后門一樣) 6、可以通過給文件設置硬鏈接文件,來防止重要文件被刪除 7、通過執行命令“ln 源文件 硬鏈接文件”。即可完成創建硬鏈接 8、硬鏈接是普通文件,因此可以用rm命令刪除 9、對於靜態文件(沒有進程正調用的文件)來講,當對應硬鏈接數為0(i_link),文件就被刪除,i_link的查看方法(ls -l 結果的第三列就是) 10、創建時,不能跨分區
#軟鏈接
軟鏈接(soft link)也稱為符號鏈接(symbolic link)。
linux里的軟鏈接文件就類似於window系統中的快捷方式,
linux里的軟鏈接文件實際上是一個特殊的文件,文件類型是l。
#軟鏈接的創建
[root@cots3 ~]# ln -s /tools/apache2.2.17/ /tools/apache [root@cots3 ~]# ls -ld /tools/apache lrwxrwxrwx 1 root root 20 Mar 5 00:00 /tools/apache -> /tools/apache2.2.17/
#軟鏈接知識總結

1、軟鏈接類似window的快捷方式 2、軟鏈接類似於一個文本文件,里面存放的是源文件的路徑,指向源文件實體 3、刪除源文件,軟鏈接文件依然存在,但是無法訪問指向的源文件路徑內容了 4、失效的時候一般是白字紅底閃爍提示 5、執行命令 "ln -s 源文件 軟鏈接文件",即可完成創建軟鏈接(目標不能存在) 6、軟鏈接和源文件是不同類型的文件,也是不同的文件,inode好也不相同 7、刪除軟鏈接文件的文件類型為(l),可以用rm命令刪除
#擴展:Linux下文件刪除的原理
Linux是link的數量誺控制文件刪除的,只有當一個文件不存在任何link的時候,文件才會被刪除,每個文件都有兩個link計數器:i_count和i_link
2.4.用戶和組
#linux多用戶多任務介紹:linux/unix是一個多用戶、多任務的操作系統,
#linux系統中用戶角色划分:
linux系統中用戶是分角色的,對linux系統來說,用戶的角色是通過UID和GID識別的,特別是UID,在linux系統運維工作中,一個UID是唯一標識一個系統用戶的賬號(相當於我們的身份證)。
用戶名相當於我們的名字
UID (User ldentify) 中文用戶ID,相當於我們的身份證,在系統中是唯一的
GID (Group ldentify)中文組ID,相當於家庭或者學校
#用戶
#當我們使用linux時,需要以一個用戶的身份登入,一個進程也需要以一個用戶的身份運行,
用戶限制使用者或進程可以使用、不可以使用哪些資源
用戶ID為32位,從0開始,但是為了和老式系統兼容 ,用戶ID限制在60000以下
用戶分為以下三種: -root用戶 (ID為0的用戶為root用戶) -系統用戶 (1-499) -普通用戶 (500以上) 權限很小
系統中的文件都有一個所屬用戶及所屬組 使用id命令都可以顯示當前用戶的信息 使用passwd命令可以修改當前用戶密碼
查看登陸的用戶
命令whoami顯示當前用戶
命令who顯示有哪些用戶已經登陸系統
命令w顯示有哪些用戶已經登陸並且在干什么
相關文件
/ect/passwd -保存用戶信息 /ect/shadow -保存用戶密碼 /ect/group -保存組信息 /etc/gshadow -保存組的密碼信息
#/etc/passwd中每個字段的作用
#/etc/shadow結構
#創建、修改、刪除用戶

創建一個用戶 命令useradd用以創建一個新用戶 useradd+名字(如nash su) 這個命令會執行以下操作: 1.在/etc/passwd中添加用戶信息 2.如果使用passwd命令創建密碼,則將密碼加密保存在etc/shadow中 3.為用戶建立一個新的家目錄/home/nash su 4.將/ect/skel中的文件復制到用戶的家目錄中 5.建立一個與用戶用戶名相同的組,新建用戶默認屬於這個同名組 命令useradd支持以下參數: -d 家目錄 -s 登陸shell -u user id g 主族 -D 附屬組(最多31個,用逗號分隔) 也可以通過直接修改/etc/passwd 的方式實現,但是不建議 修改用戶信息 命令usermod用來修改用戶信息 usermod+參數+你要修改的東西 usermod 參數 username 命令usermod支持以下參數 -l 新用戶名 -u 新userid -d 用戶家目錄位置 -g 用戶所屬主組 -G 用戶所屬附屬組 -L 鎖定用戶使其不能登陸 -U 解除鎖定 刪除用戶 命令userdel用以刪除指定用戶: userdel nash su (保留用戶的家目錄) userdel -r nash su (同時刪除用戶的家目錄) del是delete的簡寫 批量創建用戶: for i in{1..50} do useradd user$i done
#用戶的相關文件
/etc/skel /etc/login.defs /etc/default/useradd
#用戶組
幾乎所有操作系統都有組的概念,通過組,我們可以更加方便的歸類、管理用戶。一般來講,我們使用部門、職能或地理區域的分類方式來創建使用組。 一每個組有一個組ID 二.組信息保存在/etc/group中 三.每個用戶擁有一個主組,同時還可以擁有最多31個附屬組 創建、修改、刪除組 命令groupadd用以創建組: groupadd+組名 命令groupmod用以修改組信息: groupmod -n newname 原來的組name 修改組名 groupmod -g newGid oldGid 修改組ID 命令groupdel用以刪除組: groupdel +組名
2.5.文件大小
#給1.txt創建一個軟鏈接 [root@cots3 ~]# ln -s 1.txt aa.txt [root@cots3 ~]# ls -l aa.txt lrwxrwxrwx 1 root root 5 Mar 4 23:29 aa.txt -> 1.txt
#提示:創建軟鏈接的時候,文件的大小不一樣
2.6.時間戳
#7、8、9三列是時間(默認是修改時間)
modify 修改 對應的是 -mtime 一般是修改文件內容時候改變 change 改變時間 -ctime 文件屬性改變 access 訪問時間 -atime 訪問文件內容時候改變
#演:時間的變化
[root@cots3 ~]# touch guo.txt [root@cots3 ~]# stat guo.txt File: ‘guo.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 33574991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-03-04 23:26:28.523104035 -0500 Modify: 2020-03-04 23:26:28.523104035 -0500 #開始時間 Change: 2020-03-04 23:26:28.523104035 -0500 #開始時間 Birth: - [root@cots3 ~]# echo aa > guo.txt [root@cots3 ~]# stat guo.txt File: ‘guo.txt’ Size: 3 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 33574991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-03-04 23:26:28.523104035 -0500 Modify: 2020-03-04 23:26:41.455206922 -0500 #時間變了 Change: 2020-03-04 23:26:41.455206922 -0500 #時間變了 Birth: -
#如果想要格式化屬性時間的話就使用
[root@cots3 ~]# ls -l --time-style=long-iso 1.txt -rw-r--r-- 1 root root 104 2020-02-29 09:43 1.txt
2.7.文件名
#文件名不在inode里,而是在上級目錄的Block里