前言
刚接触 Linux 的时候,很多人会被它纯命令行的操作方式劝退 —— 没有桌面的文件双击,一切操作都要靠命令完成。但真正用熟之后会发现,这种高效的操作方式比图形界面快得多。作为大模型开发、后端运维的基础环境,Linux 是绕不开的基本功,这篇是我整理的入门阶段最常用的核心操作笔记,都是日常高频用到的内容。
一、先搞懂 Linux 的目录结构
和 Windows 把盘符分成 C 盘 D 盘不同,Linux 整个文件系统是一棵从根目录/长出来的树,所有文件、硬件设备都以文件的形式挂在这棵树上,Linux 有一个很重要的理念:一切皆文件。普通文件、目录、设备、进程信息,都可以通过文件或文件系统接口来访问。
不用一开始就把所有目录背下来,先记住几个高频用到的:
/bin、/sbin:存放系统自带的可执行命令,sbin是只有管理员能执行的系统管理命令/home:普通用户的家目录,每个用户进去之后默认在自己的/home/用户名目录下/root:超级管理员 root 的家目录,和普通用户的目录是分开的/etc:系统所有的配置文件都存在这里,改环境变量、用户配置、服务配置基本都在这个目录下找/usr:用户安装的软件默认装在这里,类似 Windows 的Program Files/var:经常变动的文件,比如各种日志文件,排查问题的时候经常来这里/tmp:临时文件目录,系统会自动清理这里的内容,重要文件别放这/dev:所有硬件设备都在这里以文件形式存在,比如硬盘、网卡
工作中最常打交道的通常是:
/etc:改配置/var/log:看日志/home:放用户数据/opt:装自己的软件/tmp:临时测试
二、环境准备:远程连接与软件安装
实际工作中服务器一般都是放在机房或者云上,我们不会直接碰物理机,都是通过 SSH 远程连接操作。常用的工具有 FinalShell、Xshell 这些,输入服务器 IP、账号密码就能连上。
Ubuntu 系统默认用 APT 作为包管理器,装软件不用自己去官网下安装包,几条命令就搞定:
# 更新软件源列表 sudo apt update # 安装软件,-y表示不需要确认直接装 sudo apt install 软件名 -y # 卸载软件 sudo apt remove 软件名 -y刚装好的 Ubuntu 如果没有ifconfig命令,就是因为没装net-tools工具包,跑一句sudo apt install net-tools -y就好。
sudo apt update # 更新软件包索引 sudo apt install net-tools # 安装 net-tools 软件包 sudo apt remove net-tools # 卸载 net-tools 软件包 sudo apt search nginx # 搜索 nginx 相关软件包 sudo apt show nginx # 查看 nginx 软件包详情另外记住几个终端高频快捷键,能省很多事:
| 快捷键 | 作用 |
|---|---|
Ctrl + L | 清屏,和输入clear效果一样 |
Ctrl + C | 停止当前进程 |
Tab | 自动补全命令、文件名,打错了按两下会弹出所有候选,防止输错 |
| 上下方向键 | 查找历史命令 |
Ctrl + U | 清除当前输入 |
三、高频文件目录操作命令
日常操作中 80% 的时间都在和文件目录打交道,这些命令必须形成肌肉记忆:
0. 帮助命令
man ls # 查看 ls 命令的手册页 ls --help # 查看 ls 命令的简要帮助 help cd # 查看 Shell 内建命令 cd 的帮助man手册页分章节,常见的有:
第 1 章:用户命令
第 2 章:系统调用
第 3 章:库函数
第 5 章:文件格式
第 8 章:系统管理命令
例如:
man 1 write # 查看第 1 章中的 write 用户命令 man 2 write # 查看第 2 章中的 write 系统调用help用于 Shell 内建命令:
help cd # 查看内建命令 cd 的帮助信息1. 基础路径查看
pwd:显示你当前在哪个目录,打印绝对路径
pwd # 显示当前工作目录的绝对路径cd 路径:切换目录,cd ~或者直接cd是直接回到自己的家目录,cd ..回到上一级,cd -回到上一次待过的目录
cd /etc # 切换到 /etc 目录 cd ~ # 切换到当前用户的家目录 cd - # 切换回上一次所在的目录 cd .. # 切换到上一级目录 cd /var/log # 切换到 /var/log 目录2. 查看目录内容
ls是 list 的缩写,最常用的两个参数:
ls -a:显示所有文件,包括以.开头的隐藏文件ls -l:长格式显示,能看到文件的权限、所有者、大小、修改时间,Ubuntu 里ll是ls -al的别名,直接敲ll更方便
ls # 列出当前目录下的文件和目录 ls -l # 以长格式列出详细信息 ls -a # 列出所有文件,包括隐藏文件 ls -lh # 以人类可读格式显示文件大小 ls -R # 递归列出子目录内容3. 文件与目录的增删复制
mkdir 目录名:创建目录,加-p参数可以一次性创建多级不存在的目录,比如mkdir -p a/b/ctouch 文件名:创建一个空文件
mkdir /data/app # 创建 /data/app 目录 mkdir -p /data/app/logs/2026 # 递归创建多层目录 touch /data/app/readme.md # 创建空文件 readme.mdcp 源文件 目标位置:复制文件,复制整个目录要加-r递归rm 文件:删除文件,删除目录加-r,加-f是强制删除不弹确认
提醒:
rm -rf是高危命令,删之前一定要确认路径,别手滑删到系统目录
mv 源文件 目标位置:移动文件,同目录下用 mv 就是重命名
cp app.conf app.conf.bak # 复制文件 app.conf 为 app.conf.bak cp -r /data/app /backup/app # 递归复制目录 /data/app 到 /backup/app mv old.txt new.txt # 将 old.txt 重命名为 new.txt mv /data/app /opt/app # 将 /data/app 移动到 /opt/app rm file.txt # 删除文件 file.txt rm -r /tmp/test # 递归删除目录 /tmp/test rm -f file.txt # 强制删除文件,不提示4. 查看文件内容
cat 文件名:把整个文件内容一次性输出到终端,适合看小文件tail 文件名:默认看文件最后 10 行,加-n 行数指定看多少行,加-F是实时跟踪文件新增内容,看线上日志的时候特别好用
cat /etc/hosts # 显示 /etc/hosts 文件内容 cat -n /etc/passwd # 显示 /etc/passwd 并加上行号 less /var/log/syslog # 分页查看日志文件 tail -n 20 /var/log/app.log # 查看文件末尾 20 行 tail -f /var/log/app.log # 实时追踪文件新增内容- 输出重定向:
命令 > 文件是把输出覆盖写到文件里,命令 >> 文件是追加到文件末尾,不会覆盖原来的内容
echo "hello linux" # 在终端输出 hello linux echo "hello" > a.txt # 将 hello 覆盖写入 a.txt echo "world" >> a.txt # 将 world 追加到 a.txt 末尾5. 软链接
软链接相当于 Windows 的快捷方式,用ln -s 原文件路径 链接名创建,ll 查看的时候会看到链接指向原文件,删除软链接的时候直接rm 链接名就行,别在软链接后面加/,不然会误删原目录里的内容。
ln -s /opt/app/current /opt/app/releases/v1 # 创建软链接 v1 指向 current6. 历史命令
history # 查看当前用户执行过的历史命令四、VIM 编辑器:终端里的必备编辑器
在服务器上改配置文件,没有图形化编辑器,VIM 是绕不开的工具。它有三种工作模式,搞懂模式切换就入门了:
- 一般模式(默认打开就是这个模式):进来之后不能直接输入文字,只能做复制、删除、移动光标的操作
yy复制当前行,p粘贴,dd删除当前行u撤销上一步操作gg跳到文件开头,G跳到文件末尾
- 编辑模式:在一般模式下按
i/a/o这些键就会进入编辑模式,左下角会出现INSERT提示,这时候才能正常输入文字,按Esc退回一般模式 - 命令模式:在一般模式下按
:进入,光标会跑到窗口最下面,常用操作::w保存,:q退出,:wq保存退出:q!强制退出不保存修改:set nu显示行号,:set nonu关闭行号
打开文件:
vim /etc/hosts # 使用 vim 编辑 /etc/hosts 文件常用操作:
| 操作 | 说明 |
|---|---|
i | 光标前插入 |
a | 光标后插入 |
o | 下一行插入 |
Esc | 回到一般模式 |
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出不保存 |
dd | 删除当前行 |
yy | 复制当前行 |
p | 粘贴 |
u | 撤销 |
:set nu | 显示行号 |
:%s/old/new/g | 全局替换 |
刚用 VIM 的时候最容易卡在这里:按了半天发现没法输入文字,就是因为忘了从一般模式按i进入编辑模式。
五、压缩解压与路径处理
tar是最常用的打包压缩工具:
tar -zcvf app.tar.gz /data/app # 将 /data/app 打包并 gzip 压缩为 app.tar.gz tar -zxvf app.tar.gz # 解压 app.tar.gz 到当前目录 tar -zxvf app.tar.gz -C /opt # 解压 app.tar.gz 到 /opt 目录参数含义:
-z:gzip 压缩-c:创建包-x:解包-v:显示过程-f:指定文件名-C:解压到指定目录
路径处理:
basename /data/app/conf/app.conf # 提取路径中的文件名,输出 app.conf dirname /data/app/conf/app.conf # 提取路径中的目录部分,输出 /data/app/confbasename取文件名,dirname取目录名,写脚本时很常用。
六、用户与用户组
Linux 是多用户系统。每个用户有自己的账号、家目录和权限。
1. root 用户
root 是系统的超级管理员,拥有最高权限,能改任何文件、装任何软件。但 Ubuntu 默认是锁定 root 账号的,日常操作都用普通用户,需要高权限的时候临时加sudo就行,避免误操作把系统搞崩。
sudo apt update # 以 root 权限执行 apt update如果确实要切到 root 身份,用su - root,这个命令会把 root 的环境变量也一起带过来,比su root更彻底;用完了输exit就切回普通用户。
su - root # 切换到 root 并加载其环境变量 su root # 切换到 root 但不加载环境变量 exit # 退出当前用户,返回上一个用户su -会加载目标用户的环境变量,su只切换身份。
2. 用户管理常用命令
所有用户信息都存在/etc/passwd文件里,常用操作:
useradd 用户名:创建新用户,加-m参数会自动在 /home 下创建这个用户的家目录passwd 用户名:给这个用户设置登录密码
sudo useradd -m devops # 创建用户 devops,并创建家目录 sudo passwd devops # 为 devops 设置密码id 用户名:查看这个用户的 UID、所属组信息
id devops # 查看 devops 的用户 ID、组 ID 等信息 cat /etc/passwd # 查看系统中所有用户信息userdel 用户名:删除用户,加-r参数会把用户的家目录一起删掉
sudo userdel devops # 删除用户 devops,保留家目录 sudo userdel -r devops # 删除用户 devops,同时删除家目录- 如果想让某个普通用户也能用 sudo 执行高权限命令,把他加到
/etc/sudoers配置文件里就行。 - 修改用户名:
sudo usermod -l newname oldname # 将用户名 oldname 改为 newname3. 用户组管理
每个用户创建的时候,系统会自动给他建一个和用户名同名的组。组的作用就是给一批统一权限的用户批量分配权限,不用一个个单独设置。
groupadd 组名:新建组groupdel 组名:删除组usermod -g 组名 用户名:把用户加到指定组里 所有组的信息都存在/etc/group文件里。
sudo groupadd devteam # 创建用户组 devteam sudo groupdel devteam # 删除用户组 devteam sudo groupmod -n newteam devteam # 将组名 devteam 改为 newteam sudo usermod -g devteam devops # 将用户 devops 的主组改为 devteam查看组:
cat /etc/group # 查看系统中所有组信息4. sudo 权限
编辑/etc/sudoers可以给普通用户提权:
sudo visudo # 安全地编辑 /etc/sudoers 文件添加:
devops ALL=(ALL) NOPASSWD:ALL这样devops使用sudo时不需要重复输入密码。生产环境要谨慎配置。
七. 文件权限
1. 文件权限:搞懂 rwx 就不会再懵
用ll查看文件的时候,最前面的 10 个字符就是文件的类型和权限,比如-rwxr-xr--:
-rwxr-xr-- 1 devops devteam 1024 Oct 10 10:00 app.sh- 第一个字符:文件类型,
-是普通文件,d是目录,l是软链接 - 后面 9 个字符分成三组,每组三个:分别是文件所有者的权限、文件所属组的权限、其他所有人的权限
- 三个权限位分别是
r读、w写、x执行,对应的数字是r=4, w=2, x=1,加起来就能用数字代表权限,比如rwxr-xr--就是754
含义:
第 1 位:文件类型,
-普通文件,d目录,l软链接第 2-4 位:属主权限
第 5-7 位:属组权限
第 8-10 位:其他用户权限
rwx对应:
r:读,4w:写,2x:执行,1
这里有个很容易踩的坑:
- 对于文件来说,
w权限是能改文件内容,但不代表能删除这个文件 —— 删除文件需要对文件所在的目录有w权限 - 对于目录来说,
r权限是能列出目录里的内容,w权限是能在这个目录里新建、删除文件,x权限是能进入这个目录
修改权限的三个命令:
chmod 权限文件:修改文件的权限,比如chmod 755 test.sh,或者chmod u+x test.sh给所有者加执行权限,加-R参数递归修改整个目录里所有文件的权限chown 所有者:所属组 文件:修改文件的所有者和所属组,比如chown -R app:app /opt/myapp把整个目录的归属给 app 用户chgrp 组名 文件:单独修改文件的所属组
chmod u+x app.sh # 给属主增加执行权限 chmod g-w app.sh # 去掉属组的写权限 chmod o+r app.sh # 给其他用户增加读权限 chmod 750 app.sh # 设置权限为 rwxr-x--- chmod -R 755 /data/app # 递归设置 /data/app 权限为 rwxr-xr-x修改所有者:
sudo chown devops app.sh # 将 app.sh 的所有者改为 devops sudo chown -R devops:devteam /data/app # 递归修改所有者和所属组修改所属组:
sudo chgrp devteam app.sh # 将 app.sh 的所属组改为 devteam注意:目录的x权限表示可以进入目录,w表示可以在目录内创建、删除、重命名文件。
八. 搜索与查找
1. 查找命令:find
find 搜索范围 -name "文件名":按文件名递归查找,支持通配符,比如find / -name "*.log"找系统里所有日志文件
按文件名查找:
find /data -name "*.log" # 在 /data 下查找所有 .log 文件按用户查找:
find /home -user devops # 查找属于 devops 的文件按时间查找:
find /data -mtime -7 # 查找 7 天内修改过的文件2.grep 与管道
配合管道符|把前一个命令的输出传给后一个命令过滤,grep 关键词是文本过滤的核心工具。
比如ps aux | grep nginx就是从所有进程里找 nginx 相关的进程,加-n参数显示匹配的行号
cat /var/log/app.log | grep "ERROR" # 在日志中过滤包含 ERROR 的行 grep -n "ERROR" /var/log/app.log # 显示包含 ERROR 的行及行号 grep -i "timeout" /var/log/app.log # 忽略大小写搜索 timeout管道|把前一个命令的输出交给后一个命令处理:
ps -ef | grep nginx # 查看 nginx 相关进程九. 系统监控与进程管理
服务跑起来之后经常要排查问题,这几个命令天天用:
1. 磁盘与内存
df -h:查看磁盘各个分区的使用情况,以人类可读的 G/M 单位显示du -h 目录:查看某个目录占了多大磁盘空间
du -sh /var/log # 查看 /var/log 总占用大小 du -ah /data | sort -rh | head -n 20 # 列出 /data 下最大的 20 个文件/目录du=disk usage,作用:查看磁盘占用大小(不是查看文件内容,是看文件 / 目录占了多少硬盘空间)
拆参数(du的选项)
-s:summary 汇总,只显示总计大小,不递归列出里面每一个子文件 / 子目录-h:human-readable 人类可读,自动用 K/M/G 单位展示,而不是原始字节-a:all 全部,不仅统计目录,所有文件都单独列出来(默认 du 只统计目录)
free -m:查看内存使用情况,单位是 MB
2. 进程管理
ps -aux:查看系统所有进程的 CPU、内存占用情况ps -ef:查看进程的父进程 ID,用来梳理进程树kill 进程号:终止进程,加-9是强制杀掉进程killall 进程名:直接按进程名杀所有同名进程top:实时监控系统状态,按 CPU 占用排序默认,按 M 是按内存占用排序,按 q 退出,相当于 Linux 下的任务管理器
ps -aux # 查看系统中所有进程的详细状态 ps -ef # 查看进程及父进程关系 ps -ef | grep java # 过滤出 java 相关进程展示字段说明:
USER:用户PID:进程号%CPU:CPU 占用%MEM:内存占用STAT:状态COMMAND:命令
结束进程:
kill 12345 # 正常结束 PID 为 12345 的进程 kill -9 12345 # 强制杀死 PID 为 12345 的进程 killall nginx # 按名称杀死所有 nginx 进程查看系统负载和实时进程:
top # 实时显示系统进程和资源占用 top -d 1 # 每 1 秒刷新一次 top -p 12345 # 只监控 PID 12345进入 top 界面之后,在 top 交互界面里常用按键:
P:按 CPU 排序M:按内存排序N:按 PID 排序q:退出
3. 网络相关
ifconfig:查看本机 IP 地址
ip addr # 查看所有网络接口的 IP 地址 ifconfig # 查看网络接口信息(需安装 net-tools)ping 地址:测试网络通不通
ping www.baidu.com # 测试与百度的网络连通性 ping -c 4 192.168.1.1 # 只发送 4 个 ping 包netstat -nlp | grep 端口号:查看某个端口被哪个进程占用了,部署服务的时候端口冲突经常要查这个
sudo netstat -nlp | grep 8080 # 查看 8080 端口占用情况 # -n:numeric 数字形式,不解析域名、主机名(加快速度,直接显示 IP,不反向解析) # -l:listening 只看监听状态的端口(服务正在打开等待连接的端口) # -p:program 显示进程 PID + 程序名(需要 root 权限,所以加 sudo) sudo ss -lntp | grep 8080 # 用 ss 命令查看 8080 端口监听 #ss 是 netstat 的替代品(性能更好,推荐优先用 ss) #-l:listening,只展示监听端口 #-n:numeric,数字 IP / 端口,不域名解析 #-t:tcp,只筛选 TCP 协议(UDP 用 `-u`) #-p:program,显示进程 PID 和程序名(同样需要 sudo) #只输出 TCP 监听,过滤掉 UDP,输出更干净十. 定时任务:crontab 自动化执行
想让系统定时自动跑脚本,比如每天凌晨备份日志、清理临时文件,就用 crontab:
crontab -e #编辑当前用户的定时任务 crontab -l #查看当前用户的所有定时任务 定时任务的格式是五个时间位加要执行的命令: crontab -r #删除当前用户的所有定时任务定时任务的格式是五个时间位加要执行的命令:
* * * * * command │ │ │ │ │ │ │ │ │ └── 星期几 0-7 │ │ │ └──── 月 1-12 │ │ └────── 日 1-31 │ └──────── 小时 0-23 └────────── 分钟 0-590 2 * * * /data/scripts/backup.sh # 每天凌晨 2 点执行备份脚本 */10 * * * * /data/scripts/health_check.sh # 每 10 分钟执行一次健康检查 30 8 * * 1-5 /data/scripts/report.sh # 周一到周五 8:30 执行报表脚本注意:crontab 的环境变量和交互式 Shell 可能不同,脚本里建议使用绝对路径,并在脚本中显式设置PATH。
十一、小结
这一篇覆盖了 Linux 入门、目录结构、远程连接、APT、帮助命令、文件目录操作、Vim、压缩解压、用户权限、搜索查找、磁盘网络进程和定时任务。下一篇学习 Shell 脚本编程和文本处理。