资讯动态

Linux基础指令入门:文件目录操作与权限管理实战指南

发布时间:2026/10/17 17:02:55 来源:尧图企业网站定制
很多第一次接触 Linux 的朋友看到黑底白字的终端窗口第一反应往往是“这密密麻麻的指令到底怎么记”。我当年也是这样买的第一台云服务器到手连ls和cd都分不清更别提那些带-的参数了。但用了几年之后回头看真正高频的 Linux 基础指令其实就那二三十个一点都不玄乎。这篇内容就聚焦在最常用的文件、目录、查看和权限指令上当作你进入 Linux 世界的“第一张地图”。这篇东西适合谁刚买了云服务器不知道怎么操作的小白、转行做后端或运维的新人、以及想把本地开发环境玩明白的同学。我会先把指令的组合逻辑讲清楚再逐条拆解pwd、cd、ls、mkdir、cp、mv、rm、cat、less、head、tail、grep、find、chmod这些最核心的指令。每条都会带上实际用法和踩坑提醒尽量让你读完就能直接在终端里敲起来。1. 先搞清楚Linux指令的几个底层逻辑1.1 指令不是用来背的是用来查的我见过不少人把学 Linux 当成背单词拿着一份指令表从头抄到尾结果三天就忘光。实际上Linux 指令最强大的地方在于“自带说明书”你不需要记住所有选项只需要知道“有这么个东西”然后随时查。每条指令后面加上--help就能看到这份指令的用法摘要。比如想查ls的用法直接敲ls --help屏幕上会输出一大段英文说明包括每个参数也叫选项的含义。如果--help给的信息不够还可以用man ls打开完整的手册里面会有更详细的说明、示例甚至历史背景。技巧man打开的页面里按q退出按/可以搜索内容。这个习惯一定要养成比收藏一百篇教程都管用。另一个查指令的方法是用type判断指令类型。比如type ls会告诉你ls是 shell 内置命令还是外部程序。这些细节现在不需要深究先记住一个原则遇到不懂的指令先指令 --help不要立刻打开搜索引擎。1.2 理解“命令-选项-参数”三段式结构Linux 指令不是魔法它有一个统一的骨架拆开看就三个部分命令本身、选项、参数。用一条实际的指令来拆解ls -l /home/userls是命令名表示“想做什么”这里是列出目录内容-l是选项表示“怎么做”这里是用长格式显示更多信息/home/user是参数表示“对谁做”这里是要查看的目录路径。选项有很多种写法。短选项通常是一个字母比如-l、-a多个短选项可以合并写成ls -la和ls -l -a效果一样。长选项一般是双横线加单词比如ls --all等价于ls -a。参数不一定非得是路径也可能是一个字符串、一个数字具体要看指令的用途。还有一个容易被忽略的细节选项和参数的位置。大部分 GNU 工具允许选项放前面或后面比如ls /home/user -l也可以运行但为了统一和避免奇怪的解析问题建议遵循“命令 选项 参数”的顺序这也是我在教学和团队协作中一直推荐的写法。1.3 路径、工作目录和提示符的基本认知敲指令之前必须理解 Linux 的文件系统结构。Linux 的目录是一个倒挂的树最顶层是/根目录下面挂着/home、/etc、/var、/usr等系统目录。你每次在终端里敲指令时都有一个“当前所在位置”叫工作目录。终端提示符会透露很多信息比如userhost:~$这表示当前用户名是user主机名是host~代表当前目录是家目录$表示普通用户权限。如果最后一个字符是#说明你是 root 用户或当前执行者拥有高权限操作要格外小心。路径分成两种。绝对路径就是从根目录写起的完整路径比如/etc/nginx/nginx.conf不管人在哪指的都是同一个地方。相对路径则是相对于当前目录的路径比如当前在/home/user那么cd Downloads和cd /home/user/Downloads效果一样。理解这个区别是后续所有操作的基础。2. 入门第一梯队定位与查看2.1 我是谁、我在哪pwd 与用户信息刚登录服务器时最常出现的困惑是“我现在到底在哪”。这时候用pwd指令全称是 print working directory一敲就会输出当前工作目录的绝对路径。这个指令非常简单但几乎每天都会用。pwd # 输出示例/home/yourname还有一个关联指令whoami用来查看当前登录的用户名。配合id可以看用户 ID 和所属用户组whoami id为什么要强调“查看当前用户”因为 Linux 的权限模型是基于用户的。不同的用户对同一个文件的读写权限可能完全不同。用 root 登录操作时几乎不会遇到权限报错但这也意味着你拥有破坏整个系统的能力。所以我建议日常工作尽量用普通用户登录需要执行管理操作时再用sudo这也是后面讲权限管理时的基本原则。pwd配合ls能让你快速定位资源我习惯在进入一个新环境后的第一件事就是执行pwd ls -la先弄清楚自己在哪里、这里有什么。这就像到了一个新城市先打开地图先看坐标再看街区。2.2 切换目录cd 的多种姿势cd是 change directory 的缩写作用是切换工作目录。它的用法看似简单但有几个非常实用的扩展用法值得专门说。最基本的是cd /path/to/dir # 切换到指定绝对路径 cd Downloads # 切换到当前目录下的 Downloads cd .. # 返回上一级目录 cd ../.. # 返回上两级目录 cd ~ # 回到当前用户的家目录 cd - # 切换到上次所在的目录最后一个cd -特别适合在两个目录之间频繁切换的场景比如你在编辑配置文件和查看日志之间来回操作用cd -一下就能跳回去比重复输入完整路径高效得多。还有一个容易被忽略的点cd后面如果不跟任何参数默认就是cd ~回到当前用户的家目录。如果在sudo su切换用户后执行cd会回到那个用户的家目录而当前终端所在位置并不会因为su自动改变这个坑我在后面“常见问题”里再展开说。重要提醒Linux 的目录名和文件名是区分大小写的。cd downloads和cd Downloads是完全不同的两个地方手滑输错就会出现No such file or directory。这一点习惯 Windows 的同学要格外警惕。2.3 列出文件ls 的常用选项拆解ls应该是使用频率最高的指令没有之一。它默认列出当前目录下的文件和目录但不包含隐藏文件。所谓隐藏文件其实就是在文件名开头带.的文件比如.bashrc。先看基础用法ls # 简略列出当前目录内容 ls -l # 长格式列出包含权限、所有者、大小、修改时间 ls -a # 显示所有文件包括隐藏文件 ls -la # 长格式显示所有文件最常用 ls -lh # 长格式显示并把文件大小转换为人类可读的 K/M/Gls -lh里的-h是 human-readable 的意思。不加-h时一个大文件会显示成一串数字字节数比如 20971520很难一眼看出是 20M加上-h后显示为 20M直观很多。如果需要对文件名排序查看可以用ls -lt # 按修改时间从新到旧排序 ls -ltr # 按修改时间从旧到新排序r 表示 reverse ls -lS # 按文件大小从大到小排序ls还支持通配符匹配比如想知道当前目录下所有以.log结尾的文件ls *.log*表示匹配任意数量字符?表示匹配单个字符。这个通配符技巧不只适用于ls几乎所有命令后面接文件名时都可以用学会它是提高效率的重要一步。3. 核心第二梯队文件与目录的增删改查3.1 创建目录和文件mkdir、touch 的细节mkdir用来创建目录全称 make directory。最基础的用法是mkdir newfolder但实际工作中我推荐你熟练掌握-p和-v选项。mkdir project mkdir -p project/src/components mkdir -v project/docs-p的作用是“递归创建父目录”。比如你执行mkdir -p a/b/c如果a和a/b都不存在它会一次性全部创建出来不会报错。没有-p时只能创建单层目录如果父目录不存在就会提示No such file or directory。这个选项还有另一个妙用如果目录已经存在加-p不会报错适合写在脚本里保证目录必然存在。touch指令常被用来创建空文件但它的真实作用是修改文件时间戳。touch newfile.txt之后如果文件不存在会创建一个空文件如果文件已存在则更新文件的访问时间和修改时间为当前时间。touch config.yml touch -d 2024-01-01 08:00:00 oldfile.txt # 把时间修改成指定值创建文件还有一个更推荐的方式是使用重定向比如echo xxx file.txt或者直接 file.txt创建空文件但touch在批量初始化一堆文件时最方便比如touch index.html style.css app.js3.2 复制与移动cp、mv 的常见陷阱cp负责复制文件或目录全称 copy。日常最常见的坑是复制目录时忘记加-r。假设你想把整个project目录复制成project-backupcp project project-backup # 这会报错cp: -r not specified; omitting directory project正确的写法是cp -r project project-backup这里的-r是 recursive表示递归复制目录内所有内容。如果目标目录已经存在cp -r project project-backup会把project作为子目录放进project-backup下面如果你希望复制成指定名称需要先确认目标不存在。cp还有一些值得养成习惯的选项cp -i file.txt dest/ # 覆盖前询问交互模式 cp -v file.txt dest/ # 显示复制过程 cp -a source/ dest/ # 归档模式保留权限、时间戳、链接等属性mv是 move 指令既能移动文件也能重命名。很多人会把“移动”和“重命名”当成两件事其实mv的统一语义是“把文件路径改成另一个路径”。当你原地变更文件名时就是重命名mv oldname.txt newname.txt mv /path/to/file.txt /target/dir/ mv -i file.txt dest/ # 覆盖前询问使用mv时要注意目标目录是否已存在同名文件。默认情况下如果目标位置有同名文件mv会直接覆盖不会问一句。加-i可以在覆盖前得到确认提示批量操作时还能用-n禁止覆盖这些保护选项在写自动化脚本时非常有用。3.3 删除rm 的安全意识与正确用法rm是 remove 的缩写用来删除文件或目录。这条指令哪怕讲得再多也不过分因为它是 Linux 里最容易造成破坏的东西之一。基础用法rm file.txt # 删除文件 rm -r folder/ # 递归删除目录 rm -f file.txt # 强制删除不询问 rm -rf folder/ # 递归强制删除非常危险rm -rf网上被称为“删库跑路命令”不是开玩笑的。一旦在错误目录下执行比如rm -rf /或者rm -rf .可能几秒钟内系统就被清空而且 Linux 默认没有“回收站”的概念删除后很难恢复。我的个人习惯是在服务器上尽量少用rm -rf能不用就不用。如果只是为了删除一个项目目录我会先在目录上一级执行pwd确认当前路径再敲ls看看目录内容最后才执行删除。甚至可以先用mv把那个目录改名成一个trash文件夹比如mv old-project /tmp/old-project-deleteme过几天确认没问题再真正删。这种方式成本低却能避免很多悲剧。温馨提示rm -f里那个-f是 force它的意思是“不要询问我”而不是“我可以随便删”。很多误删除事故都是因为加了-f后手滑所以强烈建议核心机器上不要随便用rm -f。另外删除文件时尽量使用相对路径或完整确认过的绝对路径不要用很短的通配符。比如rm -rf test*如果当前目录里有一个文件叫test之外还匹配到别的目录可能删掉你意想不到的东西。4. 内容查看与检索读文件是基本功4.1 完整查看与分页查看cat、less在 Linux 上查看文件内容最直接的是cat全称 concatenate它会把文件内容完整输出到终端。适合内容较少的配置文件比如cat /etc/hostname cat ~/.bashrccat有一些常用扩展cat -n file.txt # 显示行号 cat -A file.txt # 显示隐藏控制字符比如 Windows 换行符如果文件内容很长比如几千行直接用cat会让终端被刷屏根本来不及看。这时候应该用lessless huge_log.txtless是交互式分页查看器进入后可以用方向键上下滚动用PageUp/PageDown翻页按/输入关键词搜索按n跳到下一个匹配项按q退出。这些操作对于查看日志文件特别实用。还有一个相对适合临时浏览的指令是more但在现代系统里less功能更强大我建议直接学less不用再纠结more。如果你的屏幕内容已经多到溢出按Shift PageUp不一定能翻回去养成用less看大文件的习惯能少踩很多坑。4.2 只看头和尾head、tail 与日志跟踪生产环境里最常见的文件操作不是查看全文而是查看文件开头多少行、结尾多少行或者实时跟踪新写入的内容。head和tail就是为这种场景设计的。head -n 20 file.txt # 显示前 20 行 tail -n 30 file.txt # 显示末尾 30 行 tail -f app.log # 实时跟踪文件新增内容tail -f是我调试服务时最长用的一条指令。当你启动了一个 Web 服务想看它实时输出的日志一个终端窗口执行tail -f app.log另一个窗口去触发请求或修改配置就能实时看到日志滚动。按Ctrl C可以退出跟踪不影响服务运行。head和tail还可以组合使用。比如想看一个 10000 行文件里的第 5000 到 5010 行可以写成head -n 5010 file.txt | tail -n 10这里就引出了管道符|的概念。管道的作用是把前一条指令的输出作为后一条指令的输入。head输出前 5010 行tail再从这些行里取最后 10 行自然就得到目标区间。这个组合技巧在分析大文件或日志时非常常用。4.3 用grep和管道做内容检索如果说ls是最高频的指令那grep应该就是最强大的文本搜索工具。grep可以在文件内容中匹配指定模式并输出匹配到的行。grep error app.log grep -i error app.log # 忽略大小写 grep -n error app.log # 显示匹配行行号 grep -v debug app.log # 反向匹配输出不包含 debug 的行 grep -c error app.log # 统计匹配的行数grep经常跟管道搭配使用。比如你想看进程列表里有没有某个程序可以ps aux | grep nginx再比如查看某个指令的帮助帮助信息里与“递归”相关的行cp --help | grep -i recursive这种“一条指令的输出给下一条指令过滤”的模式是 Linux 命令行组合拳的精髓。它把简单的工具拼接起来解决复杂问题这也是我为什么强调要先掌握基础指令因为它们都是组成复杂操作的最小积木。grep还支持正则表达式做更高级匹配但现在基础阶段先用好简单字符串搜索就够了。能熟练使用grep -r在目录里递归搜索内容已经可以应对大多数日常排查需求。grep -r TODO ~/project/src5. 权限管理与文件查找进阶基础5.1 理解权限位ls -l 输出的每一列ls -l输出的内容看着复杂其实只要拆开就很简单。以这条为例-rw-r--r-- 1 user group 1024 Jan 1 12:00 file.txt第一列是文件类型和权限位。第一个字符表示类型-普通文件d目录l符号链接。后面九个字符分成三组每组三个字符分别表示“文件属主user”、“属主所在的组group”、“其他用户others”的权限。每组里r代表读w代表写x代表执行-代表没有对应权限。例如-rw-r--r--表示这是一个普通文件属主有读写权限组和其他用户只有读权限。如果这个文件是脚本但没有x权限直接执行./file.txt会提示Permission denied通常需要先给它加执行权限。第二列是硬链接数或目录子目录数普通文件一般是1。第三、四列分别是文件属主和所属组。第五列是文件大小第六、七、八列是修改时间和文件名。理解了这些字段ls -l就不再是一串乱码而是一张完整的文件信息表。5.2 chmod数字权限的原理与使用修改文件权限的指令是chmod全称 change mode。最直观的用法是符号模式比如给脚本加执行权限chmod x run.shx表示增加执行权限-x表示移除。更细致地指定对象的写法是chmod ux run.sh表示只给属主加执行权限。u代表属主g代表组o代表其他用户a代表所有人。实际工作中更常用的是数字模式。每类用户的三位权限可以用数字表示r记作 4w记作 2x记作 1把它们相加得到一个 0 到 7 的数字。读写权限是426读和执行是415完全无权限是0。三位数字分别对应属主、组、其他用户chmod 755 run.sh # 属主 rwx (7)组 r-x (5)其他 r-x (5) chmod 644 file.txt # 属主 rw- (6)组 r-- (4)其他 r-- (4)为什么755是脚本和可执行文件的常见权限因为属主应该可以读写和运行而其他人通常只需要运行权限不需要修改。644是普通配置文件的常见权限属主可以改其他人只能读。修改目录权限时如果要对目录及其内部所有文件一起修改可以加递归选项chmod -R 755 /path/to/folder注意chmod -R会把目录内所有文件的权限都改掉有时并不符合预期。如果只想给目录本身改权限不加-R如果目录里有很多脚本还要考虑执行权限与读取权限的配合不要图省事。5.3 find查找文件与实用组合你经常会在服务器上忘记某个配置文件放哪儿了这时候就轮到find出场。find按文件名或其他属性在指定目录下递归查找find /etc -name nginx.conf find /home -type f -name *.log find / -type d -name mysql 2/dev/null-name表示按文件名精确匹配支持通配符。-type f限定只查普通文件-type d限定只查目录。最后那个2/dev/null是把查找过程中的权限报错信息丢弃因为find在遍历系统目录时会遇到很多无权访问的目录错误信息会刷屏丢弃后看起来干净很多。find还能按时间筛选比如查找最近一天内修改过的文件find /var/log -mtime -1-mtime -1表示修改时间在 1 天以内7表示超过 7 天。这个选项在清理过期日志时很好用可以先查出来确认再配合rm或mv处理。find和grep经常被混淆。简单区分find负责按“文件名/属性”找文件在哪grep负责按“内容”找匹配的行。想在一个项目里搜索包含某个关键词的文件可以用组合grep -r Controller --include*.php /var/www/html或者先找出文件再搜索内容比如find /var/www -type f -name *.php | xargs grep -l Loginxargs可以把你输入的内容作为参数传给后面的指令这是管道用法更高级的延伸。现阶段先了解有这个组合即可随着使用慢慢就会熟悉。5.4 善用软链接ln -sLinux 里的软链接symbolic link相当于 Windows 里的快捷方式。用ln -s创建后你访问这个链接就相当于访问目标文件。ln -s /data/www/html /home/user/html_link ln -s nginx.conf nginx.conf.link创建后ls -l会看到链接类型为l文件名后面带-指向真实文件。软链接最常见的场景是把磁盘上的大数据目录链接到根目录空间不够的位置。假设你发现/分区快满了而/data挂在另外一块盘想把日志目录挪过去但程序路径写死在/var/log/nginx这时候可以先迁移数据再创建软链接mv /var/log/nginx /data/logs/nginx ln -s /data/logs/nginx /var/log/nginx这样程序不需要任何配置改动访问/var/log/nginx其实就指向了新的位置。软链接删除时要小心rm link_name只会删除链接不会删除目标。但是如果在链接名后面加了斜杠比如某些通配符场景可能会直接操作到真实目录因此删除软链接目录前最好先确认链接状态。6. 新手最容易踩的坑与自查清单6.1 常见报错解读command not found、Permission denied、No such file or directory终端报错是最直接的老师但新手往往一看到英文就慌。这里把最常见的三条报错翻译成人话command not found系统找不到这个指令。可能是指令拼错了也可能是软件没有安装。比如tar命令都不存在时先确认是否已安装对应软件。也可能是路径问题比如刚安装的软件没有加到系统 PATH 中。Permission denied权限不够。你试图读取无权访问的文件或执行一个没有执行权限的脚本。解决思路是检查ls -l的权限位或者用sudo提升权限但不要盲目使用sudo。No such file or directory路径不存在。原因可能是路径写错、文件名大小写不对或者在你当前目录下根本没有这个文件。排查这些报错时我通常先执行pwd确认位置再用ls -la看看文件是否真的存在最后才去检查权限和软件依赖。这比打开搜索引擎重新搜索指令效率高得多。6.2 实操心得别乱用sudo、注意通配符、备份代替rm有几条经验是吃亏换来的希望你可以提前避开。第一条不要所有指令都加sudo。我见过有人为了省事直接sudo cat甚至sudo ls这是非常坏的习惯。sudo是临时的最高权限滥用会导致你无法判断哪些操作需要提权也容易在错误目录下执行破坏性指令。正确的做法是先用普通权限执行遇到Permission denied再思考是我真的需要提升权限还是目标目录权限设置不合理第二条通配符在删除和移动时要格外小心。rm -f *.txt本身没什么问题但如果你在目录里同时有.txt和.txt.bak通配符*.txt并不会匹配到后者你可能以为删掉了所有文本备份实际上漏掉了一部分。更危险的是rm -f * .txt这种误敲空格的情况*会先展开成当前目录所有文件然后.txt被当成另一个参数直接变成删除所有文件。第三条小成本备份永远值得做。复制一个文件只需要cp -r几秒钟删除却是不可逆的。我用过的安全套路是删除前先tar -czvf打包备份或者直接mv到临时目录观察一段时间没问题再清理。尤其在服务器上永远要给自己的操作留一条退路。6.3 一套适合新手的练习顺序学习基础指令不能光看一定要动手。我建议你按照下面的顺序在虚拟机或云服务器上练一遍用pwd看当前位置用whoami看当前用户用ls -la查看当前目录所有文件辨认权限字段用mkdir -p创建多级目录用cd在各个目录之间切换用touch创建几个空文件用echo配合重定向向文件写入内容用cp -r、mv复制和移动文件体验路径变化用less查看一个日志文件用grep过滤关键词用tail -f跟踪日志输出配合另一个终端产生内容用find在你创建的文件中查找用chmod修改脚本权限创建软链接理解链接和真实文件的区别最后回忆一遍哪些指令容易误操作想一想为了避免误操作应该养成什么习惯。这套顺序覆盖了本篇文章讲到的所有核心指令练完一遍后你对终端的基本掌控就算入门了。下一阶段再深入学习tar打包、ps进程管理、systemctl服务管理、vim编辑器和 shell 脚本等就有了扎实的底子。我个人在实际操作中的体会是Linux 指令学起来没有太多捷径但也不需要一口吃成胖子。每天刻意练习几个指令遇到问题先从--help和man中找答案比收藏几十篇教程更有用。尤其是权限和删除这些涉及安全的操作宁可多敲一遍pwd、多看一眼ls -l也别把rm -rf当成顺手的事。等你慢慢建立起对终端节奏的掌控感回头再看这些基础指令会觉得它们就像搭积木一样简单到时你就有能力去折腾脚本、自动化、容器化这些更有趣的东西了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