linux文件系統

文件系統各個列的含義

[root@localhost data]# ls -lhi

總用量 4.0K

400338 -rw-r--r--. 1 root root 29 5  21 16:35 wangxin.txt

400337 -rw-r--r--. 1 root root  0 5  21 15:18 yuehan.txt


第一列: inodeindex node 索引節點編號;它是文件或目錄在磁盤裏的唯一標識,linux讀取文件首先要讀取到這個索引節點

 

第二列:

1個字符,代表文件類型,-普通文件   d目錄

2-10個字符,rw-r--r--  文件權限(r w x)讀 執行  -代表沒有

11個字符, . SELINUX相關

 

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

 

第四列: 文件對應的屬主或者用戶

 

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

 

第六列: 文件的大小

第七八九列: 文件被改動的時間

第十列: 文件和目錄的名字



inodeblock詳解

linux存儲設備被格式化爲ext4文件系統後,一般被分爲2個部分:

第一部分是inode,存放實際數據的屬性信息的,還包含指向文件實體的指針的功能,文件名不是文件的屬性

第二部分是Block,存放實際數據用的

inode裏面不包含文件名

 

查看掛載的磁盤inode使用情況

[root@localhost ~]# df -i

Filesystem     Inodes IUsed  IFree IUse% Mounted on

/dev/sda3      610800 65586 545214   11% /

tmpfs          125551     1 125550    1% /dev/shm

/dev/sda1       51200    38  51162    1% /boot

查看inode大小:   CentOS6默認是256字節

[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "Inode size"

dumpe2fs 1.41.12 (17-May-2010)

Inode size:               256

 

[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size:               4096

[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size:               1024

BlockInode知識點小節:

1)磁盤分區格式化爲ext4文件系統後會生成一定數量的inodeblock

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

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

4inode是一塊磁盤存儲空間,C6C7非啓動分區inode默認大小爲256字節,C5128字節

5inode是一串數字,不同的文件對應的inode在文件系統裏是唯一的

6inode相同的文件,互爲硬鏈接文件

7)一個文件被創建後至少要佔用一個inode和一個block

8block的大小一般有1K2K4K幾種,其中引導分區等爲1K,其他普通分區爲4KC6

9)如果一個文件很大,可能佔多個block

10)如果文件很小,至少佔一個block,並且剩餘空間不可以使用了,例如:block4K,存放的文件1K,剩餘3K就浪費了。

11inodeblock數量和大小查看:

dumpe2fs /dev/sda3|egrep -i "Inode count|block count"

dumpe2fs /dev/sda3|egrep -i "Inode size|block size"

12mkfs.ext4 -b2048 -I256 /dev/sdb  指定生成的inode大小(沒必要修改)

13)磁盤讀取數據是按block爲單位讀取的

14)一個文件可能佔用多個block,每讀取一個block就會消耗一次磁盤I/O

15block太大,文件小就會浪費磁盤空間;block太小,文件大就會消耗磁盤I/O,降低磁盤訪問效率



文件類型

 -type c

        File is of type c:

 

      **b      block (buffered) special  設備文件,如硬盤,光驅

        c      character (unbuffered) special  字符設備,如串口,USB接口

   *****d      directory   目錄

        p      named pipe (FIFO)

   *****f      regular file 普通文件(純文本文件,二進制文件,數據文件)

     ***l      symbolic link   軟鏈接或者符號鏈接

擴展名   雖然沒什麼實際意義,但是習慣通過這個來區分文件的不同

.sh  shell腳本

.pl  perl語言文件

.py   python文件

.html.htm.php.jsp.do網頁語言的文件

.conf系統服務的配置文件

.rpm表示rpm安裝包文件



 

linux系統鏈接

linux系統鏈接:硬鏈接,軟鏈接或者符號鏈接

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

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

多個文件名指向同一個inode,這種情況的文件就稱爲硬鏈接,硬鏈接文件就相當於文件的另一個入口

硬鏈接

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

2、刪除硬鏈接文件之一,文件實體並未被刪除

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

4、刪除了源文件及所有對應的硬鏈接文件之後,再存放新的數據就會佔用這個文件的空間,或者磁盤fsck檢查的時候,刪除的數據也會被系統回收

5、硬鏈接文件就是文件的另一個入口,可以通過給文件設置硬鏈接文件,來防止重要文件被誤刪

6ln + 源文件目標文件  創建一個硬鏈接    目錄不能用ln來創建硬鏈接

 

創建一個硬鏈接

