Linux基础入门:高频命令与程序编译实战指南
2026/9/15 23:10:54 网站建设 项目流程

在带过不少新人之后,我越来越觉得“Linux 基础”这门课最难的地方不是命令本身,而是很多人在还没理解命令行工作方式的时候,就开始疯狂抄写网上的“linux 常用命令大全”,最后抄了满满几页纸,真到了服务器上还是不知道从哪下手。这篇文章不搞大而全的罗列,只围绕两条主线来写:日常高频的 Linux 常用命令,以及程序编译的完整流程。前者解决“怎么用”,后者解决“怎么编”,两条线串起来,基本就能覆盖从登录一台 Linux 机器到把自己写的 C/C++ 程序跑起来的全过程。适合刚入门 Linux 的学生、刚转运维或嵌入式开发的朋友,也适合那些折腾过虚拟机但对命令行始终没有建立体系感的人。

1. 先建立正确的命令学习思路

1.1 一切皆文件:先理解 Linux 的设计哲学,再记命令

很多新人打开终端,第一反应是“我要背 ls、cd、mkdir、rm”,然后背完很快就忘。我见过太多这样的情况,原因很简单——你在死记硬背,而不是在理解一个操作系统的工作方式。

Linux 有一个非常核心的设计哲学:一切皆文件。普通文件是文件,目录是文件,磁盘设备是文件,甚至进程信息、网络连接状态,也会以文件的形式暴露在/proc/sys这类虚拟目录下。理解这一点之后,你就会发现很多命令其实是围绕“文件”在做操作:

  • ls是列出目录内容,目录也是一种文件;
  • rm是删除文件,所以删除目录要加-r(递归);
  • catlessmore是查看文件内容,用它们也能看设备信息;
  • cpmv的本质,是对文件数据的复制和重命名;
  • ln创建链接,其实是在目录里创建一个指向目标文件的新名字。

一旦你建立了“一切皆文件”的思维,就不会再觉得 Linux 命令是一盘散沙。你只需要记住“操作文件”的几类动作,再配合具体的参数,绝大多数场景都能覆盖。

还有一个很容易被忽略但极其重要的事实:Linux 命令执行后默认没有成功提示rm file执行完,命令不吭声,往往就是成功的;报错才会有输出。这一点跟 Windows 弹窗式的交互完全不同,很多新人第一次在 Linux 上删文件,看到没有提示反而慌了,以为没删掉。

1.2 把 man、help 和 Tab 补全当成你的随身助手

我在指导新人时反复强调一句话:你不必记所有参数,但你必须知道怎么查参数。Linux 本身已经给了你一套非常完整的帮助体系,不用白不用。

查看命令帮助有三种常见方式:

  1. man 命令:最完整的参考手册,适合系统了解一个命令的全部功能;
  2. 命令 --help命令 -h:快速查看常用参数,比 man 更容易读;
  3. apropos 关键词:当你忘记命令名、只记得功能时,用关键词反查命令。

实际操作中,我的习惯是先用command --help解决 80% 的问题,只有需要深入了解某个命令的全部细节时,才会去看man。举个例子,我想知道tar有哪些参数,直接执行tar --help,里面会列出常用的-c(创建归档)、-x(解压)、-f(指定文件名)、-z(gzip 压缩)等,基本一眼就能找到答案。

Tab 补全则是效率神器。输入命令、路径、参数时,按两下 Tab 可以列出候选值。我见过很多资深工程师敲命令都特别快,秘密之一就是他们很少完整输入长路径,都是敲前几个字符然后 Tab 补全。这样既快又不容易打错。

另外说一句,man 手册打开之后是按空格翻页、按 q 退出的 Vim 操作模式,我第一次用的时候卡在里面出不来,差点以为终端崩了。这种小细节我会在后面的章节里一并提醒。

1.3 先准备一个可以随便折腾的虚拟机环境

学习 Linux 命令和编译,别一上来就在生产服务器上试。我的建议是:本地装一个虚拟机,用 VM 虚拟机或 VirtualBox 都行,装上 CentOS Stream、Ubuntu Server 或 Debian 这类主流发行版,然后随便折腾。装坏了、配置乱了、删错文件了,重置快照就能恢复。

