简介:一份精心整理的Linux常用基础操作命令大全PDF,面向刚接触Linux的新手、运维入门者及开发者,帮助读者快速掌握高频核心命令。内容系统覆盖目录与文件处理、文件内容查看、链接文件、权限管理等模块,对ls、mkdir、cd、cp、mv、rm、cat、less、chmod、chown等常用命令均给出格式、功能、常用选项及示例说明,尤其对软链接与硬链接、权限数字表示法等重点做了区分,查阅起来一目了然。这份PDF共1个文件,大小494KB,体积轻量、结构清晰,适合放在手边随时参考或打印学习。目前已有558人学习,作为Linux命令行入门与日常速查资料,实用价值很突出。
1. 用最短时间搭起 Linux 常用基础操作命令的骨架
如果已经做了三年开发,第一次拿到只有 SSH 的云服务器,大概率会在 ls 之后愣住:没有图形界面,没有 IDE,连个编辑器都要现想是 vi 还是 nano。Linux 常用基础操作命令大全这个标题看着像 PDF 文件名,实际指的是所有服务器上工作的人都绕不开的技能底座。我写这篇不是要收集几百个命令,而是把日常高频的五六十个拆成五块:文件目录、文本处理、进程系统、权限用户、网络排查,再补几个能立刻提速的 shell 技巧。刚上手的人可以顺着敲一遍,有经验的直接翻参数表和排错点。能用鼠标做完的事,在服务器上就是一条命令加一个参数的事;这篇要把一条命令怎么用对、用细讲透。
2. Linux 文件与目录操作命令:定位、复制、删除、打包的边界
这一章处理的是每天重复次数最多的操作,也是最容易在细节上翻车的部分。很多新手会把大量时间花在翻目录找文件上,或者在执行删除时把路径写错,原因不是命令不熟,而是没搞清每个参数背后到底改了什么。
2.1 先确定自己在哪:pwd、ls、cd 的高频姿势
pwd ls -lah cd -pwd 的用处不是好看,是在多层目录跳转后确认绝对路径,避免在错误目录执行删除操作。ls -l 的第一列是文件类型和权限位,比如drwxr-xr-x表示这是一个目录,属主可读可写可执行,属组和其他人只有读和执行权限;后面依次是硬链接数、属主、属组、文件大小、最后修改时间和文件名。加-h是 human-readable,把文件大小显示为 K、M、G;加-a则列出所有以.开头的隐藏文件,排查配置文件问题时几乎必用。
cd -是往返于上次目录的最快路径,比连续敲多级cd ..更不容易迷路;cd不带任何参数时会回到当前用户的家目录。用 vim 在两个目录之间来回改配置文件时,这三个命令配合起来效率最高,比反复复制粘贴完整路径省事得多。
2.2 复制、移动、删除:别让 rm 成为最后一个命令
cp -a /data/app /data/app_backup mv /data/app /data/app_old rm -rf /data/cache/*cp 的-a等价于-dpR,复制目录的同时保留权限、时间戳和软链接属性。备份线上配置时我一般不用cp -r,因为它不保证保留属主和修改时间,恢复回去时可能引入隐蔽的权限问题。mv 在同一文件系统内只是改一个目录项,速度极快;但跨文件系统移动时,本质是复制加删除,大目录会明显卡住,需要提前评估耗时。
rm -rf是最被人熟知也最容易出事故的命令。我的习惯是:写进脚本的删除路径必须用绝对路径;执行删除前先 ls 看一眼;路径由变量拼接时保留开头斜杠;批量删除前先加-i试跑一次。想删目录里所有文件但保留目录结构时,用find /data/cache -type f -delete比rm -rf /data/cache/*更可控,后者不会处理隐藏文件,容易留下半清理状态。
2.3 找文件不靠翻目录:find 的三组实用参数
find /opt -name "*.conf" -mtime -7 -size +1k find . -type f -name "*.log" -exec grep -l "ERROR" {} \; find / -xdev -type f -size +500M 2>/dev/nullfind 不是只能按名字找,它最常见的用法是组合条件过滤:-name匹配文件名,-mtime -7取最近七天修改过的文件,-size +1k过滤大小超过 1KB 的文件,多个条件之间是 AND 关系。第二个示例中的-exec会把每个命中文件替换进{},结尾必须以\;结束,这条命令等价于“在所有 .log 文件里找包含 ERROR 的文件名”,是排查日志时的高频组合。
第三个示例里的-xdev是防止 find 进入其他挂载点,比如/proc、/sys这类特殊文件系统,不加它时遍历会变慢甚至卡住。2>/dev/null把权限不足的报错丢进黑洞,让输出里只留下真正有价值的结果。
2.4 压缩与解压:tar 保留权限,zip 处理中文乱码
tar tzf app.tar.gz tar xzvf app.tar.gz -C /opt/release tar czvpf app.tar.gz /data/apptar 是服务器上传输目录的默认协议,参数组合有固定套路:c 创建包,x 解出包,t 列出包内容,v 显示过程,f 指定文件名,z 走 gzip 压缩,p 保留权限属性。执行解压前,如果不知道包里的目录结构,先用tar tzf看一眼,再带上-C指定目标目录,能避免把一堆文件散落在错误位置。
| 参数 | 作用 | 典型用法 |
|---|---|---|
| -z | 使用 gzip 压缩 | tar czvf app.tar.gz /data/app |
| -j | 使用 bzip2 压缩,体积更小 | tar cjvf app.tar.bz2 /data/app |
| -t | 只列出包内文件列表,不解压 | tar tzf app.tar.gz |
| -x | 执行解压 | tar xzvf app.tar.gz |
| -C | 解压到指定目录 | tar xzvf app.tar.gz -C /opt |
| -p | 保留文件权限与属主信息 | tar czvpf app.tar.gz /data/app |
zip 在 Linux 下解压出现中文乱码,几乎都是编码问题。Windows 上打的 zip 包通常用 GBK(GB2312)编码记录文件名,unzip 默认按 UTF-8 解释自然乱码。常见做法是指定编码重新解压:
unzip -O GBK archive.zip如果当前发行版的 unzip 不带-O选项,可以换用 7z 解压,或者安装 p7zip 相关工具。往 Linux 上打包发给 Windows 用户时,也要注意zip -r必须加递归参数,否则只会打进一个空目录。
3. Linux 文本处理操作命令:grep、sed、awk 的组合套路
服务器上的程序不会弹出可视化界面,所有问题最后都会沉淀到日志文件里。文本处理命令的定位不是“记事本替代品”,而是从日志、配置、接口返回里快速定位差异和异常的手段。这一章围绕一个真实工作流展开:查看、过滤、替换、取列。
3.1 less、head、tail:查看文件的正确姿势
head -n 30 app.log tail -n 50 app.log tail -F app.loghead 取开头、tail 取末尾,-n指定行数,这是读取日志两端最直接的办法。需要注意tail -F(大写)和tail -f(小写)的区别:小写 f 跟踪的是文件描述符,日志发生轮转后跟踪会丢失;大写 F 会不断重新打开文件,nginx 按天切割 access.log 时,tail -F依然能持续输出新内容。
查看中段内容时用 less。它看起来只是一个分页器,但搜索和跳转能力非常关键:按G跳到文件末尾,按g回开头;输入/keywords向下搜索,按n继续匹配下一个;输入?keywords向上搜索。less 不会一次性把整个文件读进内存,几百 MB 的日志也能流畅翻页,这是 cat 做不到的。
3.2 grep 过滤:从日志里找业务问题的基本盘
grep -n "timeout" app.log grep -v "^#" sshd_config grep -E "ERROR|FATAL" app.log grep -ri "password" config/grep 的核心价值是过滤,-n显示行号,-v反向匹配(排除含某关键字的行),-E启用扩展正则,-r递归搜索目录,-i忽略大小写。排查问题时最常用的是组合:先拉出今天所有 ERROR 行,再用grep -v排除已知的 timeout 噪音,剩下的才是真正需要看的异常。
grep -c只输出匹配的行数,用于统计某类错误出现频率;grep -l只输出包含匹配的文件名,适合在多个日志文件里定位问题源。处理纯字符串时,如果关键字里有正则元字符,比如analysis_v1.2.3这种带点的字符串,建议加-F按固定字符串匹配,避免把点当通配符用。
3.3 sed 替换与原地修改:改配置文件前先备份
sed -n '20,30p' /etc/nginx/nginx.conf sed -i.bak 's/^#Port 22/Port 22/' /etc/ssh/sshd_config sed '/^#/d' app.confsed 最常用的三个场景是范围打印、替换、删除。-n '20,30p'只打印第 20 到 30 行,适合在不打开大文件的情况下快速看一段配置;s/old/new/是替换指令,行首的^#Port 22表示只匹配被注释掉的 Port 配置;/^#/d表示删除所有以#开头的注释行。
真正危险的是-i参数,它是 in-place 直接改文件。我的习惯是永远写成-i.bak,这样 sed 会先生成原文件的 .bak 备份再修改。改 sshd_config 这类系统级配置前,先不加-i试跑一遍,确认输出符合预期再真正执行,能避免正则写错导致整个配置被破坏。
3.4 awk 取列:把“第 3 列大于 100 的行”变成一行
awk '{print $1, $NF}' access.log | sort | uniq -c | sort -rn | head -10 awk -F',' '$3=="active" {print $2}' users.csvawk 的默认逻辑是按空白切分每一行,$1是第一个字段,$NF是最后一列,NF表示当前行的字段总数,$0是整行。第一个示例是统计访问量最高的 IP 的经典写法:awk 取出 IP 和最后一列状态码,sort 排序,uniq -c 去重并计数,再 sort -rn 按计数倒序,head 取前十条。这个组合在面试题和日常日志分析里出现频率极高。
| awk 内置量 | 含义 | 示例 |
|---|---|---|
| $0 | 当前整行内容 | awk '{print $0}' |
| $1、$2… | 按分隔符切分后的第 N 列 | awk '{print $1}' |
| NF | 当前行的字段总数 | awk '{print NF}' |
| NR | 当前行号(整个输入中的序号) | awk 'NR<=10' |
| -F | 指定字段分隔符 | awk -F',' '{print $2}' |
第二个示例展示自定义分隔符的用法,读取 CSV 时用-F','把内容按逗号切分,再用条件$3=="active"过滤,只输出满足条件的第二列。awk 在中间章里属于“会一行就能省半小时”的类型,但没必要背语法,记住字段变量加 print 的套路,大多数取列需求都能覆盖。
4. Linux 进程与系统操作命令:进程、负载、磁盘与后台任务
服务器出问题时,第一反应通常是看进程还在不在、负载高不高、磁盘满没满。这一章的命令解决的是“现在系统到底什么状态”,以及“如何把一个任务稳稳地放在后台跑”。
4.1 ps 与 top:看进程和系统负载的第一手信息
ps aux | grep -v grep | grep nginx pgrep -fa nginx top -bn1 | head -15 free -hps aux 是最常用的进程查看方式,a 显示所有用户进程,u 显示属主和 CPU、内存占用,x 显示没有终端控制的进程。各列含义按顺序是:用户、PID、CPU 占用、内存占用、虚拟内存、常驻内存、终端、状态、启动时间、CPU 总耗时、命令。里面最容易忽略的是 STAT 列,R是运行中,S是可中断睡眠,Z是僵尸进程,大量 Z 状态说明父进程没有正常回收子进程。
直接ps aux | grep nginx会把 grep 自身也匹配出来,所以前面加grep -v grep,或者干脆用pgrep -fa nginx,它只输出 PID 和完整命令行,不会匹配自身。top 在交互界面按M按内存排序,按P按 CPU 排序,按q退出;top -bn1适合在脚本里单次采样,输出一次就退出,不进入交互模式。free 的-h让内存数值变成可读的 G、M,看 available 列而不是 free 列,available 才是真实可分配内存。
4.2 kill 与 pkill:杀进程讲顺序,不只有 -9
kill -TERM 12345 kill -9 12345 pkill -f "java.*demo.jar"kill 默认发送 TERM 信号,相当于礼貌地请进程自己退出,进程可以捕获后做清理工作;kill -9发送 KILL 信号,由内核直接强杀,进程没有机会保存状态或释放资源。正确顺序是先 TERM,等几秒看进程是否退出,确认无效再上 -9。
pkill 按进程名或命令行模式匹配,-f表示匹配完整命令行而不是只匹配进程名。注意pkill -f的匹配范围很宽,在服务器上执行pkill -f python会杀掉所有命令行里带 python 的进程,包括同事的任务。执行前先用pgrep -fa python看一眼会命中哪些进程,这个检查成本极低,能避免真实事故。
4.3 nohup 与 systemctl:让任务在断网后继续跑
nohup python3 train.py > train.log 2>&1 &nohup 的作用是忽略 HUP(挂断)信号,让命令在退出 SSH 会话后继续运行;&把进程放到后台;> train.log把标准输出写入文件;2>&1把标准错误也合并到同一个文件。这个组合是临时跑脚本的常用方案,但缺点是没有自动重启和开机自启动能力,真正要长期守护的任务,应该交给 systemd 管理。
[Service] ExecStart=/usr/bin/python3 /opt/app/run.py Restart=always把上面内容写入/etc/systemd/system/myapp.service,然后systemctl daemon-reload加载配置,systemctl start myapp启动服务,systemctl enable myapp设置开机自启。相比 nohup,systemd 方案的好处是journalctl -u myapp可以统一看日志,进程崩溃后自动拉起,管理方式也和系统服务一致。
| systemctl 子命令 | 作用 |
|---|---|
| start / stop | 启动 / 停止服务 |
| restart | 重启服务 |
| status | 查看服务状态和最近日志 |
| enable / disable | 设置开机自启 / 取消自启 |
| daemon-reload | 修改 service 文件后重新加载配置 |
| list-units --type=service | 列出已加载的服务单元 |
4.4 df 与 du:磁盘满和 inode 满的快速排查
df -hT df -i du -sh /opt/* 2>/dev/null | sort -rh | headdf 看文件系统维度的空间,-h显示可读大小,-T显示文件系统类型;df -i查看 inode 用量。inode 是文件系统记录文件元数据的结构,每个文件(含目录)占用一个,inode 耗尽时会出现No space left on device,但df -h明明还有空间。遇到磁盘满,先 df 确认是空间还是 inode 问题,再进目录用 du 定位大文件。
du 看目录维度的实际占用,-sh是对每个目标统计总和(s 是汇总,h 是可读格式),sort -rh按数值倒序,head 取最大的前十个。这条命令能从根目录往下逐层定位:先看/opt/*哪个目录大,再进目录重复执行,最终找到大文件。清理时优先处理日志轮转文件和临时缓存,避免直接删业务数据。
5. Linux 权限、用户与网络操作命令:从 777 说起,到端口连通性排查
权限和用户管理是 Linux 新手到熟手的分水岭,网络排查则是服务器日常运维的高频动作。这一章把权限位解读、创建用户、端口探测和 DNS 排错放在一起,因为它们共同构成“新机器初始化”的标准流程。
5.1 chmod 与 chown:读懂权限位,少打 777
chmod 755 release.sh chmod -R g+w /data/shared chown -R appuser:appgroup /opt/app权限数字的含义是 r=4、w=2、x=1,三者相加得到一位数。chmod 755表示属主有读、写、执行权限,属组和其他人有读、执行权限,这是可执行脚本最常用的权限;644是普通文件的默认权限形态,属主可读写,其他人只读。
碰见权限问题时随手打777的做法不推荐,它让所有用户都能改文件,等于放弃了权限控制的防线。精准修改时用符号模式:u+x给属主加执行权限,g-w去掉属组的写权限,-R递归应用到整个目录。chown 负责改属主和属组,user:group同时改两者,迁移应用目录后忘记执行这条,经常导致服务启动时写不了日志。
| 数字组合 | 权限含义 | 使用场景 |
|---|---|---|
| 755 | rwxr-xr-x | 脚本、可执行文件 |
| 644 | rw-r--r-- | 配置文件、普通文件 |
| 600 | rw------- | 私钥、含密码文件 |
| 775 | rwxrwxr-x | 多人协作的目录 |
5.2 useradd 与 passwd:新建一个能登录的账号要哪几步
useradd -m -s /bin/bash -G docker zhangsan passwd zhangsan usermod -aG docker zhangsanuseradd 创建新用户,但有几个关键参数决定它是否可用:-m自动创建家目录,-s /bin/bash指定登录 shell,-G docker把用户加入附加组,-g可以指定主组。不同发行版默认行为有差异,Debian 系的 useradd 默认不建家目录,所以脚本里必须写-m,否则用户登录后落在根目录且没有自己的配置空间。
创建用户后必须执行passwd zhangsan设置密码,否则账号无法登录。usermod 的-aG是把用户追加到某个附加组,-a是 append(追加),如果不加-a会把用户从其他组里全部移除。给某个用户加 docker 组权限,或者把运维账号加入 sudo 组,都是这个模式。
5.3 nc 与 telnet ip 端口:测端口通不通的快捷办法
nc -zv 192.168.1.10 8080 telnet 192.168.1.10 8080判断一个端口是否连通,ping 帮不上忙,ping 只测主机通不通,不测具体端口。常用做法是用 nc 或 telnet 发起一次 TCP 连接。nc 的-z表示只扫描不发送数据,-v显示详细结果,输出open表示端口可连接,Connection refused表示服务没在监听,如果卡住不动直到超时,通常是防火墙直接丢弃了包。
telnet 的用法更简单:连接成功会进入服务端提示界面,连不上会直接报错或被挂起。注意 telnet 连接成功后不会自动退出,按Ctrl+]进入 telnet 命令行,输入 quit 再回车才能退出。如果系统没装 nc 也没有 telnet,bash 自带 /dev/tcp 能力:
timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.1.10/8080' && echo "端口通" || echo "端口不通"这条命令利用 bash 的虚拟设备发起 TCP 连接,timeout 3 防止一直卡住,&&和||根据退出码输出连通性。在受限环境里排查网络时,这个写法能救急。
5.4 DNS 配置修改后不生效:先别急着改 resolv.conf
resolvectl status resolvectl dns eth0 223.5.5.5 nslookup www.example.comLinux 上改 DNS 最常见的坑是:手动编辑/etc/resolv.conf后,重启网络或重启机器,文件内容被自动覆盖。原因是多数发行版的 resolv.conf 被 systemd-resolved 或 NetworkManager 托管,手动修改不属于受支持的方式。
排查顺序是:先resolvectl status看当前系统实际使用的 DNS 配置;用resolvectl dns eth0临时设置某个网卡的上游 DNS;再用nslookup或dig验证域名解析是否恢复。长期有效的做法是修改连接配置或系统网络管理工具的设置,而不是直接写 resolv.conf。遇到“改了 DNS 不生效”,优先确认有没有别的服务在托管这个文件,再考虑改配置:
dig @223.5.5.5 www.example.com这条命令显式指定使用某个 DNS 服务器查询,能够直接判断故障在解析服务本身,还是本地 DNS 配置不对。
6. 四个让 Linux 命令操作提速的终端技巧
前面几章解决的是“命令不会用”,这一章处理的是“命令用得太慢”。以下四个技巧不需要额外安装任何工具,全部基于 shell 内置能力。
6.1 alias 把高频复合命令变成短命令
alias ll='ls -lah' alias dockps='docker ps --format "table {{.Names}}\t{{.Status}}"'alias 是 bash 内置的别名机制,把一长串命令缩短成自定义单词。将常用 alias 写入~/.bashrc末尾,重新登录或执行source ~/.bashrc后永久生效。别名适合固定写法的命令,不建议带需要频繁改动的参数。
6.2 Ctrl+R 反向搜索历史命令
按Ctrl+R进入反向搜索模式,输入关键字会匹配历史命令,例如输入tar x就能找回之前解压过的复杂命令。再按一次Ctrl+R继续向前回溯更早的匹配项,按回车执行,按Ctrl+C退出搜索。这个功能比翻历史记录翻好几页快得多,配合 history 一起用基本可以告别重新敲长命令。
6.3 四个马上能用的行编辑快捷键
| 快捷键 | 作用 |
|---|---|
| Ctrl+A | 光标跳到行首 |
| Ctrl+E | 光标跳到行尾 |
| Ctrl+U | 删除光标到行首的全部内容 |
| Ctrl+K | 删除光标到行尾的全部内容 |
| Ctrl+W | 删除光标前面的一个单词 |
这组快捷键在输入长命令时效率极高。系统提示符下默认开启 Emacs 风格编辑模式,四个按键全部内置。熟练之后,对着一行错误命令做局部修改,不需要退格键慢慢删,也不需要重新打完整条命令。
6.4 按语义搜命令:apropos
apropos "compress files" apropos "copy directory"apropos 按 man 页的描述搜索命令,输入一段自然语言描述就能返回相关命令列表。它解决的是“知道想做什么但不知道命令名”的问题,比打开搜索引擎先查一遍再回终端执行快得多。配合man 命令名查看完整手册,遇到带点困惑的参数先说清楚作用,再决定是否使用。真正理解命令,不是背下一整张清单,而是知道去哪里找答案。
本文还有配套的精品资源,点击获取