給新手的 10 個有用 Linux 命令列技巧

linux.cn發表於2015-10-01

我記得我第一次使用 Linux 的時候,我還習慣於 Windows 的圖形介面,我真的很討厭 Linux 終端。那時候我覺得命令難以記憶,不能正確使用它們。隨著時間推移,我意識到了 Linux 終端的優美、靈活和可用性,說實話,我沒有一天不使用它。今天,我很高興和剛開始接觸 Linux 的人一起來分享一些有用的技巧和提示,希望能幫助他們更好的向 Linux 過渡,並幫助他們學到一些新的東西(希望如此)。

給新手的 10 個有用 Linux 命令列技巧

這篇文章希望向你展示一些不需要很高的技術就可以像一個高手一樣使用 Linux 終端的有用技巧。你只需要一個 Linux 終端和一些自由時間來體會這些命令。

1. 找到正確的命令

執行正確的命令對你的系統來說非常重要。然而在 Linux 中有如此多的、難以記憶的各種的命令列。那麼怎樣才能找到你需要的正確命令呢?答案是 apropos。你只需要執行:

# apropos <description>

其中你要用真正描述你要查詢的命令的語句代替 “description”。這裡有一個例子:

# apropos "list directory"

dir (1) - list directory contents
ls (1) - list directory contents
ntfsls (8) - list directory contents on an NTFS filesystem
vdir (1) - list directory contents

左邊你看到的是命令,右邊是它們的描述。

2. 執行之前的命令

很多時候你需要一遍又一遍執行相同的命令。儘管你可以重複按你鍵盤上的向上游標鍵,但你也可以用 history 命令替代。這個命令會列出自從你上次啟動終端以來所有輸入過的命令:

# history

    1  fdisk -l
    2  apt-get install gnome-paint
    3  hostname tecmint.com
    4  hostnamectl tecmint.com
    5  man hostnamectl 
    6  hostnamectl --set-hostname tecmint.com
    7  hostnamectl -set-hostname tecmint.com
    8  hostnamectl set-hostname tecmint.com
    9  mount -t "ntfs" -o
   10  fdisk -l
   11  mount -t ntfs-3g /dev/sda5 /mnt
   12  mount -t rw ntfs-3g /dev/sda5 /mnt
   13  mount -t -rw ntfs-3g /dev/sda5 /mnt
   14  mount -t ntfs-3g /dev/sda5 /mnt
   15  mount man
   16  man mount
   17  mount -t -o ntfs-3g /dev/sda5 /mnt
   18  mount -o ntfs-3g /dev/sda5 /mnt
   19  mount -ro ntfs-3g /dev/sda5 /mnt
   20  cd /mnt
   ...

正如你上面看到的,你會得到一個你執行過的命令的列表。每一行中有一個數字表示你在第幾行輸入了命令。你可以通過以下方法重新呼叫該命令:

!#

其中要用命令的實際編號代替 #。為了更好的理解,請看下面的例子:

!501

等價於:

# history

3. 使用 midnight 命令

如果你不習慣使用類似 cd、cp、mv、rm 等命令,你可以使用 midnight 命令。它是一個簡單的視覺化 shell,你可以在上面使用滑鼠:

給新手的 10 個有用 Linux 命令列技巧

Midnight 命令

藉助 F1 到 F12 鍵,你可以輕易地執行不同任務。只需要在底部選擇對應的命令。要選擇檔案或者目錄,按下 “Insert” 鍵。

簡而言之 midnight 就是所謂的 “mc”。要安裝 mc,只需要執行:

$ sudo apt-get install mc        [On Debian based systems]
# yum install mc                 [On Fedora based systems]

下面是一個使用 midnight 命令器的簡單例子。通過輸入以下命令開啟 mc:

# mc

現在使用 TAB 鍵選擇不同的視窗 – 左和右。我有一個想要移動到 “Software” 目錄的 LibreOffice 檔案:

給新手的 10 個有用 Linux 命令列技巧

Midnight 命令移動檔案

按 F6 按鈕移動檔案到新的目錄。MC 會請求你確認:

給新手的 10 個有用 Linux 命令列技巧

移動檔案到新目錄

確認了之後,檔案就會被移動到新的目標目錄。

4. 在指定時間關閉計算機

有時候你需要在下班幾個小時後再關閉計算機。你可以通過使用下面的命令在指定時間關閉你的計算機:

$ sudo shutdown 21:00

這會告訴你在你指定的時間關閉計算機。你也可以告訴系統在指定分鐘後關閉:

$ sudo shutdown +15

這表示計算機會在 15 分鐘後關閉。

5. 顯示已知使用者的資訊

