file
命令>$ file file0 [file1 file2 ...]
file
命令用於確認文件的類型。
在Linux
下,一般並不會嚴格按照文件擴展名來肯定文件的類型,尤爲是可執行程序每每是沒有擴展名的。
file
命令能夠查看文件的具體類型,若是是可執行程序,還會顯示其位數、連接信息等數據,以下所示:html
>$ file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d0bc0fb9b3f60f72bbad3c5a1d24c9e2a1fde775, stripped
stat
命令>$ stat file0 [file1 file2]
stat
命令用來查看文件的詳細屬性,相似於ls -l
,但它們又有所不一樣,咱們經過一個例子來詳解各個指標。node
>$ stat /bin/ls File: '/bin/ls' Size: 126584 Blocks: 248 IO Block: 4096 regular file Device: 805h/2053d Inode: 980781 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-06-12 21:03:56.231999815 +0800 Modify: 2017-03-03 02:07:22.000000000 +0800 Change: 2018-02-06 15:52:08.189466243 +0800 Birth: -
File
:文件名。
Size
:文件的大小,單位是字節。
Blocks
:文件佔用了多少個數據塊。(注意磁盤是塊設備,數據是按塊爲基本單位存儲的,而不是按照字節爲基本單位。)
IO Block
:每一個塊可以存儲多少字節的數據。
regular file
:這個字段是文件的類型。regular file
表示這是一個普通文件。
Device
:設備號。
Inode
:文件的Inode
號。Inode
是文件系統在磁盤上用來保存文件屬性數據的,裏面包含了除了文件名之外的全部文件屬性。而文件名是保存在目錄文件中的,目錄也是文件,它是用來保存文件的特殊文件。
Links
:文件的硬連接數量。
Access
:文件權限。
Uid
:文件屬主。
Gid
:文件屬組。
Access Time
:又稱atime
,表示文件的訪問時間。當文件的內容被訪問時更新此時間戳。
Modify Time
:又稱mtime
,表示文件的修改時間。當文件的內容被修改時更新此時間戳。
Change Time
:又稱ctime
,表示文件狀態修改時間。當文件的狀態(或屬性)被修改時更新此時間戳,例如修改權限、建立或刪除硬連接等等。linux
chmod
命令>$ chmod [-R] mask name
chmod
命令是用來修改文件的權限
的。
在 Linux 系統中,任何一個文件均可以被分配三個權限,即可讀
、可寫
、可執行
。
而每一個用戶對一個文件而言都至少擁有下面三個身份中的一個,即文件的擁有者
、與文件擁有者在相同的用戶組
、其餘用戶
。
那麼這三個權限與三個身份之間有着什麼樣的聯繫呢,咱們且先看一下某個文件的屬性。shell
>$ ls -l /bin/ls -rwxr-xr-x 1 root root 126584 3月 3 2017 /bin/ls
文件/bin/ls
的屬性中,第一個字段-rwxr-xr-x
就表示文件的類型和權限,咱們在後面進行詳細介紹。接下來看第三和第四兩個字段,均爲root
。第一個root
表示文件歸屬於哪一個用戶,下文稱其爲文件的「屬主」。第二個root
表示文件歸屬於哪一個用戶組,下文稱其爲文件的「屬組」。其它的字段與權限無關,咱們這裏就不展開介紹了。
接下來咱們先解釋第一個字段的含義,把-rwxr-xr-x
分爲四個部分來解讀,以下表所示:
| 段 | 含義 |
| :-: | - |
| - | 文件類型 |
| rwx | 屬主的權限 |
| r-x | 屬組的權限 |
| r-x | 其餘用戶的權限 |
表1 權限段
圖1 文件權限
文件類型中的-
表示這是一個普通文件,常見的文件類型見下表:
| 標識符 | 類型 |
| :-: | - |
| d | 文件夾 |
| - | 普通文件 |
| l | 符號連接 |
| p | 管道文件 |
| b | 塊設備文件 |
| c | 字符設備文件 |
| s | 套接字文件 |
表2 文件類型
文件權限部分共出現了4種字符,分別表示不一樣的權限,以下表所示:
| 標識符 | 八進制權重 | 權限 |
| :-: | :-: | - |
| r | 4 | 可讀 |
| w | 2 | 可寫 |
| x | 1 | 對文件表示可執行,對文件夾表示可進入 |
| - | 0 | 無此權限 |
表3 權限值
由此咱們能夠解讀出-rwxr-xr-x
表示:數據庫
這是一個普通文件;
文件的全部者對其擁有可讀、可寫、可執行的權限;
與文件全部者在相同用戶組的用戶對其擁有可讀、可執行的權限;
其它用戶擁有可讀、可執行的權限。express
權限中的 owner、group、other 的每一部分的權限分別能夠計算出一個八進制值,三個八進制值合併在一塊就能夠表示一個文件的完整權限。
如表3所示,不一樣的權限對應着一個權重值,將每一部分權限的權重值相加就能夠獲得這一部分的權重。
還用上面的/bin/ls
文件的權限爲例,它的八進制權限計算過程以下:編程
(r w x) (r - x) (r - x) (4+2+1) (4+0+1) (4+0+1) = 7 5 5
所以-rwxr-xr-x
對應的八進制權限就是755
。ubuntu
chmod
的用法有了前面的知識,咱們就能夠看下chmod
命令的用法的。它在修改文件權限的時候既可以使用八進制的形式也可以使用標識符的形式來指示權限。vim
咱們經過下面的例子使用八進制的方式將/bin/ls
文件的權限修改成「屬主可讀、屬組可讀寫、其餘用戶可執行」:安全
>$ $ sudo chmod 461 /bin/ls >$ ls -l /bin/ls -r--rw---x 1 root root 126584 3月 3 2017 /bin/ls
461權限對應的標識符是什麼呢,你們能夠根據前面學到的知識計算一下。
使用標識符的形式修改文件的權限,須要分別指定爲哪一個組別的用戶修改權限,組別使用下表的字符來表示:
| 標識符 | 組別 |
| :-: | - |
| a | 全部用戶 |
| u | 屬主 |
| g | 屬組 |
| o | 其餘用戶 |
表4 組別標識符
使用表4中的組別標識符和表3的權限標識符組合,就能夠修改對應組別的權限了。
經過下面的例子,咱們將/bin/ls
文件的權限修改成「屬主擁有可讀、可寫、可執行的權限;屬組和其它用戶均擁有可讀和和執行的權限」。
>$ ls -l /bin/ls -r--rw---x 1 root root 126584 3月 3 2017 /bin/ls >$ sudo chmod u+wx /bin/ls >$ ls -l /bin/ls -rwxrw---x 1 root root 126584 3月 3 2017 /bin/ls >$ sudo chmod g-w /bin/ls >$ ls -l /bin/ls -rwxr----x 1 root root 126584 3月 3 2017 /bin/ls >$ sudo chmod g+x /bin/ls >$ ls -l /bin/ls -rwxr-x--x 1 root root 126584 3月 3 2017 /bin/ls >$ sudo chmod o+r /bin/ls >$ ls -l /bin/ls -rwxr-xr-x 1 root root 126584 3月 3 2017 /bin/ls
上例中每一次修改咱們均可以看到對應的權限發生了變化。
使用標識符來修改權限的一個常見的場景是在建立腳本的時候,出於安全方面的考量,通常狀況使用touch
命令建立一個腳本文件後,該文件並不具有可執行的權限,咱們須要手動爲全部的用戶都添加上可執行的權限,那麼能夠按照以下方式方便的受權:
>$ touch test.sh >$ ls -l test.sh -rw-rw-r-- 1 user user 0 6月 27 20:42 test.sh >$ chmod a+x test.sh >$ ls -l test.sh -rwxrwxr-x 1 user user 0 6月 27 20:42 test.sh
從這個例子中能夠清楚的看到,使用a+x
很方便的爲全部的用戶添加了可執行權限。
若是要遞歸爲目錄中的子文件修改權限,只需添加-R
參數便可,以下所示:
>$ chmod 777 -R /tmp/17bang >$ chmod a+x -R /tmp/17bang
chown
命令此命令用於修改文件或目錄的屬主,也可同時修改屬組。
>$ chown user[:group] [-R] dir/file
經過上面chmod
命令咱們知道了,文件的全部者和用戶所在的用戶組會決定一個用戶對某個文件具備什麼樣的權限,那麼chown
命令就是用來修改一個文件的屬主和屬組的。
使用示例:
>$ ls -l 17bang.txt -rw-rw-r-- 1 user user 0 7月 5 18:51 17bang.txt >$ sudo chown root 17bang.txt >$ ls -l 17bang.txt -rw-rw-r-- 1 root user 0 7月 5 18:51 17bang.txt >$ sudo chown root:root 17bang.txt >$ ls -l 17bang.txt -rw-rw-r-- 1 root root 0 7月 5 18:51 17bang.txt
注意:chown
命令只有超級用戶才能使用。
試想一下爲何會有這樣的限定呢?
舉個栗子來講,若是任何用戶均可以使用chown
命令來修改文件的全部者,那麼就能夠輕易繞過磁盤配額的控制了。
假設管理員爲用戶A分配了必定的磁盤空間,當用戶A的磁盤空間不足時,ta就能夠經過chown
命令將某些文件的全部者修改成另外一個用戶B,這樣這筆帳就寄在用戶B的頭上了。當用戶A須要使用此文件時,再將全部者改回來就好了。而用戶B卻徹底不知道本身在用戶A的家目錄中還有所屬的文件,白白的爲用戶A背了鍋。
chgrp
命令此命令專門用來修改文件和目錄的屬組,用法與chown
相似,這裏就再也不展開介紹了。
which
、locate
和find
命令是三個常見的查找文件的命令,下面咱們分別進行介紹。
which
命令which
是 shell 的內建命令,一般用於查找某個命令的路徑,由於它只從$PATH
環境變量所指定的路徑中尋找文件。
>$ which ls /bin/ls
locate
命令locate
命令從/var/lib/mlocate/mlocate.db
數據庫文件中查詢文件的所在路徑,所以檢索速度很是快。
系統會在特定的時間自動調用updatedb
命令來更新這個數據庫文件,所以locate
命令並不能查詢到系統中最新添加的文件,而是要等待必定的時間後才能查詢獲得。
>$ locate .vimrc /home/user/.vimrc
-c
參數能夠統計數量。
-i
參數能夠忽略大小寫。
find
命令find
命令是全部查找命令中最經常使用也最強大的,它不只能夠經過文件名來查詢,也能夠經過文件類型和屬性來查找文件。
>$ find [path] [expression]
咱們這裏只舉個用文件名查找文件的栗子。
>$ find /etc -name "*.conf" /etc/depmod.d/ubuntu.conf /etc/rsyslog.conf /etc/sensors3.conf /etc/ca-certificates.conf ......
若是不加路徑,則默認爲查找當前目錄下的文件。
$ find -name "*.txt" ./.mozilla/firefox/s7tyv1vj.default-1530780643269/SiteSecurityServiceState.txt ./.mozilla/firefox/s7tyv1vj.default-1530780643269/pkcs11.txt
find
命令還有許多其它高級的用法,你們能夠試着本身找找資料,並動手實驗一下。
上面的內容不過癮?更深刻的知識能夠參考LZ的博客:(三) 一塊兒學 Unix 環境高級編程 (APUE) 之 文件和目錄