Linux的目錄介紹和常用命令詳解


1、Linux 系統目錄結構

在我們平時生活中,操作系統用的最多的是Windows系統,如果你是土豪從小到大都是iPhone、Mac之類的電子產品,那你應該對Linux命令是非常熟悉的。在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 系統中的目錄結構以及經常使用到的概念進行一個完整介紹。

image

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

  • /:根目錄,文件的最頂端,是整個 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的絕對路徑與相對路徑

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

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

簡單舉例:

①、絕對路徑

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

image

②、相對路徑

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

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

兩個特殊的目錄:

  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也是用戶的一種,只是它有着最高的權限
用戶組 表示用戶的一個集合,不同組的用戶對文件的權限是不一樣的
其他人 顧名思義,它是能夠使用系統的用戶,但是沒有加入任何用戶組

下面是關於它們的一些基本命令和如何使用:

①、useradd:用於創建新的用戶,默認的用戶家目錄會被存放在/home目錄中,默認的Shell解釋器為/bin/bash,而且默認會創建一個與該用戶同名的基本用戶組。。

語法格式為:useradd [選項] 用戶名

常用選項:

  • -d 指定用戶的家目錄(默認為/home/username)
  • -e 賬戶的到期時間,格式為YYYY-MM-DD.
  • -u 指定該用戶的默認UID
  • -g 指定一個初始的用戶基本組(必須已存在),格式為:useradd –g 用戶組 用戶名
  • -G 指定一個或多個擴展用戶組
  • -N 不創建與用戶同名的基本用戶組
  • -s 指定該用戶的默認Shell解釋器

簡單舉例:

image

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

然后用id username命令來查看用戶的信息:

image


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

語法格式為:passwd [選項] [用戶名]

常用選項:

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

簡單舉例:

image

image


③、groupadd:命令用於創建用戶組。

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

常用選項:

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

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

image


④、groupdel:用於刪除創建的用戶組。格式:groupdel 用戶組名


⑤、groupmod:用於修改用戶組。

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

常用選項:

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

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


⑥、usermod:命令用於修改用戶的屬性。

語法格式為:usermod [選項] 用戶名

常用選項:

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

簡單舉例:

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

image

--修改用戶zhangsan的用戶UID值:

image


⑦、userdel:用於刪除用戶。

語法格式為:userdel [選項] 用戶名

常用選項:

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

image

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

5、文件的基本屬性和權限

在Linux系統中一切都是文件,但是每個文件的類型不盡相同,而且每個文件的訪問權限也不相同,因此Linux系統使用了不同的字符來加以區分文件的類型訪問權限,如下所示。

我們查看跟目錄下的所有文件:

image

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

image

其中最前面的一大塊表示這個文件的類型與權限,第一個字符代表這個文件的類型(目錄、文件或鏈接文件等):

類型 描述
- 普通文件,如hello.txt
d 目錄文件
l 鏈接文件
b 塊設備文件
c 字符設備文件
p 管道文件

后面的字符都為3個一組,第一組為"文件所有者的權限",即文件的所有者才能進行讀寫執行的操作。第二組為"用戶組的權限",只要是在這個組的用戶都權限。第三組為"其它非本用戶組的權限"。


以下是更改文件屬性的一些命令:

①、chgrp:更改文件所屬用戶組

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

參數選項

  • -R:遞歸更改文件所屬用戶組,就是在更改某個目錄文件的所屬組時,如果加上-R的參數,那么該目錄下的所有文件的屬組都會更改。

chown:更改文件所有者,也可以同時更改文件屬組

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

參數選項:

  • -R:遞歸更改文件所屬用戶組,就是在更改某個目錄文件的所屬組時,如果加上-R的參數,那么該目錄下的所有文件的屬組都會更改。

chmod:更改文件的權限

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

文件權限的設置方法有兩種,分別是使用數字和符號來進行權限更改,推薦使用數字,現在我們來學習:

(1)、數字類型改變文件權限

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-x---],可以發現有些權限沒有,那么權限的分數計算則為:[4+2+1][4+0+1][0+0+0]=750,所以執行:chmod 750 filename


(2)、字母類型改變文件權限

另外還有另一種改變權限的方法,從之前的介紹中我們可以發現,基本上就九個權限分別是:user:用戶 ;group:組 ;others:其他。那么我們就可以使用 u, g, o 來代表三種身份的權限(為它們的首字母簡寫)。此外, a 則代表 all,即全部的身份。讀寫的權限可以寫成 r, w, x,也就是可以使用下表的方式來看:

image

來實踐一下:

  • 如果我們需要將文件權限設置為 [-rwxr-xr--] ,可以使用 chmod u=rwx,g=rx,o=r filename 來設定。
  • 如果我們需要將文件權限均設置為可寫,可以使用 chmod a+w filename 來設定。
  • 如果我們需要將文件權限去掉而不更改其它的屬性,可以使用 chmod a-x filename 來設定。

6、文件與目錄管理(重要,常用)

①、cd:[change directory] 切換工作目錄。語法格式為:cd [目錄名]

cd ..     #進入上一層目錄
cd ../..  #返回上兩級目錄 
cd /home  #進入home目錄
cd /tmp   #進入tmp目錄
cd        #進入個人的主目錄 
cd ~      #進入當前用戶的home目錄
cd ~username  #進入到其它用戶的home目錄

②、pwd:[print working directory] 打印當前工作目錄。語法格式為:pwd

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

image


③、ls:[list] 打印當前所有目錄和文件。語法格式為:ls [選項] [目錄或文件名]

注意:如果ls 命令后邊是目錄,會顯示目錄下包含的文件信息,如果是文件名則會顯示該文件的信息,如果沒有跟任何參數則顯示當前工作目錄下包含的文件信息。

常用選項:

  • -a 顯示所有文件,包括隱藏文件
  • -l 以長格式顯示目錄或文件的信息
  • -d 只顯示目錄本身的信息,不顯示目錄下包含的文件

簡單舉例:

image


④、mkdir:[make directory] 創建目錄。語法格式為:mkdir [選項] 目錄名

常用選項:

  • -p 可以用於創建嵌套的多級目錄(重要!)

⑤、cp:[copy] 復制文件或目錄。語法格式為:cp [選項] 源文件或目錄 目標文件或目錄

常用選項:

  • -a 相當於-pdr 連在一起使用
  • -p 連同文件的屬性一起復制過去,而非使用默認的屬性(備份常用)
  • -d 如果源文件為連接文件的屬性,則復制連接文件屬性而非文件本身
  • -r 遞歸復制,用於目錄的復制
  • -i 如果目標文件已經存在,在覆蓋是會先詢問操作的進行。

⑥、mv:[move] 移動文件或目錄。語法格式為:mv [選項] 源文件或目錄 目標文件或目錄

常用選項:

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

⑦、rm:[remove] 刪除文件或目錄。語法格式為:rm [選項] 文件或目錄

常用選項:

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

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

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

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

7、查看文件的內容

①、cat:從第一行開始顯示文本內容(適用於內容較少的文件,因為cat命令會將文件的內容從頭讀到尾,直到讀完為止,當內容很多時,等內容讀完則又要翻到上面去看前面的內容)。

②、tac:從最后一行開始顯示,是 cat 的逆順序。

#格式為:cat [參數選項] [文件]
cat filename  #從第一個字節開始正向查看文件的內容 
cat -n filename  #標示文件的行數 
tac filename  #從最后一行開始反向查看一個文件的內容 

③、more:一頁一頁的顯示文本內容(適用於內容較多的),可以使用空格鍵或者回車鍵往下翻頁查看后面的內容。

#格式為:more [參數選項] [文件]
more filename  #查看一個長文件的內容 

image

