1. 程式人生 > 實用技巧 >Linux的目錄和常用命令詳解

Linux的目錄和常用命令詳解

1、Linux 系統目錄結構

在我們平時生活中,作業系統用的最多的是Windows系統,如果你是土豪從小到大都是iPhone、Mac之類的電子產品,那你應該不會來做程式設計師吧(所以你就看不到這篇文章),在Windows系統下,系統的整個磁碟會被拆分為不同的磁碟分割槽,而且每個磁碟會分配一個不同的碟符,比如 C:\、D:\ 等等,每個磁碟分割槽都單獨存放自己的檔案,它們有自己的根目錄,每個磁碟分割槽的起點就是它們的根目錄,比如 C:\、D:\ 就相當於 C 盤和 D 盤的根目錄了,如果想要找到一個檔案,我們只要依次進入該檔案所在的磁碟分割槽即可(這裡假設是D盤),然後在進入該分割槽下的目錄,最終找到這個檔案。而Linux 作業系統也有目錄的概念,只是Linux 和Windows 的磁碟管理有一點區別,Linux 是將整個磁碟進行統一的管理,不存在C:\、D:\ 等碟符,Linux整個系統只有一個根目錄 "/",所有的檔案和目錄都是在這個根目錄下,它表示 Linux 檔案系統的起點,因為在Linux系統中一切都是檔案,其中的目錄、字元裝置、光碟、印表機等都被抽象成了檔案,所以平時和我們打交道的都是檔案。

另外要注意一點,在Linux 中目錄之間的間隔使用的是正斜線 (forward slash)"/",而 Windows中用的是反斜線 (back slash)"\"。

Linux系統在安裝的時候系統會建立一些預設的目錄,每個目錄都有其特殊的功能,所以下面我們對 Linux 系統中的目錄結構以及經常使用到的概念進行一個完整介紹。

下面來簡單介紹一下這些目錄的含義(紅色標註為重點):

  • /:根目錄,檔案的最頂端,是整個 Linux 檔案系統的起點。
  • /bin:bin是Binary的縮寫, 用於存放系統中常用的命令,任何使用者都有許可權執行,例如:ls、mkdir、mv等等。
  • /boot 用於存放Linux啟動時的一些核心檔案,包括一些連線檔案以及映象檔案,其中Linux 的核心就存放在這個目錄中。
  • /dev : dev是Device(裝置)的縮寫, 存放的是Linux的外部裝置,例如:硬碟、光碟機、滑鼠等裝置檔案,在Linux中訪問裝置的方式和訪問檔案的方式是相同的。
  • /etc 這個目錄非常重要,用於存放系統和程式所需的配置檔案,作用類似於 Windows 的登錄檔。
  • /home:普通使用者的主目錄,在Linux中,每個使用者都有一個自己的目錄,一般該目錄名是以使用者的賬號命名的,比如 user1 的home目錄是 /home/user1。
  • /lib lib64:這個目錄裡存放著系統最基本的動態連線共享庫,其作用類似於Windows裡的DLL檔案。它們自己不能被執行,需要被其他的程式呼叫,幾乎所有的應用程式都需要用到共享庫。
  • /media:用於掛在裝置,linux系統會自動識別一些裝置,例如U盤、光碟機等等,當識別後,linux會把識別的裝置掛載到這個目錄下。
  • /mnt:系統提供該目錄是為了讓使用者臨時掛載別的檔案系統的,我們可以將光碟機掛載在/mnt/上,然後進入該目錄就可以檢視光碟機裡的內容了,例如增加一塊硬碟,需要手動掛載。
  • /opt:用於安裝額外軟體所用的目錄,預設是空的。比如你安裝一個Mysql資料庫則就可以放到這個目錄下。
  • /proc:這個目錄是一個虛擬的目錄,它是系統記憶體的對映,我們可以通過直接訪問這個目錄來獲取系統資訊。
  • /root:該目錄為系統管理員,也就是超級許可權者root使用者的home目錄。
  • /run:用於存放程序產生的臨時檔案。當系統重啟時,這個目錄下的檔案應該被刪掉或清除。
  • /sbin:s就是Super User的意思,存放的是系統管理員使用的系統管理程式。
  • /srv:存放一些服務啟動之後需要提取的資料。
  • /sys:該目錄下安裝了核心中新出現的一個檔案系統 sysfs,該檔案系統是核心裝置樹的一個直觀反映。
  • /tmp:用來存放一些臨時檔案的,所有使用者都可執行寫操作。
  • /usr:這是一個非常重要的目錄,很多的應用程式和檔案都預設放在這個目錄下,類似於Windows下的Program Files目錄。
  • /usr/bin: 系統使用者使用的應用程式。
  • /usr/sbin: 超級使用者使用的比較高階的管理程式和系統守護程式。
  • /usr/src: 核心原始碼預設的放置目錄。
  • /usr/local該目錄下一般是你安裝軟體的目錄,也相當於在Windows下的Program Files這個目錄。
  • /var:這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌log檔案。
  • /lost+found:這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些檔案。

