首頁 > 軟體

20個 Unix/Linux 命令技巧

2020-06-16 18:03:53

讓我們用這些Unix/Linux命令技巧開啟新的一年,提高在終端下的生產力。我已經找了很久了,現在就與你們分享。

 

刪除一個大檔案

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

  1. >/path/to/file.log
  2. # 或使用如下格式
  3. :>/path/to/file.log
  4. # 然後刪除它
  5. rm /path/to/file.log

 

如何記錄終端輸出?

試試使用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

 

還原被刪除的 /tmp 資料夾

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

  1. mkdir /tmp
  2. chmod 1777/tmp
  3. chown root:root /tmp
  4. ls -ld /tmp

 

鎖定一個資料夾

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

  1. chmod 0000/downloads

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

  1. chmod 0755/downloads

 

在vim中用密碼保護檔案

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

  1. vim +X filename

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

 

清除螢幕上的亂碼

只要輸入:

  1. reset

 

易讀格式

傳遞-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

 

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

只要輸入:

  1. ## linux 版本 ##
  2. lslogins
  3. ## BSD 版本 ##
  4. logins

範例輸出:

  1. UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS
  2. 0 root 0022:37:59 root
  3. 1 bin 01 bin
  4. 2 daemon 01 daemon
  5. 3 adm 01 adm
  6. 4 lp 01 lp
  7. 5 sync 01 sync
  8. 6 shutdown 012014-Dec17 shutdown
  9. 7 halt 01 halt
  10. 8 mail 01 mail
  11. 10 uucp 01 uucp
  12. 11operator01operator
  13. 12 games 01 games
  14. 13 gopher 01 gopher
  15. 14 ftp 01 FTP User
  16. 27 MySQL 01MySQLServer
  17. 38 ntp 01
  18. 48 apache 01Apache
  19. 68 haldaemon 01 HAL daemon
  20. 69 vcsa 01virtual console memory owner
  21. 72 tcpdump 01
  22. 74 sshd 01Privilege-separated SSH
  23. 81 dbus 01System message bus
  24. 89 postfix 01
  25. 99 nobody 01Nobody
  26. 173 abrt 01
  27. 497 vnstat 01 vnStat user
  28. 498 nginx 01 nginx user
  29. 499 saslauth 01"Saslauthd user"

 

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

我意外在/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)"

 

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

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

  1. sudo htop

 

想要再次執行相同的命令

只需要輸入!!。比如:

  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 !$

 

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

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

  1. leave +hhmm

這裡:

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

 

甜蜜的家

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

  1. cd -

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

  1. cd

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

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

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

  1. cd html

 

在less瀏覽時編輯檔案

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

  1. less *.c
  2. less foo.html
  3. ## 按下v鍵來編輯檔案 ##
  4. ## 退出編輯器後,你可以繼續用less瀏覽了 ##

 

列出你系統中的所有檔案和目錄

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

  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

 

用一條命令構造目錄樹

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

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

 

將檔案複製到多個目錄中

不必執行:

  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函數作為讀者的練習。

 

快速找出兩個目錄的不同

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

  1. ls -l /tmp/r
  2. ls -l /tmp/s
  3. # 使用 diff 比較兩個資料夾
  4. diff /tmp/r/ /tmp/s/

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

 

文字格式化

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

  1. fmt file.txt

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

  1. fmt -s file.txt

 

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

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

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

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

20條Linux命令面試問答  http://www.linuxidc.com/Linux/2015-02/112637.htm

《Linux命令列與Shell指令碼程式設計大全》第2版 PDF中文版  http://www.linuxidc.com/Linux/2015-02/112708.htm

不同應用場景的10個Linux面試問題與解答 http://www.linuxidc.com/Linux/2014-04/99710.htm

10個核心的Linux面試問題與答案 http://www.linuxidc.com/Linux/2014-04/100447.htm

10個有用的Linux命令面試問題及答案 http://www.linuxidc.com/Linux/2014-08/105150.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-03/115305.htm


IT145.com E-mail:sddin#qq.com