Watchtower – 自动更新 Docker 镜像与容器

 

前言

Docker 容器的部署有一种在手机上装 App 的感觉,但 Docker 容器并不会像手机 App 那样会自动更新,而如果我们需要更新容器一般需要以下四个步骤:
停止容器:docker stop
删除容器:docker rm
更新镜像:docker pull <IMAGE>
启动容器:docker run <ARG> ... <IMAGE>
停止容器这个步骤可以在删除容器时使用 -f 参数来代替,即使这样还是需要三个步骤。如果部署了大量的容器需要更新使用这种传统的方式工作量是巨大的。

Watchtower 是一个可以实现自动化更新 Docker 基础镜像与容器的实用工具。它监视正在运行的容器以及相关的镜像,当检测到 reg­istry 中的镜像与本地的镜像有差异时,它会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器,一切好像什么都没发生过,就像更新手机上的 App 一样。

快速开始

Watch­tower 本身被打包为 Docker 镜像,因此可以像运行任何其他容器一样运行它:

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

然后所有容器都会自动更新,也包括 Watch­tower 本身。

选项参数

[collapse title=’点击查看’]

$ docker run --rm containrrr/watchtower -h

Watchtower automatically updates running Docker containers whenever a new image is released.
More information available at https://github.com/containrrr/watchtower/.

Usage:
watchtower [flags]

Flags:
-a, --api-version string api version to use by docker client (default "1.24")
-c, --cleanup remove previously used images after updating
-d, --debug enable debug mode with verbose logging
--enable-lifecycle-hooks Enable the execution of commands triggered by pre- and post-update lifecycle hooks
-h, --help help for watchtower
-H, --host string daemon socket to connect to (default "unix:///var/run/docker.sock")
-S, --include-stopped Will also include created and exited containers
-i, --interval int poll interval (in seconds) (default 300)
-e, --label-enable watch containers where the com.centurylinklabs.watchtower.enable label is true
-m, --monitor-only Will only monitor for new images, not update the containers
--no-pull do not pull any new images
--no-restart do not restart any containers
--notification-email-delay int Delay before sending notifications, expressed in seconds
--notification-email-from string Address to send notification emails from
--notification-email-server string SMTP server to send notification emails through
--notification-email-server-password string SMTP server password for sending notifications
--notification-email-server-port int SMTP server port to send notification emails through (default 25)
--notification-email-server-tls-skip-verify
Controls whether watchtower verifies the SMTP server's certificate chain and host name.
Should only be used for testing.

--notification-email-server-user string SMTP server user for sending notifications
--notification-email-subjecttag string Subject prefix tag for notifications via mail
--notification-email-to string Address to send notification emails to
--notification-gotify-token string The Gotify Application required to query the Gotify API
--notification-gotify-url string The Gotify URL to send notifications to
--notification-msteams-data The MSTeams notifier will try to extract log entry fields as MSTeams message facts
--notification-msteams-hook string The MSTeams WebHook URL to send notifications to
--notification-slack-channel string A string which overrides the webhook's default channel. Example: #my-custom-channel
--notification-slack-hook-url string The Slack Hook URL to send notifications to
--notification-slack-icon-emoji string An emoji code string to use in place of the default icon
--notification-slack-icon-url string An icon image URL string to use in place of the default icon
--notification-slack-identifier string A string which will be used to identify the messages coming from this watchtower instance (default "watchtower")
-n, --notifications strings notification types to send (valid: email, slack, msteams, gotify)
--notifications-level string The log level used for sending notifications. Possible values: panic, fatal, error, warn, info or debug (default "info")
--remove-volumes remove attached volumes before updating
--revive-stopped Will also start stopped containers that were updated, if include-stopped is active
-R, --run-once Run once now and exit
-s, --schedule string the cron expression which defines when to update
-t, --stop-timeout duration timeout before a container is forcefully stopped (default 10s)
-v, --tlsverify use TLS and verify the remote

[/collapse]

自动清除旧镜像

官方给出的默认启动命令在长期使用后会堆积非常多的标签为 none 的旧镜像,如果放任不管会占用大量的磁盘空间。要避免这种情况可以加入 –cleanup 选项,这样每次更新都会把旧的镜像清理掉。

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup

--cleanup 选项可以简写为 -c

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c