④、less:也適用於查看內容較多的文件,與 more 類似,但是比 less 比more更為靈活,less可以往上、往下翻頁!按下鍵盤上空格鍵讀一行,按下PgUp鍵可以往上翻頁,按下PgDn可以往下翻頁。但是less命令不會實時顯示當前閱讀的百分比。

#格式為:less [參數選項] [文件]
less filename  #查看一個長文件的內容 

⑤、head:用於只查看文件的前n行。

head -n 2 filename  #查看一個文件的前兩行 
head -n 20 /etc/profile

⑥、tail:tail命令與head命令相反,tail命令用於查看文件后n行內容。

tail -n 2 filename  #查看一個文件的最后兩行 
tail -n +1000 filename   #從1000行開始顯示,顯示1000行以后的

⑦、nl:nl命令可以顯示內容的同時顯示行號,與 cat -n 命令的作用差不多。


簡單綜合使用(沒有任何實際意義):

#注:| 表示管道,表示上一條命令的輸出,作為下一條命令參數,如 echo 'yes' | wc -l
cat filename | head -n 3000 | tail -n +1000  #顯示1000行到3000行
cat filename | tail -n +3000 | head -n 1000  #從第3000行開始,顯示1000(即顯示3000~3999行)

⑧、wc:用來查看查看文件的內容有多少個字符,多少行,多少個字節。

#語法格式:wc [選項] [文件]
參數:
  -l:顯示行數
  -w:只顯示單詞數
  -c:只顯示字節數

image

8、文件的查找命令

