跳轉到內容

Unix/命令/雜項指南

來自華夏公益教科書

sync 將記憶體緩衝區寫入磁碟

示例: sync 沒有選項,不顯示任何訊息

$ sync 

提示

始終建議輸入幾次 sync,sync 的重要功能之一是更新超級塊資訊。

sync 呼叫 sync Unix 系統呼叫,如果成功則以退出程式碼“0”退出,如果失敗則以“1”退出。這些退出程式碼儲存在 $? 變數中。

$ sync
$ echo $?
 0 

上面的示例顯示 sync 成功。

連結

  • sync, freebsd.org
  • sync, manpages.ubuntu.com
  • 14.4 sync 在 GNU Coreutils 手冊中,gnu.org

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 的十六進位制,使用大寫字母。

連結

輸出日曆,預設情況下輸出當前月份的日曆。如果後面跟著年份,則輸出該年的日曆;如果後面跟著月份和年份,則輸出該期間的日曆。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

連結

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.

連結

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。

連結

輸出數字序列,甚至包括浮點數。似乎沒有被 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。

連結

隨機打亂檔案或輸入行。沒有被 POSIX 覆蓋。

示例

  • seq 10 | shuf
    • 輸出從 1 到 10 的隨機打亂的數字,每行一個專案。
  • shuf -e a b c
    • 隨機打亂 a、b 和 c 專案,每行輸出一個專案。
  • shuf -i 1-10
    • 輸出從 1 到 10 的隨機打亂的數字,每行一個專案。

連結

將輸入流寫入檔案,同時將其傳遞到標準輸出。

示例

  • dir | tee dirout.txt | less

連結

暫停一段時間。

示例

  • 睡眠 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”字串流,以換行符分隔。

連結

  • , freebsd.org
  • Linux 手冊頁,man7.org
  • 15.3 是 在 GNU Coreutils 手冊中,gnu.org
  • 是 (Unix), wikipedia.org

不執行任何操作,並以零退出程式碼(表示成功)結束。

連結

不執行任何操作,並以非零退出程式碼(通常為 1,表示失敗)結束。

連結

為命令設定環境或輸出所有環境變數。另請參見環境變數

示例

  • 環境
    • 輸出所有環境變數。
  • env printf Hello
    • 確保呼叫 printf 命令而不是可能的 shell 內建命令。

連結

列印環境

[編輯 | 編輯原始碼]

輸出一個或多個環境變數的值,如果沒有傳遞任何變數,則輸出所有變數。未被 POSIX 覆蓋。替代方案是 #env 用於輸出所有變數,以及 “echo $HOME” 用於輸出單個變數(此處為 HOME)。另請參閱 環境變數

示例

  • printenv HOME
  • printenv HOME USER
  • 列印環境
    • 輸出所有變數。

連結

華夏公益教科書