适合初学者的 Linux 命令:带有示例的基本终端指南

  1. 首页
  2. 博客
  3. 开发运营

开发运营

适合初学者的 Linux 命令:带有示例的基本终端指南

在您了解几十个命令之前,终端看起来很吓人。了解重要的内容,按照您想要执行的操作进行分组,然后将它们结合起来回答有关日志文件的实际问题。

阅读约 9 分钟
适合初学者的 Linux 命令:带有示例的基本终端指南

要点速览

  • 一小组 Linux 命令 涵盖了大多数日常工作:ls、cd、cp、mv、rm、cat 和 grep。
  • 管道 (|) 连接简单的工具来回答更困难的问题。
  • rm 没有回收站,因此请在按 Enter 之前仔细检查。
  • 当您忘记某个选项时,请使用 man 或 --help。

大多数服务器、容器和云机都运行Linux,它们通常没有图形桌面。这就是为什么学习 Linux 命令 对于开发人员和测试人员来说都是一项非常有用的技能。你不需要记住数百个。几十个就能带你走很长的路。

我们在 Windows 上的 Git Bash 中测试了文件、搜索和管道示例,它提供了相同的核心工具,并且输出来自该运行。我们没有运行权限、服务、包和远程访问的命令,因为它们依赖于真实的 Linux 系统。详细信息可能因发行版而异,因此请检查您自己的系统的文档。

安全开始

您无需安装 Linux 即可进行练习。好的选择包括:

  • Windows: Windows Subsystem for Linux (WSL) 或 Git Bash 了解基础知识。
  • macOS:内置终端,其命令非常相似,尽管某些选项有所不同。
  • 任何系统:容器。我们的 Docker 初学者教程 展示了如何开始。

在一次性文件夹中进行练习,并记住 Linux 中的所有内容都是区分大小写的:Notes.txt 和 notes.txt 是不同的文件。

命令剖析

ls -l /var/log
^  ^  ^
|  |  argument: what to act on
|  option: how to behave
command: what to run

短选项通常可以组合,因此ls -l -a和ls -la是相同的。长选项使用两个破折号,如--help中所示。如需帮助,请运行 man ls 获取完整手册,或运行 ls --help 获取摘要。按 q 离开手册页。

命令 它的作用
密码 打印当前文件夹
LS 列出文件
ls-la 列出所有文件(包括隐藏文件)及其详细信息
光盘文件夹 移动到文件夹中
光盘.. 上升一级
光盘~ 转到您的主文件夹
光盘- 返回上一个文件夹

按 Tab 自动完成文件名,按向上箭头返回之前的命令。这两个习惯比这里的任何其他提示节省更多时间。以点开头的文件名(例如 .env)是隐藏的,ls 仅以 -a 开头显示。

管理文件和文件夹

命令 它的作用
mkdir -p 项目/日志 创建文件夹,包括父文件夹
触摸笔记.txt 创建一个空文件
cp a.txt b.txt 复制文件
cp -r src/备份/ 复制文件夹
mv a.txt b.txt 重命名或移动文件
rm a.txt 删除一个文件
rm -r 文件夹/ 删除文件夹及其中的所有内容

这是我们跑步的一个简短的会议:

$ mkdir -p project/logs
$ cd project
$ touch notes.txt
$ ls
logs  notes.txt

$ cp notes.txt backup.txt
$ mv backup.txt old.txt
$ ls
logs  notes.txt  old.txt

$ rm old.txt
$ ls
logs  notes.txt

提示: rm不使用回收站,删除的文件一般都没有了。请特别小心 rm -r 和通配符。首先使用相同的模式运行 ls,以准确查看匹配的内容,如果您想要每个文件都有提示,请使用 rm -i。

查看文件内容

命令 它的作用
猫文件 打印整个文件
更少的文件 滚动浏览长文件(q 退出)
head -n 5 文件 显示前五行
尾-n 5 文件 显示最后五行
tail -f 文件 跟随新行的书写
wc -l 文件 计数行数

对于接下来的几个示例,我们创建了一个小日志文件:

$ cat logs/app.log
ERROR db down
INFO started
ERROR disk full
INFO stopped

$ head -n 1 logs/app.log
ERROR db down

$ tail -n 1 logs/app.log
INFO stopped

