[me@HPC ~]$ grep -i "error" ./install.log # 這會在 install.log 裡面尋找 "error",並把整行列出來 install.log:5:3: error: ‘output’ undeclared (first use in this function)' |
# 這裡的 -i 會讓他在執行時忽略大小寫的不同 # 另外,若想看看在找到的文字後 (After) 可以加上 -A 再配合一個數字即可 # 找前 (Before) 幾行的內容,則是使用 -B # 如果想要同時搜尋搜尋不同的關鍵字,可以用 -e: |
[me@HPC ~]$ grep -e "error" -e "warning" ./install.log # 這會在 install.log 裡面尋找包含 "error" 或 "warning" 的行 |
[me@HPC ~]$ echo "Hello World" # 什麼都不加,單純印出Hello World Hello World # 下面就是將本來會直接印出來的Hello World pipe給cut指令,並切出第三到第九個字元 [me@HPC ~]$ echo "Hello World" | cut --character=3-9 llo Wor |
[me@HPC ~]$ ls *.f90 # 假設這裡有以下這些檔案 main.f90 parameter.f90 sub-convert.f90 sub-sort.f90 [me@HPC ~]$ ls *.f90 | grep "sub" # 這樣用的話,他會從上面這些檔名中再撈出帶有sub字樣的結果 sub-convert.f90 sub-sort.f90 [me@HPC ~]$ echo "Hello World" | cut --character=3-9 llo Wor 可以將原本以空白或換行作為分隔的資料重新編排成以空白分隔的資料: |
find 搜尋路徑 -type l ! -exec test -r {} \; -print find 搜尋路徑 ! -exec test -s {} \; -print |
# 搜尋無效連結 # 搜尋空白檔案 |
參考資料:鳥哥的Linux私房菜:利用 test 指令的測試功能
find 搜尋路徑 -type f -name "檔案名稱" | xargs grep "字串" # 假設我要在src資料夾裡從一大堆的.f Fortran程式碼中找出叫做sst的變數,那麼就是: find ./src -type f -name "*.f" | xargs grep "sst" |
grep -r "字串" * |
參考資料:鳥哥的Linux私房菜:參數代換: xargs
鳥哥的Linux私房菜:grep 的一些進階選項
nohup 欲執行之指令 & # 範例 [root@HPC mm5] ./mm5.deck > LOG & [root@HPC mm5] ./mm5.deck >& LOG & # 以上這兩種方法一旦登出或斷線程式就會被終止 [root@HPC mm5] nohup ./mm5.deck & # 如此斷線也沒關係,所有訊息將被寫入nohup.out |
# 末尾的&是讓你能繼續下其他指令 # 輸出訊息紀錄於LOG,但錯誤訊息會顯示在螢幕上 # 所有的輸出訊息都會紀錄在LOG中 |
[root@HPC mm5] screen | # 切換至GNU Screen |
切換過去後,應該會看到PieTTY左上角的狀態改變了: | |
[root@HPC mm5] ./mm5.deck (cd Run; make -i -r mmlif); make[1]: Entering directory .....(略) # 工作開始跑後,按下Ctrl+a接著按下d [detached] |
# 執行你的工作 # 註:按下Ctrl+a後畫面不會有任何改變 |
如此即可暫時離開GNU Screen,即使斷線工作還是會繼續,我們接著下後續的指令: |
|
[root@HPC mm5] ▋ [root@HPC mm5] screen # 一樣Ctrl+a 按d暫時離開 [root@HPC mm5] screen -r You may wish for a screen, what do you want? 21121.pts-4.HPC (Detached) 20943.pts-4.HPC (Detached) [root@HPC mm5] screen -r 20943.pts-4.HPC [root@HPC mm5] ./mm5.deck (cd Run; make -i -r mmlif); make[1]: Entering directory .....(略) # 假設Screen裡的工作結束了 [root@HPC mm5] exit [screen is terminating] |
# 注意:現在不在Screen裡 # 若這不加任何參數,將會打開一個新的Screen # 加-r可回到剛剛打開的screen裡 # 但是因為剛剛共開了兩個,所以他會問你要去哪個 # 指定要叫出來的screen # 回到Screen裡會顯示當初離開前的畫面 # 這樣才有結束掉Screen |
格式 | 壓縮指令 | 解壓縮指令 |
*.bz2 *.gz / *.z *.tar *.tar.bz2 *.tar.gz *.tgz *.zip |
bzip2 欲壓縮檔案之名稱 gzip 欲壓縮檔案之名稱 tar -cv 欲壓縮檔案之名稱 -f 欲建立之壓縮檔名.tar tar -jcv 欲壓縮檔案之名稱 -f 欲建立之壓縮檔名.bz2 tar -zcv 欲壓縮檔案之名稱 -f 欲建立之壓縮檔名.gz tar -zcv 欲壓縮檔案之名稱 -f 欲建立之壓縮檔名.tgz zip 欲建立之壓縮檔名.zip 欲壓縮檔案之名稱 |
bzip2 -d 壓縮檔名 gzip -d 壓縮檔名 tar -xvf 壓縮檔名 tar -jxvf 壓縮檔名 tar -zxvf 壓縮檔名 tar -zxvf 壓縮檔名 unzip 壓縮檔名 |
bzip2 -k 欲壓縮/解壓縮之檔名 gzip -c 欲壓縮檔案之名稱 > 欲建立之壓縮檔名.gz | # k為keep之意 |
# gzip解壓縮時也可以用-c,但是要指定輸出到哪個檔案比較麻煩一點 |
參考資料:鳥哥的Linux私房菜:Linux 系統常見的壓縮指令
pkill -kill -t 該使用者的Terminal # 例 [root@HPC ~] who UserA pts/1 Sep 17 08:03 (192.168.55.66) root pts/3 Sep 17 09:07 (127.0.0.1) # 這裡的pts/1就是UserA的Terminal [root@HPC ~] pkill -kill -t pts/1 |
wall "想要廣播給所有使用者的訊息" # 在 Ubuntu 上得用re-direction: echo "想要廣播給所有使用者的訊息" | wall # 也可以把訊息寫在一個檔案裡,然後: wall < Mesg.txt |
cat /proc/cpuinfo:CPU資訊
cat /proc/meminfo:目前的記憶體使用狀況
free -m:同樣也是查詢記憶體使用狀況
cat /proc/partitions:磁碟分割資訊
cat /proc/version:Linux Kernel完整資訊
uname -r:Linux Kernel版本
cat /etc/*-release:Linux版本
lsb_release -a:Linux版本
另外透過 dmidecode 這套件可以讓你查詢很多關於 BIOS 的資訊,例如下列指令可用來查詢 BIOS 版本:
sudo dmidecode -s "bios-version"
直接打 dmidecode -s 它會跟你說可用的選項有哪些,從這裡也可以看到這個工具最大的缺點就是需要root權限,有一個更好的替代方案就是直接讀取位在 /sys/devices/virtual/dmi/id/ 底下的檔案,這樣就有可能可以不需要root權限:
cat /sys/devices/virtual/dmi/id/bios_version
部份參考資料:
http://www.hkcode.com/linux-bsd-notes/466
StackOverflow - How can I find the hardware model in Linux?
# 本地備份 rsync -av 欲備份之本地端資料夾 欲放置資料之位置 # 異地備份 rsync -av -e ssh 欲備份之本地端資料夾 帳號@欲存放備份資料之主機位置:欲存放備份資料之位置 |
參考資料:鳥哥的Linux私房菜:以 rsync 進行同步鏡像備份
# 把用cat秀出/etc/passwd的內容(stdout)輸出到LOG.txt裡 # 也可以讀入資料,下例利用"<"讀入Mesg.txt的內容並發送給所有使用者 # 輸入輸出可以同時使用 # 還可以指定錯誤訊息的輸出(stderr),如果不指定錯誤訊息的輸出的話,錯誤訊息將會顯示在螢幕上 # 此外也可以將stderr與stdout都輸入同一個檔案,只要將stderr指向到stdout即可 # 重新導向時會覆蓋掉原有的檔案,若不希望這種情況發生可以用"">>"把資料附加在原本的檔案之後 |
參考資料:I/O Redirection
Dorm 7 Softwarel:到底怎麼樣可以同時把std error, std out 記錄到檔案中呢?
[root@HPC ~] ./a.out > LOG & [root@HPC ~] tail -f LOG |
command -v 指令 >/dev/null 2>&1 && { 成功時的動作; } || { 失敗時的動作; } # 例: |
參考資料:stackoverflow: Check if a program exists from a bash script
$ ps 1 | |||||
PID | TTY | STAT | TIME | COMMAND | |
1 | ? | Ss | 0:01 | /sbin/init splash | # systemd on Vivid |
以下是在Vivid上切換至upstart的結果:
$ ps 1 | |||||
PID | TTY | STAT | TIME | COMMAND | |
1 | ? | Ss | 0:01 | /sbin/upstart | # upstart on Vivid |
而在Vivid之前的版本,預設是upstart:
$ ps 1 | |||||
PID | TTY | STAT | TIME | COMMAND | |
1 | ? | Ss | 0:01 | /sbin/init | # upstart on Precise |
從這邊可以看出,如果單純只是想在 Vivid 上做判斷其實蠻簡單的,只要用 pidof upstart 這個指令就可以了,如果有回傳值的話那就是正在使用 upstart。但是如果要考慮不同的版本就要小心了,想依樣畫葫蘆用 pidof init 來判斷或是用 ps 1 檢查第一個執行緒時都會出問題!仔細看一下在 Vivid 下的 /sbin/init,會發現他其實被是指向 systemd:
# /sbin/init on Vivid (systemd) |
$ ls -l /sbin/init |
lrwxrwxrwx 1 root root 20 Apr 28 10:12 /sbin/init -> /lib/systemd/systemd* |
但是在之前的版本中並不是這樣:
# /sbin/init on Precise (upstart) |
$ ls -l /sbin/init |
-rwxr-xr-x 1 root root 167192 1月 19 2013 /sbin/init* |
參考資料:Ubuntu Wiki: SystemdForUpstartUsers
如果手邊做了很多支 Ubuntu 的 LiveUSB,想知道裡面裝的到底是哪個版本的 image 除了實際用它來開機之外,另一個選項是把它掛載到任一台電腦上,然後檢查它的 .disk 隱藏資料夾,裡面會有一個叫做 info 的文字檔,版本資訊就在那裡面:
$ cat /media/myusb/.disk/info Ubuntu 14.04.1 LTS "Trusty Tahr" - Release amd64 (20140722.2) |