Java工程師必學(xué)的Linux命令(一)文件與目錄管理

從本篇文章開始,我將總結(jié)一些Java工程師日常研發(fā)工作中會(huì)使用到的Linux命令,在介紹這些命令的過程中,也會(huì)對(duì)Linux系統(tǒng)的一些基礎(chǔ)知識(shí)進(jìn)行普及。希望對(duì)大家工作和學(xué)習(xí)有所幫助吧。
本篇將從文件與目錄管理開始,畢竟Linux中一切皆文件嘛。
注:本系列文章所有操作都是基于RedHat系列的Centos 7。所以開始學(xué)習(xí)前,請(qǐng)大家先安裝Centos 7。


1. 基本概念

那么,先來看看幾個(gè)基本概念吧

1.1 Linux的目錄結(jié)構(gòu)

Linux的目錄結(jié)構(gòu)可以看作一顆樹,起點(diǎn)是根,也稱為根目錄,每一個(gè)目錄可以看作是枝,每一個(gè)文件節(jié)點(diǎn)可以看作是葉。如下圖:


01.png

舉幾個(gè)小例子:
根: /
枝:/usr
葉:/usr/local/data.db

1.2 家目錄

在Linux中,系統(tǒng)在創(chuàng)建每一個(gè)用戶時(shí),都會(huì)為這個(gè)用戶創(chuàng)建一個(gè)家目錄,類似于Windows中的“我的文檔”。這些用戶分兩類,一類是超級(jí)管理員,一個(gè)系統(tǒng)只能有一個(gè)超級(jí)管理員,它的用戶名是root,它的家目錄是/root。另一類是普通用戶,它的家目錄是/home/$用戶名,比如一個(gè)用戶名為jacky的用戶,它的家目錄是/home/jacky。
當(dāng)用戶登錄系統(tǒng)時(shí),默認(rèn)進(jìn)入的目錄就是該用戶的家目錄。

1.3 絕對(duì)路徑和相對(duì)路徑

(1)絕對(duì)路徑
從根目錄開始查找的路徑。比如說有一個(gè)文件data.db,它位于根目錄的子目錄usr下,那么它的絕對(duì)路徑就是/usr/data.db。
注意:根目錄一定是以/開頭的,即從根開始一級(jí)一級(jí)向下找,一直找到這個(gè)目錄為止。
(2)相對(duì)路徑
從當(dāng)前所在目錄開始查找的路徑。比如當(dāng)前目錄是usr目錄,查找usr下的local子目錄下的work文件,這個(gè)文件的相對(duì)路徑就是local/work。

1.4 Linux系統(tǒng)自帶目錄及作用

Centos 6系列根目錄下默認(rèn)一級(jí)目錄有:

  • /bin 命令保存目錄,普通用戶可使用的命令
  • /boot 啟動(dòng)目錄,存放啟動(dòng)相關(guān)文件
  • /dev 設(shè)備文件
  • /etc 配置文件
  • /home 普通用戶的家目錄
  • /lib 第三方庫文件保存目錄,系統(tǒng)或軟件運(yùn)行所需依賴的第三方庫文件
  • /mnt 系統(tǒng)掛載目錄
  • /media 媒體外設(shè)掛載目錄
  • /misc 音頻設(shè)備掛載目錄
  • /root 超級(jí)用戶的家目錄
  • /tmp 臨時(shí)目錄 存放臨時(shí)文件
  • /sbin 超級(jí)用戶才能使用的命令存放的目錄
  • /proc 內(nèi)存運(yùn)行目錄,存放一些運(yùn)行于內(nèi)存中的信息
  • /sys 系統(tǒng)配置內(nèi)存目錄
  • /usr 用戶共享資源目錄,一般存放安裝的第三方軟件
  • /var 可變文檔目錄,可用于存放訪問日志等可變文檔

注意:proc和sys的數(shù)據(jù)是直接寫到內(nèi)存中的,所以不能直接往這兩個(gè)目錄寫數(shù)據(jù),因?yàn)闀?huì)寫到內(nèi)存,內(nèi)存占滿,系統(tǒng)就會(huì)崩潰。

