☰
Linux基础入门:从命令行到权限管理,一篇搞懂核心操作
2026/10/17 8:09:44 网站建设 项目流程

如果你正在跟着某个系列教程走到第三篇,前两篇大概率已经把计算机基础、操作系统概念这些东西捋了一遍,而现在,你站在了真正动手的门槛前——命令行。这个位置非常关键,很多人在这一步选择了放弃,理由是"记不住命令""不知道敲错了会有什么后果"。但我想先说一句:Linux的学习曲线之所以陡峭,不是因为它难,而是因为它和你过去在图形界面里"点来点去"的思维方式完全不同。这篇基础篇,我用一个从业者的视角,把最核心、最绕不开的内容拆开揉碎讲清楚,争取让你在读完、练完之后,能真正在终端里独立操作,而不是只会对着教程复制粘贴。

这篇文章会覆盖从系统选型、文件系统结构、最常用的命令、权限模型、用户管理到软件安装和服务维护的完整链路。对完全零基础的朋友来说,它是一张进入Linux世界的地图;对有基础但不够系统的朋友来说,它能帮你补上很多"知其然不知其所以然"的短板。我会尽量少讲废话,每一步都告诉你为什么这么做,以及踩过的坑在哪里。

1. 开始之前:先解决"装哪个Linux"和"怎么学"的问题

1.1 发行版选择背后的真实逻辑

很多人第一个问题是"Linux那么多版本,我该装哪个"。这个问题如果丢到社区里,很容易引发争论,因为每个人都有自己的偏好。但我建议你从实际目标出发:

  • 如果你是想把Linux当作日常主力系统来用,或者以后打算做运维、部署服务,那么选择CentOS系(现在更推荐其上游的RHEL生态或替代品)或Debian系是稳妥的。它们在企业里的存量非常大,遇到问题能搜到的资料也最多。
  • 如果你想快速入门、追求软件新版本,选Ubuntu Desktop或者Fedora Workstation会更友好,有图形界面,驱动支持也到位。
  • 如果你学习目的不是为了"用"而是为了"考",比如考某个认证,那就直接按照考试要求的发行版来装,免得后面因为命令细节不一致产生困扰。

这里我给新手一个比较保守的建议:选Debian或Ubuntu Server作为第一个练习环境,不需要图形界面。为什么?因为纯命令行环境能逼着你尽早摆脱鼠标,专注于命令本身。等你在命令行里游刃有余了,图形界面反而会成为可选项。

注意:不同发行版最大的区别是包管理器和默认目录规范,习惯了一个再去用另一个,初期会觉得"命令都不一样"。学会用man和--help随时查阅文档,比死记硬背某个发行版的命令重要得多。

1.2 学习环境和练习策略

如果是装了虚拟机或者使用云服务器来练手,我强烈推荐一个策略:把当前系统快照保存好,然后大胆地折腾。Linux最忌讳的是一边看书一边小心翼翼地不敢执行,因为很多命令的杀伤力,书面上写一百遍都不如你亲手误操作一次来得深刻。但不要让误操作毁掉你的环境,所以快照、备份这类习惯要从一开始就建立。

  • 虚拟机方案:适合在个人电脑上练习,快照、回滚都非常方便,不依赖外网。
  • 云服务器方案:适合用来练习网络相关的配置,但要注意安全,尤其是别把端口暴露在公网上还不设密码。

学习顺序上我建议:先把基础命令跑熟,再研究权限,然后是用户管理,最后是软件包和服务。这个顺序就像盖楼,命令是砖块,权限是钢筋,用户管理是墙体,软件管理是水电。你现在要做的,就是先把砖块一块块摸清楚。

2. 文件系统与目录结构:Linux一切皆文件的起点

2.1 为什么说"一切皆文件"

"一切皆文件"是Linux设计哲学的基石。你在Windows里可能会觉得磁盘是C盘、D盘,软件装在某个文件夹里;但在Linux里,你的键盘输入、屏幕输出、网络连接、硬件设备、普通数据文件,都被抽象成了文件。也就是说,你通过统一的接口——文件读写——就能和几乎所有系统资源打交道。

