讓我們用這些Unix/Linux命令技巧開啟新的一年,提高在終端下的生產力。我已經找了很久了,現在就與你們分享。
我在生產服務器上有一個很大的200GB的日志文件需要刪除。我的rm和ls命令已經崩潰,我擔心這是由於巨大的磁盤IO造成的,要刪除這個大文件,輸入:
>/path/to/file.log
# 或使用如下格式
:>/path/to/file.log
# 然後刪除它
rm /path/to/file.log
試試使用script命令行工具來為你的終端輸出創建輸出記錄。
script my.terminal.sessio
輸入命令:
ls
date
sudo service foo stop
要退出(結束script會話),輸入 exit 或者 logout 或者按下 control-D。
exit
要浏覽輸入:
more my.terminal.session
less my.terminal.session
cat my.terminal.session
我在文章Linux和Unix shell,我犯了一些錯誤。我意外地刪除了/tmp文件夾。要還原它,我需要這麼做:
mkdir /tmp
chmod 1777/tmp
chown root:root /tmp
ls -ld /tmp
為了我的數據隱私,我想要鎖定我文件服務器下的/downloads文件夾。因此我運行了:
chmod 0000/downloads
root用戶仍舊可以訪問,而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 -h
df -k
# 以字節、KB、MB 或 GB 輸出:
free -b
free -k
free -m
free -g
# 以易讀的格式輸出 (比如 1K 234M 2G)
du -h
# 以易讀的格式顯示文件系統權限
stat -c %A /boot
# 比較易讀的數字
sort -h -a file
# 在Linux上以易讀的形式顯示cpu信息
lscpu
lscpu -e
lscpu -e=cpu,node
# 以易讀的形式顯示每個文件的大小
tree -h
tree -h /boot
只要輸入:
## linux 版本 ##
lslogins
## BSD 版本 ##
logins
示例輸出:
UID USER PWD-LOCK PWD-DENY LAST-LOGIN GECOS
0 root 0022:37:59 root
1 bin 01 bin
2 daemon 01 daemon
3 adm 01 adm
4 lp 01 lp
5 sync 01 sync
6 shutdown 012014-Dec17 shutdown
7 halt 01 halt
8 mail 01 mail
10 uucp 01 uucp
11operator01operator
12 games 01 games
13 gopher 01 gopher
14 ftp 01 FTP User
27 mysql 01MySQLServer
38 ntp 01
48 apache 01Apache
68 haldaemon 01 HAL daemon
69 vcsa 01virtual console memory owner
72 tcpdump 01
74 sshd 01Privilege-separated SSH
81 dbus 01System message bus
89 postfix 01
99 nobody 01Nobody
173 abrt 01
497 vnstat 01 vnStat user
498 nginx 01 nginx user
499 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.conf
sudo 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 *.c
less 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/dir1
cp /path/to/file /var/dir2
cp /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/r
ls -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.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