如果你用的是 Windows,虚拟机创建向导一般就是“新建虚拟机 → 选择镜像 → 分配 CPU 和内存 → 磁盘大小 → 完成安装”这几步。配置方面有个经验值:内存至少分 2GB,硬盘至少 40GB,网络用 NAT 模式方便宿主机访问虚拟机。装完系统后,建议再安装一个 SSH 服务端,这样你就能用宿主机上的终端工具(比如 FinalShell 或 VSCode 的 Remote-SSH)连进去操作,体验比在虚拟机窗口里敲命令好得多。

如果你已经在用 WSL(Windows Subsystem for Linux),也可以把 WSL 当作练习环境,日常跑命令完全够用。但 WSL 和真实 Linux 虚拟机在系统初始化、内核模块、服务管理上还是有一些差异的,如果你以后要从事运维工作,我建议还是优先用虚拟机。

2. 日常高频的 Linux 常用命令脉络

2.1 文件与目录操作:高频命令的语义和区别

文件操作是使用频次最高的命令群,也是很多新人在参数上最容易混淆的地方。我把最常用的一组整理出来,并解释每个命令的核心语义,而不是只罗列参数。

  • pwd:显示当前所在目录。没有太多可说的,迷路时先敲它。
  • ls:列出目录内容。常用组合ls -l(长格式显示权限、属主、大小、时间)、ls -a(显示隐藏文件)、ls -lh(人类可读大小)。
  • cd:切换目录。这里有个容易踩坑的点:cdcd ~都是回到当前用户的家目录,但cd /是切到根目录,cd ..是返回上一级。新人经常在“根目录”和“家目录”之间搞混。
  • cp:复制文件或目录。复制目录必须加-r,即cp -r source_dir target_dir。保留文件原有属性可以用cp -p,这在备份配置文件时非常有用。
  • mv:移动文件或重命名。mv oldname newname就是重命名,mv file /path/to/dir就是移动。mv 在同一文件系统内是“改个目录项”的操作,速度很快;跨文件系统移动则涉及真正的拷贝和删除。
  • rm:删除文件或目录。删除目录同样要加-r,即rm -r dir。新手务必记住:Linux 没有回收站rm删掉的文件很难再找回来。重要文件删除前,我建议先ls确认路径,再执行rm,或者干脆用mv file /tmp/先把文件挪到临时目录,确认不用了再清掉。
  • ln:创建链接。不加参数创建的是硬链接,加-s创建的是软链接(符号链接)。软链接类似 Windows 的快捷方式,指向目标文件的路径;硬链接则是多个文件名指向同一个文件节点。实际操作中,软链接用的更多,比如把某个程序的安装路径软链接到/usr/local/bin下。

还有两个查看文本文件的高频命令:cat把文件全部内容打到屏幕上,适合短文件;less支持分页和上下滚动,适合长文件、日志,按 q 退出。对于日志文件这种可能很大的内容,千万别上来就cat,你会被刷屏到怀疑人生,用less或者tail -n 50看末尾部分才是常态。

2.2 权限是新手第一道坎:用户、组、chmod 与 chown 的配合

Linux 是多用户操作系统,权限管理是它的命根子,也是新手最容易被卡住的地方。出现Permission denied这类报错,八成就是权限没配置对。

先看权限表示方式。执行ls -l后,输出中类似-rw-r--r--的一段就是权限位。第一位是文件类型,-表示普通文件,d表示目录,l表示软链接。后面九位分成三组,每组三个字符,分别代表“属主(user)”、“属组(group)”、“其他用户(others)”的权限,r是读、w是写、x是执行。

修改权限用chmod,有两种常见写法:

  1. 符号模式:chmod u+x script.sh表示给属主增加执行权限,chmod go-w file表示去掉属组和其他人的写权限;
  2. 数字模式:把r记为 4、w记为 2、x记为 1,三者相加得到一组权限的数字,例如chmod 755 script.sh表示属主有 rwx(7),属组和其他人有 r-x(5)。

修改属主和属组用chown,例如chown user:group filechown user file。注意,修改属主通常需要 root 权限,所以命令前面一般要加sudo

如果你是刚入门,我给一个安全建议:权限宁严勿松。普通文件和脚本用755644就够了,别图省事直接chmod 777777意味着所有用户都能读写执行,这在多用户的服务器上是非常危险的习惯。

用户管理方面,useradd用来创建用户,passwd设置或修改密码,userdel删除用户。实际操作中经常配合sudo使用,sudo是让普通用户临时以 root 身份执行命令。配置一个用户能否使用 sudo,通常是在/etc/sudoers文件里添加一行授权记录,但这个文件一定要用visudo命令编辑,直接改文件一旦语法错误,可能导致整个 sudo 无法使用。

