【Bash百宝箱】shell内建命令之bind、enable、ulimit

分手后的思念是犯贱 2022-07-15 23:48 273阅读 0赞

1、bind

在shell中,内建(builtin)命令bind,格式如下:

  1. bind [-m keymap] [-lpsvPSVX]
  2. bind [-m keymap] [-q function] [-u function] [-r keyseq]
  3. bind [-m keymap] -f filename
  4. bind [-m keymap] -x keyseq:shell-command
  5. bind [-m keymap] keyseq:function-name
  6. bind readline-command

bind命令用于显示当前“readline”中键和function的绑定,绑定键序列与function或宏,设置“readline”变量。每个非选项参数都是一个命令,好像来自特殊文件“.inputrc”一样。所有的绑定和命令都必须作为一个单独的参数,例如’”\C-x\C-r”: re-read-init-file’。

下面解释bind命令中各选项的作用。

“-m keymap”:用参数keymap作为后续绑定的键映射,参数可以是emacs、emacs-standard、emacs-meta、emacs-ctlx、vi、vi-move、vi-command、vi-insert,其中vi和vi-command相同,emacs和emacs-standard相同。
“-l”:列出所有的“readline”的function名称。
“-p”:以可以作为重新输入的格式显示“readline”的function名称和绑定。
“-P”:列出当前“readline”的function名称和绑定。
“-s”:以可以作为重新输入的格式显示“readline”绑定到宏的键序列和输出的字符串。
“-S”:显示“readline”绑定到宏的键序列和输出的字符串。
“-v”:以可以作为重新输入的格式显示“readline”变量名和值。
“-V”:显示当前“readline”变量名和值。
“-f filename”:从文件filename中读取键绑定。
“-q function”:查询与function绑定的键。
“-u function”:解除所有与function绑定的键。
“-r keyseq”:删除当前所有的与键序列keyseq的绑定。
“-x keyseq:shell-command”:每次获取键序列keyseq时都执行shell命令shell-command。执行shell命令时,变量READLINE_LINE保存“readline”缓冲的内容,变量READLINE_POINT保存当前插入点的位置,如果这两个变量被修改,新的变量值会在编辑状态中出现。
“-X”:以可以作为重新输入的格式显示所有的绑定到shell命令的键序列。
例如,对于shell命令uname,把它绑定到按键“u”上。

  1. $ bind -x '"u": uname'

当在shell终端按下“u”键时就会直接执行uname命令。

2、enable

在shell中,内建(builtin)命令enable,格式如下:

  1. enable [-a] [-dnps] [-f filename] [name ...]

enable命令用于启用或禁用shell内建命令。在执行shell命令时,先查找是否属于内建命令,然后才在环境变量PATH中查找,如果使用enable禁用了这个命令,那么PATH中的同名命令就会执行。选项“-n”用于禁用命令,不使用时则启用命令。在支持动态加载的系统上,选项“-f”设置从动态库filename中加载新的内建命令,“-d”则用来删除加载的这些命令。如果不指定命令name或者只是使用了选项“-p”时,则输出当前启用的内建命令。选项“-a”显示所有的内建命令,包括启用的和禁止的命令。选项“-s”仅输出POSIX内建命令。

先来看一下特殊的POSIX内建命令:

  1. $ enable -s
  2. enable .
  3. enable :
  4. enable break
  5. enable continue
  6. enable eval
  7. enable exec
  8. enable exit
  9. enable export
  10. enable readonly
  11. enable return
  12. enable set
  13. enable shift
  14. enable source
  15. enable times
  16. enable trap
  17. enable unset

提示:POSIX特殊命令是什么?由于历史原因,POSIX标准把几个内建命令归类为特殊命令。当Bash在POSIX模式下运行时,这些特殊的内建命令与普通的内建命令有几点不同:特殊命令先于shell函数被搜索,特殊命令返回false时如果是非交互运行的shell就会退出,命令前面的赋值语句在命令结束后仍对shell环境有效。

禁用内建命令exit:

  1. $ enable -n exit
  2. $ exit
  3. No command 'exit' found, did you mean:
  4. Command 'edit' from package 'mime-support' (main)
  5. Command 'exif' from package 'exif' (universe)
  6. Command 'exim' from package 'exim4-daemon-heavy' (main)
  7. Command 'exim' from package 'exim4-daemon-light' (main)
  8. exit: command not found
  9. $ enable -n
  10. enable -n exit

3、ulimit

在shell中,内建(builtin)命令ulimit,格式如下:

  1. ulimit [-HSTabcdefilmnpqrstuvx [limit]]

如果系统支持,ulimit命令能够控制shell中的有效资源。选项“-H”、“-S”分别指硬限制、软限制,硬限制设置好之后不能由非root用户来增加其值,软限制则可能增加到硬限制的值,这两个选项都不指定时会同时设置它们的值。参数limit可以为数字,也可以是三个特殊的字符串,hard、soft和unlimited,不设置limit时显示当前软限制值,此时除非设置了“-H”才显示硬限制值。

下面是ulimit命令其它选项的含义。

“-a”:显示当前所有的限制。
“-b”:套接字socket缓冲的最大长度。
“-c”:可创建的core文件的最大个数。
“-d”:一个进程的数据段的最大长度。
“-e”:调度优先级即nice的最大值。
“-f”:shell及其子进程写文件时的最大长度。
“-i”:等待的信号的最大个数。
“-l”:锁在内存中最大长度。
“-m”:常驻内存的最大值(许多系统不支持这个限制)。
“-n”:打开的文件描述符的最大个数(许多系统禁止设置这个限制)。
“-p”:块block大小为512字节的管道长度。
“-q”:POSIX消息队列的最大字节数。
“-r”:实时调度的最大优先级。
“-s”:堆栈stack的最大长度。
“-t”:累计CPU时间(秒)的最大值。
“-u”:单个用户可以拥有的进程的最大个数。
“-v”:shell可用的虚拟内存的最大值。
“-x”:文件锁的最大个数。
“-T”:最大线程数。

ulimit命令中,如果设置了参数limit,且没有使用选项“-a”,指定的资源便会设置为这个新的limit值。如果不使用任何选项的话,默认使用“-f”。选项“-t”增值的单位为秒,“-p”增值的单位为块block即512字节,“-T”、“-b”、“-N”、“-u”则没有这种特殊的增长幅度,剩余其它选项的增值单位为1024各字节。

下面看一下系统默认的ulimit值:

  1. $ ulimit -a
  2. core file size (blocks, -c) 0
  3. data seg size (kbytes, -d) unlimited
  4. scheduling priority (-e) 0
  5. file size (blocks, -f) unlimited
  6. pending signals (-i) 62752
  7. max locked memory (kbytes, -l) 64
  8. max memory size (kbytes, -m) unlimited
  9. open files (-n) 1024
  10. pipe size (512 bytes, -p) 8
  11. POSIX message queues (bytes, -q) 819200
  12. real-time priority (-r) 0
  13. stack size (kbytes, -s) 8192
  14. cpu time (seconds, -t) unlimited
  15. max user processes (-u) 62752
  16. virtual memory (kbytes, -v) unlimited
  17. file locks (-x) unlimited

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读