Centos7 根目錄下的一級(jí)目錄出現(xiàn)了以下變動(dòng):

  • /bin, /sbin, /lib, /lib64都變成了鏈接文件,實(shí)際內(nèi)存分別存放在/usr/bin, /usr/sbin, /usr/lib, /usr/lib64。

  • 新增了/run目錄存放系統(tǒng)服務(wù)進(jìn)程生成的比如pid等臨時(shí)文件,比如systemd生成的臨時(shí)文件

1.5 文件類型

Linux不依靠后綴名來區(qū)分文件類型,總共有7種類型:普通文件、目錄文件、軟鏈接文件、塊設(shè)備文件、字符設(shè)備文件、套接字文件和管道文件。常用的是前三種。

1.6 文件存儲(chǔ)方式

Linux中一切皆文件,那么文件在磁盤上是如何進(jìn)行存儲(chǔ)的呢?文件的存儲(chǔ)是由文件系統(tǒng)管理的,現(xiàn)主流的文件系統(tǒng)有EXT2/3/4,F(xiàn)AT16/32等。以EXT系列文件系統(tǒng)為例:
文件由兩部分?jǐn)?shù)據(jù)組成,一部分是文件的內(nèi)容,稱為數(shù)據(jù)塊。一部分是文件的元信息,包括文件的權(quán)限、所有者、群組、時(shí)間參數(shù)等。
數(shù)據(jù)塊是分塊存儲(chǔ)的,每一塊都是物理上等大的數(shù)據(jù),默認(rèn)每個(gè)數(shù)據(jù)塊4KB,是存儲(chǔ)文件的最小空間,稱為block。每一個(gè)block都有唯一的編號(hào),當(dāng)一個(gè)文件大到一個(gè)block無法存儲(chǔ)時(shí),就會(huì)將文件內(nèi)容切分存儲(chǔ)到不同的塊中;
元信息則存儲(chǔ)在inode中,每一個(gè)inode也有唯一的編號(hào)的,但與數(shù)據(jù)塊不同,一個(gè)文件只會(huì)有一個(gè)inode。因此inode也經(jīng)常用來作為文件的標(biāo)識(shí)。
文件系統(tǒng)維護(hù)一個(gè)目錄表,稱為super block,它記錄了一個(gè)文件的inode及它分配的block的編號(hào)。用于檢索和管理文件存儲(chǔ)。

2. 目錄管理

2.1 查看當(dāng)前路徑

pwd

前面我們說過了用戶登錄系統(tǒng)后,默認(rèn)進(jìn)入的是家目錄,那么我們以root用戶登錄后,輸入以上命令,查看一下root用戶的家目錄:


pwd

pwd是三個(gè)英文單詞的縮寫:print working directory,打?。ó?dāng)前)工作目錄。

2.2 查看目錄子節(jié)點(diǎn)列表

2.2.1 當(dāng)前目錄下的子節(jié)點(diǎn)列表

使用以下命令:

ls [選項(xiàng)] [目錄路徑]

ls后不加選項(xiàng),表示查看當(dāng)前所在目錄。
在根目錄下執(zhí)行l(wèi)s命令,如下圖:


當(dāng)前目錄下的子節(jié)點(diǎn)列表

2.2.2 指定目錄下的子節(jié)點(diǎn)列表

在ls命令后加上要查看的目錄路徑

ls 目錄路徑
/root下的子節(jié)點(diǎn)

2.2.3 顯示所有文件,包括隱藏文件

加上-a 選項(xiàng),表示顯示所有文件

ls -a 目錄路徑
顯示所有文件

2.2.4 顯示文件詳細(xì)信息

加上-l 選項(xiàng),表示顯示文件詳細(xì)信息

ls -l 目錄路徑
顯示文件詳細(xì)信息

這里顯示的有文件的權(quán)限、所有者、所屬組、文件大小、時(shí)間參數(shù)、文件名等。

2.2.5 人性化顯示文件大小

加上-h 選項(xiàng),表示人性化顯示文件大小,可以結(jié)合-l選項(xiàng)。

ls -lh 目錄路徑
人性化顯示文件大小

注意到,文件大小顯示的是1.3K,而不再是之前例子中顯示的1230了。

2.2.6 顯示inode

加上-i選項(xiàng),可以顯示文件的inode。這是文件的唯一標(biāo)識(shí)。