2.3 看系统状态:进程、资源、磁盘和网络

拿到一台 Linux 服务器,第一步不是急着跑业务,而是先看它的“身体状况”。这组命令是运维排查的基础,也是高频面试题。

查看进程用ps。最常用的组合是ps -efps aux,两者都能显示进程的 PID、父进程、CPU 和内存占用、启动命令等。如果想实时查看系统资源占用,用top,它相当于 Linux 的任务管理器,按P按 CPU 排序,按M按内存排序,按q退出。

排查内存问题时,free -h是最快的命令,-h表示以人类可读的 G/M 为单位显示。这条命令看的是内存总量、已用、可用和缓存占用,我在实际中经常用它判断“内存到底够不够”。需要注意,Linux 会把空闲内存用作缓存,所以“可用”值通常比“空闲”值更重要,别看到 used 很高就慌张。

磁盘使用情况用df -h查看整体分区占用,用du -sh 目录名查看某个目录占了多少空间。排查“磁盘满了”的问题时,我的习惯是先用df -h找到满的分区,再进到该分区下用du -sh *逐级找大目录,定位哪个目录在“吃”空间。

网络这块,早期ifconfig用得很多,现在更推荐用ip addr查看网卡 IP,用ss -tlnp查看监听端口和对应进程。排查网络连通性用ping,需要看到达某个域名或 IP 的延迟和丢包情况;排查端口通不通,可以telnet ip 端口或者用/dev/tcp方式测试。

服务管理方面,CentOS 7 之后的主流系统都使用systemctl,例如systemctl start nginxsystemctl enable nginx(开机自启)、systemctl status nginx查看状态。这个命令体系替代了老的servicechkconfig,你只需要记住 start、stop、restart、enable、status 这几个动作,基本就够用了。

3. 程序编译:从源码到可执行文件的全过程

3.1 一次编译的四个阶段:预处理、编译、汇编、链接

很多人在 Windows 上用 Visual Studio 点一下“生成”就能跑程序,对背后发生了什么完全没概念。到了 Linux 上,用 gcc/g++ 编译程序,需要手动敲命令、看报错,就蒙了。其实程序编译的过程并不复杂,它本质上是在做“翻译”:把 C/C++ 源码翻译成机器能执行的指令。

以 C 语言为例,一个hello.c文件用gcc hello.c -o hello编译,看似是一条命令,实际上内部经历了四个阶段:

  1. 预处理(Preprocessing):处理#include#define等预处理指令。这一步相当于把#include <stdio.h>的内容展开,把宏替换成实际内容。可以通过gcc -E hello.c -o hello.i查看预处理后的文件,里面会多出大量头文件的内容。
  2. 编译(Compilation):把预处理后的 C 代码翻译成汇编代码。汇编代码是介于高级语言和机器码之间的文本,可以通过gcc -S hello.c -o hello.s查看,能隐约看到一些指令助记符。
  3. 汇编(Assembly):把汇编代码翻译成机器码,生成目标文件hello.o,这个文件是二进制格式,还不能直接运行。
  4. 链接(Linking):把目标文件与所需的库文件链接在一起,生成最终的可执行文件。比如你调用了printf,链接阶段就要把 C 标准库中printf的实现代码“接”进来。

明白了这四个阶段,你就知道编译出错时该怎么定位问题了。如果在预处理阶段出错,通常是你写错了头文件路径或宏定义;如果在编译或汇编阶段出错,通常是源码有语法问题;如果在链接阶段出错,最常见的报错是“undefined reference to xxx”,说明你声明了某个函数,但链接器找不到它的实现,常见原因是缺少了对应的库文件。比如用到 math 库函数,编译命令需要加-lm;用到 pthread 线程库,要加-lpthread

C++ 程序用g++编译,基本逻辑和 gcc 一样。比如一个 cpp 文件后面还跟着一连串的图片,根本没法看。后来我就只用lesstail -100来翻日志。

排查的顺序也有讲究。我习惯先看系统层,再看应用层。系统层看内存和磁盘,free -h看内存是否耗尽,df -h看磁盘是否写满;应用层看日志,journalctl -u 服务名 --since "10 minutes ago"看 systemd 服务的近期日志,或者直接去/var/log/下面找对应的日志文件。

网络日志排查时,先用ping判断基础连通性,再用ss -tlnp看端口是否在监听,最后才去看防火墙规则。很多“连不上数据库”“连不上 Redis”的问题,其实都是端口没监听或被防火墙拦住了。