$ wc -l logs/app.log
4 logs/app.log

tail -f 是一个日常工具,用于在重现错误时查看实时应用程序日志。按 Ctrl+C 停止它。

grep 搜索文件内部,find 搜索文件本身:

$ grep ERROR logs/app.log
ERROR db down
ERROR disk full

$ grep -c ERROR logs/app.log
2

$ find . -name "*.log"
./logs/app.log
选项 含义
grep -i 忽略大小写
grep -r 递归搜索文件夹
grep -n 显示行号
grep -v 显示不匹配的行
grep -c 计算匹配行数

管道和重定向

这就是使命令行如此强大的想法。每个工具只完成一项小工作,然后将它们连接起来:

符号 它的作用
| 将一个命令的输出发送到下一个命令
> 将输出写入文件,替换其内容
>> 将输出附加到文件
2> 将错误消息写入文件
$ echo "hello" > greeting.txt
$ echo "world" >> greeting.txt
$ cat greeting.txt
hello
world

请小心单个 >,因为它会默默地覆盖文件中已有的内容。

一个真实的例子:总结一条日志

我们的日志中每种类型有多少行?组合四个简单的命令给出答案:

$ cut -d' ' -f1 logs/app.log | sort | uniq -c
      2 ERROR
      2 INFO

从左到右阅读:cut 获取每行第一个以空格分隔的单词,sort 将相同的单词分组在一起,uniq -c 对每个组进行计数。排序步骤很重要,因为 uniq 只折叠相邻的重复项。将 | sort -nr 添加到末尾以首先列出最常见的。

当你调查失败时,这种俏皮话很有帮助。它可以快速告诉您错误是否发生了两次或两千次,这对于在 错误报告中 来说是有用的详细信息。

文件权限

运行ls -l,你会看到类似这样的内容:

-rwxr-xr-- 1 asha devs 512 Nov 1 10:00 deploy.sh

在显示文件类型的第一个字符之后,有三组,每组三个字符,分别表示所有者、组和其他人。每个都可以有 r(读)、w(写)和 x(执行)。

命令 它的作用
chmod +x 部署.sh 使脚本可执行
chmod 644 文件 所有者可以读写,其他人可以读取
chmod 755 脚本.sh 所有者拥有完全访问权限,其他人可以读取和运行
chown阿莎文件 更改所有者
须藤命令 以管理员身份运行命令

这些数字加起来:读取为 4,写入为 2,执行为 1。因此 7 表示全部三个,5 表示读取和执行。避免使用 chmod 777,它为每个人提供完全访问权限,作为权限错误的快速修复。而是找到真正的原因。请谨慎使用 sudo,因为它消除了通常保护系统的安全检查。

进程和系统信息

命令 它的作用
辅助键 列出正在运行的进程
top 或 htop 显示 CPU 和内存的实时视图
杀死 1234 要求进程 1234 停止
df-h 显示可用磁盘空间
du -sh 文件夹 显示文件夹的大小
自由-h 显示内存使用情况
nginx 的 systemctl 状态 显示服务的状态
日志控制 -u nginx 显示服务的日志

要安装软件,请使用您的发行版的包管理器,例如 Debian 和 Ubuntu 上的 sudo apt install curl,或 Fedora 和 RHEL 上的 sudo dnf install curl。

档案和远程工作

$ tar -czf logs.tar.gz logs
$ tar -tzf logs.tar.gz
logs/
logs/app.log

在 tar 中,c 表示创建,z 表示 gzip,f 命名文件,t 列出内容。要提取存档,请使用 tar -xzf logs.tar.gz。要与其他机器一起使用,您需要以下三个:

命令 它的作用
ssh 用户@服务器 打开远程终端
scp 文件用户@服务器:/路径/ 通过 SSH 复制文件
卷曲-I https://example.com 显示 URL 的响应标头

这些相同的命令在 Dockerfiles 和 CI/CD 管道 中使用,因此这些知识在 DevOps 工作中得到了回报。

常见错误

  • 使用rm -rf而不看。首先使用pwd检查您的文件夹,并小心路径中的空格。
  • 用 > 覆盖。 当您想要追加时,请使用 >>。
  • 使用sudo运行所有内容。仅在需要时使用它。
  • 粘贴您不理解的命令。 首先阅读它们,尤其是通过管道将下载内容传输到 shell 中的任何内容。
  • 忘记引号。 带有空格的文件名(如 "my file.txt")需要它们。

