基于 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 200MB - 2GB 通常500M以内(难免会有大型App)
/boot/efi 200MB - 500MB  
/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 [-f] 关机 [断电]
halt [-p] 关机 [断电]
shutdown -h now 定时关机(管理员权限)
shutdown -r now 定时重启(管理员权限)
vmstat [-SM 5 5] 系统性能快照;vmstat [兆显示] [刷新间隔] [次数]
uname -a 系统基础信息
dmesg 查看系统开启过程日志
clear 清空终端屏幕显示内容
Tab 键 命令补全;单按:精准补全、双按:可选命令
Logon
w,who,whoami 查看当前用户登录信息
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 不受限制的个性化静态主机名

硬件资源

sysctl -a CPU详细参数
lscpu 提供CPU的包括架构、核心数、每个核心的线程数、CPU的频率等
slabtop -s c 分析内核Slab缓存(内核对象占用内存)
free [-h] 内存使用情况 [换算单位]
mount -o ro /dev/hda1 /mnt 将 /dev/hda1 用唯读模式挂在 /mnt 之下
umount -v /dev/hda1 通过设备名卸载
mkfs -t ext4 /dev/sdb1 创建指定磁盘类型的文件属性
fsck 检查与修复的系统档案;一个或多个系统档案
findmnt 已挂载的文件系统信息
lsblk [-f] 查看磁盘及分区信息
blkid [-o list] 查看块设备属性列表
fdisk [-l] 磁盘分区管理(支持最大2T的MBR格式,最多4个或3个主分区+一个扩展分区)
parted 磁盘分区管理(支持MBR\GPT超过2T的分区,最大卷达18EB,最多128个分区)
df [-h] 磁盘的空间使用情况 [换算单位]
du [-achs] 所在目录下的所有子目录 [全部/总和/换算/总计]

命令行状态切换

输入命令回车后系统执行当前命令;当前命令执行完成后自动回到命令行状态,便于再次输入命令。
当前命令未执行完成时(如:拷贝大文件,升级安装包等),命令执行状态。
以下说明了对以上场景的操作:

命令 说明
& 指定后台运行
jobs -l 当前终端后台启动的作业 [PID]
fg %{number} Foreground;后台暂停的进程转到前台运行
bg %{number} Background;后台暂停的进程在后台继续运行,默认为最后一个Job
wait 等待所有任务完成
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} 创建新的空文件
touch {filename} 更新文件的 访问变更时间,自动创建
cat > example.txt <<EOF 创建新文件覆盖内容
cat >> example.txt <<EOF 向现有文件追加内容
cmd | tee -a {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 set-time {日期时间} 设置时间
timedatectl list-timezones 可用时区
timedatectl set-timezone {时区名} 设置时区

Network

命令 说明
ss Socket Statistics;套接字统计
ss -plant 连接中的网络及端口
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 的动态
uuidgen 生成一个UUID,-r[andom] -t[ime]
uptime 系统运行时长|当前用户数|过去1/5/15分钟的平均负载
time {cmd} 统计单行命令的耗时;real:总耗时
timeout 5s {cmd} 耗时五秒后结束 [s秒/m分/h时/d天]
xz file1,unxz file1.xz 压缩/解压,可连续多个解压缩
watch -n 1 -d {命令} 周期性(1s)重复执行指定命令,全屏显示结果
{cmd} && sleep 5s 延时执行(s秒/m分/h时/d天)
{cmd} & 于后台运行(不影响前端继续敲命令)
{cmd} -daemon 守护进程方式运行
nohup {cmd} no hang up;不挂断运行命令,忽略与终端断开的信号
nohup|setsid|screen <cmd> & 于后台长久运行,不受其它干扰而被中断
truncate -s 0 /var/log/auth.log 清空指定文件大小为零的日志内容
管道命令 / 前后台命令 / 多命令
{命令1} ; {命令2} ; {命令3} 多命令按顺序在前端执行,无所谓成功失败
{命令1} | {命令2} 管道命令;之前命令的处理结果,给之后的命令再处理
{命令1} || {命令2} 逻辑命令;命令1失败后 才会执行命令2
{命令1} & {命令2} 逻辑命令:前后端一起并行执行(最后命令在前端)
{命令1} && {命令2} 逻辑命令;之前命令顺利成功后,再执行之后的命令
tar:文件解压缩工具
tar -cvf {xxx.tar} {file1 file2} .tar 文件压缩;将多文件打包到 xxx.tar 中
tar -xvf {xxx.tar} .tar 解压文件;x 解压,v 详细,f 文件名
tar -tvf xxx.tar .tar 压缩文件详情
tar -rvf xxx.tar newfile .tar 追加文件到包
tar -czvf {form-dir} {xxx.tar.gz} .tar.gz 文件压缩
tar -xzvf {xxx.tar.gz} -C {到指定目录} .tar.gz 文件解压 [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 -vv telnet://www.baidu.com:80 地址端口是否畅通 [--verbose] 详细过程
wget:第三方下载工具
wget {网络资源链接} {dir} 下载资源到指定目录
netstat:系统网络状态
netstat -a 全部的网络状态
netstat -i 显示网卡列表
netstat -pantu 连接中的网络及端口

Authority

命令 说明
chown -R {用户名}:{用户组} {作用目录} Change Owner;变更目录所属用户
chmod -R 754 {作用目录} Change Mode;权限设定(读/写/执行)
chgrp -R {用户组} {作用目录} Change Group;变更目录所属群组
chgrp -R --reference={参考目录} {作用目录} Change Group;复制为相同的群组

文件目录权限字母表示法

文件目录权限八进制数字表示法

应用样例:
指定(=)权限: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 --state 状态
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} 转发
firewall-cmd --get-zones 所有区域
firewall-cmd --get-default-zone 默认区域
firewall-cmd --get-active-zones 当前区域
firewall-cmd --set-default-zone=work 设置区域
firewall-cmd --zone=public --list-all 所有规则
firewall-cmd --complete-reload 全部重载
firewall-cmd --list-services 查看服务
firewall-cmd --zone=public --add-service=ssh --permanent 添加服务
firewall-cmd --zone=public --remove-service=ssh --permanent 删除服务
firewall-cmd --zone=public --add-source=192.168.1.100/24 --permanent 添加网址

预设的区域(zone)

区域 安全级别 适用场景
drop 最严格 丢弃所有入站流量
block 严格 拒绝所有连接
public 中等 允许SSH
external 路由模式 有外部访问设备
dmz 限制模式 只允许特定端口访问
work 适用于工作环境 允许SSH,内部服务
home 适用于家庭网络 信任内部设备
trusted 最开放 信任所有连接(谨慎使用!)

System log

journal 是Linux系统中用于查看和管理由systemd服务生成的日志的命令,是由 systemd-journald.service 写入。

命令 说明
journalctl 查看所有日志
journalctl -u nginx 查看指定服务名的日志
journalctl -n 10 查看最新的10条日志
journalctl --no-pager 输出不分页形式的日志
journalctl --vacuum-time=1s 清空当前时间戳的日志
journalctl --since="2023-07-01" --until="2023-07-31 12:00" 查看指定范围内的日志

SFTP

命令 说明
sftp [user]@[host] 远程登录命令,回车后输入密码。(Windows/Linux)

进入远程后,可用如下命令操作,后 exit 退出。

ls 列出当前远程目录中的文件
cd 更改远程目录
pwd 显示当前远程目录
lcd 更改本地目录
lpwd 显示当前本地目录
put 将文件从本地上传到远程
get 将文件从远程下载到本地
rm 从远程删除文件
rename 重命名远程上的文件
exit 退出 SFTP 会话

History

命令 说明
history 列出 已执行过的命令列表记录
!! 再次执行 上一次命令,等同 向上键+Enter
!{number} 再次执行 历史记录列表中 指定行号的命令
!{prefix} 再次执行 以 prefix 开头的最后一个命令
!?{suffix} 再次执行 以 suffix 结尾的最后一个命令

System record

文件 命令 说明
/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 = 5
# - 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_max_syn_backlog = 65535
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 = 65535              # 网络连接队列最大积压数量 默认4096 * 4
net.core.rmem_max = 16777216            # 操作系统接收缓冲区最大值
net.core.wmem_max = 16777216            # 操作系统发送缓冲区最大值
net.core.rmem_default = 262144          # 操作系统接收缓冲区的默认大小
net.core.wmem_default = 262144          # 操作系统发送缓冲区的默认大小
vm.swappiness = 5
#
# 内核重新加载配置项后生效
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

/bin/bash 美化风格

公共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
posted @ 2021-05-23 18:50  Sol·wang  阅读(1840)  评论(0)    收藏  举报