本文转载的是github一个项目文件:[原项目](https://github.com/jaywcjlove/linux-command/tree/master/command)

7z

拥有极高压缩比的开源压缩软件。

安装

在 Linux 中输入以下命令安装 7-Zip。

1
2
3
4
5
6
7
8
# Ubuntu 系统
apt-get update
apt-get install p7zip-full -y

# CentOS 参考:https://linuxconfig.org/how-to-install-p7zip-on-redhat-8
sudo yum install epel-release
yum install p7zip p7zip-plugins

实例

介绍几个常用场景:解压、压缩、查看(压缩包内容)。

1、将压缩文件 text.7z 在当前目录下解压缩。

1
7z x text.7z

2、将压缩文件 text.7z 在指定目录(/home/text)下解压缩。

1
2
# 注意 -o 用来指定解压缩文件存放目录,-o 后是没有空格的,直接接目录
7z x text.7z -r -o/home/text

3、将压缩文件 text.7z 中的 dir1/dir2dir1/file1 提取到在指定目录(/home/text)下(保持原有路径结构)。

1
2
# 注意 dir1/dir2,dir1/file1 为压缩包中文件或文件夹路径
7z x text.7z dir1/dir2 dir1/file1 -o/home/text

4、将文件 /home/text 压缩成 text.7z。

1
7z a text.7z -r /home/text

5、查看压缩包 text.7z 内容,但不解压。

1
7z l text.7z

help 信息翻译

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
使用方法: 7z <命令> [<开关>...] <archive_name> [<file_names>...]

<命令>
a : 添加文件到压缩包
b : 基准测试
d : 从压缩包中删除文件
e : 从压缩包中提取文件(不使用目录名)。
h : 计算文件的哈希值
i : 显示支持的格式信息
l : 列出压缩包的内容
rn : 重命名压缩包中的文件
t : 测试压缩包的完整性
u : 更新压缩包中的文件
x : 提取完整路径的文件

<开关>
-- : 停止对 - 开头的开关和 @ 开头的文件列表的解析,为了允许 7-Zip 使用以 - 和 @ 开头的文件名。
-ai[r[-|0]]{@listfile|!wildcard} : 包括指定压缩包文件
-ax[r[-|0]]{@listfile|!wildcard} : 排除指定压缩包文件
-ao{a|s|t|u} : 设置覆写模式
-aoa 覆盖所有现有文件,无提示。
-aos 跳过提取现有文件。
-aou 自动重命名提取的文件(例如,name.txt 将重命名为 name_1.txt)。
-aot 自动重命名现有文件(例如,name.txt 将重命名为 name_1.txt)。
-an : 禁用压缩包名称字段解析,必须与 -ai 开关一起使用。
-bb[0-3] : 设置输出日志级别
-bb0 禁用日志(默认)。
-bb1 或 -bb 在日志中显示已处理文件的名称。
-bb2 显示在压缩包文件中跳过的文件名称(对于 “提取” 操作)和重新打包的文件名称(对于 “添加” / “更新” 操作)
-bb3 显示 “添加” / “更新” 操作的其他操作(分析、复制)信息。
-bd : 禁用进度指示器
-bs{o|e|p}{0|1|2} : 设置输出/错误/进度行的输出流
o 标准输出信息
e 错误信息
p 进度信息
0 禁用流
1 重定向到标准输出流
2 重定向到标准错误流
-bt : 显示执行时间统计
-i[r[-|0]]{@listfile|!wildcard} : 包括文件名
-m{Parameters} : 设置压缩方法
-mmt[N] : 设置 CPU 线程的数量
-mx[N] : 设置压缩级别: -mx1 (最快) ... -mx9 (超强),-mx0(不压缩)
-o{Directory} : 设置输出目录
-p{Password} : 设置密码
-r[-|0] : 重新搜索子目录
-sa{a|e|s} : 设置压缩包名称模式
-scc{UTF-8|WIN|DOS} : 设置控制台输入/输出的字符集。
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : 设置列表文件的字符集。
-scrc[CRC32|CRC64|SHA1|SHA256|*] : 为x、e、h命令设置哈希函数。
-sdel : 压缩后删除文件
-seml[.] : 通过电子邮件发送压缩包
-sfx[{name}] : 创建 SFX 压缩包
-si[{name}] : 从标准输入读取数据
-slp : 设置大型页面模式
-slt : 显示l(List)命令的技术信息
-snh : 将硬链接存储为链接
-snl : 将符号链接存储为链接
-sni : 存储 NT 安全信息
-sns[-] : 存储 NTFS 备用流
-so : 向标准输出写数据
-spd : 禁用文件名的通配符匹配
-spe : 消除提取命令中根文件夹的重复。
-spf[2] : 使用完全合格的文件路径
-ssc[-] : 设置敏感的大小写模式
-sse : 如果无法打开某些输入文件,则停止创建压缩包
-ssp : 压缩包时不更改源文件的最后访问时间
-ssw : 压缩共享文件
-stl : 从最近修改的文件设置压缩包时间戳
-stm{HexMask} : 设置 CPU 线程亲和力掩码(十六进制数字)。
-stx{Type} : 排除压缩包类型
-t{Type} : 设置压缩包的类型
-u[-][p#][q#][r#][x#][y#][z#] [!newArchiveName] : 更新选项
-v{Size}[b|k|m|g] : 创建卷
-w[{path}] : 指定工作目录。空的路径意味着一个临时目录
-x[r[-|0]]{@listfile|!wildcard} : 排除文件名。
-y : 假设所有的查询都是肯定的

官网

更多安装使用方法可以访问官网学习:https://www.7-zip.org/
或者可以访问简体中文网站:https://sparanoid.com/lab/7z/

ab

Apache服务器的性能测试工具

安装

若系统未安装,使用以下命令安装

1
2
3
4
5
6
# Ubuntu
sudo apt-get install apache2-utils

# Centos
yum install httpd-tools

补充说明

ab命令 是一个测试你 Apache http 服务器的工具,你可以通过这个工具,指定一个单位时间内向 apache 发出的请求数量来看看你的 Apache 和机器配合的性能如何。

语法

1
2
3
4
5
6
7
ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value
] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [
-i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-user‐
name:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ]
[ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port]
] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]host‐
name[:port]/path

