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

2023-04-23 15:00:28

@

前言

這期呢主要說一說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中最危險的命令。如果刪錯了那只有跑路了~ 慎重慎重慎重