Linux中的查找命令有5個,分別如下:

  • which:在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果,主要用來搜索命令所在的目錄及別名信息,也可以驗證命令是否存在。
  • whereis:搜索命令所在的目錄及幫助文檔路徑,只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s);
  • locate:locate命令用於查找符合條件的文檔,他會去保存文檔和目錄名稱的數據庫內查找合乎范本樣式條件的文檔或目錄,所以速度比較快。(注意:CentOS7默認沒有安裝該命令
  • type:用於區分某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的。如果一個命令是外部命令,那么使用-p參數,會顯示該命令的路徑,相當於which命令。type命令其實不能算查找命令;
  • find:最強大的查找命令,可以用它找到任何想找的文件,因為是在硬盤中查詢,所以相對來說會慢一點。

注意:通常先不會使用 find 命令進行查找,因為速度慢!而都是先使用 whereis 或者 locate 來檢查,當真的找不到了,才用 find 查找。是因為 whereis 與 locate是利用數據庫來查找數據,所以相當快速,而且沒有實際查詢硬盤,比較節省時間。

whereis 和 locate 尋找的數據是由已創建的數據 /var/lib/ 中查找。但是數據庫的更新默認是每天更新一次(不同系統可能會有差異),所以當新建文件或刪除文件后去查找該文件, whereis 和 locate 會告訴你文件“not found”,因為必須更新數據庫了。要手動更新數據庫的方法也很簡單,直接輸入 updatedb 即可。 updatedb 命令會去讀取/etc/updatedb.conf中的配置,然后去硬盤里面進行查找文件名操作,最后更新整個數據庫文件。

①、which:在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果,主要用來搜索命令所在的目錄及別名信息,也可以驗證命令是否存在。

#語法格式:which [-a] command  # -a:將所有由PATH目錄中可以找到的命令均列出來,而不是只列出第一個被找到的命令。
which pwd  #搜索pwd命令所在的目錄
which cd  #搜索cd命令所在的目錄
which ls  #搜索ls命令所在的目錄
which which  #搜索which命令所在的目錄

②、whereis:用於搜索命令所在的目錄及幫助文檔路徑,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。

whereis命令的參數如下:

  • -b 只查找二進制格式的文件
  • -m 只查找在說明文件man路徑下的文件
  • -s 只查source源文件
  • -u 查找不在上述三個選項當中的其他特殊文件
#whereis [命令]
whereis ls  #顯示一個二進制文件、源碼或man的位置 
whereis grep

③、locate:在文件資料數據庫中查找文件,所以速度非常快。

注意:CentOS7默認沒有安裝該命令,下面先來安裝該命令:

yum install mlocate
#提示:Is this ok [y/d/N],這里執行y,再次出現是否繼續也是執行y
#mlocate安裝完成。接下來需更新后台數據庫,輸入命令:
updatedb
locate inittab

注意:大家經常拿locate和find命令進行比較,它兩的區別是:find是從磁盤全盤檢索,而locate 是在文件資料庫中進行搜索。所以locate命令的執行要比find命令執行速度快很多。但是文件資料庫是需要不斷更新的。如果我們新創建的文件不更新文件資料庫,那么使用 locate 命令是查找不到的。我們可以使用 updatedb 手動更新資料庫(默認明天更新一次),但是對於/tmp目錄下的新建文件,是更新不到文件資料庫的,因為/tmp目錄不屬於文件資料庫的收錄范圍。

locate的用法,簡單舉例:

#語法格式:locate[文件名]
locate命令的參數如下:
   #-i:忽略大小寫差異;
   #-r:后面可接正則表達式的實現方式。
locate passwd  #搜索包含passwd的文件路徑
locate /etc/sh  #搜索etc目錄下所有以sh開頭的文件。
locate ~/m  #搜索用戶主目錄下,所有以m開頭的文件。
locate -i ~/m  #搜索用戶主目錄下,所有以m開頭的文件,並且忽略大小寫。

④、type:它是用來判斷某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的,type命令其實不能算查找命令。

type命令的參數有:

  • -t:判斷給定的指令為"外部指令","命令別名"或者"內部指令";
  • -p:如果給出的指令為外部指令,則顯示其絕對路徑,相當於which命令。;
  • -a:在環境變量"PATH"指定的路徑中,顯示給定指令的信息,包括命令別名。

命令的類型可能有如下幾種:

  • alias: 別名;
  • keyword: 關鍵字,Shell保留字;
  • function: 函數,Shell函數;
  • builtin: 內建命令,Shell內建命令;
  • file: 文件,磁盤文件,外部命令;
  • unfound: 沒有找到。
#命令格式:type [option] [commond]
type cd  #系統輸出:cd 是 shell 內嵌(builtin)
type if  #系統輸出:if 是 shell 關鍵字(keyword)
type mysql  #系統輸出:未找到
type -t ls #系統輸出:alias
type -t if #系統輸出:keyword
type -p locate #系統輸出:/usr/bin/locate

⑤、find:最強大的查找命令,可以用它找到任何想找的文件,因為是在硬盤中查詢,所以相對來說會慢一點。

find命令的格式:find path -option [-print] [-exec -ok |xargs |grep] [command {} \; ]

1)path:要查找的目錄路徑。

  1. ~ 表示$HOME目錄
  2. . 表示當前目錄
  3. / 表示根目錄

2)print:表示將結果輸出到標准輸出。

3)exec:對匹配的文件執行該參數所給出的shell命令。 形式為command {} ;,注意{}與;之間有空格

4)ok:與exec作用相同,區別在於,在執行命令之前,都會給出提示,讓用戶確認是否執行

5)| xargs 與exec作用相同 ,起承接作用,區別在於 |xargs 主要用於承接刪除操作 ,而 -exec 都可用 如復制、移動、重命名等

6)options :表示查找方式,下面來介紹option中的一下選項。


(1) find參數:基於文件名的搜索:

與文件名有關的參數如下:

  • -name filename:查找文件名為filename的文件。filename可使用正則表達式表示。
  • -iname filename:會忽略大小寫。

簡單舉例:

find / -name filename  #從根目錄('/')開始根據filename的名字搜索相對應的文件和目錄
find / -name passwd
find /usr/lib -name passwd
find /etc -name *init  #模糊搜索,以 init 結尾的文件或目錄名
find /etc -name init???  #模糊搜索,?表示單個字符,即搜索到init_

(2) find參數:基於文件類型的搜索