[root@localhost wangxin]# echo "i am wangxin linux" >wangxinfile

[root@localhost wangxin]# cat wangxinfile

i am wangxin linux

[root@localhost wangxin]# ln wangxinfile wangxinfile_hard_link

[root@localhost wangxin]# ls -li

260637 -rw-r--r--. 2 root root 18 5  21 22:28 wangxinfile

260637 -rw-r--r--. 2 root root 18 5  21 22:28 wangxinfile_hard_link

[root@localhost wangxin]# cat wangxinfile_hard_link

i am wangxin linux

文件刪除控制的變量:

i_link  文件的硬鏈接數量

i_count  引用計數(有一個程序使用i_count1),進程調用

文件刪除的條件:

i_link=0 and i_count=0

軟鏈接

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

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

3)刪除源文件,軟鏈接依然在,但是無法訪問指向的源文件內容了,失效一般是紅色閃爍提示

4ln -s   源文件   軟鏈接文件    創建一個軟鏈接          目錄能用ln來創建軟鏈接

5)軟鏈接和源文件是不同的文件,inode號不同

6rm 刪除軟鏈接

 

 

 

創建一個軟鏈接:

[root@localhost wangxin]# touch wangxinfile

[root@localhost wangxin]# ln -s wangxinfile  wangxinfile_soft_link

[root@localhost wangxin]# ll

總用量 0

-rw-r--r--. 1 root root  0 5  22 00:06 wangxinfile

lrwxrwxrwx. 1 root root 10 5  22 00:07 wangxinfile_soft_link -> wangxinfile

[root@localhost wangxin]# ls -li

總用量 0

260637 -rw-r--r--. 1 root root  0 5  22 00:06 wangxinfile

260644 lrwxrwxrwx. 1 root root 10 5  22 00:07 wangxinfile_soft_link -> wangxinfile

[root@localhost wangxin]# readlink wangxinfile_soft_link

wangxinfile

 

文件的鏈接小結

1、刪除軟鏈接對源文件及硬鏈接文件無任何影響

2、刪除硬鏈接對源文件及軟鏈接文件無任何影響

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

目錄鏈接小結:

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

2、目錄的硬鏈接不能跨越文件系統

3、每個目錄下面都有一個硬鏈接“.”號,和對應上級目錄的硬鏈接“..

4、在父目錄裏創建一個子目錄,父目錄的鏈接數增加1(子目錄裏都有..來指向父目錄)

 

 

企業生產目錄軟鏈接作用

1、編譯軟件時指定版本號(/application/apache2.2.23),訪問時希望去掉版本號(/application/apache,

可以設置軟鏈接到編譯的路徑。所有程序都訪問軟鏈接文件(/application/apache),當軟件升級高版本後,

只需刪除鏈接文件重建到高版本路徑的軟鏈接即可(/application/apache)。

2、企業代碼發佈時(PHP程序),需要把所有代碼傳到一個新的臨時目錄或者新的站點目錄。發佈時要麼

一個mv,也可以重建軟鏈接指向到這個新的臨時目錄或者新的站點目錄。

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


用戶和用戶組

UIDGID

用戶的角色是通過UIDGID識別的

UID=user Identify        用戶ID,相當於×××

GID=group Identify       ID,相當於家庭

用戶的分類

用戶分爲3類:

1、超級用戶:root  uid=0 gid=0uid0的用戶爲超級用戶

2、虛擬用戶:存在linux中,滿足文件或者程序運行的需要而創建的。多數不能登錄,不能使用 uid,gid=1-499

3、普通用戶:uidgid == 500-65535

用戶相關的配置文件

/etc/passwd 

/etc/group 

/etc/shadow 

/etc/gshadow

[root@localhost ~]# ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow

-rw-r--r--. 1 root root  605 5  22 01:18 /etc/group

----------. 1 root root  495 5  22 01:18 /etc/gshadow

-rw-r--r--. 1 root root 1148 5  22 01:18 /etc/passwd

----------. 1 root root  953 5  22 01:19 /etc/shadow

 

passwd文件中一行的各個字段簡述:

kingroll :x     :501    :501    :           :/home/kingroll     :/bin/bash

帳號  密碼   UID     GID   用戶說明     用戶家目錄      shell解釋器

 

shadow文件中一行的各個字段簡述:

密碼相關的參數,名稱,帳號,更改時間等

 

group文件中一行的各個字段簡述:

用戶組名。用戶組密碼,GID,用戶組成員

 

gshadow文件中一行的各個字段簡述:

用戶組名,用戶組密碼,用戶組管理員帳號,用戶組成員

 

PS:以上4個都不重要,只需要瞭解即可

/etc/skel

存放新用戶配置文件的目錄  當添加了一個新用戶後,此目錄下的文件複製到新用戶的/home/users目錄下

/etc/default/useradd

root@localhost ~]# cat /etc/default/useradd

