Linux 基础与常用命令笔记
Linux 基础与常用命令笔记
参考教程 https://www.runoob.com/linux/linux-tutorial.html
基本概念
路径
路径的表示方式
- Linux 中, 使用
/
划分不同层级的目录 - Linux 中存在以下四种特殊目录用于目录开头
/
表示根目录 (用于绝对路径)./
表示当前工作目录 (用于相对路径)~/
表示用户的主目录..
表示上一层目录
- 目录与文件的表示
- 通常以文件或目录的完整路径 (绝对或相对) 表示这一文件或目录
- 表示目录时, 可以在最后加上
/
以强调这是一个目录, 对于以目录为参数的命令无法识别目录时, 可尝试使用此方法
Linux 根目录结构
Linux 的根目录中, 一般有如下目录
- 一般文件目录
/home
存放各个用户的主目录, 一般主目录即/home/<用户名>
/root
root 用户的主目录/bin
存放常用命令程序的二进制文件/sbin
与/bin
类似, 但存放的是管理员使用的命令程序/lib
存放系统基本的共享库文件/usr
共享资源目录, 一般软件就安装在这个目录下/usr/bin
安装软件的二进制程序目录/usr/sbin
管理员软件的二进制程序目录
/etc
存放系统或程序所需的配置文件/opt
一般为空, 用于安装如数据库等软件/var
一般用于存放程序日志文件的目录/tmp
临时文件目录, 用于存放程序运行的临时文件
- 特殊文件目录
/run
记录程序运行时信息的目录, 每次重启时会被清空/lost+found
一般为空, 当系统意外关机时将存放有关文件/boot
系统启动时的核心文件目录/mnt
其他文件系统的挂载目录, 例如 U 盘等将成为该目录下的一个特殊子目录
- 设备文件目录 (该目录下的文件一般无法直接读取)
/sys
系统运行时的设备树/dev
系统的外部设备以及虚拟设备 (如标准输入stdin
) 将被视为一个文件并存储在该目录中, 通过读写这些文件以访问设备/srv
系统服务数据/proc
系统内存的映射, 存储内核运行状态
命令与终端
命令的基本格式
- 命令一般由执行命令的程序或命令头以及命令的参数组成
- 命令程序位于环境变量
PATH
中时, 直接使用程序名即可, 否则应指出具体路径, 注意相对路径的命令需要./
- 单字母选项可使用
-
开头, 可多个选项字母并列于一个-
后 - 多字母选项则使用
--
开头, 且一般独立出现 - 单字母的参数一般在
-x
后空一格写入参数内容 - 多字母的参数一般在
--<x...>
后使用=
写入参数内容 - 对于由纯数字与字母的字符串可省略
"
, 但除此之外的情况下, 最好加上"
(特别是含*
的通配字符串)
终端常用的快捷键
作用于单终端的环境
- Ctrl + C 向正在运行的程序发送信号
SIGINT
以终止程序的运行 (正常退出) - Ctrl + \ 向正在运行的程序发送信号
SIGQUIT
以退出程序的运行 (错误退出) - Ctrl + D 向正在接收标准输入的程序发送
EOF
, 表示输入结束 - Ctrl + Z 暂停并挂起当前正在运行的程序, 将返回被挂起程序的序号
- 使用命令
bg <序号>
在后台继续运行被挂起的程序 - 使用命令
fg <序号>
在前台继续运行被挂起或移至后台运行的程序 - 通过此方式可在单终端下在多个程序间切换
- 使用命令
- Ctrl + L 清除屏幕上的内容
作用于图形交互环境
- Ctrl + Shift + C 复制选中内容
- Ctrl + Shift + V 粘贴选中内容
- Ctrl + Shift + T 打开新的终端
文件管理
基础文件管理
cp [-dpria] <src> <dest>
复制文件或文件夹 (需要-r/a
选项)src
被复制文件的路径dest
复制目标路径-d
当被复制文件为软链接时, 则复制结果也为同一属性的软链接, 而不是复制原始文件-p
同时复制文件的属性, 而不是默认属性-r
递归复制目录以及目录下的文件, 默认情况下只能复制文件与空文件夹, 如果要复制包含文件的文件夹, 需要使用此命令-i
如果dest
存在, 则进行覆盖查询, 否则将直接覆盖-a
相当于-dpr
, 一般复制时会开启此选项
rm [-rfi] <file>
删除文件file
要删除的文件路径, 可使用通配符*
或?
删除多个文件-f
强制删除所有文件, 忽略不存在的文件-r
递归删除目录即目录下的文件, 默认情况下只能删除文件, 如果需要删除文件夹即文件夹下的文件, 需要使用此命令-i
在每个文件被删除前进行确认
mv [-i] <src> <dest>
移动 (重命名) 文件或文件夹src
被移动文件的路径dest
移动目标路径-i
如果dest
存在, 则进行覆盖查询, 否则将直接覆盖
touch <file>
更新 / 创建空文件file
当文件存在时, 将更新文件修改时间, 否则创建空文件
cat [-n] <file>
输出文件内容file
要输出的文件路径-n
显示行号
tail [-n<num>] [-f [-pid=<pid>]] <file>
观察文件内容, 与cat
不同, 该命令一般用于观察不断修改的文件, 可用于查看非文档的特殊文件或正在运行程序的日志文件-n<num>
显示文件的最后num
行内容, 默认为 10 行-f
读取不断刷新的文件, 一般开启此选项-pid=<pid>
刷新读取, 直到线程pid
结束file
读取的文件路径
关于查询文件属性的命令见文件属性小节的介绍
基础目录管理
pwd
获取当前工作文件夹cd <dir>
修改当前工作文件夹dir
文件夹路径
mkdir [-p] <dir>
新建文件夹dir
新建的文件夹路径-p
当给出路径的父文件夹不存在时, 自动递归创建
rmdir [-p] <dir>
删除空文件夹dir
删除的文件夹路径-p
当文件夹的父目录为空时, 一同删除
路径查询
dirname <文件路径>
获取文件所在目录basename <文件路径>
获取文件realpath <文件路径>
将路径格式转换为绝对路径
链接
命令 ln
可用于创建软链接或硬链接
ln [-sd] <src> <dest>
-s
创建软链接 (默认为硬链接)-d
创建关于目录的硬链接 (需要管理员权限)src
目标被链接文件dest
创建的链接文件
关于软链接与硬链接有区别
- 软链接 (符号链接)
- 软链接的本质为一个指向被链接文件的文件
- 当被链接文件被删除时, 软链接失效
- 软链接可以跨文件系统创建
- 硬链接
- 硬链接本质为一个文件, 多个名称
- 硬链接与被链接文件指向同一块存储空间
- 当文件被删除时, 文件依然存在, 链接依然有效
- 硬链接不可跨文件系统创建
查找文件
命令 find
可用于通过文件的基本属性, 查找需要的文件, 对查找结果的处理需要在命令中确定
find [dir] [expression] [act] \;
dir
要查找的目录- 可以有多个目录, 使用空格划分
- 没有给出时默认为当前工作目录
- 注意, 目录的末尾需要有
/
expression
查找条件, 允许多个查找条件同时使用, 常用的有-name <文件名>
按文件名筛选, 支持通配符*
与?
, 使用时最好加上"
-type <文件类型>
按文件类型筛选, 有文件类型f
一般文件d
目录l
链接
-size <比较方式><文件大小><大小单位>
按文件大小筛选- 比较方式: 使用
+
表示大于,-
表示小于 - 文件大小: 配合单位使用
- 大小单位: 常用的单位有
c
字节,k
kb,M
mb,G
gb
- 比较方式: 使用
-[a|c]time <比较方式><天数>
按时间筛选[a|c]
使用a
表示查询最近访问时间, 使用c
表示查询最近修改时间- 比较方式: 使用
+
表示指定天数前, 使用-
表示指定天数内, 无修饰表示指定天数时 - 天数: 即 24 小时
act
对查找结果执行动作, 一般位于最后-exec <命令> \;
对查找结果执行命令, 并且命令中使用{}
代替查找结果, 使用\;
表示命令结束, 常用有-exec ls -l {} \;
查看查找结果的详细信息-exec rm -i {} \;
删除查找到的结果
-print[0]
打印查找结果- 默认每个结果间都以换行分割, 加上
0
则使用\0
分割 - 当文件名过长时可能导致
-exec
发生错误, 此时推荐使用该选项配合管道与 xargs 命令实现类似效果
- 默认每个结果间都以换行分割, 加上
内容搜索
命令 grep
使用正则表达式, 可用于搜索单个文件, 多个文件以及标准输出 (使用管道或重定向) 中的内容
命令的基本格式为 grep [options] [files]
命令的常用的选项有
- 搜索设置
-v
反向搜索不符合条件的内容-i
搜索时忽略大小写-F
仅匹配字符串, 不使用正则表达式-E
使用扩展正则表达式 (建议开启)-e<表达式>
待搜索的表达式, 默认为正则表达式
使用时建议以"
包裹表达式 允许有多个, 如果只有一个可省略-e
- 结果显示设置
-n
显示匹配行的行号-o
只显示匹配到的文字 (默认将显示匹配结果所在的整行)-Z
使用\0
分割结果, 一般用于配合参数传递过滤器进行下一步处理
- 多文件设置
-r
搜索文件内容时, 递归查找目录中的所有文件--include <文件名>
配合-r
使用, 仅搜索目录下具有指定文件名的文件 (可使用*
,?
作为通配符, 建议使用"
包裹文件名)--exclude <文件名>
配合-r
使用排除目录下具有指定文件名的文件 (可使用*
,?
作为通配符, 建议使用"
包裹文件名)
对于命令的 files
参数
- 可以给出多个文件用于搜索
- 如果启用了
-r
, 还可以搜索指定文件加下的所有文件 - 还可以通过管道, 搜索命令的结果
浏览文件内容
less [-fNx] <file>
file
要浏览的文件名 (除了指定文件名, 也可通过管道接收并浏览命令的输出)-f
强制打开二进制, 设备与目录等非文档文件-N
显示行号-x<数字>
规定 tab 的显示为指定个数的空格
在浏览文件时, 可使用以下按键操作 (这一系列操作对于 man
命令同样适用)
/<str>
向下搜索字符串str
?<str>
向上搜索字符串str
- n 重复上一次搜索
- N 反向重复上一次搜索
- b 向上翻动一页, 也可使用按键 pageup
- Space 向下翻动一页, 也可使用按键 pagedown
- y 向上移动一行, 也可使用按键 up
- Enter 向下移动一行, 也可使用按键 down
- q 退出浏览
文件编辑
此处介绍通过 vim 完成文件编辑功能
使用 vim <file>
即可进入文件 file
的编辑
命令模式
在命令模式下可完成内容编辑与模式切换的操作
以下为常用的操作
- 模式切换
i
在当前光标位置进入输入模式o
在当前位置下一行插入新行, 并进入输入模式:
进入底线命令行模式
- 光标移动
<行号>G
移动到指定行gg
移动到文件第一行G
移动到文件最后一行0
移动行首$
移动行尾[n]h
光标向左移动n
格, 默认为 1[n]j
光标向下移动n
行, 默认为 1 (也可使用 Enter)[n]k
光标向上移动n
行, 默认为 1[n]l
光标向右移动n
格, 默认为 1
- 内容搜索
/<word>
向下搜索匹配单词word
的位置/\v<pattern>
使用正则表达式pattern
向下搜索n
向下重复上一次搜索 (需要先使用 Enter 退出搜索内容的输入)N
向上重复上一次搜索
- 内容编辑
p
在当前光标位置的下一行粘贴内容[n]dd
剪切 (删除) 光标所在行的数据, 有n
时将剪切包括光标所在行在内向下n
行的数据[n]yy
复制光标所在行的数据, 有n
时将复制包括光标所在行在内向下n
行的数据u
复原上一个动作- Ctrl +
r
重做上一个复原
- 文档跳转
gf
当光标指向一个路径时, 跳转到该路径的文档 (需要先使用:w
保存修改)- Ctrl +
o
回到跳转前的文档
输入模式
在该模式下正常接收键盘的输入以编辑内容
仅介绍部分按键的使用
- Home 光标移动到行首
- End 光标移动到行首
- Page Up 向上翻页
- Page Down 向下翻页
- Esc 退出输入模式, 回到命令模式
底线命令行模式
在底线命令模式中, 可完成保存文档与设置等操作
一般将进入底线命令行模式的字符 :
也视为底线命令的一部分
常用的有
:w
保存文件:w [file]
另存为file
:q!
强制退出 vim 而不保存:wq
保存并退出 vim:set <设置>
在当前界面中设置 vim (具体见 vim 配置)
vim 配置
参考文档 https://www.cnblogs.com/rainouyang/p/13873345.html
通过以下文件对 vim 进行配置
/etc/vim/vimrc
全局配置~/.vimrc
用户配置
在配置文件时
- 使用
"
表示单行注释 - 使用
set <选项[=值]>
进行配置
推荐的配置有
" 显示行号
set number
" 距离上下窗口 6 行时自动换行
set scrolloff=6
" 超出屏幕的行折行显示
set warn
" 在状态栏显示标尺
set ruler
" 在状态栏显示当前模式
set showmode
" 在状态栏显示当前命令
set showcmd
" 设置 tab 长度
set tabstop=4
" C/C++ 模式缩进
set cindent
" 自动缩进
set ai
" 不创建恢复文件 (默认会创建一个 . + 文件名 + .swp 恢复文件)
set noswapfile
" 使用 utf-8 编码
set encoding=utf-8
文件权限
文件属性
- 文件类型
d
目录文件l
软连接c
串行端口设备-
一般文件
- 文件权限
r
读取权限w
写入权限x
执行权限-
无权限
- 文件属性字符
- 0 位表示文件类型
- 1-3 位确定文件所有者的权限 (owner, u)
- 4-6 位确定与文件所有者同组的权限 (group, g)
- 7-9 位确定其他用户的权限 (other, o)
- 权限数字表示
将文件属性字符的 1-3, 4-6, 7-9 位分别视为一个三位二进制数
该二进制数的第一位对应r
, 第二位对应w
, 第三位对应x
当取0
时, 表示-
即无权限
例如761
对应了属性字符rwxrw---x
注意
- 对于 root 用户, 不受权限影响
- 默认情况下创建文件的权限为
rw-r--r--
查看文件属性
ls [-luRa] [path]
参数
path
路径- 如果给出目录路径, 则将列出该文件夹下所有文件的信息
- 如果给出文件路径, 则将列出该文件的信息
- 如果没有给出路径, 则将列出当前工作目录下所有文件的信息
选项
-l
默认情况下仅会列出文件名, 如果启用该选项, 还将列出文件的详细属性-u
需要配合选项-l
使用, 详细信息中显示最后访问时间 (默认显示的时最后修改时间)-R
将递归显示文件夹下的文件信息-a
显示隐藏文件 (即以.
开头的文件)
对于查看复杂目录结构, 更推荐使用 tree 命令
该命令可配合 grep 筛选信息
通过权限数字修改文件权限
chmod [-R] <xyz> <file>
参数
xyz
文件新的权限数字file
文件或目录名
选项
-R
如果选择的是目录, 则递归修改该目录下所有文件
通过符号类型修改文件权限
chmod [-R] u[= | + | -]<ur> g[= | + | -]<gr> o[= | + | -]<or> <file>
参数
ur
文件所有者的权限字符gr
文件所有者同组用户的权限字符or
其他用户的权限字符file
文件或目录名=+-
分别表示设置, 新增, 删除权限
选项
-R
如果选择的是目录, 则递归修改该目录下所有文件
软件下载与安装
软件安装与管理
此处介绍的为 Debian 与 Ubuntu 下的包管理工具 apt
apt [-yq] [command]
- 命令选项
-y
安装过程自动确认-q
静默安装
- 常用的管理操作有
install <package>[=<version>] [--no/only-upgrade]
安装指定软件包version
安装指定版本号的软件包--no-upgrade
如果已经安装, 则不进行升级--only-upgrade
仅当已安装时, 升级该软件包- 一般可使用 Tab 补全包名, 避免搜索
<remove | purge> <package>
删除指定软件包remove
仅删除软件包purge
同时删除软件包与其配置文件
- 常用的更新操作有
update
获取可更新的软件包list --upgradable
列出可更新的软件包[full-]upgrade
升级所有可更新的软件包full-
通过重新安装的方式更新软件包
autoremove
清理不再使用的依赖和库文件
- 常用的查询操作有
list [--upgradeable | --installed | --all-versions] [package]
根据软件包名搜索, 可以使用通配符--upgradeable
仅搜索可升级的软件包--installed
仅搜索已安装的软件包--all-versions
列出同一软件包的所有版本package
省略时将列出所有软件包
search <keyword>
根据关键词搜索软件包, 可以使用通配符show <package>
显示软件包的详细信息
注意, 在 Shell 脚本等环境下, 建议使用 apt-get
代替, 二者基本相同
软件包安装
在 Debian 类的 Linux 系统下, 除了 apt, 还可使用命令 dpkg 管理软件包
该命令与 apt 类似, 但不包含下载功能, 用于安装下载得到的软件包 (一般有后缀 .deb
)
通常的使用方式有
dpkg -i <file>
安装软件包file
(一般有后缀.deb
)dpkg -r <pkg>
卸载名称为pkg
的软件包dpkg -P <pkg>
卸载软件包pkg
, 并清除配置文件dpkg -l
列出所有软件包, 可通过类似 less 命令的方式浏览内容dpkg -s <pkg>
显示软件包的详细信息dpkg -L <file>
显示软件包的安装文件
文件下载
参考资料 https://blog.csdn.net/m0_71218711/article/details/135465743
使用命令 wget
用于下载文件, 常用的使用方式有
wget [-cbr --spider] [-o] [-P/O] <url>
-c
从上次中断的位置继续下载-b
在后台进行下载, 可配合命令 tail 查看后台下载日志 (此时默认为./wget-log
) 实现观察下载进度的效果-r
递归下载指定url
下的所有文件--spider
仅测试url
是否有效-o <log>
将日志文件保存至路径log
, 默认为直接输出到控制台-P <dir>
将下载结果保存到文件夹dir
中-O <file>
将下载结果另存为file
url
文件链接地址, 支持http
,https
,ftp
等协议
文件压缩与存档
参考文档 https://blog.51cto.com/u_15346415/5093448
使用命令 tar
完成文件的压缩以及存档
该命令的基本形式为tar [act][method][opt] [dest] [dir]
该命令的参数主要由以下部分组成
act
执行的动作-c
创建压缩文档-x
解压缩-t
列出压缩文档内的内容
该动作仅需要-f
指定压缩文档, 可配合 grep 进一步筛选
method
压缩方法 (以下选项相互排斥)-a
根据文件后缀自动识别- 不指定压缩方法
- 使用后缀
.tar
- 此类数据没有压缩, 仅是将目录归档为一个文件
- 使用后缀
-z
使用 gzip 作为解压与压缩工具- 使用后缀
.tgz
或.tar.gz
- 压缩时间最快, 压缩率最低, 使用最广泛
- 一般用于压缩小文件
- 使用后缀
-j
使用 bzip2 作为解压与压缩工具- 使用后缀
.tbz
或.tar.bz2
- 压缩时间与压缩率适中
- 一般用于压缩大文件
- 使用后缀
-J
使用 xz 作为解压与压缩工具- 使用后缀
.txz
或.tar.xz
- 压缩时间最慢, 压缩率最高
- 一般用于压缩大文件
- 使用后缀
-Z
使用 compress 作为解压与压缩工具- 使用后缀
.taz
或.tar.Z
- 几乎不使用
- 使用后缀
opt
其他设置选型-v
显示操作的详细过程-p
保留文件的原始属性 (常用于备份)--exclude=<file>
解压 / 压缩时排除指定文件或目录
dest
目标确定-C <dir>
仅用于解压, 设置解压结果存放的文件夹-f <archive>
指定压缩或解压文件的名称. 该选项必须位于最后 (包括压缩结果与解压目标)- 压缩时, 建议按上方的后缀标准, 根据压缩方法选择后缀
file
文件参数- 压缩时表示目标被压缩的目录或文件
- 解压时表示解压的文件或目录 (文件使用
-t
获取的压缩文件内路径表示), 为空则解压整个文件
系统与用户管理
用户管理与设置
关于用户组管理有
groupadd <用户组名>
创建用户组groupdel <用户组名>
删除用户组- 获取用户组信息
- 通过查看文件
/etc/group
可查询用户组信息
每行各一条信息, 表示格式为组名:口令:组编号:用户
- 通过查看文件
关于用户管理有
useradd [-c] [-g] [-s] [-G] <用户名>
添加用户-c <comment>
用户描述,comment
为描述内容-g <用户组>
用户所属用户组-G <用户组1>,<用户组2>,...
用户所属的附加组
如通过设置用户为sudo
的附加组可使其成为超级用户-s <Shell 程序>
用户的登录 Shell 程序用户名
添加用户的用户名- 注意, 用户创建后
- 用户将处于锁定状态无法登录, 需要使用
passwd <用户名>
设置密码 - 用户的主目录
home/<用户名>
可能不存在, 需要创建
- 用户将处于锁定状态无法登录, 需要使用
usermod [-c] [-g] [-s] [-G] <用户名>
修改用户- 该命令的设置选项含义与
useradd
一致 -aG
使用-G
将覆盖附加组, 可使用该选项可添加附加组用户名
被设置用户的用户名
- 该命令的设置选项含义与
userdel [-r] <用户名>
删除用户-r
同时删除用户的主目录用户名
被删除用户的用户名
passwd [-lud] [用户名]
设置用户密码 (非超级用户仅能使用该命令修改自己的密码)- 如果没有选项, 则为修改用户密码 (该方式也可以解封被
-l
禁用的账户) -l
禁用账户, 此时用户将无法登录- 可用于封禁
root
用户以保护系统 - 通过
useradd
创建的用户默认为禁用状态
- 可用于封禁
-u
解禁账户, 仅用于设置过密码的被封禁账户-d
删除密码, 此时用户登录不需要密码
- 如果没有选项, 则为修改用户密码 (该方式也可以解封被
- 获取用户信息
- 通过查看文件
/etc/passwd
可查询用户基本信息 (所有用户均可查看)
每行各一条信息, 表示格式为用户名:密码:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 通过查看文件
/etc/shadow
可查询高级用户信息
每行各一条信息, 表示格式为登录名:加密密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- 通过查看文件
关于用户登录
whoami
获取当前用户名su [-c | -m | -l | -s] <name>
切换用户-c <cmd>
切换为指定用户执行指令cmd
后回到当前用户-m
切换到指定用户后保持当前的环境变量-l
切换到指定用户并重置环境变量-s <shell>
使用指定的 Shell 程序shell
登录用户name
用户名称, 默认为root
sudo <cmd>
以超级用户的方式执行命令- 通过该命令, 即使不登陆
root
, 使一般用户也能以超级用户的方式执行特殊命令 - 仅文件
/etc/sudoers
中标注的使用者可以使用此命令 - 通过修改
/etc/sudoers
可对该命令的使用者进行设置, 设置方法见此文件中的注释 - 一般情况下,
root
用户与附加组为sudo
的用户可使用sudo
- 通过该命令, 即使不登陆
环境变量设置
export <变量名>=<变量值>
设置 / 创建当前终端的环境变量- 变量定义可参考 Shell 变量定义
- 在原变量上增加内容如
PATH
可使用PATH=$PATH:<新内容>
, 其中:
为 Linux 下PATH
的路径分隔符
unset <变量名>
删除环境变量env [-0]
打印所有环境变量-0
使用\0
分隔各条结果, 而不是\n
reset
重启当前终端 (以此重置所有环境变量设置)
注意, 以上设置仅在当前终端生效
如果希望设置全局环境变量, 可通过设置 Shell 启动时执行脚本实现
- 配置全局的环境变量, 则应在文件
/etc/profile
中使用export
命令定义 - 配置用户的环境变量, 则应在文件
~/profile
中使用export
命令定义
系统进程管理
ps [-au]
查询系统进程状态 (可配合 grep 筛选信息)-a
显示所有进程-u
显示进程的详细信息
pstree [-ap]
显示系统进程树-a
显示进程的详细信息-p
显示进程的 PID
kill [-s | -l | <pid>]
终止指定进程pid
终止进程的pid
, 使用默认方式终止进程 (发送信号SIGTERM
)-l
列出所有进程终止信号的名称与序号-s <sig> <pid>
使用指定信号sig
(可以给出完整名称或序号) 终止进程pid
常用的信号有SIGTERM
正常方式退出进程SIGHUP
重新加载进程SIGKILL
强制退出进程
pkill [-<n>] <name>
杀死指定名称的进程-<n>
杀死进程的信号的编号 (使用kill -l
获取), 默认为SIGTERM
name
进程名称- 一般即进程的程序名, 不包括参数
- 可以使用通配符
*
,?
, 推荐使用"
包裹 - 可以一次性杀死多个同名的进程
系统关闭相关命令
sync
将内存中的数据保存到硬盘中, 在关闭或重启系统前, 都应当执行这一命令shutdown [-hprc] [time] ["message"]
停止, 关闭, 重启系统-H
停止系统, 此时系统仍然通电处于最低维护状态, 默认操作-p/h
关闭系统, 此时系统断电, 部分情况下与-H
相同-r
重启系统-c
取消计划中的操作time
计划时间, 常用的表示有now
立刻执行 (默认)+m
在m
分钟后执行
message
执行该命令后, 打印信息
exit
退出当前终端
系统服务管理
服务即一类特殊的程序, 这些程序通常在开机时启动, 并运行在后台
使用命令 systemctl
管理系统的服务
常用的命令有
- 查询服务
systemctl list-units [PATTERN]
查询当前正在运行的所有服务PATTERN
匹配的服务名称, 可使用通配符, 默认为所有服务
由于服务名称不确定, 推荐使用*...*
的方式查询所需的服务systemctl list-unit-files [PATTERN]
查询当前系统安装的所有服务
要求与list-units
相同
- 管理当前的服务
systemctl start <NAME>
启动指定名称的服务NAME
服务名称, 默认可以不带后缀.service
systemctl restart <NAME>
重启指定名称的服务 (当服务的配置修改时, 应当通过此命令使之生效)systemctl stop <NAME>
停止指定名称的服务systemctl status <NAME>
获取指定名称服务的运行状态
- 配置服务
systemctl enable <NAME | PATH>
安装服务, 服务在安装后将在开机时自动启动NAME
服务名称也即服务配置文件名称, 默认的搜索路径为/etc/systemd/system
PATH
服务配置文件路径, 关于服务配置文件见创建服务的介绍
systemctl disenable <NAME>
解除指定服务的安装
- 创建服务
通过创建服务, 可实现开机自动启动的效果, 但更推荐使用 crontab 实现开机与定期执行任务
关于这部分内容, 可参考 https://www.kancloud.cn/lengyueguang/linux/2042523
其他实用命令
查看文件结构
使用命令 tree
可以查看目录下文件的详细结构
tree [-asC] [-L] [dir]
-a
显示所有文件-s
显示文件或目录的大小-C
以彩色的方式显示-L <n>
最多显示n
层目录dir
查询结构的根目录, 默认为当前目录
定期执行任务
参考教程 https://zhuanlan.zhihu.com/p/58719487?utm_source=wechat_session
安装 crontab
- 通过安装指令安装
crontab
- 检查服务
cron
或crond
是否安装
使用以下命令进入配置文件 crontab [-u] [-e | -l]
-e
进入配置文件编辑-l
打印配置文件, 可配合重定向以备份配置-u <user>
设置由指定用户执行的定期任务, 默认为 root
配置文件的基本格式为
注释
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
<time> <command>
...
其中
- 基本参数 (一般按示例即可)
SHELL
执行命令时的 Shell 程序路径PATH
环境变量PATH
的值MAILTO
将任务输出发送到指定用户的邮箱, 一般设置为""
, 即不发送HOME
环境变量HOME
的值
time
命令执行时间- 对于指定日期与时间的任务, 可参考 https://crontab.guru/
- 可使用符号表示特定任务, 常用的有
@reboot
开机时执行@daily
每天执行@monthly
每月执行
command
待执行的命令, 注意
远程连接 SSH
参考 https://www.bilibili.com/video/BV1Sx4y1y7B2
基础知识
在使用 ssh 连接前, 确保 Linux 中服务
sshd
已正常启动Linux 中 ssh 配置文件夹位于
~/.ssh
, Windows 中 ssh 配置文件夹位于C:\User\<用户名>\.ssh
, 常用配置文件为known_hosts
之前连接过的远程服务其authorized_key
接收来自其他连接者的公钥
使用密码连接
ssh <user>@<ip>
ip
远程服务器的 ip 地址user
登录使用的用户名
生成密钥对
ssh-keygen -t <method> [-C <doc>]
method
生成算法, 推荐使用ed25519
doc
关于密钥对的说明- 执行该命令后, 将会询问密钥对文件保存地址与密钥对保护密码
- 命令完成后, 将在保存位置生成私钥文件与
.pub
的公钥文件
向远程服务器发送公钥
ssh-copy-id -i <pub> <user>@<ip>
pub
生成的公钥文件user
,ip
与密码链接时相同
通过密钥对方式连接
ssh -i <pub> <user>@<ip>
- 参数含义与
ssh-copy-id
相同 - 连接时需要输入公钥文件的保护密码
- 参数含义与
强制密钥对方式连接设置 (见视频介绍)
终端复用 tmux
即使只有一个真实终端, 可通过 tmux 实现对终端的复用, 使多个虚拟终端同时运行, 并在同一个终端中拆分窗口
参考 https://github.com/tmux/tmux/wiki/Getting-Started
- 基本概念
- 会话 session
- 会话可以理解为窗口管理器, 窗口必须在会话下管理
- 一个终端中允许多个会话运行, 但一个终端能有一个会话附加 (attach), 其他会话则在分离 (detach) 到后台运行
- 当会话被附加到终端时, 将会在下方显示一个状态栏, 从左到右分别显示
- 当前会话名称
- 当前窗口列表, 被选中的窗口有后缀
*
- 被选中的窗格名
- 当前时间
- 当会话内没有窗口时将自动销毁
- 窗口 window
- 窗口即显示在当前终端下的画面
- 一个会话中允许有多个窗口运行, 但终端仅显示一个窗口, 其他窗口则在后台运行
- 当窗口内没有窗格时将自动销毁
- 窗格 pane
- 窗格即最基本的终端单元, 由窗口管理
- 同一个窗口上至少有一个窗格, 多个窗格则将占据终端的不同部分并分别同时显示
- 当窗格创建时执行了特定程序 (带有
command
参数), 则窗格将在程序结束后自动销毁, 否则将在终端关闭后自动销毁 (使用exit
命令)
- 快捷键
- 快捷键只能在附加会话内使用
- 使用时应先按下 Ctrlb 作为前缀, 再按下其他键
- 会话 session
- 会话管理
仅能在 tmux 环境外进行会话管理, 进入特定会话后无法管理其他会话
以下命令默认在会话外, 即一般终端中运行tmux new [-d] [-n <session-name>] [command]
新建会话, 并在会话中创建一个窗口session-name
新建的会话名command
在新建会话的第一个窗口中执行命令, 可使用字符串''
包裹命令-d
创建会话后立刻分离, 用于创建后台程序
tmux attach -t <session-name>
将指定会话附加到终端上tmux kull-session -t <session-name>
销毁指定会话tmux kill-server
销毁所有会话tmux switch -t <session-name>
切换到指定会话 (在会话中使用)tmux rename-session -t <session-name> <new-name>
重名名会话tmux ls
列出所有会话 (可在任意场合使用)- 快捷键 Ctrlb + d 或命令
tmux detach
分离当前会话 (在会话中使用),
- 窗口与窗格管理
仅能在附加会话内管理该会话下的窗口, 在特定窗口下管理该窗口下的窗格
以下仅介绍部分常用命令, 更多操作可通过快捷键完成 (对应命令可查看手册)tmux new-window [-d] [-n <window-name>] [-t <window-number>] [command]
新建窗口, 窗口中有一个窗格window-name
新建的窗口名window-number
新建窗口的编号, 默认从1
往后编号command
在新建窗口的第一个窗格中执行命令-d
不使用新建的窗口作为当前窗口
tmux split-window [-hv] [-t <pane-number>] [command]
通过切分当前窗格创建窗格-h
沿水平方向切分当前窗格-v
沿竖直方向切分当前窗格pane-number
新建窗格的编号, 默认从0
往后编号command
在新建窗格中执行命令
tmux select-pane -t <pane-number>
通过编号选择窗格tmux select-window -t <window-name>
通过名称选择窗口tmux select-layout <layout>
使用预设布局当前窗格, 可选预设有even-horizontal
所有窗格横向拉伸, 沿纵向排列even-vertical
所有窗格纵向拉伸排列, 沿横向排列main-horizontal
其中一个窗格放大, 剩余窗格在底部横向排列main-vertical
其中一个窗格放大, 剩余窗格在右侧纵向排列tiled
尽量让各个窗格大小相等, 且行列数相等
- 窗格相关快捷键
- Ctrlb + % 沿水平方向切分当前窗格, 即
tmux split-window -h
- Ctrlb + " 沿竖直方向切分当前窗格, 即
tmux split-window -v
- Ctrlb + 方向键 向指定方向选择窗格
- Ctrlb + q 在窗格上打印编号
- Ctrlb + q + 数字 选择指定编号的窗格
- Ctrlb + x 销毁当前窗格
- Ctrlb + Space 重新布局窗格 (多次按下可切换布局)
- Ctrlb + % 沿水平方向切分当前窗格, 即
- 窗口相关快捷键
- Ctrlb + 数字 移动到指定编号的窗口
- Ctrlb + n 移动到下一窗口
- Ctrlb + p 移动到上一窗口
- Ctrlb + w 进入窗口选择器, 可在该选择器选择窗口 (Enter) 与查看窗口 (方向键)
- Ctrlb + & 销毁当前窗口
- 其他快捷键与使用
- Ctrlb + ? 列出所有快捷键
- Ctrlb + : 命令模式, 相当于向 tmux 输入命令 (不需要前缀
tmux
) - Ctrlb + [ 浏览模式 (复制模式), 在此模式下可通过光标上下移动终端, 浏览终端的历史输出, 该模式下有以下操作键
- q 退出浏览模式
- 方向键 移动光标
- CtrlSpace 开始选择内容 (该快捷键可能与 Windows 下的输入法快捷键冲突, 可能需要关闭输入法快捷键)
- Ctrlw 复制选择内容到剪切板中并退出
- 通常使用流程
- 编写脚本用于组织窗口与运行程序
- 使用
tmux new-window [command]
创建新窗口, 并在窗口中执行命令 - 使用
tmux split-window [command]
创建新窗格, 并在窗格中执行命令 - 使用
tmux select-layout main-vertical
设置窗格布局 - 使用
zsh
在运行该脚本的窗格上创建一个新终端 (通常即最后一句)
- 使用
- 使用
tmux new-window 'zsh <脚本文件>'
根据以上创建的脚本创建会话
- 编写脚本用于组织窗口与运行程序
其他实用命令
man <命令名称>
获取命令的详细帮助, 一般情况下使用该命令可获得比--help
更详细的信息
查看文档的方式与 less 相同whereis <命令>
查询命令对应的应用程序与库所在地址free [-ht] [-s]
查看当前内存状态-h
以易于阅读的方式显示信息 (主要为使用数字 + 大小单位
的方式显示, 默认以kb
为单位)-t
显示统计信息-s<x>
持续观察, 且每间隔x
秒更新一次状态
df [-ha] [--total]
查看当前磁盘的剩余空间 (Disk Free)-h
以易于阅读的方式显示信息 (主要为使用数字 + 大小单位
的方式显示, 默认以kb
为单位)-a
显示所有文件系统类型的磁盘--total
显示所有硬盘的统计信息
ip [-s] [-c] <object> show
查询网络状态 (该命令也可用于设置网络, 但此处不介绍)-s
显示详细信息-c
使用彩色显示信息object
查询对象, 常用的对象有link
网络设备address
网络地址
time <command>
计算运行命令command
所消耗的时间 (该命令在 bash 与 zsh 上的表现不同)date [+"format"]
获取当前时间format
使用格式format
输出, 设置可参考 https://www.runoob.com/linux/linux-comm-date.html
常用的格式有%F
显示当前完整日期, 可用于日志名称,%T
显示当前完整时间
sleep <number>[smhd]
等待一段时间number
等待时间smhd
时间单位s
秒m
分h
时d
天