从零开始学 Linux(一):目录结构、常用命令与 VIM 编辑器上手

前言

刚接触 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 作为包管理器,装软件不用自己去官网下安装包,几条命令就搞定:

bash 复制代码
# 更新软件源列表
sudo apt update
# 安装软件,-y表示不需要确认直接装
sudo apt install 软件名 -y
# 卸载软件
sudo apt remove 软件名 -y

刚装好的 Ubuntu 如果没有ifconfig命令,就是因为没装net-tools工具包,跑一句sudo apt install net-tools -y就好。

bash 复制代码
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. 帮助命令

bash 复制代码
man ls          # 查看 ls 命令的手册页
ls --help       # 查看 ls 命令的简要帮助
help cd         # 查看 Shell 内建命令 cd 的帮助

man 手册页分章节,常见的有:

  • 第 1 章:用户命令

  • 第 2 章:系统调用

  • 第 3 章:库函数

  • 第 5 章:文件格式

  • 第 8 章:系统管理命令

例如:

bash 复制代码
man 1 write     # 查看第 1 章中的 write 用户命令
man 2 write     # 查看第 2 章中的 write 系统调用

help 用于 Shell 内建命令:

bash 复制代码
help cd         # 查看内建命令 cd 的帮助信息

1. 基础路径查看

  • pwd:显示你当前在哪个目录,打印绝对路径
bash 复制代码
pwd                     # 显示当前工作目录的绝对路径
  • cd 路径:切换目录,cd ~或者直接cd是直接回到自己的家目录,cd ..回到上一级,cd -回到上一次待过的目录
bash 复制代码
cd /etc                 # 切换到 /etc 目录
cd ~                    # 切换到当前用户的家目录
cd -                    # 切换回上一次所在的目录
cd ..                   # 切换到上一级目录
cd /var/log             # 切换到 /var/log 目录

2. 查看目录内容

ls是 list 的缩写,最常用的两个参数:

  • ls -a:显示所有文件,包括以.开头的隐藏文件
  • ls -l:长格式显示,能看到文件的权限、所有者、大小、修改时间,Ubuntu 里ll是ls -al的别名,直接敲ll更方便
bash 复制代码
ls                      # 列出当前目录下的文件和目录
ls -l                   # 以长格式列出详细信息
ls -a                   # 列出所有文件,包括隐藏文件
ls -lh                  # 以人类可读格式显示文件大小
ls -R                   # 递归列出子目录内容

3. 文件与目录的增删复制

  • mkdir 目录名:创建目录,加-p参数可以一次性创建多级不存在的目录,比如mkdir -p a/b/c
  • touch 文件名:创建一个空文件
bash 复制代码
mkdir /data/app                         # 创建 /data/app 目录
mkdir -p /data/app/logs/2026            # 递归创建多层目录
touch /data/app/readme.md               # 创建空文件 readme.md
  • cp 源文件 目标位置:复制文件,复制整个目录要加-r递归
  • rm 文件:删除文件,删除目录加-r,加-f是强制删除不弹确认

提醒:rm -rf是高危命令,删之前一定要确认路径,别手滑删到系统目录

  • mv 源文件 目标位置:移动文件,同目录下用 mv 就是重命名
bash 复制代码
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是实时跟踪文件新增内容,看线上日志的时候特别好用
bash 复制代码
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                # 实时追踪文件新增内容
  • 输出重定向:命令 > 文件是把输出覆盖写到文件里,命令 >> 文件是追加到文件末尾,不会覆盖原来的内容
bash 复制代码
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 链接名就行,别在软链接后面加/,不然会误删原目录里的内容。

bash 复制代码
ln -s /opt/app/current /opt/app/releases/v1   # 创建软链接 v1 指向 current

6. 历史命令

bash 复制代码
history                                 # 查看当前用户执行过的历史命令

四、VIM 编辑器:终端里的必备编辑器

在服务器上改配置文件,没有图形化编辑器,VIM 是绕不开的工具。它有三种工作模式,搞懂模式切换就入门了:

  1. 一般模式(默认打开就是这个模式) :进来之后不能直接输入文字,只能做复制、删除、移动光标的操作
    • yy复制当前行,p粘贴,dd删除当前行
    • u撤销上一步操作
    • gg跳到文件开头,G跳到文件末尾
  2. 编辑模式 :在一般模式下按i/a/o这些键就会进入编辑模式,左下角会出现INSERT提示,这时候才能正常输入文字,按Esc退回一般模式
  3. 命令模式 :在一般模式下按:进入,光标会跑到窗口最下面,常用操作:
    • :w保存,:q退出,:wq保存退出
    • :q!强制退出不保存修改
    • :set nu显示行号,:set nonu关闭行号

