最牛B的 Linux Shell 命令(節選)

最牛B的 Linux Shell 命令(節選)

參考
http://wowubuntu.com/linux_shell_1.html

從中節選了自己看的懂的,能用的上的部分,做一個總結。
希望能繼續學習,其他的部分。

=== 第一部分 ===
1. sudo 執行上一條命令

sudo !!


解析

(!!) = !-1
相當於 Ctrl-p, Ctrl-a, sudo 

2.以HTTP方式共享當前文件夾的文件
$ python -m SimpleHTTPServer [port]
http://localhost:8000/

以FTP方式共享當前文件夾的文件
$ python -m pyftpdlib -p 8000
ftp://ip:8000/

額外的:用 python 快速開啓一個 SMTP 服務
python -m smtpd -n -c DebuggingServer localhost:1025

這是一個用 Python 標準庫 smtpd (用 -m smtpd 指定) 實現在簡易 SMTP 服務,運行於1025 端口 。

另外三個參數的解釋:
-n 參數讓 Python 不要進行 setuid ( 改變用戶)爲 "nobody" ,也就是說直接用你的帳號來運行
-c DebuggingServer 參數是讓 Python 運行時在屏幕上輸出調試及運行信息localhost:1025 參數則是讓 Python 在本地的 1025 端口上開啓 SMTP 服務

另外,假如你想讓程序運行於標準的 25 的端口上的話,你必須使用 sudo 命令,因爲只有 root 才能在 1-1024 端口上開啓服務。如下:

sudo python -m smtpd -n -c DebuggingServer localhost:25

3.在以普通用戶打開的VIM當中保存一個ROOT用戶文件
:w !sudo tee %

4.切換回上一個目錄
$ cd -

5.替換上一條命令中的一個短語
$ ^foo^bar^

6.快速備份一個文件
$ cp filename{,.bak}

7.免密碼SSH登錄主機
ssh-keygen
ssh-copy-id remote-machine
ssh remote-machine
如果你想刪掉遠程主機上的密鑰,直接打開authorized_keys,搜索你的用戶名,刪除那行,即可。


=== 第二部分 ===
1.用你最喜歡的編輯器來敲命令
command <CTRL-x CTRL-e>

如果你喜歡別的編輯器,可以在~/.bashrc裏面放上比如export EDITOR=nano的命令。
另外一個修改命令的方法是使用fc命令(Fix Command),在編輯器裏面打開上一句命令。

2.清空或創建一個文件
> file.txt

4.重置終端
reset

9.查看系統中佔用端口的進程
netstat -tulnp
Netstat是很常用的用來查看Linux網絡系統的工具之一,這個參數可以背下來:
-t: 顯示TCP鏈接信息
-u: 顯示UDP鏈接信息
-l: 顯示監聽狀態的端口
-n: 直接顯示ip,不做名稱轉換
-p: 顯示相應的進程PID以及名稱(要root權限)
如果要查看關於sockets更詳細佔用信息等,可以使用lsof工具。

=== 第三部分 ===

3. 實時某個目錄下查看最新改動過的文件
watch -d -n 1 'df; ls -FlAt /path'

在使用這條命令時你需要替換其中的 /path 部分,watch 是實時監控工具,-d 參數會高亮顯示變化的區域,-n 1 參數表示刷新間隔爲 1 秒。

df; ls -FlAt /path 運行了兩條命令,df 是輸出磁盤使用情況,ls -FlAt 則列出 /path 下面的所有文件。

ls -FlAt 的參數詳解:
-F 在文件後面加一個文件符號表示文件類型,共有 */=>@| 這幾種類型,* 表示可執行文件,/ 表示目錄,= 表示接口( sockets) ,> 表示門, @ 表示符號鏈接, |表示管道。
-l 以列表方式顯示
-A 顯示 . 和 ..
-t 根據時間排序文件

8. 執行一條命令但不保存到 history 中
<space> command