最后的话

您不会通过阅读终端来了解它。打开 shell,创建一个练习文件夹并运行每个部分的命令。然后尝试使用管道回答一个实际问题,例如日志中最常出现哪个错误。本周从导航和文件开始,接下来添加 grep 和管道,其余的将根据您的需要进行。

常见问题

最基本的 Linux 命令有哪些?

从 pwd、ls、cd、mkdir、cp、mv、rm、cat 和 grep 开始。这些包括移动、管理文件和搜索,这些构成了大多数日常终端工作。

如何在 Windows 上练习 Linux 命令?

使用适用于 Linux 的 Windows 子系统来构建完整的环境,或使用 Git Bash 来获取基础知识。使用 Docker 运行 Linux 容器也效果很好。

Linux 中 > 和 >> 有什么区别?

单个 > 将文件的内容替换为输出。双 >> 将输出添加到文件末尾并保留已有内容。

我可以撤消 rm 命令吗?

一般不会,因为 rm 不使用回收站。恢复工具有时会有所帮助,但并不可靠,因此请先保留备份并仔细检查。

须藤是什么意思?

sudo 以管理员权限运行单个命令。安装软件等任务需要它,因此应小心使用。

继续学习

与Stack Quora合作

需要测试、WordPress 或 SEO 方面的帮助?

我们帮助团队交付更好的软件并发展他们的网站。告诉我们您正在做什么,我们将建议明确的下一步。

继续阅读

更多指南 测试、人工智能和现代开发

喜欢这篇文章吗?选择一个主题并直接跳至我们最新的教程。

人工智能

人工智能幻觉解释:语言模型为何会产生幻觉以及如何减少它

人工智能幻觉解释:它们是什么,为什么语言模型产生它们,常见类型,如何通过基础和提示来减少它们,以及我们进行的简单检查。

阅读文章 →
DevOps

环境变量解释:.env 文件、秘密和配置正确完成

使用我们运行的 Python 示例解释环境变量:读取和设置它们、为什么每个值都是字符串、.env 文件、进程继承、秘密和验证。

阅读文章 →
软件开发

API 速率限制解释:算法、标头和处理 429 错误

API 速率限制通过我们运行的模拟进行了解释:令牌桶、固定窗口、滑动窗口、429 响应、速率限制标头、带回退的重试和测试限制。

阅读文章 →
测试自动化

Python 中的模拟:unittest.mock、补丁以及导致测试谎言的错误

使用unittest.mock 在Python 中进行模拟,经过测试:模拟和return_value、side_effect、修补使用名称的位置、spec 和autospec、模拟日期以及常见错误。

阅读文章 →
软件测试

代码覆盖率解释:行覆盖率与分支覆盖率以及 100% 的真正含义

用真实的coverage.py运行来解释代码覆盖率:行、分支和条件覆盖率,阅读报告,为什么100%覆盖率仍然会错过错误,以及合理的目标。

阅读文章 →
数据库与 SQL

SQL 中的 DELETE、TRUNCATE 和 DROP:差异、回滚以及何时使用它们

DELETE、TRUNCATE 和 DROP 通过经过测试的 SQL 进行了解释:各自删除什么、回滚、触发器、身份重置、速度,以及 PostgreSQL、MySQL、SQL Server 和 SQLite 有何不同。

阅读文章 →
数据库与 SQL

SQL 视图解释:创建、使用和避免陷阱(附示例)

SQL 视图通过我们运行的查询进行解释:创建视图、实时结果、隐藏列、性能、可更新和物化视图、破坏的依赖关系和最佳实践。

阅读文章 →
软件开发

TypeScript 接口与类型:真正的差异,使用编译器进行测试

TypeScript 接口与类型,使用真实编译器进行检查:两者都可以做什么,只有一个可以做什么,声明合并,扩展与交集以及要遵循的简单规则。

阅读文章 →
软件开发

Python *args 和 **kwargs 解释:灵活的函数和清晰的示例

Python *args 和 **kwargs 用我们运行的代码进行了解释:打包和解包、参数顺序、仅关键字和仅位置参数、装饰器和常见错误。

阅读文章 →
软件开发

Python Lambda 函数:语法、实际用途以及何时不使用它们

Python lambda 函数用我们运行的代码进行了解释:语法、使用键排序、映射和过滤器、闭包、后期绑定陷阱,以及何时普通 def 是更好的选择。

阅读文章 →
人工智能

什么是人工智能代理?它们是如何工作的,只需运行一个简单的代理循环

什么是人工智能代理?关于代理循环、工具、内存和护栏的简单指南,以及我们运行的一个小型 Python 循环、真正的风险以及何时简单的聊天机器人是更好的选择。

阅读文章 →
DevOps

监控与可观察性:真正的区别,包括日志、指标和跟踪

监控与可观察性解释:已知和未知的故障、日志、指标和跟踪、检查事件演练、黄金信号、OpenTelemetry 和有用的警报。

阅读文章 →
DevOps

Docker Volumes 与 Bind Mounts:以正确的方式保留容器数据

Docker 卷与绑定挂载解释:为什么容器数据消失、命名卷、绑定挂载、tmpfs、Compose 示例、备份、权限以及何时使用它们。

阅读文章 →
测试自动化

TDD 与 BDD:主要区别、以两种方式构建的一个功能以及何时使用每种方式

TDD 与 BDD 的解释是通过一种双向构建的折扣功能:使用我们运行的代码进行红绿重构、Given-When-Then 场景、工具、权衡以及何时使用每种方案。

阅读文章 →
软件测试

用户验收测试 (UAT):流程、清单和真实示例

用户验收测试解释:谁运行它、它与 QA 有何不同、七步流程、UAT 测试用例模板、清单、签核标准和常见错误。

阅读文章 →
数据库与 SQL

SQL NULL 值解释:IS NULL、COALESCE、NULLIF 和要避免的陷阱

通过我们运行的查询解释了 SQL NULL 值:三值逻辑、IS NULL、COALESCE、NULLIF,聚合、连接和排序如何处理 NULL,以及它悄悄引起的错误。

阅读文章 →
数据库与 SQL

SQL CASE WHEN 语句:语法、实例和常见错误

SQL CASE WHEN 解释了我们运行的查询:简单和搜索表单、条件顺序、SUM 透视、COUNT 技巧、自定义排序、更新和要避免的 NULL 陷阱。

阅读文章 →
软件开发

什么是智威汤逊?通过工作示例解释 JSON Web 令牌

什么是智威汤逊? JSON Web Tokens 解释:这三个部分,在我们运行的代码中构建和篡改的令牌,JWT 与会话,存储,刷新令牌和安全错误。

阅读文章 →
软件开发

JavaScript 事件循环解释:调用堆栈、微任务和计时器以及示例

JavaScript 事件循环用我们运行的代码进行了解释:调用堆栈、任务和微任务队列、为什么 setTimeout 0 不是立即执行、阻塞、饥饿和面试测验。

阅读文章 →
软件开发

Python 生成器和 Yield 解释:通过真实示例节省内存

Python 生成器和yield 用我们运行的代码进行了解释:它们如何暂停和恢复、测量内存节省、管道、无限序列、yield from、发送和常见陷阱。

阅读文章 →
人工智能

什么是嵌入?向量和余弦相似度简单解释

什么是嵌入?关于向量、余弦相似度和语义搜索的简单语言指南,其中包含我们运行的一个小示例、常见用途、选择模型和已知限制。

阅读文章 →
DevOps

蓝绿部署与金丝雀部署:差异、权衡以及如何选择

蓝绿部署与金丝雀部署解释:每种部署的工作原理、成本、风险和回滚、我们测试的稳定用户分桶、数据库迁移、滚动更新以及如何选择。

阅读文章 →
测试自动化

不稳定的测试:造成这些问题的原因以及如何彻底解决它们

我们运行的演示解释了不稳定的测试:主要原因、如何确认和诊断、正确的时间修复、共享状态和日期以及隔离过程。

阅读文章 →
软件测试

负载测试与压力测试:差异、指标和 k6 示例

负载测试与压力测试的解释:各自证明什么、峰值和浸泡测试、重要的指标、为什么平均值会误导、k6 个示例以及如何计划测试。

阅读文章 →
软件测试

