@
前言
這期呢主要說一說Linux中檔案與目錄相關的命令,一共包含19個命令
cd 切換目錄
1、簡介
cd 是“change directory” 中每個單詞的首字母,其功能是從當前目錄切換到目標路徑。
2、語法格式
cd [引數選項] [目標路徑]
3、引數說明
這裡呢只列出常用引數
引數選項 | 引數說明 |
---|---|
- | 從當前目錄切換到使用者上一次所在目錄 |
~ | 從當前目錄切換到家目錄,即假設當前登入的使用者是xiezhr,執行命令後路徑將切換到/home/xiezhr |
.. | 從當前目錄切換到上一級目錄 |
在使用cd命令時,配合“tab”鍵的自動補全功能,可以大大提高效率。
既然說到了切換路徑,我們這裡就說一說什麼時相對路徑?什麼時絕對路徑?
簡單來說,從“/”根目錄開始的路徑為絕對路徑,不從“/”開始的為相對路徑。
/home/xiezhr、/home/user/local 是絕對路徑,而 date/,webapp/log/ 為相對路徑
4、實踐操作
① 進入系統 /usr/local 目錄 。這裡我們會用到pwd命令來顯示當前所在路徑,這個命令我們會在下一個命令中講,這裡知道即可
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
② 切換到上級目錄
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ..
[root@xiezhr usr]# pwd
/usr
③ 切換到父目錄的父目錄
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ../../
[root@xiezhr /]# pwd
/
④ 返回當前使用者上一次所在的目錄
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# cd /root/
[root@xiezhr ~]# pwd
/root
[root@xiezhr ~]# cd -
/usr/local
⑤ 返回家目錄【當前使用者為root使用者,家目錄為/root】
[root@xiezhr local]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ~
[root@xiezhr ~]# pwd
/root
pwd 顯示當前路徑
1、簡介
pwd 是“print working directory”每個單詞的首字母,功能是列印/顯示當前所在目錄姐絕對路徑。在實際工作中,我們經常會在各個目錄之間切換,切換的多了,很容易忘記走到哪了,這時就需要有一幅地圖指引我們,使我們不至於迷路。由此可見這個命令的重要性
2、語法格式
pwd [引數選項]
3、引數說明
一般不需要加引數
4、實踐操作
① 進入到/usr/local後顯示路徑
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
ls 顯示目錄下內容及相關屬性資訊
1、簡介
ls 是“list” 英文單詞的縮寫,功能是列出當前目錄下的內容和內容屬性資訊。類似於DOS系統下的dir命令
2、語法格式
ls [引數選項] [檔案或目錄]
由於用的比較少,這裡就不作說明了,大概知道就好了
3、引數說明
引數 | 引數說明 |
---|---|
-l | 使用長格式列出檔案即目錄資訊 相當於直接使用ll |
-a | 顯示目錄下的所有檔案,包括.開頭的隱藏檔案 |
-t | 根據最後修改時間(time)排序,預設是按檔名排序的 |
-r | 以相反次序排序 |
-F | 在條目後加上檔案型別的只是符號(*、/、=、@、|中的一個) |
-d | 當遇到目錄時,列出目錄本身而非目錄內檔案 |
-h | 以人類可讀資訊顯示檔案或目錄大小,如1KB,23M,3GB等 |
4、實踐操作
① 直接使用ls命令,不帶引數,顯示當前目錄下的檔案和路徑
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3
②加上【-a】引數,顯示所有檔案,包含隱藏檔案("."開頭的為隱藏檔案),如下所示,ls沒有顯示隱藏檔案,ls -a 顯示了隱藏檔案.d.txt
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3
[root@xiezhr test]# ls -a
. .. a.txt b.txt c.txt dir1 dir2 dir3 .d.txt
③ 加上【-l】引數,顯示檔案目錄的詳細資訊
這個引數時我們最常用的,這個命令會列出檔案或目錄型別、許可權、所屬組、建立修改時間(最後一次修改時間,如果時新建立的檔案則為建立時間),需要熟練掌握
[root@xiezhr test]# ls -l
total 12
-rw-r--r-- 1 root root 0 Mar 10 23:39 a.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 b.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
小技巧:上面的命令我們會發現,時間沒顯示年份,那麼怎麼才能顯示出我們肉眼既可以看懂的時間呢?
[root@xiezhr test]# ls -l --time-style=long-iso
total 16
-rw-r--r-- 1 root root 22 2022-03-10 23:44 a.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 b.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 c.txt
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
哇哦,上面命令這麼長,使用起來真的不方便,我們給它起個別名吧,這樣叫起來也比較方便
[root@xiezhr test]# alias lst='ls -l --time-style=long-iso'
[root@xiezhr test]# alias |grep lst
alias lst='ls -l --time-style=long-iso'
[root@xiezhr test]# lst
total 16
-rw-r--r-- 1 root root 22 2022-03-10 23:44 a.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 b.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 c.txt
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
④ 加上【-F】引數,F是大寫,在檔案尾部加上檔案型別符號(、/、=、@、|)中一個
**""表示普通可執行檔案、"/"表示目錄、"="表示套接字、"@"表示符號連結、"|"表示FIFOs**
具體檔案型別可以參照【檔案型別】這篇文章
[root@xiezhr test]# ls -F
a.txt b.txt c.txt dir1/ dir2/ dir3/ # 三個目錄尾部加上了/
小技巧:透過【-F】引數,可以過濾出所有目錄和普通檔案
[root@xiezhr test]# ls -F # 當前路徑下一共包含三個檔案和三個目錄
a.txt b.txt c.txt dir1/ dir2/ dir3/
[root@xiezhr test]# ls -F|grep / # 過濾出所有路徑
dir1/
dir2/
dir3/
[root@xiezhr test]# ls -F|grep -v / #過濾出普通檔案
a.txt
b.txt
c.txt
⑤ 假設一個目錄下面有很多很多個檔案,我們忘記了最近改過的檔案的名字(年紀大了,記性越來越不好),這時候要找出它,可以用如下命令
[root@xiezhr test]# touch xiezhr.txt
[root@xiezhr test]# ls -lt
total 16
-rw-r--r-- 1 root root 0 Mar 11 23:02 xiezhr.txt
-rw-r--r-- 1 root root 0 Mar 11 22:52 tt.txt
-rw-r--r-- 1 root root 22 Mar 10 23:44 a.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 c.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 b.txt
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
我們最近建立或修改的檔案就排在最前面了,有沒有很方便哦
當然了,可以讓你最顯目,也可以讓你排到最後去。ls -lrt 即可按照時間倒序排。-r 是倒序的意思
mkdir 建立目錄
1、簡介
mkdir 是"make directoy" 英文單詞的縮寫,功能是建立目錄。如果目錄存在則提示已存在,不會繼續建立
2、語法格式
mkdir [引數選項] [目錄]
3、引數說明
引數 | 引數說明 |
---|---|
-p | 遞迴建立目錄。即可以父目錄兒子目錄孫子目錄重孫目錄....等一起建立 |
-m | 建立目錄的同時授予許可權 |
4、實踐操作
① mkdir 不帶任何引數
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr.txt
[root@xiezhr test]# mkdir xiezhr
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
② 同時建立多個目錄
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mkdir dir4 dir5 dir6
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 dir4 dir5 dir6 tt.txt xiezhr xiezhr.txt
③ 使用【-p】引數遞迴建立目錄
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr.txt
[root@xiezhr test]# mkdir -p xiezhr/test
[root@xiezhr test]# tree
.
├── a.txt
├── b.txt
├── c.txt
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
│ └── test
└── xiezhr.txt
5 directories, 5 files
④ 使用【-m】引數,建立目錄同時授權
[root@xiezhr test]# mkdir -m 755 dir
tree 以樹形結構顯示目錄下的內容
1、簡介
tree 一看到這個命令,我們就知道是樹的意思,當然了這裡的樹並非種的樹,而是以樹形結構顯示目錄下內容。
2、語法格式
tree [引數選項] [目錄]
3、引數說明
引數 | 引數說明 |
---|---|
-d | 只顯示目錄 |
-L level | 遍歷目錄的最大層數,level為大於0的整數 |
4、實踐操作
注意:個別Linux版本可能沒有預設安裝tree,大家也不用慌,我們按照如下步驟安裝即可
- 下載安裝包
wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
- 解壓安裝包
tar -zxvf tree-1.7.0.tgz
- 切換到解壓後的目錄
cd tree-1.7.0
- 編譯安裝
make install
- 大功告成,輸入tree 命令回車
① 不帶引數的tree
[root@xiezhr test]# tree
.
├── a.txt
├── b.txt
├── c.txt
├── dir
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
│ └── test
└── xiezhr.txt
6 directories, 5 files
② 加上【-d】引數,只顯示目錄
[root@xiezhr test]# tree -d
.
├── dir
├── dir1
├── dir2
├── dir3
└── xiezhr
└── test
6 directories
③ 加上【-L leave】 列出目錄下第leave層結構
[root@xiezhr test]# tree -L 1
.
├── a.txt
├── b.txt
├── c.txt
├── dir
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
└── xiezhr.txt
5 directories, 5 files
④ 加上【-f】顯示完整的路徑名稱 加上【-i】則不顯示樹枝部分
[root@xiezhr test]# tree -f
.
├── ./a.txt
├── ./b.txt
├── ./c.txt
├── ./dir
├── ./dir1
├── ./dir2
├── ./dir3
├── ./tt.txt
├── ./xiezhr
│ └── ./xiezhr/test
└── ./xiezhr.txt
6 directories, 5 files
[root@xiezhr test]# tree -i
.
a.txt
b.txt
c.txt
dir
dir1
dir2
dir3
tt.txt
xiezhr
test
xiezhr.txt
6 directories, 5 files
[root@xiezhr test]# tree -fi
.
./a.txt
./b.txt
./c.txt
./dir
./dir1
./dir2
./dir3
./tt.txt
./xiezhr
./xiezhr/test
./xiezhr.txt
6 directories, 5 files
⑤ 加上【-F】引數區分目錄和檔案
[root@xiezhr test]# tree -F
.
├── a.txt
├── b.txt
├── c.txt
├── dir/
├── dir1/
├── dir2/
├── dir3/
├── tt.txt
├── xiezhr/
│ └── test/
└── xiezhr.txt
6 directories, 5 files
尾部帶/的為目錄
touch 建立空白檔案或改變檔案的時間戳屬性
1、簡介
touch 是觸控的意思,摸一下檔案可以建立空白檔案或改變檔案時間屬性
touch 不能建立目錄但是能改變目錄的時間戳屬性
2、語法格式
touch [引數選項] [檔案]
3、引數說明
引數 | 引數說明 |
---|---|
-a | 只更改檔案最後訪問時間 |
-m | 只更改檔案最後修改時間 |
-d string | 使用字串string代表的時間模板設定指定檔案的時間屬性 |
4、實踐操作
① 不帶任何引數
[root@xiezhr test]# touch xiezhr.txt
[root@xiezhr test]# ls
a.txt b.txt c.txt dir dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
②更改檔案時間戳屬性(檔案的時間戳屬性:訪問時間、修改時間、狀態改變時間)
- stat 檢視檔案時間戳屬性
- -m 更改檔案修改時間
- -a 更改檔案的訪問時間
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:04:32.681919249 +0800
Modify: 2022-03-12 21:04:32.681919249 +0800
Change: 2022-03-12 21:04:32.681919249 +0800
Birth: -
[root@xiezhr test]# touch -m xiezhr.txt
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:04:32.681919249 +0800
Modify: 2022-03-12 21:08:22.344330251 +0800
Change: 2022-03-12 21:08:22.344330251 +0800
Birth: -
[root@xiezhr test]# touch -a xiezhr.txt
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:08:42.528893719 +0800
Modify: 2022-03-12 21:08:22.344330251 +0800
Change: 2022-03-12 21:08:42.528893719 +0800
Birth: -
cp 複製檔案或目錄
1、簡介
cp 是copy 英文單詞的縮寫,功能是複製檔案或目錄
2、語法格式
cp [引數選項] [原始檔] [目標檔案]
3、引數說明
引數 | 引數說明 |
---|---|
-p | 複製時保持原始檔的許可權、時間屬性 |
-d | 如果複製的檔案時符號連結,那麼僅賦值符號連結本身,而且保留符號連結所指向的目標檔案或目錄 |
-r | 遞迴複製目錄,即複製目錄下所有層級的子目錄及檔案 |
-a | 等同於-p、-d、-r三個命令總和 |
-i | 覆蓋已有檔案提示使用者確認 |
4、實踐操作
① 將檔案a.txt 複製為 aaa.txt
[root@xiezhr test]# cp a.txt aaa.txt
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
②複製目錄,將dir 目錄複製為dir_bak
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# cp -r dir dir_bak
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
mv 移動或重新命名檔案
1、簡介
mv 是 move 的縮寫,功能是移動重新命名檔案
2、語法格式
mv [引數選項] [原始檔] [目標檔案]
3、引數說明
引數 | 引數說明 |
---|---|
-f | 若目標檔案已經存在,則不會詢問直接覆蓋 |
-i | 若目標檔案已存在,則會詢問是否覆蓋 |
-n | 不覆蓋已經存在的檔案 |
-u | 在原始檔比目標檔案新,或目標檔案不存在時才進行移動 |
4、實踐操作
① 給檔案改名(如果a1.txt 不存在,則將aaa.txt 重新命名為a1.txt)
[root@xiezhr test]# ls
aaa.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv aaa.txt a1.txt
[root@xiezhr test]# ls
a1.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
② 給檔案重新命名(如果a2.txt存在,則將a1.txt 覆蓋為a2.txt)
[root@xiezhr test]# ls
a1.txt a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a1.txt a2.txt
mv: overwrite ‘a2.txt’? y
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
③ 移動單個檔案或多個檔案
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a2.txt dir/
[root@xiezhr test]# ls
b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv b.txt c.txt dir/
[root@xiezhr test]# ls
dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
④移動目錄 如果目錄存在則將檔案移動到目錄中,如果不存在則將目錄改名
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a2.txt dir/
[root@xiezhr test]# ls
b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv b.txt c.txt dir/
[root@xiezhr test]# ls
dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv dir1 dir
[root@xiezhr test]# ls
dir dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv dir2 dir5
[root@xiezhr test]# ls
dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
rm 刪除檔案或目錄
1、簡介
rm 時rmove 英文單詞的縮寫,功能時刪除一個或多個檔案、目錄。rm是Linux中最危險的命令。如果刪錯了那只有跑路了~ 慎重慎重慎重?
2、語法格式
rm [引數選項] [檔案或目錄]
3、引數說明
引數 | 引數說明 |
---|---|
-f | 強制刪除,忽率不存在的檔案,不提示確認 |
-r | 遞迴刪除目錄及其內容 |
4、實踐操作
① 不帶引數的刪除,刪除需要確認
[root@xiezhr test]# ls
a.txt b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@xiezhr test]# ls
b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
②強制刪除檔案,不需要確認
[root@xiezhr test]# ls
b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# rm -f b.txt
[root@xiezhr test]# ls
c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
③ 遞迴刪除目錄檔案
[root@xiezhr test]# tree dir1/
dir1/
└── a
└── b
└── t.txt
2 directories, 1 file
[root@xiezhr test]# rm -rf dir1/
[root@xiezhr test]# ls
c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
注意:資料無價,慎重、慎重、慎重
- 儘量用mv代替rm ,先將檔案移動到其他目錄/tmp,類似於windows的垃圾回收站
- 刪除前必須備份,即使只是刪除一個很不起眼的檔案
- 如果非要用到“rm -rf”,一定要確認好路徑,別來個rm -rf/ 那就真的玩完了,跑路都是小事,如果造成損失可能要負法律責任。
chown 改變檔案或目錄的使用者使用者組
1、簡介
chown 是change owner 英文的縮寫,用於改變檔案或目錄的所屬使用者和使用者組
2、語法格式
chown [引數選項] [使用者:使用者組] [檔案或目錄]
chown 使用者 檔案或目錄 # 僅僅授權使用者
chown :組 檔案或目錄 # 僅僅授權組
chown 使用者:組 檔案或目錄 # 不僅授權使用者,還授權組
3、引數說明
引數 | 引數說明 |
---|---|
-R | 遞迴更改目錄的使用者和使用者組 |
4、實踐操作
① 更改檔案的使用者和組
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 root root 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chown xiezhr:xiezhr c.txt
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
② 遞迴更改目錄即目錄下所有目錄及檔案的使用者和使用者組屬性
[root@xiezhr test]# ll -d dir
drwxr-xr-x 3 root root 4096 Mar 13 16:08 dir
[root@xiezhr test]# chown -R xiezhr.xiezhr dir/
[root@xiezhr test]# ll -d dir
drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
chmod 改變檔案或目錄的許可權
1、簡介
chmod 是change mode 英文單詞的縮寫,使用者改變檔案或目錄的許可權。該命令只有檔案的屬主和root使用者可以使用
2、語法格式
chmod [引數選項] [模式選項] [檔案或目錄]
我們輸入如下命令後,會顯示檔案或目錄的詳細資訊。那麼開頭的一堆東西代表什麼呢?
[root@xiezhr test]# ll
total 20
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
如上圖所示,
-
Linux許可權分為三級 : 檔案所有者(Owner)、使用者組(Group)、其它使用者(Other Users)
-
第一位代表檔案型別,-表示普通檔案 d 表示目錄
-
r是read的縮寫,代表可讀許可權 對應4
-
w是write的縮寫,代表可寫許可權 對應2
-
x是execute的縮寫,代表可執行許可權 對應1
-
-沒有任何許可權 對應0
-
a 是all 的縮寫,代表所有等於u、g、o的綜合
-
u 是user的縮寫,代表檔案擁有者
-
g 是group的縮寫,代表使用者組
-
o 是other的縮寫,代表其他使用者
3、引數說明
引數 | 引數說明 |
---|---|
-R | 遞迴處理指定目錄及其子目錄下的所有檔案 |
4、實踐操作
① 設定所有許可權為空
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod a= c.txt
[root@xiezhr test]# ll c.txt
---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
② 設定檔案擁有者具有檔案可執行屬性
[root@xiezhr test]# ll c.txt
---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod u+x c.txt
[root@xiezhr test]# ll c.txt
---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
②設定檔案組具有檔案可寫許可權
[root@xiezhr test]# ll c.txt
---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod g+w c.txt
[root@xiezhr test]# ll c.txt
---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
③ 設定其他使用者具有檔案可讀許可權
[root@xiezhr test]# ll c.txt
---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod o+r c.txt
[root@xiezhr test]# ll c.txt
---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
④ 多個許可權一起
[root@xiezhr test]# ll c.txt
---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod ugo+x c.txt
[root@xiezhr test]# ll c.txt
---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑤ 撤銷其他使用者可執行許可權
[root@xiezhr test]# ll c.txt
---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod o-x c.txt
[root@xiezhr test]# ll c.txt
---x-wxr-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑥ 透過數字設定檔案擁有者可讀可寫可執行、使用者組可讀可執行、其他使用者可讀可執行
[root@xiezhr test]# ll c.txt
---x-wxr-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod 755 c.txt
[root@xiezhr test]# ll c.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑦使用【-R】引數遞迴授予dir目錄下所有檔案許可權
[root@xiezhr test]# ll dir
total 8
-rw-r--r-- 1 xiezhr xiezhr 90 Mar 13 15:24 a2.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 10 23:39 b.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
[root@xiezhr test]# chmod -R 755 dir/
[root@xiezhr test]# ll dir
total 8
-rwxr-xr-x 1 xiezhr xiezhr 90 Mar 13 15:24 a2.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 10 23:39 b.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
chgrp 更改檔案使用者組
1、簡介
chgrp 是change group 的縮寫,僅僅用於改變檔案的使用者組。chgrp 允許普通使用者改變檔案所屬的組,只要該使用者是該組的一員。一般我們都使用chown 命令
2、語法格式
chgrp [引數選項] [使用者組] [檔案或目錄]
3、引數說明
引數 | 引數說明 |
---|---|
-R | 遞迴更改檔案的使用者組 |
4、實踐操作
①修改檔案組屬性
[root@xiezhr test]# ll a.txt
-rw-r--r-- 1 root root 0 Mar 15 21:35 a.txt
[root@xiezhr test]# chgrp xiezhr a.txt
[root@xiezhr test]# ll a.txt
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:35 a.txt
② 遞迴改變檔案使用者組屬性
[root@xiezhr test]# ll dir3/
total 0
-rw-r--r-- 1 root root 0 Mar 15 21:37 a.txt
-rw-r--r-- 1 root root 0 Mar 15 21:37 b.txt
[root@xiezhr test]# chgrp -R xiezhr dir3/
[root@xiezhr test]# ll dir3/
total 0
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 a.txt
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 b.txt
ln 硬連結與軟連線
1、簡介
ln 是link英文單詞縮寫,功能是建立檔案間的連結(連結分為軟連結和硬連結)
當我們需要在不同的目錄,用到相同的檔案時,我們不需要在每一個需要的目錄下都放一個必須相同的檔案,我們只要在某個固定的目錄,放上該檔案,然後在 其它的目錄下用ln命令連結(link)它就可以,不必重複的佔用磁碟空間。
那麼什麼是硬連結?什麼又是軟連結呢?
【軟連結】
- 1.軟連結,以路徑的形式存在。類似於Windows作業系統中的快捷方式
- 2.軟連結可以 跨檔案系統 ,硬連結不可以
- 3.軟連結可以對一個不存在的檔名進行連結
- 4.軟連結可以對目錄進行連結
【硬連結】
- 1.硬連結,以檔案副本的形式存在。但不佔用實際空間。
- 2.不允許給目錄建立硬連結
- 3.硬連結只有在同一個檔案系統中才能建立
2、語法格式
3、引數說明
引數 | 引數說明 |
---|---|
無引數 | 建立硬連結 |
-s | 建立硬連結 |
4、實踐操作
①為a.txt 建立軟連線linka。如果a.txt丟失,linka失效
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
[root@xiezhr dir]# ln -s a.txt linka
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
② 給檔案a.txt建立硬連結,lna,a.txt與lna的各項屬性相同
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
[root@xiezhr dir]# ln a.txt lna
[root@xiezhr dir]# ll
total 8
-rw-r--r-- 2 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
-rw-r--r-- 2 root root 17 Mar 15 22:25 lna
總結:
- 【刪除軟連線檔案,對原始檔及硬連結檔案無影響】刪除軟連線linka,對a.txt和lna無影響
- 【刪除硬連結檔案,對原始檔及軟連結檔案無影響】刪除硬連結lna,對a.txt和linka無影響
- 【刪除原始檔,對硬連結檔案無影響,但會導致軟連結失效】 刪除a.txt,對lna無影響,linka連結失效
- 【只有同事刪除原始檔、硬連結檔案才會真正刪除整個檔案】刪除lna、a.txt 整個檔案才會被刪除
redlink 檢視符號連線檔案的內容
1、簡介
我們使用cat/more 檢視軟連結檔案時,只能檢視原始檔內容,不能檢視軟連結的時哪個檔案。這時候readlink就派上用場了
2、語法格式
readlink [引數選項] [檔案]
3、引數說明
一般不加引數
4、實踐操作
① 檢視軟連結linka
[root@xiezhr dir]# cat linka
ffdfdfadf
fdfdf
[root@xiezhr dir]# readlink linka
a.txt
find 查詢目錄下的檔案
1、簡介
find 根據根據意思,你可能就知道其功能了。find使用者查詢目錄下的檔案,同時也可以呼叫其他命令執行相應操作
2、語法格式
find [路徑] [操作語句] [執行的動作]
3、引數說明
引數 | 引數說明 |
---|---|
pathname | 命令所查詢的路徑,常用的.表示當前路徑,/表示系統根目錄 |
-maxdepth levels | 查詢的最大目錄級數,leves 為自然數 |
-name | 按照檔名查詢檔案,支援*、?、[] 萬用字元 |
-type | 查詢某一型別的檔案① b[塊裝置檔案] ② c[字元裝置檔案] ③ d[目錄] ④ p[管道檔案] ⑤ l[符號連結檔案] ⑥ f[普通檔案] ⑦s[stocket檔案] |
-exec | 對匹配的檔案執行該引數所給出的shell命令 |
! | 取反 |
-a | 取交集,and |
-o | 取並集,or |
4、實踐操作
① 【-name】根據檔名檢索
- 區分大小寫,需要忽略檔名中的大小寫,可以使用 -iname引數
- 可配合萬用字元"*"、"?" 使用
- "?" 可以表示任意一個單一的符號
- "*" 可以表示任意數量(包括 0)的未知符號
# 查詢 /home/test 目錄下所有檔名以 .txt 結尾的檔案
[root@xiezhr test]# find /home/test/ -name '*.txt'
/home/test/.d.txt
/home/test/dir/a.txt
/home/test/dir3/b.txt
/home/test/dir3/a.txt
/home/test/a.txt
/home/test/tt.txt
/home/test/c.txt
/home/test/xiezhr.txt
# 查詢 /home/test 目錄下所有檔名剛好為 1 個字元的檔案
[root@xiezhr test]# find /home/test/ -name '?.txt'
/home/test/dir/a.txt
/home/test/dir3/b.txt
/home/test/dir3/a.txt
/home/test/a.txt
/home/test/c.txt
② 【-type】 根據檔案型別檢索
# 查詢 /home/test 目錄下所有java普通檔案 下面命令中f 代表普通檔案。上面引數中已說明
[root@xiezhr test]# find /home/test/ -type f -name '*.java'
/home/test/user.java
/home/test/money.java
/home/test/test.java
/home/test/xiezhr.java
③ 【-atime -mtime】查詢指定時間內修改過的檔案
# 查詢當前目錄,一天內訪問過的檔案 .表示當前路徑,-1表示一天內
[root@xiezhr test]# find . -atime -1
./user.java
./dir/linka
./dir/lna
./dir/a.txt
./money.java
./test.java
./xiezhr.java
# 在/home/test 目錄下,查詢2天內修改過的檔案
[root@xiezhr test]# find /home/test/ -mtime -2
/home/test/
/home/test/user.java
/home/test/dir
/home/test/dir/linka
/home/test/dir/lna
參照上圖所示
④ 【!】 進行反向查詢
# 查詢當前目錄下所有目錄
[root@xiezhr test]# find -type d
.
./dir5
./xiezhr
./xiezhr/test
./dir
./dir3
./dir_bak
# 查詢當前目錄下非目錄的檔案
[root@xiezhr test]# find ! -type d
./user.java
./.d.txt
./dir/linka
./dir/lna
./dir/a.txt
./money.java
./dir3/b.txt
./dir3/a.txt
./test.java
⑤【-size】 根據檔案大小查詢
如下命令中
- "+" 表示大於
- "-" 表示小於
- "c" 表示位元組
- "k" 表示kb
- "M" 表示Mb
- "G" 表示Gb
[root@xiezhr test]# find -size +200c
.
./dir5
./xiezhr
./xiezhr/test
./dir
./dir3
./dir_bak
⑥ 【-perm】 根據檔案許可權查詢
# 檢索 /home/test 目錄下許可權為 rw-r--r-- 的檔案
[root@xiezhr test]# find /home/test/ -perm u=rw-,g=r--,o=r--
/home/test/user.java
/home/test/.d.txt
/home/test/dir/lna
/home/test/dir/a.txt
/home/test/money.java
上面列子可以寫成如下
[root@xiezhr test]# find /home/test/ -perm 644
/home/test/user.java
/home/test/.d.txt
/home/test/dir/lna
/home/test/dir/a.txt
/home/test/money.java
⑦ 查詢當前目錄下所有普通問及那,並用ls -l 命令將其列出來
[root@xiezhr test]# find -type f -exec ls {} \;
./user.java
./.d.txt
./dir/lna
./dir/a.txt
./money.java
上述列子中
- -exec 後面的時操作命令,可以是ls、rm、delete 等命令
- 命令最後以;結尾,考慮到到各個系統;可能有不同含義,所以在前面加上\進行轉義
- {} 表示前面find 命令查到的結果,{} 前後必須要有空格
⑧ 在目錄中查詢n天以前的檔案並刪除它,實際工作中我們會經常用到。
我們在伺服器上部署的應用程式一般都會輸出日誌檔案,時間一長可能日誌檔案會成百上千,一下就把你的磁碟空間給撐滿了。
這時候下面命令就顯得很重要了。
一般情況下,這些命令我們我們會配置到Linux任務排程中自動執行
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -exec rm -f {} \;
[root@xiezhr test]#
或者
# | 表示管道符號 xargs是一個向其他命令傳遞引數的過濾器。後面都會說到
# 下面命令表示 find 查詢到的普通檔案 傳遞給rm -f 執行
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 |xargs rm -f
[root@xiezhr test]#
或者
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -delete
[root@xiezhr test]#
⑨ 將查詢到的檔案移動到另一個目錄下
# 利用xargs -i 命令將find 查詢當前目錄下的所有java檔案作為引數傳遞給mv命令
[root@xiezhr test]# find -type f -name "*.java" |xargs -i mv {} dir3/
[root@xiezhr test]# ls dir3
a.txt b.txt money.java test.java user.java xiezhr.java
⑩ 我們想將/home/test 目錄下多個的高畫質電影發給好兄弟,這時就需要篩選出當前目錄下所有電影並進行壓縮
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt 化學資料.mp4 數學資料.mp4 物理.mp4
[root@xiezhr test]# find . -name "*.mp4" -exec tar -czvf movie.tar.gz {} \;
./數學資料.mp4
./物理.mp4
./化學資料.mp4
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak movie.tar.gz tt.txt xiezhr xiezhr.txt 化學資料.mp4 數學資料.mp4 物理.mp4
movie.tar.gz 就是最後壓縮後的檔案
xargs 將標準輸入轉換成命令列引數
1、簡介
xargs 是 extended arguments 單詞的縮寫。它是命令傳遞引數的一個過濾器。xargs在上一個例子中已經用到過。它能夠捕獲一個命令的輸出,然後傳遞給另外一個命令
2、語法格式
xargs [引數選項]
3、引數說明
引數 | 引數選項 |
---|---|
-n | 指定每行的最大引數量n,可以將輸入的文字劃分為多行,每行n個引數,預設空格分隔 |
-d | 自定義分隔符 |
-i | 以{}替代前面的結果 |
4、實踐操作
① 多行輸入變單行
[root@xiezhr test]# clear
[root@xiezhr test]# cat test.txt
1 2 3 4 5
6 7
8 9
10 11 12 13
14 15 17 18
[root@xiezhr test]# xargs < test.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18
② 透過【-n】指定每行的輸出個數
[root@xiezhr test]# cat test.txt
1 2 3 4 5
6 7
8 9
10 11 12 13
14 15 17 18
[root@xiezhr test]# xargs -n 4 < test.txt
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 17
18
③ 透過【-d】自定義分隔符
[root@xiezhr test]# echo "xiezhr-的- 個人公眾號是:-XiezhrSpace" | xargs -d- -n4
xiezhr 的 個人公眾號是: XiezhrSpace
④ 透過【-I】可以指定一個替換的字串
# xargs -i 引數可以讓{}替代前面find查詢到的內容
[root@xiezhr test]# find . -name "*.mp4"|xargs -i mv {} dir/
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak movie.tar.gz test.txt tt.txt xiezhr xiezhr.txt
# -I 引數可以指定其他字元代替{},本例中則使用[] 替代{}
[root@xiezhr test]# ls
a.txt c.txt dir dir2 dir3 dir5 dir_bak movie.tar.gz test.txt tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# find . -name "*.txt"|xargs -I [] cp [] dir3
cp: ‘./dir3/b.txt’ and ‘dir3/b.txt’ are the same file
cp: ‘./dir3/a.txt’ and ‘dir3/a.txt’ are the same file
rename 重新命名檔案
1、簡介
rename 根據名字就可以知道是重新命名
2、語法格式
rename from to file
3、引數說明
- from 表示需要替換或者需要處理的字元(一般是檔名的一部分或副檔名)
- to 把前面的from 代表的內容替換成to代表的內容
- file 表示待處理的檔案,可以用"*"通配所有檔案
4、實踐操作
[root@xiezhr dir5]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319_unfidend.jpg
[root@xiezhr dir5]# rename "_unfidend" "" *
[root@xiezhr dir5]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319.jpg
file 顯示檔案型別
1、簡介
file 我們都知道是檔案的意思。其作用就是用於顯示檔案型別。
2、語法格式
file [引數選項] [檔案或目錄]
3、引數說明
一般不加引數
4、實踐操作
[root@xiezhr dir5]# file xie_20220315.jpg
xie_20220315.jpg: empty
md5sum 計算和校驗檔案的MD5值
1、簡介
md5sum 用於計算和校驗檔案的MD5值。世界上沒有完全相同的兩片葉子,md5是一種不可逆的加密演算法。我們可以透過比較兩個檔案的md5值來判斷檔案有沒有被修改過。
2、語法格式
md5 [引數選項] [檔案]
3、引數說明
引數 | 引數說明 |
---|---|
-c | 從指定檔案中讀取MD5校驗值,並進行校驗 |
4、實踐操作
① 生成一個檔案的md5值
[root@xiezhr test]# md5sum a.txt
d41d8cd98f00b204e9800998ecf8427e a.txt
②【-c】引數判斷檔案是否被篡改
-c引數來對檔案md5進行校驗。校驗時,根據已生成的md5來進行校驗。生成當前檔案的md5,並和之前已經生成的md5進行對比,如果一致則檔案沒被修改,如果不一致則檔案被篡改了。
[root@xiezhr dir6]# ls
xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt
d41d8cd98f00b204e9800998ecf8427e xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt >data.md5
[root@xiezhr dir6]# echo "個人公眾號:XiezhrSpace" >> xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt
8e32899aa04a3a842df366cdd883cdbf xiezhr.txt
[root@xiezhr dir6]# md5sum -c data.md5
xiezhr.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
這期內容就到這,下期根據思維導圖就到了檔案內容操作相關的命令使用了。
涉及到的命令有:cat、more、head、tail、less、cut、join、sort等等
敬請期待哦(●’◡’●)
專欄目錄:快速上手Linux核心命令專欄目錄