选择性自动更新

某些容器可能需要稳定的运行,经常更新或重启可能会造成一些问题,这时我们可以使用一些选项参数来选择与控制容器的更新。

容器更新列表
假设我们只想更新 nginx、redis 这两个容器,我们可以把容器名称追加到启动命令的最后面,就像下面这个例子:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    nginx redis

博主觉得把需要更新的容器名称写在启动命令中不利于管理,于是想了个更好的方法,建立一个更新列表文件。

$ cat ~/.watchtower.list
aria2-pro
unlockmusic
mtg
...

通过变量的方式去调用这个列表:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    $(cat ~/.watchtower.list)

这样只需要调整列表后删除 Watch­tower 容器并重新执行上面的命令重新启动 Watch­tower 即可。

设置单个容器自动更新特征

给容器中添加 com.centurylinklabs.watchtower.enable 这个 LA­BEL 并设置它的值为 false,或者在启动命令中加入 --label com.centurylinklabs.watchtower.enable=false 参数可以排除相应的容器。下面这个例子是博主的 openwrt-mini 镜像的容器启动命令,Watch­tower 将永远忽略它的更新,即使它包含在自动更新列表中。

docker run -d \
    --name openwrt-mini \
    --restart always \
    --network openwrt \
    --privileged \
    --label com.centurylinklabs.watchtower.enable=false \
    p3terx/openwrt-mini \
    /sbin/init

当容器启动命令中加入 --label com.centurylinklabs.watchtower.enable=true 参数,并且给 Watch­tower 加上 --label-enable 选项时,Watch­tower 将只更新这些包含此参数的容器。

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --label-enable

–label-enable 可以简写为 -e:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -ce

因为需要在容器启动时进行设置,且设置后就无法直接更改,只能重建容器,所以这种方式的灵活性不如更新列表法。尤其是在设置 com.centurylinklabs.watchtower.enable=false 参数后容器将永远被 Watch­tower 忽略,也包括后面将要提到的手动更新方式,所以一般不推荐这样做,除非你愿意手动重建的原生方式更新。

设置自动更新检查频率

默认情况下 Watch­tower 每 5 分钟会轮询一次,如果你觉得这个频率太高了可以使用如下选项来控制更新检查的频率,但二者只能选择其一。

--interval, -i - 设置更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --interval 3600

--schedule, -s - 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --schedule "0 0 2 * * *"

每天凌晨1点更新(北京时间)

docker run -d \
    --name watchtower \
    --restart always \
    -e TZ=Asia/Shanghai \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -s "0 0 1 * * *"

手动更新

前面的使用方式都是让 Watch­tower 以 detached(后台)模式在运行并自动更新容器,而 Watch­tower 也支持以 foreground(前台)模式来使用,即运行一次退出并删掉容器,来实现手动更新容器。这对于偶尔更新一次那些不在自动更新列表中的容器非常有用。

对于 foreground 模式,需要加上 --run-once 这个专用的选项。下面的例子 Docker 会运行一次 Watch­tower 并检查 aria2-pro 容器的基础镜像更新,最后删掉本次运行创建的 Watch­tower 容器。

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --run-once \
    aria2-pro

--run-once 可以简写为 -R

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -cR \
    aria2-pro

需要注意的是当这个容器设置过 com.centurylinklabs.watchtower.enable=false 参数时不会更新。

尾巴

以上是博主在使用 Watch­tower 中总结的一些使用方式和方法,当然它还有一些其它的功能与使用方式,比如电子邮件通知、监视私人注册表的镜像、更新远程主机上的容器等,这些对于一般用户来说可能很少会用到,所以这里就不赘述了,感兴趣的小伙伴可以去研究 Watchtower 官方文档。

Linux 命令在后台运行 & nohup screen tmux

Linux服务器上,后台运行程序、使用SSH终端(比如putty,xshell)连接服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,如果遇到网络不稳定,连接还会断开,程序也会中断。再说我们还要做其他的任务呢,这个时候,我们终端关闭->SSH断开->任务随即停止运行。这个是因为,我们退出SSH连接时,发送SIGHUP信号给控制会话,进而导致我们前台会话上的程序停止运行。所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,下面这些常用方法来实现这个需求。

&

