跳转到内容

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 [email protected] Sat Feb 05 08:52:37 2005
  From [email protected] 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 [email protected] 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
  • 打印环境
    • 输出所有变量。

链接

华夏公益教科书