- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
本文是 90DaysOfDevOps 项目 Linux 学习周的第二天(Day 15)。延续 Day 14 用 HashiCorp Vagrant 在 Virtual Box 中搭建的 Ubuntu Desktop 虚拟机环境,本篇将以实操方式系统讲解 DevOps 工程师(以及所有开发、运维人员)在终端中每天都会用到的 Linux 基础命令——从进入虚拟机、权限提升,到文件与目录的增删改查、用户与组管理、文件权限模型,再到
awk/xargs/cut等文本处理工具。读完本文,你将掌握一套可以立即上手的终端工作流,并理解这些命令背后的 Linux 权限与进程机制,为后续系统管理、网络与容器编排的学习打好地基。
为什么 DevOps 离不开 Linux 终端
在 Day 14 中我们已经阐明:大量 DevOps 工具链(容器、编排、配置管理、CI/CD)从诞生之初就以 Linux 为首要运行平台,生产环境里的服务器绝大多数也是没有图形界面的 Linux 系统。Windows 或 macOS 上我们可以靠鼠标点击 UI 完成操作,但在 Linux 服务器上一切都要通过终端完成。Day 15 的目的就是让你在终端里"跑起来"——用命令创建、查看、移动、删除文件,管理用户与权限,并对文本输出做快速处理。
本文的实操环境基于仓库中的 VAGRANTFILE(chenhan/ubuntu-desktop-20.04镜像、8GB 内存、4 核 CPU、128MB 显存),在终端中进入虚拟机的方式是:先cd到存放该 VAGRANTFILE 的目录,执行vagrant up启动,再执行vagrant ssh直接登录。通过vagrant ssh登录不需要用户名密码;只有在 Virtual Box 控制台界面登录时才需要(用户名vagrant,密码vagrant)。
登录成功后会看到类似vagrant@vagrant:~$的提示符,接下来的所有命令都在这个会话中执行。
随时查手册:man命令
Linux 命令成百上千,参数更是数不胜数,没有人能全部记住。关键在于掌握"如何查":
man <command>:打开指定命令的手册(manual)页,查看该命令的全部选项与用法;man man:查看 man 手册本身的使用说明;- 按
q键(quit)退出 man 页面。
后续文中出现的每个命令,都可以用man <命令名>找到更详尽的参数说明,这是自主深入学习的起点。
权限提升:sudo与sudo su
sudo <command>:类似 Windows 的"右键 → 以管理员身份运行"。以root身份执行单条命令,执行前会提示输入密码。适合一次性操作,例如安装应用或服务;sudo su:切换到 root 用户,之后连续执行的命令都拥有最高权限,直到输入exit退出。在原文档中特别提醒:在测试虚拟机里这样做没问题,但长期以root身份漫游是很危险的习惯,"坏事情可能发生";- 日常建议:能用
sudo <command>完成的单次操作就不要长期停留在 root shell,用exit及时退回普通用户。
清理工作台:clear
clear命令清空屏幕上所有历史输出,把提示符移到顶部,得到一个干净的工作区。Windows 命令行中对应的命令是cls。频繁使用clear配合下一节的history,可以始终保持终端整洁且可回溯。
目录与文件的基础操作
创建目录:mkdir
在用户主目录(~)下创建一个名为Day15的目录:
mkdir Day15从源码结构的视角看,Linux 中将目录、文件都抽象为 inode 上的条目,mkdir实际是创建了一个新的目录条目并写入其.与..两个隐藏链接,这是后续cd、ls等一切路径操作的基础。
切换目录:cd
cd Day15 # 进入 Day15 目录,Tab 键可自动补全目录名 cd .. # 返回上一级目录cd ..表示回到上一级,cd不带参数则回到用户主目录。
删除目录:rmdir
rmdir Day15 # 仅当目录为空时才能删除注意:rmdir只能删除空目录;若目录中有文件,需要使用rm -r(递归删除)。
打印工作目录:pwd
在文件系统里层层深入后容易迷失,pwd(print working directory)会输出当前所在的绝对路径。它看起来像 password 的缩写,但含义是"打印当前工作目录"。
创建文件:touch
touch Day15touch创建一个空文件;如果文件已存在,则只更新其时间戳,不破坏内容。结合上面演示,终端中mkdir 90DaysOfDevOps、touch Day15、ls连续执行后,可以看到新目录与新文件都出现在当前目录列表中:
列出内容:ls
ls列出当前目录下的所有文件与文件夹,是最常用的命令之一。常用变体:
ls:普通列出;ls -l:以长格式显示权限、属主、大小、修改时间;ls -a:显示包括隐藏文件(以.开头)在内的所有条目;ls -al:两者结合,查看详细权限信息(下文权限章节会再次用到)。
查找、移动与删除
查找文件:locate与updatedb
locate Day15 # 按文件名索引搜索整个文件系统 sudo updatedb # 重新建立文件系统索引(若已知文件存在却查不到结果时执行) sudo apt install mlocate # 若系统未安装 locate,用 apt 安装locate依赖预先构建的数据库,所以新建的文件可能查不到,先sudo updatedb重建索引再查即可。
移动文件:mv
mv Day15 90DaysOfDevOps # 把 Day15 文件移动到 90DaysOfDevOps 目录下用mv重命名
mv Day15 day15 # 改为小写 mv day15 AnotherDay # 彻底改名 ls # 用 ls 验证结果mv是移动与重命名二合一的命令:目标位置是目录就移动,目标名是文件就改名。
删除文件:rm
rm AnotherDay # 删除单个文件 rm -R <目录> # 递归删除目录及其内容 rm -R -f <目录> # -f 强制删除,不再逐个确认原文档特别给出一个危险的警告示例:sudo rm -R -f /会把整个系统删光——永远不要在生产或学习环境中执行。-R(recursive)与-f(force)组合的破坏力极大,删除前务必核对路径。
复制文件:cp
cp Day15 Desktop # 将 Day15 文件复制到 Desktop 目录cp语法与mv相似但保留原文件,适用于备份与分发配置;同样支持cp -R递归复制目录。
写入与读取文件内容
写入内容:echo重定向
echo可以把字符串打印到终端,也可以结合重定向符写入文件:
echo "Hello #90DaysOfDevOps" > Day15 # > 覆盖写入文件 echo "Commands are fun!" >> Day15 # >> 追加到文件末尾日常我还常用echo检查系统环境变量是否已设置(例如echo $PATH),这在排查 CI/CD 环境问题时很实用。
查看内容:cat
cat(concatenate,拼接)用于快速查看文件内容,尤其适合阅读配置类文本文件:
cat Day15内容检索:grep管道
面对长而复杂的配置文件,逐行阅读太低效,用grep按关键词检索:
cat Day15 | grep "#90DaysOfDevOps"|(管道)把cat的输出交给grep过滤,只显示包含指定字符串的行。这一"管道 + 过滤器"的组合模式,是整个 Linux 命令行哲学(小而专一工具的组合)的核心体现,后面的awk、xargs、cut都沿用了同样的思路。
Shell 历史:history
清屏之后还想找回之前敲过的命令?history会列出本次会话(及历史会话)中执行过的所有命令:
history:列出命令历史;history -c:清空历史记录;!3:直接重新执行历史列表中的第 3 条命令;history | grep "Command":按关键词检索历史命令。
在生产服务器上排查"这条命令是什么时候执行的"非常常见,可以通过环境变量为每条历史命令附加日期时间。以下配置来自原文档,可直接写入~/.bash_profile:
echo 'export HISTTIMEFORMAT="%d-%m-%Y %T "' >> ~/.bash_profile同理,还可以让历史文件容纳更多记录:
echo 'export HISTSIZE=100000' >> ~/.bash_profile echo 'export HISTFILESIZE=10000000' >> ~/.bash_profile其中HISTTIMEFORMAT控制历史命令的时间戳显示格式(%d-%m-%Y %T即"日-月-年 时:分:秒"),HISTSIZE控制内存中保留的命令条数,HISTFILESIZE控制历史文件~/.bash_history可存储的最大行数。配置写入后需重新加载 shell(source ~/.bash_profile或重新登录)才生效。
用户与组管理
修改密码:passwd
passwd交互式修改当前用户密码。注意:输入密码时屏幕不会回显(隐藏输入),所以密码不会出现在history里;但如果命令以-p PASSWORD形式携带明文密码,它会暴露在history中,应避免这种写法。
新建用户:useradd
sudo useradd NewUser # 需要 sudo 权限仓库中的 create-user.sh 脚本给出了更完整的用户创建/删除实践,可作为 DevOps 自动化视角的参考:它先用sudo useradd -m $username创建带主目录的用户,再用sudo chpasswd <<< $username:$password从标准输入设置密码,并支持以./create-user.sh del <username>的形式调用userdel -rf删除用户。这正体现了"交互命令 + 脚本化"的进阶路径。
创建组与加入组:groupadd/usermod
sudo groupadd DevOps # 创建组 DevOps sudo usermod -a -G DevOps NewUser # 把 NewUser 追加到 DevOps 组usermod参数含义:-a(append)表示追加,-G指定组名。追加到sudo组即可获得提权能力(生产环境极少这样做):
usermod -a -G sudo NewUser文件权限模型与chmod/chown
Linux 中所有文件与目录都有三类权限:读(read)、写(write)、执行(execute)。权限以八进制数字表示,原文档给出的完整对照表如下:
| 数值 | 含义 | 符号表示 |
|---|---|---|
| 0 | 无任何权限 | --- |
| 1 | 仅执行 | --X |
| 2 | 仅写入 | -W- |
| 3 | 写入与执行 | -WX |
| 4 | 仅读取 | R-- |
| 5 | 读取与执行 | R-X |
| 6 | 读取与写入 | RW- |
| 7 | 读取、写入与执行 | RWX |
像777、775这样的三位数字,每一位分别代表用户(User)— 组(Group)— 其他人(Everyone)的权限。用ls -al可以查看文件的权限位:
图中-rw-rw-r-- 1 vagrant vagrant ... Day15的含义是:这是一个普通文件,属主 vagrant 拥有读+写(rw-),属组 vagrant 拥有读+写(rw-),其他用户仅有读(r--)。
修改权限:chmod
chmod 750 Day15 # 属主 rwx,组 r-x,其他人无权限 ls -al Day15 # 验证变更 chmod -R 750 <目录> # -R 对整个目录树递归生效DevOps 工程师经常需要让脚本或二进制具备可执行权限,此时chmod +x <文件>或按上表组合数字即可。从源码视角看,chmod修改的是 inode 中的 mode 位,内核在进程访问文件时据此做权限检查,这也是容器与安全上下文(如后续 OpenShift SCC)讨论的底层基础。
修改属主:chown
sudo chown NewUser Day15 # 把 Day15 的属主从 vagrant 改为 NewUser同样支持-R递归修改整个目录树,只有 root(或具备相应能力)的用户才能执行chown,所以命令前加了sudo。
文本处理利器:awk、xargs与cut
按列提取:awk
awk适合从命令输出中抽取特定字段。例如who输出的每一行包含用户名、终端、登录时间等信息,若只想要用户名(第一列):
who | awk '{print $1}'awk按空白分割行,$1表示第一个字段,{print $1}打印该字段。这是日志与进程输出分析的常用手法。
紧凑化输出:xargs
xargs从标准输入读取数据流,把它转换成另一个命令的参数。原文档给出的经典案例是列出系统全部 Linux 用户账户,并压缩成一行:
cut -d: -f1 < /etc/passwd # 用 : 分割,取第 1 列,得到全部用户名(多行) cut -d: -f1 < /etc/passwd | sort | xargs # 排序后用 xargs 拼成紧凑的一行/etc/passwd是系统用户账户数据库,每行格式为用户名:x:UID:GID:注释:主目录:shell,cut -d: -f1即以冒号为分隔符取出用户名列;xargs默认把多行输入拼接为单行参数串,适合批量传给后续命令。
按位置切分:cut
cut用于从每行文本中移除/提取指定片段,可按字节位置、字符或字段切分:
cut -d " " -f 2 list.txt # 以空格为分隔符,取出第 2 字段原文档也坦承:cut组合方式极多,有时为了提取数据反而花了太多时间,手动处理反而更快——这提醒我们工具要"用对场景"。
随时中断:Ctrl + C
如果命令输入有误或不想继续执行,按Ctrl + C即可取消当前命令行并回到干净的提示符。这是终端里最常用、也最容易被忽略的"命令"之一。
小结与后续学习路径
至此,Day 15 覆盖了 DevOps 工程师在终端中的核心工具箱:
- 查询与提权:
man、sudo、sudo su、exit、clear; - 文件与目录:
mkdir、cd、rmdir、pwd、touch、ls、locate、updatedb、mv、rm、cp; - 内容处理:
echo、cat、grep、history(含HISTTIMEFORMAT/HISTSIZE调优); - 用户与组:
passwd、useradd、groupadd、usermod,以及仓库脚本 create-user.sh 展示的自动化写法; - 权限模型:0–7 权限数值表、
ls -al、chmod、chown; - 文本处理:
awk、xargs、cut与管道组合; - 兜底操作:
Ctrl + C中断。
原文档作者强调:这已经是相当重的一份清单,但这些命令确实每天都会用到——无论是管理 Linux 服务器还是 Linux 桌面。下一步可以继续 Day 16,学习如何用apt更新系统、安装软件,并深入了解 Linux 文件系统与存储管理。想要边学边练的读者,可以直接用仓库中的 VAGRANTFILE 快速拉起一台 Ubuntu 虚拟机,把本文每条命令亲手执行一遍——终端熟练度来自重复,而不是阅读。
- 文档/教程
【免费下载链接】90DaysOfDevOps
This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.
相关推荐
如何永久保存微信聊天记录?WeChatMsg聊天数据分析工具完整指南
如何永久保存微信聊天记录?WeChatMsg聊天数据分析工具完整指南 你是否曾担心重要的微信聊天记录会丢失?那些珍贵的对话、工作记录和情感交流,是否都只存在于手
揭秘OptiScaler:打破硬件限制的跨平台超分辨率解决方案
揭秘OptiScaler:打破硬件限制的跨平台超分辨率解决方案 OptiScaler是一款开源工具,能够让不同品牌的显卡都能使用多种超分辨率技术,实现游戏画质与
图形学游戏开发如何用hand-gesture-recognition-mediapipe构建你的第一个交互应用
如何用hand gesture recognition mediapipe构建你的第一个交互应用 hand gesture recognition mediap
人工智能计算机视觉机器学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考