ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux基本指令入门:从内核、Shell到文件操作与权限管理的完整路径

Linux基本指令入门:从内核、Shell到文件操作与权限管理的完整路径 第一次被丢到Linux服务器面前很多人脑子是空的。不是因为你笨而是因为你在Windows或者macOS上积累的“双击打开、资源管理器、右键菜单”那套习惯到了Linux终端里基本归零。网上的教程又特别爱一步到位一搜“Linux常用命令大全”跳出来上百条照着一敲第一行就报command not found心态直接崩。我带新人和帮团队排错这么多年最大的感触是Linux基本指令其实不难难的是还没把“内核、发行版、Shell、命令”这几层概念理顺就急着背命令。这篇就按“Linux了解与基本指令1”的路线来写目标很朴素先让你明白Linux到底是个什么东西、终端命令的运行逻辑是什么然后掌握第一批最常用的基本指令——查看位置、切换目录、创建文件、复制移动删除、查看文件内容最后把用户和权限的基本逻辑也讲清楚。适合刚装好虚拟机或WSL、准备认真开始Linux学习的新手也适合那些能查到命令、但总搞不明白为什么会报错的半新手。不用担心一次学不完。我把范围刻意控制在第一批命令里不会扯到网络配置、服务管理、脚本编程这些后面才需要的东西。你只需要一台能敲命令的Linux环境跟着把每条命令亲手敲一遍后面的路会顺很多。1. Linux不是一台“电脑”而是一个家族先分清内核、发行版和Shell1.1 内核和发行版就像发动机和整车Linux这个词严格来说指的是一个内核kernel。内核负责管理CPU、内存、设备驱动、文件系统、网络协议栈这些最底层的东西。你平时挂在嘴边的Ubuntu、CentOS、Debian、Arch其实都是发行版distribution也就是一个完整可用的操作系统里面包含了Linux内核、GNU工具集、包管理器、init系统、桌面环境和各种应用软件。打个比方内核是发动机发行版是整车。发动机决定车能不能跑但方向盘、座椅、仪表盘是整车厂装上去的。你下载Linux镜像时拿到的ISO文件本质上是整车不是光一个发动机。为什么这个区分很重要因为你在网上搜攻略时会经常看到“Linux系统”和“Linux内核”两种说法混着用。很多人以为他们聊的是同一个东西实际上差得很远。比如“Linux系统安装”一般指的是安装发行版“Linux内核编译”则是在折腾发动机本身这是完全不同的两种操作。发行版包管理器常见使用场景Ubuntu / Debianapt桌面、服务器、开发环境CentOS Stream / Rocky / AlmaLinuxdnf / yum服务器、运维、集群openSUSEzypper服务器、桌面Arch Linuxpacman桌面、折腾、定制化还有就是国内团队维护的一些Linux发行版比如统信UOS、麒麟以及基于Debian/Ubuntu改造的桌面系统这几年在办公和教室里越来越常见。生态方面搜狗输入法、企业微信、希沃白板这些软件也在陆续推出Linux版说明Linux早就不只是“服务器专用系统”了。从云服务器到嵌入式Linux项目基本指令就是地基。1.2 想练手虚拟机、WSL和云主机怎么选如果只是学习没必要一上来就买服务器。最常见的练习方式有三种。第一种是本地虚拟机安装Linux比如VirtualBox或者VMware里装一个Ubuntu Server。这种方式最接近真实服务器也能让你完整经历“分区、装系统、配置网络”的过程。内存建议给2GB以上磁盘20GB起步。分区不用纠结新手直接让安装器自动分区先把系统跑起来再说。第二种是Windows系统上使用WSL。WSL不是传统意义上的虚拟机它更轻量启动快非常适合练命令。不过新版WSL有时候会提示“适用于Linux的Windows子系统必须更新到最新版本才能继续”遇到这种情况直接按提示升级WSL就行别去网上找什么旁门左道的修复方法。第三种是买一台云服务器。如果只是想练习选最便宜的测试机装个CentOS或者Ubuntu用SSH远程登录练习。但记住生产服务器别拿来乱做实验刚开始学的时候宁可单独买一台便宜的测试机也不要去生产环境里试手。1.3 终端里跟你打交道的其实是Shell登录Linux后你看到的那行提示符和黑色窗口背后是一个叫Shell的程序在解释你敲的命令。Shell就像翻译官你把“ls”扔给它它会去系统PATH环境变量里找到对应的ls程序运行后再把结果返回终端。默认的Shell一般是bash也有很多人用zsh、fish。你可以用下面两条命令看看当前环境echo $SHELL bash --version为什么要先知道Shell因为后面很多报错根本不是命令本身的问题而是Shell环境没弄对。比如输入命令提示command not found你要先确认这个程序装了没有、可执行文件路径在不在PATH里而不是无脑重新安装一遍。这个排查思路几乎是所有Linux命令使用的基础。2. 终端里的第一课命令长什么样为什么新手总超时、手滑、不敢敲2.1 一条命令的通用语法绝大多数Linux命令遵循一个非常朴素的格式命令 [选项] [参数]拿ls -l /etc举例ls是命令-l是选项/etc是参数含义是以长格式列出/etc目录下的内容。选项一般分两种。短选项是一个短横线加一个字母可以合并比如ls -la等于ls -l -a长选项是两个短横线加一个单词比如ls --all。如果记不住某个命令支持哪些选项几乎每条命令都支持--helpls --help想查更详细的说明用man手册。man ls会打开一份完整的命令说明文档这也是Linux命令大全手册里最该看的部分。第一次打开man会有点懵先记四个按键空格翻页、/搜索关键字、n跳到下一个匹配、q退出。够用了。很多Linux面试题问到某些冷门选项时答案并不是考你背得多熟而是看你知不知道怎么用man去查。这背后的逻辑是Linux命令太多了没人能全部背下来但所有人都应该知道去哪查。2.2 先练这几个终端操作在背任何命令之前先练几个终端操作它们能让你少打一半字、少踩一半坑。第一个是Tab补全。输入mkdi然后按Tab终端会自动补全成mkdir如果有多条候选按两次Tab会列出所有可能。这是减少手误最有效的习惯没有之一。第二个是方向键。按上箭头可以翻出上一条历史命令再按回车直接执行。如果历史命令太多可以按CtrlR进入反向搜索输几个关键字就能找到以前敲过的那条命令。第三个是中断控制。CtrlC中断当前正在运行的命令CtrlL清屏效果和clear一样CtrlD退出当前Shell会话。命令没输完时是不会执行的只有按回车才会执行所以输错一半不用慌按CtrlC重新来就行。2.3 看懂提示符再敲命令登录后看到的提示符大约长这样[userhost ~]$这句话信息量很大当前用户是user、主机名是host、当前目录是家目录。Linux里~表示当前用户的家目录root用户的家目录是/root普通用户是/home/用户名。提示符最后一字符如果是#说明当前是root身份如果是$说明是普通用户。新手最需要记牢的一点是Linux没有回收站rm删了基本找不回来。所以你会经常听到一句忠告——别拿root用户乱敲rm。这不是吓人我见过把服务器上整个配置目录删掉的案例。日常练习尽量用普通用户需要管理员权限时再用sudo。2.4 命令大全真的不用背网上搜“Linux常用命令大全运维”或者“Linux常用100个命令”出来的清单确实很全但那是字典不是课本。你不需要一遍全背只需要把频率最高的几十个命令练成肌肉记忆。怎么练给自己布置一个小场景。比如创建一个项目目录在里面建文件、复制文件、改文件名、删除文件。这一条流程跑通第一批命令就掌握了。后面再遇到具体需求比如查日志、看端口、编程序再按需补充。Linux命令行这东西用进废退背得再熟不用也会忘。3. 我在哪、这里有什么pwd、ls、cd是Linux的“三体脑回路”3.1 pwd先定位再动手很多Linux教程把pwd排在第一个因为服务器上最常出的问题就是你在/tmp下面创建了一堆文件过两天回来找不到了或者你打算删当前目录的日志却忘了自己其实站在根目录。pwd是print working directory直接告诉你当前所在路径。pwd输出示例/home/zhangsan如果进了一个由符号链接创建的目录pwd默认显示的是逻辑路径。想看清物理真实路径可以加-P参数pwd -P这个参数面试偶尔会问实际中不常用但知道它存在就够了。3.2 ls目录里的内容一眼看光ls应该是使用频率最高的命令了。裸敲ls只显示文件名配合选项才能看到完整信息。最实用的几个选项我列一下选项作用-l长格式显示权限、属主、大小、修改时间-a显示隐藏文件也就是以.开头的文件-h人类可读大小显示K、M、G常和-l合用-t按修改时间排序-S按文件大小排序-F在目录名后面加/一眼区分文件和目录-R递归列出子目录内容-d只看目录本身不展开目录内容实际使用中最常用的是ls -lahls -lah输出里那串-rw-r--r--就是权限位放到后面第六节专门讲。看文件大小时一定要带上-h不然一堆字节数字看得人头晕。想在服务器上快速了解一个目录的构成我一般就是pwd ls -lh先搞清自己在哪再看这里有什么。3.3 cd切换目录的几种姿势cd是最能体现Linux路径思路的命令。绝对路径从根目录/写起比如cd /var/log相对路径从当前目录写起比如cd ../logs。这里有几个符号必须记牢.表示当前目录..表示上一级目录~表示家目录-表示上一次所在目录。cd /etc # 绝对路径 cd ../logs # 相对路径 cd ~ # 回家目录 cd - # 回到上一次的目录cd -是个好东西。在两个目录之间来回切换时不用重复输入一长串路径。比如你刚才在/etc/nginx然后去了/var/log想再回到/etc/nginx直接cd -就行。另外Linux根目录下那些/bin、/etc、/home、/usr、/var目录你以后会慢慢熟悉。现阶段只需要记住一个大概/etc是配置文件集中地/var/log是日志集中地/home是普通用户家目录所在地。做日志排查时第一反应就应该是去/var/log看。3.4 file判断文件类型别只看后缀Linux不靠扩展名区分文件类型。一个没有后缀的文件可能是文本、可执行程序、压缩包甚至是一个脚本。用file命令可以读取文件的头部信息来判断真实类型。file app.bin输出示例app.bin: ELF 64-bit LSB executable, x86-64, dynamically linked拿到一个来历不明的文件先file一下再决定怎么处理这个习惯在运维排错时特别有用。很多人习惯用后缀猜比如看到.jar就以为是Java包其实.jar本质就是个zip压缩包只是被Java工具使用而已。在Linux里类型判断永远以文件内容为准。4. 创建、复制、移动、删除文件操作的胆大与心细4.1 mkdir和touch造目录、造文件mkdir用来创建目录最常用的是-p参数可以一次性创建多级目录mkdir -p ~/learn/project/docs如果不加-p父目录不存在时会直接报错。另一个常用参数是-v创建时会把目录名打印出来方便确认mkdir -v ~/learn/project/docstouch有两个作用文件不存在时创建空文件文件存在时更新它的修改时间。用它快速造测试文件特别方便touch readme.txt删除空目录可以用rmdir但它只能删空目录实际使用率很低。后面删除目录基本都用rm -r。4.2 cp复制目录一定要带 -rcp的基本用法是cp 源文件 目标路径。复制目录时如果不带-r终端会直接报错cp: -r not specified; omitting directory。这是新手第一大坑几乎天天有人踩。正确的复制目录命令cp -r dir1 dir2我常用的几个参数-a归档复制保留权限、属主、时间戳常用于备份。-i覆盖前询问防止手滑覆盖同名文件。-v显示复制过程。-p保留原文件的属性。比如想把~/learn/project整体备份成project.bak用cp -a ~/learn/project ~/learn/project.bak这样目录内容、权限、时间戳都会保留。不要小看这个习惯生产环境改配置前先备份就是靠cp这一条命令撑起来的。4.3 mv同一个命令两种效果mv既能移动也能重命名。mv a.txt b.txt是重命名mv a.txt dir/是移动到目录里。如果目标位置已经存在同名文件mv默认直接覆盖不会给任何提示所以覆盖重要文件前景再三确认。mv比cp快得多因为在同一文件系统下它只是修改了目录项并不复制数据。如果从一个文件系统移动到另一个文件系统比如从/tmp移动到另一个挂载磁盘实际上会发生一次“复制删除”速度差异会非常明显。知道这个原理你就明白为什么“移动大文件”有时候会卡很久。4.4 rm先看清楚再删rm是Linux里最需要敬畏的命令。删文件用rm file删目录用rm -r dir-f表示强制删除不提示。如果你搜的是“Linux删除文件夹命令”答案就是rm -r并不是rm -rf才叫删文件夹。-f只是去掉确认提示并不是删除目录的必需参数。真正危险的是组合命令比如rm -rf /和rm -rf ./*。前者会试图清空整块硬盘后者配合通配符时一旦当前目录理解错误会删掉一大堆不该删的东西。我一直建议新手养成两个习惯。第一给rm设置别名让每次删除都先确认alias rmrm -i把这个写进~/.bashrc以后每次rm都会先问一遍。第二删除前先看看通配符到底匹配了哪些文件。比如要删除所有*.tmp文件先执行ls -l *.tmp确认列表没问题再执行rm *.tmp这一步花两秒钟省下的可能是好几个小时的恢复时间。如果你是在公司服务器上干活能加ls确认就别直接rm。很多事故的根本原因都是少看了一眼当前目录。4.5 通配符让批处理生效通配符是Shell在解析命令时自动展开的不是命令本身的功能。常用的有三个*匹配任意多个字符?匹配任意一个字符[abc]匹配括号中任意一个字符。举个例子rm *.log # 删除所有.log文件 ls file?.txt # 匹配 file1.txt、fileA.txt不匹配 file10.txt touch a[0-9].txt # 创建 a0.txt 到 a9.txt注意星号默认不匹配以.开头的隐藏文件。所以rm *不会把.bashrc删掉但会把当前目录下所有非隐藏文件删掉依旧要谨慎。通配符展开后的结果你可以先用echo打出来看echo *.log看到实际匹配了什么再决定要不要执行删除。跟着做一遍最安全的小实验mkdir -p ~/learn/project cd ~/learn/project touch readme.txt cp readme.txt readme.bak mv readme.bak readme-v2.txt rm readme-v2.txt这条流程跑完创建目录、创建文件、复制、改名、删除就都练到了。5. 查看文件内容从cat到tail -f日志排查的基本功5.1 cat小文件随便看大文件别硬看cat适合查看小文件也适合合并文件。最简单常用的场景是看系统版本信息cat /etc/os-releasecat还可以加-n输出行号cat -n file.txt但如果是几百MB的日志直接cat会把整个文件内容刷到终端上轻则卡顿重则让你分不清重点。面对大文件请使用less。5.2 less大文件查看必备less专门用来一页一页看文件。基本按键是空格翻下一页b往上翻g跳到文件开头G跳到文件末尾/搜索关键字n跳到下一个匹配位置q退出。less /var/log/syslog这里要提醒一下less的键盘操作在man手册里同样适用。所以你会用less看日志基本就会用man查命令说明这套操作是通用的。刚开始记不住太多按键没关系只记空格、/、n、q四个就足以干活了。5.3 head和tail只看头尾高效定位head默认显示前10行tail默认显示后10行。可以加-n指定行数head -n 5 file.txt tail -n 20 file.txt排查日志时错误信息一般出现在文件末尾所以tail用得比head多得多。tail最强大的场景是tail -f持续跟踪文件新增内容。比如应用日志一直在写入你就可以用tail -f app.log看到新日志一行一行刷出来按CtrlC退出跟踪。这是Linux日志排查的基本功也是运维日常里离不开的操作。新手常问“为什么我tail了半天日志没更新”遇到这种情况先看路径对不对再看当前用户有没有读取权限最后用ls -lh看文件时间戳有没有变化。这三步走下来基本能定位掉90%的问题。5.4 grep在一堆文本里捞针grep用来搜索文本关键字是Linux排查问题绕不开的命令。基础用法grep keyword file.txt常用参数参数作用-i忽略大小写-n显示行号-v反向匹配显示不包含关键字的行-r递归搜索目录-c只统计匹配行数比如从日志里过滤出所有ERROR并显示行号grep -n ERROR app.log如果只想统计数据出现次数grep -c ERROR app.loggrep配合正则表达式可以干很多高级事情但刚开始不需要钻太深。先把最基础的精确匹配、忽略大小写、递归搜索练熟已经能解决绝大多数场景。5.5 管道和重定向让命令搭起来干活管道符|是Linux命令组合的核心。它的作用是把左边命令的输出作为右边命令的输入。比如grep -i error app.log | tail -20这条命令先把所有包含error的行过滤出来再取最后20行。比起直接cat整个日志然后人工翻找不知道省了多少眼睛。重定向和也很常用。会覆盖写入会追加写入。比如把当前目录列表保存到文件ls -l filelist.txt再往文件里追加一行路径echo /usr/local/bin paths.txt重定向最需要注意的是一旦对配置文件执行了原文件内容会瞬间被清空。我见过有人想往配置里追加内容结果写错成单箭头整个配置直接没了。所以改配置前先备份一份比如cp nginx.conf nginx.conf.bak再动手。6. 权限和用户ls -l里那些字符到底在说什么附useradd/sudo速记6.1 权限位十个字符拆开看回到ls -l的输出第一个字段有十个字符比如-rw-r--r--。第1个字符表示文件类型-普通文件d目录l符号链接。后面9个字符分成三组每组三个文件属主u、所属组g、其他用户o。每组里r代表读w代表写x代表执行-表示没有对应权限。数字表示法里r4w2x1。所以rwxr-xr-x是755rw-r--r--是644。目录必须有x权限才能进入所以chmod 755 script.sh的意思是属主可读可写可执行其他人可读可执行。修改权限用chmodchmod 755 script.sh chmod x script.sh修改属主和属组用chownchown zhangsan:zhangsan app.log目录批量修改时加-R但生产环境要慎用别一次性把一堆文件的属主全改了容易误伤。6.2 whoami、id和sudo的意义刚登录系统时先执行下面三条命令能快速确认自己的身份whoami id groupsid会显示uid、gid和所属组groups会显示所有附加组。很多“为什么我不能执行”的问题最后答案都是“你不在正确的组里”。root是最强管理员但我建议平时别一直用root。需要管理员权限时用sudo 命令来提升。注意sudo不是随便就能用的用户必须被加入sudo组Ubuntu/Debian或wheel组CentOS/RHEL否则会报错。这个“授权”过程往往就是新手第一次接触用户管理的契机。6.3 新建用户四步搭建一个可登录账号“Linux新建用户”是基本指令里绕不开的一块也是运维场景的基础操作。给你一台刚装好的Linux要求新建一个用户并授权标准流程是四步。第一步创建用户并指定家目录和Shellsudo useradd -m -s /bin/bash zhangsan-m会创建家目录/home/zhangsan-s指定登录Shell为bash。第二步设置密码sudo passwd zhangsan按提示输入两次密码即可。第三步授予sudo权限。Ubuntu/Debian用sudo usermod -aG sudo zhangsanCentOS/RHEL用sudo usermod -aG wheel zhangsan注意-aG里的-a是“追加”的意思不加-a可能会把用户从其他组里踢出去这个坑我见过不止一次。第四步验证是否成功id zhangsan su - zhangsanid看组信息su - zhangsan切换到该用户能顺利切过去说明账号没问题。删除用户时sudo userdel -r zhangsan-r会同时删除家目录。不带-r只删账号会留下家目录和一些文件。项目交接时要不要删家目录一定要先问清楚再操作。另外注意Debian/Ubuntu还提供了一个交互式的adduser它会引导你填各种信息而useradd是底层命令参数更灵活。CentOS/RHEL里adduser基本等价于useradd。所以看教程时先认清自己的发行版再决定用哪条命令。6.4 两个高频权限坑坑1文件就在眼前却提示Permission denied。最常见的原因不是文件本身没权限而是父目录权限不足。比如/home/zhangsan是700那其他用户即使能看到文件名列表也进不去目录。记住进入目录需要x权限读取目录列表需要r权限两者不是一回事。坑2脚本怎么执行bash script.sh能跑但./script.sh报Permission denied。原因是脚本没有执行权限。解决方法chmod x script.sh再执行./script.sh这个区别在Linux面试题里几乎必考。其实不只是面试现实中很多新人也是卡在这一步以为脚本写得有问题其实是权限没给。一个很有效的练习方法是自己新建一个测试用户然后用普通用户身份在~/learn目录里把前面所有命令都走一遍再用ls -l观察每个文件权限的变化。这样一遍跑下来你对Linux基本指令的理解会比背十遍命令大全扎实得多。
返回列表