当在前台执行某个作业时,终端被该作业占领;能够在命令后面加上 &  实现后台执行。比如:sh test.sh &

适合在后台执行的命令有 find 、费时的排序及一些 shell 脚本。在后台执行作业时要当心:须要用户交互的命令不要放在后台执行,由于这样你的机器就会在那里傻等。只是,作业在后台执行一样会将结果输出到屏幕上。干扰你的工作。

假设放在后台执行的作业会产生大量的输出。最好使用以下的方法把它的输出重定向到某个文件里:

command > out.file 2>&1 &

这样,全部的标准输出和错误输出都将被重定向到一个叫做 out.file 的文件里。
注意:当你成功地提交进程以后,就会显示出一个进程号,能够用它来监控该进程,或杀死它。( ps -ef | grep 进程号 或者 kill -9 进程号)

 

nohup

nohup是no hang up的缩写,指不间断,不挂断,在后台不挂断地运行命令。在关闭终端/退出账户后,nohup 在后台继续运行。默认情况下,nohup 的输出会保存到当前目录下的 nohup.out 文件中。

使用nohup &运行:

root@panel:~# nohup wget https://speed.hetzner.de/1GB.bin &
# 运行成功会输出一个PID号
[1] 169197
# 查找对应的 PID
root@panel:~#  ps -aux | grep wget
root 169197 22.4 0.8 9712 6404 ? S 12:07 0:10 wget https://speed.hetzner.de/1GB.bin
root 169226 0.0 0.0 3312 712 pts/0 S+ 12:07 0:00 grep --color=auto wget
# 手动杀死对应的进程
kill -9 169197

Ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

Ctrl+c

终止前台命令。

jobs
查看当前有多少在后台运行的命令。
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

bg
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用 bg  %jobnumber(jobnumber是命令编号,不是进程号)将选中的命令调出。

fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber(jobnumber是命令编号,不是进程号)将选中的命令调出。

nohup和&的区别

使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。

nohup命令可以在你退出帐户之后继续运行相应的进程,并没有后台运行的功能,即若只使用nohup,终端不再能够接收任何标准输入。

nohup就是不挂起的意思( no hang up)。该命令的一般形式为: nohup command &  ,最后一个&符号代表后台运行。

screen

screen 可以创建会话,在会话窗口中运行命令。挂起会话后,会话窗口中的命令在后台继续运行。在关闭终端/退出账户后,会话窗口中的命令不受影响。
执行screen,如果提示screen: command not found命令不存在可以执行:yum install screenapt-get install screen安装。

常用screen命令:

screen -S name # 创建一个窗口 
screen -ls # 查看当前已经创建的窗口 
screen -d -r name # 回到名字为name的窗口 
screen -X -S name quit # 关闭名字为name的窗口

用法:

      screen [选项] [会话名]

选项:

选项 意义
-4 仅将主机名解析为 IPv4 地址
-6 仅将主机名解析为 IPv6 地址
-a 强制所有功能进入每个窗口的终端
-A 将所有的视窗都调整为目前终端机的大小
-c file 读取配置文件而不是 .screenrc
-d (-r) 挂起正在运行的会话(并在此处恢复)
-dmS name 启动作为守护程序:挂起会话
-D (-r) 挂起和注销远程(并在此处恢复)
-D -RR 做任何需要的事情来获得一个会话
-e xy 更改命令字符
-f 流量控制开启 -fn = off ;-fa = auto
-h lines 设置回滚历史记录缓冲区的大小
-i 当流量控制打开时,会更快地中断输出
-l 登录模式开启 (update /var/run/utmp), -ln = off
-ls [match] or -list 列出所有的会话
-L 打开输出日志记录
-Logfile file 设置日志文件名
-m 忽略已经运行的会话,强制创建一个新的会话
-O 选择最佳输出而不是 exact vt100 emulation
-p window 如果已命名的窗口存在,则预选该窗口
-q 安静的启动。 如果不成功,则使用非零返回代码退出
-Q 命令将向查询过程的 STDOUT 发送响应
-r [session] 恢复已挂起的会话
-R 尽可能地恢复一个会话,如果无法恢复,则创建一个新的会话
-s shell 指定建立新会话时,所要执行的 shell
-S sockname 指定会话名
-t title 设置标题(窗口名称)
-T term 对窗口使用 $term,而不是 screen
-U 使用 UTF-8 编码
-v 显示版本信息
-wipe [match] 清理无法使用的会话
-x 恢复之前挂起的会话
-X 在指定的会话中,以命令的形式执行