# useradd defaults file

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

用戶和用戶組管理命令

useradd

useradd關聯的文件,useradd修改的文件:

/etc/passwd   /etc/shadow  /etc/group   /etc/gshadow

默認行爲控制

/etc/default/useradd

/etc/login.defs

useradd   選項參數

useradd -e "2017/06/01"  users   users帳號停止日期爲2017/06/01

useradd -g    指定屬於什麼用戶組  -M不創建家目錄

useradd -D ==vim /etc/default/useradd

 

groupadd

/etc/group    -用戶組相關文件

/etc/gshadow  -用戶組加密相關文件

默認行爲:

/etc/login.defs

groupadd  -g   指定GID   groupadd -newgroups -g 888

passwd

passwd  --stdin   stdin讀入密碼

echo 123456|passwd --stdin wangxin   wangxin密碼從stdin讀入,修改爲123456

 

chage

chage -E "2017/06/11"  wangxin      修改wangxin賬戶過期時間爲2017/06/11

chage -l   顯示賬戶年齡信息

 

userdel

/etc/passwd --用戶帳號資料文件

/etc/shadow --用戶帳號資訊加密文件

/etc/group  --用戶組資訊文件

userdel -r 遞歸刪除,連目錄一起刪掉  userdel -r wangxin  不要輕易用-r

 

管理多餘帳號,可以用以下方式來處理

進入/etc/passwd註釋掉帳號

修改登錄shellnologinuseradd -s /sbin/nologin users

passwd鎖定密碼,passwd –l users

usermod賬戶過期等方式來停掉帳號,待以後處理

 

groupdel

usermod

絕大部分參數和useradd一樣

-L 凍結用戶的密碼  -U  取消凍結

查詢用戶相關信息的命令

 

idfinger已經不裝了、groups顯示當前用戶的組

w - Show who is logged on and what they are doing.

[root@localhost ~]# w

 18:26:31 up 1 day, 11:56,  1 user,  load average: 0.00, 0.00, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    192.168.163.1    12:29    0.00s  0.60s  0.00s w

who - show who is logged on

[root@localhost ~]# who

root     pts/0        2017-05-31 12:29 (192.168.163.1)

users

[root@localhost ~]# users

root

id 查看用戶基本信息     id   root

last  用戶登錄和登錄過的記錄列表  

lastlog  用戶登錄過的日誌

users,groups,newgrp  瞭解

su

su -c  以某個用戶的身份執行命令,執行之後切換到當前用戶

分用戶方案啓動服務命令

su - users -c '/bin/sh /home/users/bin/deploy.sh'

sudo

sudo的配置文件/etc/sudoers

sudo -l  查看用戶在主機上可用和被禁止的命令

visudo========vi /etc/sudoers

visudo -c檢查語法是否正確

 

主機別名Host_Alias    一個別名對應多個主機

用戶別名User_Alias    ……………………用戶

命令別名Cmnd_Alias   ……………………命令

角色別名Runas_Alias   ……………………角色

  root           ALL             =(ALL)            ALL

User_Alias    Host_Alias      Runas_Alias       Cmnd_Alias

 

sudo配置文件/etc/sudoers授權規則注意事項總結:

1、授權規則中的所有ALL字符串必須爲大寫字母

2、禁止的命令儘量放在後邊

3、一行內容超長可以用‘\’換行

4、“!”歎號表示非,就是命令取反的意思,即禁止執行的命令

5、命令爲絕對路徑

用戶和用戶組的一些常用命令

用戶和用戶組更改命令:

chgrp---change group   -R遞歸  遞歸改變目錄下的所有文件和目錄

[root@localhost ~]# chgrp incahome test.txt

[root@localhost ~]# ls -l test.txt

-rw-r--r--. 1 root incahome 7 5  30 17:06 test.txt

 

 

 

chown------change owner   -R 遞歸

chown修改用戶

[root@localhost ~]# chown wangxin test.txt

[root@localhost ~]# ls -l test.txt

-rw-r--r--. 1 wangxin incahome 7 5  30 17:06 test.txt

chown將用戶和用戶組一次性全改

[root@localhost ~]# chown wangxin.root test.txt

[root@localhost ~]# ls -l test.txt

