3084 字
15 分钟
SRE02-Linux基本操作
2025-10-16

基本命令#

hostname主机名#

Terminal window
hostname # 显示主机名
hostname -I # 显示所有非回环IP地址
命令输出内容适用场景
hostname -I所有非回环 IPv4 地址(空格分隔)快速获取服务器 IP
ip addr详细网卡信息(含 IPv4/IPv6)调试网络配置
ifconfig传统网卡信息(部分系统已弃用)兼容旧脚本

修改主机名

Terminal window
# 临时生效
hostname NAME
# 持久生效,支持CentOS7和Ubuntu18.04以上版本
hostnamectl set-hostname NAME

注意:

  • 主机名不支持下划线,支持横杠,可以使用字母、数字、横杠。
  • 有些软件对主机名有特殊要求,错误的主机名可能导致某些服务无法启动

例如:

Terminal window
[root@rocky8 ~]# hostname rocky.8
[root@rocky8 ~]# systemctl restart postfix
Job 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显示详细用用户列表#

作用显示当前登录用户及其活动信息

典型输出

Terminal window
11:20:03 up 3 days, 2:15, 3 users, load average: 0.15, 0.10, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alice 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 -bash
root 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 -alFls -l 的别名。

验证方法alias ll,输出为ll='ls -lh'

\命令换行#

仅针对特别长的命令

Terminal window
ho\
st\
name
# 等价于hostname

lscpu查看CPU#

直接使用lscpu即可

free查看内存#

free -h查看内存,发现非图形界面比图形界面省不少内存

  • Rocky临时关闭图形界面init 3,可以通过init 5再次启用图形界面
