diff --git a/command/ab.md b/command/ab.md index 816844c2a6..66e3b352d2 100644 --- a/command/ab.md +++ b/command/ab.md @@ -1,6 +1,6 @@ ab === - + Apache服务器的性能测试工具 ## 补充说明 @@ -15,7 +15,7 @@ ab(选项)(参数) ### 选项 -``` +```shell -A:指定连接服务器的基本的认证凭据; -c:指定一次向服务器发出请求数; -C:添加cookie; diff --git a/command/ack.md b/command/ack.md index 0d86a7f532..0801b946e9 100644 --- a/command/ack.md +++ b/command/ack.md @@ -5,7 +5,7 @@ ack ## 安装 -```bash +```shell # ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。 sudo apt-get install ack-grep # alpine Linux-apk软件包管理器 安装 ack @@ -16,7 +16,7 @@ apk install ack 这些参数在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话 -``` +```shell -c(统记)/ -i(忽略大小)/ -h(不显示名称)/ -l(只显文件名)/ -n(加行号)/ -v(显示不匹配) ``` @@ -43,7 +43,7 @@ ack官网列出了这工具的5大卖点: grep常用操作 -```bash +```shell grep -r 'hello_world' # 简单用法 grep '^hello_world' . # 简单正则 ls -l | grep .py # 管道用法 @@ -65,7 +65,7 @@ ack-grep -Q 'hello*' 对搜索结果进行处理,比如只显示一个文件的一个匹配项,或者xxx -```bash +```shell ack-grep --line=1 # 输出所有文件第二行 ack-grep -l 'hello' # 包含的文件名 ack-grep -L 'print' # 非包含文件名 @@ -75,7 +75,7 @@ ack-grep -L 'print' # 非包含文件名 输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下 -```bash +```shell ack-grep hello --pager='less -R' # 以less形式展示 ack-grep hello --noheading # 不在头上显示文件 ack-grep hello --nocolor # 不对匹配字符着色 @@ -84,7 +84,7 @@ ack-grep hello --nocolor # 不对匹配字符着色 ### File finding 没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。 -```bash +```shell ack-grep -f hello.py # 查找全匹配文件 ack-grep -g hello.py$ # 查找正则匹配文件 ack-grep -g hello --sort-files # 查找然后排序 @@ -94,7 +94,7 @@ ack-grep -g hello --sort-files # 查找然后排序 文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。 -```bash +```shell ack-grep --python hello # 查找所有python文件 ack-grep -G hello.py$ hello # 查找匹配正则的文件 ``` diff --git a/command/alias.md b/command/alias.md index 97860478f4..b0ae470440 100644 --- a/command/alias.md +++ b/command/alias.md @@ -27,7 +27,7 @@ alias(选项)(参数) ### 实例 - **alias 的基本使用方法为:** +**alias 的基本使用方法为:** ``` alias 新的命令='原命令 -选项/参数' @@ -37,9 +37,9 @@ alias 新的命令='原命令 -选项/参数' 要删除一个别名,可以使用 unalias 命令,如 unalias l。 - **查看系统已经设置的别名:** +**查看系统已经设置的别名:** -```bash +```shell [root@localhost ~]# [root@localhost ~]# alias alias cp='cp -i' @@ -56,16 +56,21 @@ alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-ti ``` ### 命令别名永久生效 + 直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。 -```bash + +```shell $ vim ~/.bashrc ``` 在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入: -```bash + +```shell $ source ~/.bashrc ``` + 这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码: -```bash + +```shell if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi @@ -78,35 +83,35 @@ fi alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。 - - #### 一、 范例演示 在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。 #### 二、 自定义命令简介 - CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。 + +CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。 #### 三、 演示举例 + 假定系统操作员希望进行如下操作: + 1.进入目录/root 2.查看目录下文件 3.切换回根目录 + 通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。 -![](alias\01.png) #### 四、 操作过程 - 首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。 -![](alias\02.png) - 使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。 -![](alias\03.png) - 测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。 -![](alias\04.png) +首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。 + +使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。 + +测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。 + +如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。 - 如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。 -![](alias\05.png) diff --git a/command/apachectl.md b/command/apachectl.md index 9656af2d57..64f2ffe8ef 100644 --- a/command/apachectl.md +++ b/command/apachectl.md @@ -1,6 +1,6 @@ apachectl === - + Apache服务器前端控制工具 ## 补充说明 @@ -15,14 +15,14 @@ apachectl(参数) ### 参数 -* configtest:检查设置文件中的语法是否正确; -* fullstatus:显示服务器完整的状态信息; -* graceful:重新启动Apache服务器,但不会中断原有的连接; -* help:显示帮助信息; -* restart:重新启动Apache服务器; -* start:启动Apache服务器; -* status:显示服务器摘要的状态信息; -* stop:停止Apache服务器。 +* configtest:检查设置文件中的语法是否正确; +* fullstatus:显示服务器完整的状态信息; +* graceful:重新启动Apache服务器,但不会中断原有的连接; +* help:显示帮助信息; +* restart:重新启动Apache服务器; +* start:启动Apache服务器; +* status:显示服务器摘要的状态信息; +* stop:停止Apache服务器。 \ No newline at end of file diff --git a/command/apk.md b/command/apk.md index 2067e3977f..153480507f 100644 --- a/command/apk.md +++ b/command/apk.md @@ -5,7 +5,7 @@ Alpine Linux 下的包管理工具 ## 使用实例 -```bash +```shell apk install xxx apk search xxx # 支持正则 apk info xxx # 查看包的详细信息 @@ -18,7 +18,7 @@ apk del openssh openntp vim upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。 -```bash +```shell apk update # 更新最新本地镜像源 apk upgrade # 升级软件 apk add --upgrade busybox # 指定升级部分软件包 @@ -26,7 +26,7 @@ apk add --upgrade busybox # 指定升级部分软件包 ### 搜索 -```bash +```shell apk search # 查找所以可用软件包 apk search -v # 查找所以可用软件包及其描述内容 apk search -v 'acf*' # 通过软件包名称查找软件包 @@ -37,7 +37,7 @@ apk search -v -d 'docker' # 通过描述文件查找特定的软件包 info命令用于显示软件包的信息。 -```bash +```shell apk info # 列出所有已安装的软件包 apk info -a zlib # 显示完整的软件包信息 apk info --who-owns /sbin/lbu # 显示指定文件属于的包 @@ -47,7 +47,7 @@ apk info --who-owns /sbin/lbu # 显示指定文件属于的包 还是蛮喜欢 alpine 的,简单纯粹 -```bash +```shell apk add iproute2 # ss vs netstat ss -ptl apk add drill # drill vs nslookup&dig diff --git a/command/apropos.md b/command/apropos.md index b4bcd87da8..a48625063c 100644 --- a/command/apropos.md +++ b/command/apropos.md @@ -1,6 +1,6 @@ apropos === - + 在 whatis 数据库中查找字符串 ## 补充说明 @@ -11,13 +11,13 @@ apropos ### 语法 -``` +```shell apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ... ``` ### 选项 -``` +```shell -d, --debug:输出调试信息。 -v, --verbose:输出详细的警告信息。 -r, -- regex:将每个keyword作为正则表达式解释。这是默认行为。每个keyword将匹配手册页和描述。 @@ -40,7 +40,7 @@ apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale ### 实例 -``` +```shell [root@localhost ~]# man -k who at.allow [at] (5) - determine who can submit jobs via at or batch at.deny [at] (5) - determine who can submit jobs via at or batch @@ -66,7 +66,7 @@ whoami (1) - print effective userid 查找手册页名字和描述中包含emacs和vi的手册页: -``` +```shell apropos -a emacs vi ``` diff --git a/command/apt-get.md b/command/apt-get.md index 95a4e3a601..8af46a2e7a 100644 --- a/command/apt-get.md +++ b/command/apt-get.md @@ -1,6 +1,6 @@ apt-get === - + Debian Linux发行版中的APT软件包管理工具 ## 补充说明 @@ -9,26 +9,26 @@ Debian Linux发行版中的APT软件包管理工具 ### 语法 -``` +```shell apt-get(选项)(参数) ``` ### 选项 -``` +```shell -c:指定配置文件。 ``` ### 参数 -* 管理指令:对APT软件包的管理操作; -* 软件包:指定要操纵的软件包。 +* 管理指令:对APT软件包的管理操作; +* 软件包:指定要操纵的软件包。 ### 实例 使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下: -``` +```shell deb web或[ftp地址] [发行版名字] main/contrib/non-[free] ``` @@ -36,55 +36,55 @@ deb web或[ftp地址] [发行版名字] main/contrib/non-[free] 在修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的: -``` +```shell apt-get update ``` 安装一个新软件包: -``` +```shell apt-get install packagename ``` 卸载一个已安装的软件包(保留配置文件): -``` +```shell apt-get remove packagename ``` 卸载一个已安装的软件包(删除配置文件): -``` +```shell apt-get –purge remove packagename ``` 会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件: -``` +```shell apt-get autoclean apt ``` 这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的: -``` +```shell apt-get clean ``` 更新所有已安装的软件包: -``` +```shell apt-get upgrade ``` 将系统升级到新版本: -``` +```shell apt-get dist-upgrade ``` 定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可以使用`apt-get clean`以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试: -``` +```shell apt-get autoclean ``` diff --git a/command/apt-key.md b/command/apt-key.md index 64766cbe0f..a5323317de 100644 --- a/command/apt-key.md +++ b/command/apt-key.md @@ -1,6 +1,6 @@ apt-key === - + 管理Debian Linux系统中的软件包密钥 ## 补充说明 @@ -9,7 +9,7 @@ apt-key ### 语法 -``` +```shell apt-key(参数) ``` @@ -19,11 +19,11 @@ apt-key(参数) ### 实例 -``` -apt-key list #列出已保存在系统中key。 -apt-key add keyname #把下载的key添加到本地trusted数据库中。 -apt-key del keyname #从本地trusted数据库删除key。 -apt-key update #更新本地trusted数据库,删除过期没用的key。 +```shell +apt-key list # 列出已保存在系统中key。 +apt-key add keyname # 把下载的key添加到本地trusted数据库中。 +apt-key del keyname # 从本地trusted数据库删除key。 +apt-key update # 更新本地trusted数据库,删除过期没用的key。 ``` diff --git a/command/apt-sortpkgs.md b/command/apt-sortpkgs.md index f9d2416b38..2464a82e4b 100644 --- a/command/apt-sortpkgs.md +++ b/command/apt-sortpkgs.md @@ -1,6 +1,6 @@ apt-sortpkgs === - + Debian Linux下对软件包索引文件进行排序的工具 ## 补充说明 @@ -9,13 +9,13 @@ Debian Linux下对软件包索引文件进行排序的工具 ### 语法 -``` +```shell apt-sortpkgs(选项)(参数) ``` ### 选项 -``` +```shell -s:使用源索引字段排序; -h:显示帮助信息。 ``` diff --git a/command/aptitude.md b/command/aptitude.md index 378997d327..6e577310d5 100644 --- a/command/aptitude.md +++ b/command/aptitude.md @@ -1,6 +1,6 @@ aptitude === - + Debian Linux系统中软件包管理工具 ## 补充说明 @@ -9,13 +9,13 @@ Debian Linux系统中软件包管理工具 ### 语法 -``` +```shell aptitude(选项)(参数) ``` ### 选项 -``` +```shell -h:显示帮助信息; -d:仅下载软件包,不执行安装操作; -P:每一步操作都要求确认; @@ -32,17 +32,17 @@ aptitude(选项)(参数) 以下是我总结的一些常用aptitude命令,仅供参考: -``` -aptitude update #更新可用的包列表 -aptitude upgrade #升级可用的包 -aptitude dist-upgrade #将系统升级到新的发行版 -aptitude install pkgname #安装包 -aptitude remove pkgname #删除包 -aptitude purge pkgname #删除包及其配置文件 -aptitude search string #搜索包 -aptitude show pkgname #显示包的详细信息 -aptitude clean #删除下载的包文件 -aptitude autoclean #仅删除过期的包文件 +```shell +aptitude update # 更新可用的包列表 +aptitude upgrade # 升级可用的包 +aptitude dist-upgrade # 将系统升级到新的发行版 +aptitude install pkgname # 安装包 +aptitude remove pkgname # 删除包 +aptitude purge pkgname # 删除包及其配置文件 +aptitude search string # 搜索包 +aptitude show pkgname # 显示包的详细信息 +aptitude clean # 删除下载的包文件 +aptitude autoclean # 仅删除过期的包文件 ``` 当然,你也可以在文本界面模式中使用 aptitude。 diff --git a/command/ar.md b/command/ar.md index ceaa987492..d309168256 100644 --- a/command/ar.md +++ b/command/ar.md @@ -18,7 +18,7 @@ Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin ] ### 选项 -``` +```shell d - 从归档文件中删除文件 m[ab] - 在归档文件中移动文件 p - 打印在归档文件中找到的文件 @@ -50,7 +50,7 @@ x[o] - 从归档文件中分解文件 选项参数 -``` +```shell --plugin