这个设计带来的直接好处是:处理逻辑变得极其统一。你用查看文件内容的命令可以查看CPU信息,用重定向符号可以把程序输出写到文件里,甚至两个进程之间也能通过文件来进行通信。对初学者来说,理解这一点不需要太深入,但有了这个认知,你就能理解为什么cat /proc/cpuinfo这种命令可以"读"出CPU型号——因为CPU信息被内核映射成了虚拟文件。

2.2 目录结构速记法

Linux的目录结构看起来繁杂,但其实有一条主线:一切从根/出发。真正需要优先记住的,是以下几个目录的角色定位:

  • /:根目录,所有路径的起点,类似Windows的盘符顶部。
  • /etc:配置文件的家。几乎所有的软件配置都在这里,比如网络配置、用户密码文件、软件源列表。
  • /home:普通用户的家目录所在地,每个用户一个文件夹,用来存放个人文件和配置。
  • /var:经常变化的数据,日志文件、缓存、队列都在这。
  • /tmp:临时文件目录,系统重启后可能会清空。
  • /usr:系统主要软件和库文件的安装位置,类似于Windows的Program Files,但它的角色更接近系统底层。
  • /bin和/sbin:存放可执行文件,前者是普通用户也能执行的常用命令,后者通常是系统管理命令。

新手常见困惑是:明明自己建了一个目录,重启后找不到了。这多半是因为把东西放到了/tmp下。所以一个好习惯是:个人工作文件放在/home/你的用户名/下,不要乱放到根目录其他位置。

实操心得:你可以用ls /看看根目录下的所有文件夹,再逐个ls -l看里面的内容,把每个目录对应文档里介绍的角色和实际内容对一遍,这种"眼见为实"的记忆效果远好于死记。

2.3 路径相对与绝对的坑

命令cd是切换目录的指令,它接受两种路径:绝对路径从/开始写全,例如cd /etc/nginx;相对路径基于当前位置,用.表示当前目录、..表示上级目录,例如cd ../..是往上退两级。

我见过不少新手在写脚本时因为相对路径和绝对路径混用,导致换了个地方运行脚本就全部报错。这里有一个原则可以写进你的习惯里:命令行交互的时候怎么方便怎么来,但写脚本、配置服务时一律用绝对路径。因为在交互模式下你清楚自己在哪里,脚本执行时却不一定。

另外要提醒一个容易让人懵的符号:~代表当前用户的家目录。cd ~和直接敲cd效果一样,都会回到自己的家。而cd -是返回上一次所在的目录,这两个快捷键是提升效率的好工具。

3. 常用命令实操:从建目录到删文件,一次讲透

3.1 文件与目录的增删查改

我们把最常用的一组命令放在一起讲,因为这些命令几乎每天都会用到,组合起来就是一套完整的工作流。

  • pwd:打印当前所在目录的绝对路径。新手最容易迷路,而pwd就是你的指南针。
  • ls:列出目录内容。ls -l显示详细信息,ls -a显示隐藏文件(以.开头的文件),ls -lh以人类可读方式显示大小。
  • cd:切换目录,前面已经详细说过。
  • mkdir:创建目录。mkdir -p a/b/c可以一次性创建多层目录。
  • touch:创建一个空文件,或者更新已有文件的时间戳。
  • cp:复制文件或目录。复制目录必须加-r参数,否则会提示无法复制目录。
  • mv:移动或重命名文件。注意,在同一目录下mv oldname newname就是重命名。
  • rm:删除文件或目录。删除目录用-r,如果文件是只读的,系统会询问是否确认,不想被问就加-f。

这里我特别想展开讲rm,因为它可能是新手遇到的第一个"事故高发区"。rm -rf /这个梗大家都听过,它的作用是强制删除根目录下所有文件,而一旦在root用户下执行,系统会瞬间崩溃,无法挽回。真实的开发场景里,我见过有人本来想删除一个临时目录,结果因为路径里多了一个空格,写成了rm -rf / tmp,直接把系统删没了。所以,执行rm之前,我的个人习惯是:先ls看一眼目标目录内容,确认路径正确,再执行删除操作。另外,尽量不要用rm -rf去删不确定路径下的内容,可以先用mv把不想要的东西移到一个回收文件夹里,过几天再确认后删除,这样能避免很多手滑事故。

3.2 查看文件内容的几种姿势

