Linux文件、目錄屬性

来源:https://www.cnblogs.com/randolf/archive/2019/01/23/10309765.html
-Advertisement-
Play Games

文件、目錄屬性 可能有人覺得,文件這東西這麼普通有什麼好講的,,,其實不然,在linux中 一切皆文件 ,搞清楚文件的本質,將對我們大有裨益。 文件、目錄屬性簡介 舉個例子 先說一下命令的選項, i: inode(節點) h: human readable(人眼易讀的) l: 顯示長信息(詳細信息) ...


文件、目錄屬性

可能有人覺得,文件這東西這麼普通有什麼好講的,,,其實不然,在linux中一切皆文件,搞清楚文件的本質,將對我們大有裨益。

文件、目錄屬性簡介

舉個例子

randolf@localhost:~/pytest/pythondemo $ ls -lih
總用量 16K
  105674 drwxrwxr-x. 4 randolf randolf  160 1月  21 17:58 appium
33870718 drwxrwxr-x. 2 randolf randolf  235 1月  21 17:58 beautifulsoup
16800015 drwxrwxr-x. 2 randolf randolf  110 1月  21 17:58 cnki

先說一下命令的選項,-i: inode(節點) -h: human-readable(人眼易讀的) -l: 顯示長信息(詳細信息)
第一列:索引節點號(系統通過inode找到文件內容,類似於我們通過身份證號查找個人信息)
第二列:類型及許可權屬性(第1個字元為文件類型,後9個字元是許可權信息),如果一個目錄,具有可執行許可權,則意味著可以進入這個目錄。 第三列:硬鏈接數
第四列:文件或者目錄所屬用戶
第五列:文件或者目錄所屬用戶
第六列:文件或者目錄的大小
第七八九列:文件或者目錄的修改時間;按照月、時、分鐘的順序
第十列:實際的文件名或者目錄名(不算文件屬性)

屬性深入解讀

1. 索引節點(index node)與block數據存儲

一塊新的硬碟 ->分區(打隔斷)->格式化系統 ->存數據

格式化文件系統(ext4、xfs)後,一般會有兩部分:inode與block.

1.inode就是用來存放屬性信息的,即ls -l的內容(不包括最後一列的文件名,文件名不算屬性)

2.流程:inode(ls -l) -->文件屬性,是否具有對文件或者目錄的相應許可權 -->block中文件的數據內容

3.也可以通過stat filename查看文件詳細信息

4.inode大小:centos5 中128位元組,centos7中預設256位元組

格式化以後inode大小無法改變(格式化後inode和blocK分配的數量固定,所以磁碟滿了有兩種情況:inode用完了,block不夠用)。

5.inode具有唯一性,inode相同的文件互為硬鏈接文件,其實就是同一個文件的不同入口。

1.block存儲實際數據,單個block大小一般為1k、2k,4k等幾種。其中引導分區一般1k,其他普通分區一般為4k.

2.一個block只能存放一個文件的內容,無論文件有多小。如果一個block為4k存放的文件是1k,那麼剩餘的3k就浪費了。所以說,block並不是越大越好。

3.根據實際需求設置block大小,大文件多就設置block大一些,小文件多一些,就設置block小一點。

4.block的大小在格式化分區時設置:mkfs.ext4 -b 2048 -I 256 /dev/sdb -b設置block大小,-I設置inode大小。

5.centos5和centos6文件系統為ext3/ext4,centos7文件系統為xfs.

2.文件類型

文件類型 描述
d(directory) 目錄文件,目錄是一個特殊的文件
-(regular file) 表示這是一個普通的文件
l(link) 符號鏈接文件,實際上指向另一個文件
b(block) 塊設備和其他外圍設備,特殊類型文件
c(character) 字元設備文件
s(socket) 表示socket文件
p(named pipe) 表示管道文件

前四個是重點,也是常見文件類型,後面三個基本用不到。

3.許可權屬性

rwxr-xr-x為例,三位為一組,前三位為用戶許可權位,中間三位是屬組許可權位,後三位是其他人許可權。

r :read 讀 4;w :write 寫 2;x :excute 執行 1; - 沒有許可權 0