- load the specified plugin ``` @@ -60,12 +60,12 @@ ar:支持的目标: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pe 打包文件 -``` -[root@localhost ~]# ls //显示当前目录文件 +```shell +[root@localhost ~]# ls # 显示当前目录文件 a.c b.c d.c install.log qte anaconda-ks.cfg c.c Desktop -[root@localhost ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件 +[root@localhost ~]# ar rv one.bak a.c b.c # 打包 a.c b.c文件 ar: 正在创建 one.bak a - a.c a - b.c @@ -73,8 +73,8 @@ a - b.c 打包多个文件 -``` -[root@localhost ~]# ar rv two.bak *.c //打包以.c结尾的文件 +```shell +[root@localhost ~]# ar rv two.bak *.c // 打包以.c结尾的文件 ar: 正在创建 two.bak a - a.c a - b.c @@ -84,7 +84,7 @@ a - d.c 显示打包文件的内容 -``` +```shell [root@localhost ~]# ar t two.bak a.c b.c @@ -94,7 +94,7 @@ d.c 删除打包文件的成员文件 -``` +```shell [root@localhost ~]# ar d two.bak a.c b.c c.c [root@localhost ~]# ar t two.bak d.c diff --git a/command/arch.md b/command/arch.md index 53e27266df..75cd9fbe1b 100644 --- a/command/arch.md +++ b/command/arch.md @@ -1,6 +1,6 @@ arch === - + 显示当前主机的硬件架构类型 ## 补充说明 @@ -9,13 +9,13 @@ arch ### 语法 -``` +```shell arch ``` ### 实例 -``` +```shell arch x86_64 ``` diff --git a/command/arj.md b/command/arj.md index 01f38cbc8b..452d30c1ea 100644 --- a/command/arj.md +++ b/command/arj.md @@ -1,22 +1,22 @@ arj === - + 用于创建和管理.arj压缩包 ## 补充说明 -**arj命令** 是“.arj”格式的压缩文件的管理器,用于创建和管理“.arj”压缩包。 +**arj命令** 是 `.arj` 格式的压缩文件的管理器,用于创建和管理 `.arj` 压缩包。 ### 语法 -``` +```shell arj(参数) ``` ### 参数 -* 操作指令:对“.arj”压缩包执行的操作指令; -* 压缩包名称:指定要操作的arj压缩包名称。 +* 操作指令:对 `.arj` 压缩包执行的操作指令; +* 压缩包名称:指定要操作的arj压缩包名称。 \ No newline at end of file diff --git a/command/arpd.md b/command/arpd.md index 35e2dc5e20..b609b2bdc1 100644 --- a/command/arpd.md +++ b/command/arpd.md @@ -1,6 +1,6 @@ arpd === - + 收集免费ARP信息 ## 补充说明 @@ -9,13 +9,13 @@ arpd ### 语法 -``` +```shell arpd(选项)(参数) ``` ### 选项 -``` +```shell -l:将arp数据库输出到标准输出设备显示并退出; -f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似; -b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”; @@ -32,13 +32,13 @@ arpd(选项)(参数) 启动arpd进程: -``` +```shell arpd -b /var/tmp/arpd.db ``` 运行一段时间后,查看结果: -``` +```shell arpd -l -b /var/tmp/arpd.db ``` diff --git a/command/arping.md b/command/arping.md index 3494228cf3..02bb77c2b2 100644 --- a/command/arping.md +++ b/command/arping.md @@ -1,6 +1,6 @@ arping === - + 通过发送ARP协议报文测试网络 ## 补充说明 @@ -9,13 +9,13 @@ arping ### 语法 -``` +```shell arping(选项)(参数) ``` ### 选项 -``` +```shell -b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。 -q:quiet output不显示任何信息; -f:表示在收到第一个响应报文后就退出; @@ -31,7 +31,7 @@ arping(选项)(参数) ### 实例 -``` +```shell [root@localhost ~]# arping www.baidu.com ARPING 220.181.111.147 from 173.231.43.132 eth0 Unicast reply from 220.181.111.147 00:D0:03:[bc:48:00] 1.666ms diff --git a/command/arptables.md b/command/arptables.md index 56c137b1d8..64af5706a9 100644 --- a/command/arptables.md +++ b/command/arptables.md @@ -1,6 +1,6 @@ arptables === - + 管理ARP包过滤规则表 ## 补充说明 @@ -9,13 +9,13 @@ arptables ### 语法 -``` +```shell arptables(选项) ``` ### 选项 -``` +```shell -A:向规则链中追加规则; -D:从指定的链中删除规则; -l:向规则链中插入一条新的规则; diff --git a/command/arpwatch.md b/command/arpwatch.md index c3fb1a220a..72883f3443 100644 --- a/command/arpwatch.md +++ b/command/arpwatch.md @@ -1,6 +1,6 @@ arpwatch === - + 监听网络上ARP的记录 ## 补充说明 @@ -9,13 +9,13 @@ arpwatch ### 语法 -``` +```shell arpwatch(选项) ``` ### 选项 -``` +```shell -d:启动排错模式; -f<记录文件>:设置存储ARP记录的文件,预设为/var/arpwatch/arp.dat; -i<接口>:指定监听ARP的接口,预设的接口为eth0; diff --git a/command/as.md b/command/as.md index 28de2b249d..0904e5f0d8 100644 --- a/command/as.md +++ b/command/as.md @@ -1,6 +1,6 @@ as === - + 汇编语言编译器 ## 补充说明 @@ -9,13 +9,13 @@ as ### 语法 -``` +```shell as(选项)(参数) ``` ### 选项 -``` +```shell -ac:忽略失败条件; -ad:忽略调试指令; -ah:包括高级源; diff --git a/command/at.md b/command/at.md index be7f0600bd..a03a31beb8 100644 --- a/command/at.md +++ b/command/at.md @@ -1,6 +1,6 @@ at === - + 在指定时间执行一个任务 ## 补充说明 @@ -11,13 +11,13 @@ at ### 语法 -``` +```shell at(选项)(参数) ``` ### 选项 -``` +```shell -f:指定包含具体指令的任务文件; -q:指定新任务的队列名称; -l:显示待执行任务的列表; @@ -33,7 +33,7 @@ at(选项)(参数) 三天后的下午 5 点锺执行`/bin/ls`: -``` +```shell [root@localhost ~]# at 5pm+3 days at> /bin/ls at> @@ -42,7 +42,7 @@ job 7 at 2013-01-08 17:00 明天17点钟,输出时间到指定文件内: -``` +```shell [root@localhost ~]# at 17:20 tomorrow at> date >/root/2013.log at> @@ -51,7 +51,7 @@ job 8 at 2013-01-06 17:20 计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务: -``` +```shell [root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root @@ -59,7 +59,7 @@ job 8 at 2013-01-06 17:20 删除已经设置的任务: -``` +```shell [root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root @@ -71,7 +71,7 @@ job 8 at 2013-01-06 17:20 显示已经设置的任务内容: -``` +```shell [root@localhost ~]# at -c 8 #!/bin/sh # atrun uid=0 gid=0 diff --git a/command/atop.md b/command/atop.md index 3ead1d6d07..86fd79848f 100644 --- a/command/atop.md +++ b/command/atop.md @@ -9,7 +9,7 @@ atop ## 语法 -``` +```shell atop(选项)(参数) ``` @@ -83,13 +83,13 @@ swin、swout字段:换入和换出内存页数 其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天): -``` +```shell (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )& ``` 最后,我们修改cron文件,每天凌晨执行atop.daily脚本: -``` +```shell 0 0 * * * root /etc/cron.daily/atop.daily ``` diff --git a/command/atq.md b/command/atq.md index 31f0586c6b..f21f517efb 100644 --- a/command/atq.md +++ b/command/atq.md @@ -1,6 +1,6 @@ atq === - + 列出当前用户的at任务列表 ## 补充说明 @@ -9,20 +9,20 @@ atq ### 语法 -``` +```shell atq(选项) ``` ### 选项 -``` +```shell -V:显示版本号; -q:查询指定队列的任务。 ``` ### 实例 -``` +```shell at now + 10 minutes at> echo 1111 at> diff --git a/command/atrm.md b/command/atrm.md index 2691142deb..63b0635313 100644 --- a/command/atrm.md +++ b/command/atrm.md @@ -1,6 +1,6 @@ atrm === - + 删除待执行任务队列中的指定任务 ## 补充说明 @@ -9,13 +9,13 @@ atrm ### 语法 -``` +```shell atrm(选项)(参数) ``` ### 选项 -``` +```shell -V:显示版本号。 ``` @@ -27,12 +27,12 @@ atrm(选项)(参数) 删除已经排队的任务 -``` -atq //显示当前已经设置的任务 +```shell +atq # 显示当前已经设置的任务 2 Mon May 17 08:00:00 2010 a root 1 Sat May 15 17:00:00 2010 a root -atrm 2 //删除任务2 +atrm 2 # 删除任务2 ``` diff --git a/command/awk.md b/command/awk.md index a64c885601..c7641dc989 100644 --- a/command/awk.md +++ b/command/awk.md @@ -9,19 +9,19 @@ awk ## awk命令格式和选项 - **语法形式** +**语法形式** -``` +```shell awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) ``` - **常用命令选项** +**常用命令选项** -* **-F fs   ** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: -* **-v var=value   ** 赋值一个用户定义变量,将外部变量传递给awk -* **-f scripfile  ** 从脚本文件中读取awk命令 -* **-m[fr] val   ** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 +* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: +* **-v var=value** 赋值一个用户定义变量,将外部变量传递给awk +* **-f scripfile** 从脚本文件中读取awk命令 +* **-m[fr] val** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 ## awk模式和操作 @@ -31,36 +31,36 @@ awk脚本是由模式和操作组成的。 模式可以是以下任意一个: -* /正则表达式/:使用通配符的扩展集。 -* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 -* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。 -* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 +* /正则表达式/:使用通配符的扩展集。 +* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 +* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。 +* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 ### 操作 操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是: -* 变量或数组赋值 -* 输出命令 -* 内置函数 -* 控制流语句 +* 变量或数组赋值 +* 输出命令 +* 内置函数 +* 控制流语句 ## awk脚本基本结构 -``` +```shell awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file ``` 一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如: -``` +```shell awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename awk "BEGIN{ i=0 } { i++ } END{ print i }" filename ``` ### awk的工作原理 -``` +```shell awk 'BEGIN{ commands } pattern{ commands } END{ commands }' ``` @@ -76,7 +76,7 @@ awk 'BEGIN{ commands } pattern{ commands } END{ commands }' **示例** -``` +```shell echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' Start A line 1 @@ -86,14 +86,14 @@ End 当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如: -``` +```shell echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' v1 v2 v3 ``` 双引号拼接使用: -``` +```shell echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' v1=v2=v3 ``` @@ -104,7 +104,7 @@ v1=v2=v3 说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk -``` +```shell **$n** 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 **$0** 这个变量包含执行过程中当前行的文本内容。 [N] **ARGC** 命令行参数的数目。 @@ -129,9 +129,9 @@ v1=v2=v3 [N] **SUBSEP** 数组下标分隔符(默认值是34)。 ``` - **示例** +**示例** -``` +```shell echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 @@ -140,13 +140,13 @@ Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推: -``` +```shell echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}' f3 f5 ``` -``` +```shell echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' f2 f4 @@ -155,13 +155,13 @@ f4 打印每一行的第二和第三个字段: -``` +```shell awk '{ print $2,$3 }' filename ``` 统计文件中的行数: -``` +```shell awk 'END{ print NR }' filename ``` @@ -169,7 +169,7 @@ awk 'END{ print NR }' filename 一个每一行中第一个字段值累加的例子: -``` +```shell seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' 总和: 1+ @@ -185,14 +185,14 @@ seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ pri 借助 **`-v`选项** ,可以将外部值(并非来自stdin)传递给awk: -``` +```shell VAR=10000 echo | awk -v VARIABLE=$VAR '{ print VARIABLE }' ``` 另一种传递外部变量方法: -``` +```shell var1="aaa" var2="bbb" echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 @@ -200,7 +200,7 @@ echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 当输入来自于文件时使用: -``` +```shell awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename ``` @@ -208,7 +208,7 @@ awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename ## 查找进程pid -``` +```shell netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' ``` @@ -228,7 +228,7 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' 例: -``` +```shell awk 'BEGIN{a="b";print a++,++a;}' 0 2 ``` @@ -243,7 +243,7 @@ awk 'BEGIN{a="b";print a++,++a;}' 例: -``` +```shell a+=5; 等价于:a=a+5; 其它同类 ``` @@ -256,7 +256,7 @@ a+=5; 等价于:a=a+5; 其它同类 例: -``` +```shell awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' 0 1 ``` @@ -269,7 +269,7 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' 例: -``` +```shell awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' ok ``` @@ -282,7 +282,7 @@ ok 例: -``` +```shell awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' ok ``` @@ -300,12 +300,12 @@ ok 例: -``` +```shell awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' ok ``` -``` +```shell awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' 0 ``` @@ -326,7 +326,7 @@ awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并: -``` +```shell cat text.txt a b @@ -343,7 +343,7 @@ awk 'NR%2==1{next}{print NR,$0;}' text.txt 分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: -``` +```shell cat text.txt web01[192.168.2.100] httpd ok @@ -374,26 +374,26 @@ getline语法:getline var,变量var包含了特定行的内容。 awk getline从整体上来说,用法说明: -* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 -* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 +* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 +* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 - **示例:** +**示例:** 执行linux的`date`命令,并通过管道输出给`getline`,然后再把输出赋值给自定义变量out,并打印它: -``` +```shell awk 'BEGIN{ "date" | getline out; print out }' test ``` 执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素: -``` +```shell awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test ``` 命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。 -``` +```shell awk 'BEGIN{ while( "ls" | getline) print }' ``` @@ -401,7 +401,7 @@ awk 'BEGIN{ while( "ls" | getline) print }' awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 -``` +```shell close("filename") ``` @@ -411,9 +411,9 @@ filename可以是getline打开的文件,也可以是stdin,包含文件名的 awk中允许用如下方式将结果输出到一个文件: -``` +```shell echo | awk '{printf("hello word!n") > "datafile"}' -或 +# 或 echo | awk '{printf("hello word!n") >> "datafile"}' ``` @@ -421,9 +421,9 @@ echo | awk '{printf("hello word!n") >> "datafile"}' 默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符: -``` +```shell awk -F: '{ print $NF }' /etc/passwd -或 +# 或 awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd ``` @@ -435,7 +435,7 @@ awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd ### 条件判断语句 -``` +```shell if(表达式) 语句1 else @@ -444,7 +444,7 @@ else 格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: -``` +```shell if(表达式) {语句1} else if(表达式) @@ -455,7 +455,7 @@ else 示例: -``` +```shell awk 'BEGIN{ test=100; if(test>90){ @@ -478,14 +478,14 @@ very good #### while语句 -``` +```shell while(表达式) {语句} ``` 示例: -``` +```shell awk 'BEGIN{ test=100; total=0; @@ -504,14 +504,14 @@ for循环有两种格式: 格式1: -``` +```shell for(变量 in 数组) {语句} ``` 示例: -``` +```shell awk 'BEGIN{ for(k in ENVIRON){ print k"="ENVIRON[k]; @@ -532,14 +532,14 @@ SSH_CLIENT=192.168.1.21 53087 22 格式2: -``` +```shell for(变量;条件;表达式) {语句} ``` 示例: -``` +```shell awk 'BEGIN{ total=0; for(i=0;i<=100;i++){ @@ -552,14 +552,14 @@ print total; #### do循环 -``` +```shell do {语句} while(条件) ``` 例子: -``` +```shell awk 'BEGIN{ total=0; i=0; @@ -571,10 +571,10 @@ do {total+=i;i++;} while(i<=100) ### 其他语句 -* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 -* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 -* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 -* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 +* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 +* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 +* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 +* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 ## 数组应用 @@ -584,14 +584,14 @@ do {total+=i;i++;} while(i<=100) 数字做数组索引(下标): -``` +```shell Array[1]="sun" Array[2]="kai" ``` 字符串做数组索引(下标): -``` +```shell Array["first"]="www" Array"[last"]="name" Array["birth"]="1987" @@ -601,32 +601,32 @@ Array["birth"]="1987" **读取数组的值** -``` +```shell { for(item in array) {print array[item]}; } #输出的顺序是随机的 { for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度 ``` ### 数组相关函数 - **得到数组长度:** +**得到数组长度:** -``` +```shell awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' 4 4 ``` length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。 -``` +```shell awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}' 4 ``` asort对数组进行排序,返回数组长度。 - **输出数组内容(无序,有序输出):** +**输出数组内容(无序,有序输出):** -``` +```shell awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' 4 test 1 it @@ -636,7 +636,7 @@ awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' `for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。 -``` +```shell awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' 1 it 2 is @@ -646,10 +646,10 @@ awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){prin 注意:数组下标是从1开始,与C数组不一样。 - **判断键值存在以及删除键值:** +**判断键值存在以及删除键值:** -``` -#错误的判断方法: +```shell +# 错误的判断方法: awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' no found a a1 @@ -659,8 +659,8 @@ c 以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。 -```bash -#正确判断方法: +```shell +# 正确判断方法: awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' a a1 b b1 @@ -668,7 +668,7 @@ b b1 `if(key in array)`通过这种方法判断数组中是否包含`key`键值。 -```bash +```shell #删除键值: awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' b b1 @@ -682,7 +682,7 @@ awk的多维数组在本质上是一维数组,更确切一点,awk在存储 类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 -```bash +```shell awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ @@ -707,7 +707,7 @@ for(i=1;i<=9;i++){ 另一种方法: -```bash +```shell awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ @@ -741,7 +741,7 @@ awk内置函数,主要分以下3种类似:算数函数、字符串函数、 举例说明: -``` +```shell awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' 0.841 22026.466 2.303 3 @@ -751,7 +751,7 @@ OFMT 设置输出数据格式是保留3位小数。 获得随机数: -``` +```shell awk 'BEGIN{srand();fr=int(100*rand());print fr;}' 78 awk 'BEGIN{srand();fr=int(100*rand());print fr;}' @@ -779,9 +779,9 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}' 注:Ere都可以是正则表达式。 - **gsub,sub使用** +**gsub,sub使用** -``` +```shell awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' this is a test!test! ``` @@ -790,32 +790,32 @@ this is a test!test! **查找字符串(index使用)** -``` +```shell awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}' ok ``` 未找到,返回0 - **正则表达式匹配查找(match使用)** +**正则表达式匹配查找(match使用)** ``` awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}' ok ``` - **截取字符串(substr使用)** +**截取字符串(substr使用)** -``` +```shell [wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' s is a tes ``` 从第 4个 字符开始,截取10个长度字符串 - **字符串分割(split使用)** +**字符串分割(split使用)** -``` +```shell awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' 4 4 test @@ -826,7 +826,7 @@ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA 分割info,动态创建数组tA,这里比较有意思,`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。 - **格式化字符串输出(sprintf使用)** +**格式化字符串输出(sprintf使用)** 格式化字符串格式: @@ -841,7 +841,7 @@ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA | %o | 无符号以八进制表示的整数 | %g | 自动选择合适的表示法 | -``` +```shell awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}' 124.11,18446744073709551615,1.2,7C,174 ``` @@ -856,34 +856,34 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2, | getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 | | getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 | - **打开外部文件(close用法)** +**打开外部文件(close用法)** -``` +```shell awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ``` - **逐行读取外部文件(getline使用方法)** +**逐行读取外部文件(getline使用方法)** -``` +```shell awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ``` -``` +```shell awk 'BEGIN{print "Enter your name:";getline name;print name;}' Enter your name: chengmo chengmo ``` - **调用外部应用程序(system使用方法)** +**调用外部应用程序(system使用方法)** -``` +```shell awk 'BEGIN{b=system("ls -al");print b;}' total 42092 drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . @@ -901,26 +901,26 @@ b返回值,是执行结果。 | strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串具体格式,见下表。 | | systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 | - **建指定时间(mktime使用)** +**建指定时间(mktime使用)** -``` +```shell awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' 2001年01月01日 星期一 12时12分12秒 ``` -``` +```shell awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}' 2634468 ``` 求2个时间段中间时间差,介绍了strftime使用方法 -``` +```shell awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}' 308201392 ``` - **strftime日期和时间格式说明符** +**strftime日期和时间格式说明符** | 格式 | 描述 | | ---- | ---- | diff --git a/command/axel.md b/command/axel.md index 42591c657f..b783ff1103 100644 --- a/command/axel.md +++ b/command/axel.md @@ -1,6 +1,6 @@ axel === - + 多线程下载工具 ## 补充说明 @@ -11,56 +11,56 @@ axel CentOS安装Axel: -目前yum源上没有Axel,我们可以到http://pkgs.repoforge.org/axel/下载rpm包安装。 +目前yum源上没有Axel,我们可以到 http://pkgs.repoforge.org/axel/ 下载rpm包安装。 32位CentOS执行下面命令: -``` +```shell wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm rpm -ivh axel-2.4-1.el5.rf.i386.rpm ``` 64位CentOS执行下面命令: -``` +```shell wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm rpm -ivh axel-2.4-1.el5.rf.x86_64.rpm ``` Debian/Ubuntu安装Axel: -``` +```shell apt-get install axel ``` ### 语法 -``` +```shell axel [options] url1 [url2] [url...] ``` ### 选项 -``` ---max-speed=x , -s x 最高速度x ---num-connections=x , -n x 连接数x ---output=f , -o f 下载为本地文件f ---search[=x] , -S [x] 搜索镜像 ---header=x , -H x 添加头文件字符串x(指定 HTTP header) ---user-agent=x , -U x 设置用户代理(指定 HTTP user agent) ---no-proxy , -N 不使用代理服务器 ---quiet , -q 静默模式 ---verbose ,-v 更多状态信息 ---alternate , -a Alternate progress indicator ---help ,-h 帮助 ---version ,-V 版本信息 +```shell +--max-speed=x , -s x # 最高速度x +--num-connections=x , -n x # 连接数x +--output=f , -o f # 下载为本地文件f +--search[=x] , -S [x] # 搜索镜像 +--header=x , -H x # 添加头文件字符串x(指定 HTTP header) +--user-agent=x , -U x # 设置用户代理(指定 HTTP user agent) +--no-proxy , -N # 不使用代理服务器 +--quiet , -q # 静默模式 +--verbose ,-v # 更多状态信息 +--alternate , -a # Alternate progress indicator +--help ,-h # 帮助 +--version ,-V # 版本信息 ``` ### 实例 -如下载lnmp安装包指定10个线程,存到/tmp/: +如下载lnmp安装包指定10个线程,存到 `/tmp/`: -``` +```shell axel -n 10 -o /tmp/ http://www.jsdig.com/lnmp.tar.gz ``` diff --git a/command/badblocks.md b/command/badblocks.md index a334c53484..14df570705 100644 --- a/command/badblocks.md +++ b/command/badblocks.md @@ -1,6 +1,6 @@ badblocks === - + 查找磁盘中损坏的区块 ## 补充说明 @@ -9,13 +9,13 @@ badblocks ### 语法 -``` +```shell badblock(选项)(参数) ``` ### 选项 -``` +```shell -b<区块大小>:指定磁盘的区块大小,单位为字节; -o<输出文件>:将检查的结果写入指定的输出文件; -s:在检查时显示进度; @@ -25,21 +25,21 @@ badblock(选项)(参数) ### 参数 -* 磁盘装置:指定要检查的磁盘装置; -* 磁盘区块数:指定磁盘装置的区块总数; -* 启始区块:指定要从哪个区块开始检查。 +* 磁盘装置:指定要检查的磁盘装置; +* 磁盘区块数:指定磁盘装置的区块总数; +* 启始区块:指定要从哪个区块开始检查。 ### 实例 -badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 +badblocks以 4096 的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 -``` +```shell badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list ``` hda-badblocks-list是个文本文件,内容如下: -``` +```shell cat hda-badblocks-list 51249 51250 @@ -53,7 +53,7 @@ cat hda-badblocks-list 可以针对可疑的区块多做几次操作。下面,badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束。 -``` +```shell badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000 ``` @@ -61,7 +61,7 @@ badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000 ### 其他 - **1、fsck使用badblocks的信息** +**1、fsck使用badblocks的信息** badblocks只会在日志文件中标记出坏道的信息,但若希望在检测磁盘时也能跳过这些坏块不检测,可以使用fsck的-l参数: @@ -69,11 +69,11 @@ badblocks只会在日志文件中标记出坏道的信息,但若希望在检 fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1 ``` - **2、在创建文件系统前检测坏道** +**2、在创建文件系统前检测坏道** badblocks可以随e2fsck和mke2fs的-c删除一起运行(对ext3文件系统也一样),在创建文件系统前就先检测坏道信息: -``` +```shell mkfs.ext3 -c /dev/hda1 ``` diff --git a/command/basename.md b/command/basename.md index 0205575362..e7c707e69f 100644 --- a/command/basename.md +++ b/command/basename.md @@ -1,6 +1,6 @@ basename === - + 打印目录或者文件的基本名称 ## 补充说明 @@ -9,27 +9,27 @@ basename ### 语法 -``` +```shell basename(选项)(参数) ``` ### 选项 -``` +```shell --help:显示帮助; --version:显示版本号。 ``` ### 参数 -* 文件:带路径信息的文件; -* 后缀:可选参数,指定要去除的文件后缀字符串。 +* 文件:带路径信息的文件; +* 后缀:可选参数,指定要去除的文件后缀字符串。 ### 实例 1、要显示一个shell变量的基本名称,请输入: -``` +```shell basename $WORKFILE ``` @@ -37,7 +37,7 @@ basename $WORKFILE 要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入: -``` +```shell OFILE=`basename $1 .c`.o ``` diff --git a/command/batch.md b/command/batch.md index 489b073284..de1abb92e4 100644 --- a/command/batch.md +++ b/command/batch.md @@ -1,6 +1,6 @@ batch === - + 在系统不繁忙的时候执行定时任务 ## 补充说明 @@ -9,13 +9,13 @@ batch ### 语法 -``` +```shell batch(选项)(参数) ``` ### 选项 -``` +```shell -f:指定包含具体指令的任务文件; -q:指定新任务的队列名称; -m:任务执行完后向用户发送E-mail。 @@ -27,7 +27,7 @@ batch(选项)(参数) ### 实例 -``` +```shell batch at> echo 1234 at> diff --git a/command/bc.md b/command/bc.md index 2c582c15b3..1adbd5cb3d 100644 --- a/command/bc.md +++ b/command/bc.md @@ -1,6 +1,6 @@ bc === - + 算术操作精密运算工具 ## 补充说明 @@ -9,13 +9,13 @@ bc ### 语法 -``` +```shell bc(选项)(参数) ``` ### 选项 -``` +```shell -i:强制进入交互式模式; -l:定义使用的标准数学库; -w:对POSIX bc的扩展给出警告信息; @@ -32,7 +32,7 @@ bc(选项)(参数) 算术操作高级运算bc命令它可以执行浮点运算和一些高级函数: -``` +```shell echo "1.212*3" | bc 3.636 @@ -40,7 +40,7 @@ echo "1.212*3" | bc 设定小数精度(数值范围) -``` +```shell echo "scale=2;3/8" | bc 0.37 @@ -50,7 +50,7 @@ echo "scale=2;3/8" | bc 进制转换 -``` +```shell #!/bin/bash abc=192 echo "obase=2;$abc" | bc @@ -59,7 +59,7 @@ echo "obase=2;$abc" | bc 执行结果为:11000000,这是用bc将十进制转换成二进制。 -``` +```shell #!/bin/bash abc=11000000 echo "obase=10;ibase=2;$abc" | bc @@ -70,7 +70,7 @@ echo "obase=10;ibase=2;$abc" | bc 计算平方和平方根: -``` +```shell echo "10^10" | bc echo "sqrt(100)" | bc ``` diff --git a/command/bg.md b/command/bg.md index a7aaa85d19..bb9fee05a6 100644 --- a/command/bg.md +++ b/command/bg.md @@ -1,6 +1,6 @@ bg === - + 用于将作业放到后台运行 ## 补充说明 @@ -11,7 +11,7 @@ bg ### 语法 -``` +```shell bg(参数) ``` @@ -23,16 +23,16 @@ bg(参数) 使用bg命令将任务号为1的任务放到后台继续执行,输入如下命令: -``` -bg 1 #后台执行任务号为1的任务 +```shell +bg 1 # 后台执行任务号为1的任务 ``` 如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。 注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令: -``` -find / -name password & #后台执行任务 +```shell +find / -name password & # 后台执行任务 ``` diff --git a/command/bind.md b/command/bind.md index fa48becd6f..16aa069210 100644 --- a/command/bind.md +++ b/command/bind.md @@ -1,6 +1,6 @@ bind === - + 显示或设置键盘按键与其相关的功能 ## 补充说明 @@ -9,13 +9,13 @@ bind ### 语法 -``` +```shell bind(选项) ``` ### 选项 -``` +```shell -d:显示按键配置的内容; -f<按键配置文件>:载入指定的按键配置文件; -l:列出所有的功能; @@ -26,13 +26,13 @@ bind(选项) ### 实例 -``` +```shell bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录 ``` 其中keyseq可以使用`showkey -a`命令来获取: -``` +```shell [root@localhost ~]# showkey -a Press any keys - Ctrl-D will terminate this program diff --git a/command/blkid.md b/command/blkid.md index 9d93c779b2..d64c5c81f8 100644 --- a/command/blkid.md +++ b/command/blkid.md @@ -1,6 +1,6 @@ blkid === - + 查看块设备的文件系统类型、LABEL、UUID等信息 ## 补充说明 @@ -9,7 +9,7 @@ blkid ### 语法 -``` +```shell blkid -L | -U blkid [-c ] [-ghlLv] [-o] [-s ][-t ] -[w ] [ ...] blkid -p [-s ] [-O ] [-S ][-o] ... @@ -18,77 +18,77 @@ blkid -i [-s ] [-o] ... ### 选项 -``` --c 指定cache文件(default: /etc/blkid.tab, /dev/null = none) --d don't encode non-printing characters --h 显示帮助信息 --g garbage collect the blkid cache --o 指定输出格式 --k list all known filesystems/RAIDs and exit --s 显示指定信息,默认显示所有信息 --t find device with a specific token (NAME=value pair) --l look up only first device with token specified by -t --L