Linux 基础与常用命令笔记
Linux 基础与常用命令笔记
参考教程 https://www.runoob.com/linux/linux-tutorial.html
基本概念
路径
路径的表示方式
- Linux 中, 使用
/划分不同层级的目录 - Linux 中存在以下四种特殊目录用于目录开头
/表示根目录 (用于绝对路径)./表示当前工作目录 (用于相对路径)~/表示用户的主目录..表示上一层目录
- 目录与文件的表示
- 通常以文件或目录的完整路径 (绝对或相对) 表示这一文件或目录
- 表示目录时, 可以在最后加上
/以强调这是一个目录, 对于以目录为参数的命令无法识别目录时, 可尝试使用此方法
Linux 根目录结构
Linux 的根目录中, 一般有如下目录
- 一般文件目录
/home存放各个用户的主目录, 一般主目录即/home/<用户名>/rootroot 用户的主目录/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字节,kkb,Mmb,Ggb
- 比较方式: 使用
-[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>将下载结果另存为fileurl文件链接地址, 支持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获取), 默认为SIGTERMname进程名称- 一般即进程的程序名, 不包括参数
- 可以使用通配符
*,?, 推荐使用"包裹 - 可以一次性杀死多个同名的进程
系统关闭相关命令
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/systemPATH服务配置文件路径, 关于服务配置文件见创建服务的介绍
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登录使用的用户名- 登录到 Windows 时注意
user可通过服务端的whoami命令确定- 如果使用 Microsoft 账户, 则登陆密码为对应账户密码, 不是 pin
生成密钥对
ssh-keygen -t <method> [-C <doc>]method生成算法, 推荐使用ed25519doc关于密钥对的说明- 执行该命令后, 将会询问密钥对文件名称与密钥对保护密码
- 命令完成后, 将在保存位置生成私钥文件与
.pub的公钥文件 (建议在 ssh 配置文件夹执行命令)
向远程服务器发送公钥
ssh-copy-id -i <pub> <user>@<ip>pub生成的公钥文件user,ip与密码链接时相同- 将公钥文件内容添加到服务端的
authorized_keys可以实现同样的效果
通过密钥对方式连接
ssh -i <private> <user>@<ip>private生成的私钥文件- 连接时需要输入公钥文件的保护密码
强制密钥对方式连接设置 (见视频介绍)
终端复用 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天