日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 最牛机器,最牛B的 Linux Shell 命令(二)

發布時間:2024/3/26 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 最牛机器,最牛B的 Linux Shell 命令(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 更友好的顯示當前掛載的文件系統mount | column -t

這條命令適用于任何文件系統,column 用于把輸出結果進行列表格式化操作,這里最主要的目的是讓大家熟悉一下 columnt 的用法。

下面是單單使用 mount 命令的結果:[root@uyhd000225 ms]# mount

/dev/hda1 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/xvdb1 on /data type ext3 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

而加了 column -t 命令后就成為這樣了:[root@uyhd000225 ms]# mount|column -t

/dev/hda1 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/xvdb1 on /data type ext3 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

另外你可加上列名稱來改善輸出結果$ (echo "DEVICE - PATH - TYPE FLAGS" && mount) | column -t

DEVICE - PATH - TYPE FLAGS

/dev/root on / type ext3 (rw)

/proc on /proc type proc (rw)

/dev/mapper/lvmraid-home on /home type ext3 (rw,noatime)

列2和列4并不是很友好,我們可以用 awk 來再處理一下$ (echo "DEVICE PATH TYPE FLAGS" && mount | awk '$2=$4="";1') | column -t

DEVICE PATH TYPE FLAGS

/dev/root / ext3 (rw)

/proc /proc proc (rw)

/dev/mapper/lvmraid-home /home ext3 (rw,noatime)

最后我們可以設置一個別名,為 nicemount$ nicemount() { (echo "DEVICE PATH TYPE FLAGS" && mount | awk '$2=$4="";1') | column -t; }

試一下$ nicemount

DEVICE PATH TYPE FLAGS

/dev/root / ext3 (rw)

/proc /proc proc (rw)

/dev/mapper/lvmraid-home /home ext3 (rw,noatime)

2. 運行前一個 Shell 命令,同時用 “bar” 替換掉命令行中的每一個 “foo”!!:gs/foo/bar

!! 表示重復執行上一條命令,并用 :gs/foo/bar 進行替換操作。

關于 !! 這個用法在前一篇文章中已有詳細的介紹。

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

watch 是實時監控工具,-d 參數會高亮顯示變化的區域,-n 1 參數表示刷新間隔為 1 秒。

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

ls -FlAt 的參數詳解:

-F 在文件后面加一個文件符號表示文件類型,共有 /=>@| 這幾種類型, 表示可執行文件,/ 表示目錄,= 表示接口( sockets) ,> 表示門, @ 表示符號鏈接, | 表示管道。

-l 以列表方式顯示

-A 顯示 . 和 ..

-t 根據時間排序文件

4. 通過 SSH 掛載遠程主機上的文件夾sshfs name@server:/path/to/folder /path/to/mount/point

這條命令可以讓你通過 SSH 加載遠程主機上的文件系統為本地磁盤,前提是你需要安裝 FUSE 及 sshfs 這兩個軟件。

譯者注:關于 sshfs 實際上我之前寫過一篇文章介紹過,詳見在 Ubuntu 上使用 sshfs 映射遠程 ssh 文件系統為本地磁盤(http://wowubuntu.com/sshfs.html)。

卸載的話使用 fusermount 或 umount 命令:$ fusermount -u /path/to/mount/point

# umount /path/to/mount/point

5. 通過 DNS 來讀取 Wikipedia 的詞條

1

dig +short txt .wp.dg.cx

這也許是最有趣的一條技巧了,David Leadbeater 創建了一個 DNS 服務器,通過它當你查詢一個 TXT 記錄類型時,會返回一條來自于 Wikipedia 的簡短的詞條文字,這是他的介紹。

這里有一個樣例,來查詢 “hacker” 的含義:$ dig +short txt hacker.wp.dg.cx

"Hacker may refer to: Hacker (computer security), someone involved

in computer security/insecurity, Hacker (programmer subculture), a

programmer subculture originating in the US academia in the 1960s,

which is nowadays mainly notable for the free software/” “open

source movement, Hacker (hobbyist), an enthusiastic home computer

hobbyist http://a.vu/w:Hacker"

這里使用了 dig 命令,這是標準的用來查詢 DNS 的系統管理工具,+short 參數是讓其僅僅返回文字響應,txt 則是指定查詢 TXT 記錄類型。

更簡單的做法是你可以為這個技巧創建一個函數:wiki() { dig +short txt $1.wp.dg.cx; }

#然后試試吧:

wiki hacker

"Hacker may refer to: Hacker (computer security), …"

如果你不想用 dig ,也可以用 host 命令:host -t txt hacker.wp.dg.cx

另外在Twitter上看過某人的創意,用普通的dns來作為程序版本更新的查詢服務器:設定域名software-version-check.example.com的A記錄為1.2.40.3,對比自己的版本號,嗯,有更新了!

6. 用 Wget 的遞歸方式下載整個網站wget --random-wait -r -p -e robots=off -U Mozilla www.example.com

參數解釋:

–random-wait 等待 0.5 到 1.5 秒的時間來進行下一次請求

-r 開啟遞歸檢索

-e robots=off 忽略 robots.txt

-U Mozilla 設置 User-Agent 頭為 Mozilla

其它一些有用的參數:

–limit-rate=20K 限制下載速度為 20K

-o logfile.txt 記錄下載日志

-l 0 刪除深度(默認為5)

-wait=1h 每下載一個文件后等待1小時

7. 復制最后使用的命令中的參數 or

這個快捷鍵只能工作于 shell 的 emacs 編輯模式,它可以從最后使用的命令行中復制參數到當前命令行中,下面是一個樣例:$ echo a b c

a b c

$ echo

$ echo c

你可以重復執行該快捷鍵,以便獲取自已需要的參數,

以下是樣例:$ echo 1 2 3

1 2 3

$ echo a b c

a b c

$ echo

$ echo c

$ echo again

$ echo 3

另外,假如你想指定第1個或第2個,或者是第 n 個參數的話,可以按 ALT + 1 (或 ESC + 1) 或 ALT + 2 (或 ESC +2) 這樣形式的快捷鍵。

以下是樣例:$ echo a b c

a b c

$ echo

$ echo a

a

$ echo

$ echo b

b

查看Emacs Editing Mode Keyboard Shortcuts(http://www.catonmat.net/blog/bash-emacs-editing-mode-cheat-sheet/)一文獲取更多類似的快捷鍵。

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

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

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

如果你的命令內包含密碼,比如mysqladmin,不把它記錄在歷史當中是好主義。

深入了解的話,可進一步看此文The Definitive Guide to Bash Command Line History(http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/)

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

–max-depth=1 參數可以讓 du 命令顯示當前目錄下 1 級子目錄的統計信息,當然你也可以把 1 改為 2 ,進一步顯示 2 級子目錄的統計信息,可以靈活運用。而 -h 參數則是以 Mb 、G 這樣的單位來顯示大小。

譯者注:在此推薦一個小工具 ncdu ,可以更方便的達到此效果。

10. 顯示消耗內存最多的 10 個運行中的進程,以內存使用量排序ps aux | sort -nk +4 | tail

顯然這并不是最好的方法,但它確實用起還不錯。

這是一個典型的管道應用,通過 ps aux 來輸出到 sort 命令,并用 sort 排序列出 4 欄,再進一步轉到 tail 命令,最終輸出 10 行顯示使用內存最多的進程情況。

假如想要發現哪個進程使用了大量內存的話,我通常會使用 htop 或 top 而非 ps 。

11. 用 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

*********************************************四**************************

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

運行命令開始算起,到結束時按一下Enter,就顯示出整個過程的時間,精確到ms級別。

time是用來計算一個進程在運行到結束過程耗費多少時間的程序,它的輸出通常有三項:[root@uyhd000225 ms]# time ll

總計 924

-rw-r--r-- 1 root root 697856 12-19 16:19 ?????????-20131219.doc

-rw-r--r-- 1 root root 79 12-17 16:41 cpms.sh

-rw-r--r-- 1 root root 76 12-18 16:27 delms.sh

-rw-r--r-- 1 root root 222990 12-19 16:20 mscfqk.zip

drwxr-xr-x 2 root root 4096 12-11 17:37 test

real 0m0.003s

user 0m0.001s

sys 0m0.001s

[root@uyhd000225 ms]#

real指整個程序對真實世界而言運行所需時間,user指程序在用戶空間運行的時間,sys指程序對系統調用鎖占用時間。

read本來是一個讀取用戶輸入的命令,常見用法是read LINE,用戶輸入并回車后,鍵入的內容就被保存到$LINE變量內,但在鍵入回車前,這個命令是一直阻塞的。

可見time read這命令靈活地利用了操作系統的阻塞。用這個命令來測試一壺水多久煮滾應該是不錯的。

3.遠程關掉一臺Windows機器net rpc shutdown -I IP_ADDRESS -U username%password

Windows平臺上的net命令是比較強大的,因為其后臺是一個RPC類的系統服務,大家應該看過win下用net use \\ip\ipc$ *這樣一個命令建立IPC空連接,***主機的事情。

Linux下的net命令是samba組件的程序,通常包含在smbclient內,可以跟windows主機的文件、打印機共享等服務進行通訊,但是也支持rpc命令。

上述命令就是在遠程Windows主機上執行了shutdown命令。當然這不一定成功,關系到win主機上面的安全設置。net命令能夠控制到win主機就是了。

4.在一個子shell中運行一個命令(cd /tmp && ls)

當然這只是演示,要查看目錄當然可以ls /tmp。

好處就是不會改變當前shell的目錄,以及如果命令中設計環境變量,也不會對當前shell有任何修改。

在Shell編程中還有很多使用上引號來括住一個命令:`ls /tmp`,這也是子shell過程。可是上引號的方法無法嵌套,而使用小括號的方法可以,一個比較糾結的例子是:

echo $(echo -e \\x$(printf "%x" 65))

5.利用中間管道嵌套使用SSHssh -t host_A ssh host_B

如果目標機器host_B處于比較復雜的網絡環境,本機無法直接訪問,但另外一臺host_A能夠訪問到host_B,而且也能被本機訪問到,那上述命令就解決了方便登錄host_B的問題。

但理論上這個過程是可以無限嵌套的,比如:ssh -t host1 ssh -t host2 ssh -t host3 ssh -t host4 ...

嗯那神馬FBI CIA的,有本事來捉我吧~

6.清空屏幕;

這個跟之前介紹的reset命令重置終端的作用有些類似,其實都只是發送一段控制序列,讓終端的顯示復位。

還可以這樣運行:tput clear

tput是專門用來控制終端的一個小工具,也挺強大的,詳細信息運行man tput查看。

7.我想知道一臺服務器什么時候重啟完ping -a IP

系統管理員最常做的事情是重啟系統。但是服務器的重啟過程往往得花上好幾分鐘,什么你的服務器4個scsi卡?16個硬盤?系統是Redhat?還完全安裝所有組件?好吧,它重啟的時間都夠你吃頓飯了,所以我很想知道它什么時候回來。

ping命令有個audible ping參數,-a,當它終于ping通你的服務器時會讓小喇叭叫起來。

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

這行命令組合得很妙:

history輸出用戶了命令歷史;awk統計并輸出列表;sort排序;head截出前10行。

9.檢查Gmail新郵件curl -u you@gmail.com --silent "https://mail.google.com/mail/feed/atom" |

perl -ne \

'

print "Subject: $1 " if /

(.+?)/ && $title++;

print "(from $1)\n" if /(.+?)/;

'

Gmail的一個特色是支持Atom feed輸出郵件列表,所以總是見到很多Gmail郵件提醒器之類的,因為開發特簡單,atom很方便。

這里只是利用了perl的正則來解析atom(sed/awk也能做到)。

10.用Telnet看《星球大戰》telnet towel.blinkenlights.nl

沒什么好解釋的,就是ASCII藝術之一。如果你有ipv6連接,還能看到彩色版的。牛吧?

總結

以上是生活随笔為你收集整理的linux 最牛机器,最牛B的 Linux Shell 命令(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。