查看文件内容并不只是cat一个命令,不同场景有不同的选择:

  • cat:适合查看小型文件的全部内容。它会把文件内容全部输出到屏幕上。
  • less:适合查看大型文件,支持上下翻页、搜索。比如查看日志文件,用less可以边翻边找关键信息。打开后按/输入关键词可以搜索,按q退出。
  • head:默认查看文件前10行,适合看日志开头。
  • tail:默认查看文件后10行,看点在于tail -f可以实时追踪文件末尾新增的内容,排查日志时非常好用。
  • grep:在文件内容中筛选包含关键词的行,比如在配置文件中找某个参数,比手动翻快得多。

这四个命令的组合,基本可以覆盖日常所有"看文件"的需求。例如,你想查看nginx的错误日志最后的20行里有没有"error"字样,可以写:tail -20 /var/log/nginx/error.log | grep error。

这里的|符号就是"管道",它把前一个命令的输出,作为后一个命令的输入。这是Linux命令行最有魅力的设计之一,简单说就是"组合技"。日常操作中,管道和grep是排查问题时使用频率最高的一对组合。

3.3 vim编辑器:逃不掉的门槛

说到在Linux里改文件,就不得不提vim。很多新手第一次打开vim会发现自己"卡住了",不知道怎么输入文字,也不知道怎么退出。这是正常的,因为 vim 的设计是"模式化"的,不是"直接输入"。

  • 刚打开文件时,你处于普通模式,此时键盘按键是快捷操作而不是输入字符。
  • 按i进入插入模式,这时候才能正常打字。
  • 按Esc回到普通模式,输入:wq是保存退出,输入:q!是不保存退出。

这三个要点记住了,vim 的使用就算入门了。但你还需要掌握两个高频操作:在普通模式下按dd删除当前行,按u撤销上一步操作。dd和u这两个操作能帮你避免很多"越改越乱"的困境。

关于编辑器选择我这里多说一句:不要在这个阶段纠结 vim 和 nano 哪个更好。在Linux里,vim 是几乎必然存在的编辑器,而 nano 更友好一些。但长远看,vim 的学习曲线虽然陡峭,回报却极高,因为在服务器上没有图形界面的环境里,你唯一能依靠的顺手的编辑工具很可能就是 vim。哪怕现在不精通,至少熟悉基本操作,能让你在环境中活下来。

4. 权限模型与用户管理:理解root与sudo的真正关系

4.1 权限的三个角色和三个动作

Linux的权限模型可以用一个九宫格来理解:每个文件或目录都有三组权限,分别对应属主(user)、属组(group)、其他人(others);每组权限有三种动作:读(r=4)、写(w=2)、执行(x=1)。

ls -l看到的第一列,比如drwxr-xr-x,就是权限的完整表达。拆开来看,第一个字符d表示这是一个目录;后面九个字符每三个一组,分别对应属主、属组、其他用户。

数字表示法更直观:每个组的三个权限用数字相加。比如rwx是7,r-x是5,r--是4。如果你看到一个文件权限是644,意思就是属主可读可写,组里的其他人和其他用户都只能读。

理解这个模型后,再去学习chmod就顺理成章了。chmod 755 filename是直接把权限改成数字对应的值,这种方法叫数字法。还有一种符号法,比如chmod u+x filename,意思是给属主添加执行权限。

实操心得:对于脚本文件,必须要有执行权限(x)才能运行。很多新手./script.sh会得到Permission denied的报错,原因就是脚本文件没有x权限。这时候执行chmod +x script.sh再运行即可。

4.2 root用户是万能的,但千万别常用

Linux系统的超级用户叫root,它可以操作系统内的任何文件、任何配置,没有任何限制。这种"无限制"既是能力,也是危险。root用户下,一条错误的命令可能让系统直接报废,而且系统不会有任何额外确认。

所以在正规操作中,日常使用应当用普通用户登录,只有在需要管理系统配置时才临时切换到root,或者使用sudo命令前缀。sudo的作用是以root权限执行某一条命令,但执行前它会检查当前用户是否在"sudoer"列表里,并要求输入当前用户的密码。这样可以防止无意的系统性破坏,同时给系统留下审计记录。

