Linux命令行吸引了大多數Linux愛好者。一個正常的Linux用戶通常掌握大約50-60個命令來處理每日的任務。Linux命令和它們的轉換對於Linux用戶、Shell腳本程序員和管理員來講是最有價值的寶藏。有些Linux命令不多人知道,但無論你是新手仍是高級用戶,它們都很是方便有用。html 少有人知道的Linux命令python 這篇文章的目的是介紹一些少有人知的Linux命令,它們必定會高效地幫你管理你的桌面/服務器。linux |
![]() Ley
|
1. sudo !!命令沒有特定輸入sudo命令而運行,將給出沒有權限的錯誤。那麼,你不須要重寫整個命令,僅僅輸入'!!'就能夠抓取最後的命令。 shell
2. python命令下面的命令生產一個經過HTTP顯示文件夾結構樹的簡單網頁,能夠經過瀏覽器在端口8000訪問,直到發出中斷信號。 apache
![]() |
![]() Ley
|
3. mtr命令咱們大多數都熟悉ping和traceroute。那對於把兩個命令的功能合二爲一的mtr命令呢。若是mtr沒在你的機子上安裝,apt或者yum須要的包。 服務器
![]() mtr命令 |
![]() Ley
|
4. Ctrl+x+e命令這個命令對於管理員和開發者很是有用。爲了使天天的任務自動化,管理員須要經過輸入vi、vim、nano等打開編輯器。 僅僅從命令行快速的敲擊「Ctrl-x-e」,就能夠在編輯器中開始工做了。 5. nl命令「nl命令」添加文件的行數。一個叫作'one.txt'的文件,其每行的內容是(Fedora、Debian、Arch、Slack和Suse),給每行添加行號。首先使用cat命令顯示「one.txt」的文件內容。
|
![]() Ley
|
6. shuf命令「Shut」命令隨機從一個文件或文件夾中選擇行/文件/文件夾。首先使用ls命令來顯示文件夾的內容。
7. ss命令「ss」表示socket統計。這個命令調查socket,顯示相似netstat命令的信息。它能夠比其餘工具顯示更多的TCP和狀態信息。
|
![]() Ley
|
8. last命令「last」命令顯示的是上次登陸用戶的歷史信息。這個命令經過搜索文件「/var/log/wtmp」,顯示logged-in和logged-out及其tty‘s的用戶列表。
9. curl ifconfig.me那麼如何獲得你的外部IP地址呢?使用google?那麼這個命令就在你的終端輸出你的外部IP地址。
10. tree命令 以樹式的格式獲得當前文件夾的結構。
|
![]() Ley
|
這個命令顯示當前運行的全部進程及其相關的子進程,輸出的是相似‘tree’命令的樹狀格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# pstree
init─┬─NetworkManager───{NetworkManager}
├─accounts-daemon───{accounts-daemon}
├─acpi_fakekeyd
├─acpid
├─apache2───10*[apache2]
├─at-spi-bus-laun───2*[{at-spi-bus-laun}]
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───{colord}
├─colord-sane───2*[{colord-sane}]
├─console-kit-dae───64*[{console-kit-dae}]
├─
cron
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dovecot─┬─anvil
│ ├─config
│ └─log
├─exim4
├─gconfd-2
├─gdm3─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─x-session-manag─┬─evolution-a+
│ │ │ │ ├─gdu-notific+
│ │ │ │ ├─gnome-scree+
│ │ │ │ ├─gnome-setti+
│ │ │ │ ├─gnome-shell+++
│ │ │ │ ├─nm-applet──+++
│ │ │ │ ├─
ssh
-agent
│ │ │ │ ├─tracker-min+
│ │ │ │ ├─tracker-sto+
│ │ │ │ └─3*[{x-sessi+
│ │ │ └─2*[{gdm-session-wor}]
│ │ └─{gdm-simple-slav}
│ └─{gdm3}
├─6*[getty]
├─gnome-keyring-d───9*[{gnome-keyring-d}]
├─gnome-shell-
cal
───2*[{gnome-shell-
cal
}]
├─goa-daemon───{goa-daemon}
├─gsd-printer───{gsd-printer}
├─gvfs-afc-volume───{gvfs-afc-volume}
|
高效使用命令行的首要原則就是要儘可能避免非命令行的干擾,什麼意思呢?就是說一但開啓了一個控制檯窗口,就儘可能不要再在桌面上切換來切換去了,不要一下子 被別的窗口擋住控制檯,一下子又讓別的窗口破壞了控制檯的背景,最好是把控制檯最大化或全屏,最好連鼠標都不要用。只有這樣,才能達到比較高的效率。可是 在實際工做中,咱們又常常須要同時在多個控制檯中進行工做,例如:在一個控制檯中運行錄製屏幕的命令,在另一個控制檯中工做,或者在一個控制檯中工做, 在另一個控制檯中閱讀文檔。若是既想在多個控制檯中工做,又不想一大堆窗口擋來擋去、換來換去的話,就能夠考慮試試 tmux 了。以下圖:
tmux 的功能不少,什麼 Session 啊、Detach 啊、Atach 啊什麼的咱們暫時不用去關心,只用好它的控制檯窗口複用功能就好了。tmux 中有 window 和 pane 的概念,tmux 能夠建立多個 window,這些 window 是不會互相遮擋的,每次只顯示一個 window,其它的 window 會自動隱藏,可使用快捷鍵在 window 之間切換。同時,能夠把一個 window 切分紅多個 pane,這些 pane 同時顯示在屏幕上,可使用快捷鍵在 pane 之間切換。
tmux 的快捷鍵不少,要想全面瞭解 tmux 的最好辦法固然是閱讀 tmux 的文檔了,使用命令 man tmux
就能夠了。可是咱們只須要記住少數幾個重要的快捷鍵就能夠了,以下表:
快捷鍵 | 功能 |
---|---|
Ctrl+B c | 建立一個 window |
Ctrl+B [n][p] | 切換到下一個窗口或上一個窗口 |
Ctrl+B & | 關閉當前窗口 |
Ctrl+B " | 將當前 window 或 pane 切分紅兩個 pane,上下排列 |
Ctrl+B % | 將當前 window 或 pane 切分紅兩個 pane,左右排列 |
Ctrl+B x | 關閉當前 pane |
Ctrl+B [↑][↓][←][→] | 在 pane 之間移動 |
Ctrl+[↑][↓][←][→] | 調整當前 pane 的大小,一次調整一格 |
Alt+[↑][↓][←][→] | 調整當前 pane 的大小,一次調整五格 |
tmux 的快捷鍵比較特殊,除了調整 pane 大小的快捷鍵以外,其它的都是先按 Ctrl+B,再按一個字符。先按 Ctrl+B,再按 c,就會建立一個 window,這裏 c 就是 create window。先按 Ctrl+B,再按 n 或者 p,就能夠在窗口之間切換,它們是 next window 和 previous window 的意思。關閉窗口是先按 Ctrl+B,再按 &,這個只能死記。先按 Ctrl+B,再按 " ,表示上下拆分窗口,能夠想象成單引號和雙引號在鍵盤上是上下鋪關係。先按 Ctrl+B,再按 % 表示左右拆分窗口,大概是由於百分數都是左右書寫的吧。至於在 pane 之間移動和調整 pane 大小的方向鍵,就不用多說了吧。
除了查看和搜索歷史記錄,咱們還能夠以更靈活的方式引用歷史記錄中的命令。常見的簡單的例子有 !!
表明引用上一條命令,!$
表明引用上一條命令的最後一個參數,^oldstring^newstring^
代 表將上一條命令中的 oldstring 替換成 newstring。這些操做是咱們平時使用命令行的時候的一些經常使用技巧,其實它們的本質,是由 history 庫提供的 history expansion 功能。Bash 使用了 history 庫,因此也能使用這些功能。其完整的文檔能夠查看 man history
手冊頁。知道了 history expansion 的理論,咱們還能夠作一些更加複雜的操做,以下圖:
引用和修飾歷史命令的完整格式是這樣的:
![!|[?]string|[-]number]:[n|x-y|^|$|*|n*|%]:[h|t|r|e|p|s|g]
能夠看到,一個對歷史命令的引用被 :
分爲了三個部分,第一個部分決定了引用哪一條歷史命令;第二部分決定了選取該歷史命令中的第幾個單詞,單詞是從0開始編號的,也就是說第0個單詞表明命令自己,第1個到最後一個單詞表明命令的參數;第三部分決定了對選取的單詞如何修飾。下面我列出完整表格:
表格1、引用哪一條歷史命令:
操做符 | 功能 |
---|---|
! | 全部對歷史命令的引用都以 ! 開始,除了 ^oldstring^newstring^ 形式的快速替換 |
!n | 引用第 n 條歷史命令 |
!-n | 引用倒數第 n 條歷史命令 |
!! | 引用上一條命令,等於 !-1 |
!string | 逆向搜索歷史記錄,第一條以 string 開頭的命令 |
!?string[?] | 逆向搜索歷史記錄,第一條包含 string 的命令 |
^oldstring^newstring^ | 對上一條命令進行快速替換,將 oldstring 替換爲 newstring |
!# | 引用當前輸入的命令 |
表格2、選取哪個單詞:
操做符 | 功能 |
---|---|
0 | 第0個單詞,在 shell 中就是命令自己 |
n | 第n個單詞 |
^ | 第1個單詞,使用 ^ 時能夠省略前面的冒號 |
$ | 最後一個單詞,使用 $ 是能夠省略前面的冒號 |
% | 和 ?string? 匹配的單詞,能夠省略前面的冒號 |
x-y | 從第 x 個單詞到第 y 個單詞,-y 表明 0-y |
* | 除第 0 個單詞外的全部單詞,等於 1-$ |
x* | 從第 x 個單詞到最後一個單詞,等於 x-$,能夠省略前面的冒號 |
x- | 從第 x 個單詞到倒數第二個單詞 |
表格3、對選取的單詞作什麼修飾:
操做符 | 功能 |
---|---|
h | 選取路徑開頭,不要文件名 |
t | 選取路徑結尾,只要文件名 |
r | 選取文件名,不要擴展名 |
e | 選取擴展名,不要文件名 |
s/oldstring/newstring/ | 將 oldstring 替換爲 newstring |
g | 全局替換,和 s 配合使用 |
p | 只打印修飾後的命令,不執行 |
這幾個命令其實挺好記的,h 表明 head,只要路徑開頭不要文件名,t 表明 tail,只要路徑結尾的文件名,r 表明 realname,只要文件名不要擴展名,e 表明 extension,只要擴展名不要文件名,s 表明 substitute,執行替換功能,g 表明 global,全局替換,p 表明 print,只打印不執行。有時候光使用 :p
還不夠,咱們還能夠把這個通過引用修飾後的命令直接在當前命令行上展開而不當即執行,它的快捷鍵是:
操做符 | 功能 |
---|---|
Ctrl + Alt + E | 在當前命令行上展開歷史命令引用,展開後不當即執行,能夠修改,按 Enter 後纔會執行 |
Alt + ^ | 和上面的功能同樣 |
這兩個快捷鍵,記住一個就行。這樣,當咱們對歷史命令的引用修飾完成後,能夠先展開來看一看,若是正確再執行。眼見爲實嘛,反正我是每次都展開看看才放心。
最後,給你們展現我作 gif 動畫圖片的過程。我用到的軟件有 recordmydesktop
、mplayer
和 convert
。使用 recordmydesktop
時須要一個單獨的控制檯來運行錄像功能,錄像完成後須要在該控制檯中輸入 Ctrl+C 終止錄像。因此我用到了 tmux 。首先,我啓動 tmux,而後運行 recordmydesktop --full-shots -fps 2 --no-sound --no-frame -delay 5 -o ~圖片/record_to_gif.ogv
命令開始錄像。因爲 recordmydesktop
運行後不會立刻退出,錄像開始後,這個 window 就被佔用了,因此我按 Ctrl+B c 讓 tmux 再建立一個 window,而後在這個 window 中作的任何操做都會被錄製下來。被錄製的操做完成後,按 Ctrl+B n 切換到 recordmydesktop
命令運行的窗口,按 Ctrl+C 終止錄像。而後,使用 mplayer -ao null record_to_gif.ogv -vo jpeg:outdir=./record_to_gif
將錄製的視頻提取爲圖片。固然,這時的圖片比較多,爲了縮減最後製做成的 gif 文件的大小,咱們能夠刪掉其中可有可無的幀,只留下關鍵幀。最後使用命令 convert -delay 100 record_to_gif/* record_to_gif.gif
生成 gif 動畫。整個過程以下圖:
最後生成的 gif 圖片通常都比較大,每每超過 20M,若是時間長一點,超過 60M 也是常事兒。而製做成 gif 以前每一幀圖片也就 200k 左右而已。我想多是由於 gif 沒有像 jpeg 或 png 這麼好的壓縮算法吧。gif 對付向量圖效果很不錯,對付照片和我這樣的截圖,壓縮就有點力不從心了。博客園容許上傳的圖片每張不能超過 10M,因此,爲了減少 gif 文件的體積,我只有用 convert -resize 1024x576 record_to_gif.gif record_to_gif_small.gif
命令將圖片變小後再上傳了。