2、Linux的絕對路徑與相對路徑

檔案的路徑是用來幫助我們定位到某個檔案的,一般檔案的路徑分為絕對路徑和相對路徑。

  • 絕對路徑:指的是從根目錄(/)開始寫起的檔案或目錄路徑,也就是將目錄用完整的路徑表示出來。
  • 相對路徑:指的是相對於當前工作目錄為起點來表示的檔案路徑。(注意:使用相對路徑進入檔案時最前面不加/)

簡單舉例:

1)、絕對路徑

例如我們進入:/usr/local/bin 目錄下。


2)、相對路徑

我們首先回退到/usr/local目錄,然後相對於這個目錄進入/bin 目錄。

或者 又或者直接使用絕對路徑

兩個特殊的目錄:

  1. . :一個點代表當前的目錄,也可以用 . / 來表示。
  2. . . :兩個點代表上一層目錄,也可以用 . . / 來表示。


注意:絕對路徑和相對路徑二者的使用完全看自己怎麼選擇,兩者各有利弊,絕對路徑可以在任何目錄下進入其它任何目錄中,可以保證他的路徑是絕對正確的,但是如果目錄檔案很多則需敲一段很長的路徑。而相對路徑在有同名的目錄下非常的方便,但是如果要在不同命的目錄下進入到其它目錄就很麻煩(不使用絕對路徑的情況),首先得退到根目錄,然後才能進入其它目錄。

①、相對路徑的用途:例如現在有三個目錄分別為:

  • /usr/local/packages/etc
  • /usr/local/packages/bin

像這樣的目錄我們使用相對路徑是非常方便的,如果我想從/usr/local/packages/etc目錄進入到/usr/local/packages/bin目錄,可以直接使用 cd ../bin ,這樣非常的方便。

