常用指令

  • 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 显示指令执行过程 或 版本

zip -r my.zip testdir/
zip -dv my.zip del_me
zip my.zip forzip/* -x forzip/e  # 压缩目录,除了forzip/e
  • unzip

-n 解压缩时不要覆盖原有的文件
-o 不必先询问用户,unzip执行后覆盖原有的文件
-P [密码] 使用zip的密码选项
-q 安静模式
-d [目录] 指定文件解压缩后所要存储的目录

  • tar

独立参数(只能有一个):
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
附加参数:
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

-f: 使用档案名字,最后一个参数,后面只能接档案名

tar -zcvf new.tar.gz TAR_NAME # 压缩
tar -zxvf TAR_NAME.tar.gz # 解压
  • vim

见vim.md

  • 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。

# fstab主要用来存放系统的一些静态资源,也是系统启动时默认读取的配置文件
vim /etc/fstab
# defaults表示挂载后的设备文件默认读取挂载点的权限参数,0 0 代表不自检)
/dev/sd1    /mnt/sd1    ext4    defaults    0    0

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 层

  • 杀进程
ps -ef | grep [xxx] # 可以查看子父进程之间的关系
ps aux | grep [xxx] # 查看系统中所有进程
kill [pid]
top
  • crontab
crontab -u [user] -e
crontab -l
service cron start
  • aria2

启动rpc功能

alias aria2cServer='aria2c --conf-path="/root/aria2.conf" --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all --rpc-secret=password'
  • scp

-r 复制目录

本地到远程

scp local_file remote_username@remote_ip:remote_folder 
scp local_file remote_ip:remote_file

远程复制到本地只需把上面两参数反过来

  • WIFI/网络相关
iwconfig # 查看你的网络接口 wlanx 或者 wlpxxx
ip link set interface up # 启用网络接口
ip link set interface down # 关闭
iwlist interface scan | less # 搜索
iw dev # 列出设备
# 以wlan0接口为例
iw dev wlan0 link # wlan0 状态
iw dev wlan0 scan # 搜索网络
iw dev wlan0 connect your_ESSID # 连接到开放网络
iw dev wlan0 connect your_ESSID key your_key # 使用 16 进制密钥连接到 WEP 加密的网络

ip addr # 查看ip
wifi-menu # UI界面

自动连接wifi
vim /etc/network/interfaces

auto wlp2s0
iface wlp2s0 inet dhcp
wpa-ssid 你的ssid名称
wpa-psk 你的密码
wpa-scan-ssid 1 # 隐藏wifi才用 非隐藏SSID不需要

然后重启或者执行:/etc/init.d/networking restart

nm 是 NetworkManager 的缩写,使用nmcli或者nmtui编辑网络配置。

nmcli connection show # 查看所有网络连接
nmcli con show # 同上
nmcli device show # 显示所有设备网络设备详情信息
nmcli status
nmcli device show eth0 # 显示指定网络设备的详细信息
nmcli con up eth0 # 启用网络连接
nmcli con down eth0 # 停用网络连接(可以被自动激活)
nmtui # ui
systemctl restart network # 配置完后记得执行
  • 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
find /usr -type f -mtime +50 -mtime -100 # 检索 /usr 下 50 到 100 天之前修改过的文件
find /usr -type f -mtime 2 -amin 5 # 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件
find /home -size +204800 # 查找大于200m的文件(+n 大于 -n小于 n等于)
# -mtime 2:该文件 2 天前被修改过
# -mtime -2:该文件 2 天以内被修改过
# -mtime +2:该文件距离上次修改已经超过 2 天时间

-empty : 空的文件
-gid n or -group name : gid 是 n 或是 group 名称是 name
-maxdepth n : 搜索时向下递归的层数最大为 n
-delete : 删除搜索到的文件和目录
-exec 对搜索到的结果执行特定的命令

find ~/src -type f -name '*.mp3' -exec cp {} ~/dst ';' # 将~/src下所有MP3复制到~/dst
# {} 是占位符 ;是命令结束标志
find ./ -type d -exec ls {} + # 查找目录并列出目录下的文件 +表示先让 find 检索 再将得到的文件列表传递给后面的命令

可用括号将运算式分隔,并使用下列运算。

exp1 -and exp2
find /usr -type f ! -name '*.txt'
-not expr
exp1 -or exp2
exp1, 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: 过滤不需要匹配的文件类型

系统管理

systemctl start | stop | restart | status [服务名称]
sync    # 将数据由内存同步到硬盘中
halt    # 停机,关闭系统,但不断电
poweroff # 关机,断电
reboot    # 重启
shutdown [-srth]
# (1) -s -t 秒:延迟关机;(2) -p马上关机;(3) -r -t 秒:延迟重启;(4) -h 完全断电,但会保存电脑状态,下次启动时这些打开过的程序都还在。

文件目录

pwd  # 显示当前工作目录的绝对路径
ls [-al] # -a 输出全部文件  -l 列出包含文件的属性与权限等等数据
# cd / mkdir / rmdir / touch / cp [-r] / rm [-rfv] / mv / cat / less / head [-n] / tail [-nf]
ln -s 源 名 # 软链接;`rm -rf 软链接名/` 会把软链接对应的真实目录下内容删掉
history # 查看已经执行过历史命令
cal 2022 # 查看日历
date "+%Y-%m-%d %H:%M:%S" # 显示当前时间年月日时分秒
date -d '1 days ago' # 显示前一天

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 表示可写可执行

用户管理

useradd 用户名 # 添加新用户
useradd -g 组名 用户名 # 添加新用户到某个组
passwd (用户名) # 设置密码
id 用户名 # 是否存在
su 用户名称 # 切换用户,只获得用户执行权限,不获得环境变量
su - 用户名称 # 切换到用户并获得该用户的环境变量及执行权限
userdel 用户名 # 删除用户但保存用户主目录
userdel -r 用户名 # 用户和用户主目录都删除
whoami # 显示自身用户名称
who am i # 显示登录用户的用户名以及登陆时间
usermod -g 用户组 用户名 # 修改用户的初始登录组,给定的组必须存在。默认组 id 是 1
# cat /etc/passwd
groupadd 组名 # 新增组
groupdel 组名
groupmod -n 新组名 旧组名 # 修改工作组组名
# cat /etc/group

目录结构

/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, 下一个修改过的地方

[[: 跳转到上一个函数块开始,需要有单独一行的{。
]]: 跳转到下一个函数块开始,需要有单独一行的{。
[]: 跳转到上一个函数块结束,需要有单独一行的}。
][: 跳转到下一个函数块结束,需要有单独一行的}。
[{: 跳转到当前块开始处;
]}: 跳转到当前块结束处;
[/: 跳转到当前注释块开始处;
]/: 跳转到当前注释块结束处;

插入编辑

复制粘贴

在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: 向前查找下一个。
% 键 光标定位到括号的另一半位置。

:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找

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合集

:set number                " 显示行号
:set nonumber            " 关闭行号
:set tabstop=4             " 设置 tab space 为4个空格
:set ts=4                " 同 tabstop
:set expandtab            " 将tab替换为指定数量的空格
:set autoindent            " 设置为自动缩进
:set background=dark        " 设置背景颜色
:set guifont=consolas:h12   " 设置字体为 consolas,字号为14
:set history=700            " 设置保存命令的行数
:set autoread                " 设置当文件变化时,自动读取新文件
:set wrap        " 启动折行
:set nowrap        " 禁止折行
" 切换文件格式,ff是 fileformat 的缩写
:set ff=unix            " 将文件切换为 unix 格式,每行以 "\n" 结尾 
:set ff=dos                " 切换为 Windows 格式,每行以 "\r\n" 结尾
" 设置编码格式
:set encoding=utf-8            " 设置 vim 展示文本时的编码格式
:set fileencoding=utf-8        " 设置 vim 写入文件时的编码格式
:set hlsearch                " 高亮显示搜索结果  使用`:nohlsearch`关闭高亮显示
:set autochdir              " 可以让vim 根据编辑的文件自动切换工作目录。
:set incsearch            " 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan              " 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
" 取消自动备份
set noundofile
set nobackup
set noswapfile

注:修改字体
Linux/Unix: set guifont=Monospace\空格14
Windows: set guifont=Monospace:h14
查询状态
:set [keyword]?

其他指令

:open file
:vsplit file
:ter " 打开控制台

按键映射

*noremap为不递归的映射
inoremap就只在插入(insert)模式下生效
vnoremap只在visual模式下生效
nnoremap就在normal模式下(狂按esc后的模式)生效

" Visual模式下C-y复制到系统剪切板
vnoremap <C-y> "+y
" normal模式C-p粘贴系统剪切板
nnoremap <C-p> "*p
" insert模式C-p粘贴系统剪切板
inoremap <C-p> <esc>"*p
" insert模式按jj返回
inoremap jj <esc>
vnoremap <C-/>3 I# <esc>
vnoremap <C-/>/ I// <esc>