下面是 腾讯云实验室的教程, 方便自己练习和记录这些命令,整合自己感兴趣的三个教程收集在这里。
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静态服务器环境 的实验任务。