常用指令
- screen
-S [name] 新建session
-ls 列出session
-r [name] 回到session
-d [name] 暂时离开(detach挂起)当前session并将当前session转后台,然后返回没进screen时的状态
快捷键:
ctrl-a c:创建一个新的 Shell
ctrl-a ctrl-a:在 Shell 间切换
ctrl-a n:切换到下一个 Shell
ctrl-a p:切换到上一个 Shell
ctrl-a 0~9:切换各个 Shell
ctrl-a d:退出 Screen 会话
- zip
-F 尝试修复损坏的压缩文件
-m 压缩后删源文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式
-r 递归,目录下所有子目录、文件一起处理
-S 包含系统文件和隐含文件(大写)
-d 删除压缩文件内的某个文件
-x 除了
-e 交互设置密码
-P 直接设置密码
-<压缩效率> 介于1-9的数值
-v 显示指令执行过程 或 版本
1 | zip -r my.zip testdir/ |
- unzip
-n 解压缩时不要覆盖原有的文件
-o 不必先询问用户,unzip执行后覆盖原有的文件
-P [密码] 使用zip的密码选项
-q 安静模式
-d [目录] 指定文件解压缩后所要存储的目录
- tar
独立参数(只能有一个):
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
附加参数:
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-f: 使用档案名字,最后一个参数,后面只能接档案名
1 | tar -zcvf new.tar.gz TAR_NAME # 压缩 |
- vim
- df / mount …盘相关
df -h,–human-readable 使用人类可读的格式
mount /dev/sda /mnt/pan1 挂载sda到/mnt/pan1
-o op ons 主要用来描述设备或档案的挂接方式。常用的参数有:loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset :指定访问文件系统所用字符集
若每次开机都挂载,可保存到~/.bashrc,每次启动时都会加载 .bashrc。每个用户的 home 目录都有这个脚本,即每用户对应一个bashrc。除此之外还有/etc/rc.local(是/etc/rc.d/rc.local的软连接),系统开机后会自动执行/etc/rc.local,记得修改权限。还可以修改fstab。
1 | fstab主要用来存放系统的一些静态资源,也是系统启动时默认读取的配置文件 |
lsblk
-a, –all 显示所有设备
-b, –bytes 以bytes方式显示设备大小
-e, –exclude 排除设备 (default: RAM disks)
-f, –fs 显示文件系统信息
-i, –ascii 仅使用ascii
-l, –list 使用列表格式显示
-n, –noheadings 不显示标题
-o, –output 输出列
-r, –raw 使用原始格式显示
- du
du 目录/文件 :显示目录下每个子目录的磁盘使用情况
-h 使用人类可读的格式
-a 不仅查看子目录大小,还要包括文件
-c 显示所有的文件和子目录大小后,显示总和
-s 只显示总和
–max-depth=n 指定统计子目录的深度为第 n 层
- 杀进程
1 | ps -ef | grep [xxx] # 可以查看子父进程之间的关系 |
- crontab
1 | crontab -u [user] -e |
- aria2
启动rpc功能
1 | alias aria2cServer='aria2c --conf-path="/root/aria2.conf" --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all --rpc-secret=password' |
- scp
-r 复制目录
本地到远程
1 | scp local_file remote_username@remote_ip:remote_folder |
远程复制到本地只需把上面两参数反过来
- WIFI/网络相关
1 | iwconfig # 查看你的网络接口 wlanx 或者 wlpxxx |
自动连接wifi
vim /etc/network/interfaces
1 | auto wlp2s0 |
然后重启或者执行:/etc/init.d/networking restart
nm 是 NetworkManager 的缩写,使用nmcli或者nmtui编辑网络配置。
1 | nmcli connection show # 查看所有网络连接 |
- find
find [路径] [选项] [操作]
-ipath p, -path p : 路径名称符合 p 的文件 支持通配符,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件 支持通配符。iname 会忽略大小写
-ls : 打印搜索到的文件的详细信息
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c表示字节,k 表示KB,w 是二个位元组,G表示GB。
-type c : 文件类型是 c 的文件。
其他type:
d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列
f: 一般文件 l: 符号连结 s: socket
-pid n : process id 是 n 的文件
-anewer file : 比文件 file 更晚被读取过的文件
-amin n : 在过去 n 分钟内被访问
-cmin n : 在过去 n 分钟内发生变更
-mmin n : 在过去 n 分钟内内容被修改
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天内创建的文件
-mtime n : 在过去 n 天内修改过的文件
-atime n : 在过去 n 天内被读取过的文件
注意:与文件相关联的时间参数有以下三种:
修改时间(Modification time):最后一次文件内容有过更改的时间点
访问时间(Access time):最后一次文件有被读取过的时间点
变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)
对应-mtime,-atime 和 -ctime
1 | find /usr -type f -mtime +50 -mtime -100 # 检索 /usr 下 50 到 100 天之前修改过的文件 |
-empty : 空的文件
-gid n or -group name : gid 是 n 或是 group 名称是 name
-maxdepth n : 搜索时向下递归的层数最大为 n
-delete : 删除搜索到的文件和目录
-exec 对搜索到的结果执行特定的命令
1 | find ~/src -type f -name '*.mp3' -exec cp {} ~/dst ';' # 将~/src下所有MP3复制到~/dst |
可用括号将运算式分隔,并使用下列运算。
1 | exp1 -and exp2 |
- locate
locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
locate [name]
- grep
grep [-abcEFGhHilLnqrsvVwxy]
-r 以递归的方式查找符合条件的文件
-i 忽略字符大小写的差别。
-o 或 –only-matching : 只显示匹配PATTERN 部分
-v 或 –invert-match : 显示不包含匹配文本的所有行
-G 或 –basic-regexp : 将样式视为普通的表示法来使用
-e: 使用正则搜索
-n: 显示行号
-c: 统计匹配到的次数
–include: 指定匹配的文件类型
–exclude: 过滤不需要匹配的文件类型
-a, –text: 将二进制档案视为文本文件搜寻
-A N, –after-context=N: 多展示匹配行后N行
-B N, –before-context=N: 多展示匹配行前N行
-C N: 列出符合行之外并列出上下各N行
-f FILE, –file=FILE: 读取文件,使用该文件内容作为要搜寻的样式,一行一个样式
-L 只输出符合比对的文件名称
1 | grep "some string" * -r -n --include=*.html --include=*.php |
- diff [OPTION]… FILES
-a, –text所有的文件都视为文本文件来逐行比较
-B, –ignore-blank-lines忽略插入删除空行引起的变化
-b, –ignore-space-change忽略因空白符数量不同造成的差异
-i, –ignore-case忽略大小写
-N, –new-file将缺席文件视为空文件。比较目录时,若文件A仅出现在某个目录中,预设会显示Only in 目录:文件 A。若使用 -N 参数,则 diff 会将文件 A 与一个空白的文件比较
-q, –brief仅报告文件是否相异,忽略差别的细节
-r, –recursive当比较目录时,递归比较子目录
-p, –show-c-function显示每个更改在哪个 C 函数中
-s, –report-identical-files当两个文件相同时报告
-T, –initial-tab在每行前面加上 Tab 以便对齐
-u, –unified[=NUM]使用合并格式输出,输出 NUM(默认 3)行的统一上下文
关于输出格式
正常格式(选项 –normal )
并列格式(选项 -y, –side-by-side)
上下文格式(选项 -C NUM, -c, –context[=NUM])
合并格式(选项 -U NUM, -u, –unified[=NUM])
1 | diff -uarN DIR1 DIR2 |
系统管理
1 | systemctl start | stop | restart | status [服务名称] |
文件目录
1 | pwd # 显示当前工作目录的绝对路径 |
chown [-R]: 修改所属用户与组。
chmod: 修改用户的权限。
chgrp:更改文件属组
chmod:更改文件9个属性
用ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组
文件权限表示:
文件类型 | 属主权限u | 属组权限g | 其他用户权限o
[d-lbc] | [-rwx] | [-rwx] | [-rwx]
文件类型:d表示目录;-表示文件;
l 表示链接文档(link file);
b 表示装置文件里面的可供储存的接口设备(可随机存取装置);
c 表示装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
权限:无权限表示为-。
u:创建文件的人
g:与文件属主有相同组ID的所有用户
o:与文件无关的人
a:所有用户
+
添加某个权限-
取消某个权限=
赋予给定权限并取消其他所有权限
r 可读
w 可写
x 可执行
7=4+2+1 表示可读可写可执行
6=4+2 表示可读可写
5=4+1 表示可读可执行
3=2+1 表示可写可执行
用户管理
1 | useradd 用户名 # 添加新用户 |
目录结构
/root/ 超级用户主目录
/lib/ 系统开机所需要最基本的动态连接共享库
/bin/ 存放着最经常使用的命令 (binary)
/sbin/ 存放的是系统管理员使用的系统管理程序
/home/ 存放普通用户主目录
/mnt/ 包括系统引导后被挂载的文件系统的挂载点
/boot/ 包括内核和其它系统启动期间使用的文件
/etc/ 所有的系统管理所需要的配置文件和子目录
/usr/ 用户的很多应用程序和文件都放在这个目录下
/proc/ 虚拟的目录,是系统内存的映射,可以直接访问这个目录来获取系统信息
/srv/ 存放服务启动之后需要提起的数据
/tmp/ 存放临时文件
VIM.md
vim模式:命令(按:
)、编辑(i
, a
)、末行(esc
)
参考(实际上是搬运…):
VIM命令大全
有很多指令感觉不是很需要,于是就去除了。
由于使用markdown编写,所以部分特殊符号使用反斜杠过滤。
vim指令
vim fn 打开或者新建
vim -r fn 恢复上次 vim 打开时崩溃的文件
vim -R 以只读方式打开
vim +fn 打开文件并把光标置于最后一行首部
:w hhh.txt 在 :w 后输入文件名,会将当前编辑的文本保存为新的文件。
#,#w hhh 先输入起始行号和结束行号,然后将其间的内容保存到新的文件中。
:r hhh 将 hhh 文件中的文本插入到光标所在行的下一行。
光标移动
基本移动
h/j/k/l 移动光标
gg 光标移动到文档首行
G 光标移动到文档尾行
^ 光标移动到行首第一非空字符
0 光标移动到行首
$ 光标移动到行尾 (删除斜杠)
x 删除光标后面的字符
u 撤回
ctrl+r 恢复撤回
数字+G 快速将光标移动到指定行
`. 移动到上次编辑处
数字+上下方向键 以当前光标为准,向上/下移动n行
数字+左右方向键 以当前光标为准,向左/右移动n个字符
gm 光标移动到当前行中间处
shift+3 高亮查找当前字符串
fc 同一行内查找c字符 按下;或者,重复或者反向重复操作
ctrl+f: 下翻一屏
ctrl+b: 上翻一屏
ctrl+d: 下翻半屏
ctrl+u: 上翻半屏
ctrl+e: 向下滚动一行
ctrl+y: 向上滚动一行
zz: 将当前行移动到屏幕中央
zt: 将当前行移动到屏幕顶端
zb: 将当前行移动到屏幕底端
H 移动到屏幕顶部
M 移动到屏幕中间
L 移动到屏幕尾部
z+Enter键 当前行在屏幕顶部
z+ . 当前行在屏幕中间
z+ - 当前行在屏幕底部
(/) 向前/后移动一个句子
{/} 向前/后移动一个段落
+或Enter: 把光标移至下一行第一个非空白字符。
-: 把光标移至上一行第一个非空白字符。
标记
使用标记快速移动,到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+i和Ctrl+o对应前进和后退。
m{a-z} 标记光标位置 局部标记 (不用打花括号)
m{A-Z} 标记光标位置 全局标记 退出VIM标记依旧有效
`{a-z} 移动到标记位置
`“ 移动到上次离开的地方
`. 移动到最后改动的地方
:marks 显示所有标记
:delmarks a b 删除标记a和b,a-c表示a、b、c
:delmarks! 删除缓冲区所有标记
`` 回到上次编辑的地方
`. 移动到上次编辑处
ctrl o 回到上次光标的位置
ctrl i 回到更新后光标的位置
g; 上一个修改过的地方
g, 下一个修改过的地方
1 | [[: 跳转到上一个函数块开始,需要有单独一行的{。 |
插入编辑
复制粘贴
在Vim命令模式下,输入 v 或者 V 或者 Ctrl+v 都可进入可视化模式,这三个Vim可视化模式的主要区别在于:
字符选择模式: 选中光标经过的所有字符,普通模式下按小写 v 进入
行选择模式:选中光标经过的所有行,普通模式下按 大写V 进入
块选择模式:选中一整个矩形框表示的所有文本,普通模式下按 Ctrl+v 进入
O 上面新建一行插入
o 下面新建一行插入
:r fn 插入fn文件内容
y 在可视模式下选中文本
(以下是普通模式下,非visual模式)
yy 复制整行文本
y0 从当前位置复制到行首
y$ 从当前位置复制到行尾
yG 复制光标以下的所有行
d: 删除(剪切)在可视模式下选中的文本
d$、D 删除(剪切)当前位置到行尾的内容
d0 删除(剪切)当前位置到行首的内容
p 在光标之后粘贴
P 在光标之前粘贴
dd 剪切当前行
dj 剪切上一行
dk 剪切下一行
:1,10d 删除1-10行,利用p命令可将剪切后的内容进行粘贴
:11,$d 删除11行及以后所有的行
“+ 系统剪贴板。”+yy 把当前行的内容放入系统剪贴板,可视模式”+y把选中内容复制,”+p粘贴。
寄存器
“{a-z}yy 把当前行的内容放入{a-z}寄存器。
“{A-Z}yy 把当前行的内容追加到{a-z}寄存器中。
:reg 显示所有寄存器的内容
“” 不加寄存器索引时,默认使用的寄存器。
查找、替换
/something: 在后面的文本中查找something。
?something: 在前面的文本中查找something。
/pattern/+number: 将光标停在包含pattern的行后面第number行上。
/pattern/-number: 将光标停在包含pattern的行前面第number行上。
n: 向后查找下一个。
N: 向前查找下一个。
% 键 光标定位到括号的另一半位置。
1 | :set ignorecase 忽略大小写的查找 |
ra 将当前字符替换为a,当期字符即光标所在字符。:s/old/new
- 用new替换当前行第一个old。:s/old/new/g
- 用new替换当前行所有的old。:n1,n2s/old/new/g
- 用new替换文件n1行到n2行所有的old。:%s/old/new/g
- 用new替换文件中所有的old。:%s/^/xxx/g
- 在每一行的行首插入xxx:%s/$/xxx/g
- 在每一行的行尾插入xxx
所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。:2,50 s/^\/\///g
- 在2~50行首删除//号
文档操作
:f 返回文档名
:e 重新加载当前文档
:e! 放弃所有修改,并打开原来文件。
:Sex 水平分割窗口进行浏览文件
:Vex 垂直分割窗口进行浏览文件
vim -p files: 打开多个文件,每个文件占用一个标签页。
:tabe, tabnew – 如果加文件名,就在新的标签中打开这个文件, 否则打开一个空缓冲区。
^w gf – 在新的标签页里打开光标下路径指定的文件。
:tabn – 切换到下一个标签。Control + PageDown,也可以。
:tabp – 切换到上一个标签。Control + PageUp,也可以。
[n] gt – 切换到下一个标签。如果前面加了 n , 就切换到第n个标签。第一个标签的序号就是1。
gT–切换到上一个。
:tab split – 将当前缓冲区的内容在新页签中打开。
:tabc[lose] – 关闭当前的标签页。
:tabo[nly] – 关闭其它的标签页。
:tabs – 列出所有的标签页和它们包含的窗口。
:tabm[ove] [N] – 移动标签页,移动到第N个标签页之后。 如 tabm 0 当前标签页,就会变成第一个标签页。
:split(:sp) – 把当前窗水平分割成两个窗口。(CTRL-W s 或 CTRL-W CTRL-S) 注意如果在终端下,CTRL-S可能会冻结终端,请按CTRL-Q继续。
让水平分割窗口同时滚动,在两个窗口中输入 :set scb
:split filename – 水平分割窗口,并在新窗口中显示另一个文件。
:nsplit(:nsp) – 水平分割出一个n行高的窗口。
:vsplit(:vsp) – 把当前窗口分割成水平分布的两个窗口
:qall – 关闭所有窗口,退出vim。
:wall – 保存所有修改过的窗口。
:only – 只保留当前窗口,关闭其它窗口。(CTRL-W o)
:close – 关闭当前窗口,CTRL-W c能实现同样的功能
ctrl+w + –当前窗口增高一行。也可以用n增高n行。
ctrl+w - –当前窗口减小一行。也可以用n减小n行。
:resize +n 将当前窗口高度增加n行 等同于 ctrl+w +
:resize -n 将当前窗口高度减少n行 等同于 ctrl+w -i
:resize n – 当前窗口n行高。
ctrl+w _ –当前窗口扩展到尽可能的大。也可以用n设定行数。
ctrl+w = – 所有窗口同样高度。
ctrl+w < –当前窗口减少一列。也可以用n减少n列。
ctrl+w > –当前窗口增宽一列。也可以用n增宽n列。
:vertical resize ±n 将当前窗口宽度增加或减少n列
ctrl+w | –当前窗口尽可能的宽。也可以用n设定列数。
ctrl+w ctrl+w: 切换到下一个窗口。或者是ctrl+w w
ctrl+w p: 切换到前一个窗口
ctrl+w t(b):切换到最上(下)面的窗口
ctrl+w h(l,j,k):切换到左(右,下,上)的窗口
ctrl+w H(L,K,J): 将当前窗口移动到最左(右、上、下)面
ctrl+w r:旋转窗口的位置
ctrl+w T: 将当前的窗口移动到新的标签页上
CTRL-W < 使得当前窗口宽度减小
CTRL-W > 使得当前窗口宽度增加
<<、>>
缩进排版
多行注释:ctrl+v选中多行,按下I,输入’#’,然后按下esc。
自动补全
C-x C-s – 拼写建议。
C-x C-v – 补全vim选项和命令。
C-x C-l – 整行补全。
C-x C-f – 自动补全文件路径。弹出菜单后,按C-f循环选择,当然也可以按 C-n和C-p。
C-x C-p 和C-x C-n – 用文档中出现过的单词补全当前的词。 直接按C-p和C-n也可以。
C-x C-o – 编程时可以补全关键字和函数名啊。
C-x C-i – 根据头文件内关键字补全。
C-x C-d – 补全宏定义。
C-x C-n – 按缓冲区中出现过的关键字补全。 直接按C-n或C-p即可。
set合集
1 | :set number " 显示行号 |
注:修改字体
Linux/Unix: set guifont=Monospace\空格14
Windows: set guifont=Monospace:h14
查询状态:set [keyword]?
其他指令
1 | :open file |
按键映射
*noremap为不递归的映射
inoremap就只在插入(insert)模式下生效
vnoremap只在visual模式下生效
nnoremap就在normal模式下(狂按esc后的模式)生效
1 | " Visual模式下C-y复制到系统剪切板 |