首頁 > 軟體

Linux常用命令詳解-目錄檔案操作命令

2020-06-16 16:53:07

現實中,伺服器(包含Linux,Unix,Windows Server)一般都擺放在機房裡,因為一個機房擺放了很多Linux機器,所有機器都運轉起來,整個室內溫度也是非常高的,所以作為一個要操作Linux的開發人員,它們通常都是通過ssh遠端連線操作Linux的,而ssh只有命令列介面,所以我們操作Linux只能通過一個個的命令去運作。

所以,如果想熟練操作Linux,只能通過學習一個個Linux的命令來提高自己的系統操作能力

首先我們要學到的就是Linux的目錄檔案的操作命令

cd    切換使用者當前工作目錄

cd (選項) (引數)

cd命令用來切換使用者工作目錄到一個指定的目錄下,這個指定的目錄你可以使用絕對路徑或者是相對路徑,(絕對路徑代表從根目錄開始,相對路徑代表以當前目錄為起點)

如果直接用 cd 命令而不加任何引數,則會切換到登入使用者的主目錄

比如我一開始是用root使用者登入的,那麼他已進入命令列就會進入到 /root/ 目錄,使用cd 切換到其他目錄後,直接cd(不加任何引數)那麼他會切換回到/root/ 目錄

cd 切換目錄時要注意的幾點

" ~ "表示為home directory(家目錄或者叫使用者目錄)的意思
 " . "  表示目前所在的目錄
 " .. " 表示目前目錄位置的上一層目錄。
範例