-rw-r--r--. 1 wangxin root 7 5  30 17:06 test.txt

chown只改組

[root@localhost ~]# chown :incahome test.txt

[root@localhost ~]# ls -l test.txt

-rw-r--r--. 1 wangxin incahome 7 5  30 17:06 test.txt

PS:冒號可以用點號代替;要授權的用戶和組必須存在

設置不可修改

[root@localhost ~]# chattr +i test.txt

[root@localhost ~]# lsattr test.txt

----i--------e- test.txt

[root@localhost ~]# rm -f test.txt

rm: 無法刪除"test.txt": 不允許的操作

[root@localhost ~]# chattr +a test.txt   +a只能追加,不能刪除   

[root@localhost ~]# lsattr test.txt   

-----a-------e- test.txt


系統文件屬性的各類時間戳

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

[root@localhost ~]# ls -l --time-style=long-iso  long-iso的時間格式顯示

-rw-------. 1 root root  1073 2017-05-20 16:56 anaconda-ks.cfg

drwxr-xr-x. 2 root root  4096 2017-05-21 16:35 data

文件的時間:

Access: 訪問時間   find -atime

Modify: 修改時間,內容發生變化   find -mtime

Change: 變化時間,包含Modify,權限、用戶、用戶組改變會導致這個時間改變 find -ctime

stat命令查看時間等的屬性



正則表達式*****

什麼是正則表達式?

正則表達式就是爲處理大量的字符串而定義的一套規則和方法

通過定義的這些特殊符號的輔助,可以實現快速過濾,替換或輸出需要的字符串。

正則表達式分類

1linux正則表達式(grepawksed

2PHP,JAVA,PERL,PYTHONPerl兼容的正則)

 

正則表達式注意事項

1 正則表達式和通配符*是有本質區別的

2 linux正則表達式一般以行爲單位處理的

3 alias grep='grep --color=auto'別名設置顏色可以更準確的看到匹配結果

4 注意字符集,export LC_ALL=C

基礎正則表達式

舉例:

1^word   搜索以word開頭的

2word$   搜索以word結尾的

3^$      表示空行

4.       代表任意一個字符

5\       轉義符

6*       重複0個或多個前面的一個字符

7.*      匹配所有

8[abc]   匹配字符集合內的任意一個字符[a-z][0-9]

9[^abc]  匹配不包含^後的任意字符的內容

   中括號裏的^爲取反,注意和以...開頭區分

10a\{n,m\}   重複前面nm次;前一個重複的字符,如果用egrep/(sed -r) 可以去掉斜線

     \{n,\}    重複至少n次;前一個重複的字符,如果用egrep/(sed -r) 可以去掉斜線

     \{n\}     重複n次,如果用egrep/(sed -r) 可以去掉斜線

     \{,m\}    重複最多m次,。。。。。。。。。。

 

注意:egrepgrep -E sed -r過濾一般特殊字符可以不轉義

sed 利用正則取IP地址:

[root@localhost ~]# ifconfig eth0|sed -n '2p'|sed -r 's#.*addr:##g'|sed -r 's# B.*$##g'

192.168.163.128

[root@localhost ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*)  Bc.*$#\1#g'   

192.168.163.128

[root@localhost ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*)  Bc.*$#\1#gp'

192.168.163.128

 

擴展正則

擴展正則:EREegrepgrep -E      PS:擴展正則幾乎用不到

1+ 重複一個或多個前面的字符

2) ? 重複0個或一個前面的字符

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

4) () 找出“用戶組”字符串

3正則練習

找到stat /etc/hosts的權限  數字顯示出來

[root@localhost ~]# stat /etc/hosts

  File: "/etc/hosts"

  Size: 158             Blocks: 8          IO Block: 4096   普通文件

Device: 803h/2051d      Inode: 39          Links: 2

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2017-05-21 17:23:17.723369740 +0800

Modify: 2010-01-12 21:28:22.000000000 +0800

Change: 2017-05-20 17:03:18.055560838 +0800

[root@localhost ~]# stat /etc/hosts|sed -nr '4s#^.*\(0(.*)/-.*$#\1#gp'

644

[root@localhost ~]# stat /etc/hosts|awk -F '[0/]' 'NR==4 {print $2}'

644

[root@localhost ~]# stat /etc/hosts|sed -n '4p'|awk -F '[0/]' '{print $2}'

644

[root@localhost ~]# stat -c %a /etc/hosts     直接用命令參數取出來

644


時間date

[root@localhost ~]# date