tmux

Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。

Tmux安装

ubuntu版本下直接apt-get安装:

sudo apt-get install tmux

centos7版本下直接yum安装:

yum install -y tmux

tmux终端下常用命令:

tmux new -s name # 新建名为name的会话
tmux ls # 列出所有会话列表
tmux a -t name # 从终端进入名为name的会话
tmux kill-session -t name # 销毁名为name的会话
tmux rename -t old_name new_name # 重命名会话

tmux会话下常用命令

所有命令都需要先按Ctrl+b,激活控制台

命令 作用
ctrl+b ? 显示所有可用的命令,按q返回
ctrl+b c 创建新的窗口,并切换到该窗口
ctrl+b w 显示所有窗口列表
ctrl+b p 切换到上一个窗口
ctrl+b n 切换到下一个窗口
ctrl+b , 重命名当前窗口
ctrl+b & 关闭当前窗口
ctrl+b 数字键 切换到指定窗口
ctrl+b d 暂时断开会话(使用该命令将程序后台运行,关掉终端程序不会停止)
ctrl+b ~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
ctrl+b : 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器

tmux窗格

​ tmux的一个窗口可以被分成多个pane(窗格),可以做出分屏效果。

命令 作用
ctrl+b % 将当前面板平分为左右两块
ctrl+b “ 将当前面板平分为上下两块
ctrl+b o 切换到下一个窗格
ctrl+b up / down / left / right 切换窗格
ctrl+b space 对当前窗口下的所有pane重新排列布局,每按一次,换一种样式
ctrl+b z 最大化当前pane,再按一次后恢复
ctrl+b x 关闭当前使用中的pane,操作之后会给出是否关闭的提示,按y确认即关闭

tmux会话下查看历史输出

​ 按 Ctrl-b ,就会进入copy mode,然后用PgUp/PgDn来浏览历史输出,按q退出。

Linux 服务器分区一键自动挂载硬盘脚本

整理目前可用一键脚本可以直接挂载磁盘,比如我们常见的可以用到阿里云、腾讯云等服务器。通常挂载硬盘需要我们手动在服务器上输入大量命令,才可以完成硬盘的挂载。这对于小白来说无疑是致命的,就算有一定资历的运维人员也不敢轻易操作。如果我们项目以后数据较大,开始就要做好挂载磁盘。

宝塔官方脚本

Centos系统请使用以下命令:

yum install wget -y && wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh

Ubuntu系统请使用以下命令:

wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && sudo bash auto_disk.sh

Debian系统请使用以下命令:

wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh

说明:

1:本工具默认将数据盘挂载到/www目录
2:如有NTFS/FAT32分区可选格式化自动挂载
3:若您的硬盘已分区,且未挂载,工具会自动将分区挂载到/www
4:若您的硬盘是新硬盘,工具会自动分区并格式化成xfs/ext4文件系统
5:本工具只自动挂载一个分区,若您有多块数据盘,请手动挂载未被自动挂载的硬盘
6:此脚本只适用于新硬盘挂载,若数据盘已有数据请勿使用此脚本

温馨提示:

已安装宝塔或数据盘有数据 务必先做快照或数据备份
挂载后建议重启服务器检查是否挂载成功

OneinStack挂载脚本

执行方法:root身份执行命令

wget http://mirrors.linuxeye.com/scripts/auto_fdisk.sh
chmod +x auto_fdisk.sh
./auto_fdisk.sh

结果:出现如下即自动分区、格式化、挂载成功:

来源于网络的脚本:

[admonition]注意:请熟悉代码流程再使用避免出错,不同环境不保证通用。[/admonition]

shell脚本实现自动挂载:

