文件系統各個列的含義
[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
第一列: inode(index node) 索引節點編號;它是文件或目錄在磁盤裏的唯一標識,linux讀取文件首先要讀取到這個索引節點
第二列:
第1個字符,代表文件類型,-普通文件 d目錄
第2-10個字符,rw-r--r-- 文件權限(r w x)讀 寫 執行 -代表沒有
第11個字符, . SELINUX相關
第三列: 文件的硬鏈接數,硬鏈接是文件的又一個入口
第四列: 文件對應的屬主或者用戶
第五列: 文件對應的屬組或者用戶組(團體)
第六列: 文件的大小
第七八九列: 文件被改動的時間
第十列: 文件和目錄的名字
inode與block詳解
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
Block和Inode知識點小節:
1)磁盤分區格式化爲ext4文件系統後會生成一定數量的inode和block
2)inode是索引節點,作用是存放文件的屬性信息以及作爲文件的索引(指向文件的實體block)
3)ext3/ext4文件系統的block存放的是文件的實際內容
4)inode是一塊磁盤存儲空間,C6、C7非啓動分區inode默認大小爲256字節,C5是128字節
5)inode是一串數字,不同的文件對應的inode在文件系統裏是唯一的
6)inode相同的文件,互爲硬鏈接文件
7)一個文件被創建後至少要佔用一個inode和一個block
8)block的大小一般有1K,2K,4K幾種,其中引導分區等爲1K,其他普通分區爲4K(C6)
9)如果一個文件很大,可能佔多個block
10)如果文件很小,至少佔一個block,並且剩餘空間不可以使用了,例如:block爲4K,存放的文件1K,剩餘3K就浪費了。
11)inode,block數量和大小查看:
dumpe2fs /dev/sda3|egrep -i "Inode count|block count"
dumpe2fs /dev/sda3|egrep -i "Inode size|block size"
12)mkfs.ext4 -b2048 -I256 /dev/sdb 指定生成的inode大小(沒必要修改)
13)磁盤讀取數據是按block爲單位讀取的
14)一個文件可能佔用多個block,每讀取一個block就會消耗一次磁盤I/O
15)block太大,文件小就會浪費磁盤空間;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、硬鏈接文件就是文件的另一個入口,可以通過給文件設置硬鏈接文件,來防止重要文件被誤刪
6、ln + 源文件+ 目標文件 創建一個硬鏈接 目錄不能用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_count加1),進程調用
文件刪除的條件:
i_link=0 and i_count=0
軟鏈接
1)軟鏈接類似於windows的快捷方式(可以通過readlink查看其指向)
2)軟鏈接類似一個文本文件,裏面存放的是源文件的路徑,指向源文件實體
3)刪除源文件,軟鏈接依然在,但是無法訪問指向的源文件內容了,失效一般是紅色閃爍提示
4)ln -s 源文件 軟鏈接文件 創建一個軟鏈接 目錄能用ln來創建軟鏈接
5)軟鏈接和源文件是不同的文件,inode號不同
6)rm 刪除軟鏈接
創建一個軟鏈接:
[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
用戶和用戶組
UID和GID
用戶的角色是通過UID和GID識別的
UID=user Identify 用戶ID,相當於×××
GID=group Identify 組ID,相當於家庭
用戶的分類
用戶分爲3類:
1、超級用戶:root uid=0 gid=0,uid爲0的用戶爲超級用戶
2、虛擬用戶:存在linux中,滿足文件或者程序運行的需要而創建的。多數不能登錄,不能使用 uid,gid=1-499
3、普通用戶:uid,gid == 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註釋掉帳號
修改登錄shell爲nologin,useradd -s /sbin/nologin users
用passwd鎖定密碼,passwd –l users
usermod賬戶過期等方式來停掉帳號,待以後處理
groupdel
略
usermod
絕大部分參數和useradd一樣
-L 凍結用戶的密碼 -U 取消凍結
查詢用戶相關信息的命令
id、finger已經不裝了、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命令查看時間等的屬性
正則表達式*****
什麼是正則表達式?
正則表達式就是爲處理大量的字符串而定義的一套規則和方法
通過定義的這些特殊符號的輔助,可以實現快速過濾,替換或輸出需要的字符串。
正則表達式分類
1)linux正則表達式(grep,awk,sed)
2)PHP,JAVA,PERL,PYTHON(Perl兼容的正則)
正則表達式注意事項
1、 正則表達式和通配符*是有本質區別的
2、 linux正則表達式一般以行爲單位處理的
3、 alias grep='grep --color=auto'別名設置顏色可以更準確的看到匹配結果
4、 注意字符集,export LC_ALL=C
基礎正則表達式
舉例:
1)^word 搜索以word開頭的
2)word$ 搜索以word結尾的
3)^$ 表示空行
4). 代表任意一個字符
5)\ 轉義符
6)* 重複0個或多個前面的一個字符
7).* 匹配所有
8)[abc] 匹配字符集合內的任意一個字符[a-z],[0-9]。
9)[^abc] 匹配不包含^後的任意字符的內容
中括號裏的^爲取反,注意和以...開頭區分
10)a\{n,m\} 重複前面n到m次;前一個重複的字符,如果用egrep/(sed -r) 可以去掉斜線
\{n,\} 重複至少n次;前一個重複的字符,如果用egrep/(sed -r) 可以去掉斜線
\{n\} 重複n次,如果用egrep/(sed -r) 可以去掉斜線
\{,m\} 重複最多m次,。。。。。。。。。。
注意:egrep,grep -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
擴展正則
擴展正則:ERE(egrep或grep -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的權限才能執行,
3、root都可以執行
linux目錄的讀、寫、執行權限說明:
r---表示具有瀏覽目錄下面文件及子目錄的權限,即ls dir(不能進到目錄裏,無法cd dir)
如果沒有x權限,ls時可以看到文件名,但是無法看到裏面文件的屬性
w---表示具有增加、刪除或修改目錄內文件名的權限(需要x權限配合)
x---表示具有進入目錄的權限,但是沒有r權限無法列表,沒有w無法新建和刪除
文件權限體系(八進制權限)
r read 可讀 4
w write 可寫 2
x execute 執行 1
- 沒有 0
權限的修改
1、chmod [數字組合] 文件名
[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知識小結:針對命令和二進制程序的
1)suid位的作用就是讓普通用戶在執行一條命令的時候,擁有這條命令對應的用戶(屬主)的權限
2)用戶或屬主對應的前三位權限的x位上如果有s就表示suid權限,當x位上沒有x執行權限的時候suid就顯示爲大S
setgid
setgid知識總結:瞭解
1)與suid不同的是,sgid既可以針對文件也可以針對目錄設置
2)sgid是針對用戶組權限位修改的
對於文件來說,sgid的功能如下:
1、sgid僅對二進制命令程序有效
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