與文件類型有關的參數如下:

  • -type TYPE:查找文件的類型為TYPE的文件。

上面TYPE的參數列表有:

f:普通文件;l:符號連接;d:目錄;c:字符設備;b:塊設備;s:(socket)套接字;p:FIFO。

簡單舉例:

find /home -type d  #查找/home目錄下文件類型是目錄的
find /var -type s  #查找/var目錄下所有類型為socket的文件。

(3) find參數:基於文件大小的搜索:

與文件大小有關的參數如下:

  • -size SIZE:查找文件大小剛好等於SIZE的文件;
  • -size -SIZE:查找文件大小大於SIZE的文件;
  • -size +SIZE:查找文件大小小於SIZE的文件。

其中,SIZE的單位有:

  • c —— byte,字節;
  • w —— 字(2字節);
  • b —— bit,塊(512字節);
  • k —— 千字節;
  • M —— 兆字節;
  • G —— 吉字節。

簡單舉例:

find . -size 6c -print  #查找等於6字節的文件 
find . -size -32k #查找小於32k的文件 
find / -size 10M -type f  #查詢超過10M的文件

(4) find參數:基於時間屬性進行搜索

與時間有關的參數共有這幾種:-amin、-cmin、-mmin;-atime、-ctime、-mtime;

注意:a前綴表示文件最后一次被讀取的時間,c前綴表示文件狀態的最后一次改變的時間(寫入文件、更改所有者、權限等),m前綴表示文件內容最后一次改變的時間,min后綴表示分鍾,time后綴表示天數。

  • -atime n : 在過去的n天被讀取過的文件
  • -ctime n : 在過去的n天屬性被修改過的文件
  • -mtime n : 在過去的n天內容被修改過的文件

下面以 -mtime 說明時間:(+n,-n,n分別表示超過n天,n天以內和n天)

  • -mtime n: n為數字,列出n天之前的“一天之內”被更改過內容的文件;
  • -mtime +n:列出在n天之前(不含第n天本身)被更改過的文件名;
  • -mtime -n:列出在n天之內(不含第n天本身)被更改過的文件名;

image

由這個時光軸我們可以知道,最右邊為當前時,+5 代表大於等於 6 天前的檔案名, -5 代表小於等於 5 天內的檔案名,5 則是代表 5-6 那一天的檔案名。

下面簡單舉例:

find /etc -mmin -5  #在/etc目錄下查找5分鍾內內容被修改過的文件和目錄
find /etc -mtime +5  #在/etc目錄下查找5天之前內容被修改過的文件和目錄

(5) find參數:基於用戶或用戶組名進行搜索

與用戶或用戶組名有關的參數如下:

  • -user name:name為用戶賬號名稱;
  • -group name:name為用戶組名;

簡單舉例:

find /home -user root  #在home目錄下查詢所有者為root的文件
find /home -group root  #在home目錄下查詢所屬組為root的文件

(6) find參數:基於文件權限進行搜索

與文件權限有關的參數如下:

  • -perm mode:查找文件權限剛好等於mode的文件;
  • -perm +mode:查找文件權限“包含任一mode的權限”的文件;
  • -perm -mode:查找文件權限“必須要全部包括mode的權限”的文件。

下面簡單舉例:

#在當前目錄及子目錄中,查找屬主具有讀寫執行,其他具有讀執行權限的文件   
find . -perm 755
#查找用戶有寫權限或者組用戶有寫權限的文件或目錄
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w

(7) find后面執行命令   

#1、查找 del.txt 並刪除,刪除前提示確認 
find . -name 'del.txt' -ok rm {} \; 
#2、查找 aa.txt 並備份為aa.txt.bak 
find . -name 'aa.txt' -exec cp {} {}.bak \;
#3、查當前目錄下的所有普通文件
find . -type f -exec ls -l {} \; 
#4、在 /logs 目錄中查找更改時間在5日以前的文件並刪除它們
find logs -type f -mtime +5 -exec -ok rm {} \;
#5、查詢當天修改過的文件
find ./ -mtime -1 -type f -exec ls -l {} \;