顯示inode

這里的8409154就是文件的inode。

2.2.7 顯示目錄屬性

如果想要查看的是目錄的屬性,而不是目錄下的子節(jié)點(diǎn)。則可以使用-d選項(xiàng)。

ls -d 目錄路徑
顯示目錄屬性

2.3 切換目錄/進(jìn)入目錄

想要進(jìn)入某個(gè)目錄,執(zhí)行以下命令

cd 目錄路徑

進(jìn)入/usr/local目錄,如下圖所示:


切換目錄

此外,cd命令進(jìn)行一些特定的目錄,還有以下簡化的命令

cd ~      表示進(jìn)入當(dāng)前用戶的家目錄
cd -       進(jìn)入上次目錄
cd ..      進(jìn)入上一級(jí)目錄
cd .       進(jìn)入當(dāng)前目錄

2.4 創(chuàng)建目錄

2.4.1 創(chuàng)建單級(jí)目錄

可以使用mkdir命令來創(chuàng)建目錄

mkdir 目錄名

比如,在/usr/local目錄下創(chuàng)建一個(gè)新目錄test。
創(chuàng)建完后,可以使用ls命令查看。


創(chuàng)建目錄

2.4.2 遞歸創(chuàng)建多級(jí)目錄

mkdir加上-p選項(xiàng),即可以遞歸創(chuàng)建多級(jí)目錄。

mkdir -p test/today/job
創(chuàng)建多級(jí)目錄

2.5 刪除目錄

rmdir命令,用于刪除空目錄。如果目錄里有子目錄或者文件,則無法使用此命令。

rmdir  job

3. 文件管理

3.1 創(chuàng)建文件

3.1.1 touch命令創(chuàng)建文件

touch命令可以在當(dāng)前目錄下創(chuàng)建一個(gè)空文件。

touch 文件名
touch命令

3.1.2 輸出重定向創(chuàng)建文件

輸出重定向,我們?cè)诤竺娴南到y(tǒng)管理部分文章再細(xì)講。這里只講以下命令格式

echo “文本內(nèi)容” > 文件名

將文本內(nèi)容輸出重定向到文件,如果這個(gè)文件不存在,則會(huì)先創(chuàng)建這個(gè)文件。


輸出重定向

3.1.3 vi工具創(chuàng)建文件

vi是linux自帶的文本編輯工具,后面的文章我們會(huì)介紹它的用法。這里只涉及用它來創(chuàng)建文件的基本操作。

vi 文件名

以上命令會(huì)進(jìn)行vi會(huì)話,如果這個(gè)文件不存在,則會(huì)先創(chuàng)建這個(gè)文件。用戶可以輸入:ESC鍵 + :wq退出。

3.2 查看文件內(nèi)容

3.2.1 cat命令

cat命令用于將文件內(nèi)容輸出到標(biāo)準(zhǔn)輸入設(shè)備(也就是屏幕)上。當(dāng)文件內(nèi)容很多時(shí),會(huì)一閃而過,體驗(yàn)不是很好。

cat [選項(xiàng)] 文件名

常用選項(xiàng)有:

-n或--number:有1開始對(duì)所有輸出的行數(shù)編號(hào);
-b或--number-nonblank:和-n相似,只不過對(duì)于空白行不編號(hào);
-s或--squeeze-blank:當(dāng)遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行;

3.2.2 less和more命令

more會(huì)以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會(huì)往回(back)一頁顯示,而且還有搜尋字串的功能 。more命令從前向后讀取文件,因此在啟動(dòng)時(shí)就加載整個(gè)文件。

more +3 test.log               #從第三行開始顯示日志內(nèi)容

在 more 的時(shí)候,我們并沒有辦法向前面翻, 只能往后面看,但若使用了 less 時(shí),就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往后翻看文件,更容易用來查看一個(gè)文件的內(nèi)容!除此之外,在 less 里頭可以擁有更多的搜索功能,不止可以向下搜,也可以向上搜。而且** less 在查看之前不會(huì)加載整個(gè)文件, 它有緩沖區(qū)的概念**。
當(dāng)查看文件內(nèi)容較多時(shí),建議使用less命令。

less file1

3.2.3 head和tail命令