选项

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
-A auth-username:password
# 支持基本的验证证书,用户名和密码之间使用"冒号" :
# 分隔开,ab将以明文方式传送过去.不管服务器是不是需要
# ,也就是说你的服务器需要支持401认证.

-c concurrency
# 同时向服务器端发送的请求数目,默认状态下是一次 只执行一个http请求.

-C cookie-name=value
# Add a Cookie: line to the request. The argument is typically in the
# form of a name=value pair. This field is repeatable.

-d # Do not display the "percentage served within XX [ms] table".
# (legacy support).

-e csv-file
# Write a Comma separated value (CSV) file which contains for each
# percentage (from 1% to 100%) the time (in milli seconds) it took to
# serve that percentage of the requests. This is usually more useful
# than the 'gnuplot' file; as the results are already 'binned'.

-g gnuplot-file
# Write all measured values out as a 'gnuplot' or TSV (Tab separate
# values) file. This file can easily be imported into packages like
# Gnuplot, IDL, Mathematica, Igor or even Excel. The labels are on
# the first line of the file.
-h # 显示使用说明
-H custom-header
# 向请求包追加附加的标题字串.此参数应该是有效的标题 行(header
# line)形式,通常使用冒号":"来分隔有效配对 (valid pair)例如 'Accept-
# Encoding: zip/zop;8 bit';

-i # 使用一个 http 头(HEAD) 来替换 GET方法.不可以掺入POST 方法

-k # 允许http KeepAlive ;也就是说执行多个请求在一个 http
# 会话当中,默认是不允许的也就是no KeepAlive啦;)

-n requests
# 执行一次测试会话的时候所发出的请求数目,默认是执行一个单一的请求
# 当然了这样的测试结果也就没什么意义了

-p POST-file
# 测试程序也就是ab,将向Apache server发送带有HTTP POST 的请求.

-P proxy-auth-username:password
# 当需要通过代理测试一台 HTTP 服务器的时候而你的代理
# 又需要用户名密码验证,这时你可以使用这个选项,同样
# 用户名与密码之间使用冒号":"分隔开,ab将之以明文的方式
# 发送出去,当然,前提是你的代理是处于407认证状态的

-q # When processing more than 150 requests, ab outputs a progress count
# on stderr every 10% or 100 requests or so. The -q flag will sup‐
# press these messages.

-s # When compiled in (ab -h will show you) use the SSL protected https
# rather than the http protocol. This feature is experimental and
# very rudimentary. You probably do not want to use it.

-S # Do not display the median and standard deviation values, nor dis‐
# play the warning/error messages when the average and median are
# more than one or two times the standard deviation apart. And de‐
# fault to the min/avg/max values. (legacy support).

-t timelimit
# 设置测试的时间的长短,使用这个选项ab将自动设置
# 测试请求会话数目为50000,然后以你设置的时间为
# 固定周期.默认状态下是没有时限的,也就是直到完成
# 你所设置的请求数目为止.

-T content-type
# 内容类型标头,使用在POST数据的时候.

-v verbosity
# 设置冗余级别,4级打印出每个请求标头的详细信息,
# 3级打印出回应代码(例如,404,200),2级打印出警告 信息和指示消息

-V # 显示版本号并且退出
-w # 打印输出结果到HTML表中. 默认的表是两列n行白底黑框

-x <table>-attributes
# 使用字串来描述表的属性,该属性字串应该插入到<table 这里 >

-X proxy[:port]
# Use a proxy server for the requests.

-y <tr>-attributes
# 用于生成html表格每行的属性名 (<tr>)

-z <td>-attributes
# 用于生成html表格每列的属性名 (<td>)

参数

主机:被测试主机。

实例

1
2
# 10个并发, 请求500次
ab -c 10 -n 500 https://www.qq.com/

accept

指示打印系统接受发往指定目标打印机的打印任务

补充说明

accept命令 属于CUPS套件,用于指示打印系统接受发往指定目标打印机的打印任务。

语法

1
accept(选项)(参数)

选项

1
2
3
-E:当连接到服务器时强制加密;
-U:指定连接服务器时使用的用户名;
-h:指定连接服务器名和端口号。

参数

目标:指定目标打印机。

ack

比grep好用的文本搜索工具

安装

1
2
3
4
# ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。
sudo apt-get install ack-grep
# alpine Linux-apk软件包管理器 安装 ack
apk install ack

参数

这些参数在linux上的使用频率是相当高的,尤其是你用vim做为IDE的话

1
2
-c(统计)/ -i(忽略大小)/ -h(不显示名称)/
-l(只显文件名)/ -n(加行号)/ -v(显示不匹配)

特点