(8) 組合條件搜索  

這里有兩個參數:

  • -a:表示兩個條件同時滿足(and)
  • -o:表示兩個條件滿足任意一個即可(or)
#查找/etc目錄下大於8MB同時小於20MB的文件
find /etc -size +8M -a -size -20M

find命令參考的鏈接:鏈接1 ​|​ 鏈接2

9、字符串匹配(grep)(常用)

grep:用來在文件中搜尋字符串匹配的行並輸出,或者對目標文件逐行進行匹配檢查,打印匹配到的行。

#查找 /etc/profile文件中包含 JAVA 字符串的行,並輸出
grep JAVA /etc/profile

上面的輸出結果:

image

#查找線程中包含 mysql的字符串的行,並且輸出
ps aux | grep mysql

注:grep還可以使用正則表達式進行匹配

更詳細的使用可以參考:linux中grep命令的用法

9、進程相關的命令(常用)

①、jps :顯示當前系統的Java進程情況,及其id號。jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平台上簡單察看當前java進程的一些簡單情況。


②、ps:(process status之意) 用於將當前時間點的進程運行情況選取下來並輸出。格式為:ps [選項]

下面對命令選項進行說明:

  • -A :所有的進程均顯示出來。
  • -e:顯示所有進程,此參數的效果和指定"A"參數相同。
  • -f:顯示詳細信息,全格式。
  • -h 不顯示標題。
  • -l :較長,較詳細地將PID的信息列出。
  • a :顯示終端上的所有進程,包括其他用戶的進程。
  • u :列出有效用戶的相關進程。
  • x :顯示所有程序,不以終端機來區分,一般與a參數一起使用。
  • r:只顯示正在運行的進程。

常用的組合命令:

ps aux  #(推薦)查看系統所有的進程數據
ps -ef  #查看系統所有的進程數據
ps aux | grep mysql #查看mysql的進程
ps -ef | grep mysql #查看mysql的進程

在Linux下顯示系統進程的命令是ps,最常用的組合是ps -efps aux,二者的區別:ps -efps aux的查詢目的是一樣的, 就是顯示所有在運行的進程, 只是二者的輸出格式不同,ps -ef是用System V的格式輸出,ps aux是用BSD格式輸出;如果COMMADN列過長,aux會截斷顯示,而ef不會。

  • System V格式: UID , PID , PPID , C , STIME , TTY , TIME , CMD
  • BSD格式: USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND

ps -ef 是用System V的格式來顯示,其輸示出的結果如下:

image

每個列的含義:

  1. UID:用戶ID
  2. PID:進程ID
  3. PPID:父進程ID
  4. C:CPU占用率
  5. STIME:開始時間
  6. TTY:開始此進程的TTY----終端設備
  7. TIME:此進程運行的總時間
  8. CMD:命令名

ps aux是用BSD的格式來顯示,其輸出格式如下:

image

ps aux 與 ps -ef 不同的有列有:

  1. USER:用戶名
  2. %CPU:進程占用的CPU百分比
  3. %MEM:占用內存的百分比
  4. VSZ:該進程使用的虛擬內存量(KB)
  5. RSS:該進程占用的固定內存量(KB)(駐留中頁的數量)
  6. STAT:進程的狀態
  7. START:該進程被觸發啟動時間
  8. TIME:該進程實際使用CPU運行的時間
其中STAT狀態位常見的狀態字符有
D   //無法中斷的休眠狀態(通常 IO 的進程);
R   //正在運行可中在隊列中可過行的;
S   //處於休眠狀態;
T   //停止或被追蹤;
W   //進入內存交換 (從內核2.6開始無效);
X   //死掉的進程 (基本很少見);
Z   //僵屍進程;
<   //優先級高的進程
N   //優先級較低的進程
L   //有些頁被鎖進內存;
s   //進程的領導者(在它之下有子進程);
l   //多線程,克隆線程(使用 CLONE_THREAD, 類似 NPTL pthreads);
+   //位於后台的進程組;