2017 05 22 星期一 10:44:45 CST

[root@localhost ~]# date +%F

2017-05-22

[root@localhost ~]# date +%y-%m-%d

17-05-22

[root@localhost ~]# date +%Y-%m-%d

2017-05-22

[root@localhost ~]# date +%Y-%m-%d\ %H:%M:%S

2017-05-22 10:47:11

[root@localhost ~]# date +%F\ %T

2017-05-22 10:48:04

date -d的使用 顯示以前或者未來的時間

[root@localhost ~]# date +%F

2017-05-30

[root@localhost ~]# date +%F -d "-1day"

2017-05-29

[root@localhost ~]# date +%F -d "+1day"

2017-05-31

date –s 修改時間

[root@localhost ~]# date -s 2018-03-06

Tue Mar  6 00:00:00 CST 2018

[root@localhost ~]# date -s "2018-03-06 10:44:59"

Tue Mar  6 10:44:59 CST 2018


linux權限

linux普通文件的讀、寫、執行權限說明:

r:表示具有讀取文件內容的權限

w:表示具有新增、修改文件內容的權限

(如果沒有r,那麼vi無法編輯,如果強制寫入內容,當前內容會被覆蓋,可用echo追加)

(特別注意:刪除文件,修改文件名等的權限是受父目錄的權限控制,和文件本身沒關係)

x:表示具有執行文件的權限

1、文件本身要能夠執行,

2、普通用戶同時還需要有r的權限才能執行,

3root都可以執行

 

linux目錄的讀、寫、執行權限說明:

r---表示具有瀏覽目錄下面文件及子目錄的權限,即ls dir(不能進到目錄裏,無法cd dir

    如果沒有x權限,ls時可以看到文件名,但是無法看到裏面文件的屬性

w---表示具有增加、刪除或修改目錄內文件名的權限(需要x權限配合)

x---表示具有進入目錄的權限,但是沒有r權限無法列表,沒有w無法新建和刪除

文件權限體系(八進制權限)

r read      可讀  4 

w write     可寫  2

x execute   執行  1

-          沒有  0

權限的修改

1chmod  [數字組合文件名

[root@localhost wangxin]# chmod 531 test.sh

 

2、字符修改權限方法:瞭解一下就行了

chmod     [用戶類型]     [+ | - | =]   [權限字符]    文件名

          u,g,o,a=all                   r,w,x,-

rw-rw-r-x=======>rwx--xr-x:

[root@localhost wangxin]# chmod u+x,g=x test.sh

案例

網站的服務用戶爲test,爲了防止******,文件與目錄的權限控制

文件和目錄給什麼權限,安全臨界點:

d  755  root  root      目錄權限755

f   644  root  root     文件權限644

 

umask

控制文件和目錄默認權限的值   修改umask的值 寫入profile永久生效,工作基本不會改動,不常用

文件  666-umask==文件創建的權限值   如果umask有奇數位  得到的值對應umask奇數位+1纔會得到準確值

目錄  777-umask==目錄創建的權限值

setuid

setuid知識小結:針對命令和二進制程序的

1suid位的作用就是讓普通用戶在執行一條命令的時候,擁有這條命令對應的用戶(屬主)的權限

2)用戶或屬主對應的前三位權限的x位上如果有s就表示suid權限,當x位上沒有x執行權限的時候suid就顯示爲大S

setgid

setgid知識總結:瞭解

1)與suid不同的是,sgid既可以針對文件也可以針對目錄設置

2sgid是針對用戶組權限位修改的

對於文件來說,sgid的功能如下:   

1sgid僅對二進制命令程序有效

2、二進制命令或程序需要有可以執行權限x

3、執行程序的任意用戶可以獲得該命令程序執行期間所屬組的權限

針對目錄的sgid可以用來設置目錄屬於同一個用戶組,設置了sgid之後不同用戶在此目錄下創建的文件就都屬於該用戶組,不同用戶之間能共享

 

粘滯位sbit

用途一般是把一個文件夾的權限都打開,然後來共享文件,像/tmp目錄一樣。生產環境一般都不使用,瞭解

[root@localhost test]# ls -ld /tmp/

drwxrwxrwt. 3 root root 4096 5  30 17:52 /tmp/

特殊權限位總結:

用戶位上x位設置    chmod 4755 test.txt    chmod u+s  test.txt

用戶組位x位設置          2755                   g+s

其他用戶x位設置          1755                   o+t

 [root@localhost ~]# locate ifconfig|head -1     一般不用

/sbin/ifconfig

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章