1. 程式人生 > >超好用的Unix/Linux 命令技巧 大神為你詳細解讀

超好用的Unix/Linux 命令技巧 大神為你詳細解讀

1、刪除一個大檔案

我在生產伺服器上有一個很大的200GB的日誌檔案需要刪除。我的rm和ls命令已經崩潰,我擔心這是由於巨大的磁碟IO造成的,要刪除這個大檔案,輸入:

 
  1. > /path/to/file.log  

  2. # 或使用如下格式  

  3. : > /path/to/file.log  

  4. # 然後刪除它   

  5. rm /path/to/file.log 

2、如何記錄終端輸出?

試試使用script命令列工具來為你的終端輸出建立輸出記錄。

 
  1. script my.terminal.sessio 

輸入命令:

 
  1. ls 

  2. date

  3. sudo service foo stop 

要退出(結束script會話),輸入 exit 或者 logout 或者按下 control-D。

 
  1. exit 

要瀏覽輸入:

 
  1. more my.terminal.session 

  2. less my.terminal.session 

  3. cat my.terminal.session 

3、還原被刪除的 /tmp 資料夾

我在文章Linux和Unix shell,我犯了一些錯誤。我意外地刪除了/tmp資料夾。要還原它,我需要這麼做:

 
  1. mkdir /tmp 

  2. chmod 1777 /tmp 

  3. chown root:root /tmp 

  4. ls -ld /tmp 

4、鎖定一個資料夾

為了我的資料隱私,我想要鎖定我檔案伺服器下的/downloads資料夾。因此我運行了:

 
  1. chmod 0000 /downloads 

root使用者仍舊可以訪問,而ls和cd命令則不工作。要還原它用:

 
  1. chmod 0755 /downloads 

5、在vim中用密碼保護檔案

害怕root使用者或者其他人偷窺你的個人檔案麼?嘗試在vim中用密碼保護,輸入:

 
  1. vim +X filename 

或者,在退出vim之前使用:X 命令來加密你的檔案,vim會提示你輸入一個密碼。

6、清除螢幕上的亂碼

只要輸入:

 
  1. reset 

7、易讀格式

傳遞-h或者-H(和其他選項)選項給GNU或者BSD工具來獲取像ls、df、du等命令以易讀的格式輸出:

 
  1. ls -lh 

  2. # 以易讀的格式 (比如: 1K 234M 2G) 

  3. df -h 

  4. df -k 

  5. # 以位元組、KB、MB 或 GB 輸出:  

  6. free -b 

  7. free -k 

  8. free -m 

  9. free -g 

  10. # 以易讀的格式輸出 (比如 1K 234M 2G) 

  11. du -h 

  12. # 以易讀的格式顯示檔案系統許可權 

  13. stat -c %A /boot 

  14. # 比較易讀的數字 

  15. sort -h -a file 

  16. # 在Linux上以易讀的形式顯示cpu資訊 

  17. lscpu 

  18. lscpu -e 

  19. lscpu -e=cpu,node 

  20. # 以易讀的形式顯示每個檔案的大小 

  21. tree -h 

  22. tree -h /boot 

8、在Linux系統中顯示已知的使用者資訊

只要輸入:

 
  1. ## linux 版本 ## 

  2. lslogins 

  3. ## BSD 版本 ## 

  4. logins 

示例輸出:

 
  1. UID USER      PWD-LOCK PWD-DENY LAST-LOGIN GECOS 

  2.   0 root             0        0   22:37:59 root 

  3.   1 bin              0        1            bin 

  4.   2 daemon           0        1            daemon 

  5.   3 adm              0        1            adm 

  6.   4 lp               0        1            lp 

  7.   5 sync             0        1            sync 

  8.   6 shutdown         0        1 2014-Dec17 shutdown 

  9.   7 halt             0        1            halt 

  10.   8 mail             0        1            mail 

  11.  10 uucp             0        1            uucp 

  12.  11 operator         0        1            operator 

  13.  12 games            0        1            games 

  14.  13 gopher           0        1            gopher 

  15.  14 ftp              0        1            FTP User 

  16.  27 mysql            0        1            MySQL Server 

  17.  38 ntp              0        1 

  18.  48 apache           0        1            Apache 

  19.  68 haldaemon        0        1            HAL daemon 

  20.  69 vcsa             0        1            virtual console memory owner 

  21.  72 tcpdump          0        1 

  22.  74 sshd             0        1            Privilege-separated SSH 

  23.  81 dbus             0        1            System message bus 

  24.  89 postfix          0        1 

  25.  99 nobody           0        1            Nobody 

  26. 173 abrt             0        1 

  27. 497 vnstat           0        1            vnStat user 

  28. 498 nginx            0        1            nginx user 

  29. 499 saslauth         0        1           