綜上所述,如果想查看進程的CPU占用率和內存占用率,可以使用aux ,如果想查看進程的父進程ID和完整的COMMAND命令,可以使用ef。


③、kill / killall:kill命令用於根據進程id刪除執行中的程序或工作,一般配合ps -ef或者ps aux使用。killall 用於殺死一個進程,與 kill 不同的是它會殺死指定名字的所有進程。

最常用的信號是:

  • 1 (HUP):重新加載進程。
  • 9 (KILL):殺死一個進程。
  • 15 (TERM):正常停止一個進程。

如何殺死進程:

圖形化界面的方式
kill pid(進程id)
kill -9 pid  #(-9表示強制關閉)
killall -9 程序的名字
pkill 程序的名字

④、top 是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。

10、打包與壓縮文件

①、tar:對文件進行打包,壓縮和解壓縮,如果指定了相應的參數,它還會調用相應的壓縮程序(如gzip和bzip等)進行壓縮和解壓。

  • -z:通過gzip的支持進行壓縮/解壓縮
  • -j:通過bzip2的支持進行壓縮/解壓縮
  • -J (大寫):通過xz的支持進行壓縮/解壓縮
  • -c :新建打包文件,也就是壓縮文件
  • -t :查看打包文件的內容含有哪些文件名
  • -x :解壓縮的功能,可以搭配-C(大寫)指定解壓的目錄,注意-c,-t,-x不能同時出現在同一條命令中
  • -C dir :指定壓縮/解壓縮的目錄dir
  • -v :在壓縮/解壓縮過程中,將正在處理的文件名顯示出來
  • -f filename :filename為壓縮后的文件名字 (只要用到tar命令,-f選項是必須要用的)

命令格式:tar [參數] [壓縮后的文件名] [被壓縮的文件(可以為多個文件,空格隔開)]

下面重點介紹一下-z -j -J這三個參數:

參數 作用 建議后綴命名
-z 用於gzip壓縮/解壓方式 文件名.tar.gz
-j 用於bzip2壓縮/解壓方式 文件名.tar.bz2
-J (大寫) 用於xz壓縮/解壓方式 文件名.tar.xz
  • gzip:是公認的壓縮這速度最快,壓縮大文件的時候與其他的壓縮方式相比更加明顯,歷史最久,應用最廣泛的壓縮方式
  • bzip2:壓縮形成的文件小,但是可用性不如gzip
  • xz:是最新的壓縮方式,可以自動提供最佳的壓縮率

壓縮速度:gzip > bzip2 > xz;壓縮率:xz > bzip2 > gzip


(1) tar的簡單壓縮和解壓

#壓縮文件
tar -cvf test.tar test.txt #將test.txt壓縮為test.tar
#查看壓縮文件的內容
tar -tvf test.tar
#解壓文件
tar -xvf test.tar  #解壓至當前路徑
tar -xvf test.tar -C /home/  #解壓到指定路徑

(2) tar使用gzip進行壓縮和解壓縮(最常用)。

#壓縮文件
tar -zcvf filename.tar.gz file #將file壓縮為filename.tar.gz格式(如果file是路徑,則表示將該路徑下的所有文件壓縮)
tar -zcvf filename.tar.gz file1 file2 file3 ... #將多個file壓縮為filename.tar.gz格式
#查看壓縮文件的內容
tar -ztvf filename.tar.gz
#解壓
tar -zxvf filename.tar.gz
tar -zxvf filename.tar.gz -C path

(3) tar使用bzip2進行壓縮和解壓縮。

#壓縮文件
tar -jcvf filename.tar.bz2 file
#查看壓縮文件的內容
tar -jtvf filename.tar.bz2
#解壓
tar -jxvf filename.tar.bz2
tar -jxvf filename.tar.bz2 -C path