ack官网列出了这工具的5大卖点:

  1. 速度非常快,因为它只搜索有意义的东西。
  2. 更友好的搜索,忽略那些不是你源码的东西。
  3. 为源代码搜索而设计,用更少的击键完成任务。
  4. 非常轻便,移植性好。
  5. 免费且开源

实例

在记忆的时候大体上可以分为这几个部分:

Searching 代码搜索
Search output 搜索结果处理
File presentation 文件展示
File finding 文件查找
File inclusion/exclusion 文件过滤

grep常用操作

1
2
3
grep -r 'hello_world' # 简单用法
grep '^hello_world' . # 简单正则
ls -l | grep .py # 管道用法

Searching

简单的文本搜索,默认是递归的。

1
2
3
4
5
ack-grep hello
ack-grep -i hello
ack-grep -v hello
ack-grep -w hello
ack-grep -Q 'hello*'

Search File

对搜索结果进行处理,比如只显示一个文件的一个匹配项,或者xxx

1
2
3
ack-grep --line=1       # 输出所有文件第二行
ack-grep -l 'hello' # 包含的文件名
ack-grep -L 'print' # 非包含文件名

File presentation

输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下

1
2
3
ack-grep hello --pager='less -R'    # 以less形式展示
ack-grep hello --noheading # 不在头上显示文件
ack-grep hello --nocolor # 不对匹配字符着色

File finding

没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。

1
2
3
ack-grep -f hello.py     # 查找全匹配文件
ack-grep -g hello.py$ # 查找正则匹配文件
ack-grep -g hello --sort-files # 查找然后排序

File inclusion/exclusion

文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码时不小心命中日志中的某个关键字的话,你会觉得这个有用。

1
2
ack-grep --python hello       # 查找所有python文件
ack-grep -G hello.py$ hello # 查找匹配正则的文件

参考资料

ag

ack 的升级版,C语言编写,更快更人性化

补充说明

摘自 https://github.com/ggreer/the_silver_searcher 项目的 Readme.md

  • 它比ack快一个数量级。
  • 它忽略了你的 .gitignore.hgignore 中的文件模式。
  • 如果你的源码库里有你不想搜索的文件,只要把它们的模式添加到一个.ignore文件里。(cough .min.jscough*)
  • 这个命令的名字比ack短33%,而且所有的键都在主行上!

语法

1
2
ag [options] pattern [path ...]
ag [可选项] 匹配模式 [路径...]

选项

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
输出选项:
--ackmate 以 AckMate-parseable 的格式显示结果
-A --after [LINES] 显示匹配行之后的行(默认2行)
-B --before [LINES] 显示匹配行之前的行(默认2行)
--[no]break 不同文件中匹配到的内容新建一行显示(默认开启)
-c --count 只显示每个文件中匹配到的数量 (通常与匹配行数不同)
--[no]color 在结果中打印颜色代码(默认启用)
--color-line-number 行号的颜色代码(默认值为:1;33)。
--color-match 匹配结果的颜色代码(默认值为:30;43)。
--color-path 路径名称的颜色代码(默认值为:1;32)
--column 打印结果中的列号
--[no]filename 打印文件名(除非搜索单个文件,否则启用)。
-H --[no]heading 在每个文件匹配前输出文件名(默认开启)
-C --context [LINES] 显示匹配行上下两行(默认2行)
--[no]group 和这些一样: --[no]break --[no]heading
-g --filename-pattern PATTERN 打印匹配PATTERN的文件名
-l --files-with-matches 显示包含匹配的文件名(不显示匹配的行)
-L --files-without-matches 只显示不包含匹配项的文件名
--print-all-files 打印所有搜索到的文件的标题,甚至那些不包含匹配的文件。
--[no]numbers 打印行号。默认情况是在搜索流时省略行号。
-o --only-matching 只输出每行匹配的部分
--print-long-lines 在很长的行上打印匹配信息(默认:>2k字符)。
--passthrough 当搜索一个流时,打印所有的行,即使它们不匹配。
--silent 抑制所有的日志信息,包括错误
--stats 打印统计(扫描的文件、花费的时间等)。
--stats-only 打印统计信息,不打印其他信息(与搜索单个文件时的--计数相同)。
--vimgrep 像vim的:vimgrep /pattern/g那样打印结果(它报告每一行的匹配结果)
-0 --null --print0 用null分隔文件名(用于'xargs -0')。

搜索选项:
-a --all-types 搜索所有文件(包括隐藏文件)
-D --debug 可笑的调试(可能没有用)
--depth NUM 目录搜索最大深度(默认25)
-f --follow 跟随链接进行搜索
-F --fixed-strings 为了与grep兼容,--literal的别名。
-G --file-search-regex 根据正则匹配搜索指定类型的文件
--hidden 搜索隐藏文件 (但遵从 .*ignore 文件)
-i --ignore-case 不区分大小写匹配
--ignore PATTERN 忽略匹配 PATTERN 的文件/目录(也允许使用文字文件/目录名称)
--ignore-dir NAME 为了与ack兼容,--ignore的别名
-m --max-count NUM 在一个文件中最大匹配的数量(默认: 10,000)
--one-device 不跟随其他设备的链接搜索
-p --path-to-ignore STRING 在STRING使用.ignore文件
-Q --literal 不要将PATTERN解析为正则表达式
-s --case-sensitive 敏感地匹配案例
-S --smart-case 不区分大小写匹配,除非 PATTERN 包含大写字符
--search-binary 搜索二进制文件
-t --all-text 搜索所有文本文件(不包括隐藏文件)
-u --unrestricted 搜索所有文件 (忽略 .ignore, .gitignore, 比如:搜索二进制和隐藏文件)
-U --skip-vcs-ignores 忽略VCS的忽略文件(指的是 .gitignore,.hgignore;仍然遵从.ignore)。
-v --invert-match 反向匹配
-w --word-regexp 只匹配整个单词
-W --width NUM 在NUM字符后截断匹配行
-z --search-zip 搜索压缩文件中的内容

文件类型:
搜索可以限制在某些类型的文件中,例如:
ag --html needle 结果输出到指定类型文件
- 在后缀为 .htm、.html、.shtml 或 .xhtml 的文件中搜索“needle”

有关支持的文件类型的列表,可以运行:
ag --list-file-types 列出支持的文件类型

实例

列出当前目录下包含 npm 的文件

1
2
3
4
5
➜  vue-project ag npm ./
README.md
16:npm install
22:npm run dev
28:npm run build

alias

定义或显示别名。

概要

1
alias [-p] [name[=value] ...]

主要用途

  • 简化较长的命令。
  • 定义、修改或者显示一个或多个别名。

选项

1
2
3
-p:显示全部已定义的别名。
name(可选):指定要(定义、修改、显示)的别名。
value(可选):别名的值。

返回值

alias 返回 true 除非您要显示的别名未定义。

例子

1
2
3
4
5
6
7
8
9
10
11
# 显示全部已定义的别名
alias
alias -p

# 显示已定义的别名(假设当前环境存在以下别名)
alias ls
alias ls grep

# 定义或修改别名的值
alias ls='ls --color=auto'
alias ls='ls --color=never' grep='grep --color=never'

知识点

直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?

使用编辑器打开~/.bashrc,在文件中加入别名设置,如:alias rm=’rm -i’,保存后执行source ~/.bashrc,这样就可以永久保存命令的别名了。

因为修改的是当前用户目录下的~/.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc/bashrc文件就可以了。

请注意,以下内容可能与您实际使用的系统有出入:

在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发现有这样一段代码:

1
2
3
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

这个代码的意思就是如果存在那么就加载.bash_aliases文件,所以也可以在用户根目录下新建该文件用于单独存放命令别名设置。

错误用法

  • 要显示的别名未定义。
  • 当您定义(修改)别名的值的时候,由于值的字符串有空格但您没有用单引号扩起,那么会导致严重的问题:
1
2
3
4
5
6
# 为方便演示,删除全部别名
unalias -a
# 没有用单引号扩起
alias rm=rm -rf
# 执行命令后报错 bash: alias: -rf: not found
# 这时使用alias查看rm的别名时返回 alias rm='rm'
1
2
3
4
5
6
7
8
9
10
11
# 更具有迷惑性的例子
# 为方便演示,删除全部别名
unalias -a
# 仍然没有用单引号括起
alias ls=ls --color=never
# 执行命令后看起来没有报错

# 使用alias查看全部别名会发现运行结果如下:
# alias --color=never
# alias ls='ls'
# alias处理时将它们看成了两组

Q&A

Q:如果我要显示一到多个别名,但不知道其中是否有未定义的该怎么办?

A:正常执行就是了,alias不会因为有一个未定义的别名就结束对剩余参数的执行。

Q:如果我这么定义alias cd='ls' ls='cd',会有什么后果?

A:运行cd依然会切换目录,运行ls依然会列出文件夹的内容;不要这样定义。

注意

  1. 执行脚本时请注意:
    • 使用 source 命令执行的bash脚本如果执行了 aliasunalias 命令,那么有可能会对终端环境的别名设置产生影响;终端环境的别名设置也可能改变运行结果;
    • 通过 sh 方式调用的 bash 脚本或直接运行当前用户有执行权限的脚本不受终端环境的别名影响。
  2. 删除别名,请查看unalias命令。
  3. 建议您不要对 mv cp rm 等命令的别名设置危险的 -f 选项,比如 alias rm='rm -f'
  4. 需要注意别名是否和其他命令有冲突的情况。
  5. 该命令是 bash 内建命令,相关的帮助信息请查看 help 命令。

其他参考链接

apachectl

Apache服务器前端控制工具

补充说明

apachectl命令 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。

语法

1
apachectl(参数)

参数

  • configtest:检查设置文件中的语法是否正确;
  • fullstatus:显示服务器完整的状态信息;
  • graceful:重新启动Apache服务器,但不会中断原有的连接;
  • help:显示帮助信息;
  • restart:重新启动Apache服务器;
  • start:启动Apache服务器;
  • status:显示服务器摘要的状态信息;
  • stop:停止Apache服务器。

apk

Alpine Linux 下的包管理工具

使用实例

1
2
3
4
5
6
apk install xxx
apk search xxx # 支持正则
apk info xxx # 查看包的详细信息
apk show # list local package
# 卸载并删除 包
apk del openssh openntp vim

升级

upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。

1
2
3
apk update # 更新最新本地镜像源
apk upgrade # 升级软件
apk add --upgrade busybox # 指定升级部分软件包

搜索

1
2
3
4
apk search # 查找所以可用软件包
apk search -v # 查找所以可用软件包及其描述内容
apk search -v 'acf*' # 通过软件包名称查找软件包
apk search -v -d 'docker' # 通过描述文件查找特定的软件包

查看包信息

info命令用于显示软件包的信息。

1
2
3
apk info # 列出所有已安装的软件包
apk info -a zlib # 显示完整的软件包信息
apk info --who-owns /sbin/lbu # 显示指定文件属于的包

笔记

还是蛮喜欢 alpine 的,简单纯粹

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
apk add iproute2 # ss vs netstat
ss -ptl
apk add drill # drill vs nslookup&dig

crond # 开启 cron 服务
crontab -l -e

apk add xxx
apk search -v xxx
apk info -a xxx
apk info
echo -e "http://mirrors.aliyun.com/alpine/v3.6/main\nhttp://mirrors.aliyun.com/alpine/v3.6/community" > /etc/apk/repositories
apk update

# storage
ibu # alpine local backup

# network
echo "shortname" > /etc/hostname
hostname -F /etc/hostname
/etc/hosts
/etc/resolv.conf # conig DNS
modprobe ipv6 # enable ipv6
echo "ipv6" >> /etc/modules
iface # config interface
apk add iptables ip6tables iptables-doc
/etc/init.d/networking restart # activate change
apke add iputils # IPv6 traceroute
traceroute6 ipv6.google.com
awall # alpine wall
# setup a openvpn server

# post-install
/etc/apk/repositories
apk add cherokee --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
apk search -v --description 'NTP' # show description and search from description
apk info -a zlib
apk info -vv|sort
apk info -r -R # require / depency
apk version -v -l '<' # show available updates
apk upgrade -U -a
apk add -u xxx # update xxx

/etc/runlevels # runlevel
apk add openrc # use openrc for init system
rc-update add xxx # set to start on
rc-service xxx start # equal -> /etc/init.d/xxx start
rc-status

adduser xxx
passwd xxx

apk add ansible # server
ssh-keygen
/etc/ansible/hosts
apk add python # node
ssh-copy-id

apk add man man-pages mdocml-apropos less less-doc
export PAGER=less
/etc/rc.conf # /etc/rc.conf -> funny character
apk add bash bash-doc bash-completion # bash
apk add util-linux pciutils usbutils coreutils binutils findutils grep # grep / awk
apk add build-base gcc abuild binutils binutils-doc gcc-doc # compile
apk add cmake cmake-doc extra-cmake-modules extra-cmake-modules-doc
apk add ccache ccache-doc

apk add docker # docker
rc-update add docker boot
rc-service docker start
apk add py-pip
pip install docker-compose
ln -s /usr/bin/docker-compose /usr/bin/doc

# application
apk add openssh # ssh
rc-update add sshd
/etc/init.d/sshd start
/etc/sshd_config
apk add dropbear # another openssh implementation

apropos

在 whatis 数据库中查找字符串

补充说明

apropos命令 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。

如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关键字通过Linux apropos实用程序来搜索它。该实用程序可以搜索关键字并且显示所有包含匹配项的man页面的简短描述。另外,使用man实用程序和-k(关键字)选项,可以得到和用Linux apropos实用程序相同的结果(实际上是相同的命令)。

语法

1
apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ...

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-d, --debug:输出调试信息。
-v, --verbose:输出详细的警告信息。
-r, -- regex:将每个keyword作为正则表达式解释。这是默认行为。每个keyword将匹配手册页和描述。
-w, --wildcard:将每个keyword作为shell样式的通配符解释。
-e, --exact:每个keyword将精确匹配手册页名字和描述。
-a, --and:只显示匹配所有keyword的手册页和描述。默认显示匹配任何keyword的项。
-l, --long:不根据终端宽度缩减输出。
-s section, --section section:只查找指定的手册section。
-m system[,...], --systems=system[,...]:用于查找其它操作系统的手册页。
-M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用 $MANPATH 环境变量。这个选项覆盖 $MANPATH 的内容。
-L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括 $LC_MESSAGE 和 $LANG 。使用该选项提供一个locale字符串来临时更改本地化信息。
-C file, --config-file=file:使用这个用户配置文件而不是默认的~/.manpath。
-h, --help:打印帮助信息并退出。
-V, --version:打印版本信息并退出。

返回值

返回0表示成功,1表示用法、语法或配置文件错误,2表示操作错误,16表示没有找到匹配的内容。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[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
jwhois (1) - client for the whois service
jwhois (rpm) - Internet whois/nicname client.
Net::LDAP::Extension::whoami (3pm) - LDAP Who am I? Operation
w (1) - Show who is logged on and what they are doing
who (1p) - display who is on the system
who (1) - show who is logged on
whoami (1) - print effective userid

[root@localhost ~]# apropos 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
jwhois (1) - client for the whois service
jwhois (rpm) - Internet whois/nicname client.
Net::LDAP::Extension::WhoAmI (3pm) - LDAP Who am I? Operation
w (1) - Show who is logged on and what they are doing
who (1p) - display who is on the system
who (1) - show who is logged on
whoami (1) - print effective userid

查找手册页名字和描述中包含emacs和vi的手册页:

1
apropos -a emacs vi

apt-get

Debian Linux发行版中的APT软件包管理工具

补充说明

apt-get命令 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。

语法

1
apt-get [OPTION] PACKAGE

选项

1
2
3
4
5
6
7
8
9
10
11
apt-get install  # 安装新包
apt-get remove # 卸载已安装的包(保留配置文件)
apt-get purge # 卸载已安装的包(删除配置文件)
apt-get update # 更新软件包列表
apt-get upgrade # 更新所有已安装的包
apt-get autoremove # 卸载已不需要的包依赖
apt-get dist-upgrade # 自动处理依赖包升级
apt-get autoclean # 将已经删除了的软件包的.deb安装文件从硬盘中删除掉
apt-get clean # 删除软件包的安装包

-c:指定配置文件。

参数

  • 管理指令:对APT软件包的管理操作;
  • 软件包:指定要操纵的软件包。

实例

使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下:

1
deb web或[ftp地址] [发行版名字] main/contrib/non-[free]

我们常用的Ubuntu就是一个基于Debian的发行,我们使用apt-get命令获取这个列表,以下是我整理的常用命令:

在修改/etc/apt/sources.list或者/etc/apt/preferences之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的:

1
apt-get update

安装一个新软件包:

1
apt-get install packagename

卸载一个已安装的软件包(保留配置文件):

1
apt-get remove packagename

卸载一个已安装的软件包(删除配置文件):

1
apt-get –purge remove packagename

会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件:

1
apt-get autoclean apt

这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的:

1
apt-get clean

更新所有已安装的软件包:

1
apt-get upgrade

将系统升级到新版本:

1
apt-get dist-upgrade

定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可以使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试:

1
apt-get autoclean

aptitude

Debian Linux系统中软件包管理工具

补充说明

aptitude命令 与apt-get命令一样,都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。

语法

1
aptitude(选项)(参数)

选项

1
2
3
4
5
6
-h:显示帮助信息;
-d:仅下载软件包,不执行安装操作;
-P:每一步操作都要求确认;
-y:所有问题都回答“yes”;
-v:显示附加信息;
-u:启动时下载新的软件包列表。

参数

操作命令:用户管理软件包的操作命令。

实例

以下是我总结的一些常用aptitude命令,仅供参考:

1
2
3
4
5
6
7
8
9
10
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。

apt-key

管理Debian Linux系统中的软件包密钥

补充说明

apt-key命令 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。

语法

1
apt-key(参数)

参数

操作指令:APT密钥操作指令。

实例

1
2
3
4
apt-key list          # 列出已保存在系统中key。
apt-key add keyname # 把下载的key添加到本地trusted数据库中。
apt-key del keyname # 从本地trusted数据库删除key。
apt-key update # 更新本地trusted数据库,删除过期没用的key。

apt-sortpkgs

Debian Linux下对软件包索引文件进行排序的工具

补充说明

apt-sortpkgs命令 是Debian Linux下对软件包索引文件进行排序的简单工具。

语法

1
apt-sortpkgs(选项)(参数)

选项

1
2
-s:使用源索引字段排序;
-h:显示帮助信息。

参数

文件:指定要排序的包含debian包信息的索引文件。

ar

建立或修改备存文件,或是从备存文件中抽取文件

补充说明

ar命令 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限

语法

1
2
用法: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
ar -M [<mri-脚本]

选项

以下内容来自 GNU ar (GNU Binutils) 2.40 版本指令

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
32
33
34
35
36
37
命令:
d - 从归档文件中删除文件
m[ab] - 在归档文件中移动文件
p - 打印在归档文件中找到的文件
q[f] - 将文件快速追加到归档文件中
r[ab][f][u] - 替换归档文件中已有的文件或加入新文件
s - 作为 ranlib 工作
t[O][v] - display contents of the archive
x[o] - 从归档文件中分解文件
特定命令修饰符:
[a] - 将文件置于 [成员名] 之后
[b] - 将文件置于 [成员名] 之前 (于 [i] 相同)
[D] - 将 0 用于时间戳和 uid/gid(默认)
[D] - 使用实际时间戳和 uid/gid
[N] - 使用名称的实例 [数量]
[f] - 截去插入的文件名称
[P] - 在匹配时使用完整的路径名
[o] - 保留原来的日期
[O] - display offsets of files in the archive
[u] - 只替换比当前归档内容更新的文件
通用修饰符:
[c] - 不在必须创建库的时候给出警告
[s] - 创建归档索引 (cf. ranlib)
[l <text> ] - specify the dependencies of this library
[S] - 不要创建符号表
[T] - deprecated, use --thin instead
[v] - 输出较多信息
[V] - 显示版本号
@<file> - 从 <file> 读取选项
--target=BFDNAME - 指定目标对象格式为 BFDNAME
--output=DIRNAME - specify the output directory for extraction operations
--record-libdeps=<text> - specify the dependencies of this library
--thin - make a thin archive
可选项:
--plugin <p> - 加载指定的插件程序
仿真选项:
没有仿真特有的选项

实例

打包文件

1
2
3
4
5
6
7
8
[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文件
ar: 正在创建 one.bak
a - a.c
a - b.c

打包多个文件

1
2
3
4
5
6
[root@localhost ~]# ar rv two.bak *.c  // 打包以.c结尾的文件  
ar: 正在创建 two.bak
a - a.c
a - b.c
a - c.c
a - d.c

显示打包文件的内容

1
2
3
4
5
[root@localhost ~]# ar t two.bak    
a.c
b.c
c.c
d.c

删除打包文件的成员文件

1
2
3
[root@localhost ~]# ar d two.bak a.c b.c c.c  
[root@localhost ~]# ar t two.bak
d.c

arch

显示当前主机的硬件架构类型

概要

1
arch [OPTION]...

主要用途

  • 打印机器架构信息;arch 命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。

选项

1
2
--help       显示帮助信息并退出。
--version 显示版本信息并退出。

例子

1
2
[root@localhost ~]# arch
x86_64

注意

  1. 该命令等价于 uname -m

  2. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 archinfo coreutils 'arch invocation'

arj

用于创建和管理.arj压缩包

补充说明

arj命令.arj 格式的压缩文件的管理器,用于创建和管理 .arj 压缩包。

语法

1
arj(参数)

参数

  • 操作指令:对 .arj 压缩包执行的操作指令;
  • 压缩包名称:指定要操作的arj压缩包名称。

arp

arp 命令用于显示和修改 IP 到 MAC 转换表

补充说明

arp 命令 是 Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。而该命令可以显示和修改 arp 协议解析表中的缓冲数据。

这个核心协议模块实现RFC826中定义的 Address Resolution Protocol [译注:即TCP/IP的第三层到第一层的地址转换协议],用于在直接相连的网络中换第二层硬件地址和 Ipv4 协议地址之间的转换。 用户除非想对其进行配置,否则一般不会直接操作这个模块。

实际上,它提供对核心中其它协议的服务。

用户进程可以使用 packet(7) 的 sockets,收到 ARP 包(译注:一译分组)。 还有一种机制是使用 netlink(7) sockets,在用户空间管理 ARP 缓存的机制。我们也可以通过 ioctl (2) 控制任意 PF_INET socket上的 ARP 表

ARP 模块维护一个硬件地址到协议地址映射的缓存。这个缓存有大小限制,所以不常用的和旧的记录(Entry)将被垃圾收集器清除(garbage-collected),垃圾收集器永远不能删除标为永久的记录。我们可以使用ioctls直接操纵缓冲, 并且其性状可以用下面定义的 sysctl 调节。

如果在限定的时间(见下面的sysctl)内,一条现存映射没有肯定反馈时, 则认为相邻层的缓存记录失效。 为了再次向目标发送数据,ARP将首先试着询问本地arp进程 app_solicit 次,获取更新了的 MAC(介质访问控制)地址。 如果失败,并且旧的MAC地址是已知的,则发送 ucast_solicit 次的 unicast probe。如果仍然失败,则将向网络广播一个新的ARP请求,此时要 有待发送数据的队列

如果 Linux 接到一个地址请求,而且该地址指向 Linux 转发的地址,并且接收接口打开了代理 arp 时,Linux 将自动添加一条非永久的代理 arp 记录;如果存在拒绝到目标的路由,则不添加代理 arp 记录。

语法

1
arp(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
-a # 主机 :显示 arp 缓冲区的所有条目;
-H # 地址类型 :指定 arp 指令使用的地址类型;
-d # 主机 :从 arp 缓冲区中删除指定主机的 arp 条目;
-D # 使用指定接口的硬件地址;
-e # 以 Linux 的显示风格显示 arp 缓冲区中的条目;
-i # 接口 :指定要操作 arp 缓冲区的网络接口;
-s # 主机 MAC 地址 :设置指定的主机的 IP 地址与 MAC 地址的静态映射;
-n # 以数字方式显示 arp 缓冲区中的条目;
-v # 显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息;
-f # 文件 :设置主机的 IP 地址与 MAC 地址的静态映射。

参数

主机:查询 arp 缓冲区中指定主机的 arp 条目。

实例

显示arp 缓冲区内容

1
2
3
4
5
[root@localhost ~]# arp -v
Address HWtype HWaddress Flags Mask Iface
192.168.0.134 ether 00:21:5E:C7:4D:88 C eth1
115.238.144.129 ether 38:22:D6:2F:B2:F1 C eth0
Entries: 2 Skipped: 0 Found: 2

添加静态 arp 映射

1
2
arp -s IP MAC-ADDRESS
arp -s 192.168.1.1 00:b1:b2:b3:b4:b5

删除 arp 缓存条目

1
arp -d 192.168.1.1

arpd

收集免费ARP信息

补充说明

arpd命令 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。

语法

1
arpd(选项)(参数)

选项

1
2
3
4
5
6
-l:将arp数据库输出到标准输出设备显示并退出;
-f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似;
-b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”;
-a:指定目标被认为死掉前查询的次数;
-k:禁止通过内核发送广播查询;
-n:设定缓冲失效时间。

参数

网络接口:指定网络接口。

实例

启动arpd进程:

1
arpd -b /var/tmp/arpd.db

运行一段时间后,查看结果:

1
arpd -l -b /var/tmp/arpd.db

arping

通过发送ARP协议报文测试网络

补充说明

arping命令 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。

语法

1
arping(选项)(参数)

选项

1
2
3
4
5
6
7
-b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。
-q:quiet output不显示任何信息;
-f:表示在收到第一个响应报文后就退出;
-w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出;
-c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止;
-s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratuitous ARP)则设置为目标地址,否则从路由表得出;
-I interface:设置ping使用的网络接口。

参数

目的主机:指定发送ARP报文的目的主机。

实例

1
2
3
4
5
6
7
8
9
10
11
12
[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
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.677ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.691ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.728ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.626ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.292ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.429ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 2.042ms
Sent 8 probes (1 broadcast(s))
Received 8 response(s)

arptables

管理ARP包过滤规则表

补充说明

arptables命令 用来设置、维护和检查Linux内核中的arp包过滤规则表。

语法

1
arptables(选项)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
-A:向规则链中追加规则;
-D:从指定的链中删除规则;
-l:向规则链中插入一条新的规则;
-R:替换指定规则;
-P:设置规则链的默认策略;
-F:刷新指定规则链,将其中的所有规则链删除,但是不改变规则链的默认策略;
-Z:将规则链计数器清零;
-L:显示规则链中的规则列表;
-X:删除指定的空用户自定义规则链;
-h:显示指令帮助信息;
-j:指定满足规则的添加时的目标;
-s:指定要匹配ARP包的源ip地址;
-d:指定要匹配ARP包的目的IP地址。

arpwatch

监听网络上ARP的记录

补充说明

arpwatch命令 用来监听网络上arp的记录。

语法

1
arpwatch(选项)

选项

1
2
3
4
-d:启动排错模式;
-f<记录文件>:设置存储ARP记录的文件,预设为/var/arpwatch/arp.dat;
-i<接口>:指定监听ARP的接口,预设的接口为eth0;
-r<记录文件>:从指定的文件中读取ARP记录,而不是从网络上监听。

as

汇编语言编译器

补充说明

as命令 是GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。

语法

1
as [选项] [参数]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-ac:忽略失败条件;
-ad:忽略调试指令;
-ah:包括高级源;
-al:包括装配;
-am:包括宏扩展;
-an:忽略形式处理;
-as:包括符号;
=file:设置列出文件的名字;
--alternate:以交互宏模式开始;
-f:跳过空白和注释预处理;
-g:产生调试信息;
-J:对于有符号溢出不显示警告信息;
-L:在符号表中保留本地符号;
-o:指定要生成的目标文件;
--statistics:打印汇编所用的最大空间和总时间。

参数

汇编文件:指定要汇编的源文件。

示例

编译一个汇编文件并生成目标文件

1
as -o output.o source.s

忽略调试指令并生成目标文件

1
as -ad -o output.o source.s

生成包含调试信息的目标文件

1
as -g -o output.o source.s

包括宏扩展并生成目标文件

1
as -am -o output.o source.s

打印汇编所用的最大空间和总时间

1
as --statistics -o output.o source.s

跳过空白和注释预处理并生成目标文件

1
as -f -o output.o source.s

at

在指定时间执行一个任务

补充说明

at命令 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

语法

1
at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]

选项

1
2
3
4
5
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。

参数

日期时间:指定任务执行的日期时间。

示例

三天后的下午 5 点钟执行/bin/ls

1
2
3
4
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00

明天17点钟,输出时间到指定文件内:

1
2
3
4
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at> <EOT>
job 8 at 2013-01-06 17:20

计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务:

1
2
3
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root

删除已经设置的任务:

1
2
3
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8 2013-01-06 17:20 a root

显示已经设置的任务内容:

1
2
3
4
5
6
[root@localhost ~]# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22此处省略n个字符
date >/root/2013.log

使用任务文件执行任务:

1
2
3
[root@localhost ~]# echo "/bin/ls" > mytask.txt
[root@localhost ~]# at -f mytask.txt 5pm+3 days
job 9 at 2013-01-08 17:00

指定任务队列执行任务:

1
2
3
4
[root@localhost ~]# at -q b 5pm+3 days
at> /bin/ls
at> <EOT>
job 10 at 2013-01-08 17:00

任务执行完成后发送E-mail通知:

1
2
3
4
[root@localhost ~]# at -m 5pm+3 days
at> /bin/ls
at> <EOT>
job 11 at 2013-01-08 17:00

atop

监控Linux系统资源与进程的工具

补充说明

atop命令 是一款开源的系统监控工具,它以一定的频率记录系统的运行状态,采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中。服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码rpm安装包

语法

1
atop [选项] [参数]

说明

ATOP列

该列显示了主机名、信息采样日期和时间点。

PRC列

该列显示进程整体运行情况:

  • sys、usr字段分别指示进程在内核态和用户态的运行时间
  • #proc字段指示进程总数
  • #zombie字段指示僵尸进程的数量
  • #exit字段指示atop采样周期期间退出的进程数量

CPU列

该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况:

  • sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
  • irq字段指示CPU被用于处理中断的时间比例
  • idle字段指示CPU处在完全空闲状态的时间比例
  • wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例

CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。

cpu列

该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%。

CPL列

该列显示CPU负载情况:

  • avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
  • csw字段指示上下文交换次数
  • intr字段指示中断发生次数

MEM列

该列指示内存的使用情况:

  • tot字段指示物理内存总量
  • free字段指示空闲内存的大小
  • cache字段指示用于页缓存的内存大小
  • buff字段指示用于文件缓存的内存大小
  • slab字段指示系统内核占用的内存大小

SWP列

该列指示交换空间的使用情况:

  • tot字段指示交换区总量
  • free字段指示空闲交换空间大小

PAG列

该列指示虚拟内存分页情况:

  • swin、swout字段:换入和换出内存页数

DSK列

该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息:

  • sda字段:磁盘设备标识
  • busy字段:磁盘忙时比例
  • read、write字段:读、写请求数量

NET列

多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息:

  • XXXi字段指示各层或活动网口收包数目
  • XXXo字段指示各层或活动网口发包数目

atop日志

每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用atop -r XXX命令对日志文件进行查看。日志文件的保存方式如下:

  • 每天保存一个atop日志文件,该日志文件记录当天信息
  • 日志文件以atop_YYYYMMDD的方式命名
  • 设定日志失效期限,自动删除一段时间前的日志文件

atop开发者提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天):

1
(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )& 

最后,我们修改cron文件,每天凌晨执行atop.daily脚本:

1
0 0 * * * root /etc/cron.daily/atop.daily

相关资料