基本命令
hostname主机名
hostname # 显示主机名hostname -I # 显示所有非回环IP地址| 命令 | 输出内容 | 适用场景 |
|---|---|---|
hostname -I | 所有非回环 IPv4 地址(空格分隔) | 快速获取服务器 IP |
ip addr | 详细网卡信息(含 IPv4/IPv6) | 调试网络配置 |
ifconfig | 传统网卡信息(部分系统已弃用) | 兼容旧脚本 |
修改主机名
# 临时生效hostname NAME# 持久生效,支持CentOS7和Ubuntu18.04以上版本hostnamectl set-hostname NAME注意:
- 主机名不支持下划线,支持横杠,可以使用字母、数字、横杠。
- 有些软件对主机名有特殊要求,错误的主机名可能导致某些服务无法启动
例如:
[root@rocky8 ~]# hostname rocky.8[root@rocky8 ~]# systemctl restart postfixJob for postfix.service failed because the control process exited with error code.See "systemctl status postfix.service" and "journalctl -xe" for details.- 改回
rocky8.magedu.org再restart就不报错了
主机名规则
- 允许的字符:
- 字母(
a-z,A-Z) - 数字(
0-9) - 连字符(
-) - 点(
.,仅用于域名分隔)
- 字母(
- 禁止的字符:
- 下划线(
_)、空格、特殊符号(如@,#,$等)。 - 不能以数字或连字符开头或结尾。
- 不能单独使用数字(如
8)。
- 下划线(
- 长度限制:
- 最大 63 个字符(推荐不超过 15 字符,避免旧系统兼容性问题)。
生产环境主机命名,例如:bj-yz-k8s-node1-100-10.magedu.local
- 代表北京-亦庄-提供k8s业务-第几个节点-IP地址最后两个区域(例如10.0.100.10)-公司域名
tty终端设备
作用:
- 查看当前会话连接的终端设备:显示当前 Shell 所在的终端设备文件路径。
- 返回值示例:
/dev/pts/0(伪终端,常见于 SSH 或图形终端)/dev/tty1(物理控制台终端)
who查看登录用户
作用:
-
查看当前登录用户信息
-
输出示例:
Terminal window alice pts/0 2023-10-14 09:30 (192.168.1.100)bob tty2 2023-10-14 10:15 (:0)root pts/1 2023-10-14 11:00 (203.0.113.42)- 各列含义:
- 用户名:登录的用户(如
alice)。 - 终端设备:
pts/0:伪终端(SSH 或图形终端模拟器)。tty2:物理控制台终端(按Ctrl+Alt+F2切换)。
- 登录时间:用户登录的日期和时间。
- 来源 IP:远程登录的 IP 地址(本地终端显示
:0或空)。
- 用户名:登录的用户(如
- 各列含义:
whoami查看自己
作用:快速显示当前登录用户的用户名
w显示详细用用户列表
作用:显示当前登录用户及其活动信息
典型输出:
11:20:03 up 3 days, 2:15, 3 users, load average: 0.15, 0.10, 0.05USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATalice pts/0 192.168.1.100 09:30 2:00 0.10s 0.01s sshd: alice [priv]bob tty2 :0 10:15 1:45m 0.20s 0.05s -bashroot pts/1 203.0.113.42 11:00 5.00s 0.30s 0.01s w| 列名 | 说明 |
|---|---|
| USER | 登录用户名 |
| TTY | 终端设备(pts/0=伪终端,tty2=物理终端) |
| FROM | 登录来源 IP(本地显示 :0,SSH 显示 IP 地址) |
| LOGIN@ | 登录时间 |
| IDLE | 空闲时间(2:00=2分钟,1:45m=1小时45分钟) |
| JCPU | 该终端所有进程占用 CPU 时间 |
| PCPU | 当前进程占用 CPU 时间 |
| WHAT | 用户当前正在执行的命令(最重要的一列) |
alias起别名
在 Linux/Unix 系统中,别名(Alias) 是用户为常用命令或复杂命令序列定义的快捷方式,可以显著提升命令行操作效率。它的作用是将一个自定义的短字符串映射到长命令或命令组合。
- 仅对当前用户有效(除非全局配置)
- 临时生效(会话结束后消失)或永久生效(需写入配置文件)
设置别名的方法:
-
临时设置:
alias 别名='原始命令',例如alias update='sudo apt update && sudo apt upgrade' -
永久设置(对所有新会话生效):将别名定义写入 Shell 配置文件
-
Bash:
~/.bashrc或~/.bash_profile -
Zsh:
~/.zshrc -
操作:
Terminal window echo "alias update='sudo apt update && sudo apt upgrade'" >> ~/.bashrc # 追加到配置文件source ~/.bashrc # 立即生效
-
-
查看已定义的别名:
alias列出所有别名,alias update查看update的具体定义 -
删除别名:
unalias update
经典别名 ll 的真相:
默认定义:ll 通常是 ls -alF 或 ls -l 的别名。
验证方法:alias ll,输出为ll='ls -lh'
\命令换行
仅针对特别长的命令
ho\st\name# 等价于hostnamelscpu查看CPU
直接使用lscpu即可
free查看内存
free -h查看内存,发现非图形界面比图形界面省不少内存
- Rocky临时关闭图形界面
init 3,可以通过init 5再次启用图形界面
| 运行级别 | 模式 | 描述 |
|---|---|---|
0 | Halt | 关机(poweroff.target) |
1 | Single-User | 单用户模式(救援模式,无网络,仅 root 登录) |
2 | Multi-User | 多用户模式(无图形界面,无网络文件共享) |
3 | Multi-User + Network | 文本模式(多用户 + 网络,默认服务器模式) |
4 | 未使用 | 保留(可自定义) |
5 | Graphical | 图形界面模式(多用户 + 网络 + GUI,如 GNOME/KDE) |
6 | Reboot | 重启(reboot.target) |
uname -r查看内核版本
cat /etc/os-release查看发行版本
lsb-release查看系统版本
⚠Ctrl+Alt+Del会让Linux重启
分号按顺序执行
command1 ; command2 ; command3echo "Hello" ; ls /nonexistent ; echo "World"- 依次执行
command1、command2、command3,即使某个命令失败(返回非零状态码),后续命令仍会继续执行。
echo $LANG查看字符集
echo $LANGen_US.UTF-8Alt+.可以调用上一次输入命令的参数
双引号与单引号
双引号 " ":弱引用(变量会被展开),echo "$PATH"
- Shell 会解析
$PATH并将其替换为变量的实际值(即系统的 PATH 环境变量内容)。 - 变量(如
$PATH)、命令替换(如$(date))和转义字符(如\n)会被解析。 - 其他字符(如空格、通配符
*)会被保留原义。
单引号 ' ':强引用(变量不会被展开),echo '$PATH'
- Shell 将
$PATH视为普通字符串,不会解析变量。 - 所有内容(包括变量、命令替换、转义字符)均按字面意义处理。
- 无法嵌套单引号(如
'It's a test'会报错)。

ssh
基础连接
ssh username@hostname_or_ip- 示例:
ssh xh@192.168.1.100或者ssh xh@ssh.cbba.top - 默认端口
22,首次连接会提示确认主机指纹。
指定端口
ssh -p port_number username@hostname- 示例:
ssh -p 2222 bob@example.com(连接非标准端口)
使用密钥登录(免密码)
ssh -i /path/to/private_key username@hostname- 示例:
ssh -i ~/.ssh/id_rsa alice@server - 需提前将公钥(
id_rsa.pub)写入服务端的~/.ssh/authorized_keys。
配置文件简化连接
编辑 ~/.ssh/config,添加:
Host [服务器名] HostName [服务器IP] User [要登录的用户] Port [端口,默认不写就是22] IdentityFile ~/.ssh/[私钥文件]
# 例如Host myserver HostName 192.168.1.100 User alice Port 2222 IdentityFile ~/.ssh/id_rsa之后直接执行:ssh myserver。
- ⚠注意:确保
~/.ssh目录权限为700,私钥为600
Shell中可执行两类命令
在 Shell 中,可执行的命令分为 内部命令(Built-in Commands) 和 外部命令(External Commands)
内部命令(Built-in Commands)
-
集成在 Shell 中:直接由 Shell 解释器(如
bash、zsh)实现,无需启动外部进程。 -
执行速度快:无进程创建开销。
-
影响 Shell 环境:可直接修改 Shell 的状态(如变量、目录)。
-
例如:cd等
外部命令(External Commands)
-
独立可执行文件:通常位于
/bin、/usr/bin、/sbin等目录。 -
通过子进程运行:Shell 会创建新进程执行(
fork+exec)。 -
功能更复杂:如系统工具(
ls)、编程语言解释器(python)。 -
例如:ls、grep等
如何判断是外部命令还是内部命令?
type cd # 输出:cd is a shell builtin,说明是内部命令type ls # 输出:ls is /usr/bin/ls,说明是外部命令# 如果是alias起别名的命令,显示不出来是内部还是外部,这时要用type -atype -a rm执行优先级:当输入一个命令时,Shell 的查找顺序为:别名(Alias) → 2. 内部命令 → 3. 外部命令(按 PATH 顺序)。
查看命令帮助
- 内部命令使用
help [命令],例如help echo - 外部命令使用
[命令] --help,例如ls --help
扫描SCSI总线
作用:当向运行中的 Linux 系统热插拔(Hot-Plug)一块新硬盘或扩容 SAN LUN 时,系统可能不会自动识别新设备。通过向该文件写入特定指令,可以强制重新扫描 SCSI 总线,使内核检测新增的存储设备。
适用场景:
- 虚拟机动态添加虚拟磁盘后。
- 物理服务器插入新硬盘或连接新存储阵列。
- 云平台挂载新的云磁盘(如 AWS EBS、阿里云云盘)。
触发扫描
echo "- - -" > /sys/class/scsi_host/host0/scanecho "- - -" > /sys/class/scsi_host/host1/scanecho "- - -" > /sys/class/scsi_host/host2/scan- 这里不确定是哪个host一定可以扫出来磁盘,所以每个都执行一下
确认扫描结果
扫描成功后,新设备会出现在 /dev/ 下(如 /dev/sdb),可通过lsblk命令查看
虚拟机添加磁盘

注意这里还是选择SCSI的,然后勾选将虚拟磁盘存储为单个文件
添加后使用lsblk查看,目前并没有读这个新添加的磁盘

使用上面扫描SCSI总线的指令
-
这里可以结合
alias,将扫盘命令重命名为scandiskTerminal window alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
扫描后就能识别出来了

⚠注意:此方法只适用于host文件少的,这里是Rocky8.5,如果是host文件有几十个的系统就不适合用这种方法扫硬盘

修改系统默认时区
如果系统是图形化安装的,会有设置时区的步骤,而用命令行安装的就需要手动的改一下时区
-
查看当前时区:
timedatectl这将显示当前的日期、时间、时区、NTP(网络时间协议)同步状态等信息。
-
列出可用的时区:
timedatectl list-timezones这将列出所有支持的时区,你可以从中找到你需要的时区,例如:
Asia/Shanghai、Europe/London等。 -
设置时区: 假设你想设置时区为
Asia/Shanghai,可以执行以下命令:sudo timedatectl set-timezone Asia/Shanghai这将立即更改系统的时区设置。
同步网络时间:
-
启用 NTP 同步: 使用以下命令启用自动时间同步:
sudo timedatectl set-ntp true -
检查 NTP 状态: 要查看 NTP 是否启用,可以运行:
timedatectl在输出中,如果 NTP 同步已启用,你将看到类似
NTP synchronized: yes的行。 -
使用 NTP 服务同步时间(如果需要): 如果你的系统没有启用 NTP,你可以手动同步时间,运行以下命令:
sudo ntpdate pool.ntp.org这将从 NTP 服务器
pool.ntp.org获取当前时间并同步系统时间。
Linux登录后佛祖保佑
将下面的字符添加到/etc/motd里即可
********************************************* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / /======`-.____`-.___\_____/___.-`____.-'====== `=---='^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 iii 永不死机问题
每天创建log文件名输入麻烦怎么办?$()
这里就可以使用反引号了,它的作用是将 反引号内的命令执行结果 替换到当前位置
# 例如忘记了今天的日期,那么先date,知道日期后,创建2025-10-15.logtouch 2025-10-15.log# 如果使用反引号就可以省去查看日期的步骤和每天创建文件时手敲日期的过程touch `date +%F`.log # 每天执行这句指令即可现代替代语法(推荐)
反引号的功能也可以用 $() 实现,且更易读、支持嵌套:
touch $(date +%F).log| 特性 | 反引号 ``` | $() |
|---|---|---|
| 可读性 | 低(易与单引号混淆) | 高(清晰区分) |
| 嵌套支持 | 需转义(```) | 直接支持($(cmd1 $(cmd2))) |
| 现代兼容性 | 旧版 Shell(如 Bourne Shell) | 所有现代 Shell(bash/zsh) |
| 推荐程度 | ❌ 避免使用(除非兼容旧脚本) | ✅ 优先使用 |
windows的txt文本中写的内容拖到linux里能当shell脚本执行吗?
不行,因为Windows和LInux的txt文本中,换行符存在差异
- Windows 换行符:
CRLF(\r\n)。 - Linux 换行符:
LF(\n)。
直接执行 Windows 创建的脚本会报错:
./win.sh: line 2: $‘\r’: command not found
如何查看文件中的回车符和换行符呢?
使用cat -A 文件名查看
- 作用:
^M表示回车符(CR,\r)。$表示换行符(LF,\n)。^I表示制表符(Tab)。
例如分别在Linux环境和Windows环境创建一个文本文件,内容都是a回车b回车c回车,查看结果:
Linux中的:

Windows中的:

可以发现Linux中敲回车只有换行符,而Windows中敲回车是回车+换行