大多数入门级报错,按照“先系统层、后应用层、最后代码层”的顺序走一遍,基本都能定位到问题所在。

4.2 新手最容易踩的坑清单:权限、路径、编码和空格

我整理了一份高频踩坑清单,都是我在带人和实际运维中反复见到的问题。

第一个坑是权限。Permission denied出现时,先检查文件属主和当前用户是否一致,检查目录是否有执行权限。这里有个很容易忽略的细节:进入一个目录需要该目录的执行权限,而不只是读权限。你有一个目录权限是rw-,没有x,你是无法cd进去的,即使你能看到目录内容。

第二个坑是路径。Linux 的路径分隔符是/,不是 Windows 的\。新手经常把 Windows 路径直接搬过来用,导致No such file or directory。另外,相对路径和绝对路径要分清,脚本里建议多使用绝对路径,避免因为当前目录不对而找不到文件。

第三个坑是编码。在 Windows 上编辑过的文件传到 Linux 下,经常会出现中文乱码,尤其是日志和配置文件。这是因为文件编码不一致,Windows 常用 GBK/GB18030,Linux 常用 UTF-8。处理方法之一是安装dos2unix工具,执行dos2unix 文件名转换格式;解压 zip 文件时出现中文乱码,可以尝试unzip -O GBK 文件名.zip指定编码。

第四个坑是文件名里的空格。Linux 命令行按空格切分参数,所以遇到文件名里有空格的文件,必须加引号或转义符。比如要查看my file.txt,正确做法是cat "my file.txt"cat my\ file.txt。写脚本时如果遍历到带空格的文件名,处理起来特别容易出 bug,我个人的建议是给文件命名时尽量用下划线代替空格。

第五个坑是 shell 脚本的换行符。Windows 下写的.sh脚本,拿到 Linux 上执行经常报bad interpreter: /bin/bash^M,这也是编码和换行问题,用dos2unix处理脚本文件即可解决。

还有一个 WSL 用户经常遇到的现象:在 WSL 里删除了一个大文件,但 Windows 侧磁盘空间没有立即释放。这通常是因为 WSL 的虚拟磁盘不会在删除文件后自动回缩。解决方法是执行wsl --shutdown关闭 WSL 实例,然后在 Windows 侧执行Optimize-VHD(针对 Hyper-V 虚拟磁盘)或使用diskpartcompact vdisk指令压缩虚拟磁盘。在虚拟机里删除文件后物理磁盘空间不释放,也是同样的原理。

4.3 我常用的几个提高效率的小习惯

最后分享几个我自己的使用习惯,这些细节不一定会出现在教科书里,但对日常工作效率的提升非常明显。

第一是善用历史命令。按上箭头可以翻出上一条命令,按Ctrl + R可以反向搜索历史命令。你敲过一遍的长命令,第二次就不用再敲了。历史记录默认存在当前用户家目录的.bash_history文件里,用history命令也能查看。

第二是给高频命令做别名。打开~/.bashrc文件,在里面加alias ll='ls -lh'alias la='ls -a',重新登录或执行source ~/.bashrc后生效。我自己常年保留几个固定的 alias,比如alias ..='cd ..',把退目录的操作缩短到两个字符。

第三是写脚本时先加set -xset -eset -x会在执行脚本时打印每一条实际执行的命令,排查问题的时候视野清晰很多;set -e则让脚本在某条命令失败时立即退出,避免“带着错误继续跑”导致更严重的后果。

第四是把 Tab 补全养成肌肉记忆。不仅是路径,命令参数也能补全,比如 systemctl 服务名、yum 包名都可以用 Tab 补全。多练一段时间,你会发现敲命令的速度提升非常明显。

说到编译和运维,很多新人会问“要不要背命令”。我的看法是:命令是工具,不是考点。你不需要把几百条命令全部背下来,但要把最常用的那几十条练到条件反射的程度,剩下的靠--help和 man 随时查。真正值钱的能力,是你拿到一台机器后能快速搞清楚它现在的状态,遇到报错能顺着日志一步步定位原因,而不是把手册背得滚瓜烂熟。

带新人这几年,我常说一句话:Linux 不是背出来的,是用出来的。你在一台虚拟机上把文件操作、权限设置、编译流程完整地跑过几遍,比看十篇“linux 常用命令大全”都管用。这篇文章给了你两条清晰的路径——高频命令和程序编译,接下来要做的就是打开终端,把命令敲一遍,把编译流程走一遍。开始动手吧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询