首页 / 资讯中心 / 文章详情

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

从零开始学 Linux(一):目录结构、常用命令与 VIM 编辑器上手 ★ FEATURED ARTICLE
前言刚接触 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 目录参数含义-zgzip 压缩-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执行对应的数字是r4, w2, x1加起来就能用数字代表权限比如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 ux test.sh给所有者加执行权限加-R参数递归修改整个目录里所有文件的权限chown 所有者:所属组 文件修改文件的所有者和所属组比如chown -R app:app /opt/myapp把整个目录的归属给 app 用户chgrp 组名 文件单独修改文件的所属组chmod ux app.sh # 给属主增加执行权限 chmod g-w app.sh # 去掉属组的写权限 chmod or 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. 查找命令findfind 搜索范围 -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 个文件/目录dudisk usage作用查看磁盘占用大小不是查看文件内容是看文件 / 目录占了多少硬盘空间拆参数du的选项-ssummary 汇总只显示总计大小不递归列出里面每一个子文件 / 子目录-hhuman-readable 人类可读自动用 K/M/G 单位展示而不是原始字节-aall 全部不仅统计目录所有文件都单独列出来默认 du 只统计目录free -m查看内存使用情况单位是 MB2. 进程管理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进程号%CPUCPU 占用%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-toolsping 地址测试网络通不通ping www.baidu.com # 测试与百度的网络连通性 ping -c 4 192.168.1.1 # 只发送 4 个 ping 包netstat -nlp | grep 端口号查看某个端口被哪个进程占用了部署服务的时候端口冲突经常要查这个sudo netstat -nlp | grep 8080 # 查看 8080 端口占用情况 # -nnumeric 数字形式不解析域名、主机名加快速度直接显示 IP不反向解析 # -llistening 只看监听状态的端口服务正在打开等待连接的端口 # -pprogram 显示进程 PID 程序名需要 root 权限所以加 sudo sudo ss -lntp | grep 8080 # 用 ss 命令查看 8080 端口监听 #ss 是 netstat 的替代品性能更好推荐优先用 ss #-llistening只展示监听端口 #-nnumeric数字 IP / 端口不域名解析 #-ttcp只筛选 TCP 协议UDP 用 -u #-pprogram显示进程 PID 和程序名同样需要 sudo #只输出 TCP 监听过滤掉 UDP输出更干净十. 定时任务crontab 自动化执行想让系统定时自动跑脚本比如每天凌晨备份日志、清理临时文件就用 crontabcrontab -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 脚本编程和文本处理。
阅读完成 · 觉得有帮助?
咨询建站