②、絕對路徑的用途:絕對路徑由於將路徑全部完整的寫出來了,所以是非常準確的。所以路徑是寫在 shell scripts 中的路徑,那麼最好使用絕對路徑,雖然可能路徑非常長,但是這種寫法是絕對不會出錯的。

    3、Linux中的基本命令介紹(非常重要!!!)

    這裡注意一點:系統bin目錄下和sbin目錄下是存放“指令”對應的可“執行程式檔案”目錄,其中bin目錄是所有使用者都可以使用裡面的命令,而sbin目錄檔案對應指令都是"root"使用者可以執行的指令,普通使用者不能使用該目錄裡的命令,所以普通使用者和和root使用者的開頭是有區別的:

    • root使用者:用#開頭
    • 普通使用者:用$開頭

    下面來介紹Linux中的基本命令。

    4、使用者與使用者組管理

    使用者、使用者組和其他人的基本概念:

    • 使用者:表示能夠使用系統的使用者。root也是使用者的一種,只是它有著最高的許可權。
    • 使用者組:表示使用者的一個集合,不同組的使用者對檔案的許可權是不一樣的。
    • 其他人:顧名思義,它是能夠使用系統的使用者,但是沒有加入任何使用者組。

    ========================

    關於他們的一些基本命令:

    1)、useradd:命令用於建立新的使用者,預設的使用者家目錄會被存放在/home目錄中,預設的Shell直譯器為/bin/bash,而且預設會建立一個與該使用者同名的基本使用者組。。

    語法格式為:useradd [選項] 使用者名稱

    常用選項:

    • -d 指定使用者的家目錄(預設為/home/username)
    • -e 賬戶的到期時間,格式為YYYY-MM-DD.
    • -u 指定該使用者的預設UID
    • -g 指定一個初始的使用者基本組(必須已存在),格式為:useradd –g 使用者組 使用者名稱
    • -G 指定一個或多個擴充套件使用者組
    • -N 不建立與使用者同名的基本使用者組
    • -s 指定該使用者的預設Shell直譯器

    簡單舉例:

    在上面的命令中,表示建立一個普通使用者並指定家目錄的路徑、使用者的UID以及Shell直譯器。這裡注意/sbin/nologin,它是終端直譯器中的一員,與Bash直譯器有著天壤之別。一旦使用者的直譯器被設定為nologin,則代表該使用者不能登入到系統中。

    然後用 id username 命令來檢視使用者的資訊:


    2)、password:用於修改使用者密碼、過期時間、認證資訊等(root管理員在Linux系統中修改自己或他人的密碼時不需要驗證舊密碼,這一點特別方便)。

    語法格式為:passwd [選項] [使用者名稱]

    常用選項:

    • -l 鎖定使用者,禁止其登入
    • -u 解除鎖定,允許使用者登入
    • -d 使該使用者可用空密碼登入系統
    • -e 強制使用者在下次登入時修改密碼
    • -S 顯示使用者的密碼是否被鎖定,以及密碼所採用的加密演算法名稱

    簡單舉例:


    3)、groupadd:命令用於建立使用者組。

    語法格式為:groupadd [選項] 群組名

    常用選項:

    • -g 指定新使用者組的組標識號(GID)。格式:groupadd -g 101 group
    • -o 一般與-g選項同時使用,表示新使用者組的GID可以與系統已有使用者組的GID相同。

    建立使用者組的步驟非常簡單,例如使用如下命令建立一個使用者組linuxgroup,簡單舉例:


    4)、groupdel:用於刪除建立的使用者組。格式:groupdel 使用者組名


    5)、groupmod:用於修改使用者組。

    語法格式為:groupadd [選項] 使用者組名

    常用選項:

    • -g GID 為使用者組指定新的組標識號。
    • -o 與-g選項同時使用,使用者組的新GID可以與系統已有使用者組的GID相同。
    • -n 新使用者組 將使用者組的名字改為新名字

    簡單例項(就不實際運行了):groupmod –g 10000 –n group3 group2


    6)、usermod:命令用於修改使用者的屬性。

    語法格式為:usermod [選項] 使用者名稱

    常用選項:

    • -c 填寫使用者賬戶的備註資訊
    • -d –m 引數-m與引數-d連用,可重新指定使用者的家目錄並自動把舊的資料轉移過去
    • -e 賬戶的到期時間,格式為YYYY-MM-DD
    • -g 修改使用者所屬的使用者組id,即gid
    • -G 修改使用者所屬的使用者組,即把使用者追加到某些組中
    • -L 鎖定使用者禁止其登入系統
    • -U 解鎖使用者,允許其登入系統
    • -s 變更預設終端
    • -u 修改使用者的UID

    簡單舉例:

    --將使用者zhangsan加入到root使用者組中,這樣擴充套件組列表中則會出現root使用者組的字樣,而基本組不會受到影響:

    --修改使用者zhangsan的使用者UID值:


    7)、userdel:用於刪除使用者。

    語法格式為:userdel [選項] 使用者名稱

    常用選項:

    • -f 強制刪除使用者
    • -r 同時刪除使用者及使用者家目錄

    注意:一般在實際的刪除使用者時,都不會刪除使用者的home目錄。

    5、檔案的基本屬性和許可權

    在Linux系統中一切都是檔案,但是每個檔案的型別不盡相同,而且每個檔案的訪問許可權也不相同,因此Linux系統使用了不同的字元來加以區分檔案的型別訪問許可權,如下所示。

    我們檢視跟目錄下的所有檔案:

    這裡就以home目錄為例,下面來簡單分析一下。

    其中第一列代表這個檔案的型別與許可權,第一個字元代表這個檔案的型別(目錄、檔案或連結檔案等):

    • -:普通檔案,如hello.txt。
    • d:目錄檔案。
    • l:連結檔案。
    • b:塊裝置檔案。
    • c:字元裝置檔案。
    • p:管道檔案。

    後面的字元為3個一組,第一組為“檔案所有者的許可權”,即檔案的所有者才能進行讀寫執行的操作。第二組為“使用者組的許可權”,只要是在這個組的使用者都許可權。第三組為“其它非本使用者組的許可權”。


    ----更改檔案屬性命令:

    1)、chgrp:更改檔案所屬使用者組

    語法格式為:chgrp [-R] 屬組名 檔名

    引數選項

    • -R:遞迴更改檔案所屬使用者組,就是在更改某個目錄檔案的所屬組時,如果加上-R的引數,那麼該目錄下的所有檔案的屬組都會更改。

    2)、chown:更改檔案所有者,也可以同時更改檔案屬組

    語法格式為:chown [–R] 屬主名 檔名 或者 chown [-R] 屬主名:屬組名 檔名

    引數選項:

    • -R:遞迴更改檔案所屬使用者組,就是在更改某個目錄檔案的所屬組時,如果加上-R的引數,那麼該目錄下的所有檔案的屬組都會更改。


    3)、chmod:更改檔案的許可權

    語法格式為:chmod [選項] 檔名

    檔案許可權的設定方法有兩種,分別是使用數字和符號來進行許可權更改,推薦使用數字,現在我們來學習:

    ①、數字型別改變檔案許可權

    Linux 檔案的基本許可權就有九個,分別是 owner/group/others(擁有者/組/其他) 三種身份各有自己的 read/write/execute 許可權。先複習一下剛剛上面提到的資料:檔案的許可權字元為:[-rwxrwxrwx] , 這九個許可權是三個三個一組的!其中,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:

    • r:4
    • w:2
    • x:1
    • -:0

    每種身份(owner/group/others)各自的三個許可權(r/w/x)分數是需要累加的,例如當權限為:[-rwxrwx---] 分數則是:

    • owner = rwx = 4+2+1 = 7
    • group = rwx = 4+2+1 = 7
    • others= --- = 0+0+0 = 0

    所以等一下我們設定許可權的變更時,該檔案的許可權數字就是 770。變更許可權的指令 chmod 的語法是這樣的:

    # chmod [-R] xyz 檔案或目錄

    選項與引數:

    • xyz : 就是剛剛提到的數字型別的許可權屬性,為 rwx 屬性數值的相加。
    • -R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更

    簡單舉例:

    假如將檔案許可權改為:[-rwxr-xr],可以發現有些許可權沒有,那麼許可權的分數則為:[4+2+1][4+0+1][0+0+0]=750,所以執行:chmod 750 filename。

    ===============================

    ②、數字型別改變檔案許可權

    還有一個改變許可權的方法,從之前的介紹中我們可以發現,基本上就九個許可權分別是:

    • user:使用者
    • group:組
    • others:其他

    那麼我們就可以使用 u, g, o 來代表三種身份的許可權。此外, a 則代表 all,即全部的身份。讀寫的許可權可以寫成 r, w, x,也就是可以使用下表的方式來看:

    來實踐一下:

    如果我們需要將檔案許可權設定為 [-rwxr-xr--] ,可以使用 chmod u=rwx,g=rx,o=r filename 來設定。

    如果我們需要將檔案許可權均設定為可寫,可以使用 chmod a+w filename 來設定。

    如果我們需要將檔案許可權去掉而不更改其它的屬性,可以使用 chmod a-x filename 來設定。

    6、檔案與目錄管理

    1)、cd:[change directory] 切換工作目錄。

    語法格式為:cd [目錄名]

    例如:

    • cd .. :進入上一層目錄
    • cd /tmp:進入tmp目錄
    • cd ~:進入當前使用者的home目錄(或者使用cd ~ username進入到其它使用者的home目錄)


    2)、pwd:[print working directory] 列印當前工作目錄。

    語法格式為:pwd

    只要輸入pwd命令就可以列印當前目錄,例如:


    3)、ls:[list] 列印當前所有目錄和檔案。

    語法格式為:ls [選項] [目錄或檔名]

    注意:如果ls 命令後邊是目錄,會顯示目錄下包含的檔案資訊,如果是檔名則會顯示該檔案的資訊,如果沒有跟任何引數則顯示當前工作目錄下包含的檔案資訊。

    常用選項:

    • -a 顯示所有檔案,包括隱藏檔案
    • -l 以長格式顯示目錄或檔案的資訊
    • -d 只顯示目錄本身的資訊,不顯示目錄下包含的檔案
    • -h human readable,用人性化顯示的形式檢視,比如以 K (KB),M (MB),G(GB)表示檔案大小

    =======================

    簡單舉例:


    4)、mkdir:[make directory] 建立目錄。

    語法格式為:mkdir [選項] 目錄名

    常用選項:

    • -p 可以用於建立巢狀的多級目錄(重要!)


    5)、cp:[copy] 複製檔案或目錄

    語法格式為:cp [選項] 原始檔或目錄 目標檔案或目錄

    常用選項:

    • -a 相當於-pdr 連在一起使用
    • -p 連同檔案的屬性一起復制過去,而非使用預設的屬性(備份常用)
    • -d 如果原始檔為連線檔案的屬性,則複製連線檔案屬性而非檔案本身
    • -r 遞迴複製,用於目錄的複製
    • -i 如果目標檔案已經存在,在覆蓋是會先詢問操作的進行。

    6)、mv:[move] 移動檔案或目錄

    語法格式為:mv [選項] 原始檔或目錄 目標檔案或目錄

    常用選項:

    • -f force強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋
    • -i 如果目標檔案已經存在是,就會詢問是否覆蓋


    7)、rm:[remove] 刪除檔案或目錄

    語法格式為:rm [選項] 檔案或目錄

    常用選項:

    • -r 如果刪除的是一個目錄,則必須使用這個選項
    • -f 強制刪除,無須使用者確認
    • 一般刪除目錄時,兩個選項會同時使用 -rf,但是建議刪除前先用 mv 命令將待刪除的目錄移動到一個指定的回收目錄中去,等過一段時間確認不再需要這些檔案和目錄,再使用 rm 命令將其刪除。
    • -i 在生成前會詢問使用者是否操作


    8)、touch:用於修改檔案或者目錄的時間屬性,包括存取時間和更改時間。若檔案不存在,系統會建立一個新的檔案。

    語法格式為:touch [-acfm][-d<日期時間>][-r<參考檔案或目錄>] [-t<日期時間>][--help][--version][檔案或目錄…]

    • -a 改變檔案的讀取時間記錄。
    • -m 改變檔案的修改時間記錄。
    • -c 假如目的檔案不存在,不會建立新的檔案。與 --no-create 的效果一樣。
    • -f 不使用,是為了與其他 unix 系統的相容性而保留。
    • -r 使用參考檔的時間記錄,與 --file 的效果一樣。
    • -d 設定時間與日期,可以使用各種不同的格式。
    • -t 設定檔案的時間記錄,格式與 date 指令相同。
    • --no-create 不會建立新檔案。
    • --help 列出指令格式。
    • --version 列出版本訊息。

    7、關機、重啟與sync

    關機、重啟的命令有:shutdown、reboot、halt、poweroff。其中關機命令用的最多的是shutdown,重啟用reboot,所以我們通常只用記住shutdown和reboot這兩個目錄即可。因為Linux系統的關機、重啟是比較重要的操作,所以只有root許可權才能操作shutdown、reboot等命令。

    1)、shutdown:將系統關機或者重啟。

    語法格式為:shutdown [選項] 時間 警告

    常用選項:

    • -h 將系統的服務停掉後,立即關機。
    • -r 將系統的服務停掉後就重啟。
    • -t sec sec表示秒,即系統過多少秒後關機。
    • -c 取消已經在進行的shutdown命令內容。


    簡單舉例:

    1. shutdown -t 30:表示30秒之後自動關機。
    2. shutdown -h now:表示立刻關機。
    3. shutdown -h 20:15:表示在具體的20:15分會關機,如果在21:15才設定該命令,則隔天才關機。
    4. shutdown -h +10:表示10分鐘後自動關機。
    5. shutdown -r now:表示立刻重啟。
    6. shutdown -r +30 'The system wil reboot after 30 minute':表示30分鐘後系統會重啟,並且後面的警告資訊會給所有線上的使用者。

    =============================================

    2)、reboot:將系統重啟,等同於 shutdown –r now


    3)、halt:將系統關機,等同於shutdown –h now 和 poweroff


    4)、sync:將資料由記憶體同步到硬碟中。目前shutdown、reboot、halt等命令在關機是都會呼叫sync這個工具,但是你如果不放心也可以自己多次執行這個目錄。


    更多的Linux命令學習可以參考:https://www.runoob.com/linux/linux-command-manual.html