顺便解释一下su和sudo的区别:su是直接切换用户身份,比如su - root会切换到root用户,输入的是root的密码;sudo则是仅以root身份执行后面这一条命令,输入的是当前用户自己的密码。日常使用中,推荐用sudo而不是su,因为su切换到root后,你不会记得自己还在root状态,接着敲下去的命令都拥有最高权限,风险极大。

4.3 用户与用户组管理的基础操作

用户管理相关命令中,我需要优先讲这几个:useradd、usermod、userdel、passwd、groupadd。

  • useradd username:创建一个新用户。系统会同时在/home下创建同名目录,并生成对应的用户id。
  • passwd username:设置或修改指定用户的密码。
  • usermod -aG groupname username:把用户加入某个附加组。-aG这两个参数组合非常重要,-a表示追加,"G"表示附加组,不加-a直接覆盖会把用户从原有附加组里踢出去。
  • userdel -r username:删除用户,-r参数会连同家目录一起删除。
  • groupadd groupname:创建用户组。

用户组的意义在于协同授权。比如你有一个项目目录,需要让一组人都有读写权限,与其一个个给用户授权,不如创建一个组,把用户拉进组里,然后给目录设置属组为这个组并赋予相应权限。到后面学习服务部署时,这种做法非常常见。

注意:在系统里创建一个用户后,如果不知道给它设什么密码,可以跳过密码设置。但一个没有密码的用户无法正常登录,所以创建用户后务必执行passwd完成密码初始化,否则换了环境可能连自己都登不进去。

5. 软件包管理与服务控制:从安装到自启动的一次完整闭环

5.1 不同发行版的包管理脉络

软件包管理是Linux里最体现"发行版差异"的地方,但整体思路是相通的。无论是Debian系的apt、Red Hat系的yum/dnf,还是Arch系的pacman,本质都在做三件事:更新软件源索引、安装软件包、卸载软件包。

推荐一个通用的联想法:把软件源理解为手机应用商店,apt update就是在刷新商店的列表,apt install xxx就是从商店下载安装某个应用,apt remove xxx就是卸载应用。这样想,一切就顺了。

我在实际运维中常用的一组命令是:

apt update # 刷新软件包索引 apt upgrade # 升级所有可升级的软件包 apt install nginx # 安装指定软件 apt remove nginx # 卸载软件但保留配置文件 apt purge nginx # 卸载软件并清除配置文件

如果你用的是 CentOS/RHEL 系,把apt换成yum(新系统用dnf)即可,用法几乎一一对应。需要说明的是,很多时候你安装软件会提示找不到包,这时候大概率不是包名写错了,而是没有先执行源更新,索引还是旧的。

5.2 systemctl 是服务的"遥控器"

在Linux里,软件装上之后只是有了本体,要想让它一直运行,就需要让系统把它的服务"拉起来"。以最常用的systemd为例,管理服务的命令统一用systemctl。

  • systemctl start 服务名:启动服务。
  • systemctl enable 服务名:设置开机自启。
  • systemctl status 服务名:查看服务状态。
  • systemctl restart 服务名:重启服务,通常在修改配置后执行。
  • systemctl stop 服务名:停止服务。

一个服务想被systemctl管理,必须在/etc/systemd/system/或/lib/systemd/system/下存在对应的.service文件。如果我们自己写了一个脚本想做成服务,也需要创建这样一个文件,结构并不复杂,大致是这样:

[Unit] Description=My custom service [Service] ExecStart=/path/to/my_script.sh Restart=always User=myuser [Install] WantedBy=multi-user.target

然后执行:

systemctl daemon-reload systemctl enable my_service systemctl start my_service

一句话说透:daemon-reload让系统重新读取服务文件列表,enable设置自启,start立即运行。这三步做完,一个自定义服务就上线了。

常见坑:如果你改了服务文件但没有执行daemon-reload,服务重启时用的还是旧配置,这是很多人排查半天"为什么改了不生效"时忽略的环节。

5.3 日志查看是排查服务的眼睛

服务出了问题,第一反应不该是反复重启,而是看日志。使用systemd管理服务的日志,可以用journalctl查看。

  • journalctl -u 服务名:查看某个服务的全部日志。
  • journalctl -u 服务名 -f:跟踪最新日志,实时刷新。
  • journalctl -u 服务名 --since "today":只看今天的日志。

