
简介这份《Ubuntu linux命令大全.pdf》是一本面向Linux初学者与运维入门者的命令技巧手册适合刚接触Ubuntu发行版、需要快速查阅常用命令用法的读者也便于有一定基础的用户在排查问题时随手翻检。资源包内仅1个PDF文件体积约6.28MB正文按安装升级、软件包查询、依赖关系查看、光盘源配置、系统升级与残留配置清理等模块编排共65页系统梳理了apt-get、dpkg、apt-cache等常用工具的具体用法与参数说明。读者可据此掌握Ubuntu下软件安装、包信息检索、依赖分析及系统维护的完整操作链条并了解Ubuntu技术论坛与中文社区等求助渠道形成从命令查询到问题解决的闭环。该资料已有821人学习下载适合当作日常速查工具书与入门阶段的知识梳理材料。1. 从一份 Ubuntu Linux 命令大全到真正能用的命令体系刚装完 Ubuntu 的人最发懵的往往不是系统本身而是打开终端不知道敲什么。想改 DNS 翻半天资料想新建用户怕改坏 sudoersSSH 连不上时连该看哪个日志都不确定。手里那份 Ubuntu linux 命令大全.pdf 从 A 排到 Z真遇到问题时反而搜不出答案——它按命令名字典序组织而排查问题实际是按场景走的。一份能用的命令清单该按使用频率分层顶层是 cd、ls、cp、cat 这类每天敲几十遍的中间是 apt、systemctl、journalctl 这种定位故障用的底层是 awk、sed、find 这种组合起来才发挥威力的。下面按这个层次把 Ubuntu 上高频的 linux 常用命令拆开给出可复制写法、参数含义和出错时该看哪里适合刚上手的人也适合命令知识一直是零散拼图的老手。2. 命令大全的骨架目录模型、帮助系统与五类高频命令族2.1 先弄懂 Linux 目录树命令参数才有落脚点Linux 没有 C 盘 D 盘一切从/开始展开成一棵树。命令的行为几乎都和这棵树的位置有关改主机名的配置在/etc/hostname看启动日志要翻/var/log/用户的个人配置藏在/home/用户名/可执行程序大多在/usr/bin和/usr/local/bin。如果不清楚这套约定命令大全里随便一条cat xxx.conf都会变成猜谜。Ubuntu 在标准结构上又叠了几层自己的东西桌面版的网络配置走/etc/netplan/*.yamlDNS 由systemd-resolved接管所以直接手改/etc/resolv.conf经常重启后失效。软件源地址在/etc/apt/sources.list和/etc/apt/sources.list.d/前者是老写法后者是现在更推荐的按仓库拆分的方式。记不住路径本来就正常man hier可以直接打印目录层级说明ls -ld /某个目录能一次看清权限和属主。养成一个习惯看到任何路径先想想它属于配置、日志、数据还是程序参数该怎么给基本就定了。2.2 五类高频命令族和各自的最小可用集按使用频率和场景常用命令大致能归到下面五类。每一类的出错方向差别很大排查时先分类能省掉一半时间。命令族代表命令典型场景出错先看什么文件与目录ls、cd、cp、mv、rm、mkdir、ln搬运、复制、建目录路径拼写、属主权限查看与编辑cat、less、head、tail、vim、nano看配置、追日志文件编码、是否只看尾部权限与用户chmod、chown、useradd、passwd、sudo新建用户、改属主umask、sudoers 语法包与系统服务apt、dpkg、systemctl、journalctl装软件、服务起不来依赖冲突、unit 名称文本处理与查找grep、sed、awk、find、xargs批量替换、日志过滤正则转义、分隔符先看几组最常敲的写法# 看目录本身而不看内容观察权限和属主 ls -ld /var/log # 追日志-f 跟随-n 50 先给最近 50 行 tail -n 50 -f /var/log/syslog # 递归建目录-p 让中间层不存在也不报错 mkdir -p /opt/app/{conf,data,logs}ls -ld和ls -l差一个字母含义完全不同前者列出目录这一条记录后者列出目录里面所有条目。tail -f是排障第一工具但服务日志现在多半进了 journal/var/log/syslog不一定有内容这点在 Ubuntu 18.04 之后特别容易踩。mkdir -p配大括号展开是建目录骨架的常用写法但大括号展开是 shell 的能力不是mkdir的换到某些 shell 上语法会不同。提示文件名里带空格时任何批量命令都要考虑分隔符问题后面讲 find 和 xargs 时再展开。2.3 man、--help、tldr 的三级查询顺序命令大全 PDF 最大的问题是不能搜。真正高效的做法是记住三个查询入口按速度排序用。# 一级命令自带的短帮助秒出 apt --help | head -20 # 二级完整手册查参数细节、退出码、相关文件 man apt # 三级连命令名都不确定时按关键词反查 apropos package manager whatis apt # 社区速查页比 man 好读但需要先装 sudo apt install tldr tldr tar--help是 GNU 风格程序的标准短帮助覆盖八成日常参数man才是权威它按 NAME、SYNOPSIS、OPTIONS、EXIT STATUS、FILES 分节退出码查这里脚本里$?的含义也查这里。apropos搜的是手册的简短描述找不到命令名时非常有用。tldr给的是最常见的几个用法示例不追求完整适合快速回忆某个命令怎么敲。三者配合的顺序一般是先--help想不起来再看tldr要写脚本或者处理边界情况就翻man。安装 tldr 需要 apt 源正常如果报 404大概率是源地址过期属于下一章的问题。3. 文本处理与批量操作grep、sed、awk、find 的组合写法Ubuntu 上最值钱的一类命令不是ls而是文本处理和批量操作。日志过滤、配置批量改、按条件找文件全靠这一组。linux命令大全这类资料通常把它们列成孤立条目实际上它们几乎总是连着管道一起出现。3.1 grep 的三种常用姿势# 递归搜索并显示行号-n 是行号-r 是递归 grep -rn listen /etc/nginx/ # 忽略大小写只列出匹配到的文件名 grep -ril timeout /etc/ # 扩展正则-E 让 () 和 | 不用转义-v 取反 grep -Ev ^\s*#|^\s*$ /etc/ssh/sshd_config-r递归配-n行号是排障时最常用的组合能直接定位到配置文件第几行。-l只输出文件名适合先知道哪个文件里有。-E打开扩展正则后()、|、都能直接用不带-E就得写反斜杠容易漏。最后那条grep -Ev ^\s*#|^\s*$是去掉配置里注释和空行的经典写法读默认配置时特别顺手。注意grep默认按基本正则解析.、*、[]是元字符而?、、{}、()、|都需要转义这一点和-E区别很大写脚本时尽量显式带上-E。3.2 sed 就地替换之前先备份# 先在屏幕上确认匹配结果不动文件 sed -n /PermitRootLogin/p /etc/ssh/sshd_config # 确认无误后原地改-i 后面跟备份后缀更稳 sudo sed -i.bak s/^#\?PermitRootLogin.*/PermitRootLogin no/ /etc/ssh/sshd_config-n配p是只打印匹配行用来预演。-i.bak会在修改前把原文件存成同名.bak这是原地修改最便宜的一道保险。^#\?的意思就是行首可选的一个#注释掉的和没注释的两种写法都能匹配到。改sshd_config这种文件时一定先预演再落盘因为sed -i不备份就是不可逆的写坏了会直接导致 ubuntu ssh 无法连接届时只能在本地终端里救。3.3 awk 按列处理与统计# 打印第 1 和第 5 列默认按空白切分 df -h | awk {print $1, $5} # 按条件过滤NR1 跳过表头$50 把百分比转成数字 df -h | awk NR1 $50 80 {print $6, $5} # 指定分隔符统计访问量前 5 awk -F {cnt[$1]} END {for (k in cnt) print cnt[k], k} access.log | sort -rn | head -5awk的默认字段分隔符是连续空白-F可以指定别的分隔符比如-F:处理/etc/passwd。NR是行号NR1用来跳过表头$50把百分比字符串强制转成数字否则80%和数字比大小会得到奇怪的结果。END块在所有行处理完后执行一次是统计类任务的标准写法。3.4 find 配 xargs 做批量操作空格和换行是最大坑# 找 7 天前的 .log 并删除-print0 和 -0 配对处理空格文件名 find /var/log -name *.log -mtime 7 -print0 | xargs -0 rm -f # 查找并一次性把多个文件传给同一条命令 find . -name *.py -print0 | xargs -0 wc -l # 更稳的写法用 find 自带的 -exec不经过 xargs find . -name *.tmp -exec rm -f {} \;-print0让 find 用\0分隔结果xargs -0按\0解析这样才能正确处理带空格、带换行的文件名。不用这一对而直接xargs遇到名字里有空格的日志文件就会拆成两个参数删错东西。-exec ... {} \;是每条结果调一次命令写成{} 则是批量传参效率更高。xargs不带命令时默认用echo很多人第一次看到find . | xargs输出一堆东西就是这个原因它并不会自动去删。3.5 解压乱码多半是编码问题不是压缩包坏了# zip 里带 GBK 文件名用 -O 指定编码 unzip -O cp936 package.zip -d ./out # 7z 更省事会自动猜编码 sudo apt install p7zip-full 7z x package.zip -o./out # tar.gz 已经解出来但名字乱用 convmv 批量改文件名 sudo apt install convmv convmv -f gbk -t utf-8 -r --notest ./out从 Windows 打包过来的 zip文件名经常是 GBK 编码Linux 默认按 UTF-8 解读就变成方块和乱码这就是 linux 解压文件乱码最常见的来源。unzip -O cp936是最直接的修法注意这个参数在部分发行版的 unzip 上没编译进去报invalid option就换成p7zip。已经解出来乱码的目录不要删convmv原地转换文件名即可去掉--notest就是预演模式正式执行前先跑一遍看看。4. Ubuntu 系统层命令apt、systemd、网络、用户与三类高频故障4.1 apt 和 dpkg 的正确使用顺序# 先同步索引再升级顺序反了容易装到旧依赖 sudo apt update sudo apt upgrade -y # 安装指定包-y 跳过确认 sudo apt install -y nginx # 查已装版本和文件来源 dpkg -l | grep nginx dpkg -L nginx | head # 依赖坏了先修而不是硬装 sudo apt --fix-broken installapt update更新的是软件包索引不是软件本身很多人把它和upgrade搞混。dpkg -l列出已安装包前面两个字母才是状态位ii表示正常安装rc表示已卸载但残留配置。dpkg -L列出包装了哪些文件想知道某个命令属于哪个包就用dpkg -S /usr/bin/xxx。安装报依赖冲突时先apt --fix-broken install还不行再看是不是混了第三方源或者手工dpkg -i装过不匹配的 deb。ubuntu 系统重装之后如果保留了/etc和/home旧源配置经常和新版本对不上第一件事就是检查/etc/apt/sources.list.d/里有没有过期条目。4.2 systemctl 与 journalctl 定位服务起不来# 看服务当前状态重点看 Active 和最后几行日志 systemctl status nginx # 确认是否开机自启enabled 和 active 是两回事 systemctl is-enabled nginx systemctl is-active nginx # 拉这个 unit 的日志-p err 只看 err 及以上 journalctl -u nginx -n 50 --no-pager journalctl -u nginx --since 10 min ago -p err # 改了 unit 文件之后必须重载 sudo systemctl daemon-reload sudo systemctl restart nginxsystemctl status里的 Active 有几种常见状态active (running)是正常failed要去看日志inactive (dead)说明没在跑但也没报错可能是被手动停了也可能是依赖的 unit 没起来。is-enabled和is-active一个管开机自启一个管当前是否运行排重启后服务没了这类问题必须分开看。改过/etc/systemd/system/下的 unit 文件之后不daemon-reloadrestart用的还是旧配置这是一类很隐蔽的改了没用。journalctl -p的级别从emerg排到debug写错级别名会直接报错常用的是err、warning、info。4.3 网络、DNS 与磁盘几个一眼定位的命令# 简洁看所有网卡地址 ip -br a # 看路由表默认网关在 default 那一行 ip route # 看监听端口和对应进程-t TCP-l 监听-n 不解析-p 带进程 sudo ss -tlnp # 看 DNS 由谁在管 resolvectl status # 磁盘用量-T 带文件系统类型 df -hT # 目录级占用排序后取前几 du -sh /var/* 2/dev/null | sort -h | tail -5 # 块设备和文件系统信息 lsblk -fip已经全面取代ifconfig和routeUbuntu 最小安装里可能根本没装net-tools敲ifconfig报 command not found 就是这个原因直接换ip就行。ss取代netstat-tlnp组合是查端口被谁占了的标准姿势加sudo才能看到别的用户的进程名。Linux 中配置 DNS 出问题八成是没分清谁在管事。Ubuntu 桌面版默认由systemd-resolved接管/etc/resolv.conf直接编辑这个文件重启后会恢复。正确做法是在/etc/systemd/resolved.conf里改DNS然后sudo systemctl restart systemd-resolved改完用resolvectl status验证。服务器版如果没装 resolved才轮到直接改/etc/resolv.conf。4.4 SSH 连不上、环境变量不生效、新建用户的排查顺序# SSH 方向先确认服务在不在、端口在不在听 systemctl status ssh sudo ss -tlnp | grep :22 # 再看防火墙 sudo ufw status # 最后看日志连接被拒的原因都在这里 journalctl -u ssh -n 30 --no-pagerssh这个 unit 名字在 Ubuntu 上就是ssh不是sshd写成systemctl status sshd会报找不到。服务在跑、端口在听、防火墙放行三样都过还连不上就看journalctl -u ssh常见原因是密钥权限不对~/.ssh必须 700、authorized_keys必须 600、AllowUsers白名单没放进去或者sshd_config有语法错误导致服务用旧配置跑着。ubuntu ssh 无法连接这类问题按这个顺序走基本都能定位到具体一层。# 环境变量先看当前会话里到底有没有 echo $PATH cat /etc/environment # 看有没有 profile.d 里的脚本覆盖了 PATH grep -rn PATH /etc/profile.d/ # 改完要重新加载且 source 只影响当前 shell source ~/.bashrcubuntu 环境变量配置错误最常见的有两种一是把PATH写成相对路径或者用了~export PATH~/bin:$PATH在交互式 shell 里会被展开成绝对路径没问题但写在/etc/environment里不会展开~就是字面量一定要写/home/xxx/bin二是/etc/profile、~/.bashrc、~/.profile都改了一遍结果顺序互相覆盖最后生效的不是想改的那份。# 新建用户adduser 是 Ubuntu 的交互式封装比 useradd 友好 sudo adduser alice # 加进 sudo 组才有管理员权限 sudo usermod -aG sudo alice # 验证组和 uid id aliceuseradd是底层命令在新版 Ubuntu 上如果不加-m不会建家目录不加-s默认 shell 可能是sh新手直接用adduser省事得多。usermod -aG的-a是追加漏掉它会把用户从所有其他附加组里踢出去只剩新加的那个组这个坑踩过的都知道。改完组权限后用户需要重新登录才生效id能立刻确认改动是否落地。5. 把命令大全变成自己的手册alias、函数与历史检索5.1 用 alias 和 shell 函数固化高频组合# ~/.bash_aliasesUbuntu 的 .bashrc 默认会加载这个文件 alias llls -alF --colorauto alias portssudo ss -tlnp alias grepgrep --colorauto alias reloadsource ~/.bashrc # 带参数的组合用函数alias 传不了参数 mkcd() { mkdir -p $1 cd $1; } logerr() { journalctl -u $1 -p err --since 1 hour ago --no-pager; }~/.bash_aliases是 Ubuntu 特有的约定默认~/.bashrc里有一段判断这个文件是否存在并加载它所以别名写在里面比直接塞.bashrc干净。改完source ~/.bashrc或者新开一个终端才生效。alias只能做纯文本替换参数接不进来需要传参的场景就要写成函数。mkcd建目录并进入是使用频率最高的一条logerr把前面反复敲的 journalctl 参数固定下来排服务故障时能省一半输入。5.2 用 history 和 CtrlR 建立检索回路# 查看历史带时间戳方便回忆 HISTTIMEFORMAT%F %T history | tail -30 # 按关键词搜索历史然后按编号用 !编号 重新执行 history | grep journalctl # 在 ~/.bashrc 里打开历史去重和更大的历史条数 export HISTSIZE10000 export HISTFILESIZE20000 export HISTCONTROLignorebothCtrlR是 shell 里最被低估的功能输入片段就能反向查找以前敲过的长命令比翻任何 PDF 都快。HISTCONTROLignoreboth同时做到两件事不记录以空格开头的命令想临时执行又不想留痕时在命令前敲个空格就行以及不重复记录连续相同的命令。HISTTIMEFORMAT一旦设置历史记录会带上时间戳在多台机器上排查同一个问题的时候很有用。5.3 一套能落地的验证动作动作命令判断标准别名是否生效type ll输出里带 alias 定义函数是否可用declare -f mkcd打印出函数体历史条数是否改到echo $HISTSIZE等于设定值sshd 配置是否合法sudo sshd -t无输出即通过apt 源是否可用sudo apt update没有 404 与 GPG 报错最后一条实用技巧把自己最常查的十几条命令做成一个纯文本文件放在家目录用grep当搜索引擎。# ~/cheat.md一行场景一行命令 grep -i ssh ~/cheat.md这比下载来的任何一份手册都管用因为它只收录自己真正踩过的坑条目少所以检索快改起来也不用等下一版。真正决定命令行熟练度的从来不是记住了多少条命令而是把常用的那几十条压缩到几次按键之内。本文还有配套的精品资源点击获取