tty
显示连接到当前标准输入的终端设备文件名
概要
tty [option] ...
主要用途
- 显示连接到当前标准输入的终端设备文件名,当标准输入不是终端时打印 “not a tty”。
选项
-s, --silent, --quiet 不打印任何信息,只返回退出状态。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。
返回值
当使用 -s, --silent, --quiet 时,返回码为 0 表示标准输入是终端,返回码为 1 表示标准输入不是终端,返回码为 2 表示选项错误,返回码为 3 表示有写错误发生。
例子
显示连接到当前标准输入的终端设备文件名。
[root@localhost ~]# tty
/dev/pts/2
查找终端关联的进程(假设是 pts/2)
# 注意是筛选 TTY 列。
ps -ef | egrep "pts/2 " | grep -v grep
注意
- 该命令是
GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 tty,info coreutils 'tty invocation'。
type
显示指定命令的类型。
概要
type [-afptP] name [name ...]
主要用途
- 显示要查找的命令的信息。
- 控制查找范围和行为。
- 显示要查找的命令优先级最高的类型。
选项
-a:在环境变量PATH中查找并显示所有包含name的可执行文件路径;当'-p'选项没有同时给出时,如果在别名、关键字,函数,内建的信息中存在name,则一并显示。
-f:排除对shell函数的查找。
-p:如果name在执行'type -t name'返回的不是'file',那么什么也不返回;否则会在环境变量PATH中查找并返回可执行文件路径。
-P:即使要查找的name是别名、内建、函数中的一个,仍然会在环境变量PATH中查找并返回可执行文件路径。
-t:根据name的类型返回一个单词(别名,关键字,函数,内建,文件),否则返回空值。
参数
name:要查找的命令,可以为多个。
返回值
当指定的命令可以找到时返回成功,如果有没找到的返回失败。
例子
接下来要用到的例子假设'~/.bashrc'文件定义了以下的内容:
alias ls='ls --color=auto'
mybash(){ vim ~/.bashrc; }
而且执行环境里没有使用enable禁用内建命令。
type -a mybash
# 输出
mybash is a function
mybash ()
{
vim ~/.bashrc
}
type -a -f mybash
# 输出(因为排除了函数,所以报错)
bash: type: mybash: not found
type -a -p mybash
# 输出为空(因为排除了函数,所以什么也不返回)
type -a ls
# 输出
ls is aliased to `ls --color=suto'
ls is /usr/bin/ls
ls is /bin/ls
type -a -p ls
# 输出
/usr/bin/ls
/bin/ls
# '-f'不会影响'-P'的范围,'-f'不建议和'-p'使用。
# 注意:printf同时是内建命令以及可执行文件(GNU coreutils),优先作为内建处理。
type -p printf
# 输出为空
type -P printf
# 输出
/usr/bin/printf
/bin/printf
# 如果有多个类型,那么输出优先级最高的类型。
type -t ls
# 输出
alias
type -t for
# 输出(bash关键字)
keyword
type -t mybash
# 输出
function
type -t -f mybash
# 输出空值
type -t printf
# 输出(bash内建优先级高)
builtin
type -t chmod
# 输出
file
注意
-
该命令是bash内建命令,相关的帮助信息请查看
help命令。
ulimit
控制shell程序的资源
补充说明
ulimit命令 用来限制系统用户对shell资源的访问。如果不懂什么意思,下面一段内容可以帮助你理解:
假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大 小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联 系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。
ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。
语法
ulimit(选项)
选项
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-e 默认进程优先级, 值越小优先级越高
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
实例
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
data seg size (kbytes, -d) unlimited #进程的数据段可以任意大。
scheduling priority (-e) 0
file size (blocks, -f) unlimited #文件可以任意大。
pending signals (-i) 98304 #最多有98304个待处理的信号。
max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB。
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值。
open files (-n) 1024 #一个任务最多可以同时打开1024的文件。
pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节。
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节。
real-time priority (-r) 0
stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节。
cpu time (seconds, -t) unlimited #进程使用的CPU时间。
max user processes (-u) 98304 #当前用户同时打开的进程(包括线程)的最大个数为98304。
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制。
umask
显示或设置创建文件的权限掩码。
概要
umask [-p] [-S] [mode]
主要用途
- 显示当前的文件权限掩码。
- 通过八进制数的方式设置创建文件的权限掩码。
- 通过符号组合的方式设置创建文件的权限掩码。
参数
mode(可选):八进制数或符号组合。
选项
-p:当没有参数时指定该选项,执行产生的输出格式可复用为输入;
-S:以符号组合的方式输出创建文件的权限掩码,不使用该选项时以八进制数的形式输出。
返回值
返回状态为成功除非给出了非法选项或非法参数。
例子
以下的例子均假设文件权限掩码为0022。
# 以八进制数的形式输出创建文件的权限掩码。
umask -p
# 执行结果:
umask 0022
# 以符号组合的方式输出创建文件的权限掩码。
umask -S
# 执行结果:
u=rwx,g=rx,o=rx
参考
man chmod文档的DESCRIPTION段落得知:
u符号代表当前用户。g符号代表和当前用户在同一个组的用户,以下简称组用户。o符号代表其他用户。a符号代表所有用户。r符号代表读权限以及八进制数4。w符号代表写权限以及八进制数2。x符号代表执行权限以及八进制数1。+符号代表添加目标用户相应的权限。-符号代表删除目标用户相应的权限。=符号代表添加目标用户相应的权限,删除未提到的权限。
那么刚才以符号形式输出的结果u=rwx,g=rx,o=rx转化为八进制数等于0755;
用八进制数来设置同样的权限,umask需要额外的执行减法0777 - 0755即0022,而chmod不需要。
符号组合模式的添加、删除、赋值权限。
# 添加权限:
# 为组用户添加写权限。
umask g+w
# 删除权限:
# 删除其他用户的写、执行权限
umask o-wx
# 赋值权限:
# 赋值全部用户所有权限,等价于umask u=rwx,g=rwx,o=rwx
umask a=rwx
# 清除其他用户的读、写、执行权限。
umask o=
创建文件夹、文件(假设当前目录不存在)
umount
用于卸载已经加载的文件系统
补充说明
umount命令 用于卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。
语法
umount(选项)(参数)
选项
-a:卸除/etc/mtab中记录的所有文件系统;
-h:显示帮助;
-n:卸除时不要将信息存入/etc/mtab文件中;
-r:若无法成功卸除,则尝试以只读的方式重新挂入文件系统;
-t<文件系统类型>:仅卸除选项中所指定的文件系统;
-v:执行时显示详细的信息;
-V:显示版本信息。
参数
文件系统:指定要卸载的文件系统或者其对应的设备文件名。
实例
下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:
通过设备名卸载
umount -v /dev/sda1
/dev/sda1 umounted
通过挂载点卸载
umount -v /mnt/mymount/
/tmp/diskboot.img umounted
如果设备正忙,卸载即告失败。卸载失败的常见原因是,某个打开的shell当前目录为挂载点里的某个目录:
umount -v /mnt/mymount/
umount: /mnt/mymount: device is busy
umount: /mnt/mymount: device is busy
有时,导致设备忙的原因并不好找。碰到这种情况时,可以用lsof列出已打开文件,然后搜索列表查找待卸载的挂载点:
lsof | grep mymount 查找mymount分区里打开的文件
bash 9341 francois cwd DIR 8,1 1024 2 /mnt/mymount
从上面的输出可知,mymount分区无法卸载的原因在于,francois运行的PID为9341的bash进程。
对付系统文件正忙的另一种方法是执行延迟卸载:
umount -vl /mnt/mymount/ 执行延迟卸载
延迟卸载(lazy unmount)会立即卸载目录树里的文件系统,等到设备不再繁忙时才清理所有相关资源。卸载可移动存储介质还可以用eject命令。下面这条命令会卸载cd并弹出CD:
eject /dev/cdrom 卸载并弹出CD
unalias
删除由alias设置的别名
概要
unalias [-a] name [name ...]
主要用途
- 删除一个或多个别名。
- 删除全部已定义的别名。
选项
-a:删除全部已定义的别名。
参数
name:指定要删除的一个或多个已定义的别名。
返回值
unalias返回true除非您要删除的别名未定义。
例子
# 删除全部已定义的别名
unalias -a
# 删除已定义的别名(假设当前环境存在以下别名)
unalias vi
unalias ls grep
错误用法
-
要删除的别名未定义。
-
不使用-a选项时没有传递name参数。
注意
- 执行脚本时请注意:
使用
source命令执行的bash脚本如果执行了alias或unalias命令,那么有可能会对终端环境的别名设置产生影响;终端环境的别名设置也可能改变运行结果;通过
sh方式调用的bash脚本或直接运行当前用户有执行权限的脚本不受终端环境的别名影响。
-
查看及设置别名,请查看
alias命令。 -
该命令是bash内建命令,相关的帮助信息请查看
help命令。
uname
打印系统信息。
概要
uname [OPTION]...
主要用途
- 打印机器和操作系统的信息。
- 当没有选项时,默认启用
-s选项。 - 如果给出多个选项或
-a选项时,输出信息按以下字段排序:内核名称 主机名称 内核release 内核版本 机器名称 处理器 硬件平台 操作系统。
选项
-a, --all 按顺序打印全部信息,如果 -p 和 -i 的信息是未知,那么省略。
-s, --kernel-name 打印内核名称。
-n, --nodename 打印网络节点主机名称。
-r, --kernel-release 打印内核release。
-v, --kernel-version 打印内核版本。
-m, --machine 打印机器名称。
-p, --processor 打印处理器名称。
-i, --hardware-platform 打印硬件平台名称。
-o, --operating-system 打印操作系统名称。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。
返回值
返回0表示成功,返回非0值表示失败。
例子
# 单独使用uname命令时相当于uname -s
[root@localhost ~]# uname
Linux
# 查看全部信息
[root@localhost ~]# uname -a
Linux localhost 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:34:22 EDT 2013 i686 i686 i386 GNU/Linux
# 分别列出信息
[root@localhost ~]# uname -m
i686
[root@localhost ~]# uname -n
localhost
[root@localhost ~]# uname -r
2.6.18-4-686
[root@localhost ~]# uname -s
Linux
[root@localhost ~]# uname -v
#1 SMP Tue May 21 15:34:22 EDT 2013
[root@localhost ~]# uname -p
i686
[root@localhost ~]# uname -i
i386
[root@localhost ~]# uname -o
GNU/Linux
注意
- 该命令是
GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 uname,info coreutils 'uname invocation'。
unarj
解压缩由arj命令创建的压缩包
补充说明
unarj命令 用来解压缩由arj命令创建的压缩包。
语法
unarj(选项)(参数)
选项
e:解压缩.arj文件;
l:显示压缩文件内所包含的文件;
t:检查压缩文件是否正确;
x:解压缩时保留原有的路径。
参数
.arj压缩包:指定要解压缩的.arj压缩包。
uncompress
用来解压.Z文件
补充说明
uncompress命令 用来解压缩由compress命令压缩后产生的“.Z”压缩包。
语法
uncompress(选项)(参数)
选项
-f:不提示用户,强制覆盖掉目标文件;
-c:将结果送到标准输出,无文件被改变;
-r:递归的操作方式。
参数
文件:指定要压缩的“.Z”压缩包。
实例
先创建一个.Z压缩文件
compress FileName
解压:
uncompress FileName.Z
unexpand
将文件的空白字符转换为制表符
补充说明
unexpand命令 用于将给定文件中的空白字符(space)转换为制表符(TAB),并把转换结果显示在标准输出设备(显示终端)。
语法
unexpand(选项)(参数)
选项
-a或--all:转换文件中所有的空白字符;
--first-only:仅转换开头的空白字符;
-t<N>:指定TAB所代表的N个(N为整数)字符数,默认N值是8。
参数
文件:指定要转换空白为TAB的文件列表。