从零到能用 Linux 操作文件系统 · 每天 2-3 小时
学习进度 0/7 天
点击标题展开/收起每天课程
去 virtualbox.org 下载 macOS 版本,安装一路默认。
去 ubuntu.com/download/server 下载 22.04 LTS 或 24.04 LTS。
打开 VirtualBox,点击 "新建":
<#! 设置你的用户 用户名: admin 服务器名: server1 密码: 自己设一个(记住它) 勾选: Install OpenSSH server
安装完成 → 提示 Remove installation medium → 回车重启。
你会看到登录提示 server1 login:
打开虚拟机,登录,跟着敲:
pwd <#! 你应该看到 /home/admin
ls ls -la <#! ls = list,-l = 详细格式,-a = 显示隐藏文件
cd / pwd ls -la <#! '/' 是根目录,Linux 所有东西都从这里开始 cd /home/admin pwd <#! 回你自己的家目录
<#! 绝对路径写全 ls /var/log ls /etc <#! 相对路径:从当前位置出发 cd /home/admin ls ../.. <#! 上一级再上一级,应该是 /
cd ~ mkdir myfirst cd myfirst pwd <#! 你应该在 /home/admin/myfirst
echo "Hello IDC" > hello.txt cat hello.txt <#! 应该看到 Hello IDC echo "第二行" >> hello.txt cat hello.txt <#! 现在有两行
cp hello.txt hello2.txt ls mv hello2.txt /tmp/ ls /tmp/hello2.txt <#! 它现在在 /tmp 里 rm /tmp/hello2.txt ls /tmp/hello2.txt <#! 应该报 No such file rm -r myfirst <#! 删除目录用 -r
| 符号 | 含义 |
|---|---|
| / | 根目录 |
| ~ | 家目录(/home/admin) |
| . | 当前目录 |
| .. | 上级目录 |
| 命令 | 作用 |
|---|---|
| ls | 列出目录内容 |
| cd | 切换目录 |
| pwd | 当前位置 |
| mkdir | 创建目录 |
| cp | 复制 |
| mv | 移动/重命名 |
| rm | 删除 |
| cat | 查看文件内容 |
| echo | 输出文本 |
在机房连服务器,很可能只有 vim 给你用。网上那些"vim 退不出"的梗,你今天就练到能闭着眼睛退出。
vim practice.txt
| 模式 | 进入方式 | 干什么 |
|---|---|---|
| 普通模式(Normal) | 默认或按 Esc | 移动光标、复制、粘贴、删除 |
| 插入模式(Insert) | 按 i | 打字 |
| 命令模式(Command) | 按 : | 保存退出等操作 |
| 可视模式(Visual) | 按 v | 选中文本 |
<#! 打开 vim vim test1.txt <#! 按 i → 进入插入模式 <#! 输入:My first vim file <#! 按 Esc → 回到普通模式 <#! 按 : → 进入命令行模式 <#! 输入 wq 然后回车 → 保存退出
| 按键 | 作用 |
|---|---|
| :wq | 保存并退出 |
| :q! | 不保存强制退出(救命用) |
| i | 进入插入模式 |
| Esc | 回到普通模式 |
| dd | 删除当前行 |
| u | 撤销(Undo) |
| yy | 复制当前行 |
| p | 粘贴 |
| /xxx | 搜索 xxx |
| :noh | 取消搜索高亮 |
用 vim 创建并编辑下面这个文件,保存退出:
vim today.txt <#! 按 i 进入插入模式,写入: 我的名字是 xxx 我在学 IDC 运维 第一天用 vim <#! 按 Esc → :wq → 回车
whoami id <#! uid=1000(admin) gid=1000(admin)
sudo useradd -m zhangsan sudo passwd zhangsan <#! 输入两次密码 su zhangsan cd ~ pwd <#! /home/zhangsan whoami <#! zhangsan exit <#! 回到 admin
cd ~ touch perms.txt ls -l perms.txt <#! 你会看到:-rw-r--r-- 1 admin admin 0 Jun 5 10:00 perms.txt <#! 拆解: <#! - 文件类型(- 普通文件,d 目录) <#! rw- 所有者权限:读+写 <#! r-- 所属组权限:只读 <#! r-- 其他人权限:只读
| 数字 | 权限 | 说明 |
|---|---|---|
| 7 | rwx | 读+写+执行 |
| 6 | rw- | 读+写 |
| 5 | r-x | 读+执行 |
| 4 | r-- | 只读 |
| 0 | --- | 无权限 |
<#! 给所有者加上可执行 chmod u+x perms.txt ls -l perms.txt <#! 变成 -rwxr--r-- <#! 让其他人什么权限都没有 chmod o-r perms.txt ls -l perms.txt <#! 变成 -rwxr----- <#! 数字法(最常用) chmod 755 perms.txt <#! rwxr-xr-x chmod 600 perms.txt <#! rw-------
sudo chown zhangsan perms.txt ls -l perms.txt <#! 所有者变成 zhangsan 了
运维天天看这些命令:
<#! 当前时间 + 运行了多久 uptime <#! 10:30:23 up 2 days, 3:45, 1 user, load average: 0.08, 0.03, 0.01 <#! load average 最好不超过 CPU 核数 <#! 看 CPU lscpu <#! 看内存 free -h <#! -h 是人类可读模式 <#! 看磁盘 df -h <#! 看看你 20GB 的虚拟硬盘用了多少
ps aux <#! a=所有用户 u=详细信息 x=没有终端的进程 top <#! 实时显示进程,按 q 退出
lsblk <#! 看磁盘分区情况,sda 就是系统盘
ip addr <#! 看 IP 地址 ip route <#! 看路由表 ping -c 4 8.8.8.8 <#! 看能不能上网
三个数字分别代表 过去1分钟 / 5分钟 / 15分钟 的平均负载。
运维每天都要处理日志,这些命令是必杀技。
cat > servers.txt << 'EOF' web01 192.168.1.10 online web02 192.168.1.11 online db01 192.168.1.20 offline db02 192.168.1.21 online cache01 192.168.1.30 offline EOF
<#! 找包含 "online" 的行 grep "online" servers.txt <#! 找不包含 "offline" 的行 grep -v "offline" servers.txt <#! 数数有几个 online grep -c "online" servers.txt <#! 在系统日志里找错误(不区分大小写) grep -i "error" /var/log/syslog | head
<#! > 覆盖写入 grep "online" servers.txt > online_servers.txt <#! >> 追加写入 echo "追加内容" >> online_servers.txt <#! | 管道(把前面输出送给后面命令处理) cat servers.txt | grep "online" | wc -l <#! 数出 online 的服务器有几台
<#! servers.txt 有三列,列之间空格隔开
awk '{print $1}' servers.txt <#! 取第一列:服务器名
awk '{print $1, $3}' servers.txt <#! 取第一列和第三列
<#! 只打印 online 的服务器名
grep "online" servers.txt | awk '{print $1}'
<#! 把所有 online 替换成 active(只是显示,文件不变) sed 's/online/active/g' servers.txt <#! 加 -i 才真的改文件 sed -i 's/online/active/g' servers.txt
不用怕,脚本就是把命令按顺序写在一个文件里。
vim sysinfo.sh
#!/bin/bash
echo "========================================"
echo " 服务器基本信息报告"
echo "========================================"
echo ""
echo "1. 系统运行时间"
uptime
echo ""
echo "2. CPU 信息"
echo " 核心数:$(nproc)"
echo " 负载情况:$(uptime | awk -F'load average:' '{print $2}')"
echo ""
echo "3. 内存使用情况"
free -h
echo ""
echo "4. 磁盘使用情况"
df -h | grep -v tmpfs
echo ""
echo "5. 当前在线用户"
who
echo ""
echo "6. 监听中的端口"
ss -tlnp 2>/dev/null | head -10
echo ""
echo "========================================"
echo " 报告生成时间:$(date)"
echo "========================================"
<#! 给执行权限 chmod +x sysinfo.sh <#! 运行 ./sysinfo.sh
你会看到服务器各种信息整整齐齐打印出来。