(4) tar使用xz進行壓縮和解壓縮。

#壓縮文件
tar -Jcvf filename.tar.xz file
#查看壓縮文件的內容
tar -Jtvf filename.tar.xz
#解壓
tar -Jxvf filename.tar.xz
tar -Jxvf filename.tar.xz -C path

②、其它壓縮/解壓縮命令:

注意:下面的解壓命令不是系統自帶的,所以需要自行下載

bzip2 file1 #壓縮一個叫做 'file1' 的文件 
bunzip2 file1.bz2 #解壓一個叫做 'file1.bz2'的文件 


gzip file1 #壓縮一個叫做 'file1'的文件 
gzip -9 file1 #最大程度壓縮 
gunzip file1.gz #解壓一個叫做 'file1.gz'的文件 

rar a file1.rar test_file #創建一個叫做 'file1.rar' 的包 
rar a file1.rar file1 file2 dir1 #同時壓縮 'file1', 'file2' 以及目錄 'dir1' 
rar x file1.rar #解壓rar包 

#zip與unzip
zip file1.zip file1  #創建一個zip格式的壓縮包 
zip -r file1.zip file1 file2 dir1  #將幾個文件和目錄同時壓縮成一個zip格式的壓縮包 
unzip file1.zip  #解壓一個zip格式壓縮包 

關於壓縮與解壓更詳細可以參考:參考鏈接1 | 參考鏈接2

11、關機、重啟與sync

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

①、shutdown:將系統關機或者重啟。語法格式為:shutdown [選項] 時間 警告

常用選項:

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

常用命令的簡單舉例:

shutdown -t 30  #表示30秒之后自動關機。
shutdown -h now  #(常用)表示立刻關機。
shutdown -h 20:15  #表示在具體的20:15分會關機,如果在21:15才設置該命令,則隔天才關機。
shutdown -h +10  #表示10分鍾后自動關機。
shutdown -r now  #表示立刻重啟。
shutdown -r +30 'The system wil reboot after 30 minute'  #表示30分鍾后系統會重啟,並且后面的警告信息會給所有在線的用戶。

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

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

④、sync:將數據由內存同步到硬盤中。目前shutdown、reboot、halt等命令在關機是都會調用sync這個工具,但是你如果不放心也可以自己多次執行這個目錄。

⑤、logout:注銷

12、Linux補充知識點(必須會使用)

①、echo:用於輸出字符串內容(echo后面默認定義的類型為字符串)。

#格式:echo [選項] [字符串]
echo hello echo #輸出字符串
echo "\"hello echo\""  #輸出轉義字符

#輸出變量
x=10
echo The value of variable x = $x 

#輸出顯示換行
echo -e "OK! \n"  #-e表示開啟轉義

②、&和&&

  • & 表示任務在后台執行,如要在后台運行redis-server,則有 redis-server &
  • && 表示前一條命令執行成功時,才執行后一條命令 ,如 echo '1' && echo '2'

③、| 和 ||

  • | 表示管道,上一條命令的輸出,作為下一條命令參數,如 echo 'yes' | wc -l
  • || 表示上一條命令執行失敗后,才執行下一條命令,如 cat nofile || echo "fail"

④、重定向 (>) 與追加(>>)

linux中經常會用到將內容輸出到某文件當中,只需要在執行命令后面加上>或者>>號即可進入操作。

  • >:表示將一條命令執行的結果(標准輸出,或者錯誤輸出,本來都要打印到屏幕上面的)重定向到其它輸出設備(文件,打開文件操作符,或打印機等等),重定向文件時,覆蓋文件原有內容(文件的日期也會自動更新)
  • >> :將一條命令執行的結果追加到其它輸出設備(會另起一行,文件的日期也會自動更新)。

注意:這兩個語法在Shell編程中非常有用,所有必須要理解。下面簡單舉例:

https://img2020.cnblogs.com/blog/1745215/202012/1745215-20201217230357026-111495247.png

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM