Linux命令知识集锦
快捷键 | 用途 |
ctrl + z |
暂停当前程序,回到shell,注意当前任务不会被终止,只是被挂起(在jobs命令的输出中显示为Stopped)。 注意:挂起的任务不再参与进程调度,要让一个任务在后台持续运行,可以使用 & 后缀调用一个任务的命令行,或者在挂起后对其作业号运行bg命令 |
ctrl + c | 停止当前程序,回到shell |
ctrl + d | 发送EOF |
ctrl + r | 快速搜索命令历史,比上下箭头高效 |
ctrl + s | 使快速刷屏的终端界面静止下来 |
ctrl + q | 恢复ctrl + s的造成的效果 |
ctrl + a | 光标移动到行首 |
ctrl + e | 光标移动到行尾 |
ctrl + u | 从光标位置删除到行首 |
ctrl + k | 从光标位置删除到行尾 |
backspace | 向前删除一个字符 |
ctrl + d | 向后删除一个字符 |
alt + backspace | 向前删除一个单词 |
alt + d | 向后删除一个单词 |
1 2 3 4 5 6 7 8 9 |
#下面的命令将在后台运行 ./command.sh & #下面的命令将不挂掉的在后台运行,标准输出被重定向到nohup.out,即使当前终端退出任然继续运行 #nohup命令可以忽略所有挂断(SIGHUP)信号 nohup ./command.sh & #忽略标准输出、错误。 0 1 2 分别表示标准输入、输出、错误,2>&1表示把标准错误重定向到标准输出,而前者已经重定向到空设备 nohup ./command > /dev/null 2>&1 & |
1 2 3 4 5 6 7 8 9 10 |
# 列出当前Tmux服务中有哪些会话 tmux ls # dev-120: 1 windows (created Fri Feb 23 19:57:35 2018) [180x49] (attached) # 连接到会话 tmux a -t dev-120 # 命令 # 在当前位置插入新窗口 new-window -a |
所有快捷键必须在按下前缀键后才能使用,前缀键默认Ctrl + B
快捷键 | 说明 |
" | 垂直方向拆分面板 |
% | 水平方向拆分面板 |
o | 切换到当前窗口的下一个面板 |
PgUp | 启用Page Up/Down滚动,按Q退出滚动模式 |
$ | 重命名当前会话 |
, | 重命名当前窗口 |
. | 修改窗口编号 |
s | 列出所有会话,通过j,k,回车切换 |
c | 创建新窗口 |
<N> | 切换到第N-1个窗口 |
p | 切换到上一个窗口 |
n | 切换到下一个窗口 |
! | 创建一个新窗口,并把当前面板置于其中 |
Space | 切换面板布局 |
d | 从当前会话断开,回到父Shell |
D | 选择一个会话以断开 |
Shift + Mouse1 | 选中文本,可以进行复制 |
: |
输入命令,示例:set-option -g history-limit 100000 |
命令 | 说明 | ||
ls |
列出目录中的文件 格式: 选项: 举例:
|
||
vdir |
显示详细的目录列表, 与 ls -l 的效果类似 |
||
cp |
拷贝文件到目标文件,或者拷贝若干文件到目录 选项: 举例:
|
||
mv |
文件移动命令,移动文件的位置,移动多个文件到目录中,或者将目录重命名 该命令的行为:
进程打开文件后,系统会返回文件描述符给它。不管何种情况下,mv都不会导致这些已经打开的文件描述符失效。也就是mv不影响已经打开文件的进程使用文件 格式: 选项:
|
||
rm |
删除文件或者目录。默认情况下,该命令不会执行目录删除 格式: 选项: 举例:
|
||
rmdir |
删除空目录 格式: 选项: 举例:
|
||
mkdir |
创建目录或者目录树 格式: 选项: 举例:
|
||
chmod | 修改文件权限,参见:Linux文件和权限 | ||
namei |
显示指定路径上,所有节点的权限:
|
||
umask | 设定创建文件时权限的缺省权限 | ||
chown | 修改一个或多个文件的所有权 | ||
chgrp | 修改一个或多个文件的所属组 | ||
chattr |
修改Linux文件系统上的文件属性 格式: 选项: 模式: mode:+-=效果类似于chmod,后面可以附加以下标记位: a:文件只能被附加内容 举例:
|
||
lsattr |
列出Linux文件系统上文件的属性 格式: 选项: 举例:
|
||
ln |
创建文件链接,TARGET为已经存在的被链接的文件 格式: 选项:
|
||
readlink |
显示符号连接所指向的文件 |
||
find |
在目录层次中搜索匹配的文件 格式: 基本选项: 表达式由选项、测试、动作三部分组成 表达式选项: 表达式测试: 表达式动作: 表达式组合操作符: 举例:
|
||
touch | 更新文件被存取或修改的时间,如果不存在文件则创建 | ||
basename | 从文件名中去掉路径信息,只打印出文件名 | ||
dirname | 从带路径的文件名中去掉文件名,只打印出路径信息 | ||
cksum | sum, cksum, md5sum, sha1sum等均可用来生成校验和,验证文件的完整性 | ||
shred | 用随机字符填充文件,使得文件无法恢复 | ||
mktemp | 使用一个唯一的文件名来创建一个临时文件 | ||
file |
确定文件类型的工具 格式: 选项: 示例:
|
命令 | 说明 | ||
date |
打印日期和时间到 stdout 格式: 选项: 日期时间格式: 举例:
|
||
zdump |
查看特定时区的当前时间 举例:
|
||
time |
输出统计出来的命令执行的时间 举例:
|
||
cal | 从 stdout 中输出一个格式比较整齐的日历 | ||
sleep | 指定需要暂停的秒数并休眠当前进程 | ||
usleep | Microsleep 睡眠微秒 |
命令 | 说明 | ||||
xargs |
从标准输入解析并执行命令行 xargs从标准输入读取数据,使用空白符或者换行符分隔成多个条目(标准输入的空白行被忽略),并执行命令 格式: 选项: 退出状态: 举例:
|
||||
env |
在修改的环境下(即一系列修改后的环境变量)运行一个程序 格式: 选项: |
||||
printenv | 显示出所有的环境变量 | ||||
which | 给出命令的完整路径 | ||||
locate |
给出指定文件的完整位置,示例:
|
||||
whereis | 给出命令的完整路径、man页的完整路径 | ||||
chroot | 改变根目录来运行某个命令 | ||||
pivot_root |
改变根文件系统,将当前进程的根文件系统移动到其它目录,并将另外一个目录作为新的根文件系统 格式:
示例:
需要注意,chroot必须在新、旧根目录都可用。pivot_root可能不会自动为当前Shell chroot |
||||
man |
查看系统手册,可以查看陈故乡、工具、编程函数等各类对象的手册。 格式:
手册是分为多个段(Section)的,各个段中可以具有名字相同的page。当你在网络上看到namespaces(7)这样的Man Page链接时,就知道目标是在段7的namespaces页面。 段的定义如下:
|
命令 | 说明 | ||||
at | 作业控制命令, 用来在指定时间执行给定的命令集合 | ||||
crontab |
维护某个用户的CRON守护程序列表。 格式: 选项: 桌面应用支持: 守护程序脚本中需要添加: export DISPLAY=:0.0 模拟执行: 如果你的脚本在命令行中运行正常,但是在crontab中不能运行,可能是两种环境下的环境变量有差异。参考下面的方法立即模拟crontab的执行: 首先导出crontab的环境变量:
然后模拟执行:
|
||||
cron |
计划任务调度器 |
||||
jobs | 查看所有后台运行的作业,可以看到jobnumber | ||||
batch | 在系统平均载量降到0.8 以下时执行一次性的任务 | ||||
nice | 使用修改后的优先级来运行一个后台作业。 优先级从19(最低)到-20(最高)。 只有root 用户可以设置负的优先级 | ||||
nohup | 保持一个命令的运行,即使用户退出Terminal也不会中断其执行(不会收到SIGHUP信号) | ||||
pidof | 取得一个正在运行的作业的PID | ||||
cron | 任务调度程序 | ||||
watch |
以指定的时间间隔来重复运行一个命令,可以查看程序输出的变化 格式: watch [options] command 选项: -d 高亮显示两次运行的结果变化 示例:
|
||||
fg | 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的作业调到前台 | ||||
bg | 将作业调度到后台执行,如果有多个后台作业处于暂停(ctrl + z将导致暂停)状态,可以用bg %jobnumber将选中的作业调度执行 |
命令 | 说明 | ||
sort |
将文件的每一行作为一个单位,按ASCII顺序进行比较,并按升序输出 格式: 选项: 举例:
|
||
cat,tac |
输出文件的完整内容 tac从文件的结尾列出文件 |
||
tee |
读取标准输入,并将内容输出到文件和标准输出 格式: tee [OPTION]... [FILE]... 选项: -a, --append 附加内容到输出文件尾部,而不是覆盖它的内容 |
||
more, less |
分页显示文本文件或stdout more命令逐页的显示文本的内容,它在启动时读取整个文件的全部内容,按Space键可以向后翻页 less更加强大,它和more一样支持份也显示,但是支持PageUp、PageDown进行前后翻页,并且支持搜索。在提示符(:)后输入:
|
||
rev | 把每一行中的内容反转,并且输出到 stdout 上 | ||
uniq |
过滤器,将会删除一个已排序文件中的重复行.这个命令经常出现在 sort 命令的管道后 选项: -c 在输出行前面加上每行在输入文件中出现的次数 举例
|
||
expand, unexpand | expand 将会把每个tab 转化为一个空格;unexpand功能相反 | ||
dos2unix | 转换换行符的格式 | ||
cut |
从文件中提取特定字段(列) 选项: 举例:
|
||
paste | 将多个文件,以每个文件一列的形式合并到一个文件 | ||
join |
能够操作2个文件,它可以将那些具有特定标记域的行合并起来,并且将结果输出到stdout |
||
head | 将一个文件的头( 默认为10 行)打印到 stdout 上 | ||
tail |
将一个文件的尾( 默认为10 行)打印到 stdout 上 选项: -f 继续显示添加到文件中的行 |
||
grep |
使用正则表达式的多用途文本搜索工具 格式: 选项: -e PATTERN, --regexp=PATTERN 指定匹配的PATTERN -c, --count 取消正常输出,仅显示输入文件中匹配的行总数 -b, --byte-offset 在每行前打印基于文件的行首的偏移量,如果指定-o则打印匹配部分的偏移量 -a, --text 将二进制文件作为文本处理 --line-buffered 使用输出缓冲 上下文行控制: -A NUM, --after-context=NUM 打印匹配行后面的NUM行 举例:
|
||
egrep |
基于正则式的grep 举例:
|
||
wc |
可以统计文件或 I/O 流中的单词数量 选项: |
||
tr |
读取标准输入,转换或者删除字符,并打印到标准输出 格式: 选项: 举例:
|
||
fold | 将输入按照指定宽度进行折行 | ||
fmt | 简单的文件格式化器,通常用在管道中,将一个比较长的文本行输出进行折行 | ||
col | 来滤除标准输入的反向换行符号 | ||
column |
将“列类型”的文本转化为“易于打印”的表格式进行输出 可以用来按列对齐,例如:
|
||
colrm | 列删除过滤器。 这个工具将会从文件中删除指定的列并且写到文件中 | ||
nl | 计算行号过滤器,在输出中添加前缀的行号 | ||
pr | 格式化打印过滤器. 这个命令会将文件(或stdout)分页 | ||
gettext | 将程序的输出翻译或者本地化为不同国家语言 | ||
iconv | 将文件转化为不同编码格式(字符集) | ||
strings | 在二进制或数据文件中找出可打印字符 | ||
diff |
以一行接一行的形式来比较目标文件 格式: 参数: 退出码: |
||
jq |
命令行JSON处理器,能够选取、迭代、reduce、修改JSON文档 格式:jq [options...] filter [files...] 选项: --seq 使用MIME类型application/json-seq来分隔jq输入输出的JSON文档,这意味着JSON记录前后分别有ASCII字符RS、LF。无法解析的输入JSON被忽略,同时忽略所有后续输入,直到RS出现 过滤器: 每个jq程序都称为过滤器,它将输入转换为输出,大量内置过滤器可以实现字段抽取、类型转换等标准化工作 过滤器可以用管道的形式连接起来,你还可以把过滤器的输出收集到数组中。某些过滤器会产生多个输出,通过管道连接在其后的过滤器会对每个输出执行处理 需要注意,任何过滤器都具有输入输出,哪怕是18这样的字面值也可以是过滤器——不管输入是什么,都输出18 基本过滤器: . 直接输出输入,不处理 .foo.bar属性点号导航,路径有null值则返回null,如果JSON键有特殊字符,需要双引号 ."foo$",注意.foo.bar 和 .foo|.bar这种管道形式是等价的 .foo?,类似于.foo,但是当.不是对象或数组时不会报错,例如 echo '{"name":"alex"}' | jq '[.age?]'返回 [null] .[<string>]这种形式放为属性也可以 .[2]访问数组元素 .[10:15] 切片,获得子数组 .[] 迭代数组的所有元素,每个元素产生一个输出 filter1,filter2分别执行两个过滤器,然后先输出filter1的全部输出,后输出filter2的全部输出 filter1|filter2 filter1的输出作为filter2的输入 类型和值: []用于构造数组,[.user, .projects[]]表示读取user属性、projects的所有元素,合并为一个数组 {} 用于构造对象,{user: .user, title: .title}可以简写为 {user, title},用括号包围key,表示解析它的值,例如 {(.user): .titles}可以产生{"alex": [1,2]} 内置操作符和函数: + 数字加、数组连接、字符串连接 格式化和转义: @text 调用tostring |
AWK编程语言的GNU实现。
1 2 3 4 5 6 7 8 9 10 |
# GNU的Awk实现 gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ... gawk [ POSIX or GNU style options ] [ -- ] program-text file ... # pgawk是剖析版本的Awk,速度比较慢 pgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ... pgawk [ POSIX or GNU style options ] [ -- ] program-text file ... # dgawk是Awk的调试器 dgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ... |
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 |
# 读取文件的第1、4列 awk '{print $1, $4}' filename # 列出最近5个登陆记录,逐行处理。以空格作为字段分隔符,打印第一个字段 # $0表示所有字段,$1表示第一个字段,类推 last -n 5 | awk '{print $1}' # 行过滤,仅仅显示第一列为tcp6且第六列为SYN_SENT的行 netstat -tn | awk '$1=="tcp6" && $6=="SYN_SENT"' # 同上,但是包含表头(第一行) netstat -tn | awk '$1=="tcp6" && $6=="SYN_SENT" || NR==1' # 使用 : 作为分隔符,取第1、2个字段,之间用制表符分隔 cat /etc/passwd | awk -F ':' '{print $1 "\t" $2 }' # 使用正则表达式作为分隔符 echo 'Hello darkness my old friend' | awk -F'\\s+' '{print "["$5"]"}' # [friend] # 使用正则式进行行过滤 # 如果第六列匹配正则式FIN,或者是第一行,则打印4、5、6列,表头总是打印,输出字段使用制表符分隔 awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt # 正则式取反 netstat | awk '!/WAIT/' # BEGIN 在处理输入之前执行 # END 在处理完所有输入行之后执行 cat /etc/passwd | head -5 | awk -F':' 'BEGIN {print "用户名"} {print $1} END {print "结束"}' # 用户名 # root # daemon # bin # sys # sync # 结束 # 格式化输出,C语言风格 netstat -nlt4 | awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' # 拆分输出:仅仅输出指定的列 netstat -nt | awk 'NR!=1{print > $6}' # 统计数量 # 在映射a中存放每个网络状态的计数,默认计数为0,每次自动增加计数 # 处理完所有行后,遍历映射并打印 netstat -t | awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}' # LAST_ACK, 4 # CLOSE_WAIT, 1 # ESTABLISHED, 22 # Foreign, 1 # CLOSING, 1 # TIME_WAIT, 1 # 寻找log中长度大于80的行 awk 'length>80' log |
变量 | 说明 |
$0 | 当前记录,即整个行的内容 |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格或Tab |
NF | 当前记录中的字段个数,就是有多少列 |
NR |
已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中 |
FNR | 已经读出的记录数,就是行号,从1开始,如果有多个文件话,每个文件分别计数 |
RS | 输入的记录分隔符, 默认为换行符 |
OFS | 输出字段分隔符, 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
FILENAME | 当前输入文件的名字 |
ENVIRON | 环境变量的Map |
函数 | 说明 | ||
数学函数 | |||
atan2( y, x ) | 返回 y/x 的反正切 | ||
cos( x ) | 返回 x 的余弦;x 是弧度 | ||
sin( x ) | 返回 x 的正弦;x 是弧度 | ||
exp( x ) | 返回 x 幂函数 | ||
log( x ) | 返回 x 的自然对数 | ||
sqrt( x ) | 返回 x 平方根 | ||
int( x ) | 返回 x 的截断至整数的值 | ||
rand( ) | 返回随机数字 n,其中 0 <= n < 1 | ||
srand( [Expr] ) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用时间。返回先前的种子值 | ||
字符串函数 | |||
length [(String)] | 计算字符串中的字符数量 | ||
blength [(String)] | 计算字符串的字节数 | ||
sub( Ere, Repl, [ In ] ) |
用Repl替换In中第一个匹配正则式Ere的子串。如果不指定In则使用$0 注意:In直接被修改,返回值是替换的子串数量 示例:
|
||
gsub( Ere, Repl, [ In ] ) | 用Repl替换In中全部的匹配正则式Ere的子串。如果不指定In则使用$0 | ||
index( Str, Sub ) | 返回Sub第一次出现在Str中的位置,索引以1为基准,如果不存在Sub子串返回0 | ||
substr( Str, M, [ N ] ) | 提取Str从索引M开始,N结束的子串,不指定N则到结尾 | ||
match( Str, Ere ) | 返回Str匹配Ere的子串的出现位置,如果没有匹配返回0 | ||
split( Str, A, [Ere] ) | 分割字符串Str,将子串存放到数组A中。分隔符默认等于-F参数指定的字符,或者Ere正则式 | ||
tolower( Str ) toupper( Str ) |
大小写转换 | ||
sprintf(Format, Expr, . . . ) | 格式化打印: %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法 |
||
时间函数 | |||
mktime( YYYY MM DD HH MM SS[ DST]) | 解析字符串为时间 | ||
strftime([format [, timestamp]]) |
格式化时间: %a 星期几的缩写(Sun) |
||
systime() | 返回UNIX纪元到现在的秒数 | ||
其它函数 | |||
close(expr) |
关闭由print、printf、getline打开的文件或管道,关闭成功返回0 如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的 |
||
system(cmd) |
执行cmd参数给出的系统命令,返回退出状态。示例:
|
||
getline |
逐行读取外部文件的内容。示例:
|
||
exit | 提前结束处理,不再处理后续的记录。如果awk位于管道中间,后续命令获得处理机会 |
Awk程序通常是读取一个个记录(默认每行是一个记录),并寻找到其中匹配pattern的行,执行指定的动作:
1 2 3 4 5 6 7 8 9 10 |
pattern { action } # 示例 $3 == 0 { print $1 } # 可以不指定pattern,这样就匹配所有记录 { print } # 不带参数的print等价于print $0 # 起始和结束块,分别在处理任何记录之前、处理所有记录之后执行 BEGIN { action } END { action } |
Pattern分为:BEGIN、END、 表达式、/正则表达式/ 、Pattern的逻辑组合,范围模式几类。
范围模式: pattern1,pattern2 { 语句 },匹配从匹配pattern1的行、到匹配pattern2的行之间的所有行,包括匹配pattern1、pattern2的那两个首尾行。
你可以对记录中的字段,进行各种运算:
1 2 |
{ print $1, $2 * $3 } $2 * $3 > 50 { printf("$%.2f for %s\n", $2 * $3, $1) } |
pattern可以通过逻辑操作符进行组合,包括: &&、 ||和 !,支持使用括号:
1 |
!($2 < 4 && $3 < 20) |
字符串拼接语法 —— 直接连续写多个字符串(或变量)即可,不需要操作符,空格被忽略:
1 2 3 4 5 |
netstat -nlt4 | awk 'NR > 2 {print $4}' | awk -F':' '{print $1}' | sort -u | \ # 赋值语法 # 字符串拼接语法 awk '{ips = ips $1 "|"} END{print ips}' # 0.0.0.0|10.0.0.1|127.0.0.1|172.17.0.1|172.18.0.1|172.21.0.1|192.168.142.140| |
if-else分支结构:
1 2 3 4 |
echo -e "0\n-1\n1" | awk '{ if($1>0) print "TRUE"; else if($1<0) print "N/A"; else print "FALSE" }' # FALSE # N/A # TRUE |
while循环结构:
1 |
while (i <= $3) { i = i + 1 } |
for循环结构:
1 2 3 4 |
{ for (i = 1; i <= $3; i = i + 1) printf("\t%.2f\n", $1 * (1 + $2) ^ i) } |
1 2 3 4 5 6 7 8 9 10 |
{ line[NR] = $0 } # 记录每个输入行,将其存为数组元素 # 逆序打印 END { i = NR while (i > 0) { print line[i] i = i - 1 } } |
sed是流式文本编辑器,该命令用于在输入流(文件或者管道输入)上执行基本的文本转换,该命令只会对输入进行一次逐行的顺序的处理,因而效率较高。
1 |
sed [OPTION]... {script-only-if-no-other-script} [input-file]... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-n, --quiet, --silent #不自动打印当前要处理的行 -e script, --expression=script #指定需要执行的命令(脚本),可以指定多个-e -f script-file, --file=script-file #指定文件中的脚本 --follow-symlinks #跟随符号链接到目标文件 -i[SUFFIX], --in-place[=SUFFIX] #指定备份文件,修改直接应用到原始文件 -l N, --line-length=N #对于l类型的命令,指定期望的换行的行长度阈值 --posix #禁用所有GNU扩展 -r, --regexp-extended #在此脚本中使用正则式 -s, --separate #把输入文件看作若干单个文件,而不是一个连续的流 -u, --unbuffered #使用尽量少的缓冲区,尽量读入较少的文件内容,并把输出刷空 -z, --null-data #使用NUL字符来划分行 |
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 |
[address][!] cmd [cmd-args] # address 指定后面的命令的作用范围,有以下几种方式: # 不指定:作用于输入的所用行 # n,m:从第n到第m行,$表示最后一行 # n,+m:从第n行开始,到n+m行为止 # n~m:从第n行开始,每隔m行执行一次命令 # /pattern/:基于正则式匹配,所有匹配的行均执行命令 # /pattern1/,/pattern2/:基于正则式匹配,从pattern1匹配的行开始,到pattern2匹配的行为止 #命令,包括添加、插入、替换、删除、打印等 # p 打印 # = 打印行号 # [addr1[,addr2]] i text 在指定的行的前面插入文本 # [addr1[,addr2]] a text 在指定的行的后面添加文本 # [addr1[,addr2]] d 删除指定的行 # [addr1[,addr2]] s/pattern/replace/[opts] 把指定的行内的pattern替换为replace, # 默认只会替换第一个匹配pattern的文本 # 选项: # n 替换第n个匹配 # g 替换所有匹配 # p 如果替换成功打印该行 # w 存储改变的行到文件 # i 匹配时忽略大小写 # s;pattern;replace; 如果replace中有/,可以用;代替/ |
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 |
# 替换文本中每行的所有WangZhen为Alex sed "s/WangZhen/Alex/g" greetings.txt > result.txt # 同上,直接写回到原文件 sed -i "s/WangZhen/Alex/g" greetings.txt # 只替换每行的第2个匹配 sed -i "s/WangZhen/Alex/2" greetings.txt # 只替换每行的第3个以后的匹配 sed -i "s/WangZhen/Alex/3g" greetings.txt # 只替换3-10行的内容 sed -i "3,10s/WangZhen/Alex/g" greetings.txt # 在每一行的开始处添加一个# sed 's/^/#/g' greetings.txt # 在每行的结尾添加一个# sed 's/$/#/g' greetings.txt # 同时执行多个脚本(两种等价方式) sed '1,3s/WangZhen/Alex/g; 3,$s/Is/Are/g' greetings.txt sed -e '1,3s/WangZhen/Alex/g' -e '3,$s/Is/Are/g' greetings.txt # 正则式匹配引用,使用\1、\2依次引用第1、2个括号内的匹配内容 # 正则式([^,]*).*says(.*) #替换为:\1:\2 sed 's/\([^,]*\).*says\(.*\)/\1:\2/g' greetings.txt # 在输入的每一行首部,加上 docker.gmem.cc/ sed "s;^;docker.gmem.cc/;" # 常用正则式关键字 # ^ 开头 # $ 结尾 # \< 词首,例如 \<abc 表示abc开头的词 # \> 词尾 # . 任意单词 # * 重复 # [] 字符集 |
命令 | 说明 | ||
tar |
打包和解压文件。该命令支持使用短横线(-)来代替标准输入/输出,以代替输入/输出tar文件名 格式: 选项: 举例:
|
||
7za |
高压缩比压缩工具。支持7z, ZIP, CAB, ARJ, GZIP, BZIP2, TAR, CPIO, RPM, DEB等格式 格式: 子命令: 选项: 举例:
|
||
shar | 标准的 GNU/UNIX 压缩工具 | ||
bzip2 | 用来压缩的一个可选的工具, 通常比 gzip 命令压缩率更高 | ||
zip, unzip | 跨平台的文件归档和压缩工具 | ||
gzip,gunzip |
跨平台的文件归档和压缩工具 举例:
|
||
cpio |
从归档文件拷贝出、拷贝到归档文件 拷出模式: 将文件拷贝到归档文件中,从stdin读取一系列文件名(每个一行),然后将归档文件写出到标准输出 拷入模式: 从归档文件拷贝文件,或者列出归档文件的内容 选项: -d 如果必要,创建需要的目录 |
命令 | 说明 | ||
factor | 分解质因数,空格分隔结果 | ||
bc | 支持浮点运算 | ||
expr |
通用求值表达式:通过给定的操作(参数必须以空格分开)连接参数进行算术操作、比较操作、字符串操作或者是逻辑操作 举例:
|
||
seq |
打印一系列连续的数字 格式:
|
命令 | 说明 | ||||||||||
host |
DNS查找工具,用于进行域名和IP地址的双向转换 格式: 选项: 举例:
|
||||||||||
nslookup |
和DNS服务器交互。如果不指定任何参数,进入交互模式 格式: nslookup [-option] [name | -] [server] 选项: [no]debug 调试模式 示例:
|
||||||||||
arp |
操控系统的ARP缓存 格式: 选项: 举例:
|
||||||||||
arp-scan |
ARP扫描器 选项: 举例:
|
||||||||||
traceroute |
跟踪到目的主机的路由信息 格式:
选项: 举例:
|
||||||||||
mtr |
mtr是一个包含traceroute和ping功能的单一网络诊断工具,mtr命令启动后,会诊断当前主机和目标主机之间的网络状况,它会特意利用较低TTL发送封包,突然增加的数据报丢失率或者响应时间通常提示较差的网络状况或者网络负载过高。支持IP ECHO、UDP、TCP三种类型的封包 格式:
选项: -r --report 以报告模式运行,将运行-c指定的次数,然后打印统计信息并退出 |
||||||||||
ping |
发送因特网控制报文协议(ICMP)的ECHO_REQUEST数据报到网络上的主机 选项: 举例:
|
||||||||||
whois | 执行DNS注册信息查询 | ||||||||||
curl |
向服务器传输、从服务器读取数据。支持DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, 格式: curl [options] [URL...] 选项: # 显示进度条 content_type MIME类型 -s 安静模式,不显示进度和错误信息 示例:
|
||||||||||
wget |
非交互的从web或ftp站点上取得或下载文件 格式: 基本选项: 举例:
|
||||||||||
route |
显示或修改内核路由表信息 格式: 选项: 举例:
输出: Metric 到目标的“距离”,使用hops计数表示 |
||||||||||
netcat nc |
通过TCP和UDP在网络中读写数据 示例:
|
||||||||||
socat |
多用途的套接字转发器,能够建立两个双向套接字,并在其间中继数据 socat命令实例的生命周期分为以下阶段:
格式:
-d 打印更多信息,指定-d多次,则信息更详细,最多4个 地址规格: 地址类型关键字:[地址参数1:地址参数...][,地址选项1,地址选项2...] 地址类型关键字大小写不敏感,对于某些地址类型,关键字可以省略 如果地址规格以数字开头,则被假设为FD(原始文件描述符)地址,如果在第一个:或,之前出现 /,则假设关键字为GOPEN(一般性文件打开) 地址类型: CREATE:<filename> 以create()打开指定的路径,并使用FD进行写(以create打开的不支持读)操作 示例:
|
||||||||||
netstat |
显示当前网络的统计和信息, 比如网络连接、路由表、网卡统计、组播关系 格式:
子命令描述: 选项: 输出: --- 默认输出 ---
Active Internet connections (TCP, UDP, raw) Active UNIX domain Sockets --- --route输出 ---
Destination 目标网络或者主机 --- --groups输出 ---
Interface 参与组播的网络接口 举例:
|
||||||||||
tcpdump |
网络包嗅探器。把匹配指定expression的包头都显示出来。在tcpdump运行结束后,会报告以下内容: 格式: tcpdump 选项: -A 以ASCII形式打印每个包(除去连接层头部) 关于表达式 关于iptables: 对于出站流量来说,tcpdump是最后一个看见流量的软件,也就是说,只要tcpdump看到流量,就说明本机没有软件层次上的防火墙措施。如果iptables DROP掉了包,则tcpdump不会抓到包 iptables ⇨ tcpdump ⇨ 网络接口 ⇨网线 对于入站流量来说,tcpdump是第一个看见流量的软件 网线 ⇨ 网络接口 ⇨ tcpdump ⇨ netfilter/iptables 举例:
|
||||||||||
ssh |
OpenSSH客户端 格式: 描述: 选项:
否则总是绑定到127.0.0.1 -t 强制分配伪终端 端口转发功能: SSH客户端支持三种端口转发(SSH隧道): -L 本机网络接口:本机端口:远程网络接口:远程端口。正向转发,本机可以通过本机端口访问远程服务 注意:
举例:
|
||||||||||
sshpass |
通过命令行传递SSH密码 执行下面的命令安装此工具:
示例:
|
||||||||||
scp |
安全拷贝(远程文件拷贝) 格式: 描述: Windows下可以安装WinSSHD以支持SCP。 选项: 举例:
|
||||||||||
sftp |
SFTP客户端。该客户端使用SSH协议进行通信 选项: 交互式命令: 举例:
|
||||||||||
nmap |
执行网络探测与端口扫描 格式: 目标选项: 其它选项: 举例:
|
||||||||||
ifconfig |
查看或者配置网络接口 描述: 格式: 选项: 举例:
|
||||||||||
ip |
显示或者配置路由、网卡、策略路由或者隧道 关于Linux路由的更多知识,参考:Linux网络知识集锦 格式:
选项: 对象: 举例:
|
||||||||||
ip route |
管理路由表 格式:
路由类型:
示例:
|
||||||||||
ip rule |
管理路由策略数据库。典型的路由算法仅仅根据目的地址来决定如何路由,如果需要更加高级的路由策略 —— 例如基于源地址、IP协议、传输协议端口甚至协议载荷,则需要使用该命令。这种高级路由叫做policy routing 为了实现策略路由,原先的基于目的地址的、以最长匹配规则排序的路由表,被替换为路由策略数据库(RPDB)。通过执行数据库中的一些规则,来决定如何路由 每个策略路由规则由选择器SELECTOR和动作断言ACTION PREDICTATE构成。RPDB按照规则的优先级降序(数字越小优先级越高)的被扫描,每个规则的SELECTOR针对封包的{source address, destination address, incoming interface, tos, fwmark}进行匹配判断,如果匹配成功,则ACTION被执行。 ACTION PREDICTATE可以返回成功,这种情况下它要么给出路由目的地址,要么给出失败提示,且RPDB查找终止。否则(不成功)则继续匹配下一条RPDB规则 在内核启动时,它会初始化具有三条规则的RPDB:
每个RPDB条目都包含一些额外的属性,例如每个规则都有向路由表的指针。NAT和masquerading规则包含一个属性,用于选择转换/掩码的IP地址。 RPDB包含以下几种类型的规则:
格式:
其中SELECTOR可以是(以下项中的多个):
其中ACTION可以是:
ACTION后面可以跟着SUPPRESSOR:[ suppress_prefixlength NUMBER ] [ suppress_ifgroup GROUP ] 示例:
|
||||||||||
bridge |
显示/操控网桥地址和设备 举例:
|
||||||||||
brctl |
操控网桥 格式: brctl [commands] 子命令:
示例:
|
||||||||||
iwconfig |
支持与网线网络接口相关的配置 |
||||||||||
iwlist |
获取无线网络的详细信息 举例:
|
||||||||||
wpa_cli |
WPA命令行客户端 举例:
|
||||||||||
ifup |
激活一个网络接口。该命令与下面两个命令与/etc/network/interfaces文件一起工作 |
||||||||||
ifdown |
停用一个网络接口 |
||||||||||
ifquery |
解析一个网络接口的配置 |
||||||||||
iptables | 参考重温Iptables | ||||||||||
ipset |
IP Sets的管理工具 在iptables中,如果我们去匹配多个无规律的IP地址的话就会写入多条iptables的规则,当如果需要匹配几百甚至上千个IP地址的话,那么性能就会受到严重的影响。IP Sets可以解决这个问题 IP Sets是内核框架,可以被ipset命令管理。根据类型的不同,一个IP Set可以存放多个IP地址、网络号、TCP/UDP端口、MAC地址、网络接口名,以及所有这些的组合。当用一个条目来比对,看是否匹配IP Set时,速度极快 应用场景:
子命令:
CREATE/ADD选项 timeout 指定条目的超时 IPSet类型: bitmap:ip 使用一段内存存储IPv4主机或网络地址,最多存储65536个条目 在iptables中使用: 你可以使用匹配扩展set来引用IPSet:
|
||||||||||
iptables-save |
导出iptables配置到标准输出 |
||||||||||
iptables-restore |
从文件恢复iptables配置 |
||||||||||
conntrack |
此命令提供netfilter的连接跟踪系统的全功能用户空间接口,代替/proc/net/ip_conntrack的功能。使用该命令你可以检索、列出、探查、维护Linux内核的连接跟踪子系统,例如:
连接跟踪系统在内部,维护两个表:
格式:
一般选项: -z, --zero 读取后自动清零计数器,仅仅和
-L联用 过滤器参数: -s, --orig-src IP_ADDRESS 最初通信方向的源地址 TCP过滤参数: --sport, --orig-port-src 最初通信方向的源端口 UDP过滤参数: --sport, --orig-port-src 最初通信方向的源端口 ICMP过滤参数: --icmp-type TYPE ICMP类型 示例:
|
||||||||||
pen |
负载均衡器,支持基于TCP的协议的负载均衡,例如HTTP、SMTP 此LB能够跟踪每个请求,并将其转发给客户端上一次访问的服务器(会话绑定),这种LB算法比RR更加高级 格式:
选项: -C 指定控制端口,此端口接收发送给LB的命令 示例:
|
||||||||||
snmp |
snmp包提供了若干命令,它们的格式如下:
它们公共的选项如下: -v 指定需要使用的SNMP协议的版本 命令举例:
|
||||||||||
justniffer |
这是一个TCP包嗅探器,它能够重建TCP流,并且对请求/应答风格的协议做了优化。justniffer还能重建HTTP内容并保存到磁盘 安装:
格式:
选项: -i 需要嗅探的接口名称,例如eth0 日志格式: %close.originator([not applicable string]) 时间戳格式: 举例:
|
||||||||||
setserial |
获取或者设置Linux的串口信息。 格式: 选项: |
||||||||||
ethtool |
查看以太网接口的信息,例如连接速度。示例:
|
命令 | 说明 | ||||
users | 显示所有的登录的用户 | ||||
last | 显示最近登陆的用户列表 | ||||
groups | 列出用户(如果不指定用户则默认当前用户)和他所属于的组,例如 groups alex | ||||
id |
显示用户标识符信息,举例:
|
||||
useradd |
创建一个新用户或更新默认新用户信息 格式: 选项: -b 指定基目录,基目录/账户名就是家目录,基目录默认/home |
||||
userdel |
删除用户 选项: |
||||
usermod |
修改用户帐号。 可以修改密码、 组身份、 截止日期等。修改后的用户可能需要重新登录才能生效 选项: 示例:
|
||||
gpasswd |
管理配置文件/etc/group和/etc/gshadow
|
||||
groupmod | 修改指定组 | ||||
newgrp | 修改当前用户的GID | ||||
passwd |
设置、修改、或者删除用户的密码。普通用户只能修改自己的密码,root则可以修改任何用户的密码。 格式: 选项: 举例:
|
||||
who | 显示本系统上的登陆用户 | ||||
w |
显示哪些人登录了,他们在做什么 格式:
示例:
|
||||
logname | 显示当前用户的名称,类似的命令:whoami | ||||
hostname | 显示系统的主机名字 | ||||
hostid | 显示主机的 32 位的16 进制ID | ||||
uname | 显示操作系统的信息,例如内核版本 | ||||
arch | 显示当前系统的指令集架构,相当于uname -m | ||||
id | 打印当前进程的真实和有效用户ID、组ID | ||||
tty | 显示当前登录终端的设备映射文件 | ||||
init | init命令是所有进程的父进程。在系统启动的最后一步调用 | ||||
runlevel | 显示当前和最后的运行级别 | ||||
reboot | 重新启动主机 | ||||
shutdown | 关闭主机,类似的还有halt | ||||
trap | 捕获信号并设置信号处理逻辑,参考Bash学习笔记 | ||||
pgrep,pkill |
查找或杀死进程 格式: 选项: 退出状态: 举例:
|
||||
service |
启动或停止一个System V系统服务(/etc/init.d中的脚本)或者Upstart Job(/etc/init中的配置文件) 格式:
SCRIPT要么对应 /etc/init.d/SCRIPT ,要么对应 /etc/init/SCRIPT.conf ,如果这两个目录都存在SCRIPT则Upstart Job的优先级更高 可以调用哪些COMMAND则取决于脚本,service将COMMAND和OPTIONS直接传递给对应的脚本 每个脚本至少应该定义start、stop命令,COMMAND restart相当于先运行stop,紧接着运行start |
||||
monit |
监控进程、程序、文件的状态。可以完成自动重启 |
||||
chkconfig |
新近的Ubuntu版本已经不支持该命令,使用update-rc.d命令代替之 显示和管理在启动过程中所开启的服务,该命令提供简单的方式管理/etc/rc[0-6].d目录中的符号链接 格式:
选项: |
||||
sysv-rc-conf |
提供图形界面来管理System V风格的启动脚本:
|
||||
update-rc.d |
安装或者移除System V风格的初始化脚本的符号链接 格式:
选项: |
||||
initctl |
管理Upstart任务,通过此命令管理员可以与基于Upstart的init进程交互。某些发行版中,此命令可以和service替换使用,例如 initctl start srv 效果等同于 service srv start 格式:
子命令: |
||||
systemctl |
控制和管理基于Systemd的服务,以及Systemd init机制本身。 格式:
子命令: 示例:
|
||||
journalctl |
查询systemd日志,即systemd-journald.service写入磁盘的日志内容。如果调用时不添加任何参数,则输出所有已经收集的日志内容。你可以指定多个FIELD=VALUE格式过滤条件,例如_SYSTEMD_UNIT=tomcat8.service。如果:
所有用户被授权访问自己私有的日志。默认的仅仅root和systemd-journal组的用户能够访问系统日志、其它用户的日志 格式:journalctl [OPTIONS...] [MATCHES...] 选项: 示例:
|
||||
systemd-analyze |
分析系统的启动耗时 示例:
|
||||
hostnamectl |
查看或者设置主机名信息 示例:
|
||||
localectl |
进行本地化配置 示例:
|
||||
timedatectl |
时区、日期、时间设置 示例:
|
||||
chronyc |
时钟同步命令 示例:
|
||||
loginctl |
查看当前登录的用户或会话 示例:
|
||||
su |
改变用户身份,以另外一个账户登录,如果不加参数,则改变为root 格式: |
||||
sudo |
以root或其他用户身份来执行一个命令。只能应用于程序,不能应用于Bash内置命令,例如: sudo cd /var/lib/mysql不会达到预期效果。 格式: 选项: 举例:
|
||||
mount |
挂载一个文件系统, 通常都用来安装外部设备, 比如软盘或CDROM。Unix系统中所有可访问的文件,都组织在单棵树中,这棵树的根叫做 / 。树中的文件可以分布在多个设备上。mount命令的职责就是将设备附到文件系统树的某个节点上。 大部分设备都由特殊的设备文件来代表。例外情况如NFS,它由gmem.cc:/dir这样的URI表示。引用设备文件时,也可以使用LABEL或UUID。 注意:
绑定挂载 从内核2.4开始,允许将文件系统树的某一部分,重新挂载到另外一个位置: mount --bind olddir newdir 在fstab中,进行绑定挂载的格式是:/olddir /newdir none bind 执行绑定挂载后,olddir的内容可以在newdir处访问,它们一模一样。 绑定挂载也可以用来挂载单个文件。 默认情况下,绑定挂载不会处理子挂载,也就是说,/olddir的某个子目录被作为挂载点的情况,其内容无法体现在/newdir中,要解决此问题,可以使用: mount --rbind olddir newdir 移动操作 从2.5.1开始,支持将一个挂载的子树移动到另外一个位置: mount --move olddir newdir 注意olddir必须是一个挂载点 共享子树 从2.6.15开始,可以将挂载、及其子挂载标记为shared, private, slave 或 unbindable。可以在容器技术中使用: mount --make-shared mountpoint 格式: 选项: -a --all 挂载所有fstab中包括的所有文件系统 举例:
|
||||
umount |
卸载一个当前已经 mount 的文件系统 举例:
|
||||
getconf |
查询系统配置变量 格式: 选项: 举例:
|
||||
mkswap | 创建一个交换分区或文件,随后必须马上使用swapon来启用 | ||||
swapon | 启用/禁用交换分区或文件,通常在启动和关机的时候才有效 | ||||
swapoff | |||||
mke2fs | 创建ext2文件系统 | ||||
tune2fs | 调整ext2文件系统。 可以用来修改文件系统参数 | ||||
dumpe2fs | 打印非常详细的文件系统信息 | ||||
tune2fs |
显示或调整ext2/ext3/ext4文件系统的参数 举例:
|
||||
du | 递归的显示磁盘文件的使用状况。默认从当前工作目录递归 | ||||
hdparm | 列出或修改硬盘参数 | ||||
fdisk |
在存储设备上创建和修改一个分区表。该命令理解DOS风格的分区表、BSD|SUN风格的disklables。fdisk不理解GUID分区表(GPTs),它也不是为了大型分区设计的,你可以使用GNU parted代替它 硬盘可以被划分为1-N个逻辑磁盘——分区(partitions),关于分区的信息记录在分区表中,分区表位于磁盘的0扇区 Linux至少需要一个分区,作为其根文件系统。Linux可以使用交换文件或者交换分区,然而后者效率高,因此Linux系统的第二个分区常常是swap分区。在Intel兼容硬件上启动机器的BIOS最多只能访问磁盘的前1024个柱面(cylinders),因此,大磁盘用户常常划分从若干MB的小分区,挂载到/boot,存储内核镜像、一部分启动时需要的辅助文件 格式:
选项: -b sectorsize 指定磁盘的扇区大小 示例 - 在线修改分区表:
|
||||
badblocks | 检查存储设备的坏块 | ||||
lsblk | 列出所有块设备,将以树状结构显示磁盘和分区 | ||||
blkid | 显示各分区的UUID | ||||
lsusb | 列出所有USB总线和使用USB 的设备 | ||||
usbmodules | 输出连接USB 设备的驱动模块的信息 | ||||
mkbootdisk | 创建启动盘 | ||||
dump,restore | 备份和还原文件系统 | ||||
quota | 显示用户或组的磁盘配额 | ||||
setquota | 设置用户或组的磁盘配额 | ||||
ulimit |
设置使用系统资源的上限 选项: -a:显示目前资源限制的设定 |
||||
lsmod | 列出所有安装的内核模块 | ||||
insmod | 强制一个内核模块的安装 | ||||
rmmod | 强制卸载一个内核模块 | ||||
modinfo | 输出一个可装载的内核模块的信息 | ||||
modprobe |
从Linux内核中添加或者删除模块。该命令智能的进行模块的安装/卸载,为了便利,不区分模块名字中的-和_。该命令会查找 /lib/modules/`uname -r` 目录,找到所有模块和相关文件 格式:
选项: 注意,重启后效果消失。要永久修改内核模块加载,使用/etc/modules文件 |
||||
sync | 强制写入所有需要更新的 buffer 上的数据到硬盘上 | ||||
ldd | 显示一个可执行文件的共享库的依赖关系 | ||||
rsync |
可以在多台主机之间进行文件同步 格式:
选项: -a 归档模式,等价于-rlptgoD 示例:
|
||||
stat | 显示一个文件或目录的详细信息,例如尺寸、修改时间等 | ||||
logger |
附加一个用户产生的消息到系统日志,系统日志默认/var/log/syslog 格式: 选项: |
||||
logrotate | 管理系统的日志文件。可以在合适的时候轮换、压缩、删除 | ||||
strip | 从可执行文件中去掉调试符号引用。这样做可以减小尺寸, 但是就不能调试了 | ||||
lscpu |
打印CPU架构相关信息,示例:
|
||||
lshw | 打印硬件信息 | ||||
dmidecode |
解码DMI(即SMBIOS,System Management BIOS)信息为人类可读的格式。DMI表包含了系统硬件信息,包括序列号、BIOS版本 信息依据DMI类型分段输出到屏幕上 |
||||
sysctl |
在运行时配置内核参数,这些内核参数位于/proc/sys/ 格式: 选项: 举例:
|
||||
dpkg-reconfigure |
重新配置一个已经安装的包,举例:
|
||||
update-ca-certificates |
根据配置文件 /etc/ca-certificates.conf 的内容,更新/etc/ssl/certs下的受信任证书的符号链接 |
||||
update-icon-caches | 更新GTK图标缓存: sudo update-icon-caches /usr/share/icons/* | ||||
openssl |
OpenSSL的命令行工具,OpenSSL是一个实现了 SSL(v2/v3) 和TLS (v1) 的开源组件 举例:
|