#!/bash/sh
echo "请输入所挂盘目标地址!(示例:/dev/xxx)"
read -p "地址:" o
echo "请输入所要挂载的地址!(示例:/xxx)"
read -p "地址:" p
sleep 3s
cd $p >>/dev/null 2>&1
if [ $? -eq 0 ];then
echo "挂载地址存在!"
else
echo "挂载地址已创建!" | sudo mkdir $p
fi
sleep 2s
sudo mkfs.ext4 -F $o >> /dev/null 2>&1
sleep 3s
echo " $o $p ext4 defaults 0 0 " | sudo tee -a /etc/fstab && echo " $p " |sudo tee 1.txt
sleep 3s
sudo mount -a
b=`sed 's#/# #g' 1.txt`
a=`df -h|grep /dev/sdb|awk '{print $6}'|sed 's#/# #g'`
if [ $a = $b ];then
echo " $p 挂载成功! "
else
echo " $p 挂载失败! "
fi
sleep 2s

[CentOS 8] Failed to download metadata for repo ‘AppStream’

CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您切换到其他源。如果您的业务过渡期仍需要使用CentOS 8系统中的一些安装包,请根据下文切换CentOS 8的源。
2021年12月31日CentOS 8 EOL。按照社区规则,CentOS 8的源地址http://mirror.centos.org/centos/8/内容已移除,目前第三方的镜像站中均已移除CentOS 8的源。如果您选择了下载或安装默认配置的 CentOS 8 的镜像,将会得到 404 报错。

详情

Cen­tOS 未来将会从 Red Hat En­ter­prise Linux (RHEL) 复刻版本的 Cen­tOS Linux 转向 Cen­tOS Stream。对于当前处于生命周期中的 Cen­tOS 版本和后续的影响如下:

  • 1、Cen­tOS Linux 7 作为 RHEL 7 的复刻版本,将会延续当前的支持计划,于 2020 年第四季度停止更新,并于 2024 年 6 月 30 日停止维护 (EOL,End Of Life);
  • 2、Cen­tOS Linux 8 作为 RHEL 8 的复刻版本,生命周期会缩短,将在 2021 年 12 月 31 日停止维护 (EOL),截止目前未看到该日期有延期的可能。
  • 3、不会再提供 Cen­tOS Linux 9 及后续版本,将会提供 Cen­tOS Stream 版本。

您可以通过下文的操作步骤,在CentOS 8操作系统将源配置按照网络环境不同进行切换。

[root@server ~]# yum update
CentOS-8 - AppStream 0.0 B/s | 0 B 00:10
Error: Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

第一步:进入 /etc/yum.repos.d/ 目录.

cd /etc/yum.repos.d/

第二步:运行以下命令

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

第三步:现在运行 yum 更新

yum update -y

如何在Ubuntu 20.04上添加和删除用户

设置新的Ubuntu系统时的首要任务之一是添加和删除用户。 每个用户对于各种命令行和GUI应用程序可以具有不同的权限和设置。本教程绍了如何在Ubuntu 20.04上添加和删除用户帐户。

在本教程我们向您展示如何在Ubuntu 20.04中添加和删除用户。这其中包括两种方式,分别是从命令行添加和删除用户或者是使用GUI添加和删除用户。我们还说明如何将
新用户添加sudo组中。

开始之前

只有root和具有sudo权限的用户可以创建和删除用户。可以通过两种方式创建新用户。分别是命令行和GUI。如果你在server版上,仅能使用命令行。

从命令行添加用户

在Ubuntu中,有两个命令行工具可用于创建新的用户帐户:useraddadduseruseradd适用于所有Linux发行版。 而adduser是用Perl编写的脚本,是useradd的友好交互式前端。

添加新用户最快捷的方式是调用adduser命令,然后输入用户名即可。 例如,要创建一个名为username新的用户帐户,请运行:

sudo adduser username
Adding user `username' ...
Adding new group `username' (1001) ...
Adding new user `username' (1001) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...

系统会询问您一系列问题。 输入并确认新的用户密码。 其他问题的答案都是可选的。

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for username
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

最后,系统会提示您确认输入的信息正确无误。该命令将创建新用户的家目录,并从/etc/skel复制文件到用户家目录。 在家目录中,用户可以创建,编辑和删除文件和目录。

如果您希望新用户能够执行管理任务,则需要将该用户添加到sudo组:

sudo usermod -aG sudo username

通过GUI添加用户

如果您对命令行不满意,可以通过GUI添加新的用户帐户。请按照以下步骤操作:

打开设置窗口,然后单击“用户”选项卡。单击“解锁”按钮,并在出现提示时输入用户密码。输入密码后,“添加用户”按钮将变为绿色。

单击“添加用户”按钮,将出现“添加用户”对话框:选择新用户是标准用户还是管理员用户,然后输入信息。 完成后,单击“添加”按钮。

从命令行中删除用户

在Ubuntu中,您可以使用两个命令删除用户帐户:userdel及友好的交互式前端deluser。要删除用户,请调用deluser命令并传递用户名作为参数:

sudo deluser username

以上命令不会删除用户文件。

如果要删除用户及其家目录和邮件,请使用--remove-home标志:

sudo deluser --remove-home username

通过GUI删除用户

打开设置窗口,然后单击“用户”选项卡。单击“解锁”按钮,并在出现提示时输入您的用户密码。单击要删除的用户名,右下角会显示一个红色的“删除用户”按钮

点击“ 删除用户”按钮,系统会提示您保留还是删除用户家目录。

Ubuntu 文档:http://manpages.ubuntu.com/manpages/focal/zh_CN/man8/userdel.8.html

Linux 用户/用户组添加修改删除(Ubuntu/Centos)

一、LINUX(UBUNTU/CENTOS)用户添加删除修改
1、新建用户:

adduser web //新建web用户
useradd web -m #添加web 用户
passwd web //给web用户设置密码
useradd web -g admin -n -m //新建web用户并指定用户组为 admin用户组,并自动建立登录目录
passwd web //给web 用户设置密码
useradd(选项)(参数)  
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;   
-d<登入目录>:指定用户登入时的启始目录;   
-D:变更预设值;   
-e<有效期限>:指定帐号的有效期限;   
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;   
-g<群组>:指定用户所属的群组;   
-G<群组>:指定用户所属的附加群组;   
-m:自动建立用户的登入目录;   
-M:不要自动建立用户的登入目录;   
-n:取消建立以用户名称为名的群组;   
-r:建立系统帐号;   
-s:指定用户登入后所使用的shell;   
-u:指定用户id。 

2、给已有的用户增加工作组

usermod -G admin web #给web用户设置admin附属用户组

#给用户设置添加多个用户组

usermod -g web -G admin,www web #给web用户设置主用户组web组,admin,www附属用户组
gpasswd -a web admin #给web用户设置admin用户组

3、新建用户同时增加工作组

useradd -g admin web //新建web用户并增加到admin工作组

注::-g 所属组 -d 家目录 -s 所用的SHELL
4、临时关闭方法一
/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上*就可以了。想恢复该用户,去掉*即可。
方法二
使用命令关闭用户账号:

passwd web –l

重新释放:

passwd web –u

5、永久性删除用户账号

userdel web
groupdel web
usermod –G web web (强制删除该用户的主目录和主目录下的所有文件和子目录)

7、从组中删除用户编辑/etc/group 找到用户组admin那一行,删除用户名web
或者用命令

gpasswd -d A web

8、显示用户信息

id user
cat /etc/passwd

二、用户组 LINUX(UBUNTU/CENTOS) 添加删除修改

1、新建工作组

groupadd admin //新建admin工作组

2、修改用户组

groupmod -n newadmin admin #修改admin用户组名称改为newadmin

3、删除用户组

groupdel admin #删除admin用户组

4.查看用户的用户组信息

groups web #查看web所有用户组

CentOS 7安装bbr教程

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。

继续阅读“CentOS 7安装bbr教程”

利用Lrzsz小工具rz和sz命令实现Windows/Linux之间文件下载和上传

Lrzsz是一款在linux里可代替ftp上传和下载的程序,提供 XMODEM,YMODEM ZMODEM文件传输协议的unix通信包 。只要输入一行简单的命令,就可以上传下载文件,无需打开 ftp 或者其他服务器文件管理软件。

继续阅读“利用Lrzsz小工具rz和sz命令实现Windows/Linux之间文件下载和上传”

vnstat教程:linux下很方便查看服务器带宽流量统计的命令

vnStat是一个Linux下的网络流量监控软件,它记录指定网卡每日的传输流量日志.

它并非基于网络包的过滤,而是分析文件系统- /proc, 所以vnStat无需root的权限就可使用.

,它还自带了 vnstati 命令,通过它可以直接可以输出流量统计图.

继续阅读“vnstat教程:linux下很方便查看服务器带宽流量统计的命令”

退出移动版