左右可以滑動(後面類似樣式同理)

9、我如何刪除意外在當前資料夾下解壓的檔案?

我意外在/var/www/html/而不是/home/projects/www/current下解壓了一個tarball。它搞亂了/var/www/html下的檔案,你甚至不知道哪些是誤解壓出來的。最簡單修復這個問題的方法是:

 
  1. cd /var/www/html/ 

  2. /bin/rm -f "$(tar ztf /path/to/file.tar.gz)" 

左右可以滑動

10、對top命令的輸出感到疑惑?

正經地說,你應該試一下用htop代替top:

 
  1. sudo htop 

11、想要再次執行相同的命令

只需要輸入!!。比如:

 
  1. /myhome/dir/script/name arg1 arg2 

  2. # 要再次執行相同的命令  

  3. !! 

  4. ## 以root使用者執行最後執行的命令 

  5. sudo !! 

!!會執行最近使用的命令。要執行最近執行的以“foo”開頭命令:

 
  1. !foo 

  2. # 以root使用者執行上一次以“service”開頭的命令 

  3. sudo !service 

!$用於執行帶上最後一個引數的命令:

 
  1. # 編輯 nginx.conf 

  2. sudo vi /etc/nginx/nginx.conf 

  3. # 測試 nginx.conf 

  4. /sbin/nginx -t -c /etc/nginx/nginx.conf 

  5. # 測試完 "/sbin/nginx -t -c /etc/nginx/nginx.conf"你可以用vi再次編輯這個檔案了 

  6. sudo vi !$ 

左右可以滑動

12、在終端上提醒你必須得走了

如果你需要提醒離開你的終端,輸入下面的命令:

 
  1. leave +hhmm 

這裡:

  • hhmm - 時間是以hhmm的形式,hh表示小時(12時制或者24小時制),mm代表分鐘。所有的時間都轉化成12時制,並且假定發生在接下來的12小時。

13、甜蜜的家

想要進入剛才進入的地方?執行:

 
  1. cd - 

需要快速地回到你的家目錄?輸入:

 
  1. cd 

變數CDPATH定義了目錄的搜尋路徑:

 
  1. export CDPATH=/var/www:/nas10 

現在,不用輸入cd */var/www/html/ 這樣長了,我可以直接輸入下面的命令進入 /var/www/html:

 
  1. cd html 

14、在less瀏覽時編輯檔案

要編輯一個正在用less瀏覽的檔案,可以按下v。你就可以用變數$EDITOR所指定的編輯器來編輯了:

 
  1. less *.c 

  2. less foo.html 

  3. ## 按下v鍵來編輯檔案 ## 

  4. ## 退出編輯器後,你可以繼續用less瀏覽了 ## 

15、列出你係統中的所有檔案和目錄

要看到你係統中的所有目錄,執行:

 
  1. find / -type d | less 

  2. # 列出$HOME 所有目錄 

  3. find $HOME -type d -ls | less 

要看到所有的檔案,執行:

 
  1. find / -type f | less 

  2. # 列出 $HOME 中所有的檔案 

  3. find $HOME -type f -ls | less 

16、建立目錄樹

你可以用mkdir加上-p選項一次建立一顆目錄樹:

 
  1. mkdir -p /jail/{dev,bin,sbin,etc,usr,lib,lib64} 

  2. ls -l /jail/ 

17、將檔案複製到多個目錄中

不必執行:

 
  1. cp /path/to/file /usr/dir1 

  2. cp /path/to/file /var/dir2 

  3. cp /path/to/file /nas/dir3 

執行下面的命令來複制檔案到多個目錄中:

 
  1. echo /usr/dir1 /var/dir2 /nas/dir3 |  xargs -n 1 cp -v /path/to/file 

左右可以滑動

留下建立一個shell函式作為讀者的練習。

18、快速找出兩個目錄的不同

diff命令會按行比較檔案。但是它也可以比較兩個目錄:

 
  1. ls -l /tmp/r 

  2. ls -l /tmp/s 

  3. # 使用 diff 比較兩個資料夾 

  4. diff /tmp/r/ /tmp/s/ 

Fig. : Finding differences between folders

圖片: 找出目錄之間的不同

19、文字格式化

你可以用fmt命令重新格式化每個段落。在本例中,我要用分割超長的行並且填充短行:

 
  1. fmt file.txt 

你也可以分割長的行,但是不重新填充,也就是說分割長行,但是不填充短行:

 
  1. fmt -s file.txt 

20、可以看見輸出並將其寫入到一個檔案中

如下使用tee命令在螢幕上看見輸出並同樣寫入到日誌檔案my.log中:

 
  1. mycoolapp arg1 arg2 input.file | tee my.log 

tee可以保證你同時在螢幕上看到mycoolapp的輸出並寫入檔案  my.log。