Unix/命令/雜項指南
sync 將記憶體緩衝區寫入磁碟
示例: sync 沒有選項,不顯示任何訊息
$ sync
提示
始終建議輸入幾次 sync,sync 的重要功能之一是更新超級塊資訊。
sync 呼叫 sync Unix 系統呼叫,如果成功則以退出程式碼“0”退出,如果失敗則以“1”退出。這些退出程式碼儲存在 $? 變數中。
$ sync $ echo $? 0
上面的示例顯示 sync 成功。
連結
echo 將其引數輸出到標準輸出。
示例
$ echo "hello world" hello world
提示: 一些常見的 echo 用法
檢查 shell 變數
$ echo $EDITOR emacs
檢查上一個命令傳遞的引數
$ ls -l ......... $ echo $_ -l
檢查當前父程序
$ echo $0 bash
檢查上一個命令的退出程式碼
$ echo $? 0
建立一個空檔案(與touch /tmp/newfile):
$ echo "" > /tmp/newfile
建立一個包含一些文字的新檔案
$ echo "exec fluxbox" > ~/.xinitrc
在檔案末尾新增(追加)一個新行
$ echo "A New Line" >> /tmp/newfile
連結
生成格式化的輸出,比 echo 更豐富。
示例
- printf Hello world
- 輸出 Hello world,沒有最後的換行符。
- printf "Hello "; printf "world"
- 同上,沒有換行符來分隔 Hello 和 world。
- printf "Hello world\n"
- 輸出 Hello world,使用 \n 在最後新增換行符。
- printf "Hello\tworld"
- 輸出 Hello,然後是製表符,然後是 world。支援的其他轉義序列包括 \\、\n、\r 等等。
- printf "Hello\011world"
- 同上:011 是製表符的八進位制數。
- printf "%0x" 255
- 輸出 ff,即 255 轉換為十六進位制。
- printf "%s %0x" Hex: 255
- 將 "Hex:" 作為第一個引數,使用 %s 進行格式化,將 255 作為第二個引數,使用 %0x 進行格式化。
- printf "%s\n" 1 2 3 4 5
- 輸出整數 1,..., 5,每行一個整數。因此,將第二個到最後一個引數按順序依次輸入格式字串,就如同在一個迴圈中一樣。
- printf "%s-%s\n" 1 2 3 4 5 6
- 輸出包含 1-2、3-4 和 5-6 的行。因此,格式字串會重複讀取所需數量的引數。
- printf "%s-%s-%s\n" 1 2 3 4
- 輸出包含 1-2-3 和 4-- 的行。因此,缺少的、無法構成完整三元組的引數將被視為空值。
- printf "%i-%i-%i\n" 1 2 3 4
- 輸出包含 1-2-3 和 4-0-0 的行。因此,缺少的、無法構成完整三元組的引數將被視為零。
- printf "%o" 255
- 輸出 377,即 255 的八進位制。
- printf "%X" 255
- 輸出 FF,即 255 的十六進位制,使用大寫字母。
連結
- printf, opengroup.org
- printf, freebsd.org
- 15.2 printf 在 GNU Coreutils 手冊中,gnu.org
輸出日曆,預設情況下輸出當前月份的日曆。如果後面跟著年份,則輸出該年的日曆;如果後面跟著月份和年份,則輸出該期間的日曆。POSIX 不支援任何選項:所有選項都是擴充套件。linux-util cal、GNU gcal 和 FreeBSD cal 的選項通常不相容。
POSIX 支援的介紹性示例
$ cal
April 2004
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
$ cal 01 2007
January 2007
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
POSIX cal 的更多示例
- cal 2004
- 輸出整個 2004 年的日曆。
util-linux cal 的示例
- cal Mar 2000
- 輸出 2000 年 3 月的日曆。
- cal -3
- 輸出當前月份、上個月和下個月的日曆。
- cal -3 04 2004
- 輸出 2004 年 4 月以及上個月(3 月)和下個月(5 月)的日曆。適用於 util-linux 和 FreeBSD。
- cal -1
- 輸出當前月份的日曆,這是 POSIX 的預設行為。
- cal -n 2 06 2020
- 輸出 6 月(06)和 7 月的日曆,即從輸入月份開始的兩個月的日曆。
- cal -j
- 輸出當前月份的日曆,其中使用年中的第幾天(從 1 月 1 日開始計算)而不是日期。
- cal -w
- 除了每日日曆外,還輸出星期數。
GNU gcal 的示例
- gcal
- 輸出當前月份的日曆。
- gcal .
- 輸出當前月份、上個月和下個月的日曆。
- gcal Jan
- 輸出當前 1 月的日曆。
- gcal Jan-Mar
- 輸出當前 1 月到 3 月的日曆。
- gcal Jan 2000
- 輸出 2000 年 1 月的日曆。
- gcal -K
- 除了每日日曆外,還輸出星期數。
提示: 格里高利曆於 1752 年在英國帝國採用。1752 年 9 月 2 日之後是 1752 年 9 月 14 日。
$ cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
連結
- cal, opengroup.org
- cal 手冊頁, man.cat-v.org
- cal, freebsd.org
- cal 在 util-linux 中,man7.org
- GNU gcal 手冊,gnu.org
- cal (命令), wikipedia.org
- cal.c 在 util-linux 中,github.com
- gcal.git, git.savannah.gnu.org
- ncal.c 在 freebsd-src 中,github.com
date 顯示當前日期和時間。
示例
$ date Mon Jun 26 12:34:56 CDT 2006
連結
time 計時一個程式
示例
$ time real 0m1.818s user 0m0.770s sys 0m0.210s
連結
from 顯示最近向您傳送郵件的人的姓名
示例
$ from From andy@box.po Sat Feb 05 08:52:37 2005 From andy@box.po Sat Feb 05 08:53:52 2005
統計您的郵箱中的郵件數量
$ from -c There are 2 messages in your incoming mailbox.
連結
- from, freebsd.org
- 2.3 frm 和 from 在 GNU Mailutils 手冊中,gnu.org
mail 允許您閱讀和撰寫電子郵件。
示例
$ mail No mail for user. $ mail user2 Subject: What's up? Hi user2, you can delete this rubbish by pressing 'd'. Cc: user
提示:請注意,您需要按回車鍵,然後按 Ctrl+D 確認。
$ mail Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/user": 1 message 1 new >N 1 user@unix.com Tue Jun 27 12:34 16/674 "What's up?" &
提示:按回車鍵閱讀。
連結
清除終端螢幕。不接受引數。關鍵詞:cls。
連結
- clear 手冊頁, man.cat-v.org
輸出數字序列,甚至包括浮點數。似乎沒有被 POSIX 覆蓋。
示例
- seq 10
- 輸出整數 1 到 10,每行一個。
- seq 2 10
- 輸出整數 2 到 10。
- seq 3 2 10
- 輸出整數 3 到 10,步長為 2,因此為 3、5、7 和 9。
- seq -5 5
- 輸出整數 -5 到 5
- seq 0.5 0.1 1
- 輸出 0.5 到 1 之間的數字,步長為 0.1:0.5、0.6、0.7、0.8 和 0.9(為什麼不是 1?)。輸出的小數點與逗號似乎與區域設定有關。
- seq 1E3
- 使用指數符號輸出整數 1 到 1000。
連結
- seq 手冊頁, man.cat-v.org
- 26.3 seq:列印數字序列 在 GNU Coreutils 手冊中,gnu.org
- W:seq (Unix)
隨機打亂檔案或輸入行。沒有被 POSIX 覆蓋。
示例
- seq 10 | shuf
- 輸出從 1 到 10 的隨機打亂的數字,每行一個專案。
- shuf -e a b c
- 隨機打亂 a、b 和 c 專案,每行輸出一個專案。
- shuf -i 1-10
- 輸出從 1 到 10 的隨機打亂的數字,每行一個專案。
連結
- 7.2 shuf:打亂文字 在 GNU Coreutils 手冊中,gnu.org
- shuf, man7.org
- shuf, freebsd.org
- shuf, wikipedia.org
將輸入流寫入檔案,同時將其傳遞到標準輸出。
示例
- dir | tee dirout.txt | less
連結
- 茶, opengroup.org
- 茶手冊頁, man.cat-v.org
- 17.1 茶:將輸出重定向到多個檔案或程序 在 GNU Coreutils 手冊中,gnu.org
- W:茶 (Unix)
暫停一段時間。
示例
- 睡眠 5
- 暫停 5 秒。
- 睡眠 10800
- 暫停 3 小時:3 * 60 * 60 秒。
- 睡眠 1m
- 在 GNU sleep 中,暫停 1 分鐘。
- 睡眠 1h
- 在 GNU sleep 中,暫停 1 小時。
- 睡眠 1d
- 在 GNU sleep 中,暫停 1 天。
- 睡眠 0.5m
- 在 GNU sleep 中,暫停半分鐘。
- 睡眠 1m 30s
- 在 GNU sleep 中,暫停 1 分鐘 30 秒。
連結
輸出無限的以換行符分隔的字串“y”,或其他指定的字串。其中一個用途是將輸出饋送到需要使用者確認的命令。
示例
- 是
- 輸出重複的“y”字串流,以換行符分隔。
- 是 嘿
- 輸出重複的“hey”字串流,以換行符分隔。
連結
不執行任何操作,並以零退出程式碼(表示成功)結束。
連結
不執行任何操作,並以非零退出程式碼(通常為 1,表示失敗)結束。
連結
為命令設定環境或輸出所有環境變數。另請參見環境變數。
示例
- 環境
- 輸出所有環境變數。
- env printf Hello
- 確保呼叫 printf 命令而不是可能的 shell 內建命令。
連結
輸出一個或多個環境變數的值,如果沒有傳遞任何變數,則輸出所有變數。未被 POSIX 覆蓋。替代方案是 #env 用於輸出所有變數,以及 “echo $HOME” 用於輸出單個變數(此處為 HOME)。另請參閱 環境變數。
示例
- printenv HOME
- printenv HOME USER
- 列印環境
- 輸出所有變數。
連結
- printenv,man.cat-v.org
- printenv,freebsd.org
- 19.3 printenv 在 GNU Coreutils 手冊中,gnu.org
- 環境變數,wikipedia.org