Linux 文件目錄管理的指令
1.知識點:絕對路徑:寫法從/(根目錄開始) /usr/share/doc
相對路徑:不從/開始 如cd ../man
如果清楚文件夾內部情況,建議使用相對路徑在文件夾之間跳轉,而不用絕對路徑,每次都是一長串地址
. 代表當前層目錄
..代表上層目錄
~代表自己的根目錄
~user(user是代指用戶哇!)代表到user這個人的根目錄
2.cd 與 pwd
cd ..回到上一層目錄
cd ../home相對路徑的寫法
cd /var/www/html 絕對路徑的寫法
cd 回到用戶的根目錄
cd ~ 回到用戶(個人)的根目錄
cd ~xwc 回到xwc用戶的根目錄
pwd 顯示當前目錄(print working directory)
3.mkdir 與 rmdir
mkdir 目錄名稱 這個必須一層一層建目錄
rmdir 目錄名稱 這個必須一層一層的刪除
否則就會提示不為空
要是需要(不假思索地)都刪除,可以使用指令 rm-rf h
全沒了(所以不大安全)
4.PATH環境變量
什麽是PATH呢
當我們執行一個指令時,系統會依照PATH的設定到PATH定義的每個路徑下搜尋文件,先搜尋到的指令文件先被執行。
怎麽看呢?
指令 echo $PATH
如何將/root加到PATH中呢?(知道就好)
PATH=“$PATH”:/root(感覺跟賦值語句一樣)
5.文件與目錄管理指令ls cp rm mv
ls顯示文件名稱屬性
-a列出所有文件(包括隱藏)
-l詳細列出,連同文件大小,屬性數據
-S以文件大小排序
--color=never/always/auto(不顯示顏色,均顯示顏色,由系統自行判斷)
ls -l的簡寫 ll(兩個小寫的L)這個命令可以說是超級方便了。
cp 復制
-d 我復制個快捷方式到指定位置
-r 目錄的復制
原本是空文件夾的3裏面多了個1
-s 做成鏈接文件
-u 如果源文件較新,或者沒有目標文件,才會進行復制動作。可用於備份操作。
rm 刪除
-i默認參數 詢問是否刪除
-rf 瘋狂刪除
mv 移動,變更文件名
mv x x.old 重命名
mv x1 x2 x3... /root 即把x1 x2 x3文件一並移動到root下
6.查看文件內容
cat與tac
cat -n查看信息時把行號也給我列出來
(Concatenate 連續的縮寫,不過較不常見,配合more和less比較好)
tac 反向顯示(最後一行在最上面)
more 與less
more ~/.txt一頁一頁的顯示文件內容
ls -al|more 把ll一頁一頁的顯示出來
相較於more, less更靈活,
可以按PgUp PgDn翻頁
less 還能查找,優秀
head與tail
查看文檔文檔開頭,文檔結尾
tail -n 5 1.txt(只顯示1.txt的後五行)
nl 與cat -n相似
od 讀取非ASCII數據文件,此時使用vi more lesss指令看不出來內容。輸出來的數據都是內存中的數據。
7.鏈接文件的介紹
what is inode?
介紹inode之前 我們先看硬盤結構的大體介紹
圓形 每個硬盤盤頭都有一個可以讀寫的磁頭
磁頭固定,繞硬盤盤片轉一圈,軌跡就是磁道Track,
所有盤片相同磁道號的集合成為磁柱,每一磁道被劃分了很多區域,每個區域叫一個扇區。扇區是硬盤的最小存儲物理量,約512字節。
硬盤分割後,格式化。格式化要考慮兩個方面,Block和inode,Block是磁盤可以記錄的最小單位,由數個扇區組成。
Block是記錄文件內容數據的區域,inode是記錄該文件屬性及放置在哪個Block的信息,所以每個文件都會占用一個inode,所以我們就知道,一個分區被格式化為一個文件系統後,基本上他都一定會有inode table 與數據區兩大塊。
ln(唉,終於要說這個指令了)
相當於windows的快捷方式,不過鏈接功能要好用得多。連接分硬鏈接和符號鏈接。
硬鏈接:當系統要讀取一個文件時,他會先讀取inode table,再建一個inode到文件Block,沒有錯,這兩個inode都可以到我們需要的Block那裏去。但是“目錄”本身是消耗inode的,這樣,缺點之一:硬鏈接就不能鏈接目錄,第二,不能跨文件系統。
符號鏈接:建個文件,相當於路牌,指向所需文件。
測試案例:
(cp 最後那個 "." 別忘了)
準備工作,建文件夾
0原始信息:
1硬鏈接信息:
註意看,上面那個數字變成2了(好神奇啊!!),這就表示占用了inodes。
2符號鏈接信息
註意passwd-soft會指向另一個文件,而且,最前面屬性為1,此外,他是一個獨立文件。先刪除passwd,我們看一下內容。
3使用more
(好神奇)
如果使用-s參數,符號鏈接雖然跟windows的快捷方式相像,但不同,在windows中,你怎麽修改快捷方式那個圖標,甚至內部信息,都不會對原文件有一絲一毫的影響(撐死對不上號打不開了),但是Linux不同,你修改鏈接文件,被指向的文件也會修改的。
如果你:ln -s /bin /root/bin /root/bin中的東西其實都是/bin的。
8.文件與目錄權限的指令
chown chgrp chmod
-R 可以一下改變一個目錄內所有文件的權限噢
umask 可以修改建立文檔時的權限噢
用戶建文檔默認權限是666
建文件夾默認是777
你可以 umask 111
之後再建個文件夾 就會是 666了
chattr lsattr
chattr +i 1.txt 如此就無法修改這個txt文檔了
chattr -i 1.txt 解除該屬性
可是我們如何看這個文件有哪些屬性呢?
沒錯 lsattr就是來看的
-a 將隱藏文件的屬性也顯示
-R將子目錄的數據也一並顯示出來
這兩個指令要謹慎使用。+i後就沒法變了。
9.搜尋文件或目錄
which查看可執行文件的位置
whereis查看文件的位置
locate 配合數據庫查看文件位置
find 實際搜尋硬盤查詢文件名稱
which 別忘了是查看可執行文件的位置(eg: passwd)
whereis
(指令有的翻譯了,有的沒翻譯。)
從上到下依次是只找二進制,只找說明文件manual路徑下的文件,只找source源文件,-u是沒有說明文檔的文件。
whereis -m passwd
僅搜尋man page 所在的目錄。
whereis 相對於find快很多,這是為什麽呢
因為Linux系統將系統內的所有文件都記錄在一個數據庫文件中,所以就快了(??)。
locate
和whereis 一樣都是從數據庫文件中來找東西,但是呢,Linux的數據庫默認是一周更新一次,所以你剛剛刪掉的,你會再找到,你剛剛添加的,你會在下一周才能找到。如何解決這個問題呢?
updatedb閃亮登場
來讓我們看看吧
首先 touch 建個文檔123456
用locate去數據庫文件中找,(沒更新呢,怎麽會找到呢)
updatedb更新一下,
再找,找到了,然後我們刪除一下
刪除了,可是還能在數據庫文件找到,更新一下,就找不到了。嗯就是這樣。
那麽到底要建立哪些數據庫呢,是否全部都要建立,似乎不需要,可以選擇需要建立數據數據庫的目錄。在/etc/updatedb.conf內設定。
find(這個不簡單,我之前還天真的以為只是查找)
(好想跳過,而且書上說了,由於find在尋找數據時,相當耗硬盤(那可是遞歸呀。。),所以沒事不要用find,用更棒的locate和whereis代替,不過還是看看吧)
1.時間
-atime n 將n*24小時內被存取過的文件列出來
-ctime n 將n*24小時內被改變、新增的文件或目錄列出來
-mtime n 將n*24小時內被修改過的文件列出來
-newer file 把比file還要新的文件列出來
2.使用名稱
-gid n 尋找群組ID為n的文件
-group n 尋找群組名稱為n的文件
-uid n 尋找擁有者ID為n的文件
-user n 尋找擁有者名稱為n的文件
-name file 找file(之前只知道這一條)
-type type 按類型找(後面那個type可以是b,c,d,p,l,s)
10.SetUID,SetGID,Sticky bit 與file指令
UID用戶代號
GID群組代號
可以用 more /etc/passwd 查看系統中所有賬號
如果新建一個用戶,UID、GID都是0,那就是root身份。
SUID、SGID又是什麽?
Set UID(SUID)的主要功能就是在某個文件執行期間具有文件擁有者的權限。
就是下圖中那個rw “s”,這裏是SUID,如果是-rwxr-sr-x這裏就是SGID。
當一個文件具有SUID時,同時others群組擁有x,那麽當others群組執行該程序時,others群組將擁有該文件的owner權限。
(owner:?????就因為一個SUID,別人就能和我一樣高貴了?)
(可不是嘛,所以涉及到變更一個文件使之具有SUID,SGID,要萬分謹慎)
Sticky bit
為什麽 othrs的x沒有用s代替的情況呢?
沒必要。
所有人都可執行,他們自然有權限。
這裏有個新的屬性(Sticky bit) t,最大的用處:具有t屬性的目錄,其下的文件或目錄只有文件擁有者及root 才有權刪除。
在我們的系統中預設有一個這樣的目錄,辣就是/tmp
最後一行的tmp “t“引人註目
這說明了什麽,在這個目錄裏,普通用戶可以新建修改任何文件,但是僅能刪除自己建立的文件,除非你是root。
來讓我們試試吧
root登陸
到/tmp裏建個文件夾shanbudiao
修改權限777
用普通賬戶登陸
嘗試刪除
失敗了。
最後一個指令 file
file 【文件名】
可以查看文件類型,還可以看是否被加入SUID等信息。
(文件部分的指令就到此結束了,o(* ̄▽ ̄*)ブ)
Linux 文件目錄管理的指令