cd    進入使用者主目錄;
cd ~  進入使用者主目錄;
cd -  返回進入此目錄之前所在的目錄;
cd ..  返回上級目錄(若當前目錄為“/“,則執行完後還在“/";".."為上級目錄的意思);
cd ../..  返回上兩級目錄;
cd !$  把上個命令的引數作為cd引數使用。

pwd 顯示使用者當前工作目錄

pwd(選項)

pwd是用來顯示使用者當前的工作路徑的 ,他是以絕對路徑的形式呈現的

例如以下例子

[root@localhost linuxidc]# cd /root
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /home/linuxidc/
[root@localhost linuxidc]# pwd
/home/linuxidc

ls 顯示目標列表(之前在講目錄結構的時候使用過的)

ls(選項)(引數)

引數可以為一個目錄,如果什麼都不加,代表當前目錄

ls目錄在我看來算是Linux中使用頻率最高的命令了

在Windows下,開啟檔案資源管理器,進入一個目錄,裡面的檔案目錄,都是直接顯示的

而在Linux下,進入一個目錄,想檢視一個目錄裡面的檔案,或資料夾就必須用到ls命令了

ls命令的選項如下

-a:顯示所有檔案及目錄(ls內定將檔案名或目錄名稱為“.”的視為影藏,不會列出);
-A:顯示除影藏檔案“.”和“..”以外的所有檔案列表;
-C:多列顯示輸出結果。這是預設選項;
-l:與“-C”選項功能相反,所有輸出資訊用單列格式輸出,不輸出為多列;
-F:在每個輸出項後追加檔案的型別識別符號,具體含義:“*”表示具有可執行許可權的普通檔案,“/”表示目錄,“@”表示符號連結,“|”表示命令管道FIFO,“=”表示sockets通訊端。當檔案為普通檔案時,<br>不輸出任何識別符號;
-b:將檔案中的不可輸出的字元以反斜線“”加字元編碼的方式輸出;
-c:與“-lt”選項連用時,按照檔案狀態時間排序輸出目錄內容,排序的依據是檔案的索引節點中的ctime欄位。與“-l”選項連用時,則排序的一句是檔案的狀態改變時間;
-d:僅顯示目錄名,而不顯示目錄下的內容列表。顯示符號連結檔案本身,而不顯示其所指向的目錄列表;
-f:此引數的效果和同時指定“aU”引數相同,並關閉“lst”引數的效果;
-i:顯示檔案索引節點號(inode)。一個索引節點代表一個檔案;
--file-type:與“-F”選項的功能相同,但是不顯示“*”;
-k:以KB(千位元組)為單位顯示檔案大小;
-l:以長格式顯示目錄下的內容列表。輸出的資訊從左到右依次包括檔名,檔案型別、許可權模式、硬連線數、所有者、組、檔案大小和檔案的最後修改時間等;
-m:用“,”號區隔每個檔案和目錄的名稱;
-n:以使用者識別碼和群組識別碼替代其名稱;
-r:以檔名反序排列並輸出目錄內容列表;
-s:顯示檔案和目錄的大小,以區塊為單位;
-t:用檔案和目錄的更改時間排序;
-L:如果遇到性質為符號連結的檔案或目錄,直接列出該連結所指向的原始檔案或目錄;
-R:遞回處理,將指定目錄下的所有檔案及子目錄一併處理;
--full-time:列出完整的日期與時間;
--color[=WHEN]:使用不同的顏色高亮顯示不同型別的。

之前跟大家講過每種顏色分別代表什麼樣的顏色,在這你也可以通過 --color 自己指定不同型別顯示那種不同的顏色

下面是簡單的演示

[root@localhost ~]# ls    #預設顯示當前目錄下的檔案
1.txt  2.txt  3.txt  a  b  c
[root@localhost ~]# ls -a    #顯示當前目錄下所有的檔案,包含"."開頭的隱藏檔案
.  1.txt  3.txt  b              .bash_logout  .bashrc                c      .cshrc    .Python_history  .viminfo
..  2.txt  a      .bash_history  .bash_profile  .bashrc-anaconda3.bak  .cache  .ipython  .tcshrc          .vimrc
[root@localhost ~]# ls -l      #顯示當前目錄下檔案的詳細資訊,如許可權,檔案大小,修改時間
total 12
-rw-r--r--. 1 root root    0 Apr  5 10:29 1.txt
-rw-r--r--. 1 root root    0 Apr  5 10:29 2.txt
-rw-r--r--. 1 root root    0 Apr  5 10:29 3.txt
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 a
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 b
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 c
[root@localhost ~]# ll       #等同與ls -l 命令,顯示檔案詳細資訊
total 12
-rw-r--r--. 1 root root    0 Apr  5 10:29 1.txt
-rw-r--r--. 1 root root    0 Apr  5 10:29 2.txt
-rw-r--r--. 1 root root    0 Apr  5 10:29 3.txt
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 a
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 b
drwxr-xr-x. 2 root root 4096 Apr  5 10:29 c
[root@localhost ~]# ls -al      #組合選項 相當於 ls -a -l 顯示當前目錄下所有檔案或目錄的詳細資訊
total 68
dr-xr-x---.  7 root root 4096 Apr  5 10:29 .
dr-xr-xr-x. 22 root root 4096 Apr  5 09:27 ..
-rw-r--r--.  1 root root    0 Apr  5 10:29 1.txt
-rw-r--r--.  1 root root    0 Apr  5 10:29 2.txt
-rw-r--r--.  1 root root    0 Apr  5 10:29 3.txt
drwxr-xr-x.  2 root root 4096 Apr  5 10:29 a
drwxr-xr-x.  2 root root 4096 Apr  5 10:29 b
-rw-------.  1 root root 4083 Apr  4 18:03 .bash_history
-rw-r--r--.  1 root root  18 May 20  2009 .bash_logout
-rw-r--r--.  1 root root  176 May 20  2009 .bash_profile
-rw-r--r--.  1 root root  247 Mar 12 05:07 .bashrc
-rw-r--r--.  1 root root  176 Mar 11 06:12 .bashrc-anaconda3.bak
drwxr-xr-x.  2 root root 4096 Apr  5 10:29 c
drwxr-xr-x.  3 root root 4096 Apr  1 05:19 .cache
-rw-r--r--.  1 root root  100 Sep 22  2004 .cshrc
drwxr-xr-x.  5 root root 4096 Mar 12 05:10 .ipython
-rw-------.  1 root root  32 Mar 31 17:16 .python_history
-rw-r--r--.  1 root root  129 Dec  3  2004 .tcshrc
-rw-------.  1 root root 4016 Apr  2 04:35 .viminfo
-rw-r--r--.  1 root root  25 Mar 12 05:10 .vimrc

其他選項可以自己動手去試,由於篇幅問題,我就不一一演示了

mv 移動檔案目錄命令

mv(選項)(引數)

mv命令可以用來移動一個檔案或是一個目錄,同時也可以用來作為改名的命令

他一般需要兩個引數 ,source(原始檔或源目錄),target(目標檔案或目標目錄)

注意,如果目標路徑中存在相同的檔案,那麼將會覆蓋原先的檔案,如果只是移動到當前目錄下,而且與原先檔案目錄名不同,那麼這只是一個改名的操作

mv的選項如下

--backup=<備份模式>:若需覆蓋檔案,則覆蓋前先行備份;
-b:當檔案存在時,覆蓋前,為其建立一個備份;
-f:若目標檔案或目錄與現有的檔案或目錄重複,則直接覆蓋現有的檔案或目錄;
-i:互動式操作,覆蓋前先行詢問使用者,如果原始檔與目標檔案或目標目錄中的檔案同名,則詢問使用者是否覆蓋目標檔案。使用者輸入”y”,表示將覆蓋目標檔案;輸入”n”,表示取消對原始檔的移動。這樣可<br>以避免誤將檔案覆蓋。
--strip-trailing-slashes:刪除原始檔中的斜槓“/”;
-S<字尾>:為備份檔案指定字尾,而不使用預設的字尾;
--target-directory=<目錄>:指定原始檔要移動到目標目錄;
-u:當原始檔比目標檔案新或者目標檔案不存在時,才執行移動操作。

一般我們再使用mv命令時是用不到選項的,所以只是列舉選項以供參考

mv的應用

[root@localhost linuxidc]# ls
a.py  a.sh
[root@localhost linuxidc]# mv a.py b.py      #只是改名了
[root@localhost linuxidc]# ls
a.sh  b.py

[root@localhost linuxidc]# ls /root/a/
1.py  2.py  3.py  4.py  5.py
[root@localhost linuxidc]# pwd
/home/linuxidc
[root@localhost linuxidc]# mv /root/a/* .          #移動a目錄下所有檔案到當前目錄(*代表的是萬用字元,.代表的是當前目錄)
[root@localhost linuxidc]# ls
1.py  2.py  3.py  4.py  5.py  a.sh  b.py

mkdir 建立目錄命令

mkdir (選項)(引數)

在Linux端可以使用mkdir來建立目錄,如果你沒有加其他的路徑名,那麼預設是在當前目錄下建立目???,注意當資料夾存在時則提示不能建立

在這裡說一下建立資料夾其實和windowns管理一樣,要規劃好如何去佈局一個檔案系統,在父目錄下可以再建立子目錄,每個目錄儘量要存放相同型別的檔案,這樣更易於團隊的管理和使用

mkdir的選項

-Z:設定安全上下文,當使用SELinux時有效;
-m<目標屬性>或--mode<目標屬性>建立目錄的同時設定目錄的許可權;
-p或--parents 若所要建立目錄的上層目錄目前尚未建立,則會一併建立上層目錄;
--version 顯示版本資訊。

你也可以直接通過--help來獲取選項

例如我下面建立一個資料夾

[root@localhost ~]# mkdir myfolder
[root@localhost ~]# ls
myfolder

建立一個資料夾並設定許可權(許可權暫時還沒有講到,只是了解一下)

[root@localhost ~]# mkdir -m 711 newFolder
[root@localhost ~]# ll
total 8
drwxr-xr-x. 2 root root 4096 Apr  9 16:49 myfolder
drwx--x--x. 2 root root 4096 Apr  9 16:53 newFolder

許可權是不是和之前建立的不一樣了

當然你也可以直接建立多個目錄(引數)

[root@localhost ~]# mkdir a b c
[root@localhost ~]# ls
a  b  c

建立包含子目錄的目錄(遞回建立目錄)

遞回建立目錄需要用到 -p選項

[root@localhost ~]# mkdir -p a/b/c
[root@localhost ~]# ls
a
[root@localhost ~]# cd a
[root@localhost a]# ls
b
[root@localhost a]# cd b
[root@localhost b]# ls
c
[root@localhost b]# cd c

當前路徑建立了一個a,a中又建立了一個b,b中又建立了c

還可以通過列表來批次建立目錄

[root@localhost ~]# mkdir -p a/{1,2,3,4}
[root@localhost ~]# ls
a
[root@localhost ~]# cd a
[root@localhost a]# ls
1  2  3  4

tree命令

tree(選項)(引數)

tree命令以樹狀圖列出目錄的內容

下面是tree的所有選項

-a:顯示所有檔案和目錄;
-A:使用ASNI繪圖字元顯示樹狀圖而非以ASCII字元組合;
-C:在檔案和目錄清單加上色彩,便於區分各種型別;
-d:先是目錄名稱而非內容;
-D:列出檔案或目錄的更改時間;
-f:在每個檔案或目錄之前,顯示完整的相對路徑名稱;
-F:在執行檔案,目錄,Socket,符號連線,管道名稱名稱,各自加上"*","/","@","|"號;
-g:列出檔案或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼;
-i:不以階梯狀列出檔案和目錄名稱;
-l:<範本樣式> 不顯示符號範本樣式的檔案或目錄名稱;
-l:如遇到性質為符號連線的目錄,直接列出該連線所指向的原始目錄;
-n:不在檔案和目錄清單加上色彩;
-N:直接列出檔案和目錄名稱,包括控制字元;
-p:列出許可權標示;
-P:<範本樣式> 只顯示符合範本樣式的檔案和目錄名稱;
-q:用“?”號取代控制字元,列出檔案和目錄名稱;
-s:列出檔案和目錄大小;
-t:用檔案和目錄的更改時間排序;
-u:列出檔案或目錄的擁有者名稱,沒有對應的名稱時,則顯示使用者識別碼;
-x:將範圍侷限在現行的檔案系統中,若指定目錄下的某些子目錄,其存放於另一個檔案系統上,則將該目錄予以排除在尋找範圍外。

事實上用不上,只是參考

例如我們通過mkdir建立一個目錄體系,然後通過tree來檢視

[root@localhost a]# mkdir -p a/{1,2,3,4} b/{1,2,3} c/{1,2} d/1
[root@localhost a]# ls
a  b  c  d
[root@localhost a]# tree
.
├── a
│  ├── 1
│  ├── 2
│  ├── 3
│  └── 4
├── b
│  ├── 1
│  ├── 2
│  └── 3
├── c
│  ├── 1
│  └── 2
└── d
    └── 1
 
14 directories, 0 files

  非常清晰的列出了檔案的結構

注意:tree不僅會列出目錄,還會列出目錄中的所有檔案

比如我在a下面的1資料夾建立了三個檔案

[root@localhost a]# tree
.
├── a
│  ├── 1
│  │  ├── a.py
│  │  ├── b.py
│  │  └── c.py
│  ├── 2
│  ├── 3
│  └── 4
├── b
│  ├── 1
│  ├── 2
│  └── 3
├── c
│  ├── 1
│  └── 2
└── d
    └── 1
 
14 directories, 3 files

tree命令有很多用法,我這不一一解釋了,你可以按照上面的選項去嘗試一下

cp 複製命令

cp(選項)(引數)

cp命令用來將一個或多個原始檔或者目錄複製到指定的目的檔案或目錄。它可以將單個原始檔複製成一個指定檔名的具體的檔案或一個已經存在的目錄下。cp命令還支援同時複製多個檔案,當一次複製多個檔案時,目標檔案引數必須是一個已經存在的目錄,否則將出現錯誤。

cp的一些選項

-a:此引數的效果和同時指定"-dpR"引數相同;
-d:當複製符號連線時,把目標檔案或目錄也建立為符號連線,並指向與原始檔或目錄連線的原始檔案或目錄;
-f:強行複製檔案或目錄,不論目標檔案或目錄是否已存在;
-i:覆蓋既有檔案之前先詢問使用者;
-l:對原始檔建立硬連線,而非複製檔案;
-p:保留原始檔或目錄的屬性;
-R/r:遞回處理,將指定目錄下的所有檔案與子目錄一併處理;
-s:對原始檔建立符號連線,而非複製檔案;
-u:使用這項引數後只會在原始檔的更改時間較目標檔案更新時或是名稱相互對應的目標檔案並不存在時,才複製檔案;
-S:在備份檔案時,用指定的字尾“SUFFIX”代替檔案的預設字尾;
-b:覆蓋已存在的檔案目標前將目標檔案備份;
-v:詳細顯示命令執行的操作。

cp的引數其實和mv有點類似,都是需要兩個引數,一個是原始檔路徑,一個目標路徑,只是mv是移動,檔案數量並沒有變,而cp命令是複製一個檔案或目錄

下面我們通過一個例子來熟悉以下這個命令

把a.py複製到a資料夾中

[root@localhost ~]# ls
a  a.py
[root@localhost ~]# cp a.py a/
[root@localhost ~]# ls
a  a.py
[root@localhost ~]# cd a
[root@localhost a]# ls
a.py

注意,同mv命令一樣,肯定是會用到相對檔案路徑的," . "代表當前檔案路徑," .. "代表上一層檔案路徑," ~ "代表家目錄

比如把檔案複製到當前資料夾,並改名

[root@localhost ~]# ls
a.py
[root@localhost ~]# cp a.py b.py
[root@localhost ~]# ls
a.py  b.py

或是從其他檔案路徑複製到當前路徑

[root@localhost b]# tree /root
/root
├── a
│  └── a.py
└── b
 
2 directories, 1 file
[root@localhost b]# cp ../a/a.py .
[root@localhost b]# tree /root
/root
├── a
│  └── a.py
└── b
    └── a.py
 
2 directories, 2 files

當要複製多個檔案時或是一個目錄時,這時就要用到-r 遞回處理

[root@localhost b]# pwd
/root/b
[root@localhost b]# tree /root
/root
├── a
│  ├── 1.py
│  ├── 2.py
│  └── 3.py
├── b
└── c
 
3 directories, 3 files
[root@localhost b]# cp -r ../a .
[root@localhost b]# tree /root
/root
├── a
│  ├── 1.py
│  ├── 2.py
│  └── 3.py
├── b
│  └── a
│      ├── 1.py
│      ├── 2.py
│      └── 3.py
└── c

  將a整個目錄都複製過來了

有時候我們在複製多個檔案時,很有可能會遇到有檔案重複,這時我們就可以使用 -i 選項互動式進行cp命令,也就是在覆蓋既有檔案之前先詢問使用者

[root@localhost b]# tree /root
/root
├── a
│  ├── a.py
│  └── b.py
├── b
│  └── a.py
└── c
 
3 directories, 3 files
[root@localhost b]# cp -i  ../a/a.py .
cp: overwrite `./a.py'? y      #y代表的是yes

如果檔案很多時,而且重名檔案也很多,那麼你就可能需要不停的按y或yes,這樣很麻煩

cp aaa/* /bbb
複製目錄aaa下所有到/bbb目錄下,這時如果/bbb目錄下有和aaa同名的檔案,需要按Y來確認並且會略過aaa目錄下的子目錄。
 
cp -r aaa/* /bbb
這次依然需要按Y來確認操作,但是沒有忽略子目錄。
 
cp -r -a aaa/* /bbb
依然需要按Y來確認操作,並且把aaa目錄以及子目錄和檔案屬性也傳遞到了/bbb。
 
cp -r -a aaa/* /bbb
成功,沒有提示按Y、傳遞了目錄屬性、沒有略過目錄。

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-04/151801.htm


IT145.com E-mail:sddin#qq.com