你可以使用一個簡單的命令列出你 Linux 系統的使用者以及一些關於它們的基本資訊。

# lslogins

這會輸出下面的結果:

UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS
0 root 0 0 Apr29/11:35 root
1 bin 0 1 bin
2 daemon 0 1 daemon
3 adm 0 1 adm
4 lp 0 1 lp
5 sync 0 1 sync
6 shutdown 0 1 Jul19/10:04 shutdown
7 halt 0 1 halt
8 mail 0 1 mail
10 uucp 0 1 uucp
11 operator 0 1 operator
12 games 0 1 games
13 gopher 0 1 gopher
14 ftp 0 1 FTP User
23 squid 0 1
25 named 0 1 Named
27 mysql 0 1 MySQL Server
47 mailnull 0 1
48 apache 0 1 Apache
...

6. 查詢檔案

查詢檔案有時候並不像你想象的那麼簡單。一個搜尋檔案的好例子是:

# find /home/user -type f

這個命令會搜尋 /home/user 目錄下的所有檔案。find 命令真的很強大,你可以傳遞更多選項給它使得你的搜尋更加詳細。如果你想搜尋超過特定大小的檔案,可以使用:

# find . -type f -size 10M

上面的命令會搜尋當前目錄中所有大於 10M 的檔案。確保不要在你 Linux 系統的根目錄執行該命令,因為這可能導致你的機器 I/O 瓶頸。

我最經常和 find 命令一起使用的選項之一是 “exec”,這允許你對 find 命令的結果執行一些操作。

例如,假如我們想查詢一個目錄中的所有檔案並更改許可權。可以通過以下簡單命令完成:

# find /home/user/files/ -type f -exec chmod 644 {} /;

上面的命令會遞迴搜尋指定目錄內的所有檔案,並對找到的檔案執行 chmod 命令。推薦你閱讀 35 個 Linux ‘find’ 命令的使用方法,我肯定你會發現這個命令更多的使用方法。

7. 用一個命令建立目錄樹

你很可能知道可以使用 mkdir 命令建立新的目錄。因此如果你想建立一個新的目錄,你可能會執行:

# mkdir new_folder

但如果你想在該目錄下建立 5 個子目錄呢?執行 5 次 mkdir 命令並非是一個好的選擇。相反你可以類似下面這樣使用 -p 選項:

# mkdir -p new_folder/{folder_1,folder_2,folder_3,folder_4,folder_5}

最後你會在 new_folder 中有 5 個目錄:

# ls new_folder/

folder_1 folder_2 folder_3 folder_4 folder_5

8. 複製檔案到多個目錄

通常使用 cp 命令進行檔案複製。複製檔案通常看起來類似:

# cp /path-to-file/my_file.txt /path-to-new-directory/

現在假設你需要複製該檔案到多個目錄:

# cp /home/user/my_file.txt /home/user/1
# cp /home/user/my_file.txt /home/user/2
# cp /home/user/my_file.txt /home/user/3

這有點荒唐。相反,你可以用簡單的一行命令解決問題:

# echo /home/user/1/ /home/user/2/ /home/user/3/ | xargs -n 1  cp /home/user/my_file.txt

9. 刪除大檔案

有時候檔案可能會變得很大。我看過由於缺乏管理技能一個日誌檔案就超過 250G 的例子。用 rm 命令可能不足以刪除該檔案,因為有大量的資料需要移除。應該避免這個很“笨重”的操作。相反,你可以使用一個簡單的方法解決這個問題:

# > /path-to-file/huge_file.log

當然你需要根據你實際情況替換路徑和檔名。上面的命令寫一個空輸出到該檔案。用更簡單的話說它會清空檔案而不會導致你的系統產生大的 I/O 消耗。

10. 在多個 Linux 伺服器上執行相同命令

最近我們的一個讀者在 LinuxSay 論壇提問說如何通過 ssh 在多個 Linux 伺服器上執行一個命令。他機器的 IP 地址是:

10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5

這裡有一個簡單的解決方法。將伺服器的 IP 地址寫到檔案 list.txt 中,像上面那樣一行一個。然後執行:

# for in $i(cat list.txt); do ssh user@$i 'bash command'; done

上面的命令中你需要用實際登入的使用者替換 “user”,用你希望執行的實際命令替換 “bash command”。這個方法非常適用於通過使用 SSH 金鑰進行無密碼驗證,因為這樣你不需要每次都為使用者輸入密碼。

注意取決於你 Linux 系統的設定,你可能還需要傳遞一些額外的引數給 SSH 命令。

總結

上面的例子都很簡單,我希望它們能幫助你發現 Linux 的優美之處,你如何能簡單實現在其它作業系統上需要更多時間的不同操作。

相關文章