Qcould lab Linux 学习教程

下面是 腾讯云实验室的教程, 方便自己练习和记录这些命令,整合自己感兴趣的三个教程收集在这里。

1 Linux基础入门
2 搭建 FTP 文件服务
3 Nginx搭建静态网站

Linux 基础入门

目录操作

创建目录

使用 mkdir 命令创建目录

mkdir $HOME/testFolder

<checker type="output-contains" command="ls $HOME -la" hint="创建 testFolder 目录">
<keyword regex="testFolder" />
</checker>

切换目录

使用 cd 命令切换目录

cd $HOME/testFolder

使用 cd ../ 命令切换到上一级目录

cd ../

移动目录

使用 mv 命令移动目录

mv $HOME/testFolder /var/tmp

<checker type="output-contains" command="ls /var/tmp -la" hint="移动 testFolder 目录到 /var/tmp">
<keyword regex="testFolder" />
</checker>

删除目录

使用 rm -rf 命令删除目录

rm -rf /var/tmp/testFolder

<checker type="output-contains-no" command="ls /var/tmp" hint="目录 testFolder 未删除">
<keyword regex="testFolder" />
</checker>

查看目录下的文件

使用 ls 命令查看 [/etc][etc] 目录下所有文件和文件夹

ls /etc

<bubble for="etc">
/etc 目录默认是 *nix 系统的软件配置文件存放位置
</bubble>

文件操作

<time>5min ~ 10min</time>

创建文件

使用 touch 命令创建文件

touch ~/testFile

执行 ls 命令, 可以看到刚才新建的 testFile 文件

ls ~

<checker type="output-contains" command="ls $HOME -la" hint="创建 testFile 文件">
<keyword regex="testFile" />
</checker>

复制文件

使用 cp 命令复制文件

cp ~/testFile ~/testNewFile

<checker type="output-contains" command="ls $HOME -la" hint="复制 testFile 文件为 testNewFile">
<keyword regex="testNewFile" />
</checker>

删除文件

使用 rm 命令删除文件, 输入 y 后回车确认删除

rm ~/testFile

<checker type="output-contains-no" command="ls $HOME" hint="文件 testFile 未删除">
<keyword regex="testFile" />
</checker>

查看文件内容

使用 cat 命令查看 .bash_history 文件内容

cat ~/.bash_history

过滤, 管道与重定向

<time>5min ~ 10min</time>

过滤

过滤出 /etc/passwd 文件中包含 root 的记录

grep 'root' /etc/passwd

递归地过滤出 /var/log/ 目录中包含 linux 的记录

grep -r 'linux' /var/log/

管道

简单来说, Linux 中管道的作用是将上一个命令的输出作为下一个命令的输入, 像 pipe 一样将各个命令串联起来执行, 管道的操作符是 |

比如, 我们可以将 cat 和 grep 两个命令用管道组合在一起

cat /etc/passwd | grep 'root'

过滤出 /etc 目录中名字包含 ssh 的目录(不包括子目录)

ls /etc | grep 'ssh'

重定向

可以使用 > 或 < 将命令的输出重定向到一个文件中

echo 'Hello World' > ~/test.txt 

<checker type="output-contains" command="cat ~/test.txt" hint="将 Hello World 输出到 test.txt 文件中">
<keyword regex="Hello World" />
</checker>

运维常用命令

<time>5min ~ 10min</time>

ping 命令

对 cloud.tencent.com 发送 4 个 ping 包, 检查与其是否联通

ping -c 4 cloud.tencent.com

netstat 命令

netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等

列出所有处于监听状态的tcp端口

netstat -lt

查看所有的端口信息, 包括 PID 和进程名称

netstat -tulpn

ps 命令

过滤得到当前系统中的 ssh 进程信息

ps -aux | grep 'ssh'

完成实验

恭喜!您已经成功完成了 Linux 入门运维的实验任务。

搭建 FTP 文件服务

安装并启动 FTP 服务

<time>5min ~ 10min</time>

安装 VSFTPD

使用 yum 安装 [vsftpd][]:

yum install vsftpd -y

