linux下有很多指令。當我們使用ls -l的時候,可以檢視檔案的資訊,不止有檔名,還有檔案元資料。
[root@dreame ~]# ls -l
總用量 48
-rwxr-xr-x 1 root root 8512 3月 30 15:13 a.out
drwxr-xr-x 2 root root 4096 3月 30 15:36 desktop
drwxr-xr-x 2 root root 4096 3月 30 15:36 documents
drwxr-xr-x 3 root root 4096 4月 15 12:55 downloads
drwxr-xr-x 2 root root 4096 3月 30 15:36 music
drwxr-xr-x 2 root root 4096 3月 30 15:36 pictures
drwxr-xr-x 2 root root 4096 3月 30 15:36 public
drwxr-xr-x 2 root root 4096 3月 30 15:36 templates
-rw-r--r-- 1 root root 74 3月 30 15:13 test.c
drwxr-xr-x 2 root root 4096 3月 30 15:36 videos
每行包含七列:
(1)模式
(2)硬鏈結數
(3)檔案所有者
(4)組
(5)大小
(6)最後修改時間
(7)檔名
我們看看ls的工作原理:
ls -l讀取儲存在磁碟上的檔案資訊,然後顯示出來,除了ll其實還有乙個stat命令也可以查案到更多資訊
[root@dreame ~]# stat a.out
檔案:"a.out"
大小:8512 塊:24 io 塊:4096 普通檔案
許可權:(0755/-rwxr-xr-x) uid:( 0/ root) gid:( 0/ root)
最近訪問:2018-03-30 15:13:49.062068097 +0800
最近更改:2018-03-30 15:13:47.608068097 +0800
最近改動:2018-03-30 15:13:47.608068097 +0800
這裡我們要了解一下inode超級塊:存放檔案本身的結構資訊
i節點表:存放檔案屬性,如 檔案大小,所有者,最近修改時間等
資料區:存放檔案內容
將屬性和資料分開存放的想法看起來很簡單,但實際上是工作方式確實很使用的,如下
刪除檔案比複製檔案快,因為直接從位圖里抹去相應位元位
建立乙個新檔案主要有一下4個操作:
1.儲存屬性
核心先找到乙個空閒的節點,核心把檔案記錄到其中
2.儲存資料
該檔案需要儲存三個磁碟塊,核心找到了三個空閒塊,300,500,800,將核心緩衝區的第一塊資料複製到300,下一塊複製到500,以此類推。
3.記錄分配情況
檔案內容按順序300,500,800存放。核心在inode上的磁碟分布記錄了上述塊列表
4.新增檔名到目錄
核心新的檔名入口即inode和檔名一起新增到目錄檔案。檔名和inode之間的對應關係將檔名和檔案的內容及屬性連線起來。
硬鏈結由此發現,真正找到磁碟上檔案的並不是檔名,而是inode。不過在linux中可以讓多個檔名對應於同乙個inode。
syf@dreame csdn]$ touch abc
[syf@dreame csdn]$ ln abc def
[syf@dreame csdn]$ ls -li abc def
533674 -rw-rw-r-- 2 syf syf 0 4月 21 19:57 abc
533674 -rw-rw-r-- 2 syf syf 0 4月 21 19:57 def
abc和def的連線狀態完全相同,他們被指向檔案的硬鏈結。核心記錄了這個鏈結數,inode533674的硬鏈結數為2.
軟鏈結硬鏈結是通過inode引用另乙個檔案,軟鏈結是通過名字引用另外乙個檔案
[syf@dreame csdn]$ ln -s abc abc.s
[syf@dreame csdn]$ ll
總用量 28
-rw-rw-r-- 2 syf syf 0 4月 21 20:01 abc
lrwxrwxrwx 1 syf syf 3 4月 21 20:02 abc.s -> abc
-rwxrwxr-x 1 syf syf 8808 4月 21 11:11 a.out
-rw-rw-r-- 2 syf syf 0 4月 21 20:01 def
[syf@dreame csdn]$ stat abc
檔案:"abc"
大小:0 塊:0 io 塊:4096 普通空檔案
許可權:(0664/-rw-rw-r--) uid:( 1000/ syf) gid:( 1000/ syf)
最近訪問:2018-04-21 19:57:19.019077321 +0800
最近更改:2018-04-21 20:01:27.238089161 +0800
最近改動:2018-04-21 20:01:27.238089161 +0800
acm:
access:最後訪問時間
mondify:檔案內容最後修改時間
change:屬性最後修改時間
動態庫和靜態庫
靜態庫(.a):程式在編譯連線的時候把庫的**鏈結到可執行檔案中。程式執行的時候將不再需要靜態庫
動態庫(.so):程式在執行的時候才去鏈結動態庫的**。多個程式共享使用庫的**。
生成靜態庫
[syf@dreame static]$ ar -rc libmath.a add.o sub.o
[syf@dreame static]$ ls
add.c add.h add.o libmath.a sub.c sub.h sub.o
syf@dreame test]$ gcc -o main main.c -l. -lmath
編譯選項:
l:鏈結庫,只要庫名即可(去掉lib以及版本號)
l:鏈結庫所在的路徑
生成動態庫
[root@dreame so]# ls
add.c add.h sub.c sub.h
[root@dreame so]# gcc -fpic -c sub.c add.c
[root@dreame so]# ls
add.c add.h add.o sub.c sub.h sub.o
[root@dreame so]# gcc -shared -o libmymath.so *.o
編譯選項:
l:鏈結動態庫庫,只要庫名即可(去掉lib以及版本號)
l:鏈結庫所在的路徑
執行動態庫:
1、拷貝.so檔案到系統共享路徑下,一般指/usr/lib
2、更改ld_library_path
linux 檔案系統 Linux 檔案系統結構介紹
ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...
Linux檔案系統
linux目錄結構 根目錄 bin 可執行檔案目錄 boot 核心引導檔案 vmlinuz,initrd.img等 dev 裝置檔案儲存目錄,應用程式對這些檔案讀寫和控制可訪問實際裝置 etc 系統配置和一些伺服器配置檔案的位置,如帳號及密碼配置檔案。home 普通使用者目錄 lib 庫檔案目錄 l...
Linux檔案系統
之前對磁碟分割槽已經有了詳細的描述,這篇主要介紹檔案系統 linux的檔案系統是出了名的 下面就 大概介紹下 可以把檔案系統大概分成 superblock inodeblock datablock 三部分 superblock superblock記錄檔案系統的基本資訊比如每塊資料塊的大小,空閒磁碟...