head、tail #查看文本中開頭或結(jié)尾部分的內(nèi)容

head  -n  5  a.log #查看a.log文件的前5行
tail  -F b.log #循環(huán)讀?。╢ollow)

除了上述命令之外,vi也可以用來查看文件內(nèi)容,等我們后面介紹vi時(shí)再細(xì)講。

3.3 刪除文件/目錄

命令格式:

rm -rf [文件或目錄]

選項(xiàng)

-r 刪除目錄
-f 強(qiáng)制

刪除目錄時(shí),建議使用相對(duì)路徑,避免誤操作刪除根目錄下的所有內(nèi)容(rm -rf /)

3.4 復(fù)制文件/目錄

命令格式:

cp [選項(xiàng)] [原文件或目錄] [文件或目錄]

選項(xiàng)有:

-r 復(fù)制目錄
-p 連帶復(fù)制文件屬性(比如時(shí)間參數(shù))
-d 若源文件是鏈接文件,則復(fù)制鏈接屬性
-a 相當(dāng)于 -pdr
復(fù)制文件

注意:如果不加 -p 選項(xiàng),則復(fù)制出來的文件是新生成的,它擁有自己的文件屬性,比如創(chuàng)建時(shí)間會(huì)是重新生成的。加上 -p選項(xiàng)之后,則連文件屬性也一并復(fù)制過來了,就連創(chuàng)建時(shí)間也會(huì)和源文件相同。

3.5 移動(dòng)(重命令)文件/目錄

命令格式:

mv [原文件或目錄] [目標(biāo)目錄]

例如

mv a.txt local/  將文件b.txt移動(dòng)到local目錄下
mv /oracle/ test/  將/oracle/目錄移動(dòng)到test目錄下

注意:

  • 如果原文件就在目標(biāo)目錄下,那就是改名命令。
  • 與cp不同,mv命令移動(dòng)目錄時(shí),不用加-r選項(xiàng)。

4. 管理鏈接

4.1 硬鏈接與軟鏈接

鏈接分為硬鏈接和軟鏈接。
前面我們已經(jīng)提過,一個(gè)文件可以看作由兩部分組成,一部分是元信息和索引信息,稱為inode,一部分是實(shí)際文件內(nèi)容,存儲(chǔ)在一個(gè)或多個(gè)block塊中。
硬鏈接可以看作對(duì)文件的一個(gè)引用,具有以下特點(diǎn):

  • 它與原文件擁有相同inode和block,可以看做是同一個(gè)文件
  • 可通過inode進(jìn)行標(biāo)識(shí)
  • 不能跨磁盤分區(qū)
  • 不能針對(duì)目錄進(jìn)行使用

最重要的一點(diǎn)是:硬鏈接與原文件擁有相同的inode,所以它們的block塊也是相同的,修改兩者中任一個(gè),文件的內(nèi)容都會(huì)改變。無論刪除硬鏈接和原文件任一個(gè),只要另一個(gè)文件存在,都不影響對(duì)文件的訪問(相當(dāng)于只刪除了對(duì)文件的一個(gè)引用而已,文件并沒有被實(shí)際刪除)。
創(chuàng)建了硬鏈接,文件的引用計(jì)數(shù)會(huì)加1。

軟鏈接特征:

  • 它擁有自己的inode和block塊,但是block塊中只保存原文件的文件名和inode編號(hào),并沒有實(shí)際的文件數(shù)據(jù)。
  • 修改原文件或軟鏈接二者任一,另一個(gè)都會(huì)改變。
  • 刪除原文件,軟鏈接則不能使用

注意:創(chuàng)建軟鏈接,一定要寫絕對(duì)路徑,否則它會(huì)在目標(biāo)目錄下尋找原文件(不一定能找到)

4.2 創(chuàng)建鏈接

命令格式:

ln [選項(xiàng)] [原文件] [目標(biāo)文件]

選項(xiàng):

-s 創(chuàng)建軟鏈接

不加選項(xiàng),則創(chuàng)建的是硬鏈接。

5. 總結(jié)

本文講述了Linux(具體是Centos 7)中常用到的文件和目錄管理相關(guān)命令,這些命令在實(shí)際開發(fā)和運(yùn)維過程中都是最基本的,必須熟記和多加練習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容