运行级别模式描述
0Halt关机(poweroff.target
1Single-User单用户模式(救援模式,无网络,仅 root 登录)
2Multi-User多用户模式(无图形界面,无网络文件共享)
3Multi-User + Network文本模式(多用户 + 网络,默认服务器模式)
4未使用保留(可自定义)
5Graphical图形界面模式(多用户 + 网络 + GUI,如 GNOME/KDE)
6Reboot重启(reboot.target

uname -r查看内核版本#

cat /etc/os-release查看发行版本#

lsb-release查看系统版本#

⚠Ctrl+Alt+Del会让Linux重启#

分号按顺序执行#

Terminal window
command1 ; command2 ; command3
echo "Hello" ; ls /nonexistent ; echo "World"
  • 依次执行 command1command2command3,即使某个命令失败(返回非零状态码),后续命令仍会继续执行。

echo $LANG查看字符集#

Terminal window
echo $LANG
en_US.UTF-8

Alt+.可以调用上一次输入命令的参数#

双引号与单引号#

双引号 " ":弱引用(变量会被展开)echo "$PATH"

  • Shell 会解析 $PATH 并将其替换为变量的实际值(即系统的 PATH 环境变量内容)。
  • 变量(如 $PATH)、命令替换(如 $(date))和转义字符(如 \n)会被解析。
  • 其他字符(如空格、通配符 *)会被保留原义。

单引号 ' ':强引用(变量不会被展开)echo '$PATH'

  • Shell 将 $PATH 视为普通字符串,不会解析变量
  • 所有内容(包括变量、命令替换、转义字符)均按字面意义处理。
  • 无法嵌套单引号(如 'It's a test' 会报错)。

PixPin_2025-10-15_14-15-16

ssh#

基础连接#

Terminal window
ssh username@hostname_or_ip
  • 示例:ssh xh@192.168.1.100或者ssh xh@ssh.cbba.top
  • 默认端口 22,首次连接会提示确认主机指纹。

指定端口#

Terminal window
ssh -p port_number username@hostname
  • 示例:ssh -p 2222 bob@example.com(连接非标准端口)

使用密钥登录(免密码)#

Terminal window
ssh -i /path/to/private_key username@hostname
  • 示例:ssh -i ~/.ssh/id_rsa alice@server
  • 需提前将公钥(id_rsa.pub)写入服务端的 ~/.ssh/authorized_keys

配置文件简化连接#

编辑 ~/.ssh/config,添加:

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 解释器(如 bashzsh)实现,无需启动外部进程。

  • 执行速度快:无进程创建开销。

  • 影响 Shell 环境:可直接修改 Shell 的状态(如变量、目录)。

  • 例如:cd等

外部命令(External Commands)

  • 独立可执行文件:通常位于 /bin/usr/bin/sbin 等目录。

  • 通过子进程运行:Shell 会创建新进程执行(fork + exec)。

  • 功能更复杂:如系统工具(ls)、编程语言解释器(python)。

  • 例如:ls、grep等

如何判断是外部命令还是内部命令?#

Terminal window
type cd # 输出:cd is a shell builtin,说明是内部命令
type ls # 输出:ls is /usr/bin/ls,说明是外部命令
# 如果是alias起别名的命令,显示不出来是内部还是外部,这时要用type -a
type -a rm

执行优先级:当输入一个命令时,Shell 的查找顺序为:别名(Alias) → 2. 内部命令 → 3. 外部命令(按 PATH 顺序)

查看命令帮助#

  • 内部命令使用help [命令],例如help echo
  • 外部命令使用[命令] --help,例如ls --help

扫描SCSI总线#

作用:当向运行中的 Linux 系统热插拔(Hot-Plug)一块新硬盘或扩容 SAN LUN 时,系统可能不会自动识别新设备。通过向该文件写入特定指令,可以强制重新扫描 SCSI 总线,使内核检测新增的存储设备。

适用场景

  • 虚拟机动态添加虚拟磁盘后。
  • 物理服务器插入新硬盘或连接新存储阵列。
  • 云平台挂载新的云磁盘(如 AWS EBS、阿里云云盘)。

触发扫描

Terminal window
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
  • 这里不确定是哪个host一定可以扫出来磁盘,所以每个都执行一下

确认扫描结果

扫描成功后,新设备会出现在 /dev/ 下(如 /dev/sdb),可通过lsblk命令查看

虚拟机添加磁盘#

PixPin_2025-10-14_18-06-50

注意这里还是选择SCSI的,然后勾选将虚拟磁盘存储为单个文件

添加后使用lsblk查看,目前并没有读这个新添加的磁盘

PixPin_2025-10-14_18-09-17

使用上面扫描SCSI总线的指令

  • 这里可以结合alias,将扫盘命令重命名为scandisk

    Terminal window
    alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"

扫描后就能识别出来了

PixPin_2025-10-14_18-13-44

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

PixPin_2025-10-14_18-58-58

修改系统默认时区#

如果系统是图形化安装的,会有设置时区的步骤,而用命令行安装的就需要手动的改一下时区

  • 查看当前时区

    timedatectl

    这将显示当前的日期、时间、时区、NTP(网络时间协议)同步状态等信息。

  • 列出可用的时区

    timedatectl list-timezones

    这将列出所有支持的时区,你可以从中找到你需要的时区,例如:Asia/ShanghaiEurope/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文件名输入麻烦怎么办?$()#

这里就可以使用反引号了,它的作用是将 反引号内的命令执行结果 替换到当前位置

Terminal window
# 例如忘记了今天的日期,那么先date,知道日期后,创建2025-10-15.log
touch 2025-10-15.log
# 如果使用反引号就可以省去查看日期的步骤和每天创建文件时手敲日期的过程
touch `date +%F`.log # 每天执行这句指令即可

现代替代语法(推荐)

反引号的功能也可以用 $() 实现,且更易读、支持嵌套:

Terminal window
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中的

PixPin_2025-10-15_19-10-12

Windows中的

PixPin_2025-10-15_19-10-34

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

SRE02-Linux基本操作
https://fuwari.cbba.top/posts/sre02-linux基本操作/
作者
Chen_Feng
发布于
2025-10-16
许可协议
CC BY-NC-SA 4.0