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 [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.
链接
- 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 [email protected] 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