Linux命令详解 #
在日常工作中,需要随时查询一下下。
如何编辑大文件? #
Linux下的话可以用sed来查找和编辑,做法是:
- 先用grep做一次特征字符串过滤,打印出行号,命令是grep -n -H –color ‘xxxx’ file;
- 然后用sed做一次单行编辑预览,命令是sed -n ’nnns/xxx/yyy/p’ file | tee file.done,其中nnn是行号,s是替换命令,xxx是替换前内容,yyy是替换后内容,file.done是结果;
- 再次用grep确认修改正确后,执行sed -i ’nnns/xxx/yyy/’ file,让修改生效。
作者:梁涛 链接:https://www.zhihu.com/question/20654719/answer/15756024 来源:知乎
补充说明 linux 三兄弟,awk,grep,sed sed是一个流编辑器,专门处理行文件,可以对一行或多行进行快捷的处理 处理的命令列举如下
a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符 h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。
W file 写并追加模板块的第一行到file末尾。
! 表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。
# 把注释扩展到下一个换行符以前。
详细参考: Linux命令大全
操作示例 #
- 打印文件中某一行,其中 p 是命令:
sed -n '49505,49505p' even_0.new.sql
bash的任务控制(job control) #
| 命令 | 说明 | 备注 |
|---|---|---|
| & | cmd & 将工作丢到后台执行,会回显 生成 [job number] PID ,完成时候回显 [job number] Done。 | |
| ctrl + z | 将任务放到后台执行,并且暂停 | |
| jobs | jobs [-lrs] 查看目前的job,l 同时列出PID, r 仅列出后台正在run的Job, s 仅列出在后台stop的任务, + 表示最后被丢到后台的工作,也是fg 默认从后台取出的工作。- 表示倒数第二个被丢到后台的工作 | |
| fg | fg [%job number] 将对应的jobnumber的任务返回前台,不给ID的话,默认取出最后一个,并且运行 | |
| bg | bg [%job number] 将指定的id的命令进入后台运行,bg + / bg - 将带有标记的命令进入执行 | |
| kill | kill -signal [%job number]|PID结束指定的进程 或者 job | |
关于压缩 #
tar压缩率调整 #
GZIP="-9" tar zcvf /home/homee.tgz /media
常用命令 #
lsof #
列出当前系统打开文件的工具,在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
当初使用到这个命令的场景主要是/tmp莫名其妙的被占满了,但是直接使用du、ls根本无法看到大文件,只有用df命令可以发现tmp已经使用100%。此时,使用lsof可以进一步进行调查。
使用lsof命令的原因之一就是,当一个磁盘不能被卸载时,借助lsof这个命令我们可以轻易的识别哪些文件正在被占用。以下是常用的场景:
通过lsof命令列出打开的文件(可以针对特定用户)
lsof -u apache列出特定端口运行的进程
# lsof -i TCP:53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME named 16885 named 20u IPv4 61664 0t0 TCP localhost:domain (LISTEN) # lsof -i UDP:53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME named 16885 named 512u IPv4 61663 0t0 UDP localhost:domain # lsof -i:53 named 16885 named 20u IPv4 61664 0t0 TCP localhost:domain (LISTEN) named 16885 named 512u IPv4 61663 0t0 UDP localhost:domain列出ipv4以及ipv6的文件
lsof -i 4列出TCP端口范围1-1024端口
lsof -i TCP:1-1024- lsof -i:8117 查询端口
通过脱字符排除某个用户
lsof -u^root查找特定用户使用的文件和命令
lsof -i -u apache列出所有网络连接
lsof -i杀死特定用户的所有活动
kill -9 `lsof -t -u named`采用PID搜索
lsof -p 1恢复删除的文件
更加详细的使用,请查看[枯木的博文](http://kumu-linux.github.io/blog/2013/04/08/lsof/)
awk #
- awk中打印 单引号:
\047
awk "print \047$1" xxx.txt
Vim学习 #
说明:vim有普通模式,Ex命令模式,编辑模式,选择模式等。凡是增加了 : 的命令,都是在Ex命令模式下使用的。
分屏幕操作 #
- 普通模式中,使用
C-w开头的快捷键 可以针对当前窗口进行拆分- 分割:
s水平分割,h垂直分割 - 跳转:
w循环跳转,hjkl分别是左右上下跳转; - 调整:
=所有的窗口等宽,等高;_最大化活动窗口的高度,|最大化活动窗口的宽度 ,[N]<C-w>_把活动窗口的高度设定为 N 行,[N]<C-w>|把活动窗口的高度设定为N列 - 关闭:
c关闭当前窗口 ,o关闭其他窗口
- 分割:
- vim 分屏Ex命令
- 分割:
:sp[ilt],:vsp[ilt],后面+文件名,可以直接打开文件 - 跳转:
- 关闭:
:clo[se]命令,:on[ly]命令
- 分割:
分页签 #
vim可以分页签进行处理,主要命令是 :tab 相关的命令,切换tab也是通过命令进行
<C-w>T把当前窗口挪到新的标签:tabe[dit] {filename}创建 新的标签,指定打开文件,没有文件名的话,就是打开新文件:tabc[lose]:tabo[nly]关闭当前标签,或者只保留当前标签- 跳转:
:tabn[ext] {N}{N}gt切换到指定页签
重复 #
vim的重复命令,活用各种组合命令键,效果非常不错,比如在行最后增加的话,使用A 而 不使用 $a。
.普通模式下重复上一次的命令@;命令行重复@@宏命令重复
自增自减和简单宏 #
自增和自减 #
C-a 是将数字自增1,C-x是将数字自减1,通常都是10进制的柱子。但是如果遇到0开头的数字,vim默认会将其当做 8进制的数字。
执行了以下设置的话,可以指定vim任意处理都是10进制的
set nrformats=
简单的宏 #
q 开始录制宏,随后指定的一个按钮(比如a),可以将宏绑定在按钮之上。输入结束以后,再次按下q ,宏定义结束。
通过 @+[宏绑定字母] 进行宏的调用。多次调用的话,可以有如下的简化操作
- 通过
@@重复执行一次 - 通过
[N]@@重复执行N次
组合使用 #
场景:对每一行的数字进行+4096的操作
组合命令:<qa><0><4096C+a><j><q><@a><100@@>
组合命令解释(每个尖括号里代表一个单独的命令):
- 开始录制宏
- 到行首
- 对第一个数字执行4096次自增操作
- 换行
- 结束录制宏
- 执行一次宏
- 执行100次宏
调用外部命令 #
场景:需要对文件的第二列排序,数字形式
组合命令::0,$!sort -k2 -n [-t]
组合命令解释:将0~末尾的行作为输入,调用sort命令。
其他 #
*可以快速查询和 显示匹配的内容- 格式化:
>向右边 缩进 一行,<向 左边 缩进 一行,=自动缩进;组合命令举例:gg=G将所有行进行自动化的缩进。 - 消除搜索的高亮
:noh
Emacs学习 #
spacemacs