前言
经过Linux基础 个人VPS安全的相关设置,相信你的VPS的安全性已经大在地提升了。同时你对linux命令的使用应该也更加熟悉了!如果你使用的是国外的VPS和域名,甚至不需要备案就可以开始搭建互联网服务了,比如个人图床、个人博客了。
这一回我们简单地讲一下使用Linux系统时有关目录管理的实践。目录管理个性化很强的,没有什么天经地义的规矩。这里我会讲一些自己的习惯,仅供大家参考。
测试环境
uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
目录管理
我们先进入一下用户的home目录:
cd ~
我们看看有哪些东西:
ls -hl
比如我的输出就是这样:
total 4.0K
drwxr-xr-x 2 test_user test 4.0K Apr 20 21:13 softwares
顾名思义,这个目录是用来存在软件的。因为有一些软件是无法通过apt-get来安装的,所以一般要通过某种方法下载到本地。如果你用的时间长了,可能会有不少软件,这时候如果这里一个那里一个,就显得很混乱了。这里我自定义两个小程序,来说明一下这个问题。
比如,我要创建两个程序,第1个运行时会说“我爱你”。第2个程序运行时会说“你知道吗?”。OK,我们开始!
管理自己的小程序
我们一次性创建几个程序的目录:
mkdir -p ~/software/{test_love/v1.0.0,test_know/v1.0.0}
好像有点眼花,哈哈!没事,我们用一下tree命令:
tree -phDu
我的输出是这样的:
.
├── [drwxr-xr-x 4.0K Apr 20 21:26] software
│ ├── [drwxr-xr-x 4.0K Apr 20 21:26] test_know
│ │ └── [drwxr-xr-x 4.0K Apr 20 21:26] v1.0.0
│ └── [drwxr-xr-x 4.0K Apr 20 21:26] test_love
│ └── [drwxr-xr-x 4.0K Apr 20 21:26] v1.0.0
└── [drwxr-xr-x 4.0K Apr 20 21:13] softwares
6 directories, 0 files
一般我安装软件的时候,会加多一层目录用来表示软件的版本。因为我发现有一些软件会有很多个版本。如果你要安装新版本但又不想马上消除旧版本,这个方法就可以让新旧版本可以比较整齐地摆放。
和上面的命令仔细地对比一下,体会一下mkdir的用法哈!注意,{}里不能有任何空格喔!
如果你没有安装tree,可以用sudo apt-get install tree来安装。我觉得它很好用呢!
现在进入程序的目录:
cd ~/software/test_love/v1.0.0
创建一个新的小程序:
vim test_love.sh
我们输入以下内容:
#! /usr/bin/bash
# 创建者:苯苯
# 用法
# bash test_love.sh
# 日志
# 2022-04-20:第一次创建程序
# 程序
echo '我爱你!'
# End
当然,这里面很多东西都是被注释的,只是为了说明情况,哈哈!就算没有也不影响运行的。记得按:wq保存并退出。
这时,我们用一下这个刚刚写的小程序,就会输出我爱你!的字样了:
bash test_love.sh
现在我们看一下这个文件的详细信息:
cd ~/software/test_love/v1.0.0 && ls -hl
输出如下:
total 4.0K
-rw-r--r-- 1 test_user test 153 Apr 20 21:38 test_love.sh
看,现在你对它只有rw两种权限。我们加一个x权限,就是让它成为一个可执行文件:
sudo chmod +x test_love.sh
再运行命令ls -hl,输出如下:
total 4.0K
-rwxr-xr-x 1 test_user test 153 Apr 20 21:38 test_love.sh
而且文件名变成了绿色喔!我们不加bash直接运行它:
./test_love.sh
这时会直接输出我爱你!噢。
更进一步的,我们可以给这个文件映射一个软链接到一个环境路径。我们看看有哪些默认的环境路径:
echo $PATH
输出为:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
我就选其中一个常见的吧,叫/usr/bin。
sudo ln -s /home/test_user/software/test_love/v1.0.0/test_love.sh /usr/bin/test_love
这个时候我们回home目录:
cd ~
下面神奇的事情就要发生了!请输入:
test_love
有没有发现输出了我爱你!再来检查一下:
which test_love
这个时候会输出/usr/bin/test_love。我们再来探索一下:
ls -hl /usr/bin/test_love
输出为:
lrwxrwxrwx 1 root root 54 Apr 20 21:47 /usr/bin/test_love -> /home/test_user/software/test_love/v1.0.0/test_love.sh
前面有个l,说明这是一个软链接。我个人觉得它和windows的快捷键差不多。你删除这个软链接也不会影响到源文件。值得一提的是,如果你用ln命令时不加-s,它会创建一个硬链接。我个人觉得硬链接和影分身差不多,只要有一个存在,宿主就不会消失,而且它还不消耗整个文件的大小,在PT下载和管理中很好用。这里不展开说了。
好了,这就是自己的第一个Linux小程序了。我还创建了另外一个目录,自己也试着去实现我所讲的效果,即运行时会说“你知道吗?”。
不少软件都是这样使用的,即有一个原始目录,然后有一些软链接指向$PATH。
以后下载更多的程序时,就用类似程序名/版本号的方式保存文件和管理。蛮简单吧!当然,这只是一种个人建议。
管理docker程序
其实,目录管理对于Docker的使用也是很关键。这主要是与Docker的备份有关。我们可以先安装一下Docker。
首先看看自己的VPS有没有安装好Docker了:
which docker # /usr/bin/docker
国内VPS的Ubuntu用户可以根据菜鸟教程来安装。
我们可以先创建一个文件夹(可能没什么用,哈哈)
mkdir -p ~/docker/@install/ && cd ~/docker/@install/
如果你已经安装了docker,就不要运行下面的命令!如果你没有安装docker,可以运行:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国外VPS的用户也可以参考官方安装方法,就是用不同的镜像嘛。
等安装完后,看一下docker:
which docker # /usr/bin/docker
我们下面安装一下docker-compose,这个是一个布署docker服务的神器。你可以在这里查看docker-compose的最新发行版。选一个最新的版本下载即可。比如我写此博文的时候,是v2.4.1。运行以下命令
sudo curl -L "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
国内的VPS可以用:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
然后进行一些设置:
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
最后,看一下docker-compose的版本:
docker-compose --version # docker-compose version 1.28.6, build 5db8d86f
现在我们尝试一下用布署一个docker服务。我选了一个叫做Ward的程序。
首先,我们创建目录:
work=~/docker/ward/ && mkdir -p $work && cd $work
仔细体会一下这个创建和进入目录的写法喔!总之就是建立一个临时的变量叫做work,我们暂时可以用$work来替代~/docker/ward/。特别是你的目录名很长时,这个方法看上去比较简洁。要注意,一旦你退出终端,这个变量就会消失。
我们新建一个docker-compose.yml:
vim docker-compose.yml
输入以下内容:
version: '3.3'
services:
ward:
restart: unless-stopped
container_name: ward
ports:
- '4000:4000'
environment:
- WARD_PORT=4000
- WARD_THEME=dark
- WARD_NAME=leons-server
privileged: true
image: antonyleons/ward
按:wq保存并退出。
这里分享一个Vim的小技巧。比如我想全部删除刚刚输入的内容,只要这样:
- vim docker-compose.yml进入文件;
- 按一下数字1,然后按Shift+G。成功的话,光标会定位到第一行第一个字符前面。
- 按一下字母d,然后按下Shift+G,这就是将光标以下内容全部内容删除。这时就清空了
- 按字母I,按Ctrl+Shift+v粘贴新内容,按:wq保存并退出。
如果你在以前玩Vim的时候就试过,就知道它有多好用了!这个操作在以后部署docker-compose.yml文件时会很经常用到,因为我们经常要在markdown上做一些微调,然后copy到vim里修改VPS上的文件。
当然,这个Docker程序没有挂载Volume到这个目录里。在以后使用Docker的时候,挂载目录是很常见的。我们备份docker一般就是备份这些目录,它们通常是一些网页根目录或者是数据库文件夹。
我们安装一下这个应用吧!只需要:
sudo docker-compose up -d
输出类似于:
Creating network "ward_default" with the default driver
Pulling ward (antonyleons/ward:)...
latest: Pulling from antonyleons/ward
4d32b49e2995: Pull complete
2e7405b632dc: Pull complete
82681fa0d627: Pull complete
3425bfab69e8: Pull complete
8e73379da14f: Pull complete
7031d37fc351: Pull complete
Digest: sha256:209587b7f0d4cb2ffc7bf992cd280829e61c6add4f2948a4edd98790e5d2dd08
Status: Downloaded newer image for antonyleons/ward:latest
Creating ward ... done
我们看看它的基本状态:
sudo docker ps -a | grep ward
输出如下:
33d53eb8dafc antonyleons/ward "/bin/sh -c 'java -j…" 48 seconds ago Up 47 seconds 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp ward
如果你要正常地使用它,通常还要在ufw中请允许它的端口:
sudo ufw allow 4000 comment 'Ward dashboard' && sudo ufw reload
如果你用腾讯云之类的,还要在后台打开一下4000端口:
这时候,打开http://<VPS公网ip>:4000看看这个应用。界面是这样的:
这个小东西可以在网上实时观察你的服务器负载状态喔!就像我的博客一样:
https://wardrn2.hwb0307.com
看着有点花里胡哨的,哈哈!
下面我们下线这个服务。只需要:
sudo docker-compose down
输出为:
Stopping ward ... done
Removing ward ... done
Removing network ward_default
如果你用的是较新版本的docker-compose,可能界面会略有不同。以后我们要备份这个应用,只要备份~/docker/ward/这个目录即可。是不是很帅呢!
如果你装了很多docker应用在~/docker这个目录里,你甚至只要备份~/docker这一个目录就可以了!是不是很帅呢!关于Docker备份的技巧以后出出博文讨论喽,也是蛮简单的,这里按下不表。
小结
经过玩几个小程序和一个小Docker应用,你应该大概了解目录管理的重要性。以后记得要整理好自己的目录,让它干干净净喔!
转至我的个人博客:https://blognas.hwb0307.com。
欢迎关注!
如若转载,请注明出处:https://www.hanjifoods.com/2374.html