這條命令可運行於最新的 Bash shell 裏,在其它 shell 中沒測試過。

通過在命令行前面添加一個空格,就可以阻止這條命令被保存到 bash history(~/.bash_history) 文件中,這個行爲可以通過 $HISTIGNORE shell 變量來控制。我的設置是 HISTIGNORE="&:[ ]*" ,表示不保存重複的命令到 history 中,並且不保存以空格開頭的命令行。$HISTIGNORE 中的值以冒號分隔。

9. 顯示當前目錄中所有子目錄的大小
du -h --max-depth=1

- -max-depth=1 參數可以讓 du 命令顯示當前目錄下 1 級子目錄的統計信息,當然你也可以把 1 改爲 2 ,進一步顯示 2 級子目錄的統計信息,可以靈活運用。
而 -h 參數則是以Mb 、G 這樣的單位來顯示大小。
譯者注 :在此推薦一個小工具 ncdu ,可以更方便的達到此效果。

=== 第四部分 ===
1.查看ASCII碼錶
man 7 ascii

很多人初學編程都會接觸到ascii碼的概念,有時候爲了查某個符號的ascii值,可能還得翻箱倒櫃找出當年的課本?Linux Manpage裏面其實包含了很多類似的實用資料,上述命令就能很詳細的方式解釋ascii編碼,當然這裏還有在線版。

man命令的第二個參數是區域碼,用來區分索引詞的範圍,比如printf,在C標準庫裏面的printf跟bash當中的printf是不同的,前者的查詢是man 3 printf,後者是man 1 printf。如果這個區域碼省略,就會從1開始搜索,直到找到爲止。
命令man man可以看到詳細的解釋。

manpages裏面還有一些有趣而且實用的資料,可能鮮爲人知:
man 1 intro - 一篇對從未接觸過Linux的用戶的簡明教程。
man 2 syscalls - 內核系統請求的列表,按內核版本註釋分類,系統編程必備。
man 2 select_tut - 關於select()系統請求的教程。
man 3 string - 在頭文件內的所有函數。
man 3 stdio - 關於頭文件的使用,標準輸入/輸出庫的說明。
man 3 errno - 所有errorno的取值及說明。(C語言內類似其他語言的異常告知機制)
man 4 console_codes - Linux的終端控制碼及其使用解釋。
man 4 full - 介紹/dev/full這個總是處於"滿"狀態的磁盤。(對應/dev/null這個總是空的設備)
man 5 proc - 介紹/proc下的文件系統。
man 5 filesystems - 各種Linux文件系統。
第7區裏面的資料通常最酷:
man 7 bootparam - 詳細解釋內核啓動參數。
man 7 charsets - 解釋各種語言的編碼集。(gbk,gb2312等)
man 7 glob - 解釋glob文件名管理機制的工作過程。
man 7 hier - 解釋Linux文件系統結構各個部分的作用。
man 7 operator - C語言的運算符的列表。
man 7 regex - 介紹正則表達式。
man 7 suffixes - 常見文件後綴名的列表跟解釋。
man 7 time - Linux的時鐘機制解釋。
man 7 units - 數值單位及其數值的解釋。
man 7 utf8 - 描述UTF-8編碼。
man 7 url - 解釋URL、URI、URN等的標準。

2.簡易計時器
time read
time是用來計算一個進程在運行到結束過程耗費多少時間的程序,它的輸出通常有三項:
$ time ls /opt
...
real 0m0.008s
user 0m0.003s
sys 0m0.007s

6.清空屏幕
<CTRL+l>;

這個跟之前介紹的reset命令重置終端的作用有些類似,其實都只是發送一段控制序列,讓終端的顯示覆位。
還可以這樣運行:
tput clear
tput是專門用來控制終端的一個小工具,也挺強大的,詳細信息運行man tput查看。

8.列出你最常用的10條命令
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

這行命令組合得很妙: history輸出用戶了命令歷史;awk統計並輸出列表;sort排序;head截出前10行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章