另外,很多传统服务还会把日志写在/var/log/目录下,比如 Nginx 的访问日志和错误日志就在/var/log/nginx/下。当journalctl查不到信息时,去/var/log里翻对应文件,往往能找到更详细的线索。

在这个过程中,tail -f和grep又会派上用场。比如你怀疑服务报错是因为某个配置项写错了,可以先:

tail -f /var/log/xxx.log | grep error

这样屏幕上只会刷新包含"error"的行,日志再多也不会淹没视线。这就是之前提到的管道组合技在实战中的应用。

6. 常见问题排查与避坑手册

6.1 权限类问题

问题现象:执行./script.sh提示Permission denied。

排查思路:这不一定是文件不存在,而往往是没有执行权限。先ls -l script.sh查看权限位,如果-rw-r--r--,说明确实没有x权限。执行chmod +x script.sh解决。

问题现象:编辑某个系统配置文件时提示Permission denied。

排查思路:配置文件通常在/etc下,只有root才能写。要么用sudo vim /etc/xxx.conf编辑,要么先切换到root用户。不要试图用普通用户强写,这是系统的安全机制。

6.2 目录类问题

问题现象:明明创建了一个目录,但别的用户访问不了。

排查思路:逐级检查路径上每个目录的权限。比如/home/user1/project,其他用户要访问,那么/home/user1和/home/user1/project都要有x权限,/home/user1本身不能是700。很多时候问题出在中间某一级目录权限过严,导致路径"断"了。

问题现象:用mv移动目录,结果目录结构变了。

排查思路:mv的语义取决于目标路径是否存在。如果目标是一个已存在的目录,会把源目录移动进去;如果目标是一个不存在的路径,则会重命名。所以先确认目标路径的状态再执行mv。

6.3 软件包与服务类问题

问题现象:apt install提示Package not found。

排查思路:先执行apt update刷新索引。如果刷新后仍然找不到,可以搜索包名apt search 关键词,因为真实包名可能与你想的不一样。

问题现象:服务配置文件改了,重启后没有生效。

排查思路:先systemctl daemon-reload再systemctl restart 服务名。如果还是不生效,去/var/log或journalctl里找日志,多半会发现配置项写错、文件权限不对或端口被占用等原因。

问题现象:服务启动失败,提示端口被占用。

排查思路:用ss -tlnp | grep 端口号找出占用端口的进程,然后用kill结束它,或者直接修改当前服务的监听端口。在测试环境里,端口冲突是最常见的"服务起不来"原因之一。

6.4 我给新手的几条防坑守则

最后聊几条我踩过之后沉淀下来的习惯,值得从第一天就养成:

  • 不要在root用户下做日常操作。想用一条管理员命令就用sudo,这是最低成本的习惯。
  • 删除重要内容之前先备份。可以用cp -r 目录 目录.bak,或者打一个tar包。
  • 修改配置文件之前先备份原文件。比如cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak,改坏了随时能回滚。
  • 不要随手关掉防火墙或清空规则。很多服务跑不起来,未必是软件的问题,而是端口被防火墙挡了,这时候要学的是放行指定端口,而不是直接关掉防火墙。
  • 每条命令执行之前,先想一下它的作用范围。尤其是带-r或-f的命令,先默念一遍路径再回车。

7. 最后分享一点实战中的体会

很多朋友学到这里会有一个共同的感觉:命令都认识了,但放到真实环境里还是不知道该干嘛。这是正常的,因为你缺少的是"项目感"——你是在用一个个孤立的操作应对问题,而不是在一个完整任务里串联它们。

我的建议是,给自己布置一个小任务:在一台干净的Linux上,从创建用户开始,配置sudo权限、安装一个Web服务、写一个自定义脚本挂到systemd里、设置开机自启,最后查看日志确认一切正常。这个流程几乎涵盖了本篇讲到的所有知识点,你完整走一遍,对Linux的认知会发生质的变化。如果中途遇到问题,优先用日志去定位,而不是猜。这也是Linux运维工作里最重要的习惯:不要猜,去看日志,日志会告诉你真相。希望这篇基础篇能成为你进入Linux世界的坚实台阶。

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

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

立即咨询