测试用例与测试场景:主要区别、示例以及何时使用它们

测试用例与测试场景的解释:清晰的定义、并排的表格、从场景到案例的密码重置功能、模板以及何时使用每个功能。

阅读文章 →
数据库与 SQL

SQL 查询优化:读取执行计划并修复慢速查询(带计时)

对一百万行进行 SQL 查询优化测试:读取执行计划、添加正确的索引、修复不可控制的过滤器、使用复合索引和键集分页。

阅读文章 →
数据库与 SQL

SQL UNION 与 UNION ALL:差异、示例和性能测试

SQL UNION 与 UNION ALL 通过我们运行的查询进行了解释:重复、都遵循的规则、真实的数据错误、测量的性能、INTERSECT 和 EXCEPT 以及何时使用它们。

阅读文章 →
软件开发

JavaScript Fetch API 教程:GET、POST、错误处理和超时

针对本地服务器测试的 JavaScript Fetch API 教程:GET 和 POST、为什么不抛出 404、可重用的帮助程序、查询字符串、超时、CORS 和常见错误。

阅读文章 →
软件开发

Python 文件处理:读取、写入、CSV、JSON 和 pathlib 以及示例

使用我们运行的代码解释了 Python 文件处理:打开模式、使用、读取大文件、CSV、JSON、pathlib、二进制文件、安全写入、错误处理和常见错误。

阅读文章 →
软件开发

Python 类和对象:带有实际示例的 OOP 教程

用我们运行的代码解释 Python 类和对象:__init__、方法、类与实例属性、继承、属性、dunder 方法、数据类和常见错误。

阅读文章 →
人工智能

什么是大语言模型?法学硕士如何运作,在没有炒作的情况下进行解释

什么是大语言模型?法学硕士用简单的语言解释:标记、嵌入、注意力、训练、温度和上下文窗口、一个微小的下一个单词演示和真正的限制。

阅读文章 →
DevOps

适合初学者的 Linux 命令:带有示例的基本终端指南

适合初学者的 Linux 命令,按任务分组:导航、文件、查看日志、grep、管道、权限、进程和档案,并附有实用的日志分析示例。

阅读文章 →
测试自动化

Selenium 与 Playwright:主要区别、代码比较以及选择

Selenium 与 Playwright 比较:架构、等待、浏览器和语言支持、调试、两种工具中的相同测试、迁移建议以及如何选择。

阅读文章 →
软件测试

等价划分:通过实例解释测试设计技术

等效分区解释:如何找到有效和无效分区,年龄、密码和优惠券的工作示例,我们运行的测试,以及为什么将其与边界配对。

阅读文章 →
软件测试

软件测试中的严重性与优先级:差异、矩阵和实例

软件测试中的严重性与优先级解释:清晰的定义、带有示例的四向矩阵、级别尺度、谁设置每个级别以及如何运行错误分类。

阅读文章 →
数据库与 SQL

SQL 子查询教程:类型、相关子查询和 EXISTS 以及示例

SQL 子查询教程,其中包含我们运行的查询:标量、IN、FROM 和 SELECT 子查询、相关子查询、EXISTS、NOT IN NULL 陷阱以及子查询与 JOIN 与 CTE。

阅读文章 →
数据库与 SQL

SQL 事务和 ACID 解释:COMMIT、ROLLBACK 和隔离级别

SQL 事务和 ACID 通过我们运行的银行转账进行了解释:COMMIT、ROLLBACK、保存点、锁、隔离级别、脏读、死锁和最佳实践。

阅读文章 →
软件开发

Git merge 与 rebase 的区别:示例及如何选择

用真实的 log 输出、对比表、rebase 黄金法则和安全的团队工作流,讲清 Git merge 与 rebase 的区别。

阅读文章 →
软件开发

Python 列表推导式:语法、示例与何时避免使用

Python 列表推导式详解:语法、过滤、if-else、嵌套循环、实测耗时,以及何时普通 for 循环更合适。

阅读文章 →
数据库与 SQL

SQL JOIN 详解:附示例(INNER、LEFT、RIGHT、FULL)

通过示例表和查询,一步步讲解 SQL JOIN:INNER、LEFT、RIGHT、FULL、CROSS 和 SELF,并介绍常见错误与性能技巧。

阅读文章 →