4.用戶與組屬性簡介

Linux中角色決定許可權,角色不同,許可權和完成的任務也不同;在linux中由UID唯一標記一個用戶,由GID唯一標記一個用戶組。


用戶簡單分類
  • 超級用戶:即root用戶(系統管理員),擁有至高無上的許可權,其UID和GID都為0。

  • 普通用戶:通過useradd創建,只能操作自己家目錄下的文件,要想做超越許可權的事情,可以利用sudo進行提權或者直接切換到管理員身份su - root

  • 虛擬用戶 : 安裝系統後預設存在的,這些傀儡用戶大多不能登錄系統,他們存在的意義主要在於方便系統管理,滿足相應的系統進程對屬主的要求,如下,以nologin結尾的就是所謂的虛擬用戶。

    randolf@localhost:~ $ cat  /etc/passwd|head -4
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
與用戶[組]相關的文件
  • /etc/passwd

    randolf@localhost:/ $ sudo cat /etc/passwd |head -2
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin

    各個欄位分別代表:用戶名、密碼(x)、UID、GID、註釋、用戶的家目錄、用戶所使用的預設shell

    用戶密碼被重定向到了shadow文件,所以用x來表示。

  • /etc/shadow

    randolf@localhost:/ $ sudo cat /etc/shadow | tail -2
    randolf:$6$./CktF0O$giEudjhAawSmBjkt.opCVs2Q3ERXNJWsZZnGvQ4QEkbK5nGRkKH1PrAa4HuRwCDPYTAUrdvZOPSzlW1Jm0M.W/:17912:0:99999:7:::
    bash:$6$nhdotNEp$cufcTHgYi.9OjPI6ky1zh1EPbAGH7hWZjodfSlzAdeV5R1AKefxIifceFr/R6lskGkw1nemBTH422o9x14wOK.:17912:0:99999:7:::
    

    各個欄位分別表示:1.用戶名、2.密碼、3.時間戳、4.過多久可以修改密碼(為0則表示可以立即修改密碼)、5.密碼使用期限、6.距離到達最長使用時間多久提示修改密碼 、7.到達使用期限後的多少天仍然可以登錄,但是必須修改密碼

    密碼是經過加密的,如果密碼位顯示!!,則表示該用戶未設置密碼,禁止登錄。

    時間戳是指,從1970-01-01到最近一次修改密碼所經過的時間。

  • /etc/group

    randolf@localhost:/ $ cat /etc/group|head -3
    root:x:0:
    bin:x:1:
    daemon:x:2:
  • /etc/gshadow

    randolf@localhost:/ $ sudo cat /etc/gshadow|head -3
    [sudo] randolf 的密碼:
    root:::
    bin:::
    daemon:::

5.時間屬性

1.這個可說的東西不多,首先看看顯示格式

#一般的長格式顯示
randolf@localhost:/tmp $ ls -l
總用量 8
-rw-r--r--. 1 root root 43 1月  17 03:45 date.txt
-rw-r--r--. 1 root root 28 1月  22 17:40 file2.txt
#控制時間的格式,使用--time選項
randolf@localhost:/tmp $ ls -l --time-style=long-iso
總用量 8
-rw-r--r--. 1 root root 43 2019-01-17 03:45 date.txt
-rw-r--r--. 1 root root 28 2019-01-22 17:40 file2.txt

似乎好看一點,,哈哈,其實有時候篩選欄位會用到他的。

2.使用stat命令查看文件的時間屬性

randolf@localhost:/tmp $ stat date.txt
  File: 'date.txt'
  Size: 43          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 16777289    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-17 03:45:01.155796938 +0800
Change: 2019-01-17 03:45:01.155796938 +0800
 Birth: -

從這裡我們可以查看到文件包括訪問時間、修改時間,改變時間在內的詳細信息。如果是小白看到這裡可能要蒙圈了,“修改時間和改變時間有區別???”,其實這裡“修改時間”指的是我們對文件做了修改,“改變時間”則是指文件的狀態發生了變化,比如文件大小,再比如文件擁有者或屬組發生變化,概括來說就是我們文件的屬性發生變化,則這個ctime就發生變化。下麵舉個慄子:

#當前目錄下有個叫做date.txt的文件,來看一下他們的初始時間屬性
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-17 03:45:01.155796938 +0800
Change: 2019-01-17 03:45:01.155796938 +0800
Birth: -
#向文本中追加內容
[root@localhost tmp]# echo `date` >> date.txt
#再次查看文件時間屬性
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-23 15:58:07.939618364 +0800
Change: 2019-01-23 15:58:07.939618364 +0800
 Birth: -

我們向文本中追加內容後,其大小也發生變化,因此mtime與ctime同時發生變化。

再舉個例子:

[root@localhost tmp]# chown randolf:randolf date.txt
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-23 15:58:07.939618364 +0800
Change: 2019-01-23 16:16:30.692778301 +0800
 Birth: -

我們改變其擁有者和數組,發現只改變了ctime,而mtime並未發生改變,可見mtime改變了ctime一定改變(文件大小屬性變化),而ctime改變時,mtime卻不一定發生改變。

6.最後一列文件名不算是文件屬性,所以它並不在inode裡面,而是存放在block中。


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

-Advertisement-
Play Games
更多相關文章
  • 關於轉換問題,剛開始我需要從資料庫讀出一個二進位數據流,並將其轉換成一個Image格式。 在不涉及資料庫的情況下,我先將一個圖片轉換成一個二進位數組顯示出來,再寫一個方法將其轉換成圖片image格式。 一、 先不涉及資料庫,將圖片轉換成二進位,在將二進位轉換成圖片。 第一步,我將圖片轉換成二進位數組 ...
  • ASP.NET Core是微軟ASP.NET Web框架的最新版本。於2016年6月發佈,相比之前ASP.NET有很多增量更新。 ASP.NET Core通過進行重大的體繫結構調整來提高開發人員的工作效率和向後相容性。重新設計Web框架和構建方式。 ASP.NET Core很多功能來至之前ASP.N... ...
  • 最近閑餘時間在做一個仿百度網盤的項目,其中就有一個上傳文件夾的功能。查了下網上好像對這個問題的描述比較少,所以在此記錄一下。 1、網上找來找去發現webkitdirectory這個東西,H5的一個新的屬性吧,就是在文件控制項上標記這個屬性可以獲取到選擇文件夾里的所有文件的。 特地看了下百度網盤網頁版也 ...
  • 1.問題 今天在使用docker掛載redis的時候老是報錯 然後一直報錯: 2.排查過程 查看日誌也是這樣 然後我把使用配置文件的地方去掉 然後進入容器 然後進入掛載的文件夾下 發現報錯: 也就是沒有許可權 3.原因以及解決方案 3.1 原因 centos7中安全模塊selinux把許可權禁掉了 3. ...
  • 本軟體本是練習、討論爬蟲技術所用。如果侵犯了您的利益請聯繫我,我會立即刪除! 小工具安裝包: 百度網盤鏈接:https://pan.baidu.com/s/1m_OuEBOEE47kYaXq5fwpIg 提取碼:w4p1 下麵附上源碼,如有不同意見還請賜教! 百度網盤鏈接:https://pan.b ...
  • VS一直停留在“正在還原nuget程式包” 在開發中,運行不同版本的vs會顯示還原nuget程式包,還原需要不短的時間,並且不一定還原成功。 或者其他什麼原因導致需要還原nuget程式包,這樣很煩的有木有。 我們只需要去掉【允許NuGet下載缺少的程式包】就行了。 如下截圖: 這樣再次運行就不會出現 ...
  • 一.概述 ASP.NET Core 支持適用於各種內置和第三方日誌記錄, 供程式的日誌記錄 API,本文介紹瞭如何將日誌記錄 API 與內置提供程式一起使用。對於第三方日誌記錄提供程式使用,文章最後有鏈接。 1.1 添加內置日誌提供程式 日誌記錄提供程式能夠用於顯示日誌信息或存儲日誌,比如控制台提供 ...
  • 1.TCP連接(短鏈接和長連接) 什麼是TCP連接?TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。 當網路通信時採用TCP協議時,在真正的讀寫操作之前,server與client之間必須建立一個連接,當讀寫操作 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...