打开文件:

bash 复制代码
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 是最常用的打包压缩工具:

bash 复制代码
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:解压到指定目录

路径处理:

bash 复制代码
basename /data/app/conf/app.conf        # 提取路径中的文件名,输出 app.conf
dirname /data/app/conf/app.conf         # 提取路径中的目录部分,输出 /data/app/conf

basename 取文件名,dirname 取目录名,写脚本时很常用。

六、用户与用户组

Linux 是多用户系统。每个用户有自己的账号、家目录和权限。

1. root 用户

root 是系统的超级管理员,拥有最高权限,能改任何文件、装任何软件。但 Ubuntu 默认是锁定 root 账号的,日常操作都用普通用户,需要高权限的时候临时加sudo就行,避免误操作把系统搞崩。

bash 复制代码
sudo apt update                         # 以 root 权限执行 apt update

如果确实要切到 root 身份,用su - root,这个命令会把 root 的环境变量也一起带过来,比su root更彻底;用完了输exit就切回普通用户。

bash 复制代码
su - root                               # 切换到 root 并加载其环境变量
su root                                 # 切换到 root 但不加载环境变量
exit                                    # 退出当前用户,返回上一个用户

su - 会加载目标用户的环境变量,su 只切换身份。

2. 用户管理常用命令

所有用户信息都存在/etc/passwd文件里,常用操作:

  • useradd 用户名:创建新用户,加-m参数会自动在 /home 下创建这个用户的家目录
  • passwd 用户名:给这个用户设置登录密码
bash 复制代码
sudo useradd -m devops                  # 创建用户 devops,并创建家目录
sudo passwd devops                      # 为 devops 设置密码
  • id 用户名:查看这个用户的 UID、所属组信息
bash 复制代码
id devops                               # 查看 devops 的用户 ID、组 ID 等信息
cat /etc/passwd                         # 查看系统中所有用户信息
  • userdel 用户名:删除用户,加-r参数会把用户的家目录一起删掉
bash 复制代码
sudo userdel devops                     # 删除用户 devops,保留家目录
sudo userdel -r devops                  # 删除用户 devops,同时删除家目录
  • 如果想让某个普通用户也能用 sudo 执行高权限命令,把他加到/etc/sudoers配置文件里就行。
  • 修改用户名:
bash 复制代码
sudo usermod -l newname oldname         # 将用户名 oldname 改为 newname

3. 用户组管理

每个用户创建的时候,系统会自动给他建一个和用户名同名的组。组的作用就是给一批统一权限的用户批量分配权限,不用一个个单独设置。

  • groupadd 组名:新建组
  • groupdel 组名:删除组
  • usermod -g 组名 用户名:把用户加到指定组里 所有组的信息都存在/etc/group文件里。
bash 复制代码
sudo groupadd devteam                   # 创建用户组 devteam
sudo groupdel devteam                   # 删除用户组 devteam
sudo groupmod -n newteam devteam        # 将组名 devteam 改为 newteam
sudo usermod -g devteam devops          # 将用户 devops 的主组改为 devteam

查看组:

bash 复制代码
cat /etc/group                          # 查看系统中所有组信息

4. sudo 权限

编辑 /etc/sudoers 可以给普通用户提权:

bash 复制代码
sudo visudo                             # 安全地编辑 /etc/sudoers 文件

添加:

bash 复制代码
devops ALL=(ALL) NOPASSWD:ALL

这样 devops 使用 sudo 时不需要重复输入密码。生产环境要谨慎配置。

七. 文件权限

1. 文件权限:搞懂 rwx 就不会再懵

用ll查看文件的时候,最前面的 10 个字符就是文件的类型和权限,比如-rwxr-xr--:

bash 复制代码
-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:读,4

  • w:写,2

  • x:执行,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 组名 文件:单独修改文件的所属组
bash 复制代码
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

修改所有者:

bash 复制代码
sudo chown devops app.sh                # 将 app.sh 的所有者改为 devops
sudo chown -R devops:devteam /data/app  # 递归修改所有者和所属组

修改所属组:

bash 复制代码
sudo chgrp devteam app.sh               # 将 app.sh 的所属组改为 devteam

注意:目录的 x 权限表示可以进入目录,w 表示可以在目录内创建、删除、重命名文件。

八. 搜索与查找

1. 查找命令:find

  • find 搜索范围 -name "文件名":按文件名递归查找,支持通配符,比如find / -name "*.log"找系统里所有日志文件

按文件名查找:

bash 复制代码
find /data -name "*.log"                # 在 /data 下查找所有 .log 文件

按用户查找:

bash 复制代码
find /home -user devops                 # 查找属于 devops 的文件

按时间查找:

bash 复制代码
find /data -mtime -7                    # 查找 7 天内修改过的文件

2.grep 与管道

配合管道符|把前一个命令的输出传给后一个命令过滤,grep 关键词是文本过滤的核心工具。

比如ps aux | grep nginx就是从所有进程里找 nginx 相关的进程,加-n参数显示匹配的行号

bash 复制代码
cat /var/log/app.log | grep "ERROR"     # 在日志中过滤包含 ERROR 的行
grep -n "ERROR" /var/log/app.log        # 显示包含 ERROR 的行及行号
grep -i "timeout" /var/log/app.log      # 忽略大小写搜索 timeout

管道 | 把前一个命令的输出交给后一个命令处理:

bash 复制代码
ps -ef | grep nginx                     # 查看 nginx 相关进程

九. 系统监控与进程管理

服务跑起来之后经常要排查问题,这几个命令天天用:

1. 磁盘与内存

  • df -h:查看磁盘各个分区的使用情况,以人类可读的 G/M 单位显示
  • du -h 目录:查看某个目录占了多大磁盘空间
bash 复制代码
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 下的任务管理器
bash 复制代码
ps -aux                                 # 查看系统中所有进程的详细状态
ps -ef                                  # 查看进程及父进程关系
ps -ef | grep java                      # 过滤出 java 相关进程

展示字段说明:

  • USER:用户

  • PID:进程号

  • %CPU:CPU 占用

  • %MEM:内存占用

  • STAT:状态

  • COMMAND:命令

结束进程:

bash 复制代码
kill 12345                              # 正常结束 PID 为 12345 的进程
kill -9 12345                           # 强制杀死 PID 为 12345 的进程
killall nginx                           # 按名称杀死所有 nginx 进程

查看系统负载和实时进程:

bash 复制代码
top                                     # 实时显示系统进程和资源占用
top -d 1                                # 每 1 秒刷新一次
top -p 12345                            # 只监控 PID 12345

进入 top 界面之后,在 top 交互界面里常用按键:

  • P:按 CPU 排序

  • M:按内存排序

  • N:按 PID 排序

  • q:退出

3. 网络相关

  • ifconfig:查看本机 IP 地址
bash 复制代码
ip addr                                 # 查看所有网络接口的 IP 地址
ifconfig                                # 查看网络接口信息(需安装 net-tools)
  • ping 地址:测试网络通不通
bash 复制代码
ping www.baidu.com                      # 测试与百度的网络连通性
ping -c 4 192.168.1.1                   # 只发送 4 个 ping 包
  • netstat -nlp | grep 端口号:查看某个端口被哪个进程占用了,部署服务的时候端口冲突经常要查这个
bash 复制代码
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:

bash 复制代码
crontab -e     #编辑当前用户的定时任务
crontab -l     #查看当前用户的所有定时任务 定时任务的格式是五个时间位加要执行的命令:
crontab -r     #删除当前用户的所有定时任务

定时任务的格式是五个时间位加要执行的命令:

XML 复制代码
* * * * * command
│ │ │ │ │
│ │ │ │ └── 星期几 0-7
│ │ │ └──── 月 1-12
│ │ └────── 日 1-31
│ └──────── 小时 0-23
└────────── 分钟 0-59
bash 复制代码
0 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 脚本编程和文本处理。

相关推荐
分布式存储与RustFS2 小时前
RustFS 上生产第一步:从单机到 4 节点多盘集群(MNMD)部署实操
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
for_ever_love__2 小时前
LangGraph Checkpointer:持久化、断点续跑与多轮记忆
服务器·数据库·学习·持久化·langgraph·checkpointer·断点续跑
Data analyse4562 小时前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
Lhan.zzZ2 小时前
Linux + Qt/QML:解决 QtQuick.VirtualKeyboard.Plugins 模块加载失败与环境变量配置
linux·数据库·qt
小毛驴8502 小时前
mvn help:effective-settings 与 mvn help:effective-pom
java·linux·前端
我先去打把游戏先2 小时前
Git-Rebase使用指南-从原理到实战
服务器·git·嵌入式硬件·物联网·ubuntu
半杯咖啡半行码2 小时前
Linux字符设备驱动实战:ioctl接口与GPIO操作指南
linux·开发语言
Zenova EdgeOS2 小时前
Linux Nginx 反向代理实战:工业边缘 API 接入与安全加固
linux·nginx·安全·边缘计算·工业网关
染指11102 小时前
145.Agent-LangGraph基础概念和安装和简单代码示例
java·服务器·数据库·langchain·agents