Linux系统基础与命令行实战
本文基于Ubuntu 24.04 LTS服务器进行全流程实操,所有命令均在真实服务器上执行并收集输出,适合Linux初学者和运维开发工程师系统学习。服务器环境:华为云ECS,AMD x86_64架构,8核CPU,14GB内存,40GB系统盘。
目录
- 一、计算机基础与服务器硬件
- 二、Linux登录与远程连接
- 三、命令类型与执行过程
- 四、命令帮助用法
- 五、Linux基本命令与常用命令
- 六、字符集和快捷键
- 七、Linux文件系统目录结构(FHS)
- 八、文件常见操作命令
- 九、用户和组基本概念
- 十、用户和组管理命令
- 十一、文件权限管理
- 十二、文件特殊权限与特殊属性
- 十三、vim文本编辑器
- 总结
一、计算机基础与服务器硬件
1.1 服务器硬件概述
服务器是提供计算服务的专用计算机,与普通PC相比,服务器具有更高的稳定性、安全性和扩展性。常见的服务器类型包括:
- 机架式服务器:标准19英寸机柜安装,最常见的数据中心服务器形态
- 塔式服务器:外形类似PC塔机,适合中小企业
- 刀片服务器:高密度计算,模块化设计
- 云服务器(ECS):虚拟化技术提供的弹性计算服务
服务器核心硬件组件包括:CPU(中央处理器)、内存(RAM)、硬盘(HDD/SSD)、网卡(NIC)、电源、主板、RAID卡等。
1.2 查看服务器硬件信息实操
查看系统内核信息:
root@ecs-cd72-d4be-0001:~# uname -a
Linux ecs-cd72-d4be-0001 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:53:05 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
root@ecs-cd72-d4be-0001:~# uname -r
6.8.0-136-generic
uname -a 显示全部系统信息,包括内核名称、主机名、内核版本、内核编译日期、硬件架构等。uname -r 仅显示内核版本号。
查看操作系统发行版信息:
root@ecs-cd72-d4be-0001:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.4 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
查看CPU信息:
root@ecs-cd72-d4be-0001:~# lscpu | head -20
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 52 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Vendor ID: AuthenticAMD
BIOS Vendor ID: Huawei Cloud
Model name: General Purpose Processor
BIOS Model name: pc-i440fx-7.1 CPU @ 2.0GHz
BIOS CPU family: 1
CPU family: 26
Model: 17
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Stepping: 0
BogoMIPS: 4500.00
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp ibrs_enhanced vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 clzero xsaveerptr wbnoinvd arat avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid movdiri movdir64b fsrm avx512_vp2intersect
Hypervisor vendor: KVM
从输出可以看到,这是一台基于KVM虚拟化的华为云服务器,AMD架构,4核8线程(超线程),x86_64架构。
查看内存信息:
root@ecs-cd72-d4be-0001:~# free -h
total used free shared buff/cache available
Mem: 14Gi 628Mi 13Gi 2.6Mi 589Mi 14Gi
Swap: 0B 0B 0B
free -h 以人类可读格式显示内存使用情况。该服务器总内存14GB,已用628MB,可用约13GB,未配置Swap分区。
查看磁盘信息:
root@ecs-cd72-d4be-0001:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 1.1M 1.5G 1% /run
/dev/vda1 40G 3.4G 35G 9% /
tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.5G 12K 1.5G 1% /run/user/0
root@ecs-cd72-d4be-0001:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
df -h 显示文件系统磁盘使用情况,lsblk 以树形结构显示块设备。系统盘为虚拟磁盘vda,40GB,使用率9%。
查看服务器厂商信息(DMI数据):
root@ecs-cd72-d4be-0001:~# dmidecode -t system 2>/dev/null | head -15
# dmidecode 3.5
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0100, DMI type 1, 27 bytes
System Information
Manufacturer: Huawei Cloud
Product Name: OpenStack Nova
Version: 13.2.1-20260428161150_182ca86
Serial Number: 4401197f-511c-4304-a727-cf1b2d9dee38
UUID: 4401197f-511c-4304-a727-cf1b2d9dee38
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Virtual Machine
dmidecode 命令读取SMBIOS/DMI数据,可以获取硬件厂商、产品名称、序列号等详细信息。
查看系统运行时间和负载:
root@ecs-cd72-d4be-0001:~# uptime
12:21:47 up 13 min, 2 users, load average: 0.00, 0.02, 0.03
uptime 显示当前时间、系统已运行时间、当前在线用户数和系统负载平均值(1分钟、5分钟、15分钟)。
二、Linux登录与远程连接
2.1 SSH远程登录原理
SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。SSH通过公钥加密技术实现身份认证和数据加密传输,替代了传统的Telnet、FTP等明文协议。
SSH连接过程:
- TCP连接建立:客户端向服务器的22端口发起TCP连接
- 版本协商:客户端和服务器交换SSH版本信息
- 算法协商:协商加密算法、MAC算法、压缩算法等
- 密钥交换:使用Diffie-Hellman等算法交换会话密钥
- 用户认证:密码认证或公钥认证
- 会话建立:加密通道建立,开始交互
2.2 SSH实操
查看SSH版本:
root@ecs-cd72-d4be-0001:~# ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.18, OpenSSL 3.0.13 30 Jan 2024
查看SSH服务端配置:
root@ecs-cd72-d4be-0001:~# grep -v '^#' /etc/ssh/sshd_config | grep -v '^$' | head -20
Include /etc/ssh/sshd_config.d/*.conf
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
PermitRootLogin yes
PasswordAuthentication yes
UseDNS no
关键配置项说明:
PermitRootLogin yes:允许root用户通过SSH登录PasswordAuthentication yes:允许密码认证UsePAM yes:使用PAM(Pluggable Authentication Modules)进行认证UseDNS no:禁用DNS反查,加快登录速度
查看当前登录用户信息:
root@ecs-cd72-d4be-0001:~# whoami
root
root@ecs-cd72-d4be-0001:~# w
12:21:47 up 13 min, 2 users, load average: 0.00, 0.02, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root 119.3.239.52 12:21 13:08 0.00s ? sshd: root@notty
root 1.92.88.90 12:21 13:08 0.00s 0.02s sshd: root@notty
whoami 显示当前用户名,w 显示所有登录用户的详细信息,包括登录来源IP、登录时间、空闲时间等。
查看登录历史记录:
root@ecs-cd72-d4be-0001:~# last -5
reboot system boot 6.8.0-136-generi Thu Oct 15 12:08 still running
wtmp begins Tue Jul 21 17:34:26 2026
last 命令读取 /var/log/wtmp 文件,显示用户登录和系统启动历史。
2.3 SSH客户端常用命令
# 密码方式登录
ssh root@120.46.140.181
# 指定端口登录
ssh -p 2222 root@120.46.140.181
# 密钥方式登录
ssh -i ~/.ssh/id_rsa root@120.46.140.181
# 执行远程命令后返回
ssh root@120.46.140.181 "uname -a"
# 文件传输
scp localfile root@120.46.140.181:/tmp/
scp root@120.46.140.181:/tmp/remotefile ./
三、命令类型与执行过程
3.1 Linux命令的分类
| 命令类型 | 说明 | 示例 |
|---|---|---|
| 内建命令(builtin) | Shell自带的命令,执行效率高 | cd, echo, pwd, type |
| 外部命令(external) | 独立的可执行程序,位于文件系统 | ls, cp, mv, rm |
| 别名(alias) | 为命令定义的别名 | ll = ls -l |
| Shell函数 | 用function定义的函数 | 自定义函数 |
| 哈希命令 | 缓存的外部命令路径 | hash表中的命令 |
3.2 命令类型查看实操
使用 type 命令可以查看命令的类型:
root@ecs-cd72-d4be-0001:~# type ls
ls is /usr/bin/ls
root@ecs-cd72-d4be-0001:~# type cd
cd is a shell builtin
root@ecs-cd72-d4be-0001:~# type useradd
useradd is /usr/sbin/useradd
从输出可以看到:
ls是外部命令,位于/usr/bin/lscd是Shell内建命令(builtin),这也是为什么cd可以改变当前Shell工作目录的原因useradd是外部命令,位于/usr/sbin/useradd(管理员命令)
查看命令路径:
root@ecs-cd72-d4be-0001:~# which ls
/usr/bin/ls
root@ecs-cd72-d4be-0001:~# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
which:在PATH环境变量指定的路径中搜索命令,返回第一个匹配的路径whereis:不仅查找二进制文件路径,还查找源码文件和man手册路径
3.3 命令执行过程
当在Shell中输入一个命令时,执行过程如下:
- 命令解析:Shell读取输入,进行变量替换、命令替换、别名展开
- 命令查找:判断是内建命令还是外部命令
- 内建命令:直接在Shell进程中执行
- 外部命令:在PATH路径中查找可执行文件
- fork子进程:对于外部命令,Shell通过fork()创建子进程
- exec替换:子进程通过exec()系列函数加载目标程序
- wait等待:父进程(Shell)等待子进程完成
- 返回状态:子进程退出,Shell获取退出状态码($?)
root@ecs-cd72-d4be-0001:~# hash
hash: hash table empty
hash 命令显示Shell维护的命令路径缓存表,首次执行外部命令后,Shell会缓存其路径以加快后续查找速度。
四、命令帮助用法
Linux提供了多种获取命令帮助的方式,掌握这些方法对于学习和使用Linux至关重要。
4.1 man手册
man(manual)是Linux最经典的帮助系统,手册分为多个章节:
| 章节号 | 内容 |
|---|---|
| 1 | 用户命令(可执行程序) |
| 2 | 系统调用 |
| 3 | 库函数 |
| 4 | 设备文件 |
| 5 | 配置文件格式 |
| 6 | 游戏 |
| 7 | 约定和协议 |
| 8 | 管理员命令 |
root@ecs-cd72-d4be-0001:~# man ls | head -30
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is speci‐
fied.
Mandatory arguments to long options are mandatory for short options
too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print C-style escapes for nongraphic characters
--block-size=SIZE
with -l, scale sizes by SIZE when printing them; e.g.,
man手册的结构通常包括:NAME(名称)、SYNOPSIS(语法)、DESCRIPTION(描述)、OPTIONS(选项)、EXAMPLES(示例)、SEE ALSO(参见)等部分。
4.2 info手册
info 是GNU项目提供的超文本帮助系统,比man更详细:
root@ecs-cd72-d4be-0001:~# info ls | head -15
File: coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory listing
10.1 ‘ls’: List directory contents
==================================
The ‘ls’ program lists information about files (of any type, including
directories). Options and file arguments can be intermixed arbitrarily,
as usual. Later options override earlier options that are incompatible.
For non-option command-line arguments that are directories, by
default ‘ls’ lists the contents of directories, not recursively, and
omitting files with names beginning with ‘.’. For other non-option
arguments, by default ‘ls’ lists just the file name. If no non-option
argument is specified, ‘ls’ operates on the current directory, acting as
if it had been invoked with a single argument of ‘.’.
4.3 --help选项
大多数命令支持 --help 或 -h 选项,显示简要帮助信息:
root@ecs-cd72-d4be-0001:~# ls --help | head -20
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE with -l, scale sizes by SIZE when printing them;
e.g., '--block-size=M'; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
change of file status information);
with -l: show ctime and sort by name;
otherwise: sort by ctime, newest first
-C list entries by columns
--color[=WHEN] color the output WHEN; more info below
4.4 help命令(内建命令专用)
对于Shell内建命令,使用 help 获取帮助:
root@ecs-cd72-d4be-0001:~# help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
Change the current directory to DIR. The default DIR is the value of the
HOME shell variable. If DIR is "-", it is converted to $OLDPWD.
The variable CDPATH defines the search path for the directory containing
DIR. Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory. If DIR begins
with a slash (/), then CDPATH is not used.
If the directory is not found, and the shell option `cdable_vars' is set,
the word is assumed to be a variable name. If that variable has a value,
its value is used for DIR.
4.5 whatis命令
whatis 显示命令的简要描述:
root@ecs-cd72-d4be-0001:~# whatis ls
ls (1) - list directory contents
五、Linux基本命令与常用命令
5.1 日期时间命令
root@ecs-cd72-d4be-0001:~# date
Thu Oct 15 12:21:48 PM CST 2026
root@ecs-cd72-d4be-0001:~# date '+%Y-%m-%d %H:%M:%S'
2026-10-15 12:21:48
date 命令显示或设置系统日期时间。常用格式化参数:
%Y:四位年份,%m:月份,%d:日期%H:小时(24小时制),%M:分钟,%S:秒%F:等价于%Y-%m-%d,%T:等价于%H:%M:%S
5.2 echo和printf
root@ecs-cd72-d4be-0001:~# echo 'Hello Linux'
Hello Linux
root@ecs-cd72-d4be-0001:~# printf '%s\n' 'printf test'
printf test
echo 用于输出文本,printf 提供更灵活的格式化输出(类似C语言的printf函数)。
5.3 环境变量查看
root@ecs-cd72-d4be-0001:~# echo $SHELL
/bin/bash
root@ecs-cd72-d4be-0001:~# echo $HOME
/root
root@ecs-cd72-d4be-0001:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@ecs-cd72-d4be-0001:~# echo $LANG
en_US.UTF-8
root@ecs-cd72-d4be-0001:~# env | head -15
SHELL=/bin/bash
PWD=/root
LOGNAME=root
XDG_SESSION_TYPE=tty
HOME=/root
LANG=en_US.UTF-8
SSH_CONNECTION=119.3.239.52 27946 192.168.0.5 22
XDG_SESSION_CLASS=user
USER=root
SHLVL=1
XDG_SESSION_ID=47
XDG_RUNTIME_DIR=/run/user/0
SSH_CLIENT=119.3.239.52 27946 22
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
关键环境变量说明:
SHELL:当前使用的Shell类型HOME:当前用户家目录PATH:命令搜索路径,多个路径用冒号分隔LANG:系统语言和编码设置
六、字符集和快捷键
6.1 字符集与locale
root@ecs-cd72-d4be-0001:~# locale | head -10
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
locale 命令显示当前系统的区域设置和字符集信息。en_US.UTF-8 表示使用英语(美国)区域设置和UTF-8字符编码。在服务器环境中,通常建议使用UTF-8编码以支持多语言字符。
6.2 常用Shell快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + A | 光标移到行首 |
Ctrl + E | 光标移到行尾 |
Ctrl + U | 删除光标到行首的内容 |
Ctrl + K | 删除光标到行尾的内容 |
Ctrl + W | 删除光标前一个单词 |
Ctrl + L | 清屏(等价于clear) |
Ctrl + R | 搜索历史命令 |
Ctrl + D | 退出当前Shell(EOF) |
Ctrl + C | 终止当前命令 |
Ctrl + Z | 挂起当前命令到后台 |
Tab | 命令/路径自动补全 |
!! | 执行上一条命令 |
!$ | 引用上一条命令的最后一个参数 |
七、Linux文件系统目录结构(FHS)
7.1 FHS标准介绍
FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)定义了Linux系统中目录和文件的组织结构。遵循FHS标准使得不同Linux发行版具有相似的目录布局,便于用户使用和软件移植。
7.2 根目录结构实操
root@ecs-cd72-d4be-0001:~# ls -la /
total 100
drwxr-xr-x 24 root root 4096 Oct 15 12:08 .
drwxr-xr-x 24 root root 4096 Oct 15 12:08 ..
lrwxrwxrwx 1 root root 7 Apr 22 2024 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Feb 26 2024 bin.usr-is-merged
drwxr-xr-x 3 root root 4096 Jul 21 17:33 boot
dr-xr-xr-x 2 root root 4096 Apr 23 2024 cdrom
drwxr-xr-x 7 root root 4096 Jul 21 17:34 CloudrResetPwdAgent
drwxr-xr-x 19 root root 3940 Oct 15 12:08 dev
drwxr-xr-x 118 root root 12288 Oct 15 12:21 etc
drwxr-xr-x 2 root root 4096 Oct 15 12:21 home
lrwxrwxrwx 1 root root 7 Apr 22 2024 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 22 2024 lib64 -> usr/lib64
drwxr-xr-x 2 root root 4096 Feb 26 2024 lib.usr-is-merged
drwx------ 2 root root 16384 Jul 21 16:51 lost+found
drwxr-xr-x 2 root root 4096 Apr 23 2024 media
drwxr-xr-x 2 root root 4096 Apr 23 2024 mnt
drwxr-xr-x 2 root root 4096 Apr 23 2024 opt
dr-xr-xr-x 239 root root 0 Oct 15 12:08 proc
drwx------ 5 root root 4096 Oct 15 12:21 root
drwxr-xr-x 32 root root 920 Oct 15 12:21 run
lrwxrwxrwx 1 root root 8 Apr 22 2024 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Apr 3 2024 sbin.usr-is-merged
drwxr-xr-x 2 root root 4096 Jul 21 17:25 snap
drwxr-xr-x 2 root root 4096 Apr 23 2024 srv
dr-xr-xr-x 13 root root 0 Oct 15 12:17 sys
drwxrwxrwt 15 root root 4096 Oct 15 12:21 tmp
drwxr-xr-x 12 root root 4096 Apr 23 2024 usr
drwxr-xr-x 13 root root 4096 Jul 21 17:25 var
7.3 主要目录说明
| 目录 | 说明 |
|---|---|
/bin | 基本命令(用户命令),如ls、cp、cat等 |
/sbin | 系统管理命令,如useradd、fdisk等 |
/etc | 系统配置文件 |
/home | 普通用户家目录 |
/root | root用户家目录 |
/var | 可变数据(日志、缓存、邮件等) |
/usr | 用户程序和数据 |
/tmp | 临时文件 |
/boot | 内核和引导文件 |
/dev | 设备文件 |
/proc | 进程信息(虚拟文件系统) |
/sys | 系统设备信息(虚拟文件系统) |
/opt | 可选应用程序 |
/mnt | 临时挂载点 |
/media | 可移动设备挂载点 |
查看各主要目录内容:
root@ecs-cd72-d4be-0001:~# ls /bin/ | head -10
[
aa-enabled
aa-exec
aa-features-abi
acpidbg
add-apt-repository
addpart
addr2line
apport-bug
apport-cli
root@ecs-cd72-d4be-0001:~# ls /sbin/ | head -10
aa-load
aa-remove-unknown
aa-status
aa-teardown
accessdb
addgnupghome
addgroup
add-shell
adduser
agetty
root@ecs-cd72-d4be-0001:~# ls -la /home/
total 8
drwxr-xr-x 2 root root 4096 Oct 15 12:21 .
drwxr-xr-x 24 root root 4096 Oct 15 12:08 ..
root@ecs-cd72-d4be-0001:~# ls /var/
backups
cache
crash
lib
local
lock
log
mail
opt
run
snap
spool
tmp
root@ecs-cd72-d4be-0001:~# ls /usr/
bin
games
include
lib
lib64
libexec
local
sbin
share
src
八、文件常见操作命令
8.1 pwd和ls命令
root@ecs-cd72-d4be-0001:~# pwd
/root
root@ecs-cd72-d4be-0001:~# ls -la /root/ | head -15
total 28
drwx------ 5 root root 4096 Oct 15 12:21 .
drwxr-xr-x 24 root root 4096 Oct 15 12:08 ..
-rw-r--r-- 1 root root 0 Jul 21 17:34 .bash_history
-rw-r--r-- 1 root root 3106 Apr 22 2024 .bashrc
drwx------ 2 root root 4096 Jul 21 17:25 .cache
drwx------ 3 root root 4096 Oct 15 12:21 .config
-rw------- 1 root root 0 Jul 21 17:34 .history
-rw-r--r-- 1 root root 161 Apr 22 2024 .profile
drwx------ 2 root root 4096 Oct 15 12:08 .ssh
root@ecs-cd72-d4be-0001:~# ls -lh /var/log/ | head -10
total 608K
-rw-r--r-- 1 root root 0 Jul 21 17:34 alternatives.log
-rw-r----- 1 root adm 0 Jul 21 17:34 apport.log
drwxr-xr-x 2 root root 4.0K Oct 15 12:21 apt
-rw-r----- 1 syslog adm 31K Oct 15 12:21 auth.log
-rw-r--r-- 1 root root 0 Jul 21 17:34 bootstrap.log
-rw-rw---- 1 root utmp 0 Jul 21 17:34 btmp
drwxr-x--- 2 _chrony _chrony 4.0K Jul 21 17:25 chrony
-rw-r--r-- 1 syslog adm 88K Oct 15 12:08 cloud-init.log
-rw-r----- 1 root adm 4.7K Oct 15 12:08 cloud-init-output.log
root@ecs-cd72-d4be-0001:~# ls -lrt /var/log/ | tail -5
-rw-rw-r-- 1 root utmp 3456 Oct 15 12:08 wtmp
drwxr-xr-x 2 root root 4096 Oct 15 12:21 apt
-rw-r--r-- 1 root root 1678 Oct 15 12:21 dpkg.log
-rw-r----- 1 syslog adm 30956 Oct 15 12:21 auth.log
-rw-r----- 1 syslog adm 253494 Oct 15 12:21 syslog
ls 命令常用选项:
-l:长格式显示(权限、链接数、属主、属组、大小、时间、文件名)-a:显示所有文件(包括隐藏文件,以.开头的文件)-h:人类可读的大小格式(K、M、G)-r:逆序显示-t:按修改时间排序-R:递归显示子目录
8.2 目录操作命令
root@ecs-cd72-d4be-0001:~# mkdir -p /tmp/testdir/subdir && ls -la /tmp/testdir/
total 56
drwxr-xr-x 3 root root 4096 Oct 15 12:21 .
drwxrwxrwt 15 root root 4096 Oct 15 12:21 ..
-rw-r--r-- 1 root root 178 Oct 15 12:21 all.txt
-rw-r--r-- 1 root root 10 Oct 15 12:21 compress_test.txt
-rw-r--r-- 1 root root 60 Oct 15 12:21 error.txt
-rw-r--r-- 1 root root 12 Oct 15 12:21 file1_backup.txt
-rw-r--r-- 1 root root 12 Oct 15 12:21 file1_hardlink
lrwxrwxrwx 1 root root 22 Oct 15 12:21 file1_softlink -> /tmp/testdir/file1.txt
-rw-r--r-- 1 root root 6 Oct 15 12:21 file2_renamed.txt
-rw-r--r-- 1 root root 21 Oct 15 12:21 heredoc.txt
-rwxr-xr-x 1 root root 0 Oct 15 12:21 perm_test.sh
-rw-r--r-- 1 root root 29 Oct 15 12:21 redirect.txt
-rw-r--r-- 1 root root 9 Oct 15 12:21 sed_test.txt
drwxr-xr-x 2 root root 4096 Oct 15 12:21 subdir
-rw-r--r-- 1 root root 9 Oct 15 12:21 tee.txt
-rw-r--r-- 1 root root 0 Oct 15 12:21 umask_test
-rw-r--r-- 1 root root 54 Oct 15 12:21 vim_demo.txt
mkdir -p 递归创建目录,如果父目录不存在则一并创建,不会报错。
8.3 文件复制、移动和删除
# 创建测试文件并复制
root@ecs-cd72-d4be-0001:~# echo 'test content' > /tmp/testfile.txt && cp /tmp/testfile.txt /tmp/testfile_bak.txt && ls -la /tmp/testfile*
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile_bak.txt
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
# 移动/重命名文件
root@ecs-cd72-d4be-0001:~# mv /tmp/testfile_bak.txt /tmp/testfile_renamed.txt && ls -la /tmp/testfile*
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile_renamed.txt
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
# 删除文件
root@ecs-cd72-d4be-0001:~# rm /tmp/testfile_renamed.txt && ls -la /tmp/testfile* 2>&1
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
cp:复制文件或目录,-r递归复制目录,-p保留属性mv:移动或重命名文件,-f强制覆盖rm:删除文件,-r递归删除目录,-f强制删除不提示
8.4 文件查看命令
root@ecs-cd72-d4be-0001:~# touch /tmp/newfile.txt && ls -la /tmp/newfile.txt
-rw-r--r-- 1 root root 0 Oct 15 12:21 /tmp/newfile.txt
root@ecs-cd72-d4be-0001:~# stat /tmp/newfile.txt
File: /tmp/newfile.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 253,1 Inode: 3854 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-10-15 12:21:49.950399883 +0800
Modify: 2026-10-15 12:21:49.950399883 +0800
Change: 2026-10-15 12:21:49.950399883 +0800
Birth: 2026-10-15 12:21:49.950399883 +0800
root@ecs-cd72-d4be-0001:~# file /tmp/newfile.txt
/tmp/newfile.txt: empty
root@ecs-cd72-d4be-0001:~# cat /tmp/testfile.txt
test content
root@ecs-cd72-d4be-0001:~# echo -e 'line1\nline2\nline3' > /tmp/multiline.txt && tac /tmp/multiline.txt
line3
line2
line1
root@ecs-cd72-d4be-0001:~# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
root@ecs-cd72-d4be-0001:~# tail -3 /etc/passwd
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
dnsmasq:x:999:65534:dnsmasq:/var/lib/misc:/usr/sbin/nologin
_chrony:x:110:111:Chrony daemon,,,:/var/lib/chrony:/usr/sbin/nologin
root@ecs-cd72-d4be-0001:~# wc /etc/passwd
35 52 1863 /etc/passwd
常用文件查看命令说明:
touch:创建空文件或更新文件时间戳stat:显示文件的详细状态信息(inode、权限、时间等)file:查看文件类型cat:正向显示文件内容,tac反向显示head -N:显示文件前N行,tail -N:显示文件后N行wc:统计文件的行数、单词数、字节数
九、用户和组基本概念
9.1 用户和组的概念
Linux是多用户多任务的操作系统,通过用户和组机制实现权限隔离和资源管理:
-
用户(User):每个使用系统的人都有一个用户账号,用UID(User ID)标识
- root用户:UID=0,超级管理员,拥有最高权限
- 系统用户:UID=1~999,用于运行系统服务
- 普通用户:UID=1000+,日常使用
-
组(Group):用户的集合,用GID(Group ID)标识
- 主组:每个用户必须属于一个主组
- 附加组:用户可以属于多个附加组
9.2 用户和组配置文件
/etc/passwd - 用户信息文件:
root@ecs-cd72-d4be-0001:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
dhcpcd:x:100:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false
messagebus:x:101:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:992:992:systemd Resolver:/:/usr/sbin/nologin
pollinate:x:102:1::/var/cache/pollinate:/bin/false
polkitd:x:991:991:User for polkitd:/:/usr/sbin/nologin
syslog:x:103:104::/nonexistent:/usr/sbin/nologin
uuidd:x:104:105::/run/uuidd:/usr/sbin/nologin
tcpdump:x:105:107::/nonexistent:/usr/sbin/nologin
tss:x:106:108:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:107:109::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:989:989:Firmware update daemon:/var/lib/fwupd:/usr/sbin/nologin
usbmux:x:108:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
dnsmasq:x:999:65534:dnsmasq:/var/lib/misc:/usr/sbin/nologin
_chrony:x:110:111:Chrony daemon,,,:/var/lib/chrony:/usr/sbin/nologin
每行格式:用户名:密码占位符:UID:GID:描述信息:家目录:登录Shell
- 密码字段为x,实际密码存储在/etc/shadow中
- /usr/sbin/nologin 表示该用户不能登录系统
/etc/group - 组信息文件:
root@ecs-cd72-d4be-0001:~# cat /etc/group | head -20
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
每行格式:组名:密码占位符:GID:组成员列表
/etc/shadow - 密码影子文件:
root@ecs-cd72-d4be-0001:~# cat /etc/shadow | head -5
root:$6$DfMgXZyW$731T7hRQ4hAHDUe5WWl8XlOJImBnUV9QkaOm6eBpEu/HPlb0fColT0OUPayVXkbWwdxlV0g.FrcClmpJOdxss/:20741:0:99999:7:::
daemon:*:19836:0:99999:7:::
bin:*:19836:0:99999:7:::
sys:*:19836:0:99999:7:::
sync:*:19836:0:99999:7:::
每行格式:用户名:加密密码:最后修改日期:最小间隔:最大间隔:警告期:不活动期:过期日期:保留字段
- 密码使用SHA-512加密(以开头)
- *表示该用户无法通过密码登录
查看当前用户信息:
root@ecs-cd72-d4be-0001:~# id root
uid=0(root) gid=0(root) groups=0(root)
root@ecs-cd72-d4be-0001:~# id
uid=0(root) gid=0(root) groups=0(root)
root@ecs-cd72-d4be-0001:~# groups
root
十、用户和组管理命令
10.1 用户管理实操
创建用户:
root@ecs-cd72-d4be-0001:~# useradd testuser && id testuser
uid=1000(testuser) gid=1000(testuser) groups=1000(testuser)
useradd 命令创建用户,常用选项:
-u:指定UID-g:指定主组-G:指定附加组-d:指定家目录-s:指定登录Shell-c:添加描述信息-m:创建家目录
设置密码:
root@ecs-cd72-d4be-0001:~# echo 'testuser:Test@123' | chpasswd
Password set successfully
修改用户属性:
root@ecs-cd72-d4be-0001:~# usermod -c 'Test User Modified' testuser && grep testuser /etc/passwd
testuser:x:1000:1000:Test User Modified:/home/testuser:/bin/sh
usermod 修改用户属性,常用选项与useradd类似,还有:
-L:锁定用户-U:解锁用户-aG:追加附加组(不覆盖原有附加组)
10.2 组管理实操
创建组:
root@ecs-cd72-d4be-0001:~# groupadd testgroup && grep testgroup /etc/group
testgroup:x:1001:
将用户加入组:
root@ecs-cd72-d4be-0001:~# gpasswd -a testuser testgroup
Adding user testuser to group testgroup
testgroup:x:1001:testuser
删除用户和组:
root@ecs-cd72-d4be-0001:~# userdel -r testuser
userdel: testuser mail spool (/var/mail/testuser) not found
userdel: testuser home directory (/home/testuser) not found
testuser deleted
root@ecs-cd72-d4be-0001:~# groupdel testgroup
testgroup deleted
userdel -r 删除用户同时删除其家目录和邮件目录。groupdel 删除组(组内不能有用户)。
十一、文件权限管理
11.1 权限模型
Linux文件权限分为三个级别,每级三种权限:
| 权限 | 数值 | 说明 |
|---|---|---|
| r(read) | 4 | 读权限 |
| w(write) | 2 | 写权限 |
| x(execute) | 1 | 执行权限 |
权限分为三组:属主(u)、属组(g)、其他用户(o)
11.2 权限查看与修改实操
查看文件权限:
root@ecs-cd72-d4be-0001:~# ls -l /tmp/testfile.txt
-rw-r--r-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
使用数字方式修改权限:
root@ecs-cd72-d4be-0001:~# chmod 755 /tmp/testfile.txt && ls -l /tmp/testfile.txt
-rwxr-xr-x 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
755 = rwxr-xr-x:属主可读写执行,属组和其他用户可读和执行
使用符号方式修改权限:
root@ecs-cd72-d4be-0001:~# chmod u+x,g-w,o=r /tmp/testfile.txt && ls -l /tmp/testfile.txt
-rwxr-xr-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
修改文件属主和属组:
root@ecs-cd72-d4be-0001:~# chown root:root /tmp/testfile.txt && ls -l /tmp/testfile.txt
-rwxr-xr-- 1 root root 13 Oct 15 12:21 /tmp/testfile.txt
11.3 umask默认权限
root@ecs-cd72-d4be-0001:~# umask
0022
root@ecs-cd72-d4be-0001:~# umask 022 && touch /tmp/umask_test.txt && ls -l /tmp/umask_test.txt
-rw-r--r-- 1 root root 0 Oct 15 12:21 /tmp/umask_test.txt
root@ecs-cd72-d4be-0001:~# mkdir /tmp/perm_test && ls -ld /tmp/perm_test
drwxr-xr-x 2 root root 4096 Oct 15 12:21 /tmp/perm_test
umask 控制新建文件的默认权限:
- 文件默认权限 = 666 - umask = 666 - 022 = 644(rw-r--r--)
- 目录默认权限 = 777 - umask = 777 - 022 = 755(rwxr-xr-x)
十二、文件特殊权限与特殊属性
12.1 SUID(Set UID)
SUID权限使普通用户在执行该文件时,临时获得文件属主的权限。最典型的例子是 passwd 命令:
root@ecs-cd72-d4be-0001:~# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 64152 May 30 2024 /usr/bin/passwd
权限中的 s 位就是SUID。普通用户执行passwd时,临时获得root权限,从而可以修改/etc/shadow文件。
查找系统中所有SUID文件:
root@ecs-cd72-d4be-0001:~# find /usr/bin -perm -4000 2>/dev/null | head -10
/usr/bin/passwd
/usr/bin/fusermount3
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/mount
/usr/bin/su
/usr/bin/sudo
/usr/bin/umount
/usr/bin/chsh
/usr/bin/gpasswd
设置SUID权限:
root@ecs-cd72-d4be-0001:~# cp /bin/cat /tmp/mycat && chmod 4755 /tmp/mycat && ls -l /tmp/mycat
-rwsr-xr-x 1 root root 39384 Oct 15 12:21 /tmp/mycat
12.2 SGID(Set GID)
SGID权限作用于文件时,执行者临时获得文件属组的权限;作用于目录时,目录内新建文件的属组继承目录的属组。
root@ecs-cd72-d4be-0001:~# find /usr/bin -perm -2000 2>/dev/null | head -10
/usr/bin/chage
/usr/bin/expiry
/usr/bin/crontab
/usr/bin/ssh-agent
root@ecs-cd72-d4be-0001:~# mkdir /tmp/sgid_test && chmod 2755 /tmp/sgid_test && ls -ld /tmp/sgid_test
drwxr-sr-x 2 root root 4096 Oct 15 12:21 /tmp/sgid_test
12.3 Sticky Bit(粘滞位)
粘滞位主要用于共享目录(如/tmp),设置后只有文件属主和root才能删除该目录下的文件,即使用户对目录有写权限。
root@ecs-cd72-d4be-0001:~# ls -ld /tmp
drwxrwxrwt 16 root root 4096 Oct 15 12:21 /tmp
root@ecs-cd72-d4be-0001:~# mkdir /tmp/sticky_test && chmod 1755 /tmp/sticky_test && ls -ld /tmp/sticky_test
drwxr-xr-t 2 root root 4096 Oct 15 12:21 /tmp/sticky_test
权限末尾的 t 就是粘滞位标志。
12.4 特殊属性(chattr/lsattr)
root@ecs-cd72-d4be-0001:~# touch /tmp/attr_test.txt && chattr +i /tmp/attr_test.txt && lsattr /tmp/attr_test.txt
----i---------e------- /tmp/attr_test.txt
root@ecs-cd72-d4be-0001:~# chattr -i /tmp/attr_test.txt && lsattr /tmp/attr_test.txt
--------------e------- /tmp/attr_test.txt
chattr +i:设置不可变属性,文件不能被修改、删除、重命名chattr -i:移除不可变属性lsattr:查看文件特殊属性
十三、vim文本编辑器
13.1 vim简介
vim(Vi IMproved)是Linux下最强大的文本编辑器之一,是vi的增强版本。
root@ecs-cd72-d4be-0001:~# vim --version | head -5
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Jul 13 2026 17:17:48)
Included patches: 1-16, 647, 678, 697
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Huge version without GUI. Features included (+) or not (-):
13.2 vim的三种工作模式
vim有三种基本工作模式:
- 普通模式(Normal Mode):默认模式,用于浏览、复制、粘贴、删除等操作
- 插入模式(Insert Mode):用于文本输入,按i/a/o等键进入,按Esc返回普通模式
- 命令行模式(Command Mode):用于保存、退出、搜索替换等,普通模式下按:进入
模式切换关系:
普通模式 ←→ 插入模式(i/a/o → Esc)
普通模式 ←→ 命令行模式(: → Enter/Esc)
13.3 vim常用操作
插入模式进入方式:
| 按键 | 功能 |
|---|---|
i | 在光标前插入 |
a | 在光标后插入 |
o | 在下一行插入新行 |
I | 在行首插入 |
A | 在行尾插入 |
O | 在上一行插入新行 |
普通模式常用操作:
| 按键 | 功能 |
|---|---|
h/j/k/l | 左/下/上/右移动光标 |
gg | 跳到文件首行 |
G | 跳到文件末行 |
dd | 删除当前行 |
ndd | 删除n行 |
yy | 复制当前行 |
nyy | 复制n行 |
p | 粘贴 |
u | 撤销 |
Ctrl+r | 恢复撤销 |
x | 删除光标处字符 |
命令行模式常用操作:
| 命令 | 功能 |
|---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出不保存 |
:set nu | 显示行号 |
:set nonu | 取消行号 |
:%s/old/new/g | 全局替换 |
:/pattern | 向下搜索 |
13.4 vim配置
root@ecs-cd72-d4be-0001:~# cat /etc/vim/vimrc | grep -v '^"' | grep -v '^$' | head -10
runtime! debian.vim
if has("syntax")
syntax on
endif
if filereadable("/etc/vim/vimrc.local")
source /etc/vim/vimrc.local
endif
常用个人vim配置(~/.vimrc):
set nu " 显示行号
set tabstop=4 " Tab键宽度
set expandtab " Tab转空格
set autoindent " 自动缩进
set syntax on " 语法高亮
set cursorline " 高亮当前行
总结
本文从计算机基础与服务器硬件出发,系统讲解了Linux系统的基础知识和命令行操作,涵盖以下核心内容:
- 服务器硬件:通过uname、lscpu、free、df等命令查看系统硬件信息
- SSH远程连接:理解SSH加密协议原理,掌握SSH客户端和服务端配置
- 命令类型:区分内建命令和外部命令,理解命令执行过程(fork→exec→wait)
- 命令帮助:熟练使用man、info、--help、help等多种帮助方式
- 基本命令:掌握date、echo、env等常用命令和环境变量
- 文件系统:理解FHS标准,熟悉各目录的用途
- 文件操作:熟练使用ls、cd、cp、mv、rm、cat、head、tail等命令
- 用户和组:理解用户/组概念和配置文件,掌握useradd、usermod、groupadd等管理命令
- 权限管理:掌握chmod、chown、umask的使用,理解权限计算方法
- 特殊权限:理解SUID、SGID、Sticky Bit的原理和应用场景
- vim编辑器:掌握vim三种模式切换和常用操作
所有命令均在Ubuntu 24.04 LTS服务器上实操验证,输出真实可靠。掌握这些基础知识是成为Linux运维工程师的第一步,后续将深入学习文本处理、Shell编程等高级主题。