讓我們用這些Unix/Linux命令技巧開啟新的一年,提高在終端下的生產力。我已經找了很久了,現在就與你們分享。
我在生產服務器上有一個很大的200GB的日志文件需要刪除。我的rm和ls命令已經崩潰,我擔心這是由於巨大的磁盤IO造成的,要刪除這個大文件,輸入:
>/path/to/file.log# 或使用如下格式:>/path/to/file.log# 然後刪除它 rm /path/to/file.log
試試使用script命令行工具來為你的終端輸出創建輸出記錄。
script my.terminal.sessio輸入命令:
lsdatesudo service foo stop要退出(結束script會話),輸入 exit 或者 logout 或者按下 control-D。
exit要浏覽輸入:
more my.terminal.sessionless my.terminal.sessioncat my.terminal.session
我在文章Linux和Unix shell,我犯了一些錯誤。我意外地刪除了/tmp文件夾。要還原它,我需要這麼做:
mkdir /tmpchmod 1777/tmpchown root:root /tmpls -ld /tmp
為了我的數據隱私,我想要鎖定我文件服務器下的/downloads文件夾。因此我運行了:
chmod 0000/downloadsroot用戶仍舊可以訪問,而ls和cd命令則不工作。要還原它用:
chmod 0755/downloads
害怕root用戶或者其他人偷窺你的個人文件麼?嘗試在vim中用密碼保護,輸入:
vim +X filename或者,在退出vim之前使用:X 命令來加密你的文件,vim會提示你輸入一個密碼。
只要輸入:
reset
傳遞-h或者-H(和其他選項)選項給GNU或者BSD工具來獲取像ls、df、du等命令以易讀的格式輸出:
ls -lh# 以易讀的格式 (比如: 1K 234M 2G)df -hdf -k# 以字節、KB、MB 或 GB 輸出: free -bfree -kfree -mfree -g# 以易讀的格式輸出 (比如 1K 234M 2G)du -h# 以易讀的格式顯示文件系統權限stat -c %A /boot# 比較易讀的數字sort -h -a file# 在Linux上以易讀的形式顯示cpu信息lscpulscpu -elscpu -e=cpu,node# 以易讀的形式顯示每個文件的大小tree -htree -h /boot
只要輸入:
## linux 版本 ##lslogins## BSD 版本 ##logins示例輸出:
UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS0 root 0022:37:59 root1 bin 01 bin2 daemon 01 daemon3 adm 01 adm4 lp 01 lp5 sync 01 sync6 shutdown 012014-Dec17 shutdown7 halt 01 halt8 mail 01 mail10 uucp 01 uucp11operator01operator12 games 01 games13 gopher 01 gopher14 ftp 01 FTP User27 mysql 01MySQLServer38 ntp 0148 apache 01Apache68 haldaemon 01 HAL daemon69 vcsa 01virtual console memory owner72 tcpdump 0174 sshd 01Privilege-separated SSH81 dbus 01System message bus89 postfix 0199 nobody 01Nobody173 abrt 01497 vnstat 01 vnStat user498 nginx 01 nginx user499 saslauth 01"Saslauthd user"
我意外在/var/www/html/而不是/home/projects/www/current下解壓了一個tarball。它搞亂了/var/www/html下的文件,你甚至不知道哪些是誤解壓出來的。最簡單修復這個問題的方法是:
cd /var/www/html//bin/rm -f "$(tar ztf /path/to/file.tar.gz)"
正經地說,你應該試一下用htop代替top:
sudo htop
只需要輸入!!。比如:
/myhome/dir/script/name arg1 arg2# 要再次運行相同的命令 !!## 以root用戶運行最後運行的命令sudo !!!!會運行最近使用的命令。要運行最近運行的以“foo”開頭命令:
!foo# 以root用戶運行上一次以“service”開頭的命令sudo !service!$用於運行帶上最後一個參數的命令:
# 編輯 nginx.confsudo vi /etc/nginx/nginx.conf# 測試 nginx.conf/sbin/nginx -t -c /etc/nginx/nginx.conf# 測試完 "/sbin/nginx -t -c /etc/nginx/nginx.conf"你可以用vi再次編輯這個文件了sudo vi !$
如果你需要提醒離開你的終端,輸入下面的命令:
leave +hhmm這裡:
想要進入剛才進入的地方?運行:
cd -需要快速地回到你的家目錄?輸入:
cd變量CDPATH定義了目錄的搜索路徑:
export CDPATH=/var/www:/nas10現在,不用輸入cd */var/www/html/ 這樣長了,我可以直接輸入下面的命令進入 /var/www/html:
cd html
要編輯一個正在用less浏覽的文件,可以按下v。你就可以用變量$EDITOR所指定的編輯器來編輯了:
less *.cless foo.html## 按下v鍵來編輯文件 #### 退出編輯器後,你可以繼續用less浏覽了 ##
要看到你系統中的所有目錄,運行:
find /-type d | less# 列出$HOME 所有目錄find $HOME -type d -ls | less要看到所有的文件,運行:
find /-type f | less# 列出 $HOME 中所有的文件find $HOME -type f -ls | less
你可以用mkdir加上-p選項一次創建一顆目錄樹:
mkdir -p /jail/{dev,bin,sbin,etc,usr,lib,lib64}ls -l /jail/
不必運行:
cp /path/to/file /usr/dir1cp /path/to/file /var/dir2cp /path/to/file /nas/dir3運行下面的命令來復制文件到多個目錄中:
echo /usr/dir1 /var/dir2 /nas/dir3 | xargs -n 1 cp -v /path/to/file留下創建一個shell函數作為讀者的練習。
diff命令會按行比較文件。但是它也可以比較兩個目錄:
ls -l /tmp/rls -l /tmp/s# 使用 diff 比較兩個文件夾diff /tmp/r/ /tmp/s/圖片: 找出目錄之間的不同
你可以用fmt命令重新格式化每個段落。在本例中,我要用分割超長的行並且填充短行:
fmt file.txt你也可以分割長的行,但是不重新填充,也就是說分割長行,但是不填充短行:
fmt -s file.txt
如下使用tee命令在屏幕上看見輸出並同樣寫入到日志文件my.log中:
mycoolapp arg1 arg2 input.file | tee my.logtee可以保證你同時在屏幕上看到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