快速上手Linux核心命令(三):檔案和目錄操作命令

xiezhr發表於2023-04-23

@

前言

這期呢主要說一說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 整個檔案才會被刪除

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核心命令專欄目錄

上一篇:快速上手Linux核心命令(二):關機、重啟

下一篇:快速上手Linux核心命令(四):檔案內容相關命令

相關文章