基于 RedHat 系的 Linux 常用命令 & 常见系统设定
闲言碎语
除特定指明外,本文默认基于 RedHat Enterprise Linux 8+ 的阐述。
基于CentOS推出的开源系统,国内的阿里推出Anolis OS,华为的OpenEuler。为填补因 CentOS Linux 稳定版本停服而留下的空白,境外的RockyLinux,AlmaLinux。
同样的基于RHEL的下游开源系统:
Rocky Linux
这一切都始于一条博客评论
2020年12月8日,Red Hat公司宣布将停止开发CentOS(一个可用于生产环境的Red Hat Enterprise Linux下游版本)。作为替代,Red Hat采用该操作系统较新的上游开发版本——称为 "CentOS Stream"。作为回应,CentOS的最初创始人格雷戈里·库尔泽(Gregory Kurtzer) 通过CentOS网站上的评论宣布,他将再次启动一个项目以实现CentOS的最初目标。而之所以命名为Rocky Linux,是为了向早期CentOS的联合创始人洛基·麦高(Rocky McGaugh) 致敬。
作为RHEL的下游Linux操作系统替代方案,并继承了原CentOS的开源免费特点。2021年6月21日,Rocky Linux 8.4 稳定版发布,代号为"Green Obsidian"(绿色黑曜石)。官网:https://rockylinux.org/
AlmaLinux
源自于CloudLinux团队,一个开源的、由社区拥有并治理且永久免费的企业 Linux 发行版,专注于长期稳定性,提供一个强大的生产级平台。AlmaLinux OS 与 RHEL® 和 CentOS Stream 是 1:1 的二进制兼容。
AlmaLinux OS 是一个企业级服务器操作系统和一个稳定的 Linux 发行版,定期发布,支持周期很长。 您可以依靠 AlmaLinux OS 来运行任何关键工作负载。背靠CloudLinux团队及财务支持,受到大众的关注。官网:https://almalinux.org/
受众面
本人更青睐于AlmaLinux,因为看到各大服务商都有提供AlmaLinux的支持;比如很多的云服务商有提供AlmaLinux系统的选项,比如GitLab有提供支持到的系统AlmaLinux,等等吧...这是AlmaLinux给我留下的印象。RockyLinux类似的现象就比较少吧,目前是这样的。也许...就看后续各自的发展了。
还有一款足够优秀的 Springdale Linux (SDL) 来自于普林斯顿大学,不过目前只有x86平台镜像,参考官网。
作者:[Sol·wang] - 博客园,原文出处:https://www.cnblogs.com/Sol-wang/p/14792892.html
系统分区
基本的必要分区
挂载点 | 建议 | 说明 |
---|---|---|
/ |
剩余最大空间 | 根节点 |
/home |
>10% | 按用户量 |
/var |
≈50% | 默认安装应用的文件数据 |
/boot |
100MB - 2GB | 通常500M以内(难免会有大型App) |
/boot/efi |
200 MB - 500 MB | |
/BISO boot |
2MB - 4MB | BIOS使用空间 |
swap |
2GB - 系统最大内存容量 | 物理内存不足时启用的临时内存 |
Linux Terminal tool
名称/方式 | 说明 |
---|---|
Windows cmd | 基础工具 |
Windows PowerShell | 基础工具,Microsoft持续更新 |
Windows Terminal | Microsoft推出的新工具,美观 |
Fluent Terminal | 专用工具,美观 |
Termius | 专用工具,美观简洁,跨平台云账户 |
WindTerm | 专用工具,美观,专业,功能全面 |
Tabby | 专用工具,美观,支持插件,官网有Web版 |
Xshell | 专用工具,企业版功能强大 |
MobaXterm | 专用工具,企业版功能强大 |
Warp | 跨时代的终端,值得期待(目前仅支持Mac) |
PuTTY | 老牌专用工具 |
远程连接 | 说明 |
---|---|
telnet {目标服务器} {连接端口} | Telecommunications Networks,早期远程连接命令,明文不加密,端口 23 |
ssh {登录用户}@{目标服务器} -p {端口} | Secure Shell,终端连接到 目标服务器,安全加密,公钥验证,默认端口 22 |
Base
命令 | 说明 |
---|---|
reboot |
重启Linux系统 |
logout |
退出终端登录 |
poweroff |
断电关机 |
halt [-p] |
关机 [断电] |
shutdown -h now |
定时关机(管理员权限) |
shutdown -r now |
定时重启(管理员权限) |
uname -a |
系统基础信息 |
dmesg |
查看系统开启过程日志 |
clear |
清空终端屏幕显示内容 |
Tab 键 | 命令补全;单按:精准补全、双按:可选命令 |
Logon | |
w,who |
查看当前用户登录信息 |
last |
查看当前用户登录历史 |
lastlog |
查看所有用户登录记录 |
passwd {用户名} |
修改用户的密码 |
su {目标用户名} |
切换当前系统用户 |
sudo {cmd} |
root 权限执行命令 |
id [用户] |
查看当前[指定]用户的 UID\GID 及所属的用户组等信息 |
System settings
环境变量 | |
---|---|
env |
Environment;查看系统全局环境变量 |
printenv HOME |
打印系统全局环境变量(不带$) |
set/unset |
打印/删除 系统全局 + 用户全局 + 用户局部 环境变量 |
export |
导出局部变量,使其成为全局变量(从局部中导出到全局中) |
echo '=>$a' / echo "=>$a" |
输出变量值;单引号被视为纯字符,双引号解释出变量值 |
区域/语言 | |
locale |
查看系统配置的区域字符集 |
locale -a |
查看系统支持的区域字符集 |
localectl |
Locale Control;查看区域字符集(locale 升级版) |
localectl list-locales |
区域字符集列表 |
localectl set-locale {encoding} |
设置区域字符集 |
主机信息 | |
hostname |
查看主机名 |
hostname -b[oot] {newname} |
设置临时的主机名 |
hostname -a[lias]d[omain][i]p-address[I][s]hort[f] |
查看临时的主机名 [别名/域名/全部IP/IPv4/短名/长名] |
hostnamectl |
Hostname Control:查看主机信息 |
hostnamectl set-hostname {newname} |
设置静态(永久)主机名 |
hostnamectl set-hostname {newname} --pretty |
不受限制的个性化静态主机名 |
硬件资源
free [-h] |
内存使用情况 [换算单位] |
fdisk [-l] |
硬盘管理 [所有分区信息] |
df [-h] |
磁盘的空间使用情况 [换算单位] |
du [-achs] |
所在目录下的所有子目录 [全部/总和/换算/总计] |
命令行状态切换
输入命令回车后系统执行当前命令;当前命令执行完成后自动回到命令行状态,便于再次输入命令。
当前命令未执行完成时(如:拷贝大文件,升级安装包等),命令执行状态。
以下说明了对以上场景的操作:
命令 | 说明 |
---|---|
& |
指定后台运行 |
jobs -l |
当前终端后台启动的作业 [PID] |
fg %{job-id} |
Foreground;后台暂停的进程转到前台运行 |
bg %{job-id} |
Background;后台暂停的进程在后台继续运行,默认为最后一个Job |
Ctrl+c | 终止/结束 当前运行,返回命令行状态 |
Ctrl+z | 暂停/挂起 并放后台,切换回命令行状态(可 fg 或 bg 恢复继续执行) |
Ctrl+d | 退出/断开/注销 当前状态(类似与exit,失去终端的连接) |
Folder
命令 | 说明 |
---|---|
pwd |
Print Working Directory当前所在目录 |
ll [-ah] |
列出当前目录下全部[带隐藏的/换算文件大小]文件 |
ls [-alh] [*{filename}*] |
List;当前目录下内容 [全部/列表/换算] [文件名包含] |
cd |
Change Directory;切换到个人目录 |
cd {目标路径} |
切换到指定路径 |
cd [..] [../..] [-] |
切换到 [上级] [上上级] [上次] 目录 |
du [-sh] [*] |
所在目录下的[子]文件信息 [大小换算单位] [每个文件/夹] |
du -s * | sort -n | head/tail -5 |
当前目录中每个文件[夹],按大小排序,-nr反向,前/后5个 |
find {dir} -name {*.txt} |
查找,指定目录模糊搜索文件 |
find {dir} -iname {key} -type f|d|l |
查找,模糊搜索;i=忽略大小写;type=文件|目录|连接 |
MAKE 创建 | |
mkdir {目录名称} |
Make Directory:创建文件夹 |
mkdir -p {目录名称} |
创建多级目录 --parents |
mkdir -m=r-- {目录名称} |
创建目录并赋予权限 --mode |
CHANGE 变更 | |
mv {旧文件夹名} {新目录文件夹名} |
Move:移动文件(重命名) |
rm -rf {指定目录或文件} |
Remove:删除文件夹/文件,-r递归 -f 强制 |
COPE 复制 | |
cp {源目录} {目标目录} |
Cope;复制文件 |
cp -a {源目录} {目标目录} |
保留快捷方式、属性等目录下的全部 |
cp -r|i|f|p|l {源目录} {目标目录} |
递归|可覆盖|强制不提示|保留归属权限|复制成链接 |
\cp -r {源目录} {目标目录} |
递归复制目录/文件(\ 强制覆盖) |
scp -r {local_file} {user}@{ip}:{remote-folder} |
Secure Cope;远传上传文件 -r 递归目录 |
scp -r {user}@{ip}:{remote-folder} {local-folder} |
下载远传文件 -r 递归目录 |
File
命令 | 说明 |
---|---|
which {filename} |
文件的所在目录 |
stat {filename} |
查看文件属性(大小、类型、权限、时间等) |
nl {filename} |
查看文件内容,自带行号 |
cat {filename} [-n] |
Concatenate and print files;带行号的内容显示 |
less {filename} |
分页查看文件;b|空格:上下页;u|d:前后半页;?|/{key}:上下搜;N:反向再搜;q:退出 |
more {filename} |
分页查看文件;空格/f:下页,b:上页,回车:下一行,q:退出 |
tail -f {filename} |
实时滚动显示文件内容 |
tail -n 20 {filename} |
查看文件内容的后n行,默认10行,-n 指定显示行数 |
head -n 20 {filename} |
查看文件内容的前n行,默认10行,-n 指定显示行数 |
grep {关键字/正则} {文件} |
内容搜索,指定文件中查找关键字 |
{命令} | grep {关键字/正则} |
流搜索,按过滤方式;跟在其它命令后的输出流搜索 |
CREATE 创建 | |
> {filename} |
创建新的空文件 |
cat > {filename} |
创建新文件并录入内容,Ctrl+d退出 |
touch {filename} |
更新文件的 访问变更时间,自动创建 |
echo '{文本}' > {目标文件名} |
命令结果流覆盖到目标文件内,自动创建 |
echo '{文本}' >> {目标文件名} |
命令结果流追加到目标文件内,自动创建 |
Date
命令 | 说明 |
---|---|
日期 | |
date |
显示时间 |
date '+%s' |
1970年后的秒数 |
date '+%T %D' |
默认格式日期时间 |
date '+%Y-%m-%d %H:%M:%S' |
指定格式日期时间 |
date -r '{filename}' |
文件的最后变更时间 [reference] |
date -s '2023/03/18 15:30:00' |
设置系统日期时间 [set] |
date -d today|now|tomorrow|yesterday |
输出指定描述日期 [date] |
日历 | |
cal |
显示当月日历 |
cal -y|Y |
显示当年 | 之后的12个月 |
cal -n {月份个数} |
显示未来月份数量的日历 |
时区 | |
tzselect |
重设时区 |
timedatectl |
所属时区 |
timedatectl list-timezones |
可用时区 |
timedatectl set-timezone {时区名} |
设置时区 |
Network
命令 | 说明 |
---|---|
ss |
Socket Statistics;套接字统计 |
ss -plant |
连接中的网络及端口 |
netstat -pantu |
连接中的网络及端口 |
ifstat [网卡名] |
网络[全部/指定]接口流量状态 |
dhclient {网卡名} |
以 dhcp 模式启用指定网卡 |
ip addr add {ip}/24 dev {网卡名} |
指定网卡追加 IP 地址 |
ip addr / ip route / ip rule |
网卡信息 / 路由信息 / 路由规则信息 |
nmtui:NetworkManager Terminal User Interface | |
nmcli:NetworkManager Command Line Interface | |
nmcli |
查看网络设备基本信息 |
nmcli g[eneral] [status] |
NetworkManager.service 状态 |
nmcli n[etworking] [on/off/connectivity] |
整体网络操作 开/关/查 |
nmcli c[onnection] [show] |
网络/网卡连接信息 |
nmcli c show {网卡名} |
指定网络/网卡连接详细信息) |
nmcli c modify [网卡名] {项} {值} |
修改网卡的参数 |
nmcli c reload [网卡名] |
重载所有/指定网卡配置文件 |
nmcli c load /etc/.../ifcfg-{网卡名} |
加载指定目录的配置文件 |
nmcli c up {网卡名} |
启动指定网卡 |
nmcli c down {网卡名} |
停止指定网卡 |
nmcli c delete {网卡名} |
删除指定网卡配置文件 |
nmcli d[evice] |
网络设备信息(nmcli device) |
nmcli d [show|status] |
网络设备详细配置信息|状态 |
nmcli d reapply {网卡名} |
重启网卡设备 |
nmcli d connect {网卡名} |
激活指定的网卡 |
nmcli d disconnect {网卡名} |
临时关闭指定网卡 |
nmcli --fields all c|d show [网卡名] |
查看类别下所有字段的所有配置信息 |
nmcli -f GENERAL d show [网卡名] |
查看网卡 device.general 字段下的所有配置信息 |
nmcli -f ipv4.addresses c show enp0s8 |
查看网卡 enp0s8 配置项 conn.ipv4.addresses 的值 |
User
命令 | 说明 |
---|---|
users |
当前已登录用户列表 |
cat /etc/passwd |
查看用户列表 |
cat /etc/group |
查看系统用户组 |
groups |
当前用户所属组 |
groups {用户名A} {用户名B} |
查看多个用户所属组 |
newgrp {groupname} |
当前用户切换到指定组为登录状态 |
管理 | |
useradd [-r] {uname} |
创建新用户 [-r系统级] |
useradd -g {组名} {用户名} |
创建新用户 指定归属组 |
useradd -g {gname} -s /sbin/nologin {uname} |
创建不可登录系统的用户 |
userdel {用户名} |
删除用户 |
usermod -i {新名} {旧名} |
修改现有用户名 |
groupadd {组名} |
创建用户组 |
groupdel {组名} |
删除用户组 |
groupmod -n {新名} {旧名} |
修改用户组名 |
usermod -g {新组名} {用户名} |
修改现有用户所属分组 |
Install
国内热门镜像站 | 说明 |
---|---|
南京大学 | 网速拉满 |
上海交通大学 | 网速拉满,资源一般 |
华为云 | 网速拉满,资源不多 |
清华大学 | 网速拉满,资源不多 |
中国科学技术大学 | 网速拉满,资源一般,说明不够详细 |
阿里云 | 网速有限制,貌似最快1MB/s |
校园网联合镜像站 | <中国教育和科研计算机网网络中心>,综合所有境内大学的镜像资源 |
资源库 | 说明 |
---|---|
Base | 官网源,系统自带 |
EPEL | 常用的,第三方(应用)资源库 |
ELRepo | 第三方(内核)资源库 |
命令 | 说明 |
---|---|
rpm:安装命令,程序依赖项需手动逐步安装 | |
rpm -qal | grep {关键字}* |
查询已安装(* 模糊搜索的占位符) |
rpm -ivh {filename.rpm} |
安装,显示安装过程及进度 |
yum:rpm的代替版,自动关联并安装依赖项 | |
yum repolist [enabled|disabled|all] |
显示本机所有可用的软件资源库信息 |
yum search {名称} |
搜索资源库中的软件安装包 |
yum info {名称} |
查看软件包详情 |
yum list {keyword}* |
在所有资源库中搜索包,已装的/未装的 |
yum list {名称} --showduplicates |
列出所有版本 |
yum list installed |
查询已安装应用 |
yum install {名称} |
安装指定应用 |
yum install {名称}-{版本} |
安装指定应用的指定版本 |
yum reinstall {名称} |
重装指定应用包 |
yum downgrade {名称} |
回滚指定软件的版本 |
yum remove {程序名} |
卸载已安装 |
yum autoremove |
卸载无用孤立的软件包 |
yum clean all |
清空安装包缓存 |
yum makecache |
重建包管理器缓存(新的缓存索引会更快) |
yum check-update |
查看系统中可升级的应用 |
yum update {应用名称} |
升级指定应用 |
yum update |
全部批量升级应用(系统级升级) |
yum distro-sync |
更新软件包到最新的稳定发行版 |
yum provides {命令} |
检查某个命令属于哪个安装包 |
yum-config-manager --enable {库名} |
永久启用作用的资源包库(旧版) |
yum-config-manager --disable {库名} |
永久禁用作用的资源包库(旧版) |
yum config-manager --set-enabled {库名} |
永久启用作用的资源包库(新版) |
yum config-manager --set-disabled {库名} |
永久禁用作用的资源包库(新版) |
yum --disablerepo='*' --enablerepo='epel' list {key}* |
本次 排除/指定 资源库的操作 |
dnf:新一代的更优秀的rpm软件包管理器,yum的替代版,于RHEL8+,格式同yum。 |
文本编辑器
命令 | 说明 |
---|---|
vi / vim {文件路径} |
Visual Interface;打开文件 |
编辑模式 i |
|
[ESC] | 退出当前(编辑)模式状态,进入命令模式状态 |
命令模式 | |
0 /$ |
行首 / 行尾 |
gg /G |
首行 / 尾行 |
yy /dd |
复制 / 剪切 所在整行 |
u /. |
撤回 / 重复 上次动作 |
p /P |
粘贴到 下一行 / 上一行 |
/{keywork} |
向下搜索关键字,按 n 查找下一个 |
?{keywork} |
向上搜索关键字 |
:w [filename] |
保存文件 write [另存为] |
:q |
退出文件 quit |
:[w][q]! |
[保存][退出]强制 |
:set [no]number |
[取消]显示行号 |
:set encoding=utf-8 |
设置编码格式 |
Common / Tools
命令 | 说明 |
---|---|
top |
时时显示 process 的动态 |
uptime |
系统运行时长|当前用户数|过去1/5/15分钟的平均负载 |
time {cmd} |
执行命令耗时;real:总耗时 |
uuidgen |
生成一个UUID,-r[andom] -t[ime] |
watch -n 1 -d {命令} |
周期性(1s)重复执行指定命令,全屏显示结果 |
{cmd} & |
于后台运行(不影响前端继续敲命令) |
{cmd} -daemon |
守护进程方式运行 |
nohup {cmd} |
no hang up;不挂断运行命令,忽略与终端断开的信号 |
nohup|setsid|screen <cmd> & |
于后台长久运行,不受其它干扰而被中断 |
管道命令 / 前后台命令 / 多命令 | |
{命令1} ; {命令2} ; {命令3} |
多命令按顺序在前端执行,无所谓成功失败 |
{命令1} | {命令2} |
管道命令;之前命令的处理结果,给之后的命令再处理 |
{命令1} | tee {filename} |
管道命令;将 前命令 的结果内容,覆盖到已存在的文件中 |
{命令1} || {命令2} |
逻辑命令;命令1失败后 才会执行命令2 |
{命令1} & {命令2} |
逻辑命令:前后端一起并行执行(最后命令在前端) |
{命令1} && {命令2} |
逻辑命令;之前命令顺利成功后,再执行之后的命令 |
tar:文件解压缩工具 | |
tar -czvf {form-dir} {xxx.tar.gz} |
文件压缩 |
tar -xzvf {xxx.tar.gz} -C {到指定目录} |
文件解压 [C:到指定目录] |
zip:文件解压缩工具 | |
zip -v -r {filename}.zip {from-dir} |
文件压缩 [v:显示过程] [r:递归] |
unzip -v -d {to-dir} filename.zip |
文件解压 [v:显示过程] [d:到指定目录] |
curl:Client URL 请求工具 | |
curl {url} |
网络请求 |
curl -v {url} |
--verbose,显示连接过程 |
curl -X GET {url} |
指定请求方式 |
curl -X POST -d[ata] 'p=abc' {url} |
表单POST提交方式 |
curl -I {url} |
仅输出返回Head |
curl -i {url} |
输出返回头和内容 |
curl -L {url} |
-L,跟随重定向跳转 |
curl -O {url} |
原名下载文件到当前目录 |
curl -C -O {url} |
-C,断点续传 |
curl -o /opt/newfilename.zip {url} |
下载到的目录及新名称 |
curl -# -o /opt/newfilename.zip {url} |
-#,显示进度条 |
curl -T {filename} ftp://{用户名}:{密码}@xxx.com/ |
-T,FTP上传文件 |
curl -O ftp://{用户名}:{密码}@xxx.com/filename.7z |
凭证方式,FTP下载资源 |
curl -v telnet://www.baidu.com:80 |
测试地址及端口是否畅通 [--verbose] 详细过程 |
wget:第三方下载工具 | |
wget {网络资源链接} {dir} |
下载资源到指定目录 |
netstat:系统网络状态 | |
netstat -a |
全部的网络状态 |
netstat -i |
显示网卡列表 |
netstat -pantu |
连接中的网络及端口 |
Authority
命令 | 说明 |
---|---|
chown -R {用户名}:{用户组} {作用目录} |
Change Owner;变更目录所属用户 |
chgrp -R {用户组} {作用目录} |
Change Group;变更目录所属群组 |
chgrp -R --reference={参考目录} {作用目录} |
Change Group;复制为相同的群组 |
chmod -R 754 {作用目录} |
Change Mode;权限设定(读/写/执行) |
文件目录权限字母表示法
文件目录权限八进制数字表示法
应用样例:
指定(=)权限:chmod u=rwx,g=rx,o=r {path}
追加(+)权限:chmod u+x,g+wx,o+w {path}
去除(-)权限:chmod u-x,g-w,o-wx {path}
全部(ugo)追加某种权限:chmod +w,+x {path}
Process
命令 | 说明 |
---|---|
ps |
Process Status;显示所有进程 |
ps -aux |
所有进程,包括其它用户的 |
ps -auxf |
所有关联(基于PID父子)进程的格式化(树形)方式展示 |
ps -auxfr |
运行的进程,-all -user -excute -format -running |
ps -aux --sort -pcpu |
按CPU利用率倒序排列 |
ps -aux --sort -pmem |
按内存利用率倒序排列 |
ps -aux --sort -pcpu,+pmem |
按CPU内存利用率综合排序 |
ps -aux --sort -pcpu,+pmem | head -n 5 |
head过滤显示前n条 |
pidof {server-name} |
横向打印出指定服务的所有(父子)进程标识 |
pgrep:Process grep 搜进程 | |
pgrep {server-name} |
纵向列出指定服务下所有(父子)进程标识 |
pkill {pid} |
停止指定编号的进程运行 |
pidwait {server-name} [-e] |
❓ |
kill:停止进程的运行 / 毁灭进程 | |
kill {Pid} |
发送停止运行的信号 |
kill -l |
列出命令 kill 终止运行的所有方式 |
kill [-15/-9] {Pid} |
指定方式的终止 [15默认终止/9无条件终止] |
pkill -F {pid-filename} |
停止服务进程,-F 按文件中的PID |
kill $(pidof {server-name}) |
停止指定服务下的所有(父子)关联进程 |
killall {server-name} |
停止指定服务下的所有(父子)关联进程 |
killall -l |
列出命令 killall 关联终止的所有方式 |
killall [-kill/-term] {server-name} |
指定方式的关联终止 [kill默认终止/term无条件终止] |
System Control
命令 | 说明 |
---|---|
Unit & Service | |
systemctl -a[ll] |
显示所有已安装的列表 |
systemctl [-a] --type=service |
[所有|活动]的服务列表 |
systemctl | grep {关键字状态等} |
模糊搜索 |
systemctl daemon-reload |
重载所有变更的配置 |
systemctl cat {name} |
查看指定(手动)配置文件信息 |
systemctl show {name} |
查看底层全部默认配置信息 |
systemctl [enable|disable] {name} |
设置开机启动 |
systemctl [is-enabled|is-active|is-failed] {name} |
查看状态 |
systemctl list-units |
已启动的详细列表,于内存中的 |
systemctl list-unit-files |
已安装的状态列表 |
systemctl --state=failed|--failed |
显示失败状态的列表 |
systemctl clean {name} |
清理运行时、缓存、状态、日志或配置 |
systemctl [start|stop|restart|status|reload|kill] {name} |
操作管理 |
Jobs | |
systemctl list-jobs |
作业列表 |
systemctl cancel {job-name} |
取消作业 |
Environment | |
systemctl show-environment |
显示所有环境变量列表 |
systemctl set-environment key=val |
设置一个或多个环境变量 |
systemctl unset-environment {key} |
取消设置 环境变量 |
System | |
systemctl is-system-running |
系统当前状态 |
systemctl list-machines |
主机和容器 列表 |
systemctl default|rescue|emergency |
进入系统模式:默认 | 挽救 | 紧急 |
systemctl -H {user}@{ip} {command} |
远程主机操作,ssh 模式,--host |
systemctl halt|poweroff|reboot|suspend|hibernate|hybrid-sleep |
关机/断电/重启/内存休眠/磁盘休眠/混合休眠 |
Firewall
命令 | 说明 |
---|---|
firewall-cmd --reload |
重载 |
firewall-cmd --list-ports |
查看 |
firewall-cmd --zone=public --add-port={新端口}/tcp --permanent |
添加 |
firewall-cmd --zone=public --remove-port={端口号}/tcp --permanent |
删除 |
firewall-cmd --add-forward-port=port={From-Port}:proto=tcp:toport={To-Port} |
转发 |
firewall-cmd --add-forward-port=port={From-Port}:proto=tcp:toaddr={To-IP_Addr} |
转发 |
History
命令 | 说明 |
---|---|
history |
列出 已执行过的命令列表记录 |
!! |
再次执行 上一次命令,等同 向上键+Enter |
!{row-number} |
再次执行 历史记录列表中 指定行号的命令 |
!{prefix} |
再次执行 以 prefix 开头的最后一个命令 |
!?{suffix} |
再次执行 以 suffix 结尾的最后一个命令 |
System log
文件 | 命令 | 说明 |
---|---|---|
/var/log/btmp |
lastb | 登录失败的用户信息、时间、远程IP |
/var/log/cron |
记录定时任务 crontab 的执行情况 | |
/var/log/dmesg |
dmesg | 系统开机时,内核自检信息 |
/var/log/lastlog |
lastlog | 所有用户最后一次登录信息 |
/var/log/maillog |
- | 邮件收发详细信息 |
/var/log/messages |
- | 系统常规综合日志 |
/var/log/secure |
- | 系统安全日志;密码凭证、认证状况 |
/var/log/wtmp |
last | 用户的登录注销启动停止信息 |
/var/log/audit/audit.log |
- | 进程、事件、安全、监控、权限、网络 |
Configuration
目录/文件 | 命令 | 说明 |
---|---|---|
/etc/hostname |
hostnamectl | 主机名配置文件 |
/etc/hosts |
- | 系统HOST配置文件 |
/etc/shells |
- | 系统支持的 Shell |
/etc/sysctl.conf |
sysctl | 系统内核配置文件 |
/etc/pam.d/system-auth |
- | 系统密码策略配置文件 |
/etc/yum.repos.d/ |
yum / dnf | 系统镜像配置文件目录 |
/etc/ssh/sshd_config |
- | SSH配置文件 |
/etc/security/limits.conf |
ulimit | 系统资源限制配置文件 |
/usr/lib/systemd/system/ |
systemctl | 系统服务默认配置文件目录 |
/etc/sysconfig/network-scripts/ifcfg-{网卡名} |
nmcli | RHEL8网卡配置文件地址 |
/etc/NetworkManager/system-connections/{网卡名}.nmconnection |
nmcli | RHEL9网卡配置文件地址 |
系统环境变量
profile
路径:/etc/profile
,用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。
当用户登录(login)时,文件会被执行,并从/etc/profile.d
目录的配置文件中查找 shell 设置。
示例:新增环境变量:export ABC=xxx
;运行生效:source /etc/profile
bashrc
系统级:位于/etc/bashrc
,对所有用户生效。
用户级:位于~/.bashrc
,仅对当前用户生效。
bashrc 文件只会对指定的 shell 类型起作用,bashrc 只会被 bash shell 调用。
bash_profile
bash_profile 单一用户有效,位于~/.bash_profile
,可以理解为某一个用户的 profile 目录下。
这个文件同样也可以用于配置环境变量和启动程序,bash_profile 也会在用户登录(login)时生效。
对比
/etc/profile
,/etc/bashrc
是系统全局环境变量设定;~/.profile
,~/.bashrc
用户Home目录下的私有环境变量设定,仅本用户生效。
中文支持
查看系统当前支持的语言字符集:localectl list-locales
若没有 zh_CN.UTF-8,查找中文语言安装包:dnf search *chinese*
安装简体中文语言包:dnf install langpacks-zh_CN.noarch -y
再次查看已支持的语言字符集:localectl list-locales
设置已支持的语言字符集:localectl set-locale zh_CN.UTF-8
;重启后生效
SSH 优化
# 关闭不必要的验证过程(GSSAPIAuthentication 和 UseDNS)
# 1、搜索配置项
cat /etc/ssh/sshd_config -n | grep GSSAPIAuthentication
cat /etc/ssh/sshd_config -n | grep UseDNS
# 2、编辑配置项
vi /etc/ssh/sshd_config
# GSSAPIAuthentication 变更为 no
# UseDNS 变更为 no
# 3、:wq 保存退出配置文件
# 4、重启SSH服务,使其生效
systemctl restart sshd
应用升级
系统默认为官方提供的资源库,默认通过官方资源库升级应用,可设置为国内镜像源(参考 install)# 1、清空包管理器缓存(yum/dnf)
yum clean all
# 2、重新建立包管理器缓存索引
yum makecache
# 3、查看可升级的应用
yum check-update
# 4、升级指定软件
yum update {name}
# 5、全部升级,自动升级可升级的软件(相当于整个系统升级)
yum update
# 注:有些应用安装慢,必须等到出现单独一行的Complete!字样,才算完成。
第三方库 EPEL 的应用
EPEL 是由 Fedora 社区打造,属于 RHEL 的上游,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装了 EPEL 后,可通过 yum 安装来自于EPEL库的软件。
# 1、安装 epel-release
yum -y install epel-release
# 2、验证 epel-release 库的启用
yum repolist all # 是否出现 epel 并默认 enabled
建议使用国内镜像源,可参考国内云镜像查看(验证)安装后的效果
# 清理 yum 缓存,重新建立包管理器缓存索引
yum clean all && yum makecache
# 测试搜索安装包,显示出 来自于不同的库
yum list sys* # 显示出的列从左到右依次是:包名.架构、版本号、来自库
第三方库 ELRepo 的应用
ELRepo 是用于 Enterprise Linux 软件包的RPM存储库。它支持Red Hat Enterprise Linux(RHEL)及其衍生版本,这里主要是为了用它来升级 Linux 内核 Kernel。
1、将 ELRepo 存储库安装到系统,参考官网:http://elrepo.org/tiki/HomePage# 首先要导入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# CentOS7的安装
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# CentOS8的安装
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
启用 ELRepo 的 elrepo-kernel 资源库(为后续内核升级做准备,或者忽略)
# 1、查看 ELRepo 库的配置文件
cat /etc/yum.repos.d/elrepo.repo
#
# 2、其中 ELRepo 的 elrepo-kernel 项默认为禁用,可启用 elrepo-kernel
# CentOS 8 方式启用 elrepo-kernel:
yum config-manager --set-enabled elrepo-kernel
# CentOS 7 方式启用 elrepo-kernel,编辑所属配置文件:vi /etc/yum.repos.d/elrepo.repo
# 找到 [elrepo-kernel] 下的 enabled 设为1,没有则在此区域追加一行。示例行:enabled=1
#
# 3、查看(验证)启用的资源库列表中是否包含 elrepo-kernel 库
yum repolist enabled
2、更换资源库的镜像源 使用国内镜像源,可参考清华大学 ELRepo 镜像使用帮助也可使用如下命令方式变更镜像源
# 依据清华大学的使用帮助,命令方式如下:
# 1、mirrorlist=所在行全部加注释#
sed -i 's/^mirrorlist=/#&/g' /etc/yum.repos.d/elrepo.repo
# 2、域名 elrepo.org/linux 的替换
sed -i 's/elrepo.org\/linux/mirrors.tuna.tsinghua.edu.cn\/elrepo/g' /etc/yum.repos.d/elrepo.repo
3、更新 yum 可用资源库的引用缓存
# 清理 yum 缓存
yun clean all
# 生成新缓存
yum makecache
# (可选)测试搜索安装包,显示出 来自于不同的库
yum list libb* # 显示出的列从左到右依次是:包名.架构、版本号、来自库
4、通过 ELRepo 库安装新内核
# 列出库中可用的最新内核版本(以下示例仅从 ELRepo 的 elrepo-kernel 库安装,ml:最新稳定版,lt:长期支持版)
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available | grep kernel-
# 安装指定版本(名称 kernel-ml:为前缀的整套安装)
yum --disablerepo="*" --enablerepo="elrepo-kernel" install kernel-ml
# 查看(验证)已安装的版本
yum list installed | grep kernel*
- 设置默认启动的内核版本,请参考 [默认内核设定] 节点设定默认启动的内核
多内核下的默认内核设置:(内核的安装请参考 [通过 ELRepo 库安装新内核] 节点)
CentOS 7.x
# 1、查看当前使用内核
uname -sr
# 2、查看系统已有内核
cat /boot/grub2/grub.cfg | grep "CentOS Linux"
# 3、从已有内核中,设置默认启动内核
grub2-set-default 'CentOS Linux (3.10.0-1160.59.1.el7.x86_64) 7 (Core)'
# 4、验证默认内核
grub2-editenv list
# 5、(可选)删除前,查询所有内核名称
rpm -qa | grep kernel-
# 6、(可选)删除指定内核
yum remove kernel-3.10.0-1160.45.1.el7.x86_64
# 7、重启系统(新内核的应用)
reboot
CentOS 8.x
# 安装新内核后,系统自动设为默认启动内核
# 1、查看当前使用内核
uname -sr
# 2、查看系统已有内核
ls -l /boot/vmlinuz-*
# 3、从已有内核中,设置默认启动内核
grubby --set-default=/boot/vmlinuz-4.18.0-80.11.2.el8_0.x86_64
# 4、(可选)删除前,查询所有内核名称
rpm -qa | grep kernel-
# 5、(可选)删除指定内核
yum remove kernel-core-4.18.0-348.el8.x86_64
# 6、重启系统(新内核的应用)
reboot
Static IP
######################## RHEL 8 ########################
#
# 一、修改配置文件
# 1、打开对应网卡的配置文件
vi /etc/sysconfig/network-scripts/ifcfg-{网卡名}
# 2、原有属性值变更
BOOTPROTO=static
ONBOOT=yes
# 3、追加配置项
IPADDR=192.168.1.131
PREFIX=24
GATEWAY=192.168.1.1
# 4、重启网卡(刷新网卡驱动)&& 重启网络服务(centos7服务名=network)
nmcli d reapply enp0s8 && systemctl restart NetworkManager
#
# 二、nmcli 命令行修改方式
# 命令修改指定网卡配置文件
# 修改自启动(ONBOOT) connection.autoconnect = yes
# 修改 ipv4.method = 手动
# 修改 ipv4.addresses = IP
nmcli c m enp0s8 connection.autoconnect yes ipv4.method manual ipv4.addresses 192.168.1.181/24
# 重启网卡(刷新网卡驱动)&& 重启网络服务
nmcli d reapply enp0s8 && systemctl restart NetworkManager
#
#
######################## RHEL 9 ########################
#
# 一、修改配置文件
# 1、打开对应网卡的配置文件
vi /etc/NetworkManager/system-connections/{网卡名}.nmconnection
# 2、属性值变更
[ipv4]
method=manual
address=192.168.1.103/24
# 3、重启网卡(刷新网卡驱动)&& 重启网络服务
nmcli d reapply enp0s8 && systemctl restart NetworkManager
#
# 二、nmcli 命令行修改方式
# 命令修改指定网卡配置文件
# 修改自启动(ONBOOT) connection.autoconnect = yes
# 修改 ipv4.method = 手动
# 修改 ipv4.addresses = IP
nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.1.181/24
# 重启网卡(刷新网卡驱动)&& 重启网络服务
nmcli d reapply enp0s8 && systemctl restart NetworkManager
内网优化 - hosts
内网中,计算机的相互访问,都需要通过DNS的解析,需要一定的资源消耗和耗时,并发状态下,造成一定的效率瓶颈;
计算机之间的访问方式:DNS缓存 -> 本机 hosts -> DNS服务器;
因此,为内网计算机之间的相互访问创造捷径,绕过DNS服务器,优化hosts将有显著的响应提升。
# 1、编辑配置hosts文件
vi /etc/hosts
# 2、为每台计算机hosts配置所有计算机的 IP-计算机名 的映射关系
192.168.56.101 cos78-cluster-a
192.168.56.102 cos78-cluster-b
192.168.56.103 cos78-cluster-c
# 注:修改了某台计算机名后,需要每台hosts文件对应的名称都要变更。
文件同步 - rsync
单机/远程文件同步,支持全量/增量,相当于scp、cp、rm 命令,但优于它们。
内网优化 - 禁用IPv6
IPv6的出现是为了解决IPv4的使用量不足,所以在内网中,IPv6是多余的。
临时方式
# 打开 sysctl.conf 文件
vi /etc/sysctl.conf
# 追加/覆盖配置项(指定网卡或全部)
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.disable_ipv6 = 1
# 内核重新加载配置项(重启系统后失效)
sysctl -p
永久方式
# 按网卡名称设置
# 假设网卡名称是 enp0s8
# 禁用/启用 ipv6.method = disabled/auto
nmcli c modify enp0s8 ipv6.method disabled
# 重载网卡设备
nmcli d reapply enp0s8
系统安全 - SELinux
SELinux(security enhanced linux)安全增强型Linux系统,它是一个linux内核模块,也是Linux的一个安全子系统。Selinux的主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
配置文件路径:/etc/selinux/config
配置文件中的 SELINUXTYPE 提供了三种策略方式:
- targeted - 目标进程受到保护(默认)
- minimum - 修改目标策略。仅保护选定的进程
- mls - 多级安全保护
SELinux相当于一个插件(内核级的插件),他约束了各个应用的动作限制,用布尔值的方式开启关闭某项应用的行为。
状态 - sestatus
SELinux Status,列出 SELinux 的当前状态信息。
示例:
- 当前状态信息:sestatus
- 当前上下文信息:sestatus -v
- 目标的策略信息列表:sestatus -b
模式 - getsebool / setsebool
get/set SELinux boolean,获取/设置 SELinux 的启用/禁用
示例:getsebool -a
/ setsebool -P {目标功能} 0/1
- 列取查看所有目标的启用状况:getsebool -a
- 设置指定目标(动作)行为的启用:setsebool -P ftpd_full_access 1
策略 - getenforce / setenforce
get/set enforce,查看/设置 SELinux 的启用/禁用;(临时性,重启后失效)
- Enforcing / 1:强制启用
- Permissive / 0:放开限制,警告方式
示例:
- 查看 SELinux 当前模式:getenforce
- 设置 SELinux 运行模式:setenforce 1
管理 - semanage
SELinux Manage,设置选项 文件、目录、网络、端口、设备、模块、用户、接口等的权限管理。
示例:
- 搜索指定应用(名称)的指定项(port)使用情况:semanage port -l | grep http_port_t
- 给指定应用(名称)添加一个指定协议(tcp)的端口号:semanage port --add --type mysqld_port_t --proto tcp 33061
选项 | 参数 | 说明 |
---|---|---|
import | 导入本地自定义项 | |
export | 导出本地自定义项 | |
login | 管理Linux用户和SELinux受限用户之间的登录映射 | |
user | 管理SELinux受限用户的角色和级别 | |
port | -p, --proto |
管理网络端口,端口协议(tcp|udp) 或版本(ipv4|ipv6) |
ibpkey | 管理无线通信ibpkey | |
ibendport | 管理无线通信端口 | |
interface | 管理网络接口 | |
node | 管理网络节点 | |
fcontext | -f {f,d,p} |
管理文件映射,文件类型:file、directory、piping |
boolean | --on, --off |
功能开关(0/1),启用 / 禁用,-1 / -0 |
module | 管理SELinux策略模块 | |
permissive | 管理进程类型强制模式 | |
dontaudit | 策略中的dontaudi规则 Disable/Enable |
semanage 命令 选项 通用参数 | 说明 |
---|---|
-l, --list | -a, --add | -m, --modify | -e, --enable |
列出 | 新增 | 修改 | 启用 |
-d, --delete / --disable |
删除 / 禁用项 |
-D, --deleteall |
删除全部 |
-r, --range / --remove |
范围 / 移除 |
-t, --type |
作用到的目标应用名称 |
永久关闭禁用 SELinux
# 1、设置配置文件,彻底关闭SELinux
# - 1.1、查看SELinux配置文件
cat /etc/selinux/config
# - 1.2、设置SELinux为关闭:SELINUX=disabled
# - 1.3、保存退出配置文件
sed -i '/^SELINUX/s/disabled/enforcing/g' /etc/selinux/config
# 2、验证,重启系统后查看SELinux当前状态
getenforce
系统优化 - Swap (交换分区)
虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。
Swap分区运行性能不够快,或禁用或少用,极端情况下再启用,调整启用条件参数。
# 1、(三种方式)查看现状
# - 1.1、检查服务器上的Swap状态
swapon -d 或 swapon -s
# - 1.2、查看整个内存的使用情况(其中包括了实体内存、Swap、共享内存段、系统核心使用的缓冲区等)
free -h
#
# 2、少用,调整使用概率(设置极端情况下的使用条件)
# - 2.1、查看现启用的触发值(物理内存剩余的百分比值)
cat /proc/sys/vm/swappiness
# - 2.2、查看是否已手动配置
vi /etc/sysctl.conf
# - 2.3、追加/修改配置项,变更触发参数(物理内存剩余的百分比值)
vm.swappiness = 1
# - 2.4、内核重新加载配置项(或重启系统)
sysctl -p
#
# 3、彻底关闭/开启
# 关闭Swap
swapoff -a
# 开启Swap
swapon -a
#
# 4、检查修改结果
# - 4.1、列出内核所有配置参数,从中查找[vm.swappiness]项,是否已更新为新值
sysctl -a
# - 4.2、或查看内核指定配置项的值
sysctl -q vm.swappiness
系统优化 - Limits
系统可用资源的限制,对于系统的稳定运行非常重要,可按实际情况优化提升性能;配置文件为:/etc/security/limits.conf
都限制了谁:
- a user name
- a group name, with @group syntax
- the wildcard *, for default entry
- the wildcard %, can be also used with %group syntax, for maxlogin limit
限制了哪些 type:
- "soft" for enforcing the soft limits
- "hard" for enforcing hard limits
限制了哪些资源 item:
- core : limits the core file size (KB)
- data : max data size (KB)
- fsize : maximum filesize (KB)
- memlock : max locked-in-memory address space (KB)
- nofile : max number of open file descriptors
- rss : max resident set size (KB)
- stack : max stack size (KB)
- cpu : max CPU time (MIN)
- nproc : max number of processes
- as : address space limit (KB)
- maxlogins : max number of logins for this user
- maxsyslogins : max number of logins on the system
- priority : the priority to run user process with
- locks : max number of file locks the user can hold
- sigpending : max number of pending signals
- msgqueue : max memory used by POSIX message queues (bytes)
- nice : max nice priority allowed to raise to values: [-20, 19]
- rtprio : max realtime priority
查看所有项的当前值:ulimit -a
按各项提示参数查看单个限制;如 open files 项:ulimit -n
限制项的配置
以下以 open files 为例:带上类型 S[oft] / H[ard],带上项名 n[ofile]
- Shell 级设置
临时方式:ulimit -SHn 20480
仅在当前Shell生效,重启失去Shell后失效 - 用户级设置
永久方式:于 limits.conf 中追加配置行
行格式:{user|group} {type} {item} {value}
行案例:* soft nofile 20480
通常 soft / hard 都要配置,确保两者都可用,重启生效 - 系统级设置
open files:vi /proc/sys/fs/file-max
系统优化 - 减少不必要的I/O写入
读取磁盘数据时,关闭文件元数据的写入(如最后访问时间等)
确保在挂载所有磁盘时使用noatime时间以及挂载所有目录时使用nodir时间。
# 打开配置文件
vi /etc/fstab
# 相应磁盘default后追加[,noatime,nodiratime]
# 样例效果:
# /dev/mapper/cl-root / xfs defaults,noatime,nodiratime 0 0
# :wq 保存退出后,reboot 重启系统后生效
系统优化 - 内核参数优化
通过在 /etc/sysctl.conf 中追加内核参数来永久保存更改
配置项从 /etc/sysctl.conf 中移除后,系统还原为默认值
# 手动设定 Kernel 内核的配置文件
vi /etc/sysctl.conf
#
# 修改/追加 配置项,用以改变内核默认参数值(1:启用,0:关闭)
fs.file-max = 65535 # 表示最大可以打开的句柄数;
fs.aio-max-nr = 1048576 # 最大并发I/O请求数
net.ipv4.tcp_max_tw_buckets = 6000 # TCP最大的连接数,默认为32768
net.ipv4.tcp_fin_timeout = 10 # 缩短TCP无用状态的超时,更有效的重新利用或销毁,默认为60
net.ipv4.tcp_tw_reuse = 1 # 回收的TCP可重新利用
net.ipv4.tcp_syncookies = 1 # 当出现SYN等待队列溢出时,启用cookies进行处理。
net.ipv4.tcp_keepalive_time = 120 # 连接健康检测,默认7200秒
net.ipv4.tcp_keepalive_intvl = 7 # 连接健康检测间隔,默认75秒
net.ipv4.tcp_keepalive_probes = 3 # 连接健康检测连续成功次数判定,默认9
net.ipv4.tcp_rmem = 32768 131072 16777216 # 接收窗口尺寸的最小,默认,最大值
net.ipv4.tcp_wmem = 8192 262144 16777216 # 发送窗口尺寸的最小,默认,最大值
net.ipv4.tcp_mem = 786432 1048576 1572864 # 发送窗口尺寸的最小,默认,最大值
net.core.somaxconn = 16384 # 网络连接队列最大积压数量 默认4096 * 4
net.core.rmem_max = 16777216 # 操作系统接收缓冲区最大值
net.core.wmem_max = 16777216 # 操作系统发送缓冲区最大值
net.core.rmem_default = 262144 # 操作系统接收缓冲区的默认大小
net.core.wmem_default = 262144 # 操作系统发送缓冲区的默认大小
#
# 内核重新加载配置项后生效
sysctl -p
# 查看所有内核参数生效后的配置
sysctl -a
# 涉及到网络的,重启网卡(CentOS7名称=network)
systemctl restart NetworkManager
Shell 命令解释器
与内核交互的脚本语言,与内核互动的桥梁;Command 透过 Shell 的解析,被内核所识别,并反馈内核的执行结果。所以 Shell(外壳)是内核的外壳。
常见的 Shell
sh:全称 Bourne Shell;是最早的 Shell,出现于 Unix,衍生版本有 ash / csh /tcsh / bash,或者 python / php 都可以用;大多数 Linux 系统都把 bash 作为默认 Shell,但都支持 sh。
所以:在有些 Docker 容器内,因为需要最精简的微型系统,bash 不一定会支持,但都支持 sh。
查看系统支持的 Shell:cat /etc/shells
Shell 的使用
也就是执行命令,直接敲命令,由当前默认Shell负责执行:ls -l
也可以的方式:sh -c 'ls -l'
或批量脚本打包成文件,批量执行,文件后缀不限制,通常是.sh;
文件首行指明要使用的 Shell:#!/bin/bash
执行打包命令的方式:sh {filename.sh}
/ bash {filename.sh}
或者将文件设置为可执行的权限:chmod +x {filename.sh}
后;可以直接filename.sh
达到运行的效果;
以上方式会重开一个子Shell,由子Shell负责运行脚本,与当前父Shell无关;所以子Shell中对系统的变更设置当前不会生效。
当前 Shell 运行脚本的方式 . {filename.sh}
/source {filename.sh}
比如:要变更系统的环境变量,这种运行方式就会及时生效。
Shell 语法
a=5
:变量并赋值,等号两侧不能有空格
readonly a=5
:常量,只读
$((5+3))
/$[5+3]
/expr 5+3
:运算格式
unset a
:撤销变量,释放内存所占空间
$0
:书写命令时的 sh 文件全名(可能的路径 + 名称)
${3}
:参数位置的值;10以内可以省略括号
$#
:参数总个数
$*
:串起来的参数,空格分隔
$@
:串起来的参数形成数组
$?
:上次命令的执行结果(是否执行失败;0:成功)
^o^y
自定义内存剩余输出
free -m | sed -n '2p' | awk '{print "总计:"$2"M,剩余:"$4"M,占比:"$4/$2*100"%"}'
/bin/bash 美化
单引号的系统变量\[
的开始 \]
的结束\033
转义并兼容ASCII的方式[
设定的开始 m
设定的结束
字体编码;
背景色编码;
前景色编码
# Style 1 简洁
sed -ie "/^export PS1=/d;/^export PS2=/d;/^export PS4=/d" /etc/bashrc && \
echo "export PS1='\[\033[00;107;36m\] \u \[\033[00m\]\[\033[00;00;46m\] \W \[\033[00m\]\[\033[00;00;36m\]·>\[\033[00m\] '" >> /etc/bashrc && \
echo "export PS2='\[\033[00;00;36m\]·>\[\033[00m\] '" >> /etc/bashrc && \
echo "export PS4='\[\033[00;00;36m\]+\[\033[00m\] '" >> /etc/bashrc && \
source /etc/bashrc
# Style 2 普通
sed -ie "/^export PS1=/d;/^export PS2=/d;/^export PS4=/d" /etc/bashrc && \
echo "export PS1='\[\033[00;107;36m\] \u \[\033[00m\]\[\033[00;00;46m\] \H \[\033[00m\]\[\033[00;00;36m\] \W \[\033[00m\]\[\033[00;00;38m\]\A\[\033[00m\]\[\033[38;5;208m\] ·> \[\033[00m\]'" >> /etc/bashrc && \
echo "export PS2='\[\033[38;5;208m\]>\[\033[00m\] '" >> /etc/bashrc && \
echo "export PS4='\[\033[38;5;208m\]+\[\033[00m\] '" >> /etc/bashrc && \
source /etc/bashrc
# Style 3 带执行反馈提示
sed -ie "/^export PS1=/d;/^export PS2=/d;/^export PS4=/d" /etc/bashrc && \
echo "export PS1='\[\033[107m\]\[\033[38;5;238m\] \u\[\033[38;5;246m\]@\[\033[00;107;36m\]\H \[\033[00m\]\[\033[00;00;46m\] \W \[\033[00m\]\[\033[38;5;$(echo $(($?==0?208:196)))m\]·> \[\033[00m\]'" >> /etc/bashrc && \
echo "export PS2='\[\033[38;5;208m\]>\[\033[00m\] '" >> /etc/bashrc && \
echo "export PS4='\[\033[38;5;208m\]+\[\033[00m\] '" >> /etc/bashrc && \
source /etc/bashrc
公共DNS
境内 | 223.5.5.5 | 官网:阿里公共DNS |
180.76.76.76 | 官网:百度公共DNS | |
境外 | 8.8.8.8 | 官网:Google Public DNS |
1.1.1.1 | 官网:One.One.One.One DNS |
配置DNS
echo 'nameserver 223.5.5.5' >> /etc/resolv.conf
VM 自动读取物理机的配置
速度测试排名
这里列出了 阿里巴巴、百度、Google、One.One.One.One 基本代表了境内外的最强音。测试结果如下图:
明面上,阿里巴巴速度最快,毕竟是境内的区域优势。
但,考虑到缓存的因素,Google 的实力就显现出来了。
测端口技巧
telnet {IP} {Port}
成功返回空白画面
nc -nvv {IP} {Port}
成功返回 succeeded! 失败返回 Connection refused
curl {IP}:{Port}
成功返回空应答 Empty reply,失败返回 Couldn't connect
记录 Debian 12+
# Debian 12 编辑网卡信息
vim /etc/network/interfaces
iface enp0s5 inet static
gateway 13.13.1.1
address 13.13.1.11/16
# iface enp0s5 inet6 auto (内网没必要的ipv6)
#
# 重启网卡生效
systemctl restart networking
#
# Debian 12 网关服务管理
systemctl status nftables
# root 账号允许 ssh 远程
vim /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart sshd
# Ubuntu 22 安装时的网络配置
Subnet: 192.168.1.0/24 # 网关(最后只能是0/24)
Address: 192.168.1.107 # IP
Gateway: 192.168.1.1 # 网关
Name Servers: 192.168.1.1 # 网关
Search domains: # 不填
#
# ubantu 22 安装后的网卡配置
vim /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s5:
addresses: [13.13.1.13/24]
nameservers:
addresses: [13.13.1.1]
routes:
- to: default
via: 13.13.1.1
version: 2
#
# 刷新网卡配置
netplan apply
#
# 重启网卡生效
ip link set {net-name} up # 启动
ip link set {net-name} down # 关闭
ip link set {net-name} down && ip link set {net-name} up # (关闭+启动=)重启
#
# Ubuntu 22 网关服务
systemctl status ufw
# Ubuntu 22 ssh 远程
vim /etc/ssh/sshd_config
# 许可 root 远程 & 生效
PermitRootLogin yes
systemctl restart sshd
作者:Sol·wang - 博客园
出处:https://www.cnblogs.com/Sol-wang/p/14792892.html
声明:本文版权归作者和[博客园]共有,未经作者同意,不得转载。