tee
从标准输入读取数据并重定向到标准输出和文件。
概要
tee [OPTION]... [FILE]...
主要用途
- 需要同时查看数据内容并输出到文件时使用。
参数
FILE(可选):要输出的文件,可以为一或多个。
选项
长选项与短选项等价
-a, --append 追加到文件中而不是覆盖。
-i, --ignore-interrupts 忽略中断信号(Ctrl+c中断操作无效)。
-p 诊断写入非管道的错误。
--output-error[=MODE] 设置写错误时的行为,请查看下方的MODE部分。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。
MODE决定了当出现写错误时的输出行为,可用的MODE如下:
'warn' 当写入到任何输出报错时诊断。
'warn-nopipe' 当写入到任何输出(而不是管道)报错时诊断。
'exit' 当写入到任何输出报错时退出。
'exit-nopipe' 当写入到任何输出(而不是管道)报错时退出。
-p选项的指定的默认MODE为'warn-nopipe'。
当'--output-error'没有在选项中时,默认的操作是当写入到管道报错时立刻退出,诊断错误信息并写入到非管道输出。
返回值
返回状态为成功除非给出了非法选项或非法参数。
例子
# 将进程信息通过管道输出到标准输出(终端)并覆盖写入到文件中。
ps -ef |tee info_a.log info_b.log
# 将进程信息通过管道输出到标准输出(终端)并追加写入到文件中。
ps -ef |tee -a info_a.log info_b.log
注意
- 该命令是
GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 tee或info coreutils 'tee invocation'。 - 存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。
telinit
切换当前正在运行系统的运行等级
补充说明
telinit命令 用于切换当前正在运行的Linux系统的运行等级。
RUNLEVEL 参数应该是多用户运行级别 2-5 之一,0 用于停止系统,6 用于重新启动系统,或 1 用于使系统进入单用户模式。
通常您会使用 shutdown(8) 工具来停止或重新启动系统,或者将其降低到单用户模式。
RUNLEVEL 也可能是 S 或 s ,这会将系统直接置于单用户模式,而无需先实际停止进程,您可能不希望这样。
通过发出 runlevel(7) 事件来更改运行级别,该事件包括 RUNLEVEL 环境变量中的新运行级别以及 PREVLEVEL 变量中的先前运行级别(从环境或 /var/run/utmp 获得)。
telinit 会将新的运行级别写入 /var/run/utmp 并将新条目附加到 /var/log/wtmp。
语法
telint(选项)(参数)
telinit [OPTION]... RUNLEVEL
选项
-t:指定等待的秒数。
-e 键=值
这指定了与 RUNLEVEL 和 PREVLEVEL 一起包含在事件中的附加环境变量。
参数
运行等级:指定要切换的运行等级。
Environment
RUNLEVEL
如果设置优先于从 /var/run/utmp 读取,telinit 将从该环境变量读取当前运行级别
Files
/var/run/utmp将从哪里读取当前运行级别; 此文件也将使用新的运行级别进行更新。/var/log/wtmp新的运行级别记录将附加到此文件中以获取新的运行级别。
telnet
登录远程主机和管理(测试ip端口是否连通)
补充说明
telnet命令 用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
语法
telnet(选项)(参数)
选项
-8:允许使用8位字符资料,包括输入与输出;
-a:尝试自动登入远端系统;
-b<主机别名>:使用别名指定远端主机名称;
-c:不读取用户专属目录里的.telnetrc文件;
-d:启动排错模式;
-e<脱离字符>:设置脱离字符;
-E:滤除脱离字符;
-f:此参数的效果和指定"-F"参数相同;
-F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机;
-k<域名>:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名;
-K:不自动登入远端主机;
-l<用户名称>:指定要登入远端主机的用户名称;
-L:允许输出8位字符资料;
-n<记录文件>:指定文件记录相关信息;
-r:使用类似rlogin指令的用户界面;
-S<服务类型>:设置telnet连线所需的ip TOS信息;
-x:假设主机有支持数据加密的功能,就使用它;
-X<认证形态>:关闭指定的认证形态。
参数
- 远程主机:指定要登录进行管理的远程主机;
- 端口:指定TELNET协议使用的端口号。
实例
$ telnet 192.168.2.10
Trying 192.168.2.10...
Connected to 192.168.2.10 (192.168.2.10).
Escape character is '^]'.
localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)
login: root
Password:
Login incorrect
一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su -切到root用户。
$ telnet 192.168.188.132
Trying 192.168.188.132...
telnet: connect to address 192.168.188.132: Connection refused
telnet: Unable to connect to remote host
处理这种情况方法:
tempfile
shell中给临时文件命名
补充说明
有时候在写Shell脚本的时候需要一些临时存储数据的才做,最适合存储临时文件数据的位置就是/tmp,因为该目录中所有的内容在系统重启后就会被清空。下面是两种方法为临时数据生成标准的文件名。
tempfile命令
tempfile命令只有在基于Debian的发行版中才默认自带,比如Ubuntu,其他发行版没有这个命令。
用tempfile命令为一个临时文件命名:
temp_file_name=$(tempfile)
用一个加带了随机数的文件名作为临时文件命名:
temp_file_name="/tmp/file_$RANDOM"
$RANDOM是一个返回随机数的环境变量。
$$变量
如果没有tempfile命令的Linux发行版,也可以使用自己的临时文件名:
temp_file_name="/tmp/file.$"
$$是系统预定义变量,显示当前所在进程的进程号,用.$$作为添加的后缀会被扩展成当前运行脚本的进程id。
test
执行条件表达式。
概要
test [expr]
主要用途
- 执行条件表达式。
参数
文件操作符:
-a FILE 如果文件存在,则为true。
-b FILE 如果文件是块特殊的,则为true。
-c FILE 如果文件是特殊字符,则为true。
-d FILE 如果文件是目录,则为true。
-e FILE 如果文件存在,则为true。
-f FILE 如果文件存在并且是常规文件,则为true。
-g FILE 如果文件是set-group-id,则为true。
-h FILE 如果文件是符号链接,则为true。
-L FILE 如果文件是符号链接,则为true。
-k FILE 如果文件的粘滞位(sticky)设置了,则为true。
-p FILE 如果文件是命名管道,则为true。
-r FILE 如果您可以读取文件,则为true。
-s FILE 如果文件存在且不为空,则为true。
-S FILE 如果文件是套接字,则为true。
-t FD 如果在终端上打开FD,则为True。
-u FILE 如果文件是set-user-id,则为true。
-w FILE 如果文件可写,则为true。
-x FILE 如果您可以执行文件,则为true。
-O FILE 如果文件有效地归您所有,则为true。
-G FILE 如果文件有效地归您的组所有,则为true。
-N FILE 如果文件自上次读取以来已被修改,则为true。
FILE1 -nt FILE2 根据修改日期,如果 file1 比 file2 新,则为true。
FILE1 -ot FILE2 根据修改日期,如果 file1 比 file2 旧,则为true。
FILE1 -ef FILE2 如果 file1 为 file2 的硬链接,则为true。
字符串运算符:
-z STRING 如果字符串为空,则为true。
-n STRING 如果字符串不为空,则为true。
STRING 如果字符串不为空,则为true。
STRING1 = STRING2 如果字符串相等,则为true。
STRING1 != STRING2 如果字符串不相等,则为true。
STRING1 < STRING2 如果 STRING1 的字典排序在 STRING2 之前,则为true。
STRING1 > STRING2 如果 STRING1 在字典排序在 STRING2 之后,则为true。
其他运算符:
-o OPTION 如果启用了shell选项OPTION,则为true。
-v VAR 如果设置了shell变量VAR,则为true。
-R VAR 如果设置了shell变量VAR并且是变量引用,则为true。
!EXPR 如果expr为假,则为true。
EXPR1 -a EXPR2 如果expr1和expr2都为true,则为true。
EXPR1 -o EXPR2 如果expr1或expr2为true,则为true。
arg1 OP arg2 算术表达式测试; OP是 -eq,-ne,-lt,-le,-gt,-ge 中的一个;算术表达式为真时返回true。
返回值
如果表达式执行结果为成功时返回0,当表达式执行结果为失败或给出非法参数时返回1。
tftp
在本机和tftp服务器之间使用TFTP协议传输文件
补充说明
tftp命令 用在本机和tftp服务器之间使用TFTP协议传输文件。
TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。下面就详细介绍一下linux服务器端tftp-server的配置。
语法
tftp(选项)(参数)
选项
-c:指定与tftp服务器连接成功后,立即要执行的指令;
-m:指定文件传输模式。可以是ASCII或者Binary;
-v:显示指令详细执行过程;
-V:显示指令版本信息。
参数
主机:指定tftp要联机的tftp服务器的ip地址或主机名。
实例
1、安装tftp服务器
需要安装xinetd、tftp和tftp-server 3个软件
如果能上网,通过yum安装:
yum install xinetd
yum install tftp
yum install tftp-server
如果不能上网,可以直接安装提供的rpm包:
rpm -ivh xinetd-2.3.14-18.fc9.i386.rpm
rpm -ivh tftp-0.48-3.fc9.i386.rpm
rpm -ivh tftp-server-0.48-3.fc9.i386.rpm
2、配置tftp服务器
修改/etc/xinetd.d/tftp文件,将其中的disable=yes改为disable=no。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:
service tftp
{
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /home/mike/tftpboot -c
disable =no
per_source =11
cps =100 2
flags =IPv4
}
说明:修改项server_args= -s <path> -c,其中处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。
time
统计给定命令所花费的总时间
补充说明
time命令 用于统计给定命令所花费的总时间。
语法
time(参数)
参数
指令:指定需要运行的额指令及其参数。
实例
当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的。所有类UNIX系统都包含time命令,使用这个命令可以统计时间消耗。例如:
[root@localhost ~]# time ls
anaconda-ks.cfg install.log install.log.syslog satools text
real 0m0.009s
user 0m0.002s
sys 0m0.007s
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。
- real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
- user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
- sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
shell内建也有一个time命令,当运行time时候是调用的系统内建命令,因为系统内建的功能有限,所以需要时间其他功能需要使用time命令可执行二进制文件/usr/bin/time。
使用-o选项将执行时间写入到文件中:
/usr/bin/time -o outfile.txt ls
使用-a选项追加信息:
/usr/bin/time -a -o outfile.txt ls
使用-f选项格式化时间输出:
/usr/bin/time -f "time: %U" ls
-f选项后的参数:
| 参数 | 描述 |
|---|---|
%E |
real时间,显示格式为[小时:]分钟:秒 |
%U |
user时间。 |
%S |
sys时间。 |
%C |
进行计时的命令名称和命令行参数。 |
%D |
进程非共享数据区域,以KB为单位。 |
%x |
命令退出状态。 |
%k |
进程接收到的信号数量。 |
%w |
进程被交换出主存的次数。 |
%Z |
系统的页面大小,这是一个系统常量,不用系统中常量值也不同。 |
%P |
进程所获取的CPU时间百分百,这个值等于 user+system 时间除以总共的运行时间。 |
%K |
进程的平均总内存使用量(data+stack+text),单位是 KB。 |
%w |
进程主动进行上下文切换的次数,例如等待I/O操作完成。 |
%c |
进程被迫进行上下文切换的次数(由于时间片到期)。 |
timedatectl
用于在 Linux 中设置或查询系统时间、日期和时区等配置。
补充说明
在 Linux 运维中,通常使用此命令来设置或更改当前的日期、时间和时区,或启用自动系统时钟与远程 NTP 服务器同步,以确保 Linux 系统始终保持正确的时间。
概要
timedatectl [OPTIONS...] COMMAND ...
主要用途
- 转换时间到选定的格式,默认为当前。
- 设置系统时间。
参数
Query or change system time and date settings.
-h --help 显示帮助信息。
--version 显示软件包版本。
--no-pager 不用将输出通过管道传输到寻呼机(pager)。
--no-ask-password 不提示输入密码。
-H --host=[USER@]HOST 在远程主机上操作
-M --machine=CONTAINER 在本地容器上操作。
--adjust-system-clock 更改本地 RTC 模式时调整系统时钟。
--monitor 监控systemd-timesyncd的状态
-p --property=NAME 仅显示此名称的属性
-a --all 显示所有属性,包括空属性
--value 显示属性时,只打印值
Commands:
status 显示当前的时间设置。
set-time TIME 设置系统时间。
set-timezone ZONE 设置系统时区。
list-timezones 显示已知时区。
set-local-rtc BOOL 控制 RTC 是否在当地时间。(BOOL 的值可以是 1 / true 或 0 / false)
set-ntp BOOL 启用或禁用网络时间同步。(BOOL 的值可以是 1 / true 或 0 / false)
timesync-status 显示 systemd-timesyncd 的状态。
show-timesync 显示 systemd-timesyncd 的属性。
例子
显示系统当前时间和日期
times
显示进程累计时间。
主要用途
- 打印出shell及其子进程累计使用的用户时间和系统时间。
返回值
总是返回成功。
例子
# 执行命令
times
# 返回结果
0m0.037s 0m0.009s
0m0.010s 0m0.024s
# 根据times(2)的man手册,对应关系如下:
# 用户时间 | 系统时间
# 子进程的用户时间 | 子进程的系统时间
注意
- 该命令是bash内建命令,相关的帮助信息请查看
help命令。
tload
显示系统负载状况
补充说明
tload命令 以图形化的方式输出当前系统的平均负载到指定的终端。假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形。
语法
tload(选项)(参数)
选项
-s:指定闲时的刻度;
-d:指定间隔的时间(秒)。
参数
终端:指定显示信息的终端设备文件。
实例
使用tload命令查看系统负载情况:
tload -d 1
0.08, 0.02,0.01
0.04, 0.01, 0.00
0.04, 0.01, 0.00
0.04, 0.01,0.00
0.06, 0.02, 0.00