<bubble for="vsftpd">
vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官网介绍][https://security.appspot.com/vsftpd.html],它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件。
</bubble>

<checker type="output-contains" command="ls /etc/vsftpd -la" hint="安装 vsftpd">
<keyword regex="vsftpd.conf" />
</checker>

启动 VSFTPD

安装完成后,启动 FTP 服务:

service vsftpd start

启动后,可以看到系统已经[监听了 21 端口][21]:

netstat -nltp | grep 21

此时,访问 [ftp://${runtime.vars.cvmIpAddress}][] 可浏览机器上的 [/var/ftp][ftp-home] 目录了。

<bubble for="21">
FTP 协议默认使用 21 端口作为服务端口
</bubble>

<locate for="ftp-home" path="/var/ftp" hint="默认 FTP 访问目录在此" />

<checker type="output-contains" command="netstat -nltp" hint="启动 vsftp 服务">
<keyword regex=":21" />
</checker>

配置 FTP 权限

<time>5min ~ 10min</time>

目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限

了解 VSFTP 配置

vsftpd 的配置目录为 [/etc/vsftpd][0],包含下列的配置文件:

  • [vsftpd.conf][1] 为主要配置文件
  • [ftpusers][2] 配置禁止访问 FTP 服务器的用户列表
  • [user_list][3] 配置用户访问控制

阅读上述配置以了解更多信息。如果您准备好了,点击下一步开始修改配置来设置权限。

<locate for="0" path="/etc/vsftpd" hint="vsftp 配置目录" />

<locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="vsftp 主要配置" />

<locate for="2" path="/etc/vsftpd/ftpusers" hint="vsftp 黑名单用户列表" />

<locate for="3" path="/etc/vsftpd/user_list" hint="vsftp 用户访问控制" />

阻止匿名访问和切换根目录

匿名访问和切换根目录都会给服务器带来[安全风险][safety],我们把这两个功能关闭。

[编辑 /etc/vsftpd/vsftpd.conf][edit],[找到下面两处配置][find]并修改:

# 禁用匿名用户
anonymous_enable=NO

# 禁止切换根目录
chroot_local_user=YES

编辑完成后,按 Ctrl + S 保存配置,重新启动 FTP 服务,如:

service vsftpd restart

<bubble for="safety">
匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题。
</bubble>

<bubble for="find">
在代码编辑器中,用 Ctrl + F 进行搜索,Mac 用户用 Cmd + F 进行搜索
</bubble>

<locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="编辑主配置文件" />

<edit for="edit" file="/etc/vsftpd/vsftpd.conf" />

<checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止匿名用户访问">
<keyword regex="^anonymous_enable=NO" />
</checker>

<checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止用户切换根目录">
<keyword regex="^chroot_local_user=YES" />
</checker>

<checker type="output-contains" command="curl ftp://${runtime.vars.cvmIpAddress} -v 2>&1" hint="重启 FTP 服务">
<keyword regex="530" />
</checker>

创建 FTP 用户

创建一个用户 ftpuser [:question][user]:

useradd ftpuser

为用户 ftpuser 设置密码 [:question][password]:

echo "${runtime.vars.allocatedPassword}" | passwd ftpuser --stdin

<bubble for="user">
为了方便后面的实验步骤,不建议使用其它的用户名
</bubble>

<bubble for="password">
下面命令中的密码为实验室为您生成,为了方便后面的实验步骤,不建议使用其他密码
</bubble>

<checker type="output-contains" command="cat /etc/passwd" hint="创建 FTP 用户(如果您使用其它用户,请直接下一步)">
<keyword regex="ftpuser:" />
</checker>

限制该用户仅能通过 FTP 访问

限制用户 ftpuser 只能通过 FTP 访问服务器,而不能直接登录服务器:

usermod -s /sbin/nologin ftpuser

<checker type="output-contains" command="cat /etc/passwd" hint="限制 FTP 用户登录方式">
<keyword regex="ftpuser:/sbin/nologin" />
</checker>

为用户分配主目录

为用户 ftpuser 创建[主目录][ftp-home]并约定:

/data/ftp 为主目录, 该目录不可上传文件

/data/ftp/pub 文件只能上传到该目录下

mkdir -p /data/ftp/pub

创建登录欢迎文件 [:question][welcome]:

echo "Welcome to use FTP service." > /data/ftp/welcome.txt

设置访问权限:

chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub

设置为用户的主目录:

usermod -d /data/ftp ftpuser

<bubble for="ftp-home">
用户的主目录是用户通过 FTP 登录后看到的根目录
</bubble>

<bubble for="welcome">
方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。
</bubble>

<checker type="output-contains" command="ls -la /data" hint="创建目录 /data/ftp">
<keyword regex="ftp" />
</checker>

<checker type="output-contains" command="ls -ld /data/ftp" hint="设置 /data/ftp 访问权限为 a-w">
<keyword regex="dr-xr-xr-x" />
</checker>

<checker type="output-contains" command="ls -ld /data/ftp/pub" hint="设置 /data/ftp/pub 访问权限为 777">
<keyword regex="drwxrwxrwx" />
</checker>

<checker type="output-contains" command="cat /etc/passwd" hint="设置 /data/ftp 为用户 ftpuser 的主目录">
<keyword regex="ftpuser" />
<keyword regex="/data/ftp" />
</checker>

<checker type="output-contains" command="ls -la /data/ftp" hint="创建登录欢迎文件 welcome.txt">
<keyword regex="welcome" />
</checker>

准备域名和证书

<time>15min ~ 30min</time>

注:如果您不需要通过域名访问 FTP 服务器则可以直接点击“已完成,下一步”跳过域名和证书的准备环节

域名注册

如果您还没有域名,可以[在腾讯云上选购][buy_link],过程可以参考下面的视频。

  • [视频 - 在腾讯云上购买域名][buy_domain_video]

<link for="buy_link" href="https://domain.qcloud.com/"></link>
<video for="buy_domain_video" platform="qq" vid="p05077pwelw" name="域名选购"></video>

域名解析

域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的 IP 为:

${runtime.vars.cvmIpAddress}

在腾讯云购买的域名,可以[到控制台添加解析记录][https://console.qcloud.com/domain],过程可参考下面的视频:

  • [视频 - 如何在腾讯云上解析域名][video_resolve_domain]

<video for="video_resolve_domain" platform="qq" vid="t0507ps9kxo" name="域名解析"></video>

域名设置解析后需要过一段时间才会生效,通过 ping 命令检查域名是否生效 [:question][replace],如:

<bubble for="replace">注意替换下面命令中的 www.yourmpdomain.com 为您自己的注册的域名</bubble>

ping www.yourdomain.com

如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。

访问 FTP 服务

<time>5min ~ 10min</time>

FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务

访问 FTP 服务

根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务

通过 Windows 资源管理器访问

Windows 用户可以复制下面的[链接][address]到资源管理器的地址栏访问:

<bubble for="address">
如果您申请了域名,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务
</bubble>

ftp://ftpuser:${runtime.vars.allocatedPassword}@${runtime.vars.cvmIpAddress}

通过 FTP 客户端工具访问

FTP 客户端工具众多,下面推荐两个常用的:

  • [WinSCP][ws] - Windows 下的 FTP 和 SFTP 连接客户端
  • [FileZilla][fz] - 跨平台的 FTP 客户端,支持 Windows 和 Mac

下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:

[主机][host]:

<bubble for="host">
如果您申请了域名,可以将Ip 地址替换为对应的域名作为访问凭据
</bubble>

${runtime.vars.cvmIpAddress}

用户:

ftpuser

密码:

${runtime.vars.allocatedPassword}

如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了!

接下来,请上传任意一张图片到您的 FTP 服务器上的pub目录下,然后,就可以在 [/data/ftp/pub][ftp] 中看到了。

注意: 请不要直接上传文件到根目录下,您应该选择上传到 pub 目录下

<locate for="ftp" path="/data/ftp/pub" hint="上传后,重新打开此目录查看文件" />

<checker type="output-contains-no" command="ls -1p /data/ftp/pub | grep -v '/' | wc -l" hint="上传图片到 FTP 服务器上">
<keyword regex="0" />
</checker>

大功告成

恭喜!您已经成功完成了搭建 FTP 服务器的实验任务。

搭建静态网站

搭建Http静态服务器环境

<time>15min ~ 30min</time>

搭建静态网站,首先需要部署环境。下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务。

安装 Nginx

在 CentOS 上,可直接使用 yum 来安装 Nginx

yum install nginx -y

安装完成后,使用 nginx 命令启动 Nginx:

nginx

此时,访问 [http://${runtime.vars.domain}][] 可以看到 Nginx 的测试页面 [:question][help]

<bubble for="help">
如果无法访问,请重试用 nginx -s reload 命令重启 Nginx
</bubble>

<checker type="output-contains" command="ls /usr/sbin/" hint="Nginx 未安装">
<keyword regex="nginx" />
</checker>

<checker type="output-contains" command="netstat -nltp" hint="Nginx 未启动">
<keyword regex="nginx" />
<keyword regex="80" />
</checker>

配置静态服务器访问路径

外网用户访问服务器的 Web 服务由 Nginx 提供,Nginx 需要配置静态资源的路径信息才能通过 url 正确访问到服务器上的静态资源。

打开 Nginx 的默认配置文件 [/etc/nginx/nginx.conf][1] ,修改 Nginx 配置,将默认的 root /usr/share/nginx/html; 修改为: root /data/www;,如下:

/// <example verb="edit" file="/etc/nginx/nginx.conf" />
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /data/www;

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

配置文件将 [/data/www/static][data-www-static-path] 作为所有静态资源请求的根路径,如访问: http://${runtime.vars.domain}/static/index.js,将会去 [/data/www/static/][data-www-static-path] 目录下去查找 index.js。现在我们需要重启 Nginx 让新的配置生效,如:

<locate for="data-www-static-path" path="/data/www/static" hint="这里是所有静态资源请求的根路径"/>

nginx -s reload

重启后,现在我们应该已经可以使用我们的静态服务器了,现在让我们新建一个静态文件,查看服务是否运行正常。

首先让我们在 [/data][data-path] 目录 下创建 www 目录,如:

<locate for="data" path="/data/www" hint="该目录作为服务器的根目录使用"/>

mkdir -p /data/www

<locate for="1" path="/etc/nginx/nginx.conf" hint="编辑默认服务器配置,修改网站的根路径" />

<checker type="output-contains" command="ls /data/ -la" hint="在 /data目录 下创建 /www目录">
<keyword regex="www" />
</checker>

创建第一个静态文件

在 [/data/www][data-www-path] 目录下创建我们的第一个静态文件 [index.html][1]

/// <example verb="edit" file="/data/www/index.html" />
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>第一个静态文件</title>
</head>
<body>
Hello world!
</body>
</html>

现在访问 [http://${runtime.vars.domain}/index.html][] 应该可以看到页面输出 [Hello world!][indicate-hello-world]

到此,一个基于 Nginx 的静态服务器就搭建完成了,现在所有放在 [/data/www][data-www-path] 目录下的的静态资源都可以直接通过域名访问。

<locate for="data-www-path" path="/data/www" hint="/data/www 是服务器的根目录"/>

<locate for="1" path="/data/www" hint="添加 index.html 文件" />

<bubble for="indicate-hello-world">
如果无显示,请刷新浏览器页面
</bubble>

<checker type="output-contains" command="curl -I --silent http://${runtime.vars.domain}" hint="配置 Nginx 静态服务根路径">
<keyword regex="HTTP/1.1 200 OK" />
</checker>

完成实验

恭喜!您已经成功完成了 搭建Http静态服务器环境 的实验任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 7,447评论 3 25
  • vsftpd.conf 部分:文件格式(5)索引 返回主要内容 名称 vsftpd.conf - vsftpd的配...
    张龙象阅读 2,093评论 0 1
  • ftp 文件传输协议 跨平台 上传下载文件 vsftpd 工具:非常安全的文件传输协议;默认的命令端口21号,数据...
    柒夏锦